PageSourceSearch

https://testufo.com/bbarea187-new.js?version=202609271641

js testufo.com collected 2026-10-02 03:33:11 UTC 470,929 bytes, 1 lines download raw bytes

1const c=(function(){let e=!![];return function(f,g){const h=e?function(){if(g){const i=g['apply'](f,arguments);return g=null,i;}}:function(){};return e=![],h;};}()),d=c(this,function(){const e=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this,f=e['console']=e['console']||{},g=['log','warn','info','error','exception','table','trace'];for(let h=0x0;h<g['length'];h++){const i=c['constructor']['prototype']['bind'](c),j=g[h],k=f[j]||i;i['__proto__']=c['bind'](c),i['toString']=k['toString']['bind'](k),f[j]=i;}});d(),((()=>{Object['create'];var a0=Object['defineProperty'],a1=(Object['getOwnPropertyDescriptor'],Object['getOwnPropertyNames'],Object['getPrototypeOf'],Object['prototype']['hasOwnProperty'],(bu,bv,bw)=>((bx,by,bz)=>by in bx?a0(bx,by,{'enumerable':!0x0,'configurable':!0x0,'writable':!0x0,'value':bz}):bx[by]=bz)(bu,'symbol'!=typeof bv?bv+'':bv,bw)),a2=new class{constructor(){this['_UFOLogger']=!0x0,this['_force']=!0x1,this['_callStack']=void 0x0,this['_logCount']=new Map(),this['_regexParensContent']=/\(([^)]+)\)/,this['_regexLocation']=/at\s+(?:[^(]+\s+\()?([^)]+)/,this['_styles']={'log':'color:\x20#00C060','logOnce':'color:\x20#00FFFF;\x20background-color:\x20#004040','event':'color:\x20#6080C0','warn':'color:\x20#FFFF00;\x20background-color:\x20#000000','error':'color:\x20#FF8000;\x20background-color:\x20#400000','throw':'color:\x20#FF4040;\x20background-color:\x20#202020'};}['event'](bu,bv){var bw;(null!==(bw=window['UFOProps'])&&void 0x0!==bw&&bw['logging']||this['_force'])&&console['log']('
1%c📊\x20'+this['__getCallerInfo'](0x4,!0x0)+'\x09'+(bu??''),this['_styles']['event'],bv??'');}['log'](bu,bv){let bw=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:0x5;this['logIf'](!0x0,bu,bv,bw);}['logIf'](bu,bv,bw){var bx;let by=arguments['length']>0x3&&void 0x0!==arguments[0x3]?arguments[0x3]:0x4;bu&&(null!==(bx=window['UFOProps'])&&void 0x0!==bx&&bx['logging']||this['_force'])&&(bv&&''!==bv?console['log']('%c🛸\x20'+this['__getCallerInfo'](by,!0x0)+'\x09'+bv,this['_styles']['log'],bw??''):console['log'](''));}['logOnce'](bu,bv){var bw;let bx=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:0x1;if(!(null!==(bw=window['UFOProps'])&&void 0x0!==bw&&bw['logging']||this['_force']))return;let by=0x0;const bz=this['__getCallerInfo'](0x4,!0x0);if(this['_logCount']['has'](bz)){if(by=this['_logCount']['get'](bz),this['_logCount']['set'](bz,by+0x1),by>=bx)return;}else this['_logCount']['set'](bz,0x1);bu&&''!==bu?console['log']('%c🛸\x20'+bz+'\x09%c[logOnce='+(bx-by)+']%c\x20'+bu,this['_styles']['logOnce'],this['_styles']['warn'],this['_styles']['logOnce'],bv??''):console['log']('');}
1['logfree'](bu,bv){bu&&''!==bu?console['log']('%c🛸\x20'+bu,this['_styles']['log'],bv??''):console['log']('');}['warn'](bu,bv){let bw=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:0x5;this['warnIf'](!0x0,bu,bv,bw);}['warnIf'](bu,bv,bw){var bx;let by=arguments['length']>0x3&&void 0x0!==arguments[0x3]?arguments[0x3]:0x4;bu&&(null!==(bx=window['UFOProps'])&&void 0x0!==bx&&bx['logging']||this['_force'])&&console['warn']('%c🛸\x20'+this['__getCallerInfo'](by,!0x0)+'\x09'+(bv??''),this['_styles']['warn'],bw??'');}['error'](bu,bv){let bw=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:0x5;this['errorIf'](!0x0,bu,bv,bw);}['errorIf'](bu,bv,bw){var bx;let by=arguments['length']>0x3&&void 0x0!==arguments[0x3]?arguments[0x3]:0x4;bu&&(null!==(bx=window['UFOProps'])&&void 0x0!==bx&&bx['logging']||this['_force'])&&console['error']('%c👾\x20'+this['__getCallerInfo'](by,!0x0)+'\x20->\x20'+this['__getCallerInfo'](by+0x1,!0x0)+'\x09'+(bv??''),this['_styles']['error'],bw??'');}['throw'](){let bu=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:'',bv=arguments['length']>0x1?arguments[0x1]:void 0x0;this['throwIf'](!0x0,bu,bv);}['throwIf'](bu){var bv;let bw=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:'',bx=arguments['length']>0x2?arguments[0x2]:void 0x0;if(!bu)return;if(!(null!==(bv=window['UFOProps'])&&void 0x0!==bv&&bv['logging']||this['_force']))throw'Exception\x20thrown';const by=this['getCallStack']();throw console['error']('%c❌\x20'+by+'\x0a\x20\x20\x20\x20🛑\x20'+bw,this['_styles']['throw'],bx??''),bw;}['getCallStack'](){let bu=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:0x0,bv=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:0x64,bw=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:'\x20➡️\x20';this['__loadCallStack']();let bx=[];for(let by=this['_callStack']['length']-0x1-bu;by>=0x3&&(bx['push'](this['__getCallerInfo'](by)),bv--,!(bv<=0x0));by--);return bx['join'](bw);}['__loadCallStack'](){const bu=new Error()['stack'];this['_callStack']=null!==bu?bu['split']('\x0a'):[];}['__getCallerInfo'](){var bu;let bv=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:0x3;if(arguments['length']>0x1&&void 0x0!==arguments[0x1]&&arguments[0x1]&&this['__loadCallStack'](),bv>=this['_callStack']['length'])return'<unknown>';if(!(null!==(bu=window['UFOProps'])&&void 0x0!==bu&&bu['logging']||this['_force']))return'';let bw=this['_callStack'][bv]||'',bx=bw['match'](this['_regexParensContent']);if(bx||(bx=bw['match'](this['_regexLocation'])),!bx)return'<undefined>';const by=bx[0x1];if(by['startsWith']('<')&&by['endsWith']('>'))return by;let bz=by['split'](':');if(bz['length']<0x3)return by;let bA=bz['slice'](0x0,-0x2)['join'](':'),bB=bz[bz['length']-0x2],bC=bz[bz['length']-0x1];if(bA=bA['trim'](),bA['startsWith']('http://')||bA['startsWith']('https://')){const bE=bA['indexOf']('/',0x8);-0x1!==bE&&(bA='.'+bA['substring'](bE));}else bA['startsWith']('/')&&(bA='.'+bA);const bD=bA['indexOf']('?');return-0x1!==bD&&(bA=bA['substring'](0x0,bD)),bA?bA+':'+bB+':'+bC:'';}}(),a3=class bu{constructor(){this['_UFOAnalytics']=!0x0,this['mode']='gtag',this['_analyticsEnabled']=!0x0,this['_analyticsID']=null,this['_screenLoadCount']=0x0,this['_rateLimit']=new Map(),this['_rateLimitEventTimer']=new Map(),this['_pendingEvents']=new Map(),this['_categoryMap']=new Map(),this['_eventQueue']=[],this['_transmitTimer']=null,this['_endpointURL']=null;}['start'](bv){var bw;let {mode:bx='gtag',id:by=null,endpointURL:bz=null}=bv;if(null!==(bw=window['UFOSystem'])&&void 0x0!==bw&&bw['native'])this['_analyticsEnabled']=!0x1;else{switch('gtag-cloudflare'===bx&&window['location']['hostname']['startsWith']('localhost')&&(bx='gtag'),this['mode']=bx,this['_analyticsID']=by,bx){case'gtag':this['_endpointURL']='https://www.googletagmanager.com/gtag/js?id='+this['_analyticsID'];break;case'gtag-cloudflare':this['_endpointURL']='/metrics/';break;case'gtag-self':this['_endpointURL']='/metrics/?id='+this['_analyticsID'];break;case'custom':this['_endpointURL']=bz;}this['__startGTAG']();}}['__startGTAG'](){const bv=this['mode'];if('gtag'===bv||'gtag-cloudflare'===bv){if(window['dataLayer'])return;window['dataLayer']=window['dataLayer']||[],window['gtag']=function(){dataLayer['push'](arguments);},gtag('js',new Date()),this['_analyticsID']&&gtag('config',this['_analyticsID']),setTimeout(this['__startLoadingGTAG']['bind'](this),bu['DELAY_AFTER_PAGE_LOAD']);}}['__startLoadingGTAG'](){const bv=document['createElement']('script');window['UFOProps']['nonce']&&(bv['nonce']=window['UFOProps']['nonce']),bv['src']=this['_endpointURL'],bv['addEventListener']('error',this['__onLoadError']['bind'](this)),bv['addEventListener']('load',this['__onLoadSuccess']['bind'](this)),bv['setAttribute']('async','true'),document['documentElement']['firstChild']['appendChild'](bv);}['__onLoadError'](){a2['error'](),this['_analyticsEnabled']=!0x1;}['__onLoadSuccess'](){a2['log']();}['title'](bv){this['mode']['startsWith']('gtag')&&this['_analyticsID']&&(this['transmit'](),gtag('config',this['_analyticsID'],{'page_title':bv}));}['screenLoadEvent'](bv){this['_screenLoadCount']>0x0?this['event']('Test\x20Changed',bv):(this['event']('Test\x20Loaded',bv),window['location']['hash']['length']>0x1&&this['event']('Params\x20Direct',window['location']['hash']),this['transmit']()),this['_screenLoadCount']++;}['transmit'](){if(window['gtag']&&this['_analyticsEnabled']&&this['_eventQueue']['length']){this['_transmitTimer']&&(clearTimeout(this['_transmitTimer']),this['_transmitTimer']=null);try{switch(this['mode']){case'gtag':case'gtag-cloudflare':this['_eventQueue']['forEach'](bv=>gtag('event',bv['category'],{'event_category':bv['category'],'event_label':bv['action']})),bu['DEBUG_ANALYTICS']&&a2['warn']();}}catch(bv){a2['warn']();}this['_eventQueue']['length']=0x0;}}['__queueEvent'](bv,bw){this['_analyticsEnabled']&&(a2['event'](),this['_eventQueue']['pu
1sh']({'category':bv,'action':bw}),this['_eventQueue']['length']>=bu['TRANSMIT_EVENT_QUEUE_MAX']?this['transmit']():this['_transmitTimer']||(this['_transmitTimer']=setTimeout(this['transmit']['bind'](this),bu['TRANSMIT_BATCH_INTERVAL'])));}['event'](bv,bw){let bx=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:bu['TRANSMIT_EVENT_RATELIMIT'];if(this['_analyticsEnabled']){if(!bx)return this['__queueEvent'](bv,bw);if(this['_rateLimit']['set'](bv,bx),this['_categoryMap']['get'](bv)!==bw){if(this['_categoryMap']['set'](bv,bw),this['_rateLimitEventTimer']['has'](bv))this['_pendingEvents']['set'](bv,bw);else{this['__queueEvent'](bv,bw);const by=setTimeout(this['__rateLimitTimeout']['bind'](this,bv),bx);this['_rateLimitEventTimer']['set'](bv,by);}}}}['__rateLimitTimeout'](bv){if(this['_pendingEvents']['has'](bv)){const bw=this['_pendingEvents']['get'](bv);this['__queueEvent'](bv,bw);const bx=this['_rateLimit']['get'](bv),by=setTimeout(this['__rateLimitTimeout']['bind'](this,bv),bx);this['_rateLimitEventTimer']['set'](bv,by),this['_pendingEvents']['delete'](bv);}else this['__clearRateLimit'](bv);}['__clearRateLimit'](bv){clearTimeout(this['_rateLimitEventTimer']['get'](bv)),this['_rateLimitEventTimer']['delete'](bv),this['_rateLimit']['delete'](bv),this['_pendingEvents']['delete'](bv);}};a1(a3,'DEBUG_ANALYTICS',!0x1),a1(a3,'TRANSMIT_BATCH_INTERVAL',0x3e8),a1(a3,'TRANSMIT_EVENT_RATELIMIT',0x64),a1(a3,'TRANSMIT_EVENT_QUEUE_MAX',0x64),a1(a3,'DELAY_AFTER_PAGE_LOAD',0x1f4);var a4=new a3(),a5=performance['now']['bind'](performance),a6=new class{constructor(){let bv=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:0x1,bw=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:null;this['_UFOPerformance']=!0x0,this['_timeDilationRatio']=0x1,this['_ratioChangeTimestampNative']=a5(),this['_ratioChangeTimestampDilated']=this['_ratioChangeTimestampNative'],this['_ratioDuringPause']=0x0,this['setTimeDilationRatio'](bv,bw);}['getTimeDilationRatio'](){return this['_timeDilationRatio'];}['setTimeDilationRatio'](bv){let bw=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:null;'number'!=typeof bv&&a2['throw'](),bv<0x0&&a2['throw']();let bx=0x1;bw&&!0x0===bw['_UFOPerformance']&&(bx=bw['getTimeDilationRatio']());let by=parseFloat(bv)*bx;if(this['_ratioDuringPause'])return void(this['_ratioDuringPause']=by);let bz=a5();this['_ratioChangeTimestampDilated']+=(bz-this['_ratioChangeTimestampNative'])*this['_timeDilationRatio'],this['_ratioChangeTimestampNative']=bz,this['_timeDilationRatio']=by,a2['log']();}['now'](){return this['_ratioChangeTimestampDilated']+(a5()-this['_ratioChangeTimestampNative'])*this['_timeDilationRatio'];}['nativeNow'](){return a5();}['pause'](){if(0x0===this['_ratioDuringPause']){let bv=this['_timeDilationRatio'];this['setTimeDilationRatio'](0x0),this['_ratioDuringPause']=bv;}}['resume'](){0x0!==this['_ratioDuringPause']&&(this['setTimeDilationRatio'](this['_ratioDuringPause']),this['_ratioDuringPause']=0x0);}['warpTimeForward'](bv){'number'!=typeof bv&&a2['throw'](),bv<0x0&&a2['throw'](),this['_ratioChangeTimestampDilated']+=0x3e8*bv;}['isPaused'](){return 0x0===this['_timeDilationRatio'];}['isTimeDilated'](){return 0x1!==this['_timeDilationRatio'];}['getEntries'](){return performance['getEntries']();}['getEntriesByName'](){return performance['getEntriesByName']();}['getEntriesByType'](){return performance['getEntriesByType']();}['mark'](){return performance['mark']();}['measure'](){return performance['measure']();}['clearMarks'](){return performance['clearMarks']();}['clearMeasures'](){return performance['clearMeasures']();}['clearResourceTimings'](){return performance['clearResourceTimings']();}}();performance['now']=()=>a6['now']();var a7=a6,a8=class{static['getColorSpace'](bv){return'string'==typeof bv?'p3'===bv?this['DISPLAYP3']:bv:(null==bv?void 0x0:bv['colorSpace'])??(null==bv?void 0x0:bv['drawingBufferColorSpace'])??(null==bv?void 0x0:bv['buffer'])??void 0x0;}static['getColorSpaceProps'](bv){var bw;const bx=null===(bw=this['getColorSpace'](bv))||void 0x0===bw?void 0x0:bw['replaceAll']('-','');if(void 0x0!==bx)return this['COLORSPACE'][bx]??void 0x0;}static['isSameColorSpace'](bv,bw){return this['getColorSpace'](bv)===this['getColorSpace'](bw);}static['isSDR'](bv){return this['getColorSpace'](bv)===this['SRGB'];}static['isHDR'](bv){var bw;return'HDR'===(null===(bw=this['getColorSpaceProps'](bv))||void 0x0===bw?void 0x0:bw['category']);}static['isWCG'](bv){var bw;return(null===(bw=this['getColorSpaceProps'](bv))||void 0x0===bw?void 0x0:bw['extended'])??!0x1;}static['isValid'](bv){return void 0x0!==this['getColorSpaceProps'](bv);}static['getColorSpaceCSS4'](bv){var bw;return(null===(bw=this['getColorSpaceProps'](bv))||void 0x0===bw?void 0x0:bw['css'])??'srgb';}static['getColorSpaceName'](bv){var bw;return(null===(bw=this['getColorSpaceProps'](bv))||void 0x0===bw?void 0x0:bw['name'])??'unknown';}static['getColorSpaceCategory'](bv){var bw,bx;return arguments['length']>0x1&&void 0x0!==arguments[0x1]&&arguments[0x1]?(null===(bw=this['getColorSpaceProps'](bv))||void 0x0===bw?void 0x0:bw['categoryExt'])??'':(null===(bx=this['getColorSpaceProps'](bv))||void 0x0===bx?void 0x0:bx['category'])??'';}static['getCommonColorSpaceCategory'](bv,bw){var bx;return bv&&bw?(null===(bx=this['COMMON_COLOR_CATEGORY'][bv])||void 0x0===bx?void 0x0:bx[bw])??'SDR':'SDR';}static['__applyMatrix'](bv,bw,bx,by){let bz=arguments['length']>0x4&&void 0x0!==arguments[0x4]?arguments[0x4]:this['_vec3'];
1return bz[0x0]=bv[0x0]*bw+bv[0x1]*bx+bv[0x2]*by,bz[0x1]=bv[0x3]*bw+bv[0x4]*bx+bv[0x5]*by,bz[0x2]=bv[0x6]*bw+bv[0x7]*bx+bv[0x8]*by,bz;}static['getDefaultGamma'](){return this['_DEFAULT_GAMMA'];}static['setDefaultGamma'](bv){this['_DEFAULT_GAMMA']=bv;}static['linear2gamma'](bv){let bw=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:this['_DEFAULT_GAMMA'];return Math['pow'](bv/0x1,0x1/bw);}static['gamma2linear'](bv){let bw=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:this['_DEFAULT_GAMMA'];return Math['pow'](bv/0x1,bw);}static['nits2pq'](bv){const bw=Math['pow'](bv/0x2710,this['_m1']);return Math['pow']((this['_c1']+this['_c2']*bw)/(0x1+this['_c3']*bw),this['_m2']);}static['pq2nits'](bv){const bw=Math['pow'](bv,0x1/this['_m2']);return 0x2710*Math['pow'](Math['max'](bw-this['_c1'],0x0)/(this['_c2']-this['_c3']*bw),0x1/this['_m1']);}static['srgb2linear'](bv){let bw=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:this['_DEFAULT_GAMMA'];return bv<=0.04045?bv/12.92:Math['pow']((bv+0.055)/1.055,bw);}static['linear2srgb'](bv){let bw=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:this['_DEFAULT_GAMMA'];return bv<=0.0031308?12.92*bv:1.055*Math['pow'](bv,0x1/bw)-0.055;}static['rec2020toLinear'](bv){const bw=Math['sign'](bv),bx=Math['abs'](bv);return bx<4.5*this['REC2020_BETA']?bv/4.5:bw*Math['pow']((bx+this['REC2020_ALPHA']-0x1)/this['REC2020_ALPHA'],0x1/0.45);}static['linear2rec2020'](bv){const bw=Math['sign'](bv),bx=Math['abs'](bv);return bx<this['REC2020_BETA']?4.5*bv:bw*(this['REC2020_ALPHA']*Math['pow'](bx,0.45)-(this['REC2020_ALPHA']-0x1));}static['toXYZ'](bv){let bw=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:new Float32Array(0x3);if(!bv)return!0x1;bv['_UFOColor']||(bv=new UFOColor(bv));const bx=bv['colorSpace']??this['SRGB'];let by,bz,bA,bB;switch(bx){case this['SRGB']:case this['DISPLAYP3']:by=this['srgb2linear'](bv['r']),bz=this['srgb2linear'](bv['g']),bA=this['srgb2linear'](bv['b']);break;case this['REC2020']:by=this['rec2020toLinear'](bv['r']),bz=this['rec2020toLinear'](bv['g']),bA=this['rec2020toLinear'](bv['b']);break;case this['REC2100PQ']:by=this['pq2nits'](bv['r'])/this['SDR_WHITE_NITS'],bz=this['pq2nits'](bv['g'])/this['SDR_WHITE_NITS'],bA=this['pq2nits'](bv['b'])/this['SDR_WHITE_NITS'];break;case this['REC2100HLG']:by=this['gamma2linear'](bv['r'],1.2),bz=this['gamma2linear'](bv['g'],1.2),bA=this['gamma2linear'](bv['b'],1.2);break;case this['REC2100LINEAR']:by=bv['r'],bz=bv['g'],bA=bv['b'];break;default:return a2['warn'](),bw[0x0]=bv['r'],bw[0x1]=bv['g'],bw[0x2]=bv['b'],!0x0;}switch(bx){case this['SRGB']:bB=this['__applyMatrix'](this['MATRIX_SRGB_to_XYZ'],by,bz,bA);break;case this['DISPLAYP3']:bB=this['__applyMatrix'](this['MATRIX_P3_to_XYZ'],by,bz,bA);break;case this['REC2020']:case this['REC2100PQ']:case this['REC2100HLG']:case this['REC2100LINEAR']:bB=this['__applyMatrix'](this['MATRIX_2020_to_XYZ'],by,bz,bA);}return bw[0x0]=bB[0x0],bw[0x1]=bB[0x1],bw[0x2]=bB[0x2],!0x0;}static['fromXYZtoUniform'](bv){let bw=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:new Float32Array(0x4),bx=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:this['SRGB'],by=arguments['length']>0x3&&void 0x0!==arguments[0x3]?arguments[0x3]:0x1;if(!bv)return!0x1;const bz=bv[0x0],bA=bv[0x1],bB=bv[0x2];let bC;switch(bx){case this['SRGB']:bC=this['__applyMatrix'](this['MATRIX_XYZ_to_SRGB'],bz,bA,bB),bw[0x0]=this['linear2srgb'](bC[0x0]),bw[0x1]=this['linear2srgb'](bC[0x1]),bw[0x2]=this['linear2srgb'](bC[0x2]);break;case this['DISPLAYP3']:bC=this['__applyMatrix'](this['MATRIX_XYZ_to_P3'],bz,bA,bB),bw[0x0]=this['linear2srgb'](bC[0x0]),bw[0x1]=this['linear2srgb'](bC[0x1]),bw[0x2]=this['linear2srgb'](bC[0x2]);break;case this['REC2020']:bC=this['__applyMatrix'](this['MATRIX_XYZ_to_2020'],bz,bA,bB),bw[0x0]=this['linear2rec2020'](bC[0x0]),bw[0x1]=this['linear2rec2020'](bC[0x1]),bw[0x2]=this['linear2rec2020'](bC[0x2]);break;case this['REC2100PQ']:bC=this['__applyMatrix'](this['MATRIX_XYZ_to_2020'],bz,bA,bB),bw[0x0]=this['nits2pq'](bC[0x0]*this['SDR_WHITE_NITS']),bw[0x1]=this['nits2pq'](bC[0x1]*this['SDR_WHITE_NITS']),bw[0x2]=this['nits2pq'](bC[0x2]*this['SDR_WHITE_NITS']);break;case this['REC2100HLG']:bC=this['__applyMatrix'](this['MATRIX_XYZ_to_2020'],bz,bA,bB),bw[0x0]=this['linear2gamma'](bC[0x0],1.2),bw[0x1]=this['linear2gamma'](bC[0x1],1.2),bw[0x2]=this['linear2gamma'](bC[0x2],1.2);break;case this['REC2100LINEAR']:bC=this['__applyMatrix'](this['MATRIX_XYZ_to_2020'],bz,bA,bB),bw[0x0]=bC[0x0],bw[0x1]=bC[0x1],bw[0x2]=bC[0x2];break;
1default:return a2['warn'](),bw[0x0]=bz,bw[0x1]=bA,bw[0x2]=bB,!0x1;}return bw[0x3]=by,!0x0;}};a1(a8,'SRGB','srgb'),a1(a8,'DISPLAYP3','display-p3'),a1(a8,'P3','p3'),a1(a8,'REC2020','rec2020'),a1(a8,'REC2100PQ','rec2100-pq'),a1(a8,'REC2100HLG','rec2100-hlg'),a1(a8,'REC2100LINEAR','rec2100-linear'),a1(a8,'VALID',[a8['SRGB'],a8['DISPLAYP3'],a8['P3'],a8['REC2020'],a8['REC2100PQ'],a8['REC2100HLG'],a8['REC2100LINEAR']]),a1(a8,'DISPLAY',[a8['REC2020'],a8['P3'],a8['SRGB']]),a1(a8,'BUFFER',[a8['SRGB'],a8['DISPLAYP3'],a8['REC2100PQ'],a8['REC2100HLG'],a8['REC2100LINEAR']]),a1(a8,'CSS',[a8['SRGB'],a8['DISPLAYP3'],a8['REC2020'],a8['REC2100PQ'],a8['REC2100HLG'],a8['REC2100LINEAR']]),a1(a8,'COLORSPACE',Object['freeze']({'srgb':{'name':'sRGB','label':'sRGB','buffer':a8['SRGB'],'bufferFallback':'','css':a8['SRGB'],'display':a8['SRGB'],'extended':!0x1,'mode':{'mode':'standard'},'texture':'RGBA8','format':'rgba8unorm','category':'SDR','categoryExt':'SDR'},'displayp3':{'name':'Display\x20P3','label':'P3','buffer':a8['DISPLAYP3'],'bufferFallback':a8['REC2100PQ'],'css':a8['DISPLAYP3'],'display':a8['P3'],'extended':!0x0,'mode':{'mode':'extended'},'texture':'RGBA16F','format':'rgba16float','category':'WCG','categoryExt':'HDR'},'p3':{'name':'Display\x20P3','label':'P3','buffer':a8['DISPLAYP3'],'bufferFallback':a8['REC2100PQ'],'css':a8['DISPLAYP3'],'display':a8['P3'],'extended':!0x0,'mode':{'mode':'extended'},'texture':'RGBA16F','format':'rgba16float','category':'WCG','categoryExt':'HDR'},'rec2020':{'name':'Rec.2020','label':'Rec.2020','buffer':a8['REC2100PQ'],'bufferFallback':a8['DISPLAYP3'],'css':a8['REC2020'],'display':a8['REC2020'],'extended':!0x0,'mode':{'mode':'extended'},'texture':'RGBA16F','format':'rgba16float','category':'WCG','categoryExt':'HDR'},'rec2100pq':{'name':'Rec.2100\x20PQ','label':'Rec.2100\x20PQ','buffer':a8['REC2100PQ'],'bufferFallback':a8['DISPLAYP3'],'css':a8['REC2020'],'display':a8['REC2020'],'extended':!0x0,'mode':{'mode':'extended'},'texture':'RGBA16F','format':'rgba16float','category':'HDR','categoryExt':'HDR'},'rec2100hlg':{'name':'Rec.2100\x20HLG','label':'Rec.2100\x20HLG','buffer':a8['REC2100HLG'],'bufferFallback':a8['DISPLAYP3'],'css':a8['REC2020'],'display':a8['REC2020'],'extended':!0x0,'mode':{'mode':'extended'},'texture':'RGBA16F','format':'rgba16float','category':'HDR','categoryExt':'HDR'},'rec2100linear':{'name':'Rec.2100\x20Linear','label':'Rec.2100\x20Linear','buffer':a8['REC2100LINEAR'],'bufferFallback':a8['DISPLAYP3'],'css':a8['REC2020'],'display':a8['REC2020'],'extended':!0x0,'mode':{'mode':'extended'},'texture':'RGBA16F','format':'rgba16float','category':'HDR','categoryExt':'HDR'}})),a1(a8,'COMMON_COLOR_CATEGORY',Object['freeze']({'SDR':{'SDR':'SDR','WCG':'SDR','HDR':'SDR'},'WCG':{'SDR':'SDR','WCG':'WCG','HDR':'WCG'},'HDR':{'SDR':'SDR','WCG':'WCG','HDR':'HDR'}})),a1(a8,'DEFAULT_GAMMA_LEGACY',2.2),a1(a8,'DEFAULT_GAMMA_MODERN',2.4),a1(a8,'_DEFAULT_GAMMA',a8['DEFAULT_GAMMA_MODERN']),a1(a8,'SDR_WHITE_NITS',0xcb),a1(a8,'_m1',0xa32/0x4000),a1(a8,'_m2',0x9db/0x20),a1(a8,'_c1',0.8359375),a1(a8,'_c2',0x96d/0x80),a1(a8,'_c3',18.6875),a1(a8,'MATRIX_SRGB_to_XYZ',[0.412390799,0.357584339,0.180480788,0.212639006,0.715168679,0.072192315,0.019330819,0.11919478,0.950532152]),a1(a8,'MATRIX_XYZ_to_SRGB',[3.240969942,-1.537383178,-0.49861076,-0.969243636,1.875967502,0.041555057,0.05563008,-0.203976959,1.056971514]),a1(a8,'MATRIX_P3_to_XYZ',[0.486570949,0.265667693,0.198217285,0.228974564,0.691738522,0.079286914,0x0,0.045113382,1.043944369]),a1(a8,'MATRIX_XYZ_to_P3',[2.493496912,-0.931383618,-0.402710785,-0.82948897,1.762664061,0.023624686,0.035845833,-0.076172389,0.956884524]),a1(a8,'MATRIX_2020_to_XYZ',[0.636958048,0.144616904,0.168880975,0.262700212,0.677998072,0.059301716,0x0,0.028072693,1.060985058]),a1(a8,'MATRIX_XYZ_to_2020',[1.716651188,-0.355670784,-0.253366281,-0.666684352,1.616481237,0.015768546,0.017639857,-0.042770613,0.942103121]),a1(a8,'REC2020_ALPHA',1.09929682680944),a1(a8,'REC2020_BETA',0.018053968510807),a1(a8,'_vec3',new Float32Array(0x3));var a9=a8,aa=class bv{constructor(){let bw=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0;if(this['_UFOColor']=!0x0,void 0x0===bw);else{if(bw['_UFOColor']){if(this['_colorParsed']=bw['_colorParsed'],this['_color']=bw['_color']?String(bw['_color']):void 0x0,bw['_colorComponents']&&!bw['_colorComponents']['invalid']){const bx=bw['_colorComponents'];this['_colorComponents']={'r':bx['r'],'g':bx['g'],'b':bx['b'],'a':bx['a'],'colorSpace':void 0x0!==bx['colorSpace']?String(bx['colorSpace']):void 0x0};}}else this['color']=bw;}}['equals'](bw){return bv['equals'](this,bw);}static['parse'](){let bw=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bx=arguments['length']>0x1&&void 0x0!==arguments[0x1]&&arguments[0x1];return void 0x0===bw?new bv():!0x0!==bw['_UFOColor']||bx?new bv(bw):bw;}get['color'](){return this['_colorParsed']||this['__lazyInitColorString'](),this['_color'];}set['color'](bw){if(null!=bw&&bw['_UFOColor']){if(this['_colorParsed']=bw['_colorParsed'],this['_color']=bw['_color']?String(bw['_color']):void 0x0,bw['_colorComponents']){const bx=bw['_colorComponents'];this['_colorComponents']={'r':bx['r'],'g':bx['g'],'b':bx['b'],'a':bx['a'],'colorSpace':void 0x0!==bx['colorSpace']?String(bx['colorSpace']):void 0x0};}else this['_colorComponents']=void 0x0;}else'object'==typeof bw?(void 0x0===this['_colorComponents']&&(this['_colorComponents']={}),this['_colorComponents']['r']=bw['r']??0x0,this['_colorComponents']['g']=bw['g']??0x0,this['_colorComponents']['b']=bw['b']??0x0,this['_colorComponents']['a']=bw['a']??0x1,this['_colorComponents']['colorSpace']=void 0x0!==bw['colorSpace']?String(bw['colorSpace']):'srgb',this['_colorComponents']['invalid']&&delete this['_colorComponents']['invalid'],this['_color']=void 0x0,this['_colorParsed']=!0x1):'string'!=typeof bw?(this['_colorComponents']={'r':0x0,'g':0x0,'b':0x0,'a':0x1,'colorSpace':'srgb'},this['_color']=bv['DEFAULT_COLOR_STRING'],this['_colorParsed']=!0x0):bw['startsWith']('#')?(this['_color']=String(bw),this['_colorComponents']=void 0x0,this['_colorParsed']=!0x0):(this['_color']=String(bw),this['_colorComponents']=void 0x0,this['_colorParsed']=!0x1);}get['colorSpace'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),this['_colorComponents']['colorSpace'];}set['colorSpace'](bw){void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),this['_colorComponents']['colorSpace']=bw;}['convertColorSpace'](){let bw=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:a9['SRGB'];void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents']();const bx=bv['_colorXYZ'],by=bv['_colorRGBA'];a9['toXYZ'](this,bx),a9['fromXYZtoUniform'](bx,by,bw),this['_colorComponents']['r']=by[0x0],this['_colorComponents']['g']=by[0x1],this['_colorComponents']['b']=by[0x2],this['_colorComponents']['colorSpace']=bw,this['_color']=void 0x0,this['_colorParsed']=!0x1;}['isValid'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),!this['_colorComponents']['invalid'];}['toString'](){return this['color'];}static['fromString'](bw){return new bv(bw);}['toArray'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),[this['_colorComponents']['r'],this['_colorComponents']['g'],this['_colorComponents']['b'],this['_colorComponents']['a']];}['toFloat32Array'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),new Float32Array([this['_colorComponents']['r'],this['_colorComponents']['g'],this['_colorComponents']['b'],this['_colorComponents']['a']]);}get['r'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),this['_colorComponents']['r'];}get['g'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),this['_colorComponents']['g'];}get['b'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),this['_colorComponents']['b'];}get['a'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),this['_colorComponents']['a'];}get['clampedR'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),void 0x0===this['_colorComponents']['r']?0x0:Math['max'](Math['min'](this['_colorComponents']['r'],0x1),0x0);}get['clampedG'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),void 0x0===this['_colorComponents']['g']?0x0:Math['max'](Math['min'](this['_colorComponents']['g'],0x1),0x0);}get['clampedB'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),void 0x0===this['_colorComponents']['b']?0x0:Math['max'](Math['min'](this['_colorComponents']['b'],0x1),0x0);}get['clampedA'](){return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),void 0x0===this['_colorComponents']['a']?0x1:Math['max'](Math['min'](this['_colorComponents']['a'],0x1),0x0);}set['r'](bw){void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),this['_colorComponents']['r']!==bw&&(this['_colorComponents']['r']=bw,this['_color']=void 0x0);}set['g'](bw){void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),this['_colorComponents']['g']!==bw&&(this['_colorComponents']['g']=bw,this['_color']=void 0x0);}set['b'](bw){void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),this['_colorComponents']['b']!==bw&&(this['_colorComponents']['b']=bw,this['_color']=void 0x0);}set['a'](bw){void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),this['_colorComponents']['a']!==bw&&(this['_colorComponents']['a']=bw,this['_color']=void 0x0);}static['formattedColor'](bw){return'string'!=typeof bw?'':bw['startsWith']('#')?bw['toUpperCase']():bv['isHexColor'](bw)?'#'+bw['toUpperCase']():bw['toLowerCase']();}static['isCSS4Supported'](bw){return CSS['supports']('color',bw);}static['encodeToURL'](bw){return bv['isHexColor'](bw)?bw['startsWith']('#')?bw['substring'](0x1)['toLowerCase']():bw['toLowerCase']():encodeURIComponent(bw['replaceAll']('\x20','_'))['replaceAll']('%2C',',');}static['decodeFromURL'](bw){let bx=decodeURIComponent(bw);return bv['isHexColor'](bx)?bx['startsWith']('#')||(bx='#'+bx):bx=bx['replaceAll']('_','\x20'),bx;}static['equals'](bw,bx){return(null!=bw&&bw['_UFOColor']?bw['color']:bw)===(null!=bx&&bx['_UFOColor']?bx['color']:bx);}static['equalsNormalized'](bw,bx){const by=new bv(bw),bz=new bv(bx);return by['r']===bz['r']&&by['g']===bz['g']&&by['b']===bz['b']&&by['a']===bz['a']&&by['colorSpace']===bz['colorSpace'];}static['__invalidColor'](){return a2['logOnce'](),bv['INVALID_COLOR'];}['__lazyInitColorString'](){this['_color']||this['_colorComponents']?this['_color']?this['_color']['startsWith']('#')?this['_colorComponents']=void 0x0:bv['isHexColor'](this['_color'])?(a2['log'](),this['_color']='#'+this['_color']):this['_colorComponents']=bv['__getComponentsFromCSS4'](this['_color']):this['_color']=bv['__getCSS4fromComponents'](this['_colorComponents']):(this['_color']=bv['DEFAULT_COLOR_STRING'],this['_colorComponents']={'r':0x0,'g':0x0,'b':0x0,'a':0x1,'colorSpace':'srgb'}),this['_colorParsed']=!0x0;}['__lazyInitColorComponents'](){void 0x0!==this['_color']?(this['_colorParsed']||this['__lazyInitColorString'](),this['_colorComponents']||(this['_colorComponents']=bv['__getComponentsFromCSS4'](this['_color']))):this['_colorComponents']={'r':0x0,'g':0x0,'b':0x0,'a':0x1,'colorSpace':'srgb'};}static['__getCSS4fromComponents'](bw){if(void 0x0===bw)return bv['DEFAULT_COLOR_STRING'];if(void 0x0===bw['colorSpace']||'srgb'===bw['colorSpace']){const bx=Math['max'](Math['min'](bw['r'],0x1),0x0),by=Math['max'](Math['min'](bw['g'],0x1),0x0),bz=Math['max'](Math['min'](bw['b'],0x1),0x0),bA=Math['max'](Math['min'](bw['a'],0x1),0x0),bB=Math['round'](0xff*bx),bC=Math['round'](0xff*by),bD=Math['round'](0xff*bz);return 0x1===bA?'#'+((bB<<0x10|bC<<0x8|bD)>>>0x0)['toString'](0x10)['padStart'](0x6,'0'):'#'+((Math['round'](0xff*bA)<<0x18|bB<<0x10|bC<<0x8|bD)>>>0x0)['toString'](0x10)['padStart'](0x8,'0');}return!bw['a']||bw['a']>=0x1?'color('+bw['colorSpace']+'\x20'+bw['r']+'\x20'+bw['g']+'\x20'+bw['b']+')':'color('+bw['colorSpace']+'\x20'+bw['r']+'\x20'+bw['g']+'\x20'+bw['b']+'\x20/\x20'+bw['a']+')';}static['__getComponentsFromCSS4'](){let bw=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:'';if('string'!=typeof bw)return bv['__invalidColor']();if(bw['startsWith']('#'))return bv['__getComponentsFromHex'](bw);if(bw['startsWith']('color')||bw['startsWith']('COLOR')){let bx=bw['match'](bv['REGEX_COLOR_CSS']);if(bx)return{'r':parseFloat(bx[0x2]),'g':parseFloat(bx[0x3]),'b':parseFloat(bx[0x4]),'a':void 0x0!==bx[0x5]?parseFloat(bx[0x5]):0x1,'colorSpace':bx[0x1]};}else{if(bw['startsWith']('rgba')||bw['startsWith']('RGBA')){let by=bw['match'](bv['REGEX_COLOR_RGBA']);if(by)return{'r':parseFloat(by[0x1])/0xff,'g':parseFloat(by[0x2])/0xff,'b':parseFloat(by[0x3])/0xff,'a':parseFloat(by[0x4]),'colorSpace':'srgb'};}else{if(bw['startsWith']('rgb')||bw['startsWith']('RGB')){let bz=bw['match'](bv['REGEX_COLOR_RGB']);if(bz)return{'r':parseFloat(bz[0x1])/0xff,'g':parseFloat(bz[0x2])/0xff,'b':parseFloat(bz[0x3])/0xff,'a':void 0x0!==bz[0x4]?parseFloat(bz[0x4]):0x1,'colorSpace':'srgb'};}}}return bv['__invalidColor']();}static['__getComponentsFromHex'](bw){if('string'!=typeof bw)return bv['__invalidColor']();const bx='#'===bw[0x0]?0x1:0x0;return bw['length']===0x6+bx||bw['length']===0x8+bx?{'colorSpace':'srgb','r'
1:parseInt(''+bw[0x0+bx]+bw[0x1+bx],0x10)/0xff,'g':parseInt(''+bw[0x2+bx]+bw[0x3+bx],0x10)/0xff,'b':parseInt(''+bw[0x4+bx]+bw[0x5+bx],0x10)/0xff,'a':bw['length']===0x8+bx?parseInt(''+bw[0x6+bx]+bw[0x7+bx],0x10)/0xff:0x1}:bw['length']===0x3+bx||bw['length']===0x4+bx?{'colorSpace':'srgb','r':parseInt(''+bw[0x0+bx]+bw[0x0+bx],0x10)/0xff,'g':parseInt(''+bw[0x1+bx]+bw[0x1+bx],0x10)/0xff,'b':parseInt(''+bw[0x2+bx]+bw[0x2+bx],0x10)/0xff,'a':bw['length']===0x4+bx?parseInt(''+bw[0x3+bx]+bw[0x3+bx],0x10)/0xff:0x1}:bv['__invalidColor']();}static['isHexColor'](bw){if('string'!=typeof bw||0x0===bw['length'])return!0x1;const bx='#'===bw[0x0]?0x1:0x0,by=bw['length']-bx;if(0x3!==by&&0x4!==by&&0x6!==by&&0x8!==by)return!0x1;const bz=bx+by;for(let bA=bx;bA<bz;bA++){const bB=bw['charCodeAt'](bA);if(!(bB>=0x30&&bB<=0x39||bB>=0x41&&bB<=0x46||bB>=0x61&&bB<=0x66))return!0x1;}return!0x0;}['from32bitPixelValue'](bw){return void 0x0===this['_colorComponents']&&(this['_colorComponents']={'r':0x0,'g':0x0,'b':0x0,'a':0x0,'colorSpace':'srgb'}),this['_colorComponents']['a']=(bw>>0x18&0xff)/0xff,this['_colorComponents']['r']=(bw>>0x10&0xff)/0xff,this['_colorComponents']['g']=(bw>>0x8&0xff)/0xff,this['_colorComponents']['b']=(0xff&bw)/0xff,this['_color']=void 0x0,this;}['to32bitPixelValue'](){return(0xff*this['clampedA']<<0x18|0xff*this['clampedR']<<0x10|0xff*this['clampedG']<<0x8|0xff*this['clampedB'])>>>0x0;}static['float2integer'](bw){let bx=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:0x8;return null==bw?0x0:0x8==bx?Math['min'](Math['round'](0xff*bw),0xff):Math['min'](Math['round'](bw*((0x1<<bx)-0x1)),(0x1<<bx)-0x1);}static['blendColorRGB'](bw,bx,by){by<0x0?by=0x0:by>0x1&&(by=0x1);const bz=bw['_UFOColor']?bw:bv['__getComponentsFromHex'](bw),bA=bx['_UFOColor']?bx:bv['__getComponentsFromHex'](bx);return'#'+((Math['round'](0xff*(bA['r']*by+bz['r']*(0x1-by)))<<0x10)+(Math['round'](0xff*(bA['g']*by+bz['g']*(0x1-by)))<<0x8)+Math['round'](0xff*(bA['b']*by+bz['b']*(0x1-by))))['toString'](0x10)['padStart'](0x6,'0');}static['addColorRGB'](bw,bx){const by=bw['_UFOColor']?bw:bv['__getComponentsFromHex'](bw),bz=bx['_UFOColor']?bx:bv['__getComponentsFromHex'](bx);return'#'+((Math['round'](0xff*Math['min'](by['r']+bz['r'],0x1))<<0x10)+(Math['round'](0xff*Math['min'](by['g']+bz['g'],0x1))<<0x8)+Math['round'](0xff*Math['min'](by['b']+bz['b'],0x1)))['toString'](0x10)['padStart'](0x6,'0');}static['subtractColorRGB'](bw,bx){const by=bw['_UFOColor']?bw:bv['__getComponentsFromHex'](bw),bz=bx['_UFOColor']?bx:bv['__getComponentsFromHex'](bx);return'#'+((Math['round'](0xff*Math['max'](by['r']-bz['r'],0x0))<<0x10)+(Math['round'](0xff*Math['max'](by['g']-bz['g'],0x0))<<0x8)+Math['round'](0xff*Math['max'](by['b']-bz['b'],0x0)))['toString'](0x10)['padStart'](0x6,'0');}static['blendColor'](bw,bx,by){let bz=arguments['length']>0x3&&void 0x0!==arguments[0x3]?arguments[0x3]:void 0x0,bA=arguments['length']>0x4&&void 0x0!==arguments[0x4]&&arguments[0x4];return bw['_UFOColor']&&bx['_UFOColor']&&(void 0x0===bz||bz['_UFOColor'])?(bz||(bz=new bv()),bA||(by=Math['max'](0x0,Math['min'](0x1,by))),bz['r']=bw['r']*(0x1-by)+bx['r']*by,bz['g']=bw['g']*(0x1-by)+bx['g']*by,bz['b']=bw['b']*(0x1-by)+bx['b']*by,bz['a']=bw['a']*(0x1-by)+bx['a']*by,bz['colorSpace']=bw['colorSpace'],bz):bv['__invalidColor']();}static['addColor'](bw,bx){let by=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:void 0x0,bz=arguments['length']>0x3&&void 0x0!==arguments[0x3]&&arguments[0x3];return bw['_UFOColor']&&bx['_UFOColor']&&(void 0x0===by||by['_UFOColor'])?(by||(by=new bv()),void 0x0===bw['colorSpace']||'srgb'===bw['colorSpace']||bz?(by['r']=Math['min'](0x1,bw['r']+bx['r']),by['g']=Math['min'](0x1,bw['g']+bx['g']),by['b']=Math['min'](0x1,bw['b']+bx['b'])):(by['r']=bw['r']+bx['r'],by['g']=bw['g']+bx['g'],by['b']=bw['b']+bx['b']),by['a']=Math['min'](0x1,bw['a']+bx['a']),by['colorSpace']=bw['colorSpace'],by):bv['__invalidColor']();}static['subtractColor'](bw,bx){let by=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:void 0x0;return bw['_UFOColor']&&bx['_UFOColor']&&(void 0x0===by||by['_UFOColor'])?(by||(by=new bv()),by['r']=Math['max'](0x0,bw['r']-bx['r']),by['g']=Math['max'](0x0,bw['g']-bx['g']),by['b']=Math['max'](0x0,bw['b']-bx['b']),by['a']=Math['max'](0x0,bw['a']-bx['a']),by['colorSpace']=bw['colorSpace'],by):bv['__invalidColor']();}['toUniform'](){let bw=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bx=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:new Float32Array(0x4);return void 0x0===this['_colorComponents']&&this['__lazyInitColorComponents'](),void 0x0===bw||bw===this['colorSpace']?(bx[0x0]=this['_colorComponents']['r']??0x0,bx[0x1]=this['_colorComponents']['g']??0x0,bx[0x2]=this['_colorComponents']['b']??0x0,bx[0x3]=this['_colorComponents']['a']??0x1):(a9['toXYZ'](this,bv['_colorXYZ']),a9['fromXYZtoUniform'](bv['_colorXYZ'],bx,bw,this['_colorComponents']['a'])),bx;}static['parseColorToUniform'](bw){let bx=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0,by=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:new Float32Array(0x4);
1return null!=bw&&bw['_UFOColor']?bw['toUniform'](bx,by):'string'!=typeof bw?by:(bv['_colorCache']['color']=bw,bv['_colorCache']['toUniform'](bx,by));}};a1(aa,'REGEX_COLOR_CSS',/^\s*color\(\s*([a-z][a-z0-9\-]*)\s+([+-]?(?:\d+\.?\d*|\.\d+))\s+([+-]?(?:\d+\.?\d*|\.\d+))\s+([+-]?(?:\d+\.?\d*|\.\d+))\s*(?:\/\s*([+-]?(?:\d+\.?\d*|\.\d+)))?\s*\)\s*$/i),a1(aa,'REGEX_COLOR_RGB',/^\s*rgb\(\s*(\d+\.?\d*)\s*[\s,]\s*(\d+\.?\d*)\s*[\s,]\s*(\d+\.?\d*)\s*(?:\/\s*(\d+\.?\d*))?\s*\)\s*$/i),a1(aa,'REGEX_COLOR_RGBA',/^\s*rgba\(\s*(\d+\.?\d*)\s*[\s,]\s*(\d+\.?\d*)\s*[\s,]\s*(\d+\.?\d*)\s*[\s,]\s*(\d+\.?\d*)\s*\)\s*$/i),a1(aa,'INVALID_COLOR',Object['freeze']({'r':0x0,'g':0x0,'b':0x0,'a':0x0,'colorSpace':'srgb','invalid':!0x0})),a1(aa,'TRANSPARENT',new aa({'r':0x0,'g':0x0,'b':0x0,'a':0x0})),a1(aa,'DEFAULT_COLOR_STRING',Object['freeze']('#000000')),a1(aa,'_colorCache',new aa()),a1(aa,'_colorXYZ',new Float32Array(0x3)),a1(aa,'_colorRGBA',new Float32Array(0x4));var ab=aa,ac=class bw{static set['globalSettings'](bx){var by;if(bx!==bw['_globalSettings']&&null!==(by=bw['_globalSettings'])&&void 0x0!==by&&by['detach']&&(bw['_globalSettings']['detach'](),bw['_globalSettings']=null),null!=bx)return null!=bx&&bx['_UFOSettings']?void(bw['_globalSettings']=bx):a2['throw']();}static get['globalSettings'](){return bw['_globalSettings'];}static set['localSettings'](bx){var by;if(bx!==bw['_localSettings']&&null!==(by=bw['_localSettings'])&&void 0x0!==by&&by['detach']&&(bw['_localSettings']['detach'](),bw['_localSettings']=null),null!=bx)return null!=bx&&bx['_UFOSettings']?void(bw['_localSettings']=bx):a2['throw']();}static get['localSettings'](){return bw['_localSettings'];}constructor(){var bx,by;let bz=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bA=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0;this['_UFOSettings']=!0x0,this['PREFIX']='',this['SYNC']=!0x1,this['_groupName']=(null==bz||null===(bx=bz['props'])||void 0x0===bx?void 0x0:bx['name'])??bA,this['_settingsForm']=void 0x0,this['_settingsURL']=void 0x0,this['_persistentValue']={},this['_ownerObject']=bz,bz&&this['fromJSON']((null===(by=bz['constructor'])||void 0x0===by?void 0x0:by['settingsJSON'])??bz['settingsJSON']??bz);}get['groupName'](){return this['_groupName'];}['attach'](bx){null!=bx&&bx['_UFOSettingsForm']&&(this['_settingsForm']=bx),null!=bx&&bx['_UFOSettingsURL']&&(this['_settingsURL']=bx),bw['globalSettings']!==this&&(bw['localSettings']=this);}['detach'](){var bx;null===(bx=this['_settingsForm'])||void 0x0===bx||bx['dispose'](),this['_settingsForm']=void 0x0,this['_settingsURL']=void 0x0;}['sync'](){var bx,by,bz;null===(bx=this['_settingsForm'])||void 0x0===bx||bx['syncAllSettingsToForm'](),null===(by=this['_settingsURL'])||void 0x0===by||by['commitSettingsToBrowserHash'](),bw['localSettings']!==this&&(null===(bz=bw['localSettings'])||void 0x0===bz||bz['sync']());}['fromJSON'](bx){if(bx){(!(arguments['length']>0x1&&void 0x0!==arguments[0x1])||arguments[0x1])&&this['clearAll'](),window['UFOProps']['debug']&&this['__validateSettingsJSON'](bx);for(const [by,bz]of Object['entries'](bx)){if(void 0x0!==this[by]){if(void 0x0!==this[by]['type']){a2['throw']();continue;}a2['error']();}let bA=this['__getPrefixedSetting'](by,bw['globalSettings']);if(bA&&this!==bw['globalSettings']){this[by]={...bA},this[by]['owner']=bw['globalSettings']['groupName'],this[by]['persistent']=!0x1,this[by]['hiddenFromURL']=!0x0;for(const [bB,bC]of Object['entries'](bz))void 0x0!==bC&&(['type','debug']['includes'](bB)?a2['error']():(a2['logIf'](),this[by][bB]=bC));void 0x0!==bz['default']&&(bw['setValue'](by,bz['default'],!0x1),this['setValue'](by,bz['default'],!0x1));}else this[by]={...bz},this[by]['value']=bz['default'],this[by]['owner']=this['groupName'];this['__loadPersistentSetting'](by);}}}['toJSON'](){let bx=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0;const by={},bz=this['getSettingIDs'](bx);for(const bA of bz)this[bA]&&void 0x0!==this[bA]['type']&&(by[bA]={...this[bA]},delete by[bA]['value'],this[bA]['value']!==this[bA]['default']&&(by[bA]['default']=this[bA]['value']));return by;}['addSetting'](bx,by){var bz;let bA=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:void 0x0;return bx?this[bx]&&bA&&this[bx]['type']!==bA||'select'===bA?a2['throw']():(bA||(bA=(null===(bz=this[bx])||void 0x0===bz?void 0x0:bz['type'])??this['__detectDataType'](by)),this[bx]||(this[bx]={'type':bA}),this[bx]['owner']=bw['__getPrefix'](bx)??this['groupName'],void this['setValue'](bx,by,!0x1)):a2['throw']();}['removeSetting'](bx){return bx&&this[bx]?void delete this[bx]:a2['throw']();}static['setValue'](bx,by){var bz,bA;let bB=!(arguments['length']>0x2&&void 0x0!==arguments[0x2])||arguments[0x2];if(void 0x0===bx)return a2['throw']();const bC=bw['__getPrefix'](bx),bD=bC['length']?bx['substring'](bC['length']+0x1):bx;if(bC&&bC===(null===(bz=bw['globalSettings'])||void 0x0===bz?void 0x0:bz['groupName'])){var bE;let bG=bw['globalSettings']['setValue'](bD,by,bB);var bF;return bw['globalSettings']['SYNC']&&null!==(bE=bw['localSettings'])&&void 0x0!==bE&&bE['hasValue']()&&(null===(bF=bw['localSettings'])||void 0x0===bF||bF['setValue'](bx,by,!0x1)),bG;}return(null===(bA=bw['localSettings'])||void 0x0===bA?void 0x0:bA['setValue'](bD,by,bB))??!0x1;}static['getValue'](bx){var by,bz,bA;if(void 0x0===bx)return a2['throw']();const bB=bw['__getPrefix'](bx),bC=bB['length']?bx['substring'](bB['length']+0x1):bx;return bB&&bB===(null===(by=bw['globalSettings'])||void 0x0===by?void 0x0:by['groupName'])?bw['globalSettings']['getValue'](bC):bB&&bB===(null===(bz=bw['localSettings'])||void 0x0===bz?void 0x0:bz['groupName'])?bw['localSettings']['getValue'](bC):null===(bA=bw['localSettings'])||void 0x0===bA?void 0x0:bA['getValue'](bx);}['setValue'](bx,by){var bz,bA;let bB=!(arguments['length']>0x2&&void 0x0!==arguments[0x2])||arguments[0x2];if(this['_syncing'])return!0x1;if(void 0x0===bx)return a2['error'](),!0x1;const bC=this['getSetting'](bx,!0x1);if(!bC)return a2['error'](),!0x1;
1if(!(bC instanceof Object))return a2['error'](),!0x1;var bD;if(by!==bC['value']&&(bC['value']=this['__forceDataType'](by,bC['format']||bC['type']),bC['persistent']&&bB&&this['__savePersistentSetting'](bx),null!==(bD=this['_settingsForm'])&&void 0x0!==bD&&bD['syncSettingToForm']&&this['_settingsForm']['syncSettingToForm'](bx,bC['value'])),this['SYNC']&&this['groupName']===(null===(bz=bw['globalSettings'])||void 0x0===bz?void 0x0:bz['groupName'])){var bE;const bG=bw['globalSettings']['groupName']+'.'+bx;var bF;null!==(bE=bw['localSettings'])&&void 0x0!==bE&&bE[bG]&&(null===(bF=bw['localSettings'])||void 0x0===bF||bF['setValue'](bG,by,!0x1));}return null!==(bA=bw['globalSettings'])&&void 0x0!==bA&&bA['SYNC']&&this===bw['localSettings']&&(this['_syncing']=!0x0,bw['setValue'](bx,by,!0x1),this['_syncing']=!0x1),!0x0;}['hasValue'](bx){var by;return void 0x0!==(null===(by=this['getSetting'](bx,!0x0))||void 0x0===by?void 0x0:by['value']);}['getValue'](bx){if(void 0x0===bx)return void a2['error']();const by=this['getSetting'](bx,!0x0);if(by)return by['value'];a2['error']();}['setMaxValue'](bx,by){var bz,bA;let bB=!(arguments['length']>0x2&&void 0x0!==arguments[0x2])||arguments[0x2];const bC=this['getSetting'](bx,!0x1);bC&&(bC['max']=by,bB&&(bC['value']=Math['min'](bC['value'],by)),null===(bz=this['_settingsForm'])||void 0x0===bz||null===(bA=bz['syncSettingToForm'])||void 0x0===bA||bA['call'](bz,bx,bC));}['setMinValue'](bx,by){var bz,bA;let bB=!(arguments['length']>0x2&&void 0x0!==arguments[0x2])||arguments[0x2];const bC=this['getSetting'](bx,!0x1);bC&&(bC['min']=by,bB&&(bC['value']=Math['max'](bC['value'],by)),null===(bz=this['_settingsForm'])||void 0x0===bz||null===(bA=bz['syncSettingToForm'])||void 0x0===bA||bA['call'](bz,bx,bC));}['getSetting'](bx){let by=!(arguments['length']>0x2&&void 0x0!==arguments[0x2])||arguments[0x2];if(arguments['length']>0x1&&void 0x0!==arguments[0x1]&&!arguments[0x1])return this[bx];const bz=this['__getPrefixedSetting'](bx,bw['globalSettings']);return by?this[bx]??bz:bz||this[bx];}['__isSettingPrefixed'](bx){return-0x1!==bx['indexOf']('.');}['__getPrefixedSetting'](bx,by){if(!bx||!by)return;const bz=bw['__getPrefix'](bx);return bz['length']&&bx['substring'](bz['length']+0x1),bz['length']>0x0?bz===by['groupName']||bz===by['PREFIX']?by[bx['substring'](bz['length']+0x1)]:void 0x0:by['PREFIX']===this['PREFIX']?this[bx]:void 0x0;}['getSettingIDs'](){let bx=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0;return bx?Object['getOwnPropertyNames'](this)['filter'](by=>{const bz=this[by];if(!this['__isSetting'](bz))return!0x1;for(const [bA,bB]of Object['entries'](bx))if(bz[bA]!==bB)return!0x1;return!0x0;}):Object['getOwnPropertyNames'](this)['filter'](by=>this['__isSetting'](this[by]));}['__isSetting'](bx){return null!==bx&&'object'==typeof bx&&Object['getPrototypeOf'](bx)===Object['prototype']&&void 0x0!==bx['type'];}static['__getPrefix'](bx){if(!bx)return'';const by=bx['indexOf']('.');return by>0x0?bx['substring'](0x0,by):'';}['__detectDataType'](bx){return!0x0===bx||!0x1===bx?'boolean':Number['isInteger'](bx)?'integer':Number['isFinite'](bx)?'float':bx instanceof ab?'color':'string';}['__forceDataType'](bx,by){if(null==bx||!by)return bx;switch(by){case'integer':return parseInt(bx);case'number':case'float':return parseFloat(bx);case'boolean':return bw['TRUTHY']['has'](bx);case'color':return ab['formattedColor'](bx);default:return String(bx);}}['encodeToURL'](bx){if(!bx||!this[bx])return;const by=this[bx]['format']||this[bx]['type'],bz=this[bx]['value'];return null!=bz&&by?'color'===by?bx+'='+ab['encodeToURL'](bz):'boolean'===by?bx+'='+(bz?'1':'0'):bx+'='+encodeURIComponent(bz['toString']()['replaceAll']('%2C',',')):bx+'=';}['getSafeValue'](bx){if(void 0x0===bx)return 0x0;const by=this['getSetting'](bx,!0x0);if(!by)return 0x0;if(!by['type'])return a2['error'](),0x0;const bz=by['value'];if('file'===by['type'])return by['value'];try{switch(by['format']||by['type']){case'number':case'float':const bA=parseFloat(bz);return isNaN(bA)?0x0:void 0x0!==by['min']&&bA<by['min']?by['min']:void 0x0!==by['max']&&bA>by['max']?by['max']:bA;case'integer':const bB=parseInt(bz);return isNaN(bB)?0x0:void 0x0!==by['min']&&bB<by['min']?by['min']:void 0x0!==by['max']&&bB>by['max']?by['max']:bB;case'boolean':return bw['TRUTHY']['has'](bz);case'string':case'text':case'file':case'image':case'select':return bz;case'color':return bz['startsWith']('#')?bz:ab['isHexColor'](bz)?'#'+bz:bz;default:return a2['error'](),0x0;}}catch(bC){return a2['error'](),0x0;}}['isDefault'](bx){const by=this['getSetting'](bx,!0x1),bz=this['__getPrefixedSetting'](bx,bw['globalSettings']);let bA=null==by?void 0x0:by['default'];return void 0x0===bA&&(bA=null==bz?void 0x0:bz['default']),by['value']===bA;}['getDefaultValue'](bx){const by=this['getSetting'](bx,!0x1),bz=this['__getPrefixedSetting'](bx,bw['globalSettings']);let bA=null==by?void 0x0:by['default'];return void 0x0===bA&&(bA=null==bz?void 0x0:bz['default']),bA;}['setDefaultValue'](bx,by){const bz=this['getSetting'](bx,!0x1);return bz?(bz['default']=this['__forceDataType'](by,bz['format']||bz['type']),!0x0):(a2['error'](),!0x1);}['resetToDefault'](bx){const by=this['getSetting'](bx,!0x1);if(!by)return a2['error'](),!0x1;try{return by['value']=by['default'],!0x0;}catch(bz){a2['error']();}return!0x1;}['resetAllToDefaults'](){let bx=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0;const by=this['getSettingIDs'](bx);for(const bz of by)this['setValue'](bz,this[bz]['default']);}['resetAllToPersistentStorage'](){let bx=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0;const by=this['getSettingIDs'](bx);for(const bz of by)this['__loadPersistentSetting'](bz);}['getSafeOptionText'](bx){const by=this['getSetting'](bx,!0x0);if(!by||!by['options'])return'';const bz=by['value'],bA=by['options']['find'](bB=>{var bC;return(null===(bC=bB['value'])||void 0x0===bC?void 0x0:bC['toString']())===(null==bz?void 0x0:bz['toString']());});return(null==bA?void 0x0:bA['text'])||'';}['clearAll'](){let bx=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];const by=this['getSettingIDs']();for(const bz of by)this[bz]&&void 0x0!==this[bz]['type']&&(this[bz]['persistent']&&!bx||delete this[bz]);}
1['saveAllPersistentSettings'](){const bx=this['getSettingIDs']({'persistent':!0x0});for(const by of bx)this['__savePersistentSetting'](by);}['loadAllPersistentSettings'](){const bx=this['getSettingIDs']({'persistent':!0x0});for(const by of bx)this['__loadPersistentSetting'](by);}['__getLocalStorageKey'](bx){var by;const bz=null===(by=this['_groupName'])||void 0x0===by?void 0x0:by['replace']('/','_'),bA=bx['replace'](/[^a-zA-Z0-9-_.]/g,'');return bz||this['PREFIX']||a2['error'](),bw['PREFIX_LOCALSTORAGE']+'.'+(bz??this['PREFIX']??'unknown')+'.'+bA;}['getFieldID'](bx){var by;const bz=null===(by=this['_groupName'])||void 0x0===by?void 0x0:by['replace']('/','_');return bw['PREFIX_LOCALSTORAGE']+'-'+(bz??this['PREFIX']??'unknown')+'-'+bx['replace']('.','-');}['__savePersistentSetting'](bx){let by=!(arguments['length']>0x1&&void 0x0!==arguments[0x1])||arguments[0x1];const bz=this['getSetting'](bx,!0x1);if(!bz||!bz['persistent'])return;const bA=this['__getLocalStorageKey'](bx),bB=localStorage['getItem'](bA);if(void 0x0===bz['value'])return void a2['warn']();const bC=JSON['stringify'](bz['value']);by||null===bB?bC!==this['_persistentValue'][bx]&&(localStorage['setItem'](bA,bC),this['_persistentValue'][bx]=bC,a2['logIf']()):a2['logIf']();}['__loadPersistentSetting'](bx){const by=this['getSetting'](bx,!0x1);if(!by||!by['persistent'])return;const bz=this['__getLocalStorageKey'](bx),bA=localStorage['getItem'](bz);if(null===bA)return;let bB;try{bB=JSON['parse'](bA),a2['logIf']();}catch(bC){a2['warnIf'](),bB=bA;}this['_persistentValue'][bx]=bB,by['value']=this['__forceDataType'](bB,by['format']||by['type']);}['__validateSettingsJSON'](bx){if(!bx||'object'!=typeof bx)return a2['error'](),!0x1;const by=bw['settingsJSONschema'];let bz=0x0;for(let [bB,bC]of Object['entries'](bx)){var bA;if(bC&&'object'==typeof bC){if(this['_UFOGlobalSettings']||!bB['startsWith'](null===(bA=bw['globalSettings'])||void 0x0===bA?void 0x0:bA['PREFIX'])||(bC=this['__getPrefixedSetting'](bB,bw['globalSettings']),bC)){if(bC['type']||(a2['error'](),bz++),by['additionalProperties']['properties']['type']['enum']['includes'](bC['type'])||(a2['error'](),bz++),'select'===bC['type']){if(bC['format']||(a2['error'](),bz++),bC['options']&&Array['isArray'](b
1C['options'])&&0x0!==bC['options']['length']){for(const bD of bC['options'])bD['hasOwnProperty']('value')&&bD['hasOwnProperty']('text')||(a2['error'](),bz++),'string'!=typeof bD['text']&&(a2['error'](),bz++);}else a2['error'](),bz++;}if(bz>0x64)break;}else a2['error'](),bz++;}else a2['error'](),bz++;}return bz>0x0&&a2['error'](),0x0===bz;}};a1(ac,'PREFIX_LOCALSTORAGE','testufo'),a1(ac,'SAVE_GROUP_NAME_TO','global.testufo'),a1(ac,'DEBUG',!0x1),a1(ac,'TRUTHY',Object['freeze'](new Set([!0x0,0x1,'true','1']))),a1(ac,'FALSY',Object['freeze'](new Set([!0x1,0x0,'false','0']))),a1(ac,'_globalSettings',null),a1(ac,'_localSettings',null),a1(ac,'settingsJSONschema',{'type':'object','additionalProperties':{'type':'object','properties':{'label':{'type':'string'},'info':{'type':'string'},'type':{'type':'string','enum':['select','string','text','file','image','integer','float','boolean','color','section']},'format':{'type':'string','enum':['string','integer','float','boolean','color','text','image','binary']},'default':{},'owner':{'type':'string'},'size':{'type':'number'},'min':{'type':'number'},'max':{'type':'number'},'step':{'type':'number'},'mandatory':{'type':'boolean'},'persistent':{'type':'boolean'},'easteregg':{'type':'boolean'},'debug':{'type':'boolean'},'beta':{'type':'boolean'},'web':{'type':'boolean'},'hidden':{'type':'boolean'},'hiddenFromURL':{'type':'boolean'},'options':{'type':'array','items':{'type':'object','properties':{'value':{},'text':{'type':'string'},'easteregg':{'type':'boolean'},'debug':{'type':'boolean'},'hidden':{'type':'boolean'},'beta':{'type':'boolean'},'web':{'type':'boolean'},'enabled':{'type':'boolean'}},'required':['value','text']}},'value':{},'data':{'type':'string'},'dataState':{'type':'string'}},'allOf':[{'if':{'properties':{'type':{'const':'select'}}},'then':{'required':['options','format']}}],'required':['type']}});var ad=ac,af=class{constructor(){this['_UFOSettingsForm']=!0x0,this['_settings']=void 0x0,this['_element']=null,this['_activeListeners']=[],this['_onChange']=null,this['_onCustomOption']=null,this['_customLabel']='Custom:\x20',this['__initializeDefaultTemplate']();}['__initializeDefaultTemplate'](){this['_keyID']='[id]',this['_keyLabel']='[label]',this['_keyOptionText']='[text]',this['_keyOptionValue']='[value]',this['_keySection']='[section]',this['_keyInfo']='[info]',this['_keySubheading']='[subheading]',this['_classForm']='options',this['_classSettingBox']='setting-container',this['_classSetting']='choice',this['_classField']='setting',this['_classSection']='section-container',this['_htmlSectionBreak']='',this['_htmlSectionLabel']='<div\x20class=\x22choice-section\x22>[section]</div>',this['_htmlSettingSelect']='<div\x20class=\x22choice\x22><label\x20for=\x22[id]\x22><span\x20class=\x22info\x22>[label]:</span>\x20<select\x20class=\x22setting\x22\x20id=\x22[id]\x22\x20data-type=\x22select\x22></select></label></div>',this['_htmlSettingOption']='<option\x20value=\x22[value]\x22>[text]</option>',this['_htmlSettingBoolean']='<div\x20class=\x22choice\x20choice-toggle\x22><label\x20for=\x22[id]\x22\x20class=\x22switch-toggle-container\x22><span\x20class=\x22switch-toggle-label\x20info\x22>[label]:</span>\x20<span\x20class=\x22switch-toggle-wrapper\x22><input\x20class=\x22setting\x20switch-toggle-input\x22\x20id=\x22[id]\x22\x20name=\x22[id]\x22\x20type=\x22checkbox\x22/><span\x20class=\x22switch-toggle\x22\x20aria-hidden=\x22true\x22></span></span></label></div>',this['_htmlSettingColor']='<div\x20class=\x22choice\x22><label\x20for=\x22[id]\x22><span\x20class=\x22info\x22>[label]:</span>\x20<input\x20class=\x22setting\x22\x20id=\x22[id]\x22\x20type=\x22text\x22/></label></div>',this['_htmlSettingInteger']='<div\x20class=\x22choice\x22><label\x20for=\x22[id]\x22><span\x20class=\x22info\x22>[label]:</span>\x20<input\x20class=\x22setting\x22\x20id=\x22[id]\x22\x20type=\x22number\x22/></label></div>',this['_htmlSettingFloat']='<div\x20class=\x22choice\x22><label\x20for=\x22[id]\x22><span\x20class=\x22info\x22>[label]:</span>\x20<input\x20class=\x22setting\x22\x20id=\x22[id]\x22\x20type=\x22number\x22/></label></div>',this['_htmlSettingString']='<div\x20class=\x22choice\x22><label\x20for=\x22[id]\x22><span\x20class=\x22info\x22>[label]:</span>\x20<input\x20class=\x22setting\x22\x20id=\x22[id]\x22\x20type=\x22text\x22/></label></div>',this['_htmlSettingFile']='<div\x20class=\x22choice\x22><label\x20for=\x22[id]\x22><span\x20class=\x22info\x22>[label]:</span>\x20<input\x20class=\x22setting\x22\x20id=\x22[id]\x22\x20type=\x22file\x22/></label></div>',this['_htmlSettingImage']='<div\x20class=\x22choice\x22><label\x20for=\x22[id]\x22><span\x20class=\x22info\x22>[label]:</span>\x20<input\x20class=\x22setting\x22\x20id=\x22[id]\x22\x20type=\x22file\x22/></label></div>';}['dispose'](){this['__clearFieldChangeEvents']();
1for(const by in this['_settings']){var bx;let bz=null===(bx=this['_settings'][by])||void 0x0===bx?void 0x0:bx['options'];null==bz||bz['forEach'](bA=>{var bB,bC,bD,bE;bA['optionElement']&&(null===(bB=(bC=bA['optionElement'])['remove'])||void 0x0===bB||bB['call'](bC),bA['optionElement']=null),bA['globalOptionElement']&&(null===(bD=(bE=bA['globalOptionElement'])['remove'])||void 0x0===bD||bD['call'](bE),bA['globalOptionElement']=null);});}this['_settings']=void 0x0,this['_element']=null,this['_activeListeners']=[],this['_onChange']=null;}['attachToSettings'](bx){null!=bx&&bx['_UFOSettings']||a2['throw'](),this['__clearFieldChangeEvents'](),this['_settings']=bx,this['_settings']['attach'](this);}['renderHTML'](){let bx=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0;this['_settings']||a2['throw']();const by=document['createElement']('div'),bz=this['_settings']['getSafeValue']('global.easteregg'),bA=this['_settings']['getSettingIDs'](bx);for(const bC of bA){var bB;const bD=this['_settings']['getSetting'](bC,!0x0,!0x1);if(!bD||void 0x0===bD['type'])continue;if(bD['debug']&&!window['UFOProps']['debug'])continue;if(bD['beta']&&!window['UFOProps']['beta'])continue;if(bD['web']&&null!==(bB=window['UFOSystem'])&&void 0x0!==bB&&bB['native'])continue;const bE=bD['easteregg'],bF=bD['debug'],bG=bD['beta'];let bH,bI,bJ=bD['label']??bC;if(bD!==this['_settings'][bC]&&(a2['log'](),bJ=this['_settings'][bC]['label']??bJ),'section'===bD['type'])bH=bD['label']?this['__renderTemplate'](this['_htmlSectionLabel'],{[this['_keySection']]:bD['label']}):this['__renderTemplate'](this['_htmlSectionBreak']),bH['classList']['add'](this['_classSection']);else{let bK;switch(bD['type']){case'select':bK=this['_htmlSettingSelect'];break;case'boolean':bK=this['_htmlSettingBoolean'];break;case'color':bK=this['_htmlSettingColor'];break;case'float':case'number':bK=this['_htmlSettingFloat'];break;case'integer':bK=this['_htmlSettingInteger'];break;case'string':case'text':bK=this['_htmlSettingString'];break;case'file':bK=this['_htmlSettingFile'];break;case'image':bK=this['_htmlSettingImage'];break;default:console['warn']('renderHTML:\x20Unknown\x20field\x20type\x20\x27'+bD['type']+'\x27\x20for\x20ID:\x20'+bC);}if(!bK)continue;const bL=this['_settings']['getFieldID'](bC),bM={[this['_keyID']]:bL,[this['_keyLabel']]:bJ,[this['_keyInfo']]:bD['info'],[this['_keySubheading']]:bD['subheading']};if(bH=this['__renderTemplate'](bK,bM),!bH)continue;bH['dataset']['id']=bC,bH['classList']['add'](this['_classSettingBox']);const bN=bH['querySelector']('label');bN&&bN['setAttribute']('for',bL);const bO=bH['querySelector']('.info');if(bO&&bD['info']&&(bO['dataset']['info']=bD['info']),bI=bH['querySelector']('.'+this['_classField']),bI){switch(bI['id']=bL,bI['dataset']['id']=bC,bI['dataset']['type']=bD['type'],bI['dataset']['format']=bD['format'],bI['dataset']['default']=bD['default'],bD['mandatory']&&(bI['dataset']['mandatory']='true'),bD['type']){case'select':void 0x0!==bD['min']&&(bI['dataset']['min']=bD['min']),void 0x0!==bD['max']&&(bI['dataset']['max']=bD['max']),void 0x0!==bD['step']&&(bI['dataset']['step']=bD['step']),this['__renderOptions'](bI,bD,bz);break;case'number':case'float':case'integer':bI['setAttribute']('type','number'),void 0x0!==bD['min']&&(bI['min']=bD['min'],bI['dataset']['min']=bD['min']),void 0x0!==bD['max']&&(bI['max']=bD['max'],bI['dataset']['max']=bD['max']),void 0x0!==bD['step']&&(bI['step']=bD['step'],bI['dataset']['step']=bD['step']);break;case'file':case'image':const bQ=bD['format']||bD['type'];bI['dataset']['type']='file',bI['dataset']['format']=bQ,'image'===bQ?bI['setAttribute']('accept','image/*'):bD['fileAccept']&&bI['setAttribute']('accept',bD['fileAccept']);}const bP=void 0x0!==bD['value']?bD['value']:bD['default'];this['__setFormValueByElement'](bI,bP);}}bH&&(bF&&bH['classList']['add']('debug'),bE&&bH['classList']['add']('easteregg'),bG&&bH['classList']['add']('beta'),by['appendChild'](bH));}return by;}['__clearFieldChangeEvents'](){this['_activeListeners']['forEach'](bx=>{let {field:by,type:bz,listener:bA}=bx;by['removeEventListener'](bz,bA);}),this['_activeListeners']=[];}['__attachFieldChangeEvents'](bx){this['__clearFieldChangeEvents'](),bx['querySelectorAll']('.'+this['_classField'])['forEach'](by=>{this['__addEventListener'](by,'change',this['__onFieldChange']['bind'](this)),'SELECT'===by['tagName']&&(this['__addEventListener'](by,'click',this['__onSelectClick']['bind'](this)),this['__addEventListener'](by,'keydown',this['__onSelectKeyDown']['bind'](this)));});}['__addEventListener'](bx,by,bz){bx['addEventListener'](by,bz),this['_activeListeners']['push']({'field':bx,'type':by,'listener':bz});}['renderFormToDocument'](bx){let by=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0;if(!(bx&&bx instanceof HTMLElement))return!0x1;if(!this['_settings'])return!0x1;this['_element']=bx;const bz=this['renderHTML'](by);for(bz['className']=this['_classForm'];bx['firstChild'];)bx['removeChild'](bx['firstChild']);return bx['appendChild'](bz),this['__attachFieldChangeEvents'](bx),!0x0;}['registerOnChange'](bx){this['_onChange']=bx;}['registerOnCustomOption'](bx){this['_onCustomOption']=bx;}['__isCustomOptionSelected'](bx){var by,bz,bA;if(!bx||'SELECT'!==bx['tagName'])return!0x1;const bB=(null===(by=bx['selectedOptions'])||void 0x0===by?void 0x0:by[0x0])??(null===(bz=bx['options'])||void 0x0===bz?void 0x0:bz[bx['selectedIndex']]);return'true'===(null==bB||null===(bA=bB['dataset'])||void 0x0===bA?void 0x0:bA['custom']);}['__triggerCustomOption'](bx,by){var bz;if(!this['_onCustomOption'])return!0x1;const bA=null==bx||null===(bz=bx['dataset'])||void 0x0===bz?void 0x0:bz['id'];return!!bA&&(this['_onCustomOption'](bA,bx),!0x0);}['__onSelectClick'](bx){const by=bx['currentTarget'];this['__isCustomOptionSelected'](by)&&this['__triggerCustomOption'](by,by['value']);}['__onSelectKeyDown'](bx){if(!['Enter']['includes'](bx['key']))return;const by=bx['currentTarget'],bz=by['value'];requestAnimationFrame(()=>{const bA=by['value'];bz===bA&&this['__isCustomOptionSelected'](by)&&this['__triggerCustomOption'](by,bA);});}['__onFieldChange'](bx){const by=bx['target'],bz=by['dataset']['id'],bA=this['_settings']['getSetting'](bz);if(!bA)return;let bB=bA['format']||bA['type'];'file'===bA['type']&&(bB='file');let bC=by['value'];switch('boolean'===bB&&void 0x0!==by['checked']&&(bC=by['checked']),bB){case'select':case'string':case'text':break;case'boolean':bC=!0x0===bC||0x1===bC||'true'===bC||'1'===bC;break;case'number':case'float':bC=parseFloat(bC);break;case'integer':bC=parseInt(bC);break;case'color':!bC['startsWith']('#')&&ab['isHexColor'](bC)&&(bC='#'+bC
1);break;case'file':case'image':if(by['files']&&by['files']['length']>0x0){const bD=by['files'][0x0];bC=bD['name'],this['__loadFile'](bA,bD);}break;default:return void console['warn']('UFOSettingsForm:\x20Unknown\x20field\x20type\x20\x27'+bA['type']+'\x27\x20for\x20ID:\x20'+bz);}if(bC!==bA['value']){const bE=!('SELECT'!==by['tagName'])&&this['__isCustomOptionSelected'](by);this['__setFormValueByElement'](by,bC,!0x1),this['_settings']['setValue'](bz,bC,!0x0),this['_onChange']&&this['_onChange'](bz,by),bE&&this['__triggerCustomOption'](by,bC);}}['__loadFile'](bx,by){const bz=new FileReader();switch(bx['data']=void 0x0,bx['dataState']='loading',a2['log'](),bz['onload']=bA=>{const bB=bA['target']['result'];bx['data']=bB,bx['dataState']='success',a2['log']();},bz['onerror']=bA=>{bx['data']=void 0x0,bx['dataState']='error',a2['error']();},bx['format']||bx['type']){case'image':default:bz['readAsDataURL'](by);break;case'text':bz['readAsText'](by);}}['setFormValue'](bx,by){const bz='.'+this['_classSettingBox']+'[data-id=\x22'+bx+'\x22]\x20.'+this['_classField'],bA=this['_element']['querySelector'](bz);return!!bA&&this['__setFormValueByElement'](bA,by);}['__setFormValueByElement'](bx,by){let bz=!(arguments['length']>0x2&&void 0x0!==arguments[0x2])||arguments[0x2];if(!bx)return!0x1;if(void 0x0===by)return!0x1;if('file'===bx['type'])return!0x1;let bA,bB,bC,bD=!0x1,bE=by;if(void 0x0!==by['value']&&(bE=by['value'],bA=by['min'],bB=by['max'],bC=by['step']),bz)switch(bx['tagName']){case'SELECT':if('boolean'==typeof bE&&(bE=bE?'1':'0'),void 0x0!==bA&&(bx['dataset']['min']=bA),void 0x0!==bB&&(bx['dataset']['max']=bB),void 0x0!==bC&&(bx['dataset']['step']=bC),bx['options']['length']>0x0){const bH=bx['getElementsByTagName']('option');for(const bI of bH){var bF;if(bI['value']===((null===(bF=bE)||void 0x0===bF?void 0x0:bF['toString']())??'')){bI['selected']=!0x0,bI['setAttribute']('selected','selected'),bD=!0x0;break;}}}break;case'INPUT':if('checkbox'===bx['type'])bx['checked']=!!bE;else{var bG;const bJ=(null===(bG=bE)||void 0x0===bG?void 0x0:bG['toString']())??'';bx['value']=bJ,bx['setAttribute']('value',bJ),void 0x0!==bA&&(bx['min']=bA),void 0x0!==bB&&(bx['max']=bB),void 0x0!==bC&&(bx['step']=bC);}bD=!0x0;break;default:console['error']('UFOSettingsForm:\x20Unknown\x20field\x20type\x20\x27'+bx['tagName']+'\x27\x20for\x20ID:\x20'+bx['id']);}if('color'===bx['getAttribute']('data-type')&&bE){const bK=ab['decodeFromURL'](bE);if(bK){if(bx['value']=bK,bx['setAttribute']('value',bK),ab['isHexColor'](bK)){const bL=bK['toUpperCase']();bx['value']=bL,bx['setAttribute']('value',bL);}try{bx['setAttribute']('autocomplete','none'),bx['style']['backgroundColor']=bK;}catch(bM){a2['error']();}}}return bD;}['syncAllSettingsToForm'](){this['_element']&&this['_settings']&&this['_element']['querySelectorAll']('.'+this['_classField'])['forEach'](bx=>{const by=bx['dataset']['id'],bz=this['_settings']['getSetting'](by);bz&&this['__setFormValueByElement'](bx,bz);});}['syncSettingToForm'](bx){let by=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0;if(!this['_element'])return!0x1;if(!this['_settings'])return!0x1;let bz=by;if(void 0x0===by&&(bz=this['_settings']['getSetting'](bx),!bz))return!0x1;const bA='.'+this['_classSettingBox']+'[data-id=\x22'+bx+'\x22]\x20.'+this['_classField'],bB=this['_element']['querySelector'](bA);return!!bB&&(bz['value']?this['__setFormValueByElement'](bB,bz):this['__setFormValueByElement'](bB,by));}['updateFormFieldVisibility'](){let bx=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];if(!this['_element'])return;if(!this['_settings'])return;this['_element']['querySelectorAll']('.'+this['_classSettingBox'])['forEach'](bz=>{var bA;const bB=bz['dataset']['id'],bC=this['_settings']['getSetting'](bB);if(!bC)return;let bD=!0x0;if(bC['hidden']?bD=!0x1:bC['web']?bD=!(null!==(bA=window['UFOSystem'])&&void 0x0!==bA&&bA['native']):bC['debug']?bD=window['UFOProps']['debug']:bC['beta']?bD=window['UFOProps']['beta']:bC['easteregg']&&(bD=bx),bz['style']['display']=bD?'':'none',bz['style']['visibility']=bD?'inherit':'hidden','select'===bC['type']){const bE=bz['querySelector']('select');bE&&this['__renderOptions'](bE,bC,bx);}});const by=this['_element']['querySelectorAll']('.'+this['_classSection']);null==by||by['forEach'](bz=>{let bA=!0x0;bz['classList']['contains']('debug')?bA=window['UFOProps']['debug']:bz['classList']['contains']('beta')?bA=window['UFOProps']['beta']:bz['classList']['contains']('easteregg')&&(bA=bx),bz['style']['display']=bA?''
1:'none',bz['style']['visibility']=bA?'inherit':'hidden';});}['__renderTemplate'](bx){let by=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:{},bz=!(arguments['length']>0x2&&void 0x0!==arguments[0x2])||arguments[0x2],bA=bx??'';for(const [bC,bD]of Object['entries'](by))bA=bA['split'](bC)['join'](bD??'');const bB=document['createElement']('div');return bB['innerHTML']=bA['trim'](),(bz?bB:bB['firstElementChild'])??null;}['__createOptionElements'](bx){bx&&bx['forEach'](by=>{const bz=void 0x0===(null==by?void 0x0:by['value'])||null===(null==by?void 0x0:by['value'])?'':by['value']['toString'](),bA=void 0x0===(null==by?void 0x0:by['text'])||null===(null==by?void 0x0:by['text'])?bz:by['text']['toString']();let bB=this['__getCachedOptionElement'](by);(bB||(bB=this['__renderTemplate'](this['_htmlSettingOption'],{[this['_keyOptionValue']]:bz,[this['_keyOptionText']]:bA},!0x1),bB))&&(bB['value']=bz,bB['textContent']=bA,bB['disabled']=''===by['value']||!0x1===by['enabled']||by['beta']&&!window['UFOProps']['beta'],by['web']?bB['dataset']['web']='true':delete bB['dataset']['web'],by['easteregg']?bB['dataset']['easteregg']='true':delete bB['dataset']['easteregg'],by['debug']?bB['dataset']['debug']='true':delete bB['dataset']['debug'],by['hidden']?bB['dataset']['hidden']='true':delete bB['dataset']['hidden'],by['custom']?bB['dataset']['custom']='true':delete bB['dataset']['custom'],this['__setCachedOptionElement'](by,bB));});}['__getCachedOptionElement'](bx){return this['_settings']===ad['globalSettings']?bx['globalOptionElement']:bx['optionElement'];}['__setCachedOptionElement'](bx,by){this['_settings']===ad['globalSettings']?bx['globalOptionElement']=by:bx['optionElement']=by;}['updateCustomOption'](bx,by){let bz=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:void 0x0;if(by&&bx){if(bz)bz['dataset']['custom']='true',bx['dataset']['custom']='true',bx['dataset']['customLabel']=by['customLabel']??this['_customLabel'];else{if(!bz&&(bz=bx['querySelector']('option[data-custom=\x22true\x22]'),!bz))return;}bz['innerText']=''+(by['customLabel']??this['_customLabel'])+by['value'],bz['setAttribute']('value',by['value']);}}['__renderOptions'](bx,by){var bz;let bA=arguments['length']>0x2&&void 0x0!==arguments[0x2]&&arguments[0x2];const bB=by['options'];this['__createOptionElements'](bB);const bC=by['value']??bx['value'];let bD=0x0===bx['children']['length'],bE=!0x1,bF=!0x1,bG=bx['querySelector']('option[data-custom=\x22true\x22]'),bH=null===(bz=bG)||void 0x0===bz?void 0x0:bz['selected'];for(const bK of bB)bK['custom']?(bE=!0x0,bH=bK['value']===bC&&bH):bK['value']===bC&&(bF=!0x0);if(!bD)for(const bL of bB){const bM=this['__getCachedOptionElement'](bL);if(bM&&(bL['debug']&&!window['UFOProps']['debug']?bD|=bx['contains'](bM):bL['value']===bC?bD|=!bx['contains'](bM):bL['easteregg']?bD|=bx['contains'](bM)!==bA:bL['hidden']&&(bD|=bx['contains'](bM)),bD))break;}if(bD){var bI;if(bx['replaceChildren'])bx['replaceChildren']();else{for(;bx['firstChild'];)bx['removeChild'](bx['firstChild']);}for(const bN of bB){var bJ;const bO=this['__getCachedOptionElement'](bN);if(bO&&(bN['custom']&&!bG&&(bG=bO),(!bN['debug']||window['UFOProps']['debug'])&&(!bN['web']||null===(bJ=window['UFOSystem'])||void 0x0===bJ||!bJ['native']))){if(bN['value']!==bC){if(bN['easteregg']&&!bA)continue;if(bN['hidden'])continue;}bx['appendChild'](bO);}}null!==(bI=bG)&&void 0x0!==bI&&null!==(bI=bI['dataset'])&&void 0x0!==bI&&bI['extra']&&(bx['appendChild'](bG),bH&&(bG['selected']=!0x0)),bx['value']=bC;}if(!bG||!bH&&bF||this['updateCustomOption'](bx,by,bG),!bF&&!bG&&void 0x0!==by['value']&&''!==by['value']){const bP=document['createElement']('option');bP['dataset']['extra']=!0x0,bP['selected']=!0x0,this['updateCustomOption'](bx,by,bP),bx['appendChild'](bP);}}},ag=class{constructor(){this['_UFOSettingsURL']=!0x0,this['DEFAULT_DOMAIN']='testufo.com',this['DEFAULT_SCREEN']='framerates',this['DEFAULT_EMBED_ROOT']='embed/',this['_settings']=void 0x0,this['_currentHash']='',this['_parsedQuery']=null,this['_internalChange']=!0x1,this['_firstLoaded']=!0x1,this['_queryString']=window['location']['search'];}['isHashChangeInternal'](){const bx=this['_internalChange'];return this['_internalChange']=!0x1,bx;}['__updateHashInternally'](bx){'#'===bx&&(bx=''),bx!==window['location']['hash']&&(this['_internalChange']=!0x0,window['location']['hash']=bx),this['_lastHashCommit']=bx;}['setCurrentScreenID'](bx){ad['setValue'](ad['SAVE_GROUP_NAME_TO'],bx);}['getCurrentScreenID'](){return ad['getValue'](ad['SAVE_GROUP_NAME_TO']);}['clearHash'](){this['_currentHash']='',this['__updateHashInternally']('');}['attachToSettings'](bx){null!=bx&&bx['_UFOSettings']||a2['throw'](),this['_settings']=bx,this['_settings']['attach'](this),this['decodeCurrentHashToSettings']();}['decodeCurrentHashToSettings'](){var bx;let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];this['_settings']||a2['warn'](),by&&(null===(bx=this['_settings'])||void 0x0===bx||bx['clearAll'](!0x1));const bz=function(bG){return bG?decodeURIComponent(bG['toString']()['replaceAll']('_','\x20')):'';},bA=window['location']['hash']['substring'](0x1),bB=bA['replaceAll']('&amp;','&');let bC;bA!==bB&&this['__updateHashInternally'](bB);const bD=/([^&=]+)=?([^&]*)/g;for(;bC=bD['exec'](bB);){var bE;const bG=null===(bE=bz(bC[0x1]))||void 0x0===bE?void 0x0:bE['toLowerCase'](),bH=bz(bC[0x2]);var bF;ad['setValue'](bG,bH,!0x1)||null===(bF=this['_settings'])||void 0x0===bF||bF['addSetting'](bG,bH);}this['_currentHash']=window['location']['hash'];}['encodeHashStringFromSettings'](){if(!this['_settings'])return'';let bx='';const by=this['_settings']['getSettingIDs']();for(const bz of by)void 0x0!==this['_settings'][bz]&&'image'!==this['_settings'][bz]['type']&&'f
1ile'!==this['_settings'][bz]['type']&&'section'!==this['_settings'][bz]['type']&&(this['_settings'][bz]['hiddenFromURL']||this['_settings'][bz]['hidden']||!this['_settings'][bz]['mandatory']&&this['_settings']['isDefault'](bz)||(bx+=(bx?'&':'')+this['_settings']['encodeToURL'](bz)['replaceAll']('%2F','/')));return bx&&(bx='#'+bx),bx;}['commitSettingsToBrowserHash'](){this['_settings']!==ad['globalSettings']&&(this['_currentHash']=this['encodeHashStringFromSettings'](),this['isHashChanged']()&&this['__updateHashInternally'](this['_currentHash']));}['getCurrentHashString'](){return this['_currentHash'];}['getFullWebAddress'](){const bx=new URL(window['location']['href']),by=this['parseScreenName']();return bx['hostname']['endsWith'](this['DEFAULT_DOMAIN'])||(bx['hostname']=this['DEFAULT_DOMAIN'],bx['protocol']='https:',bx['port']=''),bx['hash']=this['encodeHashStringFromSettings'](),bx['pathname']=by?'/'+by:'/',bx['toString'](),bx['toString']();}['isHashChanged'](){return!this['__isHashSame'](this['_currentHash'],window['location']['hash']);}['__isHashSame'](bx,by){return bx===by||!('#'!==bx&&''!==bx||'#'!==by&&''!==by);}['parseScreenName'](){var bx;let by=new URL(window['location']['href'])['pathname'];if(!by)return'';var bz;if(by['startsWith']('/')&&(by=by['slice'](0x1)),by['startsWith'](this['DEFAULT_EMBED_ROOT']))null===(bz=ad['globalSettings'])||void 0x0===bz||bz['setValue']('embed',0x1),by['startsWith'](this['DEFAULT_EMBED_ROOT'])&&(by=by['slice'](this['DEFAULT_EMBED_ROOT']['length']));else{if(null!==(bx=ad['globalSettings'])&&void 0x0!==bx&&null!==(bx=bx['embed'])&&void 0x0!==bx&&bx['value']&&!location['pathname']['startsWith']('/'+this['DEFAULT_EMBED_ROOT'])){this['_internalChange']=!0x0;const bA=window['location']['origin']+'/'+this['DEFAULT_EMBED_ROOT']+by+this['_queryString']+this['_currentHash'];this['setQueryVariable']('embed',void 0x0),history['replaceState'](null,'',bA),window['location']['href']=bA;}}return by['endsWith']('/')&&(by=by['slice'](0x0,-0x1)),by;}['normalizeHash'](bx){var by,bz;let bA=!(arguments['length']>0x1&&void 0x0!==arguments[0x1])||arguments[0x1];if(location['pathname']['indexOf']('.')>0x0)return void this['commitSettingsToBrowserHash']();const bB=this['_currentHash'],bC=this['parseScreenName']();let bD=bC;bx?(this['setCurrentScreenID'](bx),bD=bx):bD['length']>0x0?this['setCurrentScreenID'](bD):(this['setCurrentScreenID'](this['DEFAULT_SCREEN']),bD=this['DEFAULT_SCREEN']),this['_currentHash']=window['location']['hash'],'#'===this['_currentHash']&&(this['_currentHash']='');const bE=this['getCurrentScreenID']()===this['DEFAULT_SCREEN'];''!==this['_currentHash']||!bE||null!==(by=ad['globalSettings'])&&void 0x0!==by&&null!==(by=by['embed'])&&void 0x0!==by&&by['value']||(bD=''),null!==(bz=ad['globalSettings'])&&void 0x0!==bz&&null!==(bz=bz['embed'])&&void 0x0!==bz&&bz['value']&&!bD['startsWith'](''+this['DEFAULT_EMBED_ROOT'])&&(bD=''+this['DEFAULT_EMBED_ROOT']+bD);const bF=window['location']['origin']+(bD?'/'+bD:'')+this['_queryString']+this['_currentHash'],bG=bC!==bD,bH=!this['__isHashSame'](bB,this['_currentHash']),bI=window['location']['href']!==bF;bA&&this['_firstLoaded']&&(bI||bG||bH)&&(bI?history['pushState']({'page':window['location']['origin']},window['document']['title'],bF):history['replaceState']({'page':window['location']['origin']},window['document']['title'],bF)),this['_firstLoaded']=!0x0;}['getQueryVariable'](bx){if(!this['_parsedQuery']||this['_queryString']!==window['location']['search']){this['_queryString']=window['location']['search'];const by=new URLSearchParams(this['_queryString']);this['_parsedQuery']=Object['fromEntries'](by['entries']());}return this['_parsedQuery'][bx];}['setQueryVariable'](bx,by){if(!this['_parsedQuery']||this['_queryString']!==window['location']['search']){this['_queryString']=window['location']['search'];const bB=new URLSearchParams(this['_queryString']);this['_parsedQuery']=Object['fromEntries'](bB['entries']());}void 0x0===by?delete this['_parsedQuery'][bx]:this['_parsedQuery'][bx]=by;const bz=new URLSearchParams(this['_parsedQuery']);this['_queryString']=bz['toString'](),this['_queryString']&&(this['_queryString']='?'+this['_queryString']);const bA=''+window['location']['origin']+window['location']['pathname']+this['_queryString']+window['location']['hash'];this['_internalChange']=!0x0,history['replaceState'](null,'',bA);}},ah=class{static['crc32'](bx){let by=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:0xffffffff;const bz=this['__toUint8Array'](bx);if(!bz)return 0x0;const bA=this['_crc32Table'];let bB=0xffffffff^by;for(let bC=0x0,bD=bz['length'];bC<bD;bC++)bB=bB>>>0x8^bA[0xff&(bB^bz[bC])];return(0xffffffff^bB)>>>0x0;}static['crc16'](bx){let by=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:0xffff;const bz=this['__toUint8Array'](bx);if(!bz)return 0x0;const bA=this['_crc16Table'];let bB=0xffff&by;for(let bC=0x0,bD=bz['length'];bC<bD;bC++)bB=bB<<0x8&0xffff^bA[0xff&(bB>>>0x8^bz[bC])];return 0xffff&bB;}static['__toUint8Array'](bx){return null==bx?null:bx instanceof Uint8Array?bx:ArrayBuffer['isView'](bx)?new Uint8Array(bx['buffer'],bx['byteOffset'],bx['byteLength']):bx instanceof ArrayBuffer?new Uint8Array(bx):'string'==typeof bx?new TextEncoder()['encode'](bx):Array['isArray'](bx)?Uint8Array['from'](bx):null;}static['__initCRC32Table'](){const bx=new Uint32Array(0x100);for(let by=0x0;by<0x100;by++){let bz=by;for(let bA=0x0;bA<0x8;bA++)bz=0x1&bz?0xedb88320^bz>>>0x1:bz>>>0x1;bx[by]=bz>>>0x0;}return bx;}static['__initCRC16Table'](){const bx=new Uint16Array(0x100);for(let by=0x0;by<0x100;by++){let bz=by<<0x8;for(let bA=0x0;bA<0x8;bA++)bz=0x8000&bz?bz<<0x1^0x1021:bz<<0x1;bx[by]=0xffff&bz;}return bx;}};
1a1(ah,'_crc32Table',ah['__initCRC32Table']()),a1(ah,'_crc16Table',ah['__initCRC16Table']());var ai=ah,aj=class bx{constructor(){var by;this['_UFOSystemInfo']=!0x0,this['DEBUG_ALIEN_BROWSER']=!0x1,this['UNKNOWN_OS_STRING']='Unknown\x20OS',this['UNKNOWN_BROWSER_STRING']='Unknown\x20Browser',this['_userAgent']=navigator['userAgent'],this['_dataBrowser']=[{'subString':'Edg/','identity':'Edge','versionSearch':'Chrome','vsync':!0x0},{'subString':'Firefox/','identity':'Firefox','versionSearch':'Firefox','vsync':!0x0},{'subString':'OPR/','identity':'Opera','versionSearch':'Chrome','vsync':!0x0},{'subString':'Vivaldi/','identity':'Vivaldi','versionSearch':'Chrome','vsync':!0x0},{'flag':!!navigator['brave'],'identity':'Brave','versionSearch':'Chrome','vsync':!0x0},{'flag':window['chrome'],'identity':'Chrome','versionSearch':'Chrome','vsync':!0x0},{'subString':'Safari','identity':'Safari','versionSearch':'Version','vsync':!0x0},{'subString':'FBSV/','identity':'Facebook','versionSearch':'FBSV/','vsync':!0x0}],this['_dataOS']=[{'subString':'Windows\x20NT','identity':'Windows','versionSearch':'Windows\x20NT','mobile':!0x1},{'subString':'iPhone','identity':'iPhone','versionSearch':'\x20OS','mobile':!0x0,'vsync':!0x0},{'subString':'iPad','identity':'iPad','versionSearch':'\x20OS','mobile':!0x0,'vsync':!0x0},{'subString':'iPod','identity':'iPod','versionSearch':'\x20OS','mobile':!0x0,'vsync':!0x0},{'subString':'Macintosh','identity':'Mac','versionSearch':'Version','mobile':!0x1,'vsync':!0x0},{'subString':'Android','identity':'Android','versionSearch':'Android','mobile':!0x0},{'subString':'OculusBrowser','identity':'Quest\x20VR','versionSearch':'OculusBrowser','mobile':!0x1,'vsync':!0x0},{'subString':'Linux','identity':'Linux','mobile':!0x1}],this['_infoBrowser']=this['__searchString'](this['_dataBrowser']),this['browser']=(null===(by=this['_infoBrowser'])||void 0x0===by?void 0x0:by['identity'])??this['UNKNOWN_BROWSER_STRING'],this['versionLong']=this['__searchVersion'](this['_userAgent'])||this['__searchVersion'](navigator['appVersion'])||'-1',this['version']=parseFloat(this['versionLong']),this['vsync']=!0x1,this['mobile']=!0x1,this['OS']=this['UNKNOWN_OS_STRING'],this['infoOS']=this['__searchString'](this['_dataOS']),this['infoOS']?(this['OS']=this['infoOS']['identity'],this['mobile']=this['infoOS']['mobile'],this['infoOS']['versionSearch']&&-0x1===this['version']&&(this['version']=parseFloat(this['__searchVersion'](this['_userAgent']))||-0x1)):this['infoOS']='Unknown\x20OS',this['_isSafari_NativeRezFix']='Safari'==this['browser'],this['__vsyncCheck']();}['__vsyncCheck'](){let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];this['vsyncInfo']='',this['vsync']=!0x0,by||(this['DEBUG_ALIEN_BROWSER']?(this['vsyncInfo']='Unknown\x20VSYNC\x20support\x20in\x20Vogonese\x20or\x20Huttese\x20browser.',this['vsync']=void 0x0):this['infoOS']['vsync']?this['vsync']=!0x0:'Linux'===this['OS']?(this['vsyncInfo']='VSYNC\x20support\x20inconsistent\x20between\x20Linux\x20distros.',this['vsync']=void 0x0):this['_infoBrowser']&&this['_infoBrowser']['vsync']?this['infoOS']===this['UNKNOWN_OS_STRING']?(this['vsyncInfo']='VSYNC\x20support\x20is\x20unknown\x20due\x20to\x20unknown\x20OS.',this['vsync']=void 0x0):'Firefox'===this['browser']&&'Mac'===this['OS']&&this['version']<0x67&&(this['vsyncInfo']='Upgrade\x20to\x20FireFox\x20103+\x20to\x20support\x20VSYNC\x20&\x20120\x20Hz\x20on\x20Mac.',this['vsync']=!0x1):(this['vsyncInfo']='VSYNC\x20support\x20is\x20untested\x20in\x20'+this['browser']+'.',this['vsync']=void 0x0));}['__searchString'](by){for(var bz=0x0;bz<by['length'];bz++){if(this['versionSearchString']=by[bz]['versionSearch'],by[bz]['flag'])return by[bz];if(by[bz]['subString']&&-0x1!==this['_userAgent']['indexOf'](by[bz]['subString']))return by[bz];}return this['versionSearchString']=null,null;}['__searchVersion'](by){if(!this['versionSearchString'])return null;var bz=by['indexOf'](this['versionSearchString']);if(-0x1===bz)return null;var bA=by['substring'](bz+this['versionSearchString']['length']+0x1);return(bz=bA['indexOf']('\x20'))>0x0&&(bA=bA['substring'](0x0,bz)),(bz=bA['indexOf'](';'))>0x0&&(bA=bA['substring'](0x0,bz)),bA;}['isDisplayHDR'](){return window['matchMedia']('(dynamic-range:\x20high)')['matches'];}
1['getDisplayColorSpace'](){for(const by of a9['DISPLAY'])if(window['matchMedia']('(color-gamut:\x20'+by+')')['matches'])return by;return'srgb';}['getDisplayColorSpaceCategory'](){let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0;const bz=void 0x0===by?this['isDisplayHDR']():by,bA=this['getDisplayColorSpace'](),bB=a9['getColorSpaceProps'](bA);return bB?bz?bB['categoryExt']:bB['category']:'SDR';}['isFullHDR'](by){return this['isDisplayHDR']()&&a9['isHDR'](by);}['isAVIFsupported'](){if(void 0x0!==bx['_AVIFsupported'])return bx['_AVIFsupported'];bx['_AVIFsupported']=!0x1;try{let by=new Image();by['onload']=()=>{bx['_AVIFsupported']=by['width']>0x0&&by['height']>0x0;},by['onerror']=()=>{bx['_AVIFsupported']=!0x1;},by['src']='data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=';}catch(bz){}return bx['_AVIFsupported'];}['getScrollbarWidth'](){let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];if(this['_scrollbarWidthRefresh']|=by,!this['_scrollbarWidthRefresh']&&void 0x0!==this['_scrollbarWidth'])return this['_scrollbarWidth'];if('iPhone'===this['OS']||'Android'===this['OS'])return this['_scrollbarWidthRefresh']=!0x1,this['_scrollbarWidth']=0x0,0x0;const bz=document['createElement']('div');bz['style']['visibility']='hidden',bz['style']['overflow']='scroll',document['body']['appendChild'](bz);const bA=document['createElement']('div');
1return bz['appendChild'](bA),this['_scrollbarWidth']=bz['offsetWidth']-bA['offsetWidth'],bz['parentNode']['removeChild'](bz),this['_scrollbarWidthRefresh']=!0x1,this['_scrollbarWidth'];}['getSystemZoomFactor'](){let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];if(this['_cachedZoom']>0x0&&!by)return this['_cachedZoom'];let bz=this['__findNearestNumber'](bA=>matchMedia('(max-resolution:\x20'+bA+'dpi)')['matches'],0x4,0x17700,0.1)/0x60;return this['_scrollbarWidthRefresh']=bz!=this['_cachedZoom'],this['_cachedZoom']=bz,this['_cachedZoom'];}['__findNearestNumber'](by){let bz=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:0x1,bA=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:0x989680,bB=arguments['length']>0x3&&void 0x0!==arguments[0x3]?arguments[0x3]:0x1,bC=arguments['length']>0x4&&void 0x0!==arguments[0x4]?arguments[0x4]:0x64;bz>bA&&([bz,bA]=[bA,bz]),bB<=0x0&&(bB=0x1);let bD=by(bz);if(0x0<bD)return bz;let bE=bz;for(0x0===bE&&(bE=bB);0x0>=bD&&bE<bA&&bC>0x0;)bC--,bE*=0x2,bD=by(bE);return bE>bA&&(bE=bA,bD=by(bA)),0x0>=bD?bA:this['__binarySearch'](by,bE/0x2,bE,bB,bC);}['__binarySearch'](by,bz,bA){let bB=arguments['length']>0x3&&void 0x0!==arguments[0x3]?arguments[0x3]:0x1,bC=arguments['length']>0x4&&void 0x0!==arguments[0x4]?arguments[0x4]:0x64;if(bC<=0x0)return bA;if(bC--,bA-bz<bB)return 0x0<by(bz)?bz:(by(bA),bA);let bD=(bz+bA)/0x2;if(bD=Math['round'](bD/bB)*bB,0x0<by(bD)){let bE=bD-bB;return bE<bz||0x0>=by(bE)?bD:this['__binarySearch'](by,bz,bD-bB,bB,bC);}return this['__binarySearch'](by,bD+bB,bA,bB,bC);}['getViewportZoomFactor'](){var by;return(null===(by=window['visualViewport'])||void 0x0===by?void 0x0:by['scale'])??0x1;}['getZoomFactor'](){let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];return this['getSystemZoomFactor'](by)*this['getViewportZoomFactor']();}['getPosX'](){return window['screenLeft']||0x0;}['getPosY'](){return window['screenTop']||0x0;}['getScrollX'](){return window['scrollX']||0x0;}['getScrollY'](){return window['scrollY']||0x0;}['hasFocus'](){return document['hasFocus']();}['isFullScreen'](){return!!(document['fullscreenElement']||document['webkitFullscreenElement']||document['mozFullScreenElement']);}['getDevicePixelRatio'](){return window['devicePixelRatio']||0x1;}['getWidth'](){return window['innerWidth'];}['getHeight'](){return window['innerHeight'];}['getViewportWidth'](){var by;return(null===(by=window['visualViewport'])||void 0x0===by?void 0x0:by['width'])??window['innerWidth'];}['getViewportHeight'](){var by;return(null===(by=window['visualViewport'])||void 0x0===by?void 0x0:by['height'])??window['innerHeight'];}['getFullScreenWidth'](){return this['getScreenWidth']()*this['getDevicePixelRatio']();}['getFullScreenHeight'](){return this['getScreenHeight']()*this['getDevicePixelRatio']();}['getScreenWidth'](){var by,bz;if(!this['_isSafari_NativeRezFix'])return window['screen']['width']??window['innerWidth'];let bA=window['screen']['width']>window['screen']['height'],bB=(null===(by=window['visualViewport'])||void 0x0===by?void 0x0:by['width'])>(null===(bz=window['visualViewport'])||void 0x0===bz?void 0x0:bz['height']);return window['visualViewport']&&bA!==bB?(a2['logOnce'](),window['screen']['height']):window['screen']['width'];}['getScreenHeight'](){var by,bz;if(!this['_isSafari_NativeRezFix'])return window['screen']['height']??window['innerHeight'];let bA=window['screen']['width']>window['screen']['height'],bB=(null===(by=window['visualViewport'])||void 0x0===by?void 0x0:by['width'])>(null===(bz=window['visualViewport'])||void 0x0===bz?void 0x0:bz['height']);return window['visualViewport']&&bA!==bB?(a2['logOnce'](),window['screen']['width']):window['screen']['height'];}['getBestNativeWidth'](){return this['_isSafari_NativeRezFix']&&this['isFullScreen']()?this['getScreenWidth']()*window['devicePixelRatio']:window['innerWidth']*window['devicePixelRatio'];}['getBestNativeHeight'](){return this['_isSafari_NativeRezFix']&&this['isFullScreen']()?this['getScreenHeight']()*window['devicePixelRatio']:window['innerHeight']*window['devicePixelRatio'];}};a1(aj,'forWebVendors','<b>Notice\x20for\x20Developers,\x20Browser\x20Vendors\x20&\x20Standards\x20Groups:</b><br>Yes,\x20useragent\x20detection\x20is\x20not\x20recommended.\x20However,\x20whitelisting\x20was\x20necessary\x20for\x20scientific-quality\x20VSYNC\x20as\x20well\x20as\x20acceses\x20to\x20certain\x20deterministic\x20display\x20behaviors\x20including\x201:1\x20pixel\x20scaling\x20support.<br>For\x20web\x20standards\x20groups\x20(W3C\x20/\x20WHATWG)\x20working\x20to\x20standardize\x20VSYNC\x20discovery,\x20please\x20contact\x20us.For\x20browser\x20vendors\x20who\x20needs\x20help\x20to\x20be\x20whitelisted\x20above\x2060Hz,\x20please\x20contact\x20us.\x20\x20Thank\x20you.'),a1(aj,'_AVIFsupported');var ak=new aj(),{OS:al,browser:am,version:an,vsync:ao,vsyncInfo:ap}=ak;window['browserInfo']={'OS':al,'browser':am,'version':an,'vsync':ao,'vsyncInfo':ap};var aq=class{constructor(){a1(this,'DEBUG',!0x0),a1(this,'VALIDATEMS',0x64),a1(this,'MAXSTORE',0x3a980),a1(this,'LOWESTVALIDHZ',0x8),a1(this,'MINIMUM_AGE',0x1f4),a1(this,'TIGHTGROUPMS',0x4),a1(this,'MSCHANGE',0x4),a1(this,'TIGHTGROUP_PERC',0.2),a1(this,'MSCHANGE_PERC',0.2),this['_javaScriptSkip']=0x3c,this['_intervalLP']=0x0,this['_timerQuantum']=0x0,this['_firstDetectHzTimestamp']=0x0,this['_firstDetectHz']=0x0,this['__reset']();}['restartMeasuring'](){this['__reset']();}['countCycle'](by){by||(by=performance['now']()),this['__add'](by);}['ignoreNextCycle'](){let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:0x1;this['_nSkip']=by;}['getMinimumFrequency'](by){return this['LOWESTVALIDHZ'];}['setMinimumFrequency'](by){this['LOWESTVALIDHZ']=by;}['getCurrentFrequency'](){const by=this['__calc']();return by>this['__getMaxHzDetectPossible']()?0x0:by;}['getFilteredHz'](){let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:this['MINIMUM_AGE'];const bz=this['getCurrentFrequency']();return bz?this['_lastHz']?this['getAgeOfSuccessfulDetect']()<by?(this['_lastHz']=bz,0x0):(this['_lastHz']=bz,bz):(this['_lastHz']=bz,this['_firstDetectHzTimestamp']=performance['now'](),this['_firstDetectHz']=bz,0x0):(this['_lastHz']=0x0,0x0);}['getAgeOfSuccessfulDetect'](){return this['_lastHz']?performance['now']()-this['_firstDetectHzTimestamp']:0x0;}['getFilteredCycleTimestamp'](){const by=this['__snap']();return by?by['tvsync']:0x0;}['getCount'](){return this['_cycleCount'];}['getRasterScanoutPercentage'](){var by=performance['now']()-this['getFilteredCycleTimestamp'](),bz=this['getFilteredHz']();if(bz<=0x0)return 0x0;for(var bA=0x3e8/bz;by<0x0;)by+=bA;return by%bA/bA;}['__reset'](){let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:'';this['DEBUG']&&by&&console['log']('RefreshRateCalculator:\x20Hz\x20Stats\x20Reset\x20->\x20'+by),this['_cycleCount']=0x0,this['_nSkipBase']=0x0,this['_nSkip']=0x0,this['_tUpdate']=0x0,this['_L0']=this['_L1']=this['_L2']=this['_L3']=this['_L4']=0x0,this['_m_D']=[],this['_m_S']=[],this['_m_ms']=0x0,this['_m_vi']='',this['_m_tvsync']=0x0,this['_m_summs']=0x0,this['_m_nms']=0x0,this['_m_nChange']=0x0,this['_lastHz']=0x0,this['_firstDetectHz']=0x0,this['_firstDetectHzTimestamp']=0x0,this['_intervalLP']=0x0;}['__cut'](by){for(var bz=[],bA=0x0;bA<by['length'];bA+=0x2)bz[bz['length']]=by[bA];return bz;}['__add'](by){this['_cycleCount']++,this['_L0']=this['_L1'],this['_L1']=this['_L2'],this['_L2']=this['_L3'],this['_L3']=this['_L4'],this['_L4']=by;var bz=Math['max'](this['_L4']-this['_L3'],this['_L3']-this['_L2'],this['_L2']-this['_L1'],this['_L1']-this['_L0'])-Math['min'](this['_L4']-this['_L3'],this['_L3']-this['_L2'],this['_L2']-this['_L1'],this['_L1']-this['_L0']);let {tightGroupThreshold:bA,msChangeThreshold:bB}=this['__computeTimeThresholds']();if(bz<bA&&--this['_javaScriptSkip']<0x0&&--this['_nSkip']<0x0){var bC=(this['_L4']-this['_L0'])/0x4;if(bC<0x3e8/this['LOWESTVALIDHZ']){var bD=this['_m_nms']>0xa&&Math['abs'](bC-this['_m_summs']/this['_m_nms'])>bB;if(this['_m_nChange']=bD?this['_m_nChange']+0x1:0x0,bD||(this['_m_summs']+=bC,++this['_m_nms'],!this['_m_ms']&&this['_m_nms']>Math['max'](0x1e,0x3c*bz)&&(this['_m_ms']=this['_m_summs']/this['_m_nms'])),this['_m_nChange']>0x14)this['__reset']('Change\x20in\x20Hz\x20detected\x20'+(this['_m_summs']/this['_m_nms'])['toFixed'](0x3)+'->'+bC['toFixed'](0x3));else{this['_m_D']['length']>=this['MAXSTORE']&&(this['_m_D']=this['__cut'](this['_m_D']),this['_m_S']=this['__cut'](this['_m_S']),this['_nSkipBase']=0x2*this['_nSkipBase']+0x1);var bE=this['_m_D']['length'];this['_m_D'][bE]=this['_L2'],this['_m_S'][bE]=(this['_L0']+this['_L1']+this['_L2']+this['_L3']+this['_L4'])/0x5,this['_nSkip']=this['_nSkipBase'],this['_m_ms']&&by-this['_tUpdate']>this['VALIDATEMS']&&(this['_tUpdate']=by,this['_m_vi']=this['__validate']());}}}return'Hz='+this['_m_D']['length']+'&times;'+(this['_nSkipBase']+0x1)+'\x20samples\x20\x20'+this['_m_vi']+'\x20\x20dpr='+window['devicePixelRatio']+'\x20\x20cores='+navigator['hardwareConcurrency'];}['__calc'](){return this['_m_ms']?0x3e8/this['_m_ms']:0x0;}['__validate'](){var by,bz='',bA=0x0,bB=0x0,bC=0x0,bD=0x0,bE=0x0,bF=this['_m_D']['length'];for(by=0x0;by<bF;++by){bE+=by>0x0?Math['round']((this['_m_S'][by]-this['_m_S'][by-0x1])/this['_m_ms']):0x0;var bG=this['_m_D'][by]-this['_m_D'][0x0];bA+=bE,bB+=bG,bC+=bE*bE,bD+=bE*bG;}
1var bH=(bF*bD-bA*bB)/(bF*bC-bA*bA),bI=(bC*bB-bA*bD)/(bF*bC-bA*bA);this['_m_ms']=bH;var bJ=this['_m_D'][0x0]+bI,bK=this['_m_ms']/0x2,bL=0x0,bM=0x0;for(by=0x1;by<this['_m_D']['length'];++by){var bN=(this['_m_D'][by]-bJ+bK)%this['_m_ms']-bK;bM=Math['min'](bM,bN),bL=Math['max'](bL,bN);}return bL-bM<bK?(this['_m_tvsync']=bJ+bM,bz='drift=['+bM['toFixed'](0x2)+'..'+bL['toFixed'](0x2)+']'):this['__reset']('Excessive\x20Hz\x20Drift'),bz;}['__snap'](){return this['_m_vi']?{'tvsync':this['_m_tvsync'],'ms':this['_m_ms']}:null;}['__getUnverifiedInterval'](){if(this['_m_nms']>0x0)return this['_m_summs']/this['_m_nms'];const by=[];return this['_L4']&&this['_L3']&&by['push'](this['_L4']-this['_L3']),this['_L3']&&this['_L2']&&by['push'](this['_L3']-this['_L2']),this['_L2']&&this['_L1']&&by['push'](this['_L2']-this['_L1']),this['_L1']&&this['_L0']&&by['push'](this['_L1']-this['_L0']),by['length']>0x0?this['__getMedian'](by):0x0;}['__getUnverifiedFrequency'](){const by=this['__getUnverifiedInterval']();return by>0x0?0x3e8/by:0x0;}['__getMedian'](by){if(!by||0x0===by['length'])return 0x0;const bz=by['slice']()['sort']((bB,bC)=>bB-bC),bA=Math['floor'](bz['length']/0x2);return bz['length']%0x2!=0x0?bz[bA]:(bz[bA-0x1]+bz[bA])/0x2;}['__computeTimeThresholds'](){let by=this['__getUnverifiedInterval']();by>0x0&&(this['_intervalLP']=this['_intervalLP']?0.8*this['_intervalLP']+0.2*by:by);const bz=this['_intervalLP']||by||this['_m_ms']||0x0;let bA=this['TIGHTGROUPMS'],bB=this['MSCHANGE'];bz>0x0&&(bA=Math['min'](this['TIGHTGROUPMS'],bz*this['TIGHTGROUP_PERC']),bB=Math['min'](this['MSCHANGE'],bz*this['MSCHANGE_PERC']));const bC=this['__getTimerQuantum']();return bC>0x0&&(bA<bC&&(bA=bC),bB<bC&&(bB=bC)),{'tightGroupThreshold':bA,'msChangeThreshold':bB};}['__getTimerQuantum'](){if(this['_timerQuantum']>0x0)return this['_timerQuantum'];try{const by=[],bz=performance['now']();let bA=performance['now']();for(;by['length']<0x64&&bA-bz<2.5;){let bG=performance['now']();for(;bG===bA&&bG-bz<2.5;)bG=performance['now']();const bH=bG-bA;bA=bG,bH>0x0&&by['push'](bH);}if(0x0===by['length'])return this['_timerQuantum']=0x1,this['_timerQuantum'];const bB=this['__getMedian'](by),bC=0.5*bB,bD=1.5*bB,bE=by['filter'](bI=>bI>=bC&&bI<=bD);let bF=bE['length']>0x0?Math['min'](...bE):Math['min'](...by);return(!isFinite(bF)||bF<=0x0)&&(bF=0x1),bF<0.005&&(bF=0.005),bF>0x1&&(bF=0x1),bF=0.001*Math['round'](bF/0.001),this['_timerQuantum']=bF,this['DEBUG']&&console['log']('RefreshRateCalculator:\x20Time\x20Quantum\x20'+this['_timerQuantum']+'\x20ms,\x20calculated\x20in\x20'+(performance['now']()-bz)['toFixed'](0x2)+'\x20ms'),this['_timerQuantum'];}catch(bI){return this['_timerQuantum']=0x1,this['_timerQuantum'];}}['__getMaxHzDetectPossible'](){return 0x3e8/this['__getTimerQuantum']()/0x2;}['__vsyncOffset'](by,bz){return bz&&bz['ms']?((by-bz['tvsync']+0x2)%bz['ms']+bz['ms'])%bz['ms']-0x2:0x0;}},ar=class{static['isError'](by){return by&&by['value']<0x0;}static['isStutter'](by){return by===this['status']['STUTTER_CAUTION']||by===this['status']['STUTTER_DETECTED']||by===this['status']['STUTTER_MAJOR']||by===this['status']['STUTTER_BUG'];}static['isGood'](by){return by===this['status']['GOOD'];}static['isSyncing'](by){return by===this['status']['SYNCING']||by===this['status']['SYNCING_MORE'];}};a1(ar,'status',Object['freeze']({'PERFORMANCE':{'value':-0x6,'category':'error','color':'#FF0000','colorText':'#FF0000','name':'POOR\x20PERFORMANCE'},'HIGH_CPU':{'value':-0x5,'category':'warning','color':'#FFA500','colorText':'#FFA500','name':'HIGH\x20CPU\x20CONSUMPTION'},'SYNCFAIL':{'value':-0x4,'category':'error','color':'#FF0000','colorText':'#FF0000','name':'SYNC\x20FAILURE'},'BROWSERBAD':{'value':-0x3,'category':'error','color':'#FF0000','colorText':'#FF0000','name':'UNSUPPORTED'},'BROWSERUNKNOWN':{'value':-0x2,'category':'warning','color':'#FFA500','colorText':'#FFA500','name':'UNVERIFIED\x20BROWSER'},'ERROR':{'value':-0x1,'category':'error','color':'#FF0000','colorText':'#FF0000','name':'ERROR'},'GOOD':{'value':0x0,'category':'good','color':'#008000','colorText':'#00FF00','name':'READY*'},'SYNCING':{'value':0x1,'category':'syncing','color':'#0000E0','colorText':'#8080FF','name':'SYNCING'},'SYNCING_MORE':{'value':0x1,'category':'syncing','color':'#0000E0','colorText':'#8080FF','name':'SYNCING\x20MORE'},'STUTTER_CAUTION':{'value':0x2,'category':'warning','color':'#FFA500','colorText':'#FFA500','name':'PERFORMANCE\x20WARNING'},'STUTTER_DETECTED':{'value':0x3,'category':'warning','color':'#FFA500','colorText':'#FFA500','name':'ST
1UTTER\x20WARNING'},'STUTTER_MAJOR':{'value':0x4,'category':'error','color':'#FF0000','colorText':'#FF0000','name':'MAJOR\x20STUTTERING'},'STUTTER_BUG':{'value':0x4,'category':'error','color':'#FF0000','colorText':'#FF0000','name':'BROWSER\x20BUG'}})),a1(ar,'resync',Object['freeze']({'NONE':0x0,'SOFT':0x1,'HARD':0x2}));var as=new class{constructor(){this['_UFOFrameTiming']=!0x0,this['_initialized']=!0x1,this['_pixelsPerSec']=-0x1,this['_pixelsPerFrame']=-0x1,this['_useSecondaryTimestamp']=!0x1,this['_frameTimestamp']=0x0,this['_frameTimestampPrev']=0x0,this['_frameCounter']=0x0,this['_fps']=0x0,this['_refreshRate']=0x0,this['_refreshDisplayed']=0x0,this['_status']=ar['status']['SYNCING'],this['_message']='',this['_autoPPS']=!0x0,this['_strictSync']=!0x1,this['frameTimestamp']=0x0,this['frameTimestampPrimary']=0x0,this['frameTimestampSecondary']=0x0,this['timePeriodFrameStart']=0x0,this['timePeriodFrameRender']=0x0,this['timePeriodFrameFinal']=0x0,this['timePeriodAccuracyChecker']=0x0,this['jitter']=0x0,this['_FPS_MIN']=0xf,this['_FPS_RECOVERY']=0x14,this['_FPS_AVERAGING_ABSOLUTE_MIN']=0xa,this['_FPS_AVERAGING_MIN']=0x1e,this['_CPU_CONSUME_LIMIT']=0x2bc,this['_FPS_SYNC_COUNT_TO_FAIL']=0xc,this['_MIN_GOOD_HZ']=0x4b,this['_FPS_MAX']=0x400,this['_STATUS_SEPARATOR']=':<br>',this['_hertz']=new aq(),this['_secondsCounter']=0x0,this['_syncSeconds']=0x0,this['_fpsDecimal']=0x0,this['_fpsSync']=0x0,this['_fpsStable']=0x0,this['_fpsDisplayed']=0x0,this['_fpsHistory']=[],this['_fpsMinimum']=this['_FPS_AVERAGING_ABSOLUTE_MIN'],this['_performHistory']=[],this['_messageDisplayed']=0x0,this['_jitterCount']=0x0,this['_jitterProblem']=0x0,this['_jitterAmount']=0x0,this['_jitterAmountTotal']=0x0,this['_jitterMajor']=0x0,this['_jitterLargeNegativeCount']=0x0,this['_jitterLargePositiveCount']=0x0,this['_jitterLargeNegativeTotal']=0x0,this['_jitterLargePositiveTotal']=0x0,this['_frameTimeTotal']=0x0,this['_frameTimePrevSecond']=0x0,this['_count']=0x0,this['_goodSeconds']=0x0,this['_lastSecond']=0x0,this['_frameTimeIdeal']=0x0,this['_currWidth']=0x0,this['_currHeight']=0x0,this['_currWindowX']=0x0,this['_currWindowY']=0x0,this['_currScrollX']=0x0,this['_currScrollY']=0x0,this['_lastWidth']=0x0,this['_lastHeight']=0x0,this['_lastWindowX']=0x0,this['_lastWindowY']=0x0,this['_lastScrollX']=0x0,this['_lastScrollY']=0x0,this['_resyncNeeded']=ar['resync']['NONE'],this['_firstRun']=!0x0,this['_logStrangeStutter']=!0x1,this['_logFrameRateLow']=!0x1,this['_logStillSyncing']=!0x1,this['_logPerformanceLow']=!0x1,this['_textWasRefreshed']=0x0,this['_browserBad']=!0x1,this['_browserMoved']=!0x1,this['_browserFroze']=!0x1,this['_refreshRateFoundBefore']=!0x1,this['_accuracyCheckBeginTime']=0x0,this['_initialized']=!0x0;}get['initialized'](){return this['_initialized'];}get['pixelsPerSec'](){return this['_initialized']?this['_pixelsPerSec']:-0x1;}set['pixelsPerSec'](by){this['_pixelsPerSec']=by;}get['pixelsPerFrame'](){return this['_initialized']?this['_pixelsPerFrame']:-0x1;}set['pixelsPerFrame'](by){this['_pixelsPerFrame']=by;}get['frameCounter'](){return this['_frameCounter'];}set['frameCounter'](by){this['_frameCounter']=by;}get['fps'](){return this['_fps'];}set['fps'](by){this['_fps']=by;}get['refreshRate'](){return this['_refreshRate'];}set['refreshRate'](by){this['_refreshRate']=by;}get['refreshDisplayed'](){return this['_refreshDisplayed'];}set['refreshDisplayed'](by){this['_refreshDisplayed']=by;}get['status'](){return this['_status'];}set['status'](by){this['_status']=by;}get['message'](){return this['_message'];}set['message'](by){this['_message']=by;}get['autoPPS'](){return this['_autoPPS'];}set['autoPPS'](by){this['_autoPPS']=by;}get['strictSync'](){return this['_strictSync'];}set['strictSync'](by){this['_strictSync']=by;}get['useSecondaryTimestamp'](){return this['_useSecondaryTimestamp'];}set['useSecondaryTimestamp'](by){this['_useSecondaryTimestamp']=by;}get['frameTime'](){return performance['now']()-this['_frameTimestamp'];}['isGood'](by){return ar['isGood'](by??this['_status']);}['isStutter'](by){return ar['isStutter'](by??this['_status']);}['isSyncing'](by){return ar['isSyncing'](by??this['_status']);}['isError'](by){return ar['isError'](by??this['_status']);}['__fail'](){this['_goodSeconds']=0x0,this['_hertz']['ignoreNextCycle']();}['__updateText'](by,bz){var bA=document['getElementById'](by);bA&&(bA['innerHTML']=bz),this['_fpsDisplayed']>0x190?this['_textWasRefreshed']=0x6:this['_fpsDisplayed']>0xc8?this['_textWasRefreshed']=0x4:this['_fpsDisplayed']>0x64?this['_textWasRefreshed']=0x3:this['_fpsDisplayed']>0x32?this['_textWasRefreshed']=0x2:this['_textWasRefreshed']=0x1;}['__updateBackColor'](by,bz){var bA=document['getElementById'](by);bA&&(bA['style']['backgroundColor']=bz),this['_fpsDisplayed']>0x190?this['_textWasRefreshed']=0x6:this['_fpsDisplayed']>0xc8?this['_textWasRefreshed']=0x4:this['_fpsDisplayed']>0x64?this['_textWasRefreshed']=0x3:this['_fpsDisplayed']>0x32?this['_textWasRefreshed']=0x2:this['_textWasRefreshed']=0x1;}['__windowCheck'](){if(this['_currWidth']=ak['getWidth'](),this['_currHeight']=ak['getHeight'](),this['_currScrollX']=ak['getScrollX'](),this['_currScrollY']=ak['getScrollY'](),this['_currWindowX']=ak['getPosX'](),this['_currWindowY']=ak['getPosY'](),!this['_resyncNeeded']&&this['_lastValid']){if(this['_currWidth']!==this['_lastWidth']||this['_currHeight']!==this['_lastHeight'])this['_browserMoved']=!0x0,this['startSyncing']('Waiting\x20for\x20window\x20resize\x20to\x20finish...',ar['resync']['HARD']);else{if(this['_currWindowX']!==this['_lastWindowX']||this['_currWindowY']!==this['_lastWindowY'])this['_browserMoved']=!0x0,this['startSyncing']('Waiting\x20for\x20window\x20move\x20to\x20finish...',ar['resync']['SOFT']);else{if(this['_currScrollX']!==this['_lastScrollX']||this['_currScrollY']!==this['_lastScrollY'])this['_browserMoved']=!0x0,this['startSyncing']('Waiting\x20for\x20window\x20scroll\x20to\x20finish...',ar['resync']['SOFT']);else{if(this['_currWindowX']+this['_currWidth']<0x0||this['_currWindowX']+this['_currHeight']<0x0||this['_currWindowX']>ak['getScreenWidth']()||this['_currWindowY']>
1ak['getScreenHeight']()){var by;this['isSyncing']()||null!==(by=window['UFOSystem'])&&void 0x0!==by&&by['native']||(this['__updateRefresh'](0x0),this['__fail'](),this['message']='Move\x20all\x20apps\x20and\x20browser\x20windows\x20to\x20primary\x20monitor\x20#1.',this['__updateStatus'](ar['status']['SYNCFAIL']));}}}}}this['_lastWidth']=this['_currWidth'],this['_lastHeight']=this['_currHeight'],this['_lastScrollX']=this['_currScrollX'],this['_lastScrollY']=this['_currScrollY'],this['_lastWindowX']=this['_currWindowX'],this['_lastWindowY']=this['_currWindowY'],this['_lastValid']=!0x0;}['__updateStatus'](by){this['status']===by&&this['message']===this['_messageDisplayed']||(this['status']=by,''!==this['message']?this['__updateText']('ufo_status',by['name']+this['_STATUS_SEPARATOR']+this['message']):this['__updateText']('ufo_status',by['name']),this['__updateBackColor']('ufo_status',by['color']),this['_messageDisplayed']=this['message']);}['__updateFPS'](by){this['_fpsDecimal']=by,this['fps']=Math['round'](by);var bz=this['_fpsDisplayed'];if(isNaN(this['fps'])||this['fps']<=0x1)bz=0x0;else{if(this['_fpsSync']>=0x2){var bA;this['_fpsStable']++;let bB=Math['abs'](this['fps']-this['_fpsDisplayed']);null!==(bA=window['UFOSystem'])&&void 0x0!==bA&&bA['native']&&this['_fpsDisplayed']===this['refreshDisplayed']?bB>0.1*this['refreshDisplayed']&&(bz=this['fps']):bB&&(bz=this['fps']);}}bz!==this['_fpsDisplayed']&&(this['_fpsStable']=0x0,this['_fpsDisplayed']=bz,this['__updateText']('display_fps',0x0===this['_fpsDisplayed']?'-':this['fps']['toString']()));}['__addHistoricalFPS'](by,bz){for(this['_fpsHistory']['push'](0x0|by),this['_performHistory']['push'](0x0|bz);this['_fpsHistory']['length']>=0x1e;)this['_fpsHistory']['shift']();for(;this['_performHistory']['length']>=0x1e;)this['_performHistory']['shift']();!this['_refreshRateFoundBefore']&&!this['_logStillSyncing']&&this['_fpsHistory']['length']>=0xf&&(this['__logFPS']('Framerate\x20Still\x20Syncing'),this['_logStillSyncing']=!0x0);}['__getAverageFPS'](by,bz){return Math['round'](this['__getAverageFPSdecimal'](by,bz));}['__getAverageFPSdecimal'](by,bz){for(var bA=0x0,bB=0x0,bC=0x0,bD=this['_fpsHistory']['length']-0x1;bD>=0x0&&!(this['_fpsHistory'][bD]<=0x1)&&(0x0==bC&&(bC=this['_fpsHistory'][bD]),bC>this['_fpsHistory'][bD]&&(bC=this['_fpsHistory'][bD]),bA+=this['_fpsHistory'][bD],!(++bB>=by));bD--);return bz&&bB>=0x2&&(bA-=bC,bB--),bA/bB;}['__getFPSvolatilityIndex'](by){for(var bz=0x0,bA=0x0,bB=this['refreshDisplayed']>0x0?this['refreshDisplayed']:this['_hertz']['getCurrentFrequency'](),bC=this['_fpsHistory']['length']-0x1;bC>=0x0&&!(this['_fpsHistory'][bC]<=0x1)&&(0x0==bz&&(bz=0x1),bz*=Math['abs'](this['_fpsHistory'][bC]-bB),!(++bA>=by));bC--);return bz;}['__getAveragePerformance'](by){for(var bz=0x0,bA=0x0,bB=this['_performHistory']['length']-0x1;bB>=0x0&&(bz+=this['_performHistory'][bB],!(++bA>=by));bB--);return Math['round'](bz/bA);}['__getVarianceOfFPS'](by){for(var bz=0x0,bA=0x0,bB=this['_fpsHistory']['length']-0x1;bB>=0x0&&((0x0===bz||this['_fpsHistory'][bB]<bz)&&(bz=this['_fpsHistory'][bB]),(0x0===bA||this['_fpsHistory'][bB]>bA)&&(bA=this['_fpsHistory'][bB]),!(--by<=0x0));bB--);return bA-bz;}['__logFPS'](by){var bz='FPS:'+this['_fpsHistory']['toString']()+'\x20/\x20CPU:'+this['_performHistory']['toString']()+'\x20('+ak['browser']+'\x20'+ak['versionLong']+','+ak['OS']+')'+(''!==this['message']?'\x20('+this['message']+')':'');a4['event'](by,bz);}['__updatePixelsPer'](){!0x0===this['autoPPS']?this['updatePixelsPerSec'](this['pixelsPerSec']):this['updatePixelsPerFrame'](this['pixelsPerFrame']);}['__updateRefresh'](by){var bz;let bA=!0x1;if(null!==(bz=window['UFOSystem'])&&void 0x0!==bz&&bz['native']){var bB;this['refreshDisplayed']=Math['round']((null===(bB=window['UFOSystem']['displayCurrent'])||void 0x0===bB?void 0x0:bB['refreshRate'])??0x0),this['__updateText']('display_refresh',this['refreshDisplayed']),this['_browserBad']=!0x1,this['_refreshRateFoundBefore']=!0x0;}else{if(by<=0x1)return this['__updateText']('display_refresh','?'),this['refreshDisplayed']=0x0,this['_browserBad']=!0x1,this['_refreshRateFoundBefore']=!0x1,void ak['__vsyncCheck'](!0x0);if(this['_fpsSync']<0x2)return;}var bC=Math['abs'](by-this['refreshDisplayed']);if((bC>=0x2||bC>=0x1&&!(this['refreshRate']%0xa)&&this['refreshDisplayed']%0xa)&&(bA=!0x0),bA){var bD;(null!==(bD=window['UFOSystem'])&&void 0x0!==bD&&bD['native']||by>=this['_MIN_GOOD_HZ'])&&(this['_browserBad']=!0x1,ak['__vsyncCheck'](!0x0)),this['__updateText']('display_refresh',this['refreshRate']['toString']()),this['refreshDisplayed']=by;try{parent['onRefreshRateChange']&&parent['onRefreshRateChange']();}catch(bE){}}}['__getPreferredLookbehind'](){return this['_refreshRateFoundBefore']&&this['refreshRate']===this['refreshDisplayed']?0x2:0x3c===this['refreshRate']||0x4b===this['refreshRate']||0x64===this['refreshRate']||0x78===this['refreshRate']||0x90===this['refreshRate']||0xa5===this['refreshRate']||0xc8===this['refreshRate']||0xf0===this['refreshRate']||0x118===this['refreshRate']||0x12c===this['refreshRate']||0x168===this['refreshRate']||0x1e0===this['refreshRate']||0x21c===this['refreshRate']||0x258===this['refreshRate']||0x2d0===this['refreshRate']||0x3c0===this['refreshRate']||0x3e8===this['refreshRate']?this['strictSync']?0x4:0x2:this['refreshRate']<0x3a||this['refreshRate']>0xfa?this['strictSync']?0x7:0x5:this['strictSync']?0x5:0x3;}['startSyncing'](by,bz){this['_resyncNeeded']=bz,this['message']=by,this['__updateStatus'](ar['status']['SYNCING']);}['setErrorState'](by){this['message']=by,this['__updateStatus'](ar['status']['ERROR']);}['getSecondsSinceLastStutter'](){return this['_goodSeconds'];}['getCurrentFloatRefreshRate'](){var by;let bz=0x0;if(null!==(by=window['UFOSystem'])&&void 0x0!==by&&by['native']){var bA,bB;let bE=0x0;var bC,bD;null!==(bA=window['UFOSystem']['displayCurrent'])&&void 0x0!==bA&&bA['vertTotal']&&(bE=(null===(bC=window['UFOSystem']['displayCurrent'])||void 0x0===bC?void 0x0:bC['horizScanRate'])/(null===(bD=window['UFOSystem']['displayCurrent'])||void 0x0===bD?void 0x0:bD['vertTotal'])),bz=bE??(null===(bB=window['UFOSystem']['displayCurrent'])||void 0x0===bB?void 0x0:bB['refreshRate'])??0x0;}return bz||(bz=this['_hertz']['getFilteredHz']()),bz>0x0?bz:this['refreshRate']>0x0?this['refreshRate']:0x0;}['getBestEstimateRefreshRate'](){var by;if(null!==(by=window['UFOSystem'])&&void 0x0!==by&&by['native'])return this['getCurrentFloatRefreshRate']();let bz=this['_hertz']['getFilteredHz']();return bz>0x0?bz:this['refreshRate']>0x0?this['refreshRate']:this['fps'];}['getFloatPixelsPerFrame'](){let by=this['getCurrentFloatRefreshRate']();return by<=0x0?this['pixelsPerFrame']:0x1*this['pixelsPerSec']/by;}['getDisplayableFPS'](){let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:0x1;var bz=0x0;if(this['refreshDisplayed']>0x0)bz=this['refreshDisplayed']/by;else{if(!(this['fps']>0x0))return 0x0;bz=this['fps']/by;}return bz>=0xa?Math['round'](bz):Math['round'](0xa*bz)/0xa;}['getIntegerPixelsPerSec'](){return this['pixelsPerFrame']*(this['refreshDisplayed']||this['fps']);}['updatePixelsPerSec'](by){isNaN(by)&&(by=0x0);var bz=0x0;if(0x0!==by){var bA=this['status']===ar['status']['GOOD'];if(bA||(bA=this['__getFPSvolatilityIndex'](0x3)<0x2710),bA&&this['refreshDisplayed']>0x0)bz=Math['round'](by/this['refreshDisplayed']);else{if(this['_fpsHistory']['length']>0x0)bz=Math['round'](by/this['__getAverageFPS'](0x5,!0x0));else{var bB=this['_hertz']['getFilteredHz']();bB>0x0&&(bz=Math['round'](by/bB));}}0x0===bz&&(bz=Math['round'](by/0x3c));}isNaN(bz)||by===this['pixelsPerSec']&&bz===this['pixelsPerFrame']||(this['pixelsPerSec']=by,this['pixelsPerFrame']=bz,this['__updateText']('display_pps',this['pixelsPerSec']),this['__updateText']('display_ppf',this['pixelsPerFrame']));}['updatePixelsPerFrame'](by){let bz=!(arguments['length']>0x1&&void 0x0!==arguments[0x1])||arguments[0x1];var bA=this['pixelsPerSec'];if(this['refreshDisplayed']>0x0)bA=by*this['refreshDisplayed'];else{if(this['_fpsHistory']['length']>0x0)bA=by*this['__getAverageFPS'](0x5,!0x0);else{var bB=this['_hertz']['getCurrentFrequency']();bB>0x0&&(bA=by*bB);}}bz&&(bA=Math['round'](bA)),bA===this['pixelsPerSec']&&by===this['pixelsPerFrame']||(this['pixelsPerSec']=bA,this['pixelsPerFrame']=by,this['__updateText']('display_pps',this['pixelsPerSec']),this['__updateText']('display_ppf',this['pixelsPerFrame']));}['beginFrameTimestamp'](){let by=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0;this['frameTimestampPrimary']=performance['now'](),this['frameTimestampSecondary']=by||0x0,this['_useSecondaryTimestamp']&&by?this['_frameTimestamp']=this['frameTimestampSecondary']:this['_frameTimestamp']=this['frameTimestampPrimary'],0x0!==this['_frameTimestampPrev']&&(this['timePeriodFrameStart']=this['_frameTimestamp']-this['_frameTimestampPrev']),this['frameTimestampPrevPrimary']=this['frameTimestampPrimary'],this['frameTimestampPrevSecondary']=this['frameTimestampSecondary'],this['_frameTimestampPrev']=this['_frameTimestamp'],this['frameTimestamp']=this['_frameTimestamp'];}['endFrameTimestamp'](){var by;if(this['_accuracyCheckBeginTime']=performance['now'](),this['frameCounter']=this['frameCounter']+0x1,this['_firstRun']&&(this['_browserBad']=!0x0!==ak['vsync'],this['_firstRun']=!0x1,this['_resyncNeeded']=ar['resync']['NONE'],''===this['message']&&(this['message']='Initializing...'),this['__updateStatus'](ar['status']['SYNCING'])),this['__windowCheck'](),0x0!==this['fps']){if(this['_frameTimeIdeal']=0x3e8/this['_fpsDecimal'],this['jitter']=this['timePeriodFrameStart']-this['_frameTimeIdeal'],this['jitterAlt']=this['timePeriodFrameStart'],Math['abs'](this['jitter'])>=0x1&&(this['jitter']<0x0?(this['_jitterLargeNegativeCount']++,this['_jitterLargeNegativeTotal']+=-this['jitter']):(this['_jitterLargePositiveCount']++,this['_jitterLargePositiveTotal']+=this['jitter'])),this['fps']<=0x2||Math['abs'](this['jitter'])>0xc8)this['_browserFroze']&&!this['_browserMoved']||(this['_browserFroze']=!0x0,this['__fail'](),this['isSyncing']()||this['startSyncing']('Browser\x20pause\x20detected,\x20resynchronizing...',ar['resync']['HARD']));else{if(this['_frameTimestamp']-this['_lastSecond']>=0x5dc)this['_browserFroze']&&!this['_browserMoved']||(this['_browserFroze']=!0x0,this['__fail'](),this['isSyncing']()||this['startSyncing']('Browser\x20freeze\x20detected,\x20resynchronizing...',ar['resync']['HARD'])),this['_lastSecond']=this['_frameTimestamp'];else{if(Math['abs'](this['jitter'])>this['_frameTimeIdeal']/0x2){if(this['_jitterAmount']=Math['abs'](this['jitter'])/this['_frameTimeIdeal'],this['_jitterAmountTotal']+=this['_jitterAmount'],this['_jitterAmount']>0x1&&(this['_jitterMajor']+=this['_jitterAmount']),this['_jitterCount']++,this['_jitterProblem']++,this['status']!==ar['
1status']['PERFORMANCE']&&this['status']!==ar['status']['HIGH_CPU']&&this['status']!==ar['status']['STUTTER_BUG']&&this['status']!==ar['status']['BROWSERBAD']&&this['status']!==ar['status']['BROWSERUNKNOWN']&&this['status']!==ar['status']['SYNCING']&&this['status']!==ar['status']['SYNCING_MORE']&&this['status']!==ar['status']['SYNCFAIL']&&this['status']!==ar['status']['ERROR']&&!this['_resyncNeeded']){if(this['_jitterProblem']<=0xa&&this['_jitterCount']<=0xa&&this['_jitterAmount']<=0x1&&this['_jitterAmountTotal']/this['_jitterCount']<0x1&&this['status']!==ar['status']['STUTTER_DETECTED']&&this['status']!==ar['status']['STUTTER_MAJOR'])0x0!==this['_textWasRefreshed']||this['status']===ar['status']['STUTTER_CAUTION']||window['chrome']||(this['message']='Potential\x20browser\x20stutter\x20occured\x20('+this['_jitterCount']['toString']()+')',this['__updateStatus'](ar['status']['STUTTER_CAUTION']));else{if(this['_jitterCount']<=0xa&&this['_jitterProblem']<=0xa&&this['status']!==ar['status']['STUTTER_MAJOR']){var bz;0x0===this['_textWasRefreshed']&&this['status']!==ar['status']['STUTTER_DETECTED']&&(null!==(bz=window['UFOSystem'])&&void 0x0!==bz&&bz['native']||(this['message']='Browser\x20stutter\x20detected\x20('+this['_jitterCount']['toString']()+'+).\x20Close\x20other\x20apps\x20and\x20tabs.',this['__updateStatus'](ar['status']['STUTTER_DETECTED'])));}else{if(this['status']!==ar['status']['STUTTER_MAJOR']){var bA;null!==(bA=window['UFOSystem'])&&void 0x0!==bA&&bA['native']||(this['message']='Browser\x20stuttering\x20is\x20occuring\x20('+this['_jitterCount']['toString']()+'+).\x20Close\x20other\x20apps\x20and\x20tabs.',this['__updateStatus'](ar['status']['STUTTER_MAJOR']));}}}}}else this['_jitterProblem']>0x0&&this['_jitterProblem']--;}}}if(this['_textWasRefreshed']>0x0&&this['_textWasRefreshed']--,this['_resyncNeeded']&&(this['__fail'](),this['__updateStatus'](ar['status']['SYNCING']),this['_syncSeconds']=0x0,this['_resyncNeeded']==ar['resync']['HARD']&&(this['_fpsSync']=0x0,this['_count']=0x0,this['_lastSecond']=this['_frameTimestamp'],this['_jitterCount']=0x0,this['_jitterProblem']=0x0,this['_jitterLargeNegativeCount']=0x0,this['_jitterLargePositiveCount']=0x0,this['_jitterLargeNegativeTotal']=0x0,this['_jitterLargePositiveTotal']=0x0,this['_frameTimeTotal']=0x0,this['_frameTimePrevSecond']=this['_frameTimestamp']),this['_resyncNeeded']=ar['resync']['NONE']),0x0!==this['_lastSecond']){if(this['_frameTimestamp']-this['_lastSecond']>=0x3e8){var bB=0x0===this['_jitterCount'],bC=bB,bD=this['refreshDisplayed']-this['refreshRate'],bE=this['_jitterLargeNegativeTotal']/this['_jitterLargeNegativeCount'],bF=this['_jitterLargePositiveTotal']/this['_jitterLargePositiveCount'],bG=this['_frameTimestamp']-this['_frameTimePrevSecond'],bH=this['_frameTimePrevSecond']?this['_count']*(0x3e8/bG):this['_count'];this['_frameTimePrevSecond']=this['_frameTimestamp'],this['_lastSecond']+=0x3e8,this['_fpsSync']++,this['_syncSeconds']++,this['_secondsCounter']++;var bI=this['_count']/0x2;bI>this['_FPS_AVERAGING_MIN']&&(bI=this['_FPS_AVERAGING_MIN']),bI>this['_fpsMinimum']&&(this['_fpsMinimum']=bI),this['_count']>=this['_fpsMinimum']&&this['__addHistoricalFPS'](this['_count'],this['_frameTimeTotal']),this['__updateFPS'](bH);var bJ=bH<this['_MIN_GOOD_HZ'];if(this['_browserBad']&&bJ)this['message']=ak['vsyncInfo'],this['__updateStatus'](!0x1===ak['vsync']?ar['status']['BROWSERBAD']:ar['status']['BROWSERUNKNOWN']),bB=!0x1,bC=!0x1;else{if(this['_count']<this['_FPS_AVERAGING_ABSOLUTE_MIN'])this['_fpsSync']=0x0,this['_syncSeconds']=0x0,bB=!0x1,bC=!0x1;else{if(bF>1.5&&0x3*bF<bE)bB=!0x1,bC=!0x1,this['strictSync']=!0x0,this['status']!==ar['status']['SYNCFAIL']&&(this['__updateRefresh'](0x0),this['_hertz']['restartMeasuring'](),this['_logStrangeStutter']||(this['__logFPS']('Framerate\x20Strange'),this['_logStrangeStutter']=!0x0),this['isSyncing']()||this['startSyncing']('Unusual\x20stuttering\x20detected,\x20resynchronizing...',ar['resync']['SOFT']));else{if(this['isSyncing']()){var bK;this['_syncSeconds']>this['_FPS_SYNC_COUNT_TO_FAIL']&&(null!==(bK=window['UFOSystem'])&&void 0x0!==bK&&bK['native']?(this['startSyncing']('VSYNC\x20Detected',ar['resync']['GOOD']),this['__updateStatus'](ar['status']['GOOD']),bC=!0x0,bB=!0x0):(this['fps']<0x30?this['message']='Low\x20Framerate.\x20Try\x20closing\x20all\x20apps\x20and\x20browser\x20tabs.':this['message']='Browser\x20unable\x20to\x20VSYNC.\x20Try\x20closing\x20all\x20tabs\x20&\x20all\x20apps.',this['__updateStatus'](ar['status']['SYNCFAIL']),this['_logFrameRateLow']||(this['_logFrameRateLow']=!0x0,this['__logFPS']('Framerate\x20Fail\x20Poor')),bB=!0x1,bC=!0x1));}else{if(this['refreshDisplayed']>0x0){var bL;if(bD<-0x3)this['_hertz']['restartMeasuring'](),this['__updateRefresh'](0x0),this['strictSync']=!0x0,bC=!0x1,null!==(bL=window['UFOSystem'])&&void 0x0!==bL&&bL['native']||this['startSyncing']('Large\x20framerate\x20increase,\x20resynchronizing...\x20('+this['refreshDisplayed']+'\x20to\x20'+this['refreshRate']+')',ar['resync']['SOFT']);else{if(bD>0x14){var bM;this['_hertz']['restartMeasuring'](),this['__updateRefresh'](0x0),this['strictSync']=!0x0,bC=!0x1,null!==(bM=window['UFOSystem'])&&void 0x0!==bM&&bM['native']||this['startSyncing']('Large\x20framerate\x20decrease,\x20resynchronizing...',ar['resync']['SOFT']);}else{if(Math['abs'](bD)>=0x2){var bN;this['_hertz']['restartMeasuring'](),this['__updateRefresh'](0x0),this['strictSync']=!0x0,bC=!0x1,null!==(bN=window['UFOSystem'])&&void 0x0!==bN&&bN['native']||this['startSyncing']('Browser\x20framerate\x20varying\x20too\x20much.\x20Close\x20other\x20apps\x20and\x20tabs.',ar['resync']['SOFT']);}}}}}}}}if(!this['_browserBad']&&this['__getAveragePerformance'](0x3)>this['_CPU_CONSUME_LIMIT']&&('Chrome'===ak['browser']?this['message']='Try\x20closing\x20apps/browser\x20tabs\x20if\x20you\x20see\x20stuttering.':this['message']='Try\x20closing\x20apps/tabs\x20if\x20you\x20see\x20stuttering.',this['__updateStatus'](ar['status']['HIGH_CPU']),this['_logPerformanceLow']||(this['_logPerformanceLow']=!0x0,this['__logFPS']('Framerate\x20Performance\x20Low')),this['__updateRefresh'](0x0),this['strictSync']=!0x0,bC=!0x1,bB=!0x1),0x3e===this['refreshDisplayed']&&this['_fpsStable']>=0x3&&!0x0===ak['vsync']&&'Windows'===ak['OS']&&('Chrome'!==ak['browser']&&'Opera'!==ak['browser']||(this['message']=ak['browser']+'\x20VSYNC\x20non-synchronization\x20bug.\x20Restart\x20browser.',this['__updateStatus'](ar['status']['STUTTER_BUG']),bB=!0x1)),!this['isSyncing']()){var bO,bP=this['fps']>this['_FPS_MAX'],bQ=this['fps']<this['_FPS_MIN'],bR=this['fps']>this['_FPS_RECOVERY'];this['status']===ar['status']['PERFORMANCE']&&!bR&&(bQ=!0x0),bP&&(this['_hertz']['getFilteredHz'](),this['_hertz']['getAgeOfSuccessfulDetect']()>0x7d0&&(bP=!0x1)),null!==(bO=window['UFOSystem'])&&void 0x0!==bO&&bO['native']&&(bP=!0x1,bQ=!0x1),bP?(this['message']='Attempting\x20to\x20sync\x20to\x20extreme\x20frame\x20rate.',this['__updateStatus'](ar['status']['SYNCING_MORE']),this['strictSync']=!0x0,bB=!0x1):bQ&&!this['_browserFroze']&&this['status']!==ar['
1status']['SYNCFAIL']&&(this['message']='Low\x20frame\x20rate.\x20Try\x20closing\x20all\x20apps\x20and\x20browser\x20tabs.',this['__updateStatus'](ar['status']['PERFORMANCE']),0x0===this['refreshRate']&&(this['_hertz']['restartMeasuring'](),this['__updateRefresh'](0x0)),bB=!0x1,bC=!0x1);}if(bC){var bS,bT;let bX=0x0,bY=null!==(bS=window['UFOSystem'])&&void 0x0!==bS&&bS['native']?(null===(bT=window['UFOSystem']['displayCurrent'])||void 0x0===bT?void 0x0:bT['refreshRate'])??0x0:0x0;var bU;if(this['refreshRate']=bY>0x0?bY:Math['round'](bH),this['_goodSeconds']++,this['refreshRate']<this['_FPS_MIN']?bC=!0x1:this['_goodSeconds']>0x0&&(bX=this['__getPreferredLookbehind'](),(this['_goodSeconds']<bX||this['__getVarianceOfFPS'](bX)>0x1)&&(bC=!0x1)),bC)this['_browserMoved']=!0x1,this['_browserFroze']=!0x1,bB&&(this['message']='','Safari'===ak['browser']&&this['fps']<=0x3e&&(this['message']='<i><span\x20class=\x27telemetry-subheading\x27>For\x20120\x20Hz\x20Safari,\x20disable\x20this\x20setting:\x20\x27Prefer\x20Page\x20Rendering\x20Updates\x20near\x2060fps\x27.</div></i>'),null!==(bU=window['UFOSystem'])&&void 0x0!==bU&&bU['native']&&this['startSyncing']('Native\x20VSYNC\x20Detected',ar['resync']['GOOD']),this['__updateStatus'](ar['status']['GOOD']),this['_refreshRateFoundBefore']||this['__logFPS'](this['_logFrameRateLow']||this['_logPerformanceLow']?'Framerate\x20Recovered':'Framerate\x20Success'),this['_refreshRateFoundBefore']=!0x0),this['__updateRefresh'](this['refreshRate']);}else this['__fail']();this['_count']=0x0,this['_jitterMajor']=0x0,this['_jitterCount']=0x0,this['_jitterAmountTotal']=0x0,this['_jitterLargeNegativeCount']=0x0,this['_jitterLargePositiveCount']=0x0,this['_jitterLargeNegativeTotal']=0x0,this['_jitterLargePositiveTotal']=0x0,this['_frameTimeTotal']=0x0,this['_frameTimePrevSecond']=this['_frameTimestamp'];}}else this['_lastSecond']=this['_frameTimestamp'],this['_count']=0x0;this['__updatePixelsPer']();let bV=performance['now']();if(this['timePeriodFrameRender']=bV-this['_frameTimestamp'],this['timePeriodAccuracyChecker']=bV-this['_accuracyCheckBeginTime'],this['_frameTimeTotal']+=this['timePeriodFrameRender']+this['timePeriodAccuracyChecker'],this['_count']++,this['_hertz']['countCycle'](this['_accuracyCheckBeginTime']),null!==(by=window['UFOSystem'])&&void 0x0!==by&&by['native']){var bW;this['refreshRate']=(null===(bW=window['UFOSystem']['displayCurrent'])||void 0x0===bW?void 0x0:bW['refreshRate'])??this['refreshRate'];let bZ=Math['round'](this['refreshRate']);this['refreshDisplayed']!==bZ&&(this['refreshDisplayed']=bZ,this['__updateText']('display_refresh',this['refreshDisplayed']['toString']()));}}['finalizeFrameTimestamp'](){this['timePeriodFrameFinal']=this['frameTime'];}}(),at=class by{constructor(){let bz=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:by['DEFAULT_MAX_BUFFER_SIZE'],bA=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:Array;this['_UFORingBuffer']=!0x0,(bz<0x1||!Number['isInteger'](bz))&&(a2['error'](),bz=by['DEFAULT_MAX_BUFFER_SIZE']);const bB=Math['log2'](bz);if(!Number['isInteger'](bB)){let bC=Math['pow'](0x2,Math['ceil'](bB));a2['error'](),bz=bC;}this['length']=bz,this['mask']=this['length']-0x1,this['ArrayType']=bA,this['data']=new bA(bz),this['clear']();}['clear'](){this['head']=0x0,this['tail']=0x0,this['count']=0x0,this['total']=0x0,this['overflow']=0x0;}['push'](bz){this['data'][this['head']]=bz,this['head']=this['head']+0x1&this['mask'],this['count']>=this['length']?(this['tail']=this['head'],this['overflow']++):this['count']++,this['total']++;}['pushArray'](bz){let bA=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:0x0,bB=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:void 0x0;if(bz&&Number['isInteger'](bz['length'])){(void 0x0===bB||bB>bz['length'])&&(bB=bz['length']),bA<0x0&&(bA=0x0);for(let bC=bA;bC<bB;bC++)this['push'](bz[bC]);}}['pushAndDrop'](bz){let bA=this['count']===this['length']?this['data'][this['tail']]:null;return this['push'](bz),bA;}['pop'](){if(0x0===this['count'])return null;const bz=this['data'][this['tail']];return this['tail']=this['tail']+0x1&this['mask'],this['count']--,bz;}['peek'](){let bz=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:0x0;return 0x0===this['count']||bz<0x0||bz>=this['count']?null:this['data'][this['head']-bz-0x1&this['mask']];}['at'](){let bz=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:0x0;return 0x0===this['count']?null:bz>=0x0?bz>=this['count']?null:this['data'][this['tail']+bz&this['mask']]:-bz>this['count']?null:this['data'][this['head']+bz&this['mask']];}['isEmpty'](){return 0x0===this['count'];}['isFull'](){return this['count']>=this['length'];}};a1(at,'DEFAULT_MAX_BUFFER_SIZE',0x400);var au=at,av=class bz{constructor(){this['_UFOPerformance']=!0x0,this['_jankMonitorArmed']=!0x1,this['_jankStarted']=!0x1,this['_jankBeganTime'],this['_autorefreshBeganTime'],this['_forceStutterTime']=0x0,this['_forceStutterEvery']=0x1f4,this['_timestampBegin']=0x0,this['_timestampEnd']=0x0,this['_durationIdle']=0x0,this['_durationRender']=0x0,this['_rendering']=!0x1,this['_renderExtremeCount']=0x0,this['_lastStatus']=null,this['_lastFocus']=!0x1,this['_idleSamples']=new au(bz['RENDERTIME_BUFFER_SIZE'],Float64Array),this['_idleSum']=0x0,this['_renderSamples']=new au(bz['RENDERTIME_BUFFER_SIZE'],Float64Array),this['_renderSum']=0x0,this['_spinning']=!0x1;}get['isSpinning'](){return this['_spinning'];}['begin'](bA){var bB;let bC=as['status'],bD=null===(bB=ak['hasFocus'])||void 0x0===bB?void 0x0:bB['call'](ak);this['_timestampBegin']=performance['now'](),!ar['isSyncing'](this['_lastStatus'])&&ar['isSyncing'](bC)||!ar['isError'](this['_lastStatus'])&&ar['isError'](bC)?this['__clearTimeSamples']():this['_lastFocus']||!bD||ar['isGood'](bC)||this['__clearTimeSamples'](),this['_lastFocus']=bD,this['_lastStatus']=bC,!this['_rendering']&&this['_timestampEnd']>0x0?(this['_rendering']=!0x0,this['_durationIdle']=this['_timestampBegin']-this['_timestampEnd'],this['__pushIdleTime'](this['_durationIdle'])):(this['_rendering']=!0x1,this['_durationIdle']=0x0);}['end'](bA){this['_timestampEnd']=performance['now'](),this['_rendering']&&this['_timestampBegin']>0x0?(this['_rendering']=!0x1,this['_durationRender']=this['_timestampEnd']-this['_timestampBegin'],this['__pushRenderTime'](this['_durationRender'])):this['_durationRender']=0x0,this['busyLooper'](bA),this['jankMonitor']();}['__pushIdleTime'](bA){let bB=this['_idleSamples']['pushAndDrop'](bA);null!==bB&&(this['_idleSum']-=bB),this['_idleSum']+=bA;}['__pushRenderTime'](bA){let bB=this['_renderSamples']['pushAndDrop'](bA);null!==bB&&(this['_renderSum']-=bB),this['_renderSum']+=bA;}['__clearTimeSamples'](){this['_idleSamples']['clear'](),this['_idleSum']=0x0,this['_renderSamples']['clear'](),this['_renderSum']=0x0;}['busyLooper'](bA){if(this['_spinning']=!0x1,!bA||!bA['display'])return;if(!this['_idleSamples']['isFull']()||!this['_renderSamples']['isFull']())return;if(this['_idleSum']<=0x0||this['_renderSum']<=0x0)return;let bB=this['_idleSum']/this['_idleSamples']['count'],bC=this['_renderSum']/this['_renderSamples']['count'],bD=bC+bB,bE=bC/bD,bF=ak['hasFocus'](),bG=ak['isFullScreen'](),bH='Safari'===ak['browser'],bI='Mac'===ak['OS'],bJ=!window['chrome'],bK=ad['globalSettings'];switch(bK['getSafeValue']('highpower')){case'mac':if(!bG&&!bF||!bI)return;break;case'all':if(!bG&&!bF)return;}if(bA['display']['isEmbedded']&&!bF)return;let bL=as['getCurrentFloatRefreshRate'](),bM=0x3e8/bD,bN=bM??bL;if(bL&&bM&&(bN=Math['max'](bL,bM)),bN<bz['MIN_REFRESH_RATE'])return;let bO='gpu',bP=bK['getSafeValue']('highpowerspin');'auto'!==bP?bO=bP:(ak['mobile']||bJ)&&(bO='cpu');let bQ=bK['getSafeValue']('highpowerperc')/0x64;if(bH&&bK['isDefault']('highpowerperc'))switch(bA['engineID']){case'2d':bQ=bz['OPTIMAL_PERC_SAFARI_2D'];break;case'webgl':bQ=bz['OPTIMAL_PERC_SAFARI_WEBGL'];break;case'webgpu':bQ=bz['OPTIMAL_PERC_SAFARI_WEBGPU'];}bQ>
1bz['MAX_PERCENT']&&(bQ=bz['MAX_PERCENT']),bQ+=bK['getSafeValue']('highpowerrandom')/0x64*(Math['random']()-0.5),bQ<0x0&&(bQ=0x0);let bR=0x3e8/bN*bQ;if(bR>bz['MAX_MILLISECS']&&(bR=bz['MAX_MILLISECS']),bE>bz['MAX_PERCENT'])return this['_renderExtremeCount']++,void(this['_renderExtremeCount']>bz['MAX_GPU_HUNGRY_FRAMES']&&this['__clearTimeSamples']());this['_renderExtremeCount']=0x0;let bS=bA['display'];bS['setColor']('#FFFFFF');let bT=0x0,bU=bS['width']-0x14;for(bU<0x14&&(bU=0x14);as['frameTime']<bR&&!(as['frameTime']>=bR);)'gpu'===bO&&(bS['setAlpha'](0x0),bS['fillRect']({'x':bT%bU,'y':Math['floor'](bT/bU),'width':0x14,'height':0x14}),bS['setAlpha'](0x1)),bT=(bT+0xa*Math['random']())%0xf4240;this['_spinning']=!0x0;}['jankMonitorReset'](){this['_jankMonitorArmed']=!0x1,this['_jankStarted']=!0x1;}['jankMonitor'](){let bA=ad['globalSettings'];if(bA){if(bA['getValue']('debug-forcesyncfail')){if(0x0===this['_forceStutterTime']){if(!as['refreshRate'])return;this['_forceStutterTime']=performance['now']();}else{if(performance['now']()-this['_forceStutterTime']>this['_forceStutterEvery']){let bB=performance['now'](),bC=0x7d0/as['refreshRate'];for((bC<0x0||bC>0x1f4||isNaN(bC))&&(bC=0x64);performance['now']()-bB<bC;);this['_forceStutterTime']=performance['now']();}}}bA['getSafeValue']('debug-autorefresh')&&(this['_autorefreshBeganTime']?performance['now']()-this['_autorefreshBeganTime']>0x3e8*bA['getSafeValue']('autorefresh')&&(this['_autorefreshBeganTime']=performance['now'](),location['reload']()):this['_autorefreshBeganTime']=performance['now']()),bA['getSafeValue']('kiosk')&&(
1document['hidden']?this['_jankStarted']=!0x1:as['isStutter']()||as['status']===ar['status']['SYNCFAIL']?this['_jankMonitorArmed']&&(this['_jankStarted']?performance['now']()-this['_jankBeganTime']>bz['MAX_STUTTERING_MILLISECS']&&(a2['warn'](),this['_jankBeganTime']=performance['now'](),location['reload']()):(this['_jankStarted']=!0x0,this['_jankBeganTime']=performance['now'](),a2['warn']())):(this['_jankMonitorArmed']||a2['log'](),this['_jankMonitorArmed']=!0x0,this['_jankStarted']&&a2['log'](),this['_jankStarted']=!0x1));}}};a1(av,'MAX_MILLISECS',8.8),a1(av,'MAX_PERCENT',0.8),a1(av,'MAX_GPU_HUNGRY_FRAMES',0xa),a1(av,'MIN_REFRESH_RATE',0x14),a1(av,'MAX_STUTTERING_MILLISECS',0x3a98),a1(av,'OPTIMAL_PERC_SAFARI_2D',0.4),a1(av,'OPTIMAL_PERC_SAFARI_WEBGL',0.25),a1(av,'OPTIMAL_PERC_SAFARI_WEBGPU',0.4),a1(av,'RENDERTIME_BUFFER_SIZE',0x10);var aw=av,ax=class bA{constructor(){let bB=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:bA['ARRAY_INITIAL_SIZE'],bC=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:Float64Array;this['x']=new bC(bB),this['y']=new bC(bB),this['_ArrayType']=bC,this['_length']=0x0,this['_allocated']=bB;}get['length'](){return this['_length'];}['reset'](){let bB=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:0x0;bB>this['_length']&&this['allocate'](bB),this['_length']=bB||0x0;}['push'](bB,bC){return this['_length']>=this['_allocated']&&this['allocate'](this['_length']+0x1),this['x'][this['_length']]=bB,this['y'][this['_length']]=bC,this['_length']++,this;}['allocate'](){let bB=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0;if(bB&&bB<this['_allocated'])return;bB=bB||Math['max'](bA['ARRAY_INITIAL_SIZE'],Math['ceil'](this['_allocated']*bA['ARRAY_GROW_PERCENT']));const bC=new this['_ArrayType'](bB),bD=new this['_ArrayType'](bB);this['x']&&bC['set'](this['x']),this['y']&&bD['set'](this['y']),this['x']=bC,this['y']=bD,this['_allocated']=bB;}['clear'](){this['x']=null,this['y']=null,this['_length']=0x0,this['_allocated']=0x0;}};a1(ax,'ARRAY_INITIAL_SIZE',0x3e8),a1(ax,'ARRAY_GROW_PERCENT',0x2),a1(ax,'BEYOND_BOUNDS',Object['freeze']({'x':void 0x0,'y':void 0x0}));var ay=ax,az=class bB{constructor(){this['_UFORect']=!0x0,0x0!==arguments['length']?(arguments['length']<=0x0?void 0x0:arguments[0x0])instanceof bB||(arguments['length']<=0x0?void 0x0:arguments[0x0])instanceof DOMRect||'object'==typeof(arguments['length']<=0x0?void 0x0:arguments[0x0])?(this['clear'](),this['copyFrom'](arguments['length']<=0x0?void 0x0:arguments[0x0])):(this['x']=Number(arguments['length']<=0x0?void 0x0:arguments[0x0])||0x0,this['y']=Number(arguments['length']<=0x1?void 0x0:arguments[0x1])||0x0,this['width']=Number(arguments['length']<=0x2?void 0x0:arguments[0x2])||0x0,this['height']=Number(arguments['length']<=0x3?void 0x0:arguments[0x3])||0x0,this['_right']=this['x']+this['width'],this['_bottom']=this['y']+this['height']):this['clear']();}get['left'](){return this['x'];}get['top'](){return this['y'];}get['right'](){return this['_right'];}get['bottom'](){return this['_bottom'];}set['left'](bC){this['x']=bC;}set['top'](bC){this['y']=bC;}set['right'](bC){this['_right']=bC;}set['bottom'](bC){this['_bottom']=bC;}['clear'](){this['x']=0x0,this['y']=0x0,this['width']=0x0,this['height']=0x0,this['_right']=0x0,this['_bottom']=0x0;}['clone'](){return new bB(this);}['copyFrom'](bC){void 0x0!==bC&&(void 0x0!==bC['x']&&(this['x']=Number(bC['x'])),void 0x0!==bC['y']&&(this['y']=Number(bC['y'])),void 0x0!==bC['left']&&(this['x']=Number(bC['left'])),void 0x0!==bC['top']&&(this['y']=Number(bC['top'])),void 0x0!==bC['width']&&(this['width']=Number(bC['width'])),void 0x0!==bC['height']&&(this['height']=Number(bC['height'])),void 0x0!==bC['right']&&(this['_right']=Number(bC['right'])),void 0x0!==bC['bottom']&&(this['_bottom']=Number(bC['bottom'])),void 0x0===this['x']&&(this['x']=0x0),void 0x0===this['y']&&(this['y']=0x0),void 0x0===this['width']&&(this['width']=void 0x0!==this['_right']?this['_right']-this['x']:0x0),void 0x0===this['height']&&(this['height']=void 0x0!==this['_bottom']?this['_bottom']-this['y']:0x0),void 0x0===this['_right']&&(this['_right']=this['x']+this['width']),void 0x0===this['_bottom']&&(this['_bottom']=this['y']+this['height']));}static['polyfill'](){window['DOMRect']&&'undefined'!=typeof window['DOMRect']||(window['DOMRect']=bB),window['DOMRectReadOnly']&&'undefined'!=typeof window['DOMRectReadOnly']||(window['DOMRectReadOnly']=bB);}};az['polyfill']();var aA=class bC{constructor(){this['_id']=0x1;}['generateID'](){return this['_id']>Number['MAX_SAFE_INTEGER']&&bC['_64bit']&&(this['_id']=BigInt(this['_id'])),this['_id']++;}};a1(aA,'_64bit','function'==typeof BigInt);var aB=aA,aC=class bD{constructor(bE){var bF;this['_UFOEngineBase']=!0x0,this['_readonly']=!0x0,this['_error']=!0x1,this['_errorMessage']='',this['_objectID']=bD['_ufoUnique']['generateID'](),this['_refs']=0x0,this['_totalRefs']=0x0,void 0x0===this['constructor']['_liveEngines']&&(this['constructor']['_liveEngines']=0x0),void 0x0===this['constructor']['_totalEngines']&&(this['constructor']['_totalEngines']=0x0),this['constructor']['_liveEngines']++,this['constructor']['_totalEngines']++,bD['_liveEngineBase']++,bD['_totalEngineBase']++,bE&&(bE['_UFOGraphics']&&(bE=null===(bF=bE)||void 0x0===bF?void 0x0:bF['engine']),bE['version']!==bD['baseVersion']&&a2['throw'](),this['assign'](bE)
1),bD['DEBUG_COUNTERS']&&this['__logCounter']('[✓]\x20UFOEngine.constructor:\x20','generic',-0x1),this['self']=this['constructor'],this['name']=Object['freeze'](this['constructor']['name']);}static get['self'](){return this;}['dispose'](){bD['DEBUG_COUNTERS']&&this['__logCounter']('[X]\x20UFOEngine.dispose():','generic',-0x1),this['constructor']['dispose']&&this['constructor']['dispose'](),this['_refs']=0x0,this['constructor']['_liveEngines']--,bD['_liveEngineBase']--,this['_context']&&delete this['_context'],this['_canvas']&&delete this['_canvas'];}['addRef'](bE){this['_refs']++,this['_totalRefs']++,bD['DEBUG_COUNTERS']&&this['__logCounter']('[+]\x20UFOEngine.addRef():\x20\x20\x20\x20',bE);}['removeRef'](bE){this['_refs']--,bD['DEBUG_COUNTERS']&&this['__logCounter']('[-]\x20UFOEngine.removeRef():\x20',bE),this['_refs']<=0x0&&this['dispose']();}['__logCounter'](bE,bF){a2['warn']();}get['liveRefs'](){return this['_refs'];}get['liveEngines'](){return this['constructor']['_liveEngines'];}get['liveEngineBase'](){return bD['_liveEngineBase'];}get['totalRefs'](){return this['_totalRefs'];}get['totalEngines'](){return this['constructor']['_totalEngines'];}get['totalEngineBase'](){return bD['_totalEngineBase'];}get['engineID'](){return this['constructor']['engineID'];}get['engineName'](){return this['constructor']['engineName'];}get['surfaceID'](){return this['constructor']['surfaceID'];}get['surfaceType'](){return this['constructor']['surfaceType'];}get['engineCaps'](){return this['constructor']['engineCaps'];}get['engineExtensions'](){return this['constructor']['engineExtensions'];}get['engineAPI'](){return this['constructor']['engineAPI'];}get['readonly'](){return this['_readonly'];}get['context'](){return this['_context'];}get['canvas'](){return this['_canvas'];}get['texture'](){return this['_texture'];}get['colorSpace'](){return this['_colorSpace'];}get['ready'](){return!0x1;}get['width'](){return 0x0;}get['height'](){return 0x0;}get['error'](){return this['_error'];}get['errorMessage'](){return this['_errorMessage'];}['frameBegin'](bE){}['frameEnd'](bE){}['frameForceFlush'](bE){}['setSmoothing'](bE){}['setAlpha'](bE){}['setBlendingMode'](bE){}['setColor'](bE){}['setClipRect'](bE){}['clearRect'](bE){}['drawLine'](bE){}['drawPolygon'](bE){}['drawImage'](bE){}['draw'](){let bE=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:bD['ARGS_DEFAULT'];this['drawImage'](bE);}['drawRect'](){let bE=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:bD['ARGS_DEFAULT'];this['_context']||a2['throw']();const bF=bE['x']??0x0,bG=bE['y']??0x0,bH=bE['width']??this['width'],bI=bE['height']??this['height'],bJ=bE['thickness']??0x1,bK=bE['color'],bL=bD['_rectCoords'];bL['reset'](),bL['push'](bF,bG),bL['push'](bF+bH,bG),bL['push'](bF+bH,bG+bI),bL['push'](bF,bG+bI),bL['push'](bF,bG),this['drawLine']({'coords':bL,'thickness':bJ,'color':bK});}['fillRect'](){let bE=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:bD['ARGS_DEFAULT'];const bF=bE['x']??0x0,bG=bE['y']??0x0,bH=bE['width']??this['width'],bI=bE['height']??this['height'],bJ=bE['color'],bK=bD['_rectCoords'];bK['reset'](),bK['push'](bF,bG),bK['push'](bF+bH,bG),bK['push'](bF+bH,bG+bI),bK['push'](bF,bG+bI),this['drawPolygon']({'coords':bK,'color':bJ});}['drawRoundedRect'](){let bE=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:bD['ARGS_DEFAULT'];const bF=bE['thickness']??0x1;if(void 0x0!==bF&&0x0===bF)return;const bG=bE['color'];
1if(void 0x0!==(null==bG?void 0x0:bG['a'])&&0x0===(null==bG?void 0x0:bG['a']))return;const bH=bE['x']??0x0,bI=bE['y']??0x0,bJ=bE['width']??this['width'],bK=bE['height']??this['height'],bL=bE['borderRadius']??0x0;if(0x0===bL)this['drawRect']({'x':bH,'y':bI,'width':bJ,'height':bK,'thickness':bF,'color':bG});else{const bM=this['__generatedRoundedRectPath'](bH,bI,bJ,bK,bL);this['drawLine']({'coords':bM,'thickness':bF,'color':bG});}}['fillRoundedRect'](){let bE=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:bD['ARGS_DEFAULT'];const bF=bE['color'];if(void 0x0!==(null==bF?void 0x0:bF['a'])&&0x0===(null==bF?void 0x0:bF['a']))return;const bG=bE['x']??0x0,bH=bE['y']??0x0,bI=bE['width']??this['width'],bJ=bE['height']??this['height'],bK=bE['borderRadius']??0x0;if(0x0===bK)this['fillRect']({'x':bG,'y':bH,'width':bI,'height':bJ,'color':bF});else{const bL=this['__generatedRoundedRectPath'](bG,bH,bI,bJ,bK);this['drawPolygon']({'coords':bL,'color':bF});}}['drawCircle'](){let bE=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:bD['ARGS_DEFAULT'];const bF=bE['x']??this['width']/0x2,bG=bE['y']??this['height']/0x2,bH=bE['radius']??this['width']/0x2,bI=bE['thickness']??0x1,bJ=bE['color']??this['_currentColor'],bK=Math['max'](0x8,Math['floor'](0x4*bH)),bL=0x2*Math['PI']/bK,bM=bD['_circleCoords'];bM['reset'](),bM['allocate'](bK+0x1);for(let bN=0x0;bN<=bK;bN++){const bO=bN*bL,bP=bF+bH*Math['cos'](bO),bQ=bG+bH*Math['sin'](bO);bM['push'](bP,bQ);}this['drawLine']({'coords':bM,'thickness':bI,'color':bJ});}['fillCircle'](){let bE=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:bD['ARGS_DEFAULT'];const bF=bE['x']??this['width']/0x2,bG=bE['y']??this['height']/0x2,bH=bE['radius']??this['width']/0x2,bI=Math['max'](0x8,Math['floor'](0x4*bH)),bJ=0x2*Math['PI']/bI,bK=bD['_circleCoords'];bK['reset'](),bK['allocate'](bI+0x1);for(let bL=0x0;bL<=bI;bL++){const bM=bL*bJ,bN=bF+bH*Math['cos'](bM),bO=bG+bH*Math['sin'](bM);bK['push'](bN,bO);}this['drawPolygon']({'coords':bK,'color':bE['color']});}['drawImageTiled'](){let bE=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:bD['ARGS_DEFAULT'];const bF=bE['source'],bG=bE['x']??0x0,bH=bE['y']??0x0,bI=bE['width']??this['width'],bJ=bE['height']??this['height'],bK=bF['width'],bL=bF['height'],bM=Math['ceil'](bI/bK),bN=Math['ceil'](bJ/bL);for(let bO=0x0;bO<bN;bO++)for(let bP=0x0;bP<bM;bP++){const bQ=bG+bP*bK,bR=bH+bO*bL,bS=Math['min'](bK,bG+bI-bQ),bT=Math['min'](bL,bH+bJ-bR);bS<=0x0||bT<=0x0||(bS===bK&&bT===bL?this['drawImage']({'source':bF,'x':bQ,'y':bR,'width':bK,'height':bL}):this['drawImage']({'source':bF,'sx':0x0,'sy':0x0,'sWidth':bS,'sHeight':bT,'x':bQ,'y':bR,'width':bS,'height':bT}));}}['__generatedRoundedRectPath'](bE,bF,bG,bH,bI){const bJ=bE+','+bF+'\x20'+bG+'x'+bH+'\x20'+bI+'r';if(bD['_pathCache']['has'](bJ)){if(bD['_pathCacheLRU'][bD['_pathCacheLRU']['length']-0x1]!==bJ){const bP=bD['_pathCacheLRU']['indexOf'](bJ);bP>=0x0&&bP<bD['_pathCacheLRU']['length']/0x2&&(bD['_pathCacheLRU']['splice'](bP,0x1),bD['_pathCacheLRU']['push'](bJ));}return this['constructor']['_pathCache']['get'](bJ);}const bK=Math['min'](bG,bH);bI>Math['floor'](bK/0x2)&&(bI=Math['floor'](bK/0x2));const bL=new ay(),bM=Math['max'](this['constructor']['CORNER_MIN_POINTS'],Math['floor'](bI/this['constructor']['CORNER_GRANULARITY'])),bN=(bQ,bR,bS,bT)=>{for(let bU=0x0;bU<=bM;bU++){const bV=bS+bU/bM*(bT-bS),bW=bQ+bI*Math['cos'](bV),bX=bR+bI*Math['sin'](bV);bL['push'](bW,bX);}};if(bN(bE+bI,bF+bI,Math['PI'],1.5*Math['PI']),bN(bE+bG-bI,bF+bI,1.5*Math['PI'],0x2*Math['PI']),bN(bE+bG-bI,bF+bH-bI,0x0,0.5*Math['PI']),bN(bE+bI,bF+bH-bI,0.5*Math['PI'],Math['PI']),bL['push'](bE,bF+bI),bD['_pathCache']['size']>=bD['CACHE_MAX_PATHS']){var bO;const bQ=bD['_pathCacheLRU']['shift']();null===(bO=bD['_pathCache']['get'](bQ))||void 0x0===bO||bO['clear'](),bD['_pathCache']['delete'](bQ);}return bD['_pathCache']['set'](bJ,bL),bD['_pathCacheLRU']['push'](bJ),bL;}};a1(aC,'baseVersion',2.5),a1(aC,'version',2.5),a1(aC,'engineName',''),a1(aC,'engineID',''),a1(aC,'surfaceID',''),a1(aC,'surfaceType','none'),a1(aC,'engineCaps',{'supportsCanvas':!0x1,'supportsImages':!0x1,'supportsTextures':!0x1,'supportsCasting':!0x1}),a1(aC,'DEBUG_COUNTERS',!0x1),a1(aC,'_countRefs',0x0),a1(aC,'_liveEngineBase',0x0),a1(aC,'_totalEngineBase',0x0),a1(aC,'_ufoUnique',new aB()),a1(aC,'engineAPI',Object['freeze']({'setSize':{'width':{'type':'float'},'height':{'type':'float'},'level':0x0},'setSmoothing':{'value':{'type':'boolean'},'level':0x1},'setBlendingMode':{'value':{'type':'string'},'level':0x1},'setAlpha':{'value':{'type':'float'},'level':0x1},'setColor':{'value':{'type':'UFOColor'},'level':0x1},'setClipRect':{'args':{'x':{'type':'float'},'y':{'type':'float'},'width':{'type':'float'},'height':{'type':'float'}},'level':0x1},'clearRect':{'args':{'x':{'type':'float'},'y':{'type':'float'},'width':{'type':'float'},'height':{'type':'float'}},'level':0x1},'drawLine':{'args':{'x1':{'type':'float'},'y1':{'type':'float'},'x2':{'type':'float'},'y2':{'type':'float'},'coords':{'type':'UFOCoords'},'color':{'type':'UFOColor'},'thickness':{'type':'float'},'closed':{'type':'boolean'}},'level':0x1},'drawPolygon':{'args':{'coords':{'type':'UFOCoords'},'color':{'type':'UFOColor'},'closed':{'type':'boolean'}},'level':0x1},'drawImage':{'args':{'source':{'type':'UFOGraphics'},'x':{'type':'float'},'y':{'type':'float'},'width':{'type':'float'},'height':{'type':'float'},'sx':{'type':'float'},'sy':{'type':'float'},'sWidth':{'type':'float'},'sHeight':{'type':'float'}},'level':0x1},'drawRect':{'args':{'x':{'type':'float'},'y':{'type':'float'},'width':{'type':'float'},'height':{'type':'float'},'color':{'type':'UFOColor'},'thickness':{'type':'float'}},'level':0x2},'fillRect':{'args':{'x':{'type':'float'},'y':{'type':'float'},'width':{'type':'float'},'height':{'type':'float'},'color':{'type':'UFOColor'}},'level':0x2},'drawRoundedRect':{'args':{'x':{'type':'float'},'y':{'type':'float'},'width':{'type':'float'},'height':{'type':'float'},'color':{'type':'UFOColor'},'borderRadius':{'type':'float'},'thickness':{'type':'float'}},'level':0x2},'fillRoundedRect':{'args':{'x':{'type':'float'},'y':{'type':'float'},'width':{'type':'float'},'height':{'type':'float'},'color':{'type':'UFOColor'},'borderRadius':{'type':'float'}},'level':0x2},'drawCircle':{'args':{'x':{'type':'float'},'y':{'type':'float'},'radius':{'type':'float'},'color':{'type':'UFOColor'},'thickness':{'type':'float'}},'level':0x2},'fillCircle':{'args':{'x':{'type':'float'},'y':{'type':'float'},'radius':{'type':'float'},'color':{'type':'UFOColor'}},'level':0x2},'draw':{'args':{'source':{'type':'UFOGraphics'},'x':{'type':'float'},'y':{'type':'float'},'width':{'type':'float'},'height':{'type':'float'},'sx':{'type':'float'},'sy':{'type':'float'},'sWidth':{'type':'float'},'sHeight':{'type':'float'}},'level':0x2},'drawImageTiled':{'args':{'source':{'type':'UFOGraphics'},'x':{'type':'float'},'y':{'type':'float'},'width':{'type':'float'},'height':{'type':'float'}},'level':0x2}})),a1(aC,'engineExtensions',{}),a1(aC,'ARGS_DEFAULT',Object['freeze']({})),a1(aC,'_rectCoords',new ay(0x5)),a1(aC,'_circleCoords',new ay(0x0)),a1(aC,'CORNER_MIN_POINTS',0x2),a1(aC,'CORNER_GRANULARITY',0x1),a1(aC,'CACHE_MAX_PATHS',0x3e8),a1(aC,'_pathCache',new Map()),a1(aC,'_pathCacheLRU',[]);var aD=aC,aE=class extends aD{constructor(){super(),this['_UFOEngineBlank']=!0x0,this['_colorSpace']='srgb',this['_readonly']=!0x0;}get['engineID'](){return this['constructor']['engineID'];}get['engineName'](){return this['constructor']['engineName'];}get['engineCaps'](){return this['constructor']['engineCaps'];}get['readonly'](){return this['_readonly'];}get['ready'](){return!0x0;}get['width'](){return this['_canvas']?this['_canvas']['width']:0x0;}get['height'](){return this['_canvas']?this['_canvas']['height']:0x0;}['frameBegin'](bE){return super['frameBegin'](bE);}['frameEnd'](bE){return super['frameEnd'](bE);}['frameForceFlush'](bE){return super['frameForceFlush'](bE);}['setSmoothing'](bE){}['setAlpha'](bE){}['setBlendingMode'](bE){}['setColor'](bE){}['setClipRect'](){}['clearRect'](){}['drawLine'](){}['drawPolygon'](){}['drawImage'](){}};a1(aE,'version',2.5),a1(aE,'engineName','/dev/null'),a1(aE,'engineID','blank'),a1(aE,'surfaceID','canvas-2d'),a1(aE,'surfaceType','canvas'),a1(aE,'engineCaps',{'supportsCanvas':!0x0,'supportsImages':!0x0,'supportsTextures':!0x1,'supportsCasting':!0x1});var aF=class{constructor(bE,bF){bE&&!0x0!==bE['_UFOFontStyle']&&('string'==typeof bE?this['parseString'](bE):'object'==typeof bE&&void 0x0!==bE||a2['error']()),this['_UFOFontStyle']=!0x0,null!=bE&&bE['font']&&this['parseString'](null==bE?void 0x0:bE['font']);const bG=(null==bF?void 0x0:bF['size'])??(null==bE?void 0x0:bE['size']),bH=(null==bF?void 0x0:bF['family'])??(null==bE?void 0x0:bE['family']),bI=(null==bF?void 0x0:bF['weight'])??(null==bE?void 0x0:bE['weight']);bG&&(this['size']=bG),bH&&(this['family']=bH),bI&&(this['weight']=bI),this['stale']=!0x1;}['toString'](){return this['_fontString']||(this['_fontString']=this['weight']+'\x20'+this['size']+'\x20'+this['family']),this['_fontString'];}['parseString'](bE){if(!bE)return;const bF=bE['split']('\x20');switch(bF['length']){case 0x1:[this['family']]=bF;break;case 0x2:[this['size'],this['family']]=bF;break;default:[this['weight'],this['size'],this['family']]=bF;}this['_fontString']=bE;}get['family'](){return this['_family']||(this['_family']=this['DEFAULT_FAMILY']),this['_family'];}set['family'](bE){this['_family']!==bE&&(this['stale']=!0x0,this['_family']=bE,this['_fontString']=void 0x0);}get['weight'](){return this['_weight']||(this['_weight']=this['DEFAULT_WEIGHT']),this['_weight'];}set['weight'](bE){this['_weight']!==bE&&(this['stale']=!0x0,this['_weight']=bE,this['_fontString']=void 0x0);}get['size'](){return this['_size']||(this['_size']=''+(this['sizeNumber']??this['DEFAULT_SIZE'])+(this['sizeUnits']??this['DEFAULT_SIZE_UNITS'])),this['_size'];}set['size'](bE){'number'!=typeof bE?void 0x0!==this['_size']&&this['_size']===bE||(this['stale']=!0x0,this['_size']=bE,this['_sizeNumber']=void 0x0,this['_sizeUnits']=void 0x0,this['_fontString']=void 0x0):this['sizeNumber']=bE;}get['sizeNumber'](){return this['_sizeNumber']||(this['_sizeNumber']=this['_size']?parseFloat(this['_size']):this['DEFAULT_SIZE']),this['_sizeNumber'];}set['sizeNumber'](bE){this['_sizeNumber']!==bE&&(this['stale']=!0x0,this['_sizeNumber']=bE,this['sizeUnits'],this['_size']=void 0x0,this['_fontString']=void 0x0);}get['sizeUnits'](){return this['_sizeUnits']||(this['_sizeUnits']=void 0x0===this['_size']?this['DEFAULT_SIZE_UNITS']:this['_size']['replace'](/^[0-9 ]+/,'')),this['_sizeUnits'];}set['sizeUnits'](bE){this['_sizeUnits']!==bE&&(this['stale']=!0x0,this['_sizeUnits']=bE??this['DEFAULT_SIZE_UNITS'],this['_size']=void 0x0,this['_fontString']=void 0x0);}};a1(aF,'DEFAULT_SIZE',0xe),a1(aF,'DEFAULT_SIZE_UNITS','px'),a1(aF,'DEFAULT_FAMILY','Arial'),a1(aF,'DEFAULT_WEIGHT','normal');var aG=class bE extends aF{constructor(){let bF=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:{},bG=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:{};!0x0!==bF['_UFOTextBoxStyle']&&('string'==typeof bF||'object'==typeof bF&&null!==bF||(a2['error'](),bF={})),super(bF,bG),this['_UFOTextBoxStyle']=!0x0,this['_baseline']=String(bG['baseline']||bF['baseline']||'top'),this['_align']=String(bG['align']||bF['align']||bF['textAlign']||'left'),this['_color']=ab['parse'](bG['color']||bF['color']||'#FFFFFF',!0x0),this['_outlineColor']=ab['parse'](bG['outlineColor']||bF['outlineColor'],!0x0),this['_outlineThickness']=bG['outlineThickness']??bF['outlineThickness']??0x0,this['_outlineType']=String(bG['outlineType']||bF['outlineType']||'none'),this['_cornerRadius']=bG['cornerRadius']??bF['cornerRadius']??0x0,this['_boxOutlineColor']=ab['parse'](bG['boxOutlineColor']||bF['boxOutlineColor']||'#000000',!0x0),this['_boxOutlineThickness']=bG['boxOutlineThickness']??bF['boxOutlineThickness']??0x0,this['_background']=ab['parse'](bG['background']||bF['background']||ab['TRANSPARENT'],!0x0),this['_margin']={'top':0x0,'right':0x0,'bottom':0x0,'left':0x0},this['margin']=bG['margin']||bF['margin'];}get['baseline'](){return this['_baseline'];}set['baseline'](bF){this['_baseline']!==bF&&(this['stale']=!0x0),this['_baseline']=bF;}get['align'](){return this['_align'];}set['align'](bF){this['_align']!==bF&&(this['stale']=!0x0),this['_align']=bF;}get['color'](){return this['_color'];}set['color'](bF){ab['equals'](this['_color'],bF)||(this['stale']=!0x0,this['_color']['_UFOColor']?this['_color']['color']=bF:this['_color']=new ab(bF));}get['background'](){return this['_background'];}set['background'](bF){ab['equals'](this['_background'],bF)||(this['stale']=!0x0,this['_background']['_UFOColor']?this['_background']['color']=bF:this['_background']=new ab(bF));}get['outlineColor'](){return this['_outlineColor'];}set['outlineColor'](bF){ab['equals'](this['_outlineColor'],bF)||(this['stale']=!0x0,this['_outlineColor']['_UFOColor']?this['_outlineColor']['color']=bF:this['_outlineColor']=new ab(bF));}get['outlineThickness'](){return this['_outlineThickness'];}set['outlineThickness'](bF){this['_outlineThickness']!==bF&&(this['stale']=!0x0),this['_outlineThickness']=bF;}get['outlineType'](){return this['_outlineType'];}set['outlineType'](bF){this['_outlineType']!==bF&&(this['stale']=!0x0),this['_outlineType']=bF;}get['cornerRadius'](){return this['_cornerRadius'];}set['cornerRadius'](bF){this['_cornerRadius']!==bF&&(this['stale']=!0x0),this['_cornerRadius']=bF;}get['boxOutlineColor'](){return this['_boxOutlineColor'];}set['boxOutlineColor'](bF){ab['equals'](this['_boxOutlineColor'],bF)||(this['stale']=!0x0,this['_boxOutlineColor']['_UFOColor']?this['_boxOutlineColor']['color']=bF:this['_boxOutlineColor']=new ab(bF));}get['boxOutlineThickness'](){return this['_boxOutlineThickness'];}set['boxOutlineThickness'](bF){this['_boxOutlineThickness']!==bF&&(this['stale']=!0x0),this['_boxOutlineThickness']=bF;}get['marginLeft'](){return this['_margin']['left'];}set['marginLeft'](bF){this['_margin']['left']!==bF&&(this['stale']=!0x0),this['_margin']['left']=bF;}get['marginRight'](){return this['_margin']['right'];}set['marginRight'](bF){this['_margin']['right']!==bF&&(this['stale']=!0x0),this['_margin']['right']=bF;}get['marginTop'](){return this['_margin']['top'];}set['marginTop'](bF){this['_margin']['top']!==bF&&(this['stale']=!0x0),this['_margin']['top']=bF;}get['marginBottom'](){return this['_margin']['bottom'];}set['marginBottom'](bF){this['_margin']['bottom']!==bF&&(this['stale']=!0x0),this['_margin']['bottom']=bF;}get['margin'](){return this['_margin'];}set['margin'](bF){if(null==bF)this['_margin']={'top':0x0,'right':0x0,'bottom':0x0,'left':0x0};else{if('object'==typeof bF)this['_margin']={'top':void 0x0!==bF['top']?Number(bF['top']):0x0,'right':void 0x0!==bF['right']?Number(bF['right']):0x0,'bottom':void 0x0!==bF['bottom']?Number(bF['bottom']):0x0,'left':void 0x0!==bF['left']?Number(bF['left']):0x0};else{if('number'==typeof bF)this['_margin']={'left':bF,'right':bF,'top':bF,'bottom':bF};else{if(Array['isArray'](bF))switch(bF['length']){case 0x1:this['_margin']={'left':Number(bF[0x0]),'right':Number(bF[0x0]),'top':Number(bF[0x0]),'bottom':Number(bF[0x0])};break;case 0x2:this['_margin']={'top':Number(bF[0x0]),'right':Number(bF[0x1]),'bottom':Number(bF[0x0]),'left':Number(bF[0x1])};break;case 0x3:this['_margin']={'top':Number(bF[0x0]),'right':Number(bF[0x1]),'bottom':Number(bF[0x2]),'left':Number(bF[0x1])};break;case 0x4:this['_margin']={'top':Number(bF[0x0]),'right':Number(bF[0x1]),'bottom':Number(bF[0x2]),'left':Number(bF[0x3])};break;default:this['_margin']={'top':0x0,'right':0x0,'bottom':0x0,'left':0x0},a2['error']();}else a2['error'](),this['_margin']={'top':0x0,'right':0x0,'bottom':0x0,'left':0x0};}}
1}isNaN(this['_margin']['left'])&&(this['_margin']['left']=0x0),isNaN(this['_margin']['top'])&&(this['_margin']['top']=0x0),isNaN(this['_margin']['right'])&&(this['_margin']['right']=0x0),isNaN(this['_margin']['bottom'])&&(this['_margin']['bottom']=0x0),this['stale']=!0x0;}static['registerStyle'](bF,bG){bF||a2['throw'](),bG&&bG['_UFOTextBoxStyle']||a2['throw'](),this['globalStyleRegistry'][bF]=bG;}static['unregisterStyle'](bF){delete this['globalStyleRegistry'][bF];}static['unregisterAllStyles'](){this['globalStyleRegistry']={};}static['getStyle'](bF){return this['globalStyleRegistry'][bF]||(a2['error'](),null);}static['cloneStyle'](bF){let bG=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0;const bH=this['getStyle'](bF);return bH?bH['clone'](bG):null;}['getStyle'](bF){return bE['getStyle'](bF);}['clone'](){return new bE(this,arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0);}['equals'](bF){return!!(bF&&bF['_UFOTextBoxStyle']&&this['family']===bF['family']&&this['size']===bF['size']&&this['weight']===bF['weight']&&this['_align']===bF['align']&&this['_baseline']===bF['baseline']&&ab['equals'](this['_color'],bF['color'])&&ab['equals'](this['_background'],bF['background'])&&ab['equals'](this['_outlineColor'],bF['outlineColor'])&&this['_outlineThickness']===bF['outlineThickness']&&this['_outlineType']===bF['outlineType']&&this['_boxOutlineColor']===bF['boxOutlineColor']&&this['_boxOutlineThickness']===bF['boxOutlineThickness']&&this['_cornerRadius']===bF['cornerRadius']&&this['_margin']['left']===bF['margin']['left']&&this['_margin']['top']===bF['margin']['top']&&this['_margin']['right']===bF['margin']['right']&&this['_margin']['bottom']===bF['margin']['bottom']);}};a1(aG,'globalStyleRegistry',{});var aH=aG,aI=class{constructor(){this['_UFOSurfaceBridge']=!0x0;}static['getImageFromSource'](bF){if(!bF)return null;let bG=null,bH=!0x1,bI=null;var bJ,bK,bL,bM,bN,bO,bP;if(bF['_UFOGraphics'])bH=bF['stale'],null===(bJ=(bK=bF)['frameBegin'])||void 0x0===bJ||bJ['call'](bK),null===(bL=(bM=bF)['onPaint'])||void 0x0===bL||bL['call'](bM),null===(bN=(bO=bF)['frameEnd'])||void 0x0===bN||bN['call'](bO),bG=null===(bP=bF['engine'])||void 0x0===bP?void 0x0:bP['canvas'],bI=bF['engineID'];else{if(aV['isImage2D'](bF)||aV['isCanvas2D'](bF))bG=bF,bI='2d';else{if(aV['isWebGL'](bF))bG=bF['canvas'],bI='webgl';else{if(!aV['isWebGPU'](bF))return a2['logOnce'](),null;bG=bF['canvas'],bI='webgpu';}}}if(!bG)return null;switch(bI){case'2d':bG['origin']=this['ORIGIN_AUTO'],bF=bG;break;case'webgl':case'webgpu':bG['origin']=this['ORIGIN_BOTTOM'],void 0x0===bG['renderCount']&&(bG['renderCount']=0x0),bG['renderPending']?bH&&(bG['renderRepeat']=!0x0):(bH||bG['renderRepeat']||!bG['imageBitmap'])&&(bG['renderPending']=!0x0,bG['renderRepeat']=!0x1,createImageBitmap(bG)['then'](bQ=>{bQ instanceof ImageBitmap&&(bG['newImageBitmap']=bQ),bG['renderCount']++,bG['renderPending']=!0x1;},bQ=>{if(!bG['convertToBlob'])return a2['logOnce'](),void(bG['renderPending']=!0x1);a2['logOnce'](),bG['convertToBlob']()['then'](bR=>{if(bR){const bS=new Image();bS['onload']=()=>{bG['newImageBitmap']=bS,bG['renderCount']++,bG['renderPending']=!0x1;},bS['onerror']=()=>{a2['logOnce'](),bG['renderPending']=!0x1;},bS['src']=URL['createObjectURL'](bR);}},()=>{a2['logOnce'](),bG['renderPending']=!0x1;});})),bG['newImageBitmap']&&(bG['imageBitmap']=bG['newImageBitmap'],delete bG['newImageBitmap']),bF=bG['imageBitmap'];break;default:bF=bG;}return bF;}};a1(aI,'ORIGIN_TOP',0x0),a1(aI,'ORIGIN_BOTTOM',0x1),a1(aI,'ORIGIN_AUTO',0x2);var aJ=class bF extends aD{constructor(){super(),this['_UFOEngine2D']=!0x0,this['_readonly']=!0x1,this['_clipped']=!0x1;}get['ready'](){return!!this['_context'];}get['width'](){return this['_canvas']?this['_canvas']['width']:0x0;}get['height'](){return this['_canvas']?this['_canvas']['height']:0x0;}['frameBegin'](){}['frameEnd'](){}['frameForceFlush'](){}['setSmoothing'](bG){this['_canvas']||a2['throw']();try{var bH;return null!==(bH=this['_canvas'])&&void 0x0!==bH&&bH['style']&&(this['_canvas']['style']['imageRendering']=bG?'high-quality':'pixelated'),this['_context']['imageSmoothingEnabled']=bG,this['_context']['webkitImageSmoothingEnabled']=!0x0,!0x0;}catch(bI){return a2['error'](),!0x1;}}['setAlpha'](bG){this['_context']||a2['throw'](),this['_context']['globalAlpha']=bG;}['setBlendingMode'](bG){this['_context']||a2['throw'](),this['_context']['globalCompositeOperation']=bG;}['setColor'](bG){this['_context']||a2['throw'](),void 0x0===bG?this['_context']['fillStyle']='#000000':!0x0===bG['_UFOColor']?this['_context']['fillStyle']=bG['color']:!0x0!==bG['_UFOGraphics']?this['_context']['fillStyle']=bG:a2['error']();}['setClipRect'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_context']||a2['throw']();const bH=bG['x']??0x0,bI=bG['y']??0x0,bJ=bG['width']??this['width'],bK=bG['height']??this['height'];if(this['_context']||a2['throw'](),this['_clipped']&&(this['_context']['restore'](),this['_clipped']=!0x1),0x0==bH&&0x0==bI&&bJ==this['width']&&bK==this['height'])return;this['_clipped']=!0x0,this['_context']['save']();let bL=new Path2D();bL['rect'](bH,bI,bJ,bK),this['_context']['clip'](bL);}['clearRect'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_context']||a2['throw']();const bH=bG['x']??0x0,bI=bG['y']??0x0,bJ=bG['width']??this['width'],bK=bG['height']??this['height'];this['_context']['clearRect'](bH,bI,bJ,bK);}['fillRect'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_context']||a2['throw']();const bH=bG['x']??0x0,bI=bG['y']??0x0,bJ=bG['width']??this['width'],bK=bG['height']??this['height'];bG['color']&&this['setColor'](bG['color']),this['_context']['fillRect'](bH,bI,bJ,bK);}['fillCircle'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_context']||a2['throw']();const bH=bG['x']??this['width']/0x2,bI=bG['y']??this['height']/0x2,bJ=bG['radius']??this['width']/0x2;bG['color']&&this['setColor'](bG['color']),this['_context']['beginPath'](),this['_context']['arc'](bH,bI,bJ,0x0,0x2*Math['PI']),this['_context']['fill']();}['drawRect'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_context']||a2['throw']();const bH=bG['x']??0x0,bI=bG['y']??0x0,bJ=bG['width']??this['width'],bK=bG['height']??this['height'];bG['color']&&this['setColor'](bG['color']);const bL=this['_context'];bL['lineWidth']=bG['thickness']??0x1,bL['strokeStyle']=bL['fillStyle'],bL['strokeRect'](bH,bI,bJ,bK);}['drawLine'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['__drawPath'](bG['closed']?bF['_PATHTYPE_CLOSED']:0x0,bG);}['drawPolygon'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['__drawPath'](bF['_PATHTYPE_FILL']|(bG['closed']?bF['_PATHTYPE_CLOSED']:0x0),bG);}['__drawPath'](bG,bH){this['_context']||a2['throw']();const bI=bH['x1']??0x0,bJ=bH['y1']??0x0,bK=bH['x2']??0x0,bL=bH['y2']??0x0,bM=this['_context'];if(bH['color']&&(bM['fillStyle']=bH['color']),bG&bF['_PATHTYPE_FILL']||(bM['strokeStyle']=bM['fillStyle']),bM['lineWidth']=bH['thickness']??0x1,bM['beginPath'](),bH['coords']){const bN=bH['coords'],bO=bN['x'],bP=bN['
1y'],bQ=bN['length'];if(bQ<0x2)return void a2['error']();bM['moveTo'](bO[0x0],bP[0x0]);for(let bR=0x1;bR<bQ;bR++)bM['lineTo'](bO[bR],bP[bR]);}else{if(!(bI&&bJ&&bK&&bL))return void a2['error']();bM['moveTo'](bI,bJ),bM['lineTo'](bK,bL);}bG&bF['_PATHTYPE_CLOSED']&&bM['closePath'](),bG&bF['_PATHTYPE_FILL']?bM['fill']():bM['stroke']();}['drawImage'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];const bH=bG['source'];if(this['_context']||a2['throw'](),!bH)return a2['error']();let bI=aI['getImageFromSource'](bH);if(!bI)return a2['error']();const bJ=bG['x']??0x0,bK=bG['y']??0x0,bL=bG['width']??bH['width'],bM=bG['height']??bH['height'],bN=bG['sx']??0x0,bO=bG['sy']??0x0,bP=bG['sWidth'],bQ=bG['sHeight'];bI['width']&&bI['height']?bP&&bQ?this['_context']['drawImage'](bI,bN,bO,bP,bQ,bJ,bK,bL,bM):this['_context']['drawImage'](bI,bJ,bK,bL,bM):a2['logOnce']();}['drawImageTiled'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_context']||a2['throw']();const bH=bG['source'];if(!bH)return a2['error']();let bI=aI['getImageFromSource'](bH);if(!bI)return a2['error']();const bJ=bG['x']??0x0,bK=bG['y']??0x0,bL=bG['width']??this['width'],bM=bG['height']??this['height'],bN=this['_context'],bO=bN['fillStyle'],bP=bN['createPattern'](bI,'repeat');bN['save'](),bN['translate'](bJ,bK),bN['fillStyle']=bP,bN['fillRect'](0x0,0x0,bL,bM),bN['restore'](),bN['fillStyle']=bO;}['getPixelBuffer'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];const bH=bG['x']??0x0,bI=bG['y']??0x0,bJ=bG['width']??this['width'],bK=bG['height']??this['height'];this['_context']||a2['throw'](),'2d'!==this['engineID']&&a2['throw']();const bL=this['_context']['getImageData'](bH??0x0,bI??0x0,bJ,bK);return new Uint32Array(bL['data']['buffer']);}['putPixelBuffer'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];const bH=bG['buffer'],bI=bG['x']??0x0,bJ=bG['y']??0x0,bK=bG['width']??this['width'],bL=bG['height']??this['height'];this['_context']||a2['throw'](),'2d'!==this['engineID']&&a2['throw'](),bH||a2['throw']();const bM=new ImageData(bH instanceof Uint8ClampedArray?bH:new Uint8ClampedArray(bH['buffer']),bK,bL);this['_context']['putImageData'](bM,bI,bJ);}['replaceColorRGB'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];const bH=bG['monochrome']?0xff:0xffffff,bI=(bG['oldPixel']??0x0)&bH,bJ=bG['newPixel']??0x0,bK=new Uint32Array(this['getPixelBuffer']({}));for(let bL=0x0;bL<bK['length'];bL++)(bK[bL]&bH)===bI&&(bK[bL]=bJ);this['putPixelBuffer']({'buffer':new Uint8ClampedArray(bK['buffer'])});}['measureText'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_context']||a2['throw']();const bH=bG['text']??'',bI=bG['font']??new UFOTextStyle(),bJ=this['_context'];bJ['font']=bI['toString']();const bK=bJ['measureText'](bH);return bK?new az(0x0,0x0,bK['width'],bK['actualBoundingBoxAscent']+bK['actualBoundingBoxDescent']):new az(0x0,0x0,0x0,0x0);}['drawText'](){let bG=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_context']||a2['throw']();const bH=bG['text']??'',bI=bG['font']??new aF(),bJ=bG['x']??0x0,bK=bG['y']??0x0,bL=this['_context'];let bM,bN=bK+bI['margin']['top']+0x1;switch(bI['align']){case'right':bM=bJ+this['width']-bI['margin']['right']-0x1;break;case'center':bM=bJ+parseInt(this['width']/0x2);break;default:bM=bJ+bI['margin']['left']+0x1;}if(bL['font']=bI['toString'](),bI['align']&&(bL['textAlign']=bI['align']),bI['baseline']&&(bL['textBaseline']=bI['baseline']),bI['outlineThickness']>0x0)switch(bI['outlineType']){case'outline':bL['lineWidth']=bI['outlineThickness'],bL['strokeStyle']=bI['outlineColor']['color'],bL['strokeText'](bH,bM,bN);break;case'shadow':bL['fillStyle']=bI['outlineColor']['color'],bL['fillText'](bH,bM-bI['outlineThickness'],bN-bI['outlineThickness']);}bL['fillStyle']=bI['color']['toString'](),bL['fillText'](bH,bM,bN);}};a1(aJ,'version',2.5),a1(aJ,'engineName','2D'),a1(aJ,'engineID','2d'),a1(aJ,'surfaceID','canvas-2d'),a1(aJ,'surfaceType','canvas'),a1(aJ,'engineCaps',{'supportsCanvas':!0x0,'supportsImages':!0x0,'supportsTextures':!0x1,'supportsCasting':!0x1}),a1(aJ,'engineExtensions',Object['freeze']({'getPixelBuffer':{'level':0x3,'args':{'x':{'type':'integer','required':!0x1},'y':{'type':'integer','required':!0x1},'width':{'type':'integer','required':!0x1},'height':{'type':'integer','required':!0x1}},'returns':{'type':'Uint8ClampedArray'}},'putPixelBuffer':{'level':0x3,'args':{'buffer':{'type':'Uint8ClampedArray'},'x':{'type':'integer','required':!0x1},'y':{'type':'integer','required':!0x1},'width':{'type':'integer','required':!0x1},'height':{'type':'integer','required':!0x1}}},'replaceColorRGB':{'level':0x3,'args':{'oldPixel':{'type':'integer'},'newPixel':{'type':'integer'},'monochrome':{'type':'boolean','required':!0x1}}},'measureText':{'level':0x3,'args':{'text':{'type':'string'},'font':{'type':'UFOFontStyle'}},'returns':{'type':'UFORect'}},'drawText':{'level':0x3,'args':{'text':{'type':'string'},'font':{'type':'UFOFontStyle'},'x':{'type':'float','required':!0x1},'y':{'type':'float','required':!0x1}}}})),a1(aJ,'_PATHTYPE_FILL',0x1),a1(aJ,'_PATHTYPE_CLOSED',0x2);var aK=aJ,aL=class{constructor(){this['DEBUG']=!0x1,this['PLACEHOLDERKEY']='__placeholder__',this['onDelete']=null,this['_cache']=new Map(),this['_lastCount']=0x0;}['clear'](){try{for(const bK of this['_cache']['values']()){var bG,bH,bI,bJ;bK['gl']?null===(bG=(bH=bK['gl'])['deleteTexture'])||void 0x0===bG||bG['call'](bH,bK['texture']):null===(bI=bK['texture'])||void 0x0===bI||null===(bJ=bI['destroy'])||void 0x0===bJ||bJ['call'](bI);}a2['logIf']();}catch(bL){a2['errorIf']();}this['_cache']['clear']();}['get'](bG){let bH=arguments['length']>0x1&&void 0x0!==arguments[0x1]&&arguments[0x1],bI=this['_cache']['get'](bG);return void 0x0===bI&&bH&&(bI=this['_cache']['get'](this['PLACEHOLDERKEY'])),bI;}['validate'](bG,bH){let bI=this['_cache']['get'](bG);if(!bI)return null;if(!bH)return bI;for(const bJ in bH)if((bI[bJ]??0x0)!==(bH[bJ]??0x0))return bI['persistent']||this['__invalidate'](bG,bI),null;return bI;}['set'](bG,bH){this['__invalidate'](bG,null,bH),a2['logIf'](),this['_lastCount']=this['_cache']['size'];}['delete'](bG){this['__invalidate'](bG);}['__invalidate'](bG){let bH=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:null,bI=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:null;if(bH||(bH=this['_cache']['get'](bG)),bI&&this['_cache']['set'](bG,bI),!bH||bH['persistent'])return;bI||this['_cache']['delete'](bG);const bJ=bH['onDelete']||this['onDelete'];if(bJ)return bJ(bH);if(bH['gl'])try{var bK;null===(bK=bH['gl'])||void 0x0===bK||bK['deleteTexture'](bH['texture']);}catch(bN){a2['error']();}else try{var bL,bM;null===(bL=bH['texture'])||void 0x0===bL||null===(bM=bL['destroy'])||void 0x0===bM||bM['call'](bL);}catch(bO){a2['error']();}}['size'](){return this['_cache']['size'];}['setPlaceholder'](bG){this['_cache']['set'](this['PLACEHOLDERKEY'],{...bG,'placeholder':!0x0,'persistent':!0x0});}['getPlaceholder'](){return this['_cache']['get'](this['PLACEHOLDERKEY']);}},aM=class bG extends aL{constructor(bH){super(),this['_UFOTexturesWebGL']=!0x0,this['_smoothing']=!0x0,this['gl']=bH,this['__queryMaxTextureLimits'](bH),this['__createPlaceholder'](bH),a2['logOnce']();}get['smoothing'](){return this['_smoothing'];}set['smoothing'](bH){this['_smoothing']=bH;}['__createPlaceholder'](bH){let bI=bH['createTexture']();bH['bindTexture'](bH['TEXTURE_2D'],bI),bH['texImage2D'](bH['TEXTURE_2D'],0x0,bH['RGBA'],0x1,0x1,0x0,bH['RGBA'],bH['UNSIGNED_BYTE'],null),bH['texParameteri'](bH['TEXTURE_2D'],bH['TEXTURE_MIN_FILTER'],bH['NEAREST']),bH['texParameteri'](bH['TEXTURE_2D'],bH['TEXTURE_MAG_FILTER'],bH['NEAREST']),bH['texParameteri'](bH['TEXTURE_2D'],bH['TEXTURE_WRAP_S'],bH['CLAMP_TO_EDGE']),bH['texParameteri'](bH['TEXTURE_2D'],bH['TEXTURE_WRAP_T'],bH['CLAMP_TO_EDGE']),this['setPlaceholder']({'gl':bH,'texture':bI,'width':0x1,'height':0x1,'colorSpace':'srgb'});}['__queryMaxTextureLimits'](bH){if(bH['maxTextureSize']&&bH['maxTextureUnits'])return!0x0;const bI=0x2===bH['version']?0x4000:0x1000,bJ=0x2===bH['version']?0x10:0x8;try{bH['maxTextureSize']=bH['getParameter'](bH['MAX_TEXTURE_SIZE']);}catch(bK){bH['maxTextureSize']=bI;}try{bH['maxTextureUnits']=bH['getParameter'](bH['MAX_TEXTURE_IMAGE_UNITS']);}catch(bL){bH['maxTextureUnits']=bJ;}return bG['DEBUG_DOWNSIZE']&&(bH['maxTextureSize']=bG['DEBUG_DOWNSIZE_MAX']),!0x0;}['getTextureForSource'](bH){let bI=arguments['length']>0x1&&void 0x0!==arguments[0x1]&&arguments[0x1];const bJ=this['gl'];if(!bH)return null;let bK=bH['id']??bH['src']??bH,bL=(null==bH?void 0x0:bH['stale'])??!0x1,bM=aI['getImageFromSource'](bH);if(!aV['isReady'](bM))return this['get'](bK,!0x0);
1let bN=bH['width'],bO=bH['height'],bP=bH['colorSpace']??'srgb',bQ=bH['staleCount']??0x0,bR=(null==bM?void 0x0:bM['renderCount'])??0x0;if(!bL){let bU=this['validate'](bK,{'gl':bJ,'width':bN,'height':bO,'colorSpace':bP,'staleCount':bQ,'renderCount':bR});if(bU)return bU;}let bS=bI;switch(null==bM?void 0x0:bM['origin']){case aI['ORIGIN_BOTTOM']:bS=!0x0;break;case aI['ORIGIN_TOP']:bS=!0x1;}let bT={'gl':bJ,'texture':this['createTextureFromImage'](bM,bS),'width':bN,'height':bO,'colorSpace':bP,'staleCount':bQ,'renderCount':bR};return this['set'](bK,bT),null!=bM&&bM['imageBitmap']&&delete bM['imageBitmap'],bH['_UFOGraphics']&&bH['_engine']&&(bH['_engine']['_texture']=bK),bT;}['createTextureFromImage'](bH,bI){const bJ=this['gl'];if(bG['DOWNSIZE_BIG_TEXTURES']){let bM=bJ['maxTextureSize'];(bH['width']>=bM||bH['height']>=bM)&&(bH['width'],bH['height'],bH=aV['resizeImageToFit'](bH,bM,bM),a2['warnIf']());}const bK=bJ['createTexture']();bJ['bindTexture'](bJ['TEXTURE_2D'],bK),bJ['pixelStorei'](bJ['UNPACK_FLIP_Y_WEBGL'],bI),bJ['pixelStorei'](bJ['UNPACK_COLORSPACE_CONVERSION_WEBGL'],bJ['NONE']),bJ['pixelStorei'](bJ['UNPACK_PREMULTIPLY_ALPHA_WEBGL'],!0x0),bH['colorSpace']&&'srgb'!==bH['colorSpace']&&'srgb'!==bJ['colorSpace']&&0x1!==bJ['version']?bJ['texImage2D'](bJ['TEXTURE_2D'],0x0,bJ['RGBA16F'],bJ['RGBA'],bJ['FLOAT'],bH):bJ['texImage2D'](bJ['TEXTURE_2D'],0x0,bJ['RGBA'],bJ['RGBA'],bJ['UNSIGNED_BYTE'],bH);const bL=this['_smoothing']?bJ['LINEAR']:bJ['NEAREST'];return bJ['texParameteri'](bJ['TEXTURE_2D'],bJ['TEXTURE_MIN_FILTER'],bL),bJ['texParameteri'](bJ['TEXTURE_2D'],bJ['TEXTURE_MAG_FILTER'],bL),bJ['texParameteri'](bJ['TEXTURE_2D'],bJ['TEXTURE_WRAP_S'],bJ['CLAMP_TO_EDGE']),bJ['texParameteri'](bJ['TEXTURE_2D'],bJ['TEXTURE_WRAP_T'],bJ['CLAMP_TO_EDGE']),bI&&bJ['pixelStorei'](bJ['UNPACK_FLIP_Y_WEBGL'],!0x1),bK;}};a1(aM,'DOWNSIZE_BIG_TEXTURES',!0x0),a1(aM,'DEBUG_LOGGING_DOWNSIZE',!0x1),a1(aM,'DEBUG_DOWNSIZE',!0x1),a1(aM,'DEBUG_DOWNSIZE_MAX',0x40);var aN=aM,aO=class bH{constructor(bI,bJ){this['_UFOShaderWebGL']=!0x0,this['self']=this['constructor'],this['name']=Object['freeze'](this['constructor']['name']),this['gl']=bI,this['_textures']=bJ,this['_error']=!0x1,this['_errorMessage']='',this['_shaderHashes']=new Map(),this['_shaders']=new Map(),this['_uniforms']=new Map(),this['_textureIndexNextVal']=new Map(),this['_textureIndexByShader']=new Map(),this['_activeProgram']=null,this['_activeUniforms']=null,this['_activeID']=null,this['_bufferShaderQuad']=void 0x0,this['_colorRGBA']=new Float32Array(0x4);}get['error'](){return this['_error'];}get['errorMessage'](){return this['_errorMessage'];}get['activeID'](){return this['_activeID'];}get['activeProgram'](){return this['_activeProgram'];}get['activeUniforms'](){return this['_activeUniforms'];}['clear'](){let bI=this['gl'];this['_bufferShaderQuad']&&(null==bI||bI['bindBuffer'](bI['ARRAY_BUFFER'],null),null==bI||bI['deleteBuffer'](this['_bufferShaderQuad']),this['_bufferShaderQuad']=null),null==bI||bI['useProgram'](null);for(const bL of null===(bJ=this['_shaders'])||void 0x0===bJ?void 0x0:bJ['values']()){var bJ,bK;bL&&(null===(bK=this['gl'])||void 0x0===bK||bK['deleteProgram'](bL));}this['_shaders']['clear'](),this['_shaderHashes']['clear'](),this['_uniforms']['clear'](),this['_textureIndexNextVal']['clear'](),this['_textureIndexByShader']['clear'](),this['_activeProgram']=null,this['_activeUniforms']=null,this['_activeID']=null;}['clearUniforms'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0;var bJ,bK;if(void 0x0!==bI)return this['_textureIndexNextVal']['delete'](bI),void(null===(bJ=this['_textureIndexByShader']['get'](bI))||void 0x0===bJ||null===(bK=bJ['clear'])||void 0x0===bK||bK['call'](bJ));this['_textureIndexNextVal']['clear'](),this['_textureIndexByShader']['clear']();}['loadShader'](bI){const bJ=this['gl'],bK=bI['id'];let bL,bM=0x2===bJ['version']?this['self']['SHADER_HEADER_OPENGL_ES3']:this['self']['SHADER_HEADER_OPENGL_ES1'],bN=0x2===bJ['version']?this['self']['SHADER_HEADER_OPENGL_ES3']:this['self']['SHADER_HEADER_OPENGL_ES1'];bM+=this['self']['SHADER_HEADER_VERTEX'],bN+=this['self']['SHADER_HEADER_FRAGMENT'],bM+=0x2===bJ['version']?this['self']['SHADER_HEADER_ALL_WEBGL2']:this['self']['SHADER_HEADER_ALL_WEBGL'],bN+=0x2===bJ['version']?this['self']['SHADER_HEADER_ALL_WEBGL2']:this['self']['SHADER_HEADER_ALL_WEBGL'],bI['shadertoy']&&(bM+=this['self']['SHADERTOY_VERTEX_HEADER'],bN+=this['self']['SHADERTOY_FRAGMENT_HEADER']),bI['vertexShader']&&(bM+=bI['vertexShader']),bI['shader']&&(bN+=bI['shader']);const bO=ai['crc32'](bM+bN);if(this['_shaderHashes']['has'](bK)&&this['_shaderHashes']['get'](bK)===bO)return a2['warn'](),this['_shaders']['get'](bK);const bP=this['compileShader'](bK,bJ['VERTEX_SHADER'],bM),bQ=this['compileShader'](bK,bJ['FRAGMENT_SHADER'],bN);if(bP&&bQ){if(bL=bJ['createProgram'](),bJ['attachShader'](bL,bP),bJ['attachShader'](bL,bQ),bJ['linkProgram'](bL),!bJ['getProgramParameter'](bL,bJ['LINK_STATUS']))return this['_error']=!0x0,this['_errorMessage']=this['name']+'.loadShader():\x20Program\x20link\x20error:\x20'+bJ['getProgramInfoLog'](bL),null;const bR={};bI['shadertoy']&&(bR['_shadertoy']=!0x0,bR['a_position']=bJ['getAttribLocation'](bL,'a_position')),this['_uniforms']['set'](bK,bR),this['_shaders']['set'](bK,bL),this['_shaderHashes']['set'](bK,bO);}return bJ['deleteShader'](bP),bJ['deleteShader'](bQ),bL||(this['_error']=!0x0,this['_errorMessage']=this['name']+'.loadShader():\x20Failed\x20to\x20load\x20shader\x20due\x20to\x20compile\x20error!',null);}['compileShader'](bI,bJ,bK){const bL=this['gl'],bM=bL['createShader'](bJ);if(bL['shaderSource'](bM,bK),bL['compileShader'](bM),!bL['getShaderParameter'](bM,bL['COMPILE_STATUS'])){var bN;const bO=null===(bN=bL['getShaderInfoLog'](bM)['match'](/ERROR: \d+:(\d+)/))||void 0x0===bN?void 0x0:bN[0x1];return this['_error']=!0x0,this['_errorMessage']='Shader\x20\x27'+bI+'\x27\x20compile\x20error\x20at\x20line\x20'+bO,a2['error'](),bL['deleteShader'](bM),null;}return bM;}['useShader'](bI){if(bI&&bI===this['_activeID'])return!0x0;const bJ=this['_shaders']['get'](bI),bK=this['_uniforms']['get'](bI);return!(!bJ||!bK||!this['__useProgram'](bJ)||(this['_activeProgram']=bJ,this['_activeUniforms']=bK,this['_activeID']=bI,0x0));}['runShader'](bI,bJ){if(bI||(bI=this['_activeID']),!this['useShader'](bI))return;let bK=this['gl'],bL=(this['_activeProgram'],this['_activeUniforms']);if(!this['_bufferShaderQuad']){const bM=new Float32Array([-0x1,-0x1,0x1,-0x1,-0x1,0x1,0x1,0x1]);this['_bufferShaderQuad']=bK['createBuffer'](),bK['bindBuffer'](bK['ARRAY_BUFFER'],this['_bufferShaderQuad']),bK['bufferData'](bK['ARRAY_BUFFER'],bM,bK['STATIC_DRAW']);}if(void 0x0!==bL['a_position']&&-0x1!==bL['a_position']){bK['bindBuffer'](bK['ARRAY_BUFFER'],this['_bufferShaderQuad']),bK['enableVertexAttribArray'](bL['a_position']),bK['vertexAttribPointer'](bL['a_position'],0x2,bK['FLOAT'],!0x1,0x0,0x0);for(const [bN,bO]of Object['entries'](bJ??{}))this['setUniform'](null,bN,bO);bK['drawArrays'](bK['TRIANGLE_STRIP'],0x0,0x4);}else a2['error']();}['__useProgram'](bI){return!(bI===this['_activeProgram']&&!bH['FORCE_PROGRAM_CHANGE']||(this['gl']['useProgram'](bI),0x0));}['setUniform'](bI,bJ){let bK=arguments['length']>0x2&&void 0x0!==arguments[0x2]&&arguments[0x2],bL=arguments['length']>0x3?arguments[0x3]:void 0x0,bM=arguments['length']>0x4?arguments[0x4]:void 0x0,bN=arguments['length']>0x5?arguments[0x5]:void 0x0,bO=this['_activeProgram'],bP=this['_activeUniforms'],bQ=this['_activeID'];
1if(bI&&(bO=this['_shaders']['get'](bI),bP=this['_uniforms']['get'](bI),bQ=bI),!bO||!bP)return a2['error']();const bR=this['gl'];let bS=bP[bJ];if(void 0x0===bS){try{bS=bR['getUniformLocation'](bO,bJ);}catch(bU){return void a2['logOnce']();}bP[bJ]=bS;}if(null!==bS){if('number'==typeof bK)void 0x0===bL?bR['uniform1f'](bS,bK):void 0x0===bM?bR['uniform2f'](bS,bK,bL):void 0x0===bN?bR['uniform3f'](bS,bK,bL,bM):bR['uniform4f'](bS,bK,bL,bM,bN);else{if('boolean'==typeof bK)bR['uniform1i'](bS,bK?0x1:0x0);else{if(bK instanceof ab){const bV=ab['parseColorToUniform'](bK,bR['colorSpace']??a9['SRGB'],this['_colorRGBA']);bR['uniform4f'](bS,bV[0x0],bV[0x1],bV[0x2],bV[0x3]);}else{if(bK instanceof Float32Array||bK instanceof Float64Array)switch(bK['length']){case 0x1:bR['uniform1fv'](bS,bK);break;case 0x2:bR['uniform2fv'](bS,bK);break;case 0x3:bR['uniform3fv'](bS,bK);break;case 0x4:bR['uniform4fv'](bS,bK);break;default:a2['error']();}else{if(bK instanceof Int8Array||bK instanceof Int16Array||bK instanceof Int32Array||bK instanceof Uint8Array||bK instanceof Uint16Array||bK instanceof Uint32Array)switch(bK['length']){case 0x1:bR['uniform1iv'](bS,bK);break;case 0x2:bR['uniform2iv'](bS,bK);break;case 0x3:bR['uniform3iv'](bS,bK);break;case 0x4:bR['uniform4iv'](bS,bK);break;default:a2['error']();}else{if(bK['_UFOGraphics']){var bT;const bW=null===(bT=this['_textures'])||void 0x0===bT?void 0x0:bT['getTextureForSource'](bK,!0x0);if(!bW)return void a2['warn']();const bX=this['__getTextureIndexMap'](bQ);let bY=bX['get'](bJ),bZ=this['_textureIndexNextVal']['get'](bQ)??0x0;if(void 0x0!==bY)bZ=bY;else{if(!(bZ<bR['maxTextureUnits']))return void a2['logOnce']();bX['set'](bJ,bZ),this['_textureIndexNextVal']['set'](bQ,bZ+0x1);}bR['activeTexture'](bR['TEXTURE0']+bZ),bR['bindTexture'](bR['TEXTURE_2D'],bW['texture']),bR['uniform1i'](bS,bZ);}else a2['error']();}}}}}}}['__getTextureIndexMap'](bI){let bJ=this['_textureIndexByShader']['get'](bI);return bJ||(bJ=new Map(),this['_textureIndexByShader']['set'](bI,bJ)),bJ;}};a1(aO,'SHADER_HEADER_OPENGL_ES1',''),a1(aO,'SHADER_HEADER_OPENGL_ES3','#version\x20300\x20es\x0a'),a1(aO,'SHADER_HEADER_VERTEX','#define\x20VERT_SHADER\x0a'),a1(aO,'SHADER_HEADER_FRAGMENT','#define\x20FRAG_SHADER\x0a'),a1(aO,'FORCE_PROGRAM_CHANGE',!0x1),a1(aO,'SHADER_BASE_VERTEX','\x0aATTRIB\x20vec2\x20a_position;\x0aATTRIB\x20vec2\x20a_texCoord;\x0aATTRIB\x20vec4\x20a_color;\x0aVARY_OUT\x20vec2\x20v_texCoord;\x0aVARY_OUT\x20vec4\x20v_color;\x0auniform\x20vec3\x20iResolution;\x0auniform\x20bool\x20uSnapToPixelGrid;\x0a\x0avoid\x20main()\x0a{\x0a\x20\x20vec2\x20p\x20=\x20a_position;\x0a\x20\x20if\x20(uSnapToPixelGrid)\x20{\x0a\x20\x20\x20\x20p\x20=\x20floor(p)\x20+\x20vec2(0.5);\x0a\x20\x20}\x0a\x20\x20vec2\x20zeroToOne\x20=\x20p\x20/\x20iResolution.xy;\x0a\x20\x20vec2\x20zeroToTwo\x20=\x20zeroToOne\x20*\x202.0;\x0a\x20\x20vec2\x20clipSpace\x20=\x20zeroToTwo\x20-\x201.0;\x0a\x20\x20gl_Position\x20=\x20vec4(clipSpace\x20*\x20vec2(1.0,\x20-1.0),\x200.0,\x201.0);\x0a\x20\x20v_texCoord\x20=\x20a_texCoord;\x0a\x20\x20v_color\x20=\x20a_color;\x0a}'),a1(aO,'SHADER_BASE_FRAGMENT','\x0aVARY_IN\x20vec2\x20v_texCoord;\x0aVARY_IN\x20vec4\x20v_color;\x0auniform\x20int\x20uRenderMode;\x0auniform\x20vec4\x20iCurrentColor;\x0auniform\x20sampler2D\x20uTexture;\x0avoid\x20main()\x0a{\x0a\x20\x20if\x20\x20\x20\x20\x20\x20(uRenderMode\x20==\x201)\x20\x20gl_FragColor\x20=\x20texture(uTexture,\x20v_texCoord);\x20\x20\x20\x20//\x20Textured\x20rendering\x20mode\x0a\x20\x20else\x20if\x20(uRenderMode\x20==\x202)\x20\x20gl_FragColor\x20=\x20v_color;\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Per-vertex\x20color\x20mode\x0a\x20\x20else\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20gl_FragColor\x20=\x20iCurrentColor;\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x20Legacy\x20uniform\x20color\x20mode\x0a}'),a1(aO,'SHADER_HEADER_ALL_WEBGL2','precision\x20highp\x20float;\x0aprecision\x20highp\x20int;\x0aprecision\x20mediump\x20sampler3D;\x0a#ifdef\x20FRAG_SHADER\x0a\x20\x20layout(location\x20=\x200)\x20out\x20vec4\x20_fragColor;\x0a\x20\x20#define\x20gl_FragColor\x20_fragColor\x0a#endif\x0a//\x20TODO:\x20This\x20is\x20
1a\x20hack;\x20also\x20breaks\x20the\x203-parameter\x20version\x20of\x20texture()\x0a#undef\x20texture\x0a#define\x20_TEX(s,\x20uv)\x20texture(s,\x20uv)\x0a#define\x20texture(s,\x20uv)\x20_TEX(s,\x20(uv).xy)\x0a#define\x20texture2D(s,\x20uv)\x20texture(s,\x20uv)\x0a#define\x20textureCube(s,\x20uv)\x20texture(s,\x20uv)\x0a#define\x20ATTRIB\x20\x20\x20in\x0a#define\x20VARY_IN\x20\x20in\x0a#define\x20VARY_OUT\x20out\x0a'),a1(aO,'SHADER_HEADER_ALL_WEBGL','\x0a#ifdef\x20GL_OES_standard_derivatives\x0a\x20\x20#extension\x20GL_OES_standard_derivatives\x20:\x20enable\x0a#endif\x0a#ifdef\x20GL_ES\x0a\x20\x20precision\x20highp\x20float;\x0a\x20\x20precision\x20highp\x20float;\x0a#endif\x0a//\x20Polyfill\x20missing\x20texture\x20functions\x0avec4\x20texture(sampler2D\x20s,\x20vec2\x20c)\x20{\x20return\x20texture2D(s,c);\x20}\x0avec4\x20texture(sampler2D\x20s,\x20vec2\x20c,\x20float\x20b)\x20{\x20return\x20texture2D(s,c);\x20}\x0avec4\x20texture(samplerCube\x20s,\x20vec3\x20c\x20)\x20{\x20return\x20textureCube(s,c);\x20}\x0avec4\x20texture(samplerCube\x20s,\x20vec3\x20c,\x20float\x20b)\x20{\x20return\x20textureCube(s,c);\x20}\x0a#ifdef\x20GL_EXT_shader_texture_lod\x0a\x20\x20#extension\x20GL_EXT_shader_texture_lod\x20:\x20enable\x0a\x20\x20vec4\x20textureLod(sampler2D\x20s,\x20vec2\x20c,\x20float\x20b)\x20{\x20return\x20texture2DLodEXT(s,c,b);\x20}\x0a\x20\x20vec4\x20textureGrad(sampler2D\x20s,\x20vec2\x20c,\x20vec2\x20dx,\x20vec2\x20dy)\x20{\x20return\x20texture2DGradEXT(s,c,dx,dy);\x20}\x0a#else\x0a\x20\x20vec4\x20textureLod(sampler2D\x20s,\x20vec2\x20c,\x20float\x20b)\x20{\x20return\x20texture2D(s,c);\x20}\x0a\x20\x20vec4\x20textureGrad(sampler2D\x20s,\x20vec2\x20c,\x20vec2\x20dx,\x20vec2\x20dy)\x20{\x20return\x20texture2D(s,c);\x20}\x0a#endif\x0a//\x20Polyfill\x20missing\x20math\x0afloat\x20round(float\x20x)\x20{\x20return\x20floor(x\x20+\x200.5);\x20}\x0avec2\x20round(vec2\x20x)\x20{\x20return\x20floor(x\x20+\x200.5);\x20}\x0avec3\x20round(vec3\x20x)\x20{\x20return\x20floor(x\x20+\x200.5);\x20}\x0avec4\x20round(vec4\x20x)\x20{\x20return\x20floor(x\x20+\x200.5);\x20}\x0afloat\x20trunc(\x20float\x20x,\x20float\x20n\x20)\x20{\x20return\x20floor(x*n)/n;\x20}\x0afloat\x20sinh(float\x20x)\x20{\x20return\x20(exp(x)\x20-\x20exp(-x))\x20/\x202.0;\x20}\x0afloat\x20cosh(float\x20x)\x20{\x20return\x20(exp(x)\x20+\x20exp(-x))\x20/\x202.0;\x20}\x0afloat\x20tanh(float\x20x)\x20{\x20return\x20sinh(x)\x20/\x20cosh(x);\x20}\x0afloat\x20coth(float\x20x)\x20{\x20return\x20cosh(x)\x20/\x20sinh(x);\x20}\x0afloat\x20sech(float\x20x)\x20{\x20return\x201.0\x20/\x20cosh(x);\x20}\x0afloat\x20csch(float\x20x)\x20{\x20return\x201.0\x20/\x20sinh(x);\x20}\x0afloat\x20asinh(float\x20x)\x20{\x20return\x20log(x\x20+\x20sqrt(x\x20*\x20x\x20+\x201.0));\x20}\x0afloat\x20acosh(float\x20x)\x20{\x20return\x20log(x\x20+\x20sqrt(x\x20*\x20x\x20-\x201.0));\x20}\x0afloat\x20atanh(float\x20x)\x20{\x20return\x200.5\x20*\x20log((1.0\x20+\x20x)\x20/\x20(1.0\x20-\x20x));\x20}\x0afloat\x20acoth(float\x20x)\x20{\x20return\x200.5\x20*\x20log((x\x20+\x201.0)\x20/\x20(x\x20-\x201.0));\x20}\x0afloat\x20asech(float\x20x)\x20{\x20return\x20log((1.0\x20+\x20sqrt(1.0\x20-\x20x\x20*\x20x))\x20/\x20x);\x20}\x0afloat\x20acsch(float\x20x)\x20{\x20return\x20log((1.0\x20+\x20sqrt(1.0\x20+\x20x\x20*\x20x))\x20/\x20x);\x20}\x0a//\x20Polyfill\x20missing\x20matrix\x20functions\x0amat3\x20transpose(mat3\x20m)\x20{\x20return\x20mat3(m[0].x,\x20m[1].x,\x20m[2].x,\x20m[0].y,\x20m[1].y,\x20m[2].y,\x20m[0].z,\x20m[1].z,\x20m[2].z);\x20}\x0amat4\x20inverse(mat4\x20m\x20)\x20{\x0a\x20\x20float\x20inv0\x20\x20=\x20\x20m[1].y*m[2].z*m[3].w\x20-\x20m[1].y*m[2].w*m[3].z\x20-\x20m[2].y*m[1].z*m[3].w\x20+\x20m[2].y*m[1].w*m[3].z\x20+\x20m[3].y*m[1].z*m[2].w\x20-\x20m[3].y*m[1].w*m[2].z;\x0a\x20\x20float\x20inv1\x20\x20=\x20-m[0].y*m[2].z*m[3].w\x20+\x20m[0].y*m[2].w*m[3].z\x20+\x20m[2].y*m[0].z*m[3].w\x20-\x20m[2].y*m[0].w*m[3].z\x20-\x20m[3].y*m[0].z*m[2].w\x20+\x20m[3].y*m[0].w*m[2].z;\x0a\x20\x20float\x20inv2\x20\x20=\x20\x20m[0].y*m[1].z*m[3].w\x20-\x20m[0].y*m[1].w*m[3].z\x20-\x20m[1].y*m[0].z*m[3].w\x20+\x20m[1].y*m[0].w*m[3].z\x20+\x20m[3].y*m[0].z*m[1].w\x20-\x20m[3].y*m[0].w*m[1].z;\x0a\x20\x20float\x20inv3\x20\x20=\x20-m[0].y*m[1].z*m[2].w\x20+\x20m[0].y*m[1].w*m[2].z\x20+\x20m[1].y*m[0].z*m[2].w\x20-\x20m[1].y*m[0].w*m[2].z\x20-\x20m[2].y*m[0].z*m[1].w\x20+\x20m[2].y*m[0].w*m[1].z;\x0a\x20\x20float\x20inv4\x20\x20=\x20-m[1].x*m[2].z*m[3].w\x20+\x20m[1].x*m[2].w*m[3].z\x20+\x20m[2].x*m[1].z*m[3].w\x20-\x20m[2].x*m[1].w*m[3].z\x20-\x20m[3].x*m[1].z*m[2].w\x20+\x20m[3].x*m[1].w*m[2].z;\x0a\x20\x20float\x20inv8\x20\x20=\x20\x20m[1].x*m[2].y*m[3].w\x20-\x20m[1].x*m[2].w*m[3].y\x20-\x20m[2].x*m[1].y*m[3].w\x20+\x20m[2].x*m[1].w*m[3].y\x20+\x20m[3].x*m[1].y*m[2].w\x20-\x20m[3].x*m[1].w*m[2].y;\x0a\x20\x20float\x20inv5\x20\x20=\x20\x20m[0].x*m[2].z*m[3].w\x20-\x20m[0].x*m[2].w*m[3].z\x20-\x20m[2].x*m[0].z*m[3].w\x20+\x20m[2].x*m[0].w*m[3].z\x20+\x20m[3].x*m[0].z*m[2].w\x20-\x20m[3].x*m[0].w*m[2].z;\x0a\x20\x20float\x20inv6\x20\x20=\x20-m[0].x*m[1].z*m[3].w\x20+\x20m[0].x*m[1].w*m[3].z\x20+\x20m[1].x*m[0].z*m[3].w\x20-\x20m[1].x*m[0].w*m[3].z\x20-\x20m[3].x*m[0].z*m[1].w\x20+\x20m[3].x*m[0].w*m[1].z;\x0a\x20\x20float\x20inv7\x20\x20=\x20\x20m[0].x*m[1].z*m[2].w\x20-\x20m[0].x*m[1].w*m[2].z\x20-\x20m[1].x*m[0].z*m[2].w\x20+\x20m[1].x*m[0].w*m[2].z\x20+\x20m[2].x*m[0].z*m[1].w\x20-\x20m[2].x*m[0].w*m[1].z;\x0a\x20\x20float\x20inv9\x20\x20=\x20-m[0].x*m[2].y*m[3].w\x20+\x20m[0].x*m[2].w*m[3].y\x20+\x20m[2].x*m[0].y*m[3].w\x20-\x20m[2].x*m[0].w*m[3].y\x20-\x20m[3].x*m[0].y*m[2].w\x20+\x20m[3].x*m[0].w*m[2].y;\x0a\x20\x20float\x20inv10\x20=\x20\x20m[0].x*m[1].y*m[3].w\x20-\x20m[0].x*m[1].w*m[3].y\x20-\x20m[1].x*m[0].y*m[3].w\x20+\x20m[1].x*m[0].w*m[3].y\x20+\x20m[3].x*m[0].y*m[1].w\x20-\x20m[3].x*m[0].w*m[1].y;\x0a\x20\x20float\x20inv11\x20=\x20-m[0].x*m[1].y*m[2].w\x20+\x20m[0].x*m[1].w*m[2].y\x20+\x20m[1].x*m[0].y*m[2].w\x20-\x20m[1].x*m[0].w*m[2].y\x20-\x20m[2].x*m[0].y*m[1].w\x20+\x20m[2].x*m[0].w*m[1].y;\x0a\x20\x20float\x20inv12\x20=\x20-m[1].x*m[2].y*m[3].z\x20+\x20m[1].x*m[2].z*m[3].y\x20+\x20m[2].x*m[1].y*m[3].z\x20-\x20m[2].x*m[1].z*m[3].y\x20-\x20m[3].x*m[1].y*m[2].z\x20+\x20m[3].x*m[1].z*m[2].y;\x0a\x20\x20float\x20inv13\x20=\x20\x20m[0].x*m[2].y*m[3].z\x20-\x20m[0].x*m[2].z*m[3].y\x20-\x20m[2].x*m[0].y*m[3].z\x20+\x20m[2].x*m[0].z*m[3].y\x20+\x20m[3].x*m[0].y*m[2].z\x20-\x20m[3].x*m[0].z*m[2].y;\x0a\x20\x20float\x20inv14\x20=\x20-m[0].x*m[1].y*m[3].z\x20+\x20m[0].x*m[1].z*m[3].y\x20+\x20m[1].x*m[0].y*m[3].z\x20-\x20m[1].x*m[0].z*m[3].y\x20-\x20m[3].x*m[0].y*m[1].z\x20+\x20m[3].x*m[0].z*m[1].y;\x0a\x20\x20float\x20inv15\x20=\x20\x20m[0].x*m[1].y*m[2].z\x20-\x20m[0].x*m[1].z*m[2].y\x20-\x20m[1].x*m[0].y*m[2].z\x20+\x20m[1].x*m[0].z*m[2].y\x20+\x20m[2].x*m[0].y*m[1].z\x20-\x20m[2].x*m[0].z*m[1].y;\x0a\x20\x20float\x20det\x20=\x20m[0].x\x20*\x20inv0\x20+\x20m[0].y\x20*\x20inv4\x20+\x20m[0].z\x20*\x20inv8\x20+\x20m[0].w\x20*\x20inv12;\x0a\x20\x20det\x20=\x201.0\x20/\x20det;\x0a\x20\x20return\x20det\x20*\x20mat4(inv0,\x20inv1,\x20inv2,\x20inv3,\x20inv4,\x20inv5,\x20inv6,\x20inv7,\x20inv8,\x20inv9,\x20inv10,\x20inv11,\x20inv12,\x20inv13,\x20inv14,\x20inv15);\x0a}\x0afloat\x20determinant(\x20in\x20mat2\x20m\x20)\x20{\x20return\x20m[0][0]*m[1][1]\x20-\x20m[0][1]*m[1][0];\x20}\x0afloat\x20determinant(\x20mat4\x20m\x20)\x20{\x0a\x20\x20float\x20b00\x20=\x20m[0][0]\x20*\x20m[1][1]\x20-\x20m[0][1]\x20*\x20m[1][0];\x0a\x20\x20float\x20b01\x20=\x20m[0][0]\x20*\x20m[1][2]\x20-\x20m[0][2]\x20*\x20m[1][0];\x0a\x20\x20float\x20b02\x20=\x20m[0][0]\x20*\x20m[1][3]\x20-\x20m[0][3]\x20*\x20m[1][0];\x0a\x20\x20float\x20b03\x20=\x20m[0][1]\x20*\x20m[1][2]\x20-\x20m[0][2]\x20*\x20m[1][1];\x0a\x20\x20float\x20b04\x20=\x20m[0][1]\x20*\x20m[1][3]\x20-\x20m[0][3]\x20*\x20m[1][1];\x0a\x20\x20float\x20b05\x20=\x20m[0][2]\x20*\x20m[1][3]\x20-\x20m[0][3]\x20*\x20m[1][2];\x0a\x20\x20float\x20b06\x20=\x20m[2][0]\x20*\x20m[3][1]\x20-\x20m[2][1]\x20*\x20m[3][0];\x0a\x20\x20float\x20b07\x20=\x20m[2][0]\x20*\x20m[3][2]\x20-\x20m[2][2]\x20*\x20m[3][0];\x0a\x20\x20float\x20b08\x20=\x20m[2][0]\x20*\x20m[3][3]\x20-\x20m[2][3]\x20*\x20m[3][0];\x0a\x20\x20float\x20b09\x20=\x20m[2][1]\x20*\x20m[3][2]\x20-\x20m[2][2]\x20*\x20m[3][1];\x0a\x20\x20float\x20b10\x20=\x20m[2][1]\x20*\x20m[3][3]\x20-\x20m[2][3]\x20*\x20m[3][1];\x0a\x20\x20float\x20b11\x20=\x20m[2][2]\x20*\x20m[3][3]\x20-\x20m[2][3]\x20*\x20m[3][2];\x0a\x20\x20return\x20b00\x20*\x20b11\x20-\x20b01\x20*\x20b10\x20+\x20b02\x20*\x20b09\x20+\x20b03\x20*\x20b08\x20-\x20b04\x20*\x20b07\x20+\x20b05\x20*\x20b06;\x0a}\x0amat2\x20inverse(mat2\x20m)\x20{\x0a\x20\x20float\x20det\x20=\x20determinant(m);\x0a\x20\x20return\x20mat2(m[1][1],\x20-m[0][1],\x20-m[1][0],\x20m[0][0])\x20/\x20det;\x0a}\x0a#define\x20ATTRIB\x20\x20\x20attribute\x0a#define\x20VARY_IN\x20\x20varying\x0a#define\x20VARY_OUT\x20varying\x0a'),a1(aO,'SHADERTOY_VERTEX_HEADER','\x0aATTRIB\x20vec2\x20a_position;\x0avoid\x20main()\x20{\x0a\x20\x20gl_Position\x20=\x20vec4(a_position,\x200.0,\x201.
10);\x0a}'),a1(aO,'SHADERTOY_FRAGMENT_HEADER','\x0a#define\x20MAX_CHANNELS\x204\x0a\x0a//\x20ShaderToy\x20builtins\x0auniform\x20vec3\x20iResolution;\x0auniform\x20float\x20iTime;\x0auniform\x20float\x20iTimeDelta;\x0auniform\x20float\x20iFrameRate;\x0auniform\x20int\x20iFrame;\x0auniform\x20float\x20iChannelTime[MAX_CHANNELS];\x0auniform\x20vec3\x20iChannelResolution[MAX_CHANNELS];\x0auniform\x20vec4\x20iMouse;\x0auniform\x20sampler2D\x20iChannel0;\x0auniform\x20sampler2D\x20iChannel1;\x0auniform\x20sampler2D\x20iChannel2;\x0auniform\x20sampler2D\x20iChannel3;\x0auniform\x20vec4\x20iDate;\x0a\x0a//\x20TestUFO-specific\x20extensions\x20to\x20help\x20CRT\x20Simulator\x0auniform\x20float\x20iRealRefreshRate;\x0auniform\x20float\x20iRealFrameRate;\x0auniform\x20float\x20iPixelsPerSec;\x0auniform\x20float\x20iPixelsPerFrame;\x0auniform\x20int\x20iSnapToPixelGrid;\x0a\x0a//\x20Shadertoy\x20entrypoint\x0avoid\x20mainImage(out\x20vec4\x20fragColor,\x20in\x20vec2\x20fragCoord);\x0avoid\x20main()\x20{\x0a\x20\x20\x20\x20gl_FragColor.a\x20=\x201.0;\x0a\x20\x20\x20\x20mainImage(gl_FragColor,\x20gl_FragCoord.xy);\x0a}\x0a');var aP=aO,aQ=class extends aD{constructor(){super(),this['_UFOEngineWebGL']=!0x0,window['UFOProps']['debug']||(this['self']['DEBUG_LOGGING']=!0x1),this['initialize']();}get['ready'](){return!!this['_context'];}get['width'](){return this['_canvas']?this['_canvas']['width']:0x0;}get['height'](){return this['_canvas']?this['_canvas']['height']:0x0;}['__checkError'](bI){(arguments['length']>0x1&&void 0x0!==arguments[0x1]&&arguments[0x1]||this['self']['DEBUG_LOGGING'])&&this['_context']['getError']()!==this['_context']['NO_ERROR']&&a2['error']();}async['__attachDebugger'](){var bI;if(!this['self']['DEBUG_LOGGING_GLERRORS']&&!this['self']['DEBUG_LOGGING_GLCALLS'])return!0x1;if(null!==(bI=this['_context'])&&void 0x0!==bI&&bI['isDebuggerUtils'])return!0x1;if(!this['_context'])return!0x1;try{let bJ=function(bM,bN,bO){a2['warn']();},bK=function(bM,bN){a2['warn']();};const {WebGLDebugUtils:bL}=await import('../tools/webgl-debug.js');return this['_originalContext']=this['_context'],this['_context']=bL['makeDebugContext'](this['_context'],this['self']['DEBUG_LOGGING_GLERRORS']?bJ:void 0x0,this['self']['DEBUG_LOGGING_GLCALLS']?bK:void 0x0),this['_context']['isDebuggerUtils']=!0x0,!0x0;}catch(bM){return a2['error'](),!0x1;}}['initialize'](){if(this['_initalized'])return a2['error']();this['_readonly']=!0x1,this['_globalAlpha']=0x1,this['_smoothing']=!0x0,this['_clipRect']=null,this['_placeholderTexture']=null,this['_frameArgs']=null,this['_imageVertices']=new Float32Array(0x10),this['_queueVertices']=new Float32Array(this['self']['QUEUE_VERTICES_MAX']*this['self']['QUEUE_FLOATS_PER_VERTEX']),this['_queueVertexCount']=0x0,this['_frameStarted']=!0x1,this['_textures']=null,this['_uniforms']=new Map(),this['_intUniform']=new Uint32Array(0x1),this['_ufoAttributes']={},this['_ufoBuffers']={},this['_currentColor']=new Float32Array(0x4),this['_colorRGBA']=new Float32Array(0x4),this['_lazyInits']=!0x1,this['_initalized']=!0x0;}['__lazyInitialize'](){if(this['_lazyInits'])return;const bI=this['_context'];if(!bI)return;this['_lazyInits']=!0x0,this['_lazyInitializing']=!0x0,(this['self']['DEBUG_LOGGING_GLCALLS']||this['self']['DEBUG_LOGGING_GLERRORS'])&&this['__attachDebugger']()['catch'](bK=>{a2['error']();});const bJ='undefined'!=typeof WebGL2RenderingContext&&bI instanceof WebGL2RenderingContext;bI['version']=bJ?0x2:0x1,bI['colorSpace']=this['_colorSpace'],this['_textures']=new aN(bI),this['_shaders']=new aP(bI,this['_textures']);try{this['setBlendingMode']('source-over');}catch(bK){a2['error']();}try{bI['disable'](bI['DEPTH_TEST']);}catch(bL){a2['warn']();}try{bI['disable'](bI['STENCIL_TEST']);}catch(bM){a2['warn']();}try{bI['frontFace'](bI['CW']);}catch(bN){a2['warn']();}try{bI['cullFace'](bI['BACK']);}catch(bO){a2['warn']();}this['__initEngineShader'](),this['_lazyInitializing']=!0x1;}['dispose'](){a2['log']();let bI=this['_context'];if(bI){try{var bJ;null===(bJ=this['_shaders'])||void 0x0===bJ||bJ['clear']();}catch(bK){a2['error']();}try{bI['bindVertexArray'](null);}catch(bL){a2['error']();}try{bI['bindBuffer'](bI['ARRAY_BUFFER'],null),this['_bufferShaderQuad']&&(bI['deleteBuffer'](this['_bufferShaderQuad']),this['_bufferShaderQuad']=null);for(const bM in this['_ufoBuffers']){const bN=this['_ufoBuffers'][bM];bN&&bI['deleteBuffer'](bN);}this['_ufoBuffers']={};}catch(bO){a2['error']();}this['flush']();try{this['_textures']['clear'](),this['_textures']=null,this['_uniforms']['clear'](),this['_uniforms']=null,delete this['_imageVertices'],this['_imageVertices']=null,delete this['_queueVertices'],this['_queueVertices']=null;}catch(bP){a2['error']();}this['_ufoAttributes']={},this['_ufoUniforms']={},this['_ufoBuffers']={};
1try{super['dispose']();}catch(bQ){a2['error']();}this['_initalized']=!0x1,this['_lazyInits']=!0x1;}}['flush'](){var bI;this['__flushDrawQueue']();const bJ=this['_context'];null==bJ||bJ['bindTexture'](bJ['TEXTURE_2D'],null),null===(bI=this['_textures'])||void 0x0===bI||bI['clear']();}['frameBegin'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_frameStarted']=!0x0,this['_context']&&(this['_frameArgs']=bI,this['__lazyInitialize']());}['frameEnd'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(this['_frameStarted']&&this['_context']){if(this['__flushDrawQueue'](),bI['forceFlush']||this['_frameArgs']['forceFlush']){try{const bJ=this['_context'];if(bJ['fenceSync']){const bK=bJ['fenceSync'](bJ['SYNC_GPU_COMMANDS_COMPLETE'],0x0);bJ['clientWaitSync'](bK,bJ['SYNC_FLUSH_COMMANDS_BIT'],0x0)===bJ['WAIT_FAILED']?a2['error']():bJ['TIMEOUT_EXPIRED'],bJ['flush'](),bJ['deleteSync'](bK);}else bJ['flush']();}catch(bL){a2['error']();}this['__checkError']('frameEnd()',!0x0);}this['_frameStarted']=!0x1;}}['frameForceFlush'](){var bI;this['__flushDrawQueue'](),null===(bI=this['_context'])||void 0x0===bI||bI['finish']();}['setSmoothing'](bI){this['_context']||a2['throw'](),this['__flushDrawQueue'](),this['_smoothing']=!!bI,this['_textures']['smoothing']=this['_smoothing'];}['setAlpha'](bI){bI=parseFloat(bI),isNaN(bI)?this['_globalAlpha']=0x1:this['_globalAlpha']=bI>=0x1?0x1:bI<=0x0?0x0:bI;}['setBlendingMode'](bI){if(!bI)return;if(bI===this['_lastBlendingMode'])return;const bJ=this['_context'];if(!bJ)return a2['throw']();this['__flushDrawQueue'](),bJ['enable'](bJ['BLEND']),bJ['blendEquation'](bJ['FUNC_ADD']);try{switch(bI){case'lighter':bJ['blendFunc'](bJ['SRC_ALPHA'],bJ['ONE']);break;case'source-over':bJ['blendFunc'](bJ['ONE'],bJ['ONE_MINUS_SRC_ALPHA']);break;case'source-in':bJ['blendFunc'](bJ['DST_ALPHA'],bJ['ZERO']);break;case'source-out':bJ['blendFunc'](bJ['ONE_MINUS_DST_ALPHA'],bJ['ZERO']);break;case'source-atop':bJ['blendFunc'](bJ['DST_ALPHA'],bJ['ONE_MINUS_SRC_ALPHA']);break;case'destination-over':bJ['blendFunc'](bJ['ONE_MINUS_DST_ALPHA'],bJ['ONE']);break;case'destination-in':bJ['blendFunc'](bJ['ZERO'],bJ['SRC_ALPHA']);break;case'destination-out':bJ['blendFunc'](bJ['ZERO'],bJ['ONE_MINUS_SRC_ALPHA']);break;case'destination-atop':bJ['blendFunc'](bJ['ONE_MINUS_DST_ALPHA'],bJ['SRC_ALPHA']);break;case'multiply':bJ['blendFunc'](bJ['DST_COLOR'],bJ['ZERO']);break;case'screen':bJ['blendFunc'](bJ['ONE'],bJ['ONE_MINUS_SRC_COLOR']);break;case'darken':bJ['MIN']&&(bJ['blendEquation'](bJ['MIN']),bJ['blendFunc'](bJ['ONE'],bJ['ONE']));break;case'lighten':bJ['MAX']&&(bJ['blendEquation'](bJ['MAX']),bJ['blendFunc'](bJ['ONE'],bJ['ONE']));break;case'copy':bJ['blendFunc'](bJ['ONE'],bJ['ZERO']);break;case'xor':bJ['blendFunc'](bJ['ONE_MINUS_DST_ALPHA'],bJ['ONE_MINUS_SRC_ALPHA']);break;default:a2['error'](),bJ['blendFunc'](bJ['ONE'],bJ['ONE_MINUS_SRC_ALPHA']);}}catch(bK){a2['error'](),bJ['blendFunc'](bJ['ONE'],bJ['ONE_MINUS_SRC_ALPHA']);}this['_lastBlendingMode']=bI;}['setColor'](bI){this['_currentColor']['set'](ab['parseColorToUniform'](bI,this['_colorSpace'],this['_colorRGBA']));}['setClipRect'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];const bJ=this['_context'];if(!bJ)return a2['throw']();this['__flushDrawQueue']();const bK=bI['x']??0x0,bL=bI['y']??0x0,bM=bI['width']??this['width'],bN=bI['height']??this['height'],bO=this['height']-(bL+bN);0x0!==bK||0x0!==bL||bM!==this['width']||bN!==this['height']?(this['_clipRect']&&bJ['disable'](bJ['SCISSOR_TEST']),this['_clipRect']={'x':bK,'y':bL,'width':bM,'height':bN},bJ['enable'](bJ['SCISSOR_TEST']),bJ['scissor'](bK,bO,bM,bN)):this['_clipRect']&&(bJ['disable'](bJ['SCISSOR_TEST']),this['_clipRect']=null);}['clearRect'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];const bJ=this['_context'];if(!bJ)return a2['throw']();this['__flushDrawQueue']();const bK=bI['x']??0x0,bL=bI['y']??0x0,bM=bI['width']??this['width'],bN=bI['height']??this['height'];if(this['_clipRect']){const bO=this['_clipRect'],bP=Math['max'](bK,bO['x']),bQ=Math['max'](bL,bO['y']),bR=Math['min'](bK+bM,bO['x']+bO['width'])-bP,bS=Math['min'](bL+bN,bO['y']+bO['height'])-bQ;if(bR>0x0&&bS>0x0){const bU=this['height']-(bQ+bS);bJ['enable'](bJ['SCISSOR_TEST']),bJ['scissor'](bP,bU,bR,bS),bJ['clearColor'](0x0,0x0,0x0,0x0),bJ['clear'](bJ['COLOR_BUFFER_BIT']);}const bT=this['height']-(bO['y']+bO['height']);bJ['enable'](bJ['SCISSOR_TEST']),bJ['scissor'](bO['x'],bT,bO['width'],bO['height']);}
1else{if(0x0===bK&&0x0===bL&&bM===this['width']&&bN===this['height'])bJ['disable'](bJ['SCISSOR_TEST']),bJ['clearColor'](0x0,0x0,0x0,0x0),bJ['clear'](bJ['COLOR_BUFFER_BIT']);else{const bV=this['height']-(bL+bN);bJ['enable'](bJ['SCISSOR_TEST']),bJ['scissor'](bK,bV,bM,bN),bJ['clearColor'](0x0,0x0,0x0,0x0),bJ['clear'](bJ['COLOR_BUFFER_BIT']),bJ['disable'](bJ['SCISSOR_TEST']);}this['_clipRect']=null;}}['fillRect'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_context'])return a2['throw']();const bJ=bI['x']??0x0,bK=bI['y']??0x0,bL=bI['width']??this['width'],bM=bI['height']??this['height'];bI['color']&&this['setColor'](bI['color']),this['__ensureDrawQueueSpace'](0x6);const bN=this['_queueVertices'];let bO=this['_queueVertexCount']*this['self']['QUEUE_FLOATS_PER_VERTEX'];const bP=this['_currentColor'],bQ=bP[0x3]*this['_globalAlpha'],bR=bP[0x0]*bQ,bS=bP[0x1]*bQ,bT=bP[0x2]*bQ,bU=bJ,bV=bK,bW=bJ+bL,bX=bK+bM;bN[bO++]=bU,bN[bO++]=bV,bN[bO++]=bR,bN[bO++]=bS,bN[bO++]=bT,bN[bO++]=bQ,bN[bO++]=bW,bN[bO++]=bV,bN[bO++]=bR,bN[bO++]=bS,bN[bO++]=bT,bN[bO++]=bQ,bN[bO++]=bU,bN[bO++]=bX,bN[bO++]=bR,bN[bO++]=bS,bN[bO++]=bT,bN[bO++]=bQ,bN[bO++]=bU,bN[bO++]=bX,bN[bO++]=bR,bN[bO++]=bS,bN[bO++]=bT,bN[bO++]=bQ,bN[bO++]=bW,bN[bO++]=bV,bN[bO++]=bR,bN[bO++]=bS,bN[bO++]=bT,bN[bO++]=bQ,bN[bO++]=bW,bN[bO++]=bX,bN[bO++]=bR,bN[bO++]=bS,bN[bO++]=bT,bN[bO++]=bQ,this['_queueVertexCount']+=0x6;}['drawRect'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_context'])return a2['throw']();const bJ=bI['x']??0x0,bK=bI['y']??0x0,bL=bI['width']??this['width'],bM=bI['height']??this['height'],bN=bI['thickness']??0x1;bI['color']&&this['setColor'](bI['color']),this['__ensureDrawQueueSpace'](0x18);const bO=this['_queueVertices'];let bP=this['_queueVertexCount']*this['self']['QUEUE_FLOATS_PER_VERTEX'];const bQ=this['_currentColor'],bR=bQ[0x3]*this['_globalAlpha'],bS=bQ[0x0]*bR,bT=bQ[0x1]*bR,bU=bQ[0x2]*bR,bV=bJ-bN/0x2,bW=bK-bN/0x2,bX=bJ+bL+bN/0x2,bY=bK+bM+bN/0x2,bZ=(c0,c1)=>{bO[bP++]=c0,bO[bP++]=c1,bO[bP++]=bS,bO[bP++]=bT,bO[bP++]=bU,bO[bP++]=bR;};bZ(bV,bW),bZ(bX,bW),bZ(bV,bW+bN),bZ(bV,bW+bN),bZ(bX,bW),bZ(bX,bW+bN),bZ(bV,bY-bN),bZ(bV,bY),bZ(bX,bY-bN),bZ(bX,bY-bN),bZ(bV,bY),bZ(bX,bY),bZ(bV,bW+bN),bZ(bV+bN,bW+bN),bZ(bV,bY-bN),bZ(bV,bY-bN),bZ(bV+bN,bW+bN),bZ(bV+bN,bY-bN),bZ(bX-bN,bW+bN),bZ(bX,bW+bN),bZ(bX-bN,bY-bN),bZ(bX,bW+bN),bZ(bX,bY-bN),bZ(bX-bN,bY-bN),this['_queueVertexCount']+=0x18;}['drawLine'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_context'])return a2['throw']();const bJ=bI['thickness']??0x1;bI['color']&&this['setColor'](bI['color']);const bK=this['_currentColor'];if(bI['coords']){const bL=bI['coords']['x'],bM=bI['coords']['y'],bN=bI['coords']['length'];if(bN<0x2)return void a2['error']();for(let bO=0x1;bO<bN;bO++)this['__queueLineSegment'](bL[bO-0x1],bM[bO-0x1],bL[bO],bM[bO],bJ,bK);}else this['__queueLineSegment'](bI['x1']??0x0,bI['y1']??0x0,bI['x2']??0x0,bI['y2']??0x0,bJ,bK);}['drawPolygon'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_context'])return a2['throw']();bI['color']&&this['setColor'](bI['color']);const bJ=bI['coords'];!bJ||bJ['length']<0x3?a2['error']():this['__queuePolygon'](bJ,this['_currentColor']);}['drawImage'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];const bJ=this['_context'];if(!bJ)return a2['throw']();const bK=bI['source'];if(bK['isReady']&&!bK['isReady']())return;if(!bK)return a2['throw']();this['__flushDrawQueue']();const bL=this['_textures']['getTextureForSource'](bK);if(!bL)return;const bM=bI['x']??0x0,bN=bI['y']??0x0;let bO=bI['width']??(bK['width']||0x0),bP=bI['height']??(bK['height']||0x0);const bQ=bI['sx']??0x0,bR=bI['sy']??0x0,bS=bI['sWidth']??(bK['width']||bO),bT=bI['sHeight']??(bK['height']||bP);if(!(bO&&bP&&bS&&bT))return void a2['error']();const bU=bQ/bL['width'],bV=bR/bL['height'],bW=(bQ+bS)/bL['width'],bX=(bR+bT)/bL['height'],bY=bM,bZ=bN,c0=bM+bO,c1=bN+bP,c2=this['_imageVertices'];c2[0x0]=bY,c2[0x1]=bZ,c2[0x2]=bU,c2[0x3]=bV,c2[0x4]=c0,c2[0x5]=bZ,c2[0x6]=bW,c2[0x7]=bV,c2[0x8]=bY,c2[0x9]=c1,c2[0xa]=bU,c2[0xb]=bX,c2[0xc]=c0,c2[0xd]=c1,c2[0xe]=bW,c2[0xf]=bX;let c3=this['_shaders'];c3['useShader'](this['_ufoEngineShaderID']);const c4=this['_ufoAttributes'];bJ['bindBuffer'](bJ['ARRAY_BUFFER'],this['_ufoBuffers']['image']),c4['a_position']>=0x0&&(bJ['enableVertexAttribArray'](c4['a_position']),bJ['vertexAttribPointer'](c4['a_position'],0x2,bJ['FLOAT'],!0x1,0x10,0x0)),c4['a_texCoord']>=0x0&&(bJ['enableVertexAttribArray'](c4['a_texCoord']),bJ['vertexAttribPointer'](c4['a_texCoord'],0x2,bJ['FLOAT'],!0x1,0x10,0x8)),bJ['bufferData'](bJ['ARRAY_BUFFER'],c2,bJ['STREAM_DRAW']),c3['setUniform'](null,'iResolution',this['width'],this['height'],0x1),c3['setUniform'](null,'uSnapToPixelGrid',!this['_smoothing']),c3['setUniform'](null,'uRenderMode',!0x0),c3['setUniform'](null,'uTexture',!0x1),bJ['activeTexture'](bJ['TEXTURE0']),bJ['bindTexture'](bJ['TEXTURE_2D'],bL['texture']),bJ['drawArrays'](bJ['TRIANGLE_STRIP'],0x0,0x4);}['loadShader'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];const bJ=this['_context'],bK=bI['id'];if(!bJ)return a2['throw']();if(void 0x0===bK)return a2['throw']();if(!bI['shader'])return a2['throw']();return this['_lazyInits']&&this['__flushDrawQueue'](),this['_shaders']['loadShader'](bI)||(this['_error']=!0x0,this['_errorMessage']=this['_shaders']['errorMessage'],a2['throw']());}['runShader'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];const bJ=this['_context'],bK=bI['id'],bL=bI['uniforms']??{};if(!bJ)return a2['throw']();if(void 0x0===bK)return a2['throw']();this['__flushDrawQueue']();let bM=this['_shaders'];if(!bM['useShader'](bK))return a2['throw']();if(this['_shaders']['activeUniforms']['_shadertoy']){var bN,bO,bP,bQ,bR,bS,bT;
1this['__checkError']('runShader()\x20->\x20__setUniform1()'),bM['setUniform'](null,'iSnapToPixelGrid',this['_smoothing']),bM['setUniform'](null,'iRealRefreshRate',(null===(bN=this['_frameArgs'])||void 0x0===bN?void 0x0:bN['refreshRate'])??0x3c),bM['setUniform'](null,'iRealFrameRate',(null===(bO=this['_frameArgs'])||void 0x0===bO?void 0x0:bO['fps'])??0x3c),bM['setUniform'](null,'iPixelsPerFrame',(null===(bP=this['_frameArgs'])||void 0x0===bP?void 0x0:bP['pixelsPerFrame'])??0x0),bM['setUniform'](null,'iPixelsPerSec',(null===(bQ=this['_frameArgs'])||void 0x0===bQ?void 0x0:bQ['pixelsPerSec'])??0x0),this['_intUniform'][0x0]=(null===(bR=this['_frameArgs'])||void 0x0===bR?void 0x0:bR['frameCounter'])??0x0,bM['setUniform'](null,'iResolution',this['width'],this['height'],0x1),bM['setUniform'](null,'iFrame',this['_intUniform']),bM['setUniform'](null,'iFrameRate',(null===(bS=this['_frameArgs'])||void 0x0===bS?void 0x0:bS['refreshRate'])||(null===(bT=this['_frameArgs'])||void 0x0===bT?void 0x0:bT['fps'])||0x3c);for(let bX=0x0;bX<0x4;bX++){var bU,bV,bW;const bY='iChannel'+bX,bZ='iChannelTime['+bX+']',c0='iChannelResolution['+bX+']',c1=(null===(bU=bL[bY])||void 0x0===bU?void 0x0:bU['width'])??0x0,c2=(null===(bV=bL[bY])||void 0x0===bV?void 0x0:bV['height'])??0x0;bM['setUniform'](null,bZ,null===(bW=bL['iChannelTime'])||void 0x0===bW?void 0x0:bW[bX]),bM['setUniform'](null,c0,c1,c2,0x1);}}bM['runShader'](bK,bL);}['__ensureDrawQueueSpace'](bI){this['_queueVertexCount']+bI>this['self']['QUEUE_VERTICES_MAX']&&this['__flushDrawQueue']();}['__queueLineSegment'](bI,bJ,bK,bL,bM,bN){this['__ensureDrawQueueSpace'](0x6);const bO=this['_queueVertices'];let bP=this['_queueVertexCount']*this['self']['QUEUE_FLOATS_PER_VERTEX'];const bQ=bN[0x3]*this['_globalAlpha'],bR=bN[0x0]*bQ,bS=bN[0x1]*bQ,bT=bN[0x2]*bQ;let bU=bI,bV=bJ,bW=bK,bX=bL;this['_smoothing']||(bU=Math['floor'](bU)+0.5,bV=Math['floor'](bV)+0.5,bW=Math['floor'](bW)+0.5,bX=Math['floor'](bX)+0.5);const bY=bW-bU,bZ=bX-bV,c0=Math['hypot'](bY,bZ)||0x1,c1=-bZ/c0,c2=bY/c0,c3=bM/0x2,c4=bW+c1*c3,c5=bX+c2*c3,c6=bU-c1*c3,c7=bV-c2*c3,c8=bW-c1*c3,c9=bX-c2*c3,ca=(cb,cc)=>{bO[bP++]=cb,bO[bP++]=cc,bO[bP++]=bR,bO[bP++]=bS,bO[bP++]=bT,bO[bP++]=bQ;};ca(bU+c1*c3,bV+c2*c3),ca(c4,c5),ca(c6,c7),ca(c6,c7),ca(c4,c5),ca(c8,c9),this['_queueVertexCount']+=0x6;}['__queuePolygon'](bI,bJ){const bK=bI['x'],bL=bI['y'],bM=bI['length'];if(bM<0x3)return;const bN=bJ[0x3]*this['_globalAlpha'],bO=bJ[0x0]*bN,bP=bJ[0x1]*bN,bQ=bJ[0x2]*bN,bR=0x3*(bM-0x2);this['__ensureDrawQueueSpace'](bR);const bS=this['_queueVertices'];let bT=this['_queueVertexCount']*this['self']['QUEUE_FLOATS_PER_VERTEX'];const bU=(bX,bY)=>{bS[bT++]=bX,bS[bT++]=bY,bS[bT++]=bO,bS[bT++]=bP,bS[bT++]=bQ,bS[bT++]=bN;},bV=bK[0x0],bW=bL[0x0];for(let bX=0x1;bX<bM-0x1;bX++)bU(bV,bW),bU(bK[bX],bL[bX]),bU(bK[bX+0x1],bL[bX+0x1]);this['_queueVertexCount']+=bR;}['__flushDrawQueue'](){if(this['_lazyInitializing'])return;this['_lazyInits']||this['__lazyInitialize']();const bI=this['_context'];if(!bI)return;if(0x0===this['_queueVertexCount'])return;a2['logIf']();let bJ=this['_shaders'];bJ['useShader'](this['_ufoEngineShaderID']);const bK=this['_queueVertexCount']*this['self']['QUEUE_FLOATS_PER_VERTEX'];this['_ufoBuffers']['queue']?(bI['bindBuffer'](bI['ARRAY_BUFFER'],this['_ufoBuffers']['queue']),0x1===bI['version']?bI['bufferData'](bI['ARRAY_BUFFER'],this['_queueVertices']['subarray'](0x0,bK),bI['STREAM_DRAW']):bI['bufferSubData'](bI['ARRAY_BUFFER'],0x0,this['_queueVertices'],0x0,bK)):a2['logOnce']();const bL=0x4*this['self']['QUEUE_FLOATS_PER_VERTEX'],bM=this['_ufoAttributes'];bM['a_position']>=0x0&&(bI['enableVertexAttribArray'](bM['a_position']),bI['vertexAttribPointer'](bM['a_position'],0x2,bI['FLOAT'],!0x1,bL,0x0)),bM['a_color']>=0x0&&(bI['enableVertexAttribArray'](bM['a_color']),bI['vertexAttribPointer'](bM['a_color'],0x4,bI['FLOAT'],!0x1,bL,0x8)),bM['a_texCoord']>=0x0&&(bI['disableVertexAttribArray'](bM['a_texCoord']),bI['vertexAttrib2f'](bM['a_texCoord'],0x0,0x0)),this['_intUniform'][0x0]=0x2,bJ['setUniform'](null,'iResolution',this['width'],this['height'],0x1),bJ['setUniform'](null,'uSnapToPixelGrid',!this['_smoothing']),bJ['setUniform'](null,'uRenderMode',this['_intUniform']),bI['drawArrays'](bI['TRIANGLES'],0x0,this['_queueVertexCount']),this['_queueVertexCount']=0x0;}['__initEngineShader'](){const bI=this['_context'];if(!bI)return;this['_ufoEngineShaderID']='_ufoEngine';const bJ=this['_shaders']['loadShader']({'id':this['_ufoEngineShaderID'],'vertexShader':'\x0aATTRIB\x20vec2\x20a_position;\x0aATTRIB\x20vec2\x20a_texCoord;\x0aATTRIB\x20vec4\x20a_color;\x0aVARY_OUT\x20vec2\x20v_texCoord;\x0aVARY_OUT\x20vec4\x20v_color;\x0auniform\x20vec3\x20iResolution;\x0auniform\x20bool\x20uSnapToPixelGrid;\x0a\x0avoid\x20main()\x0a{\x0a\x20\x20vec2\x20p\x20=\x20a_position;\x0a\x20\x20if\x20(uSnapToPixelGrid)\x20{\x0a\x20\x20\x20\x20p\x20=\x20floor(p)\x20+\x20vec2(0.5);\x0a\x20\x20}\x0a\x20\x20vec2\x20zeroToOne\x20=\x20p\x20/\x20iResolution.xy;\x0a\x20\x20vec2\x20zeroToTwo\x20=\x20zeroToOne\x20*\x202.0;\x0a\x20\x20vec2\x20clipSpace\x20=\x20zeroToTwo\x20-\x201.0;\x0a\x20\x20gl_Position\x20=\x20vec4(clipSpace\x20*\x20vec2(1.0,\x20-1.0),\x200.0,\x201.
10);\x0a\x20\x20v_texCoord\x20=\x20a_texCoord;\x0a\x20\x20v_color\x20=\x20a_color;\x0a}','shader':'\x0aVARY_IN\x20vec2\x20v_texCoord;\x0aVARY_IN\x20vec4\x20v_color;\x0auniform\x20int\x20uRenderMode;\x0auniform\x20vec4\x20iCurrentColor;\x0auniform\x20sampler2D\x20uTexture;\x0avoid\x20main()\x0a{\x0a\x20\x20if\x20(uRenderMode\x20==\x201)\x20{\x0a\x20\x20\x20\x20//\x20Textured\x20rendering\x20mode\x20(for\x20UFOGraphics\x20objects)\x0a\x20\x20\x20\x20gl_FragColor\x20=\x20texture(uTexture,\x20v_texCoord);\x0a\x20\x20}\x20else\x20if\x20(uRenderMode\x20==\x202)\x20{\x0a\x20\x20\x20\x20//\x20Per-vertex\x20color\x20mode\x20(for\x20queued\x20primitives)\x0a\x20\x20\x20\x20gl_FragColor\x20=\x20v_color;\x0a\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20//\x20Legacy\x20uniform\x20color\x20mode\x0a\x20\x20\x20\x20gl_FragColor\x20=\x20iCurrentColor;\x0a\x20\x20}\x0a}'});this['_ufoAttributes']['a_position']=bI['getAttribLocation'](bJ,'a_position'),this['_ufoAttributes']['a_texCoord']=bI['getAttribLocation'](bJ,'a_texCoord'),this['_ufoAttributes']['a_color']=bI['getAttribLocation'](bJ,'a_color'),this['_ufoBuffers']['image']=bI['createBuffer'](),this['_ufoBuffers']['queue']=bI['createBuffer']();const bK=this['self']['QUEUE_VERTICES_MAX']*this['self']['QUEUE_FLOATS_PER_VERTEX']*0x4;bI['bindBuffer'](bI['ARRAY_BUFFER'],this['_ufoBuffers']['queue']),bI['bufferData'](bI['ARRAY_BUFFER'],bK,bI['DYNAMIC_DRAW']);}};a1(aQ,'version',2.5),a1(aQ,'engineName','WebGL'),a1(aQ,'engineID','webgl'),a1(aQ,'surfaceID','canvas-webgl'),a1(aQ,'surfaceType','canvas'),a1(aQ,'engineCaps',{'supportsCanvas':!0x0,'supportsImages':!0x1,'supportsTextures':!0x0,'supportsCasting':!0x1}),a1(aQ,'engineExtensions',Object['freeze']({'loadShader':{'description':'Loads\x20a\x20shader\x20in\x20ShaderToy-compatible\x20format','level':0x3,'args':{'id':{'type':'string','description':'Identifier\x20for\x20the\x20shader'},'shader':{'type':'string','description':'Shader\x20source\x20code'},'shadertoy':{'type':'boolean','description':'True\x20if\x20the\x20shader\x20is\x20in\x20ShaderToy\x20format'}}},'runShader':{'description':'Executes\x20a\x20shader\x20with\x20ShaderToy-compatible\x20uniforms','level':0x3,'args':{'id':{'type':'string'},'uniformsCustom':{'type':'object','description':'Custom\x20uniforms'},'uniforms':{'type':'object','props':{'iFrameRate':{'type':'float'},'iFrame':{'type':'float'},'iChannelResolution':{'type':'array','elementType':{'type':'object','props':{'x':{'type':'float'},'y':{'type':'float'},'z':{'type':'float'}}}},'iChannel0':{'type':'UFOGraphics'},'iChannel1':{'type':'UFOGraphics'},'iChannel2':{'type':'UFOGraphics'},'iChannel3':{'type':'UFOGraphics'},'iChannelTime':{'type':'array','elementType':{'type':'object','props':{'time':{'type':'float'}}}},'iTime':{'type':'float'},'iTimeDelta':{'type':'float'},'iDate':{'type':'float','props':{'x':{'type':'float'},'y':{'type':'float'},'z':{'type':'float'},'w':{'type':'float'}}},'iMouse':{'type':'object','props':{'x':{'type':'float'},'y':{'type':'float'},'z':{'type':'float'},'w':{'type':'float'}}}}}}}})),a1(aQ,'DEBUG_LOGGING',!0x1),a1(aQ,'DEBUG_LOGGING_FLUSH',!0x1),a1(aQ,'DEBUG_LOGGING_GLERRORS',!0x1),a1(aQ,'DEBUG_LOGGING_GLCALLS',!0x1),a1(aQ,'DEBUG_LOGGING_TEXTURES',!0x1),a1(aQ,'QUEUE_VERTICES_MAX',0x2000),a1(aQ,'QUEUE_FLOATS_PER_VERTEX',0x6);var aR=class extends aL{constructor(bI,bJ,bK,bL){var bM,bN;super(),this['_UFOTexturesWebGPU']=!0x0,this['device']=bI,this['supportsFloat16Filtering']=(null==bI||null===(bM=bI['features'])||void 0x0===bM||null===(bN=bM['has'])||void 0x0===bN?void 0x0:bN['call'](bM,'float16-filterable'))||!0x1,this['_usageTexture']=bJ,this['_bindGroupLayout']=bK,this['_uniformBuffer']=bL,this['_smoothing']=!0x0,this['_samplerLinear']=bI['createSampler']({'magFilter':'linear','minFilter':'linear'}),this['_samplerNearest']=bI['createSampler']({'magFilter':'nearest','minFilter':'nearest'}),this['_bindGroups']=new Map(),this['_bindGroupsByEngine']=new Map(),this['_pendingTextureDisposal']=[],this['__createPlaceholder'](),a2['logOnce']();}get['smoothing'](){return this['_smoothing'];}set['smoothing'](bI){this['_smoothing']!==bI&&this['__clearBindGroupCache'](),this['_smoothing']=bI;}['__setUniformBuffer'](bI){this['_uniformBuffer']!==bI&&(this['_uniformBuffer']=bI,this['__clearBindGroupCache']());}['__createPlaceholder'](){const bI=this['device'],bJ=bI['createTexture']({'size':[0x1,0x1],'format':'rgba8unorm','usage':this['_usageTexture']}),bK=bJ['createView']();try{bI['queue']['writeTexture']({'texture':bJ},new Uint8Array([0x0,0x0,0x0,0x0]),{'bytesPerRow':0x4},{'width':0x1,'height':0x1});}catch(bL){}try{this['setPlaceholder']({'device':bI,'texture':bJ,'view':bK,'width':0x1,'height':0x1,'colorSpace':'srgb'});}catch(bM){}}
1['clear'](){try{this['disposeOldTextures']();}catch(bI){}this['__clearBindGroupCache'](),super['clear']();}['getTextureForSource'](bI,bJ){const bK=this['device'],bL=this;if(!bL||!bK||!bI)return null;let bM=bI['id']??bI['src']??bI;const bN=bI['stale']??!0x1,bO=aI['getImageFromSource'](bI);if(!aV['isReady'](bO))return bL['get'](bM,!0x0);const [bP,bQ]=aV['getSize'](bO),bR=bI['colorSpace']??bO['colorSpace']??bJ??'srgb',bS=bI['staleCount']??0x0,bT=(null==bO?void 0x0:bO['renderCount'])??0x0;if(!bN){const c1=bL['validate'](bM,{'device':bK,'width':bP,'height':bQ,'colorSpace':bR,'staleCount':bS,'renderCount':bT});if(c1)return c1;}let bU,bV='rgba8unorm';if('srgb'!==bR){var bW;const c2=a9['getColorSpaceProps'](bR)??(null===(bW=a9['COLORSPACE'])||void 0x0===bW?void 0x0:bW['srgb'])??{'format':'rgba8unorm'};bV=(null==c2?void 0x0:c2['format'])??'rgba8unorm';}try{try{bU=bK['createTexture']({'size':[bP,bQ],'format':bV,'usage':this['_usageTexture']});}catch(c3){bU=bK['createTexture']({'size':[bP,bQ],'format':'rgba8unorm','usage':this['_usageTexture']});}}catch(c4){return a2['error'](),bL['get'](bM,!0x0);}try{try{bK['queue']['copyExternalImageToTexture']({'source':bO},{'texture':bU,'premultipliedAlpha':!0x0,'colorSpace':bR},{'width':bP,'height':bQ});}catch(c5){bK['queue']['copyExternalImageToTexture']({'source':bO},{'texture':bU,'premultipliedAlpha':!0x0},{'width':bP,'height':bQ});}}catch(c6){a2['error']();try{var bX,bY;null===(bX=bU)||void 0x0===bX||null===(bY=bX['destroy'])||void 0x0===bY||bY['call'](bX);}catch(c7){}return bL['get'](bM,!0x0);}const bZ=bU['createView'](),c0={'device':bK,'texture':bU,'view':bZ,'width':bP,'height':bQ,'colorSpace':bR,'staleCount':bS,'renderCount':bT,'onDelete':c8=>{null!=c8&&c8['persistent']||(null!=c8&&c8['view']&&this['__deleteBindGroupForView'](c8['view']),this['_pendingTextureDisposal']['push'](c8));}};return bL['set'](bM,c0),null!=bO&&bO['imageBitmap']&&delete bO['imageBitmap'],c0;}['disposeOldTextures'](){var bI;if(null!==(bI=this['_pendingTextureDisposal'])&&void 0x0!==bI&&bI['length']){for(const bL of this['_pendingTextureDisposal'])if(null==bL||!bL['persistent'])try{var bJ,bK;null==bL||null===(bJ=bL['texture'])||void 0x0===bJ||null===(bK=bJ['destroy'])||void 0x0===bK||bK['call'](bJ);}catch(bM){a2['error']();}this['_pendingTextureDisposal']['length']=0x0;}}['getBindGroupForTextureView'](bI){var bJ;let bK=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0;const bL=this['device'];if(!bL||!this['_bindGroupLayout']||!this['_uniformBuffer'])return null;bI||(bI=null===(bJ=this['getPlaceholder']())||void 0x0===bJ?void 0x0:bJ['view']);const bM=bI,bN=this['__getBindGroupMap'](bK);if(bN['has'](bM))return bN['get'](bM);const bO=this['_smoothing']?this['_samplerLinear']:this['_samplerNearest'],bP=bL['createBindGroup']({'layout':this['_bindGroupLayout'],'entries':[{'binding':0x0,'resource':{'buffer':this['_uniformBuffer']}},{'binding':0x1,'resource':bO},{'binding':0x2,'resource':bI}]});return bN['set'](bM,bP),bP;}['__getBindGroupMap'](bI){return void 0x0===bI?this['_bindGroups']:(this['_bindGroupsByEngine']['has'](bI)||this['_bindGroupsByEngine']['set'](bI,new Map()),this['_bindGroupsByEngine']['get'](bI));}['__clearBindGroupCache'](){var bI;if(null===(bI=this['_bindGroups'])||void 0x0===bI||bI['clear'](),this['_bindGroupsByEngine']){for(const bJ of this['_bindGroupsByEngine']['values']())bJ['clear']();}}['__deleteBindGroupForView'](bI){var bJ;if(null===(bJ=this['_bindGroups'])||void 0x0===bJ||bJ['delete'](bI),this['_bindGroupsByEngine']){for(const bK of this['_bindGroupsByEngine']['values']())bK['delete'](bI);}}},aS=class extends aD{constructor(){super(),this['_UFOEngineWebGPU']=!0x0,window['UFOProps']['debug']||(this['self']['DEBUG_LOGGING']=!0x1),this['initialize']();}get['ready'](){return!!this['_context'];}get['width'](){var bI;return(null===(bI=this['_canvas'])||void 0x0===bI?void 0x0:bI['width'])??0x0;}get['height'](){var bI;return(null===(bI=this['_canvas'])||void 0x0===bI?void 0x0:bI['height'])??0x0;}get['device'](){var bI,bJ;return(null===(bI=this['_canvas'])||void 0x0===bI?void 0x0:bI['webgpuDevice'])??(null===(bJ=this['_context'])||void 0x0===bJ?void 0x0:bJ['webgpuDevice'])??this['_webgpuDevice']??null;}get['adapter'](){var bI,bJ;return(null===(bI=this['_canvas'])||void 0x0===bI?void 0x0:bI['webgpuAdapter'])??(null===(bJ=this['_context'])||void 0x0===bJ?void 0x0:bJ['webgpuAdapter'])??this['_webgpuAdapter']??null;}get['format'](){var bI,bJ;return(null===(bI=this['_canvas'])||void 0x0===bI?void 0x0:bI['webgpuFormat'])??(null===(bJ=this['_context'])||void 0x0===bJ?void 0x0:bJ['webgpuFormat'])??this['_webgpuFormat']??'';}['initialize'](){if(this['_initialized'])return a2['error']();this['_readonly']=!0x1,this['_globalAlpha']=0x1,this['_smoothing']=!0x0,this['_antialias']=!0x0,this['_clipRect']=null,this['_frameArgs']=null,this['_frameStarted']=!0x1,this['_renderable']=!0x1,this['_zeroColor']=new Float32Array(0x4),this['_zeroColor'][0x0]=0x0,this['_zeroColor'][0x1]=0x0,this['_zeroColor'][0x2]=0x0,this['_zeroColor'][0x3]=0x0,this['_currentColor']=new Float32Array(0x4),this['_colorRGBA']=new Float32Array(0x4),this['_queueVertices']=new Float32Array(this['self']['QUEUE_VERTICES_MAX']*this['self']['QUEUE_FLOATS_PER_VERTEX']),this['_queueVertexCount']=0x0,this['_queueVertexBase']=0x0,this['_queueRenderMode']=this['self']['RENDER_MODE_VERTEX_COLOR'],this['_queueTextureView']=null,this['_lazyInits']=!0x1,this['_lazyInitializing']=!0x1,this['_pi
1pelines']=new Map(),this['_textures']=null,this['_uniformBuffer']=null,this['_uniformData']=new ArrayBuffer(0x40),this['_uniformF32']=new Float32Array(this['_uniformData']),this['_uniformU32']=new Uint32Array(this['_uniformData']),this['_vertexBuffer']=null,this['_vertexBufferByteLength']=0x0,this['_shaderModule']=null,this['_bindGroupLayout']=null,this['_pipelineLayout']=null,this['_msaa']={'texture':null,'view':null,'width':0x0,'height':0x0,'format':'','sampleCount':0x1},this['_msaaNeedsClear']=!0x1,this['_msaaRequestedSampleCount']=0x0,this['_msaaEffectiveSampleCount']=0x0,this['_msaaValidateInFlight']=!0x1,this['_initialized']=!0x0;}['dispose'](){var bI;try{var bJ,bK;null===(bJ=this['_textures'])||void 0x0===bJ||null===(bK=bJ['clear'])||void 0x0===bK||bK['call'](bJ);}catch(bN){}try{var bL,bM;null===(bL=this['_msaa'])||void 0x0===bL||null===(bL=bL['texture'])||void 0x0===bL||null===(bM=bL['destroy'])||void 0x0===bM||bM['call'](bL);}catch(bO){}null===(bI=this['_pipelines'])||void 0x0===bI||bI['clear'](),this['_textures']=null,this['_uniformBuffer']=null,this['_vertexBuffer']=null,this['_shaderModule']=null,this['_bindGroupLayout']=null,this['_pipelineLayout']=null,this['_msaa']=null,this['_lazyInits']=!0x1,this['_initialized']=!0x1,super['dispose']();}['__lazyInitialize'](){if(this['_lazyInits'])return;if(this['_lazyInitializing'])return;const bI=this['device'],bJ=this['format'];if(bI&&bJ){this['_lazyInitializing']=!0x0;try{var bK;this['self']['DEBUG_WEBGPU_ERRORS']&&!bI['onuncapturederror']&&(bI['onuncapturederror']=bN=>a2['error'](),null===(bK=bI['lost'])||void 0x0===bK||bK['then'](bN=>{a2['error']();})),this['self']['BLEND_SRC_OVER']&&this['self']['BLEND_MODES']||(this['self']['BLEND_SRC_OVER']=Object['freeze']({'color':{'operation':'add','srcFactor':'one','dstFactor':'one-minus-src-alpha'},'alpha':{'operation':'add','srcFactor':'one','dstFactor':'one-minus-src-alpha'}}),this['self']['BLEND_MODES']=Object['freeze']({'source-over':this['self']['BLEND_SRC_OVER'],'lighter':{'color':{'operation':'add','srcFactor':'src-alpha','dstFactor':'one'},'alpha':{'operation':'add','srcFactor':'one','dstFactor':'one'}},'copy':{'color':{'operation':'add','srcFactor':'one','dstFactor':'zero'},'alpha':{'operation':'add','srcFactor':'one','dstFactor':'zero'}},'source-in':{'color':{'operation':'add','srcFactor':'dst-alpha','dstFactor':'zero'},'alpha':{'operation':'add','srcFactor':'dst-alpha','dstFactor':'zero'}},'source-out':{'color':{'operation':'add','srcFactor':'one-minus-dst-alpha','dstFactor':'zero'},'alpha':{'operation':'add','srcFactor':'one-minus-dst-alpha','dstFactor':'zero'}},'source-atop':{'color':{'operation':'add','srcFactor':'dst-alpha','dstFactor':'one-minus-src-alpha'},'alpha':{'operation':'add','srcFactor':'dst-alpha','dstFactor':'one-minus-src-alpha'}},'destination-over':{'color':{'operation':'add','srcFactor':'one-minus-dst-alpha','dstFactor':'one'},'alpha':{'operation':'add','srcFactor':'one-minus-dst-alpha','dstFactor':'one'}},'destination-in':{'color':{'operation':'add','srcFactor':'zero','dstFactor':'src-alpha'},'alpha':{'operation':'add','srcFactor':'zero','dstFactor':'src-alpha'}},'destination-out':{'color':{'operation':'add','srcFactor':'zero','dstFactor':'one-minus-src-alpha'},'alpha':{'operation':'add','srcFactor':'zero','dstFactor':'one-minus-src-alpha'}},'destination-atop':{'color':{'operation':'add','srcFactor':'one-minus-dst-alpha','dstFactor':'src-alpha'},'alpha':{'operation':'add','srcFactor':'one-minus-dst-alpha','dstFactor':'src-alpha'}},'xor':{'color':{'operation':'add','srcFactor':'one-minus-dst-alpha','dstFactor':'one-minus-src-alpha'},'alpha':{'operation':'add','srcFactor':'one-minus-dst-alpha','dstFactor':'one-minus-src-alpha'}},'darken':{'color':{'operation':'min','srcFactor':'one','dstFactor':'one'},'alpha':this['self']['BLEND_SRC_OVER']['alpha']},'lighten':{'color':{'operation':'max','srcFactor':'one','dstFactor':'one'},'alpha':this['self']['BLEND_SRC_OVER']['alpha']},'multiply':{'color':{'operation':'add','srcFactor':'dst','dstFactor':'zero'},'alpha':this['self']['BLEND_SRC_OVER']['alpha']},'screen':{'color':{'operation':'add','srcFactor':'one','dstFactor':'one-minus-src'},'alpha':this['self']['BLEND_SRC_OVER']['alpha']}}));const bL='\x0astruct\x20Uniforms\x20{\x0a\x20\x20resolution:\x20vec2<f32>,\x0a\x20\x20globalAlpha:\x20f32,\x0a\x20\x20renderMode:\x20u32,\x0a\x20\x20snapToPixelGrid:\x20u32,\x0a\x20\x20debugFlags:\x20u32,\x0a\x20\x20_pad1:\x20u32,\x0a\x20\x20currentColor:\x20vec4<f32>,\x0a\x20\x20debugColor:\x20vec4<f32>,\x0a};\x0a\x0a@group(0)\x20@binding(0)\x20var<uniform>\x20u:\x20Uniforms;\x0a@group(0)\x20@binding(1)\x20var\x20texSampler:\x20sampler;\x0a@group(0)\x20@binding(2)\x20var\x20tex:\x20texture_2d<f32>;\x0a\x0astruct\x20VSIn\x20{\x0a\x20\x20@location(0)\x20pos:\x20vec2<f32>,\x0a\x20\x20@location(1)\x20uv:\x20vec2<f32>,\x0a\x20\x20@location(2)\x20color:\x20vec4<f32>,\x0a};\x0a\x0astruct\x20VSOut\x20{\x0a\x20\x20@builtin(position)\x20position:\x20vec4<f32>,\x0a\x20\x20@location(0)\x20uv:\x20vec2<f32>,\x0a\x20\x20@location(1)\x20color:\x20vec4<f32>,\x0a};\x0a\x0a@vertex\x0afn\x20vs_main(input:\x20VSIn)\x20->\x20VSOut\x20{\x0a\x20\x20var\x20p\x20=\x20input.pos;\x0a\x20\x20if\x20(u.snapToPixelGrid\x20!=\x200u)\x20{\x0a\x20\x20\x20\x20p\x20=\x20floor(p)\x20+\x20vec2<f32>(0.5,\x200.5);\x0a\x20\x20}\x0a\x20\x20let\x20zeroToOne\x20=\x20p\x20/\x20u.resolution;\x0a\x20\x20let\x20zeroToTwo\x20=\x20zeroToOne\x20*\x202.0;\x0a\x20\x20let\x20clip\x20=\x20zeroToTwo\x20-\x20vec2<f32>
1(1.0,\x201.0);\x0a\x20\x20var\x20out:\x20VSOut;\x0a\x20\x20out.position\x20=\x20vec4<f32>(clip.x,\x20-clip.y,\x200.0,\x201.0);\x0a\x20\x20out.uv\x20=\x20input.uv;\x0a\x20\x20out.color\x20=\x20input.color;\x0a\x20\x20return\x20out;\x0a}\x0a\x0a@fragment\x0afn\x20fs_main(input:\x20VSOut)\x20->\x20@location(0)\x20vec4<f32>\x20{\x0a\x20\x20if\x20(u.renderMode\x20==\x201u)\x20{\x0a\x20\x20\x20\x20var\x20c\x20=\x20textureSample(tex,\x20texSampler,\x20input.uv);\x0a\x20\x20\x20\x20c\x20=\x20vec4<f32>(c.rgb\x20*\x20u.globalAlpha,\x20c.a\x20*\x20u.globalAlpha);\x0a\x20\x20\x20\x20if\x20((u.debugFlags\x20&\x201u)\x20!=\x200u)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Premultiplied-alpha\x20source-over\x20debug\x20overlay:\x0a\x20\x20\x20\x20\x20\x20//\x20out\x20=\x20src\x20+\x20dst\x20*\x20(1\x20-\x20src.a)\x0a\x20\x20\x20\x20\x20\x20let\x20hc\x20=\x20vec4<f32>(u.debugColor.rgb\x20*\x20u.globalAlpha,\x20u.debugColor.a\x20*\x20u.globalAlpha);\x0a\x20\x20\x20\x20\x20\x20return\x20hc\x20+\x20c\x20*\x20(1.0\x20-\x20hc.a);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20c;\x0a\x20\x20}\x0a\x20\x20if\x20(u.renderMode\x20==\x202u)\x20{\x0a\x20\x20\x20\x20return\x20input.color;\x0a\x20\x20}\x0a\x20\x20return\x20u.currentColor;\x0a}\x0a';this['_usageTexture']=GPUTextureUsage['TEXTURE_BINDING']|GPUTextureUsage['COPY_DST']|GPUTextureUsage['RENDER_ATTACHMENT'],this['_usageUniforms']=GPUBufferUsage['UNIFORM']|GPUBufferUsage['COPY_DST'],this['_usageVertices']=GPUBufferUsage['VERTEX']|GPUBufferUsage['COPY_DST'],this['_shaderModule']=bI['createShaderModule']({'code':bL}),this['_bindGroupLayout']=bI['createBindGroupLayout']({'entries':[{'binding':0x0,'visibility':GPUShaderStage['VERTEX']|GPUShaderStage['FRAGMENT'],'buffer':{'type':'uniform'}},{'binding':0x1,'visibility':GPUShaderStage['FRAGMENT'],'sampler':{'type':'filtering'}},{'binding':0x2,'visibility':GPUShaderStage['FRAGMENT'],'texture':{'sampleType':'float'}}]}),this['_pipelineLayout']=bI['createPipelineLayout']({'bindGroupLayouts':[this['_bindGroupLayout']]}),this['_uniformBuffer']=bI['createBuffer']({'size':this['_uniformData']['byteLength'],'usage':this['_usageUniforms']});const bM=this['_queueVertices']['byteLength'];this['_vertexBuffer']=bI['createBuffer']({'size':bM,'usage':this['_usageVertices']}),this['_vertexBufferByteLength']=bM,this['_textures']=new aR(bI,this['_usageTexture'],this['_bindGroupLayout'],this['_uniformBuffer']),this['__getPipeline']('source-over'),this['_lazyInits']=!0x0;try{const bN=this['_context'];if(null!=bN&&bN['getCurrentTexture']){const bO=bI['createCommandEncoder'](),bP=bN['getCurrentTexture']()['createView']();bO['beginRenderPass']({'colorAttachments':[{'view':bP,'clearValue':{'r':0x0,'g':0x0,'b':0x0,'a':0x0},'loadOp':'clear','storeOp':'store'}]})['end'](),bI['queue']['submit']([bO['finish']()]);}}catch(bQ){a2['error']();}}catch(bR){a2['error'](),this['_lazyInits']=!0x1;}this['_lazyInitializing']=!0x1;}}['__getPipeline'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:'source-over';const bJ=this['device'],bK=this['format'];if(!(bJ&&bK&&this['_shaderModule']&&this['_pipelineLayout']))return null;const bL=this['__msaaGetSampleCount'](),bM=(bI||'source-over')+'|'+bL;if(this['_pipelines']['has'](bM))return this['_pipelines']['get'](bM);const bN=bI||'source-over',bO=this['self']['BLEND_MODES'][bN]??this['self']['BLEND_SRC_OVER'];let bP=null;try{bP=bJ['createRenderPipeline']({'layout':this['_pipelineLayout'],'vertex':{'module':this['_shaderModule'],'entryPoint':'vs_main','buffers':[{'arrayStride':0x4*this['self']['QUEUE_FLOATS_PER_VERTEX'],'attributes':[{'shaderLocation':0x0,'offset':0x0,'format':'float32x2'},{'shaderLocation':0x1,'offset':0x8,'format':'float32x2'},{'shaderLocation':0x2,'offset':0x10,'format':'float32x4'}]}]},'fragment':{'module':this['_shaderModule'],'entryPoint':'fs_main','targets':[{'format':bK,'blend':bO}]},'primitive':{'topology':'triangle-list','cullMode':'none'},'multisample':{'count':bL}});}catch(bQ){return a2['error'](),null;}return this['_pipelines']['set'](bM,bP),bP;}['__setAntialiasing'](){const bI=!(arguments['length']>0x0&&void 0x0!==arguments[0x0]&&!arguments[0x0]);bI!==!!this['_antialias']&&(this['_queueVertexCount']>0x0&&this['__flushDrawQueue'](),this['_antialias']=bI,this['_msaaRequestedSampleCount']=0x0,this['_msaaEffectiveSampleCount']=0x0,this['_msaaValidateInFlight']=!0x1,this['__msaaInvalidate']());}['__msaaInvalidate'](){var bI;
1null===(bI=this['_pipelines'])||void 0x0===bI||bI['clear']();try{var bJ,bK;null===(bJ=this['_msaa'])||void 0x0===bJ||null===(bJ=bJ['texture'])||void 0x0===bJ||null===(bK=bJ['destroy'])||void 0x0===bK||bK['call'](bJ);}catch(bL){}this['_msaa']={'texture':null,'view':null,'width':0x0,'height':0x0,'format':'','sampleCount':0x1},this['_msaaNeedsClear']=!0x1;}['__msaaGetSampleCount'](){if(!this['_antialias'])return 0x1;const bI=0x0|(this['self']['AA_SAMPLE_COUNT']??0x4);return bI<=0x1?0x1:(this['_msaaRequestedSampleCount']!==bI&&(this['_msaaRequestedSampleCount']=bI,this['_msaaEffectiveSampleCount']=0x0,this['_msaaValidateInFlight']=!0x1,this['__msaaInvalidate']()),this['_msaaEffectiveSampleCount']>0x0?this['_msaaEffectiveSampleCount']:(this['_msaaValidateInFlight']||this['__msaaValidateSampleCount'](bI),0x1));}['__msaaValidateSampleCount'](bI){const bJ=this['device'],bK=this['format'];if(!(bJ&&bK&&this['_shaderModule']&&this['_pipelineLayout']))return;if(bI<=0x1)return;if(this['_msaaValidateInFlight'])return;if(this['_msaaValidateInFlight']=!0x0,!bJ['pushErrorScope']||!bJ['popErrorScope'])return this['_msaaValidateInFlight']=!0x1,this['_msaaEffectiveSampleCount']=0x1,this['__msaaInvalidate'](),void(this['self']['DEBUG_LOGGING']&&a2['logOnce']());bJ['pushErrorScope']('validation');let bL=null;try{bL=bJ['createTexture']({'size':[0x1,0x1],'sampleCount':bI,'format':bK,'usage':GPUTextureUsage['RENDER_ATTACHMENT']});}catch(bM){}bJ['popErrorScope']()['then'](bN=>{try{var bO,bP;null===(bO=bL)||void 0x0===bO||null===(bP=bO['destroy'])||void 0x0===bP||bP['call'](bO);}catch(bQ){}this['_msaaEffectiveSampleCount']=bN?0x1:bI,this['self']['DEBUG_LOGGING']&&a2['logOnce']();})['catch'](bN=>{try{var bO,bP;null===(bO=bL)||void 0x0===bO||null===(bP=bO['destroy'])||void 0x0===bP||bP['call'](bO);}catch(bQ){}this['_msaaEffectiveSampleCount']=0x1,this['self']['DEBUG_LOGGING']&&a2['logOnce']();})['finally'](()=>{this['_msaaValidateInFlight']=!0x1,this['__msaaInvalidate']();});}['__msaaEnsureTexture'](){var bI,bJ,bK;const bL=this['device'],bM=this['format'],bN=this['width'],bO=this['height'],bP=this['__msaaGetSampleCount']();let bQ=null===(bI=this['_msaa'])||void 0x0===bI?void 0x0:bI['texture'];if(!bL||!bM||!bN||!bO||bP<=0x1)return null;if(null===(bJ=this['_msaa'])||void 0x0===bJ||!bJ['texture']||this['_msaa']['width']!==bN||this['_msaa']['height']!==bO||this['_msaa']['format']!==bM||this['_msaa']['sampleCount']!==bP){try{var bR,bS;null===(bR=bQ)||void 0x0===bR||null===(bS=bR['destroy'])||void 0x0===bS||bS['call'](bR);}catch(bV){}try{this['_msaa']||(this['_msaa']={'texture':null,'view':null,'width':0x0,'height':0x0,'format':'','sampleCount':bP}),bQ=bL['createTexture']({'size':[bN,bO],'sampleCount':bP,'format':bM,'usage':GPUTextureUsage['RENDER_ATTACHMENT']});}catch(bW){var bT;return this['self']['DEBUG_LOGGING']&&a2['logOnce'](),this['_msaaEffectiveSampleCount']=0x1,null===(bT=this['_pipelines'])||void 0x0===bT||bT['clear'](),this['_msaa']={'texture':null,'view':null,'width':0x0,'height':0x0,'format':'','sampleCount':0x1},this['_msaaNeedsClear']=!0x1,null;}const bU=bQ['createView']();this['_msaa']={'texture':bQ,'view':bU,'width':bN,'height':bO,'format':bM,'sampleCount':bP},this['_msaaNeedsClear']=!0x0,a2['logIf']();}return(null===(bK=this['_msaa'])||void 0x0===bK?void 0x0:bK['view'])??null;}['__canRender'](){return!!(this['device']&&this['_context']&&this['_context']['getCurrentTexture']&&this['_lazyInits']);}['frameBegin'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_frameStarted']=!0x0,this['_context']&&(this['_frameArgs']=bI,this['__lazyInitialize'](),this['_renderable']=this['__canRender']());}['frameEnd'](){this['_frameStarted']&&this['_context']&&(this['__flushDrawQueue'](),this['_frameStarted']=!0x1);}['frameForceFlush'](){this['__flushDrawQueue']();}['setSmoothing'](bI){this['_smoothing']=!!bI,this['_textures']&&(this['_textures']['smoothing']=this['_smoothing']);}['setAlpha'](bI){bI=parseFloat(bI),isNaN(bI)?this['_globalAlpha']=0x1:this['_globalAlpha']=bI>=0x1?0x1:bI<=0x0?0x0:bI;}['setBlendingMode'](bI){bI&&bI!==this['_lastBlendingMode']&&(this['_queueVertexCount']>0x0&&this['__flushDrawQueue'](),this['_lastBlendingMode']=bI);}['setColor'](bI){this['_currentColor']['set'](ab['parseColorToUniform'](bI,this['_colorSpace'],this['_colorRGBA']));}['setClipRect'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];this['_queueVertexCount']>0x0&&this['__flushDrawQueue']();const bJ=bI['x']??0x0,bK=bI['y']??0x0,bL=bI['width']??this['width'],bM=bI['height']??this['height'];0x0!==bJ||0x0!==bK||bL!==this['width']||bM!==this['height']?this['_clipRect']={'x':bJ,'y':bK,'width':bL,'height':bM}:this['_clipRect']=null;}['clearRect'](){var bI,bJ;let bK=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_renderable'])return;const bL=bK['x']??0x0,bM=bK['y']??0x0,bN=bK['width']??this['width'],bO=bK['height']??this['height'];if(this['__flushDrawQueue'](),0x0===bL&&0x0===bM&&bN===this['width']&&bO===this['height']&&!this['_clipRect']){const bT=this['device'],bU=this['_context'],bV=bT['createCommandEncoder'](),bW=bU['getCurrentTexture']()['createView'](),bX=this['__msaaGetSampleC
1ount']()>0x1?this['__msaaEnsureTexture']():null;if(bV['beginRenderPass']({'colorAttachments':[{'view':bX??bW,'resolveTarget':bX?bW:void 0x0,'clearValue':{'r':0x0,'g':0x0,'b':0x0,'a':0x0},'loadOp':'clear','storeOp':'store'}]})['end'](),this['self']['DEBUG_WEBGPU_ERRORS'])try{bT['queue']['submit']([bV['finish']()]);}catch(bY){a2['error']();}else bT['queue']['submit']([bV['finish']()]);return void(bX&&(this['_msaaNeedsClear']=!0x1));}const bP=this['_lastBlendingMode'],bQ=this['_currentColor'];if(this['_lastBlendingMode']='copy',this['_currentColor']=this['_zeroColor'],!this['__ensureQueueCapacity'](0x6))return;let bR=this['_queueVertexBase'];const bS=this['_queueVertices'];bS[bR]=bL,bS[bR+0x1]=bM,bS[bR+0x2]=0x0,bS[bR+0x3]=0x0,bS[bR+0x4]=0x0,bS[bR+0x5]=0x0,bS[bR+0x6]=0x0,bS[bR+0x7]=0x0,bR+=0x8,bS[bR]=bL+bN,bS[bR+0x1]=bM,bS[bR+0x2]=0x0,bS[bR+0x3]=0x0,bS[bR+0x4]=0x0,bS[bR+0x5]=0x0,bS[bR+0x6]=0x0,bS[bR+0x7]=0x0,bR+=0x8,bS[bR]=bL,bS[bR+0x1]=bM+bO,bS[bR+0x2]=0x0,bS[bR+0x3]=0x0,bS[bR+0x4]=0x0,bS[bR+0x5]=0x0,bS[bR+0x6]=0x0,bS[bR+0x7]=0x0,bR+=0x8,bS[bR]=bL,bS[bR+0x1]=bM+bO,bS[bR+0x2]=0x0,bS[bR+0x3]=0x0,bS[bR+0x4]=0x0,bS[bR+0x5]=0x0,bS[bR+0x6]=0x0,bS[bR+0x7]=0x0,bR+=0x8,bS[bR]=bL+bN,bS[bR+0x1]=bM,bS[bR+0x2]=0x0,bS[bR+0x3]=0x0,bS[bR+0x4]=0x0,bS[bR+0x5]=0x0,bS[bR+0x6]=0x0,bS[bR+0x7]=0x0,bR+=0x8,bS[bR]=bL+bN,bS[bR+0x1]=bM+bO,bS[bR+0x2]=0x0,bS[bR+0x3]=0x0,bS[bR+0x4]=0x0,bS[bR+0x5]=0x0,bS[bR+0x6]=0x0,bS[bR+0x7]=0x0,bR+=0x8,this['_queueVertexBase']=bR,this['_queueVertexCount']+=0x6,this['__flushDrawQueue'](this['self']['RENDER_MODE_UNIFORM_COLOR'],null===(bI=this['_textures'])||void 0x0===bI||null===(bJ=bI['getPlaceholder'])||void 0x0===bJ?void 0x0:bJ['call'](bI)['view']),this['_currentColor']=bQ,this['_lastBlendingMode']=bP;}['drawRect'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_renderable'])return;this['__queueUseVertexColorMode']();const bJ=bI['x']??0x0,bK=bI['y']??0x0,bL=bI['width']??this['width'],bM=bI['height']??this['height'],bN=bI['thickness']??0x1;if(bN<=0x0)return;bI['color']&&this['setColor'](bI['color']);const bO=this['_currentColor'],bP=bO[0x3]*this['_globalAlpha'];if(bP<=0x0)return;const bQ=bO[0x0]*bP,bR=bO[0x1]*bP,bS=bO[0x2]*bP;if(!this['__ensureQueueCapacity'](0x18))return;const bT=bJ-bN/0x2,bU=bK-bN/0x2,bV=bJ+bL+bN/0x2,bW=bK+bM+bN/0x2,bX=this['_queueVertices'];let bY=this['_queueVertexBase'];const bZ=(c0,c1)=>{bX[bY]=c0,bX[bY+0x1]=c1,bX[bY+0x2]=0x0,bX[bY+0x3]=0x0,bX[bY+0x4]=bQ,bX[bY+0x5]=bR,bX[bY+0x6]=bS,bX[bY+0x7]=bP,bY+=0x8;};bZ(bT,bU),bZ(bV,bU),bZ(bT,bU+bN),bZ(bT,bU+bN),bZ(bV,bU),bZ(bV,bU+bN),bZ(bT,bW-bN),bZ(bT,bW),bZ(bV,bW-bN),bZ(bV,bW-bN),bZ(bT,bW),bZ(bV,bW),bZ(bT,bU+bN),bZ(bT+bN,bU+bN),bZ(bT,bW-bN),bZ(bT,bW-bN),bZ(bT+bN,bU+bN),bZ(bT+bN,bW-bN),bZ(bV-bN,bU+bN),bZ(bV,bU+bN),bZ(bV-bN,bW-bN),bZ(bV,bU+bN),bZ(bV,bW-bN),bZ(bV-bN,bW-bN),this['_queueVertexCount']+=0x18,this['_queueVertexBase']=bY;}['fillRect'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_renderable'])return;this['__queueUseVertexColorMode']();const bJ=bI['x']??0x0,bK=bI['y']??0x0,bL=bI['width']??this['width'],bM=bI['height']??this['height'];if(bL<=0x0)return;if(bM<=0x0)return;bI['color']&&this['setColor'](bI['color']);const bN=this['_currentColor'],bO=bN[0x3]*this['_globalAlpha'];if(bO<=0x0)return;const bP=bN[0x0]*bO,bQ=bN[0x1]*bO,bR=bN[0x2]*bO;if(!this['__ensureQueueCapacity'](0x6))return;const bS=bJ,bT=bK,bU=bJ+bL,bV=bK+bM;let bW=this['_queueVertexBase'];const bX=this['_queueVertices'];bX[bW]=bS,bX[bW+0x1]=bT,bX[bW+0x2]=0x0,bX[bW+0x3]=0x0,bX[bW+0x4]=bP,bX[bW+0x5]=bQ,bX[bW+0x6]=bR,bX[bW+0x7]=bO,bW+=0x8,bX[bW]=bU,bX[bW+0x1]=bT,bX[bW+0x2]=0x0,bX[bW+0x3]=0x0,bX[bW+0x4]=bP,bX[bW+0x5]=bQ,bX[bW+0x6]=bR,bX[bW+0x7]=bO,bW+=0x8,bX[bW]=bS,bX[bW+0x1]=bV,bX[bW+0x2]=0x0,bX[bW+0x3]=0x0,bX[bW+0x4]=bP,bX[bW+0x5]=bQ,bX[bW+0x6]=bR,bX[bW+0x7]=bO,bW+=0x8,bX[bW]=bS,bX[bW+0x1]=bV,bX[bW+0x2]=0x0,bX[bW+0x3]=0x0,bX[bW+0x4]=bP,bX[bW+0x5]=bQ,bX[bW+0x6]=bR,bX[bW+0x7]=bO,bW+=0x8,bX[bW]=bU,bX[bW+0x1]=bT,bX[bW+0x2]=0x0,bX[bW+0x3]=0x0,bX[bW+0x4]=bP,bX[bW+0x5]=bQ,bX[bW+0x6]=bR,bX[bW+0x7]=bO,bW+=0x8,bX[bW]=bU,bX[bW+0x1]=bV,bX[bW+0x2]=0x0,bX[bW+0x3]=0x0,bX[bW+0x4]=bP,bX[bW+0x5]=bQ,bX[bW+0x6]=bR,bX[bW+0x7]=bO,bW+=0x8,this['_queueVertexCount']+=0x6,this['_queueVertexBase']=bW;}['drawLine'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_renderable'])return;this['__queueUseVertexColorMode']();const bJ=bI['thickness']??0x1;bI['color']&&this['setColor'](bI['color']);const bK=this['_currentColor'],bL=bK[0x3]*this['_globalAlpha'],bM=bK[0x0]*bL,bN=bK[0x1]*bL,bO=bK[0x2]*bL;if(!bI['coords'])return void this['__queueLineSegment'](bI['x1']??0x0,bI['y1']??0x0,bI['x2']??0x0,bI['y2']??0x0,bJ,bM,bN,bO,bL);const bP=bI['coords'],bQ=bP['length'];if(!(bQ<0x2)){for(let bR=0x1;bR<bQ;bR++)this['__queueLineSegment'](bP['x'][bR-0x1],bP['y'][bR-0x1],bP['x'][bR],bP['y'][bR],bJ,bM,bN,bO,bL);}}['drawPolygon'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_renderable'])return;this['__queueUseVertexColorMode'](),bI['color']&&this['setColor'](bI['color']);const bJ=bI['coords'];if(!bJ||bJ['length']<0x3)return;const bK=this['_currentColor'],bL=bK[0x3]*this['_globalAlpha'],bM=bK[0x0]*bL,bN=bK[0x1]*bL,bO=bK[0x2]*bL,bP=bJ['length'],bQ=bJ['x'][0x0],bR=bJ['y'][0x0],bS=0x3*(bP-0x2);if(!this['__ensureQueueCapacity'](bS))return;let bT=this['_queueVertexBase'];const bU=this['_queueVertices'];for(let bV=0x1;bV<bP-0x1;
1bV++)bU[bT]=bQ,bU[bT+0x1]=bR,bU[bT+0x2]=0x0,bU[bT+0x3]=0x0,bU[bT+0x4]=bM,bU[bT+0x5]=bN,bU[bT+0x6]=bO,bU[bT+0x7]=bL,bT+=0x8,bU[bT]=bJ['x'][bV],bU[bT+0x1]=bJ['y'][bV],bU[bT+0x2]=0x0,bU[bT+0x3]=0x0,bU[bT+0x4]=bM,bU[bT+0x5]=bN,bU[bT+0x6]=bO,bU[bT+0x7]=bL,bT+=0x8,bU[bT]=bJ['x'][bV+0x1],bU[bT+0x1]=bJ['y'][bV+0x1],bU[bT+0x2]=0x0,bU[bT+0x3]=0x0,bU[bT+0x4]=bM,bU[bT+0x5]=bN,bU[bT+0x6]=bO,bU[bT+0x7]=bL,bT+=0x8;this['_queueVertexCount']+=bS,this['_queueVertexBase']=bT;}['drawImage'](){var bI,bJ;let bK=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_renderable'])return;const bL=bK['source'];if(!bL)return;if(bL['isReady']&&!bL['isReady']())return;const bM=null===(bI=this['_textures'])||void 0x0===bI?void 0x0:bI['getTextureForSource'](bL,null===(bJ=this['_canvas'])||void 0x0===bJ?void 0x0:bJ['pendingColorSpace']);if(!bM)return;if(!this['__queueUseTexturedMode'](bM['view'],0x6))return a2['logOnce']();const bN=bK['x']??0x0,bO=bK['y']??0x0,bP=bK['width']??(bM['width']||bL['width']||0x0),bQ=bK['height']??(bM['height']||bL['height']||0x0),bR=bK['sx']??0x0,bS=bK['sy']??0x0,bT=bK['sWidth']??(bM['width']||bL['width']||bP),bU=bK['sHeight']??(bM['height']||bL['height']||bQ);if(!(bP&&bQ&&bT&&bU))return;const bV=bR/bM['width'],bW=bS/bM['height'],bX=(bR+bT)/bM['width'],bY=(bS+bU)/bM['height'],bZ=bN,c0=bO,c1=bN+bP,c2=bO+bQ;let c3=this['_queueVertexBase'];const c4=this['_queueVertices'];c4[c3]=bZ,c4[c3+0x1]=c0,c4[c3+0x2]=bV,c4[c3+0x3]=bW,c4[c3+0x4]=0x1,c4[c3+0x5]=0x1,c4[c3+0x6]=0x1,c4[c3+0x7]=0x1,c3+=0x8,c4[c3]=c1,c4[c3+0x1]=c0,c4[c3+0x2]=bX,c4[c3+0x3]=bW,c4[c3+0x4]=0x1,c4[c3+0x5]=0x1,c4[c3+0x6]=0x1,c4[c3+0x7]=0x1,c3+=0x8,c4[c3]=bZ,c4[c3+0x1]=c2,c4[c3+0x2]=bV,c4[c3+0x3]=bY,c4[c3+0x4]=0x1,c4[c3+0x5]=0x1,c4[c3+0x6]=0x1,c4[c3+0x7]=0x1,c3+=0x8,c4[c3]=bZ,c4[c3+0x1]=c2,c4[c3+0x2]=bV,c4[c3+0x3]=bY,c4[c3+0x4]=0x1,c4[c3+0x5]=0x1,c4[c3+0x6]=0x1,c4[c3+0x7]=0x1,c3+=0x8,c4[c3]=c1,c4[c3+0x1]=c0,c4[c3+0x2]=bX,c4[c3+0x3]=bW,c4[c3+0x4]=0x1,c4[c3+0x5]=0x1,c4[c3+0x6]=0x1,c4[c3+0x7]=0x1,c3+=0x8,c4[c3]=c1,c4[c3+0x1]=c2,c4[c3+0x2]=bX,c4[c3+0x3]=bY,c4[c3+0x4]=0x1,c4[c3+0x5]=0x1,c4[c3+0x6]=0x1,c4[c3+0x7]=0x1,c3+=0x8,this['_queueVertexCount']+=0x6,this['_queueVertexBase']=c3;}['drawImageTiled'](){var bI,bJ;let bK=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:aD['ARGS_DEFAULT'];if(!this['_renderable'])return;const bL=bK['source'];if(!bL)return;if(bL['isReady']&&!bL['isReady']())return;const bM=null===(bI=this['_textures'])||void 0x0===bI?void 0x0:bI['getTextureForSource'](bL,null===(bJ=this['_canvas'])||void 0x0===bJ?void 0x0:bJ['pendingColorSpace']);if(!bM)return;const bN=bK['x']??0x0,bO=bK['y']??0x0,bP=bK['width']??this['width'],bQ=bK['height']??this['height'];if(bP<=0x0)return;if(bQ<=0x0)return;const bR=bM['width']||bL['width']||0x0,bS=bM['height']||bL['height']||0x0;if(!bR||!bS)return;const bT=Math['ceil'](bP/bR),bU=Math['ceil'](bQ/bS);if(bT<=0x0||bU<=0x0)return;const bV=bN+bP,bW=bO+bQ;if(!this['__queueUseTexturedMode'](bM['view'],0x6))return;const bX=this['_queueVertices'];for(let bY=0x0;bY<bU;bY++){const bZ=bO+bY*bS,c0=Math['min'](bS,bW-bZ);if(c0<=0x0)continue;const c1=c0/bS;for(let c2=0x0;c2<bT;c2++){const c3=bN+c2*bR,c4=Math['min'](bR,bV-c3);if(c4<=0x0)continue;const c5=c4/bR;if(!this['__ensureQueueCapacity'](0x6))return;const c6=c3,c7=bZ,c8=c3+c4,c9=bZ+c0;let ca=this['_queueVertexBase'];bX[ca]=c6,bX[ca+0x1]=c7,bX[ca+0x2]=0x0,bX[ca+0x3]=0x0,bX[ca+0x4]=0x1,bX[ca+0x5]=0x1,bX[ca+0x6]=0x1,bX[ca+0x7]=0x1,bX[ca+0x8]=c8,bX[ca+0x9]=c7,bX[ca+0xa]=c5,bX[ca+0xb]=0x0,bX[ca+0xc]=0x1,bX[ca+0xd]=0x1,bX[ca+0xe]=0x1,bX[ca+0xf]=0x1,bX[ca+0x10]=c6,bX[ca+0x11]=c9,bX[ca+0x12]=0x0,bX[ca+0x13]=c1,bX[ca+0x14]=0x1,bX[ca+0x15]=0x1,bX[ca+0x16]=0x1,bX[ca+0x17]=0x1,bX[ca+0x18]=c6,bX[ca+0x19]=c9,bX[ca+0x1a]=0x0,bX[ca+0x1b]=c1,bX[ca+0x1c]=0x1,bX[ca+0x1d]=0x1,bX[ca+0x1e]=0x1,bX[ca+0x1f]=0x1,bX[ca+0x20]=c8,bX[ca+0x21]=c7,bX[ca+0x22]=c5,bX[ca+0x23]=0x0,bX[ca+0x24]=0x1,bX[ca+0x25]=0x1,bX[ca+0x26]=0x1,bX[ca+0x27]=0x1,bX[ca+0x28]=c8,bX[ca+0x29]=c9,bX[ca+0x2a]=c5,bX[ca+0x2b]=c1,bX[ca+0x2c]=0x1,bX[ca+0x2d]=0x1,bX[ca+0x2e]=0x1,bX[ca+0x2f]=0x1,this['_queueVertexCount']+=0x6,this['_queueVertexBase']=ca+0x30;}}}['__ensureQueueCapacity'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:0x0;return!!this['_renderable']&&(!bI||this['_queueVertexCount']+bI<=this['self']['QUEUE_VERTICES_MAX']||(this['__flushDrawQueue'](),bI>this['self']['QUEUE_VERTICES_MAX']?(a2['error'](),!0x1):(this['_queueVertexCount']+bI>this['self']['QUEUE_VERTICES_MAX']&&(a2['error'](),this['_queueVertexCount']=0x0,this['_queueVertexBase']=0x0),!0x0))
1);}['__queueUseVertexColorMode'](){this['_queueVertexCount']>0x0&&this['_queueRenderMode']===this['self']['RENDER_MODE_TEXTURED']&&this['__flushDrawQueue'](),this['_queueRenderMode']=this['self']['RENDER_MODE_VERTEX_COLOR'],this['_queueTextureView']=null;}['__queueUseTexturedMode'](bI){let bJ=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:0x0;if(this['_queueVertexCount']>0x0){const bK=this['_queueRenderMode']!==this['self']['RENDER_MODE_TEXTURED'],bL=this['_queueTextureView']!==bI;(bK||bL)&&this['__flushDrawQueue']();}return!(bJ&&!this['__ensureQueueCapacity'](bJ)||(this['_queueRenderMode']=this['self']['RENDER_MODE_TEXTURED'],this['_queueTextureView']=bI,0x0));}['__queueLineSegment'](bI,bJ,bK,bL,bM,bN,bO,bP,bQ){if(!this['__ensureQueueCapacity'](0x6))return;let bR=bI,bS=bJ,bT=bK,bU=bL;this['_smoothing']||(bR=Math['floor'](bR)+0.5,bS=Math['floor'](bS)+0.5,bT=Math['floor'](bT)+0.5,bU=Math['floor'](bU)+0.5);const bV=bT-bR,bW=bU-bS,bX=Math['hypot'](bV,bW)||0x1,bY=-bW/bX,bZ=bV/bX,c0=bM/0x2,c1=bR+bY*c0,c2=bS+bZ*c0,c3=bT+bY*c0,c4=bU+bZ*c0,c5=bR-bY*c0,c6=bS-bZ*c0,c7=bT-bY*c0,c8=bU-bZ*c0;let c9=this['_queueVertexBase'];const ca=this['_queueVertices'];ca[c9]=c1,ca[c9+0x1]=c2,ca[c9+0x2]=0x0,ca[c9+0x3]=0x0,ca[c9+0x4]=bN,ca[c9+0x5]=bO,ca[c9+0x6]=bP,ca[c9+0x7]=bQ,ca[c9+0x8]=c3,ca[c9+0x9]=c4,ca[c9+0xa]=0x0,ca[c9+0xb]=0x0,ca[c9+0xc]=bN,ca[c9+0xd]=bO,ca[c9+0xe]=bP,ca[c9+0xf]=bQ,ca[c9+0x10]=c5,ca[c9+0x11]=c6,ca[c9+0x12]=0x0,ca[c9+0x13]=0x0,ca[c9+0x14]=bN,ca[c9+0x15]=bO,ca[c9+0x16]=bP,ca[c9+0x17]=bQ,ca[c9+0x18]=c5,ca[c9+0x19]=c6,ca[c9+0x1a]=0x0,ca[c9+0x1b]=0x0,ca[c9+0x1c]=bN,ca[c9+0x1d]=bO,ca[c9+0x1e]=bP,ca[c9+0x1f]=bQ,ca[c9+0x20]=c3,ca[c9+0x21]=c4,ca[c9+0x22]=0x0,ca[c9+0x23]=0x0,ca[c9+0x24]=bN,ca[c9+0x25]=bO,ca[c9+0x26]=bP,ca[c9+0x27]=bQ,ca[c9+0x28]=c7,ca[c9+0x29]=c8,ca[c9+0x2a]=0x0,ca[c9+0x2b]=0x0,ca[c9+0x2c]=bN,ca[c9+0x2d]=bO,ca[c9+0x2e]=bP,ca[c9+0x2f]=bQ,this['_queueVertexCount']+=0x6,this['_queueVertexBase']=c9+0x30;}['__flushDrawQueue'](){let bI=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bJ=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0;if(this['_lazyInitializing'])return;if(this['_lazyInits']||this['__lazyInitialize'](),!this['__canRender']())return;if(0x0===this['_queueVertexCount'])return;const bK=this['device'],bL=this['_context'],bM=this['__getPipeline'](this['_lastBlendingMode']??'source-over');if(!bM)return;const bN=bI??this['_queueRenderMode']??this['self']['RENDER_MODE_VERTEX_COLOR'],bO=this['_smoothing']?0x0:0x1,bP=this['self']['DEBUG_TEXTURE_HIGHLIGHT']?0x1:0x0;if(this['_uniformF32'][0x0]=this['width'],this['_uniformF32'][0x1]=this['height'],this['_uniformF32'][0x2]=this['_globalAlpha'],this['_uniformU32'][0x3]=bN,this['_uniformU32'][0x4]=bO,this['_uniformU32'][0x5]=bP,bP){const bX=this['self']['DEBUG_TEXTURE_HIGHLIGHT_COLOR'],bY=(null==bX?void 0x0:bX['a'])??0x0;this['_uniformF32'][0xc]=((null==bX?void 0x0:bX['r'])??0x0)*bY,this['_uniformF32'][0xd]=((null==bX?void 0x0:bX['g'])??0x0)*bY,this['_uniformF32'][0xe]=((null==bX?void 0x0:bX['b'])??0x0)*bY,this['_uniformF32'][0xf]=bY;}else this['_uniformF32'][0xc]=0x0,this['_uniformF32'][0xd]=0x0,this['_uniformF32'][0xe]=0x0,this['_uniformF32'][0xf]=0x0;const bQ=this['_currentColor'][0x3]*this['_globalAlpha'];this['_uniformF32'][0x8]=this['_currentColor'][0x0]*bQ,this['_uniformF32'][0x9]=this['_currentColor'][0x1]*bQ,this['_uniformF32'][0xa]=this['_currentColor'][0x2]*bQ,this['_uniformF32'][0xb]=bQ,bK['queue']['writeBuffer'](this['_uniformBuffer'],0x0,this['_uniformData']);const bR=this['_queueVertexCount']*this['self']['QUEUE_FLOATS_PER_VERTEX'],bS=0x4*bR;if(bS<=0x0||bS>this['_queueVertices']['byteLength']||bS>(this['_vertexBufferByteLength']||0x0))return a2['error'](),this['_queueVertexCount']=0x0,void(this['_queueVertexBase']=0x0);try{var bT,bU,bV,bW;const bZ=this['_queueVertices']['subarray'](0x0,bR);bK['queue']['writeBuffer'](this['_vertexBuffer'],0x0,bZ);const c0=bK['createCommandEncoder'](),c1=bL['getCurrentTexture']()['createView'](),c2=this['__msaaGetSampleCount']()>0x1?this['__msaaEnsureTexture']():null,c3=c0['beginRenderPass']({'colorAttachments':[{'view':c2??c1,'resolveTarget':c2?c1:void 0x0,'loadOp':c2&&this['_msaaNeedsClear']?'clear':'load','clearValue':c2&&this['_msaaNeedsClear']?{'r':0x0,'g':0x0,'b':0x0,'a':0x0}:void 0x0,'storeOp':'store'}]});if(c2&&(this['_msaaNeedsClear']=!0x1),this['_clipRect']){const c6=this['width'],c7=this['height'];let c8=Math['max'](0x0,Math['floor'](this['_clipRect']['x'])),c9=Math['max'](0x0,Math['floor'](this['_clipRect']['y'])),ca=Math['max'](0x0,Math['floor'](this['_clipRect']['width'])),cb=Math['max'](0x0,Math['floor'](this['_clipRect']['height']));c8>c6&&(c8=c6),c9>c7&&(c9=c7),ca>c6-c8&&(ca=Math['max'](0x0,c6-c8)),cb>c7-c9&&(cb=Math['max'](0x0,c7-c9)),ca>0x0&&cb>0x0&&c3['setScissorRect'](c8,c9,ca,cb);}c3['setPipeline'](bM),c3['setVertexBuffer'](0x0,this['_vertexBuffer']);const c4=bN===this['self']['RENDER_MODE_TEXTURED']?bJ??this['_queueTextureView']:bJ??(null===(bT=this['_textures'])||void 0x0===bT||null===(bU=bT['getPlaceholder'])||void 0x0===bU?void 0x0:bU['call'](bT)['view']),c5=null===(bV=this['_textures'])||void 0x0===bV?void 0x0:bV['getBindGroupForTextureView'](c4,this['_objectID']);c5&&c3['setBindGroup'](0x0,c5),c3['draw'](this['_queueVertexCount'],0x1,0x0,0x0),c3['end']();try{bK['queue']['submit']([c0['finish']()]);}catch(cc){a2['error']();}a2['logIf'](),null===(bW=this['_textures'])||void 0x0===bW||bW['disposeOldTextures']();}catch(cd){a2['error']();}this['_queueVertexCount']=0x0,this['_queueVertexBase']=0x0;}};a1(aS,'version',2.5),a1(aS,'engineName','WebGPU'),a1(aS,'engineID','webgpu'),a1(aS,'surfaceID','canvas-webgpu'),a1(aS,'surfaceType','canvas'),a1(aS,'engineCaps',{'supportsCanvas':!0x0,'supportsImages':!0x0,'supportsTextures':!0x0,'supportsCasting':!0x1}),a1(aS,'engineExtensions',Object['freeze']({})),a1(aS,'DEBUG_LOGGING',!0x1),a1(aS,'DEBUG_LOGGING_FLUSH',!0x1),a1(aS,'DEBUG_WEBGPU_ERRORS',!0x1),a1(aS,'DEBUG_TEXTURE_HIGHLIGHT',!0x1),a1(aS,'DEBUG_TEXTURE_HIGHLIGHT_COLOR',new ab('rgba(255\x200\x20255\x200.3)')),a1(aS,'QUEUE_VERTICES_MAX',0
1x10000),a1(aS,'QUEUE_FLOATS_PER_VERTEX',0x8),a1(aS,'RENDER_MODE_UNIFORM_COLOR',0x0),a1(aS,'RENDER_MODE_TEXTURED',0x1),a1(aS,'RENDER_MODE_VERTEX_COLOR',0x2),a1(aS,'AA_SAMPLE_COUNT',0x1);var aT=class{constructor(){this['_UFOSurface']=!0x0,this['_error']=!0x1,this['_errorMessage']=void 0x0,this['_promise']=void 0x0,this['_context']=void 0x0,this['_canvas']=void 0x0,this['_texture']=void 0x0,this['_colorSpace']=void 0x0;}},aU=class bI{constructor(){}static['isOffscreenCanvasSupported'](){return this['_hasOffscreenCanvas'];}static['isWebGLSupported'](){return this['_hasWebGL'];}static['isWebGL2Supported'](){return this['_hasWebGL2'];}static['isWebGPUSupported'](){return this['_hasWebGPU'];}static['__assignCanvasContext'](bJ,bK){var bL;bJ['_UFOSurface']||a2['throw'](),bJ['_canvas']=null==bK?void 0x0:bK['canvas'],bJ['_context']=bK,bJ['_error']=!bK||!bK['canvas'];const bM=null===(bL=bJ['_context'])||void 0x0===bL?void 0x0:bL['drawingBufferColorSpace'];return bM&&(bJ['_colorSpace']=bM),bJ['_error']&&(bJ['_errorMessage']='Invalid\x20canvas\x20context',a2['error']()),!bJ['_error'];}static['__assignTexture'](bJ,bK){return bJ['_UFOSurface']||a2['throw'](),bJ['_category']&&a2['throw'](),bJ['_category']='texture',bJ['_texture']=bK,bJ['_error']=!bK,bJ['_error']&&(bJ['_errorMessage']='Invalid\x20texture',a2['error']()),!bJ['_error'];}static['createNewCanvas'](bJ){let {width:bK=0x0,height:bL=0x0,parentSurface:bM,attach:bN=!0x1}=bJ;if(bN)return bM||a2['throw'](),this['isCanvas'](bM)||a2['throw'](),this['__getCanvas'](bM);if(bK=bK??this['getWidth'](bM),bL=bL??this['getHeight'](bM),this['_hasOffscreenCanvas'])return new OffscreenCanvas(bK,bL);let bO=document['createElement']('canvas');return bO['width']=bK,bO['height']=bL,bO;}static['__getCanvas'](bJ){var bK;return(null==bJ||null===(bK=bJ['engine'])||void 0x0===bK?void 0x0:bK['_canvas'])||(null==bJ?void 0x0:bJ['_canvas'])||bJ;}static['__createNewCanvas2D'](bJ){var bK;let {width:bL=0x0,height:bM=0x0,colorSpace:bN,parentSurface:bO,attach:bP=!0x1}=bJ;bN=null===(bK=a9['getColorSpaceProps'](bN??bO))||void 0x0===bK?void 0x0:bK['buffer'];let bQ,bR=new aT(),bS=this['createNewCanvas']({'width':bL,'height':bM,'parentSurface':bO,'attach':bP});try{if(bN)try{bQ=bS['getContext']('2d',{'colorSpace':bN});}catch(bT){bQ=null,bN=a9['SRGB'];}bQ||(bQ=bS['getContext']('2d')),bQ['drawingBufferColorSpace']=bN??a9['SRGB'],bQ['unpackColorSpace']=bN,this['__assignCanvasContext'](bR,bQ);}catch(bU){a2['error'](),bR['_error']=!0x0,bR['_errorMessage']=bU['message'];}return bR;}static['__createNewCanvasWebGL'](bJ){let bK,bL,{width:bM=0x0,height:bN=0x0,colorSpace:bO='srgb',parentSurface:bP,attach:bQ=!0x1}=bJ,bR=a9['getColorSpaceProps'](bO??bP)??a9['COLORSPACE']['srgb'],bS=this['createNewCanvas']({'width':bM,'height':bN,'parentSurface':bP,'attach':bQ});try{const bU={'antialias':!0x0,'depth':!0x1,'preserveDrawingBuffer':!0x0,'powerPreference':'high-performance'},bV=this['_hasWebGL2']&&this['enableWebGL2'];if(a2['log'](),bK=bS['getContext'](bV?'webgl2':'webgl',bU),bK||(bK=bS['getContext']('webgl',bU)),!bK)throw new Error('WebGL\x20not\x20available');if(bR['extended']){try{bK['getExtension']('EXT_color_buffer_float');}catch(bW){a2['warn']();}try{'configureHighDynamicRange'in bS?bS['configureHighDynamicRange'](bR['mode']):(a2['warn'](),bO=a9['SRGB']);}catch(bX){a2['warn'](),bO=a9['SRGB'];}}try{'drawingBufferColorSpace'in bK&&(bK['drawingBufferColorSpace']=bR['buffer']),'unpackColorSpace'in bK&&(bK['unpackColorSpace']=bR['buffer']);}catch(bY){a2['warn']();}try{bM&&bN&&'drawingBufferStorage'in bK?bK['drawingBufferStorage'](bK[bR['texture']],bM,bN):a2['warn']();}catch(bZ){a2['warn']();}}catch(c0){bL=c0,a2['error'](),bS=null;}bK['getError']()!==bK['NO_ERROR']&&a2['error']();let bT=new aT();return bT['_colorSpace']=bO,bL&&(bT['_error']=bL),this['__assignCanvasContext'](bT,bK),bT;}static['__createNewCanvasWebGPU'](bJ){let {width:bK=0x0,height:bL=0x0,colorSpace:bM='srgb',parentSurface:bN,attach:bO=!0x1}=bJ,bP=a9['getColorSpaceProps'](bM??bN)??a9['COLORSPACE']['srgb'];bM=bP['buffer'];let bQ=new aT();bQ['_canvas']=this['createNewCanvas']({'width':bK,'height':bL,'parentSurface':bN,'attach':bO}),bQ['_colorSpace']=bM,bQ['_pendingColorSpace']=bM,bQ['_actualColorSpace']='';let bR=null;try{var bS,bT;bR=null===(bS=bQ['_canvas'])||void 0x0===bS||null===(bT=bS['getContext'])||void 0x0===bT?void 0x0:bT['call'](bS,'webgpu');}catch(bU){bR=null;}if(!bR)return bQ['_error']=!0x0,bQ['_errorMessage']='WebGPU\x20canvas\x20context\x20not\x20available',bQ;this['__assignCanvasContext'](bQ,bR);try{bR['drawingBufferColorSpace']=bQ['_pendingColorSpace'],bR['unpackColorSpace']=bQ['_pendingColorSpace'];}catch(bV){}try{bQ['_canvas']['pendingColorSpace']=bQ['_pendingColorSpace'],bQ['_canvas']['actualColorSpace']=bQ['_actualColorSpace'],bQ['_canvas']['drawingBufferColorSpace']=bQ['_pendingColorSpace'],bQ['_canvas']['unpackColorSpace']=bQ['_pendingColorSpace'];}catch(bW){}return bQ['_promise']=this['__createNewCanvasWebGPUasync']({'width':bK,'height':bL,'colorSpace':bM,'csProps':bP,'parentSurface':bN,'surface':bQ,'context':bR})['catch'](bX=>{bQ['_pendingErrorMessage']=(null==bX?void 0x0:bX['message'])??bX,a2['warn']();}),bQ;}static async['__createNewCanvasWebGPUasync'](bJ){var bK,bL,bM;let {width:bN=0x0,height:bO=0x0,colorSpace:bP='srgb',csProps:bQ,parentSurface:bR,surface:bS,context:bT}=bJ;if(bT||(bT=null==bS?void 0x0:bS['_context']),!bT)return a2['throw']();if(null===(bK=navigator)||void 0x0===bK||!bK['gpu'])return a2['throw']();const bU=null==bS?void 0x0:bS['_canvas'];if(!bU)return a2['throw']();try{bS['_webgpuAdapter']=await navigator['gpu']['requestAdapter']({'powerPreference':'high-performance'});}catch(c2){}if(!bS['_webgpuAdapter'])return a2['throw']();try{bS['_webgpuDevice']=await bS['_webgpuAdapter']['requestDevice']();}catch(c3){}if(!bS['_webgpuDevice'])return a2['throw']();
1const bV=(null===(bL=(bM=navigator['gpu'])['getPreferredCanvasFormat'])||void 0x0===bL?void 0x0:bL['call'](bM))??'bgra8unorm',bW=[];null!=bQ&&bQ['format']&&bW['push'](bQ['format']),bW['push'](bV),'bgra8unorm'!==bV&&bW['push']('bgra8unorm');const bX=GPUTextureUsage['RENDER_ATTACHMENT']|GPUTextureUsage['COPY_SRC']|GPUTextureUsage['TEXTURE_BINDING'],bY='undefined'!=typeof GPUTextureUsage?bX:void 0x0;if(bY||a2['warn'](),null!=bQ&&bQ['extended'])try{'configureHighDynamicRange'in bU?bU['configureHighDynamicRange'](bQ['mode']):a2['warn']();}catch(c4){a2['warn']();}let bZ,c0=null,c1=null;for(const c5 of bW)if(c5)try{const c6={'device':bS['_webgpuDevice'],'format':c5,'alphaMode':'premultiplied'};bY&&(c6['usage']=bY),'bgra8unorm'===c5&&(c6['viewFormats']=['bgra8unorm-srgb']),'rgba8unorm'===c5&&(c6['viewFormats']=['rgba8unorm-srgb']);let c7=!0x1;if(bP)try{c6['colorSpace']=bP,bT['configure'](c6),bZ=bP,c7=!0x0;}catch(c8){try{delete c6['colorSpace'],bT['configure'](c6),bZ='srgb',c7=!0x0;}catch(c9){try{delete c6['viewFormats'],bT['configure'](c6),bZ='srgb',c7=!0x0;}catch(ca){a2['throw']();}}}else bT['configure'](c6),bZ='srgb',c7=!0x0;if(!c7)return a2['throw']();c1=c5,c0=null;break;}catch(cb){c0=cb;}if(!c1)return bT;bN&&bO||a2['warn'](),bS['_actualColorSpace']=bZ??'',bS['_pendingColorSpace']=bP,bS['_webgpuFormat']=c1;try{bT['webgpuAdapter']=bS['_webgpuAdapter'],bT['webgpuDevice']=bS['_webgpuDevice'],bT['webgpuFormat']=bS['_webgpuFormat'],bT['pendingColorSpace']=bS['_pendingColorSpace'],bT['actualColorSpace']=bS['_actualColorSpace'],bT['drawingBufferColorSpace']=bS['_actualColorSpace']||bS['_pendingColorSpace'],bT['unpackColorSpace']=bS['_actualColorSpace']||bS['_pendingColorSpace'];}catch(cc){}try{bU['webgpuAdapter']=bS['_webgpuAdapter'],bU['webgpuDevice']=bS['_webgpuDevice'],bU['webgpuFormat']=bS['_webgpuFormat'],bU['pendingColorSpace']=bS['_pendingColorSpace'],bU['actualColorSpace']=bS['_actualColorSpace'],bU['drawingBufferColorSpace']=bS['_actualColorSpace']||bS['_pendingColorSpace'],bU['unpackColorSpace']=bS['_actualColorSpace']||bS['_pendingColorSpace'];}catch(cd){}return bT;}static['__createNewTextureWebGL'](bJ){let {width:bK=0x0,height:bL=0x0,colorSpace:bM='srgb',parentSurface:bN,attach:bO=!0x1}=bJ;}static['__createNewTextureWebGPU'](bJ){let {width:bK=0x0,height:bL=0x0,colorSpace:bM='srgb',parentSurface:bN,attach:bO=!0x1}=bJ;}static['isCanvas'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['canvas']),bJ instanceof HTMLCanvasElement||this['_hasOffscreenCanvas']&&bJ instanceof OffscreenCanvas;}static['isImage2D'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['canvas']),bJ instanceof Image||bJ instanceof HTMLCanvasElement||this['_hasOffscreenCanvas']&&bJ instanceof OffscreenCanvas;}static['isCanvasContext'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['context']),bJ instanceof CanvasRenderingContext2D||this['_hasOffscreenCanvas']&&bJ instanceof OffscreenCanvasRenderingContext2D;}static['isCanvas2D'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['context']),bJ instanceof CanvasRenderingContext2D||this['_hasOffscreenCanvas']&&bJ instanceof OffscreenCanvasRenderingContext2D;}static['isWebGL'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['context']),this['_hasWebGL']&&(bJ instanceof WebGLRenderingContext||bJ instanceof WebGL2RenderingContext);}static['isWebGL1'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['context']),this['_hasWebGL']&&bJ instanceof WebGLRenderingContext;}static['isWebGL2'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['context']),this['_hasWebGL2']&&bJ instanceof WebGL2RenderingContext;}static['isWebGPU'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['context']),this['_hasWebGPU']&&bJ instanceof GPUCanvasContext;}static['isTextureWebGL'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['texture']),this['_hasWebGL']&&bJ instanceof WebGLTexture;}static['isTextureWebGPU'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['texture']),this['_hasWebGPU']&&bJ instanceof GPUTexture;}static['isTexture'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['canvas']),!!(this['_hasWebGL']&&bJ instanceof WebGLTexture)||!!(this['_hasWebGPU']&&bJ instanceof GPUTexture);}static['isReady'](bJ){var bK;if(!bJ)return!0x1;
1const bL=(bJ['naturalWidth']||bJ['width'])&&(bJ['naturalHeight']||bJ['height']);return bJ instanceof HTMLImageElement?bL&&bJ['complete']:bJ['_UFOGraphics']?bL&&(null===(bK=bJ['isReady'])||void 0x0===bK?void 0x0:bK['call'](bJ)):bL;}static['isOffscreenCanvas'](bJ){var bK;return null!==(bK=bJ)&&void 0x0!==bK&&bK['_UFOSurface']&&(bJ=bJ['canvas']),'undefined'!=typeof OffscreenCanvas&&(!!(this['_hasOffscreenCanvas']&&bJ instanceof OffscreenCanvas)||bJ instanceof HTMLCanvasElement&&!document['contains'](bJ));}static['getWidth'](bJ){return bJ instanceof HTMLImageElement?bJ['naturalWidth']||bJ['width']||0x0:bJ instanceof HTMLVideoElement?bJ['videoWidth']||bJ['width']||0x0:bJ['canvas']?bJ['canvas']['width']||bJ['canvas']['viewportWidth']||0x0:(null==bJ?void 0x0:bJ['width'])||(null==bJ?void 0x0:bJ['viewportWidth'])||0x0;}static['getHeight'](bJ){return bJ instanceof HTMLImageElement?bJ['naturalHeight']||bJ['height']||0x0:bJ instanceof HTMLVideoElement?bJ['videoHeight']||bJ['height']||0x0:bJ['canvas']?bJ['canvas']['height']||bJ['canvas']['viewportHeight']||0x0:(null==bJ?void 0x0:bJ['height'])||(null==bJ?void 0x0:bJ['viewportHeight'])||0x0;}static['getSize'](bJ){return bJ instanceof HTMLImageElement?[bJ['naturalWidth']||bJ['width']||0x0,bJ['naturalHeight']||bJ['height']||0x0]:bJ instanceof HTMLVideoElement?[bJ['videoWidth']||bJ['width']||0x0,bJ['videoHeight']||bJ['height']||0x0]:bJ['canvas']?[bJ['canvas']['width']||bJ['canvas']['viewportWidth']||0x0,bJ['canvas']['height']||bJ['canvas']['viewportHeight']||0x0]:[(null==bJ?void 0x0:bJ['width'])||(null==bJ?void 0x0:bJ['viewportWidth'])||0x0,(null==bJ?void 0x0:bJ['height'])||(null==bJ?void 0x0:bJ['viewportHeight'])||0x0];}static['getColorSpace'](bJ){if(!bJ)return'';if(bJ['_UFOSurface'])return bJ['_colorSpace']||'';if(bJ instanceof HTMLCanvasElement||bJ instanceof OffscreenCanvas)return bJ['colorSpace']||bJ['drawingBufferColorSpace']||'srgb';var bK,bL,bM,bN;if(bJ instanceof CanvasRenderingContext2D||bJ instanceof OffscreenCanvasRenderingContext2D)return bJ['colorSpace']||(null===(bK=bJ['canvas'])||void 0x0===bK?void 0x0:bK['colorSpace'])||(null===(bL=bJ['canvas'])||void 0x0===bL?void 0x0:bL['drawingBufferColorSpace'])||'';if(bJ instanceof WebGLRenderingContext||bJ instanceof WebGL2RenderingContext)return(null===(bM=bJ['canvas'])||void 0x0===bM?void 0x0:bM['colorSpace'])||(null===(bN=bJ['canvas'])||void 0x0===bN?void 0x0:bN['drawingBufferColorSpace'])||'srgb';if(bJ instanceof GPUCanvasContext){var bO,bP,bQ;const bR=bJ['colorSpace']||(null===(bO=bJ['canvas'])||void 0x0===bO?void 0x0:bO['colorSpace'])||(null===(bP=bJ['canvas'])||void 0x0===bP?void 0x0:bP['drawingBufferColorSpace']);if(bR)return bR;const bS=(null===(bQ=bJ['getCurrentTexture'])||void 0x0===bQ||null===(bQ=bQ['call'](bJ))||void 0x0===bQ||null===(bQ=bQ['format'])||void 0x0===bQ?void 0x0:bQ['toLowerCase']())||'';return bS['includes']('srgb')?'srgb':bS['includes']('p3')?'display-p3':'';}return'';}static['setSurfaceSize'](bJ){let bK=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:0x0,bL=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:0x0,bM=!(arguments['length']>0x3&&void 0x0!==arguments[0x3])||arguments[0x3];bJ&&bJ['_canvas']?(!bM||bJ['_canvas']['width']===bK&&bJ['_canvas']['height']===bL||(bJ['_canvas']['width']=bK,bJ['_canvas']['height']=bL),(bJ['_UFOSurface']||bJ['_UFOEngineBase'])&&(bJ=bJ['_context']),bJ&&(bJ['viewport']?bJ['viewport'](0x0,0x0,bK,bL):'viewportWidth'in bJ&&'viewportHeight'in bJ&&(bJ['viewportWidth']!==bK||bJ['viewportHeight']!==bL)&&(bJ['viewportWidth']=bK,bJ['viewportHeight']=bL))):a2['error']();}static['getDrawableForCanvas2D'](bJ){var bK;return bJ?!0x0===bJ['_UFOGraphics']?null===(bK=bJ['engine'])||void 0x0===bK?void 0x0:bK['canvas']:this['isImage2D'](bJ)?bJ:this['isCanvas2D'](bJ)?bJ['canvas']:null:null;}static['createNewSurface'](bJ){var bK;let {id:bL,width:bM=0x0,height:bN=0x0,colorSpace:bO,parentSurface:bP,attach:bQ=!0x1}=bJ;if(null!==(bK=bP)&&void 0x0!==bK&&bK['_UFOGraphics']&&(bP=bP['_engine']),bP||bL||a2['throw'](),bL)switch(bL){case'2d':case'canvas-2d':case'image':return this['__createNewCanvas2D']({'width':bM,'height':bN,'colorSpace':bO,'parentSurface':bP,'attach':bQ});case'webgl':case'canvas-webgl':return this['__createNewCanvasWebGL']({'width':bM,'height':bN,'colorSpace':bO,'parentSurface':bP,'attach':bQ});case'webgpu':case'canvas-webgpu':return this['__createNewCanvasWebGPU']({'width':bM,'height':bN,'colorSpace':bO,'parentSurface':bP,'attach':bQ});case'texture-webgl':return this['__createNewTextureWebGL']({'width':bM,'height':bN,'colorSpace':bO,'parentSurface':bP,'attach':bQ});case'texture-webgpu':return this['__createNewTextureWebGPU']({'width':bM,'height':bN,'colorSpace':bO,'parentSurface':bP,'attach':bQ});case'blank':return this['__createNewCanvas2D']({'width':bM,'height':bN,'colorSpace':void 0x0,'parentSurface':bP,'attach':bQ});}else{if(this['isCanvas2D'](bP))return this['__createNewCanvas2D']({'width':bM,'height':bN,'colorSpace':bO,'parentSurface':bP,'attach':bQ});if(this['isWebGL'](bP))return this['__createNewCanvasWebGL']({'width':bM,'height':bN,'colorSpace':bO,'parentSurface':bP,'attach':bQ});if(this['isWebGPU'](bP))return this['__createNewCanvasWebGPU']({'width':bM,'height':bN,'colorSpace':bO,'parentSurface':bP,'attach':bQ});if(this['isTextureWebGL'](bP))return this['__createNewTextureWebGL']({'width':bM,'height':bN,'colorSpace':bO,'parentSurface':bP,'attach':bQ});if(this['isTextureWebGPU'](bP))return this['__createNewTextureWebGPU']({'width':bM,'height':bN,'colorSpace':bO,'parentSurface':bP,'attach':bQ});}return null;}static['getEngineID'](bJ){var bK;return bJ?(null==bJ?void 0x0:bJ['engineID'])??(null==bJ||null===(bK=bJ['engine'])||void 0x0===bK?void 0x0:bK['engineID'])??bJ['toString']():null;}static['isSameEngine'](bJ,bK){return!(!bJ||!bK)&&bJ['engineID']===bK['engineID'];}static['createNewEngine'](bJ){let bK=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0;bJ||a2['throw']();const bL=this['getEngineID'](bJ);switch(bK||a2['throw'](),bL){case'blank':return new aE();case'canvas-2d':case'2d':return new aK();case'canvas-webgl':case'webgl':return new aQ();case'canvas-webgpu':case'webgpu':return new aS();}return a2['throw']();}static['createCompatibleEngine'](bJ,bK){(bK=bK??bI['getEngineID'](bJ))||a2['throw']();try{return bI['createNewEngine'](bK??bJ,'canvas');}catch(bL){a2['throw']();}}static['createEngineWithSurface'](bJ){let {id:bK,width:bL,height:bM,colorSpace:bN,parentSurface:bO,attach:bP=!0x1}=bJ;bK=bK??bI['getEngineID'](bO);
1const bQ=bI['createNewSurface']({'id':bK,'width':bL,'height':bM,'colorSpace':bN,'parentSurface':bO,'attach':bP});if(bQ['error'])return null;const bR=bI['createCompatibleEngine'](bQ,bK);return this['attachCompatibleSurface'](bQ,bR),bR;}static['attachCompatibleSurface'](bJ,bK){return null!=bJ&&bJ['_context']&&null!=bK&&bK['_context']&&bJ['_context']['constructor']!==bK['_context']['constructor']?a2['throw']():null!=bK&&bK['_UFOEngineBase']?(bK['_readOnly']=bJ['_readOnly'],bK['_error']=bJ['_error'],bK['_errorMessage']=bJ['_errorMessage'],bK['_promise']=bJ['_promise'],bK['_context']=bJ['_context'],bK['_canvas']=bJ['_canvas'],bK['_texture']=bJ['_texture'],bK['_colorSpace']=bJ['_colorSpace']??a9['SRGB'],!0x0):(a2['throw'](),!0x1);}static['resizeImageToFit'](bJ,bK,bL){if(bJ['width']<=bK&&bJ['height']<=bL)return bJ;const bM=Math['min'](bK/bJ['width'],bL/bJ['height']),bN=Math['floor'](bJ['width']*bM),bO=Math['floor'](bJ['height']*bM),bP=this['createNewCanvas']({'width':bN,'height':bO});let bQ=bP['getContext']('2d',{'colorSpace':bJ['colorSpace']||a9['SRGB']});return bQ||(bQ=bP['getContext']('2d')),bQ['clearRect'](0x0,0x0,bN,bO),bQ['drawImage'](bJ,0x0,0x0,bN,bO),bP;}};a1(aU,'_hasOffscreenCanvas','undefined'!=typeof OffscreenCanvas&&'undefined'!=typeof OffscreenCanvasRenderingContext2D),a1(aU,'_hasWebGL','undefined'!=typeof WebGLRenderingContext&&'undefined'!=typeof WebGLTexture),a1(aU,'_hasWebGL2','undefined'!=typeof WebGL2RenderingContext&&'undefined'!=typeof WebGLTexture),a1(aU,'_hasWebGPU','undefined'!=typeof GPU&&'undefined'!=typeof GPUTexture),a1(aU,'enableWebGL2',!0x0);var aV=aU,aW=class bJ{constructor(){let bK=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bL=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0,bM=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:void 0x0;this['_UFOGraphics']=!0x0,this['id']=bJ['_ufoUnique']['generateID'](),this['_parent']=bK,this['_preferredHeight']=-0x1,this['_preferredWidth']=-0x1,this['_preferredSurfaceID']=bL,this['_preferredChildSurfaceID']=bJ['PREFER_SURFACE_DEFAULT'],this['_engine']=void 0x0,this['_stale']=!0x1,this['_staleCount']=0x0,bM&&(this['props']||(this['props']={'name':bM}),bJ['objects']['set'](bM,this)),bJ['_count']++,bJ['DEBUG_LOGGING']&&a2['log'](),void 0x0===bK||bK['_UFOGraphics']||a2['throw']();}['dispose'](){var bK,bL;this['_engine']&&bJ['_count']--,this['_parent']=null,this['_preferredHeight']=-0x1,this['_preferredSurfaceID']=null,null===(bK=this['_engine'])||void 0x0===bK||bK['removeRef']('UFOGraphics.dispose()'),this['_engine']=null,null!==(bL=this['props'])&&void 0x0!==bL&&bL['name']&&bJ['objects']['delete'](this['props']['name']);}get['parent'](){return this['_parent'];}get['engine'](){return this['_engine'];}get['engineName'](){var bK;return null===(bK=this['_engine'])||void 0x0===bK?void 0x0:bK['engineName'];}get['engineID'](){var bK;return null===(bK=this['_engine'])||void 0x0===bK?void 0x0:bK['engineID'];}get['preferredSurfaceID'](){return this['_preferredSurfaceID'];}get['preferredChildSurfaceID'](){return this['_preferredChildSurfaceID'];}get['surfaceID'](){var bK;return null===(bK=this['_engine'])||void 0x0===bK?void 0x0:bK['surfaceID'];}get['surfaceType'](){var bK;return null===(bK=this['_engine'])||void 0x0===bK?void 0x0:bK['surfaceType'];}get['ready'](){var bK;return(null===(bK=this['_engine'])||void 0x0===bK?void 0x0:bK['ready'])??!0x1;}get['width'](){var bK;return(null===(bK=this['_engine'])||void 0x0===bK?void 0x0:bK['width'])??0x0;}get['height'](){var bK;return(null===(bK=this['_engine'])||void 0x0===bK?void 0x0:bK['height'])??0x0;}get['widthScaled'](){return this['_widthScaled']||this['width'];}get['heightScaled'](){return this['_heightScaled']||this['height'];}get['widthScaleFactor'](){return this['width']/(this['widthScaled']||0x1)||0x1;}get['heightScaleFactor'](){return this['height']/(this['heightScaled']||0x1)||0x1;}get['scaleFactor'](){return this['_scaleFactor']??0x1;}get['colorSpace'](){var bK;return null===(bK=this['_engine'])||void 0x0===bK?void 0x0:bK['colorSpace'];}get['stale'](){return this['_stale'];}get['staleCount'](){return this['_staleCount']??0x0;}set['stale'](bK){bK&&!this['_stale']&&this['_staleCount']++,this['_stale']=bK;}['initialize'](){let bK=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bL=(null==bK?void 0x0:bK['id'])??this['_preferredSurfaceID']??this['engineID'];const bM=(null==bK?void 0x0:bK['parent'])??this['parent'],bN=(null==bK?void 0x0:bK['colorSpace'])??(null==bM?void 0x0:bM['colorSpace'])??this['colorSpace'],bO=(null==bK?void 0x0:bK['width'])??(null==bM?void 0x0:bM['width'])??this['width']??0x0,bP=(null==bK?void 0x0:bK['height'])??(null==bM?void 0x0:bM['height'])??this['height']??0x0,bQ=(null==bK?void 0x0:bK['reinit'])??!0x1,bR=this['engine'],bS=(null==bR?void 0x0:bR['engineID'])===bL||(null==bR?void 0x0:bR['surfaceID'])===bL,bT=(null==bR?void 0x0:bR['colorSpace'])===bN;
1if(a2['throwIf'](),a2['warnIf'](),bM&&(this['_parent']=bM,this['_parent']['link'](this)),!bQ&&null!=bR&&bR['ready']&&this['surfaceID']&&bS&&bT)return bO&&bP&&this['setSize'](bO,bP),this['clearRect'](),void(this['stale']=!0x0);const bU=aV['createNewSurface']({'id':bL,'width':bO,'height':bP,'colorSpace':bN,'parentSurface':bM});this['_engine']&&this['_engine']['dispose'](),this['_engine']=aV['createCompatibleEngine'](bM,bL),this['_engine']['addRef']('UFOGraphics.initialize()'),aV['attachCompatibleSurface'](bU,this['_engine']),this['stale']=!0x0;}['createSurface'](bK){var bL;let {id:bM,name:bN,width:bO,height:bP,colorSpace:bQ}=bK;bQ=bQ||this['colorSpace']||a9['SRGB'];let bR,bS=bM??this['_preferredSurfaceID']??this['surfaceID'];var bT,bU;return bN&&(bR=bJ['objects']['get'](bN)),bR&&(bR['surfaceID']!==bS||bR['colorSpace']!==bQ?(bR['dispose'](),bR=null):bO!==this['width']||bP!==this['height']?bR['setSize'](bO,bP):(bR['clearRect'](),bR['setClipRect']())),bR||(bR=new bJ(this,bS,bN)),null!==(bL=bR['_engine'])&&void 0x0!==bL&&bL['ready']||(null===(bT=bR['_engine'])||void 0x0===bT||bT['removeRef']('UFOGraphics.createSurface()'),bR['_engine']=aV['createEngineWithSurface']({'id':bS,'width':bO,'height':bP,'colorSpace':bQ,'parentSurface':this,'attach':!0x1}),null===(bU=bR['_engine'])||void 0x0===bU||bU['addRef']('UFOGraphics.createSurface()')),bR;}['isCompatible'](bK){let bL=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:void 0x0,bM=arguments['length']>0x3&&void 0x0!==arguments[0x3]?arguments[0x3]:void 0x0;const bN=(arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0)??this['width'],bO=bL??this['height'],bP=bM??this['surfaceID'];return!!(bK&&bN&&bO)&&bK['width']===bN&&bK['height']===bO&&bK['surfaceID']===bP&&bK['colorSpace']===this['colorSpace'];}['setSize'](bK,bL){this['_engine']&&((void 0x0===bL||bL<0x0)&&(bL=this['_preferredHeight']),(void 0x0===bK||bK<0x0)&&(bK=this['_preferredWidth']),bK===this['width']&&bL===this['height']||(isNaN(bK)||isNaN(bL)||bK<0x0||bL<0x0?a2['error']():(aV['setSurfaceSize'](this['_engine'],bK,bL),this['_stale']=!0x0)));}['setPreferredSize'](bK,bL){this['_preferredWidth']===bK&&this['_preferredHeight']===bL||(this['_preferredWidth']=bK,this['_preferredHeight']=bL,this['_UFODisplay']&&this['syncSize']());}['setPreferredHeight'](bK){this['_preferredHeight']!==bK&&(this['_preferredHeight']=bK,this['_UFODisplay']&&this['syncSize']());}['setPreferredWidth'](bK){this['_preferredWidth']!==bK&&(this['_preferredWidth']=bK,this['_UFODisplay']&&this['syncSize']());}['call'](bK){if(!this['_engine'])throw new Error('UFOGraphics.call():\x20Engine\x20not\x20ready.');if(!this['_engine']['engineExtensions'][bK])throw new Error('UFOGraphics.call():\x20Engine\x20\x27'+this['_engine']['engineName']+'\x27\x20has\x20no\x20API\x20extension\x20\x27'+bK+'\x27.');for(var bL=arguments['length'],bM=new Array(bL>0x1?bL-0x1:0x0),bN=0x1;bN<bL;bN++)bM[bN-0x1]=arguments[bN];return this['_engine'][bK](...bM);}['frameBegin'](bK){this['_UFOScreen']&&this['sync']&&(bK||(bK={}),bK['refreshRate']=bK['refreshRate']??(this['sync']['refreshRate']||this['sync']['fps']),bK['fps']=bK['fps']??this['sync']['fps'],bK['frameCounter']=bK['frameCounter']??this['sync']['frameCounter'],bK['pixelsPerFrame']=bK['pixelsPerFrame']??this['sync']['pixelsPerFrame'],bK['pixelsPerSec']=bK['pixelsPerSec']??this['sync']['pixelsPerSec']),this['_engine']['frameBegin'](bK);}['frameEnd'](bK){this['_engine']['frameEnd'](bK);}['frameForceFlush'](bK){this['_engine']['frameForceFlush'](bK);}['setSmoothing'](bK){var bL,bM;null===(bL=(bM=this['_engine'])['setSmoothing'])||void 0x0===bL||bL['call'](bM,bK);}['setAlpha'](bK){var bL,bM;null===(bL=(bM=this['_engine'])['setAlpha'])||void 0x0===bL||bL['call'](bM,bK);}['setBlendingMode'](bK){var bL,bM;null===(bL=(bM=this['_engine'])['setBlendingMode'])||void 0x0===bL||bL['call'](bM,bK);}['setColor'](bK){this['_engine']['setColor'](bK);}['setClipRect'](bK){this['_engine']['setClipRect'](bK);}['clearRect'](bK){this['_engine']['clearRect'](bK);}['fillRect'](bK){this['_engine']['fillRect'](bK);}['drawRect'](bK){this['_engine']['drawRect'](bK);}['drawRoundedRect'](bK){this['_engine']['drawRoundedRect'](bK);}['fillRoundedRect'](bK){this['_engine']['fillRoundedRect'](bK);}['fillCircle'](bK){this['_engine']['fillCircle'](bK);}['drawCircle'](bK){this['_engine']['drawCircle'](bK);}['drawLine'](bK){this['_engine']['drawLine'](bK);}['drawPolygon'](bK){this['_engine']['drawPolygon'](bK);}['drawImage'](bK){this['_engine']['drawImage'](bK);}['draw'](bK){this['_engine']['drawImage'](bK);}['drawImageTiled'](bK){this['_engine']['drawImageTiled'](bK);}['link'](bK){return bK&&bK['_UFOGraphics']?(this['_ufoLinks']||(this['_ufoLinks']=[]),!this['_ufoLinks']['includes'](bK)&&(this['_ufoLinks']['push'](bK),!0x0)):(a2['error'](),!0x1);}['unlink'](bK){if(!this['_ufoLinks']||!this['_ufoLinks']['length'])return!0x1;const bL=this['_ufoLinks']['indexOf'](bK);return-0x1!==bL&&(this['_ufoLinks']['splice'](bL,0x1),!0x0);}['unlinkAll'](){this['_ufoLinks']&&(this['_ufoLinks']=[]);}['__propagateEvent'](bK,bL){this['_ufoLinks']&&this['_ufoLinks']['forEach'](bM=>{try{bL(bM);}catch(bN){console['error']('UFOGraphics.'+bK+'():\x20Error\x20thrown\x20in\x20one\x20of\x20children!',bN);}});}['isReady'](){if(this['_ufoLinks']&&this['_ufoLinks']['length']>0x0)try{return this['ready']&&this['_ufoLinks']['every'](bK=>bK['isReady']());}catch(bK){a2['error']();}return this['ready'];}['isStale'](){if(this['_ufoLinks']&&this['_ufoLinks']['length']>0x0)try{return this['stale']&&this['_ufoLinks']['every'](bK=>bK['isStale']());}catch(bK){a2['error']();}return this['stale'];}['onStart'](){this['__propagateEvent']('onStart',bK=>bK['onStart']());}['onStop'](){this['__propagateEvent']('onStop',bK=>
1bK['onStop']()),this['_parent']['_UFODisplay']||this['dispose'](),this['unlinkAll']();}['onMouseMove'](bK){let {x:bL,y:bM,button:bN,buttons:bO,event:bP}=bK;}['onMouseDown'](bK){let {x:bL,y:bM,button:bN,buttons:bO,event:bP}=bK;}['onMouseUp'](bK){let {x:bL,y:bM,button:bN,buttons:bO,event:bP}=bK;}['onClick'](bK){let {x:bL,y:bM,button:bN,buttons:bO,event:bP}=bK;}['onDoubleClick'](bK){let {x:bL,y:bM,button:bN,buttons:bO,event:bP}=bK;}['onKeyDown'](bK){let {key:bL,event:bM}=bK;}['onKeyUp'](bK){let {key:bL,event:bM}=bK;}['onKeyPress'](bK){let {key:bL,event:bM}=bK;}['onFocus'](){}['onLostFocus'](){}['onSizeChange'](){this['__propagateEvent']('onSizeChange',bK=>bK['onSizeChange']());}['onRefreshRateChange'](bK,bL){this['__propagateEvent']('onRefreshRateChange',bM=>bM['onRefreshRateChange'](bK,bL));}['onFrameRateChange'](bK,bL,bM,bN){this['__propagateEvent']('onFrameRateChange',bO=>bO['onFrameRateChange'](bK,bL,bM,bN));}['onFrameBufferChange'](){this['__propagateEvent']('onFrameBufferChange',bK=>bK['onFrameBufferChange']());}['onPaint'](){this['__propagateEvent']('onPaint',bK=>bK['onPaint']()),this['_stale']=!0x1;}['onSettingChange'](){}};a1(aW,'VERSION',0x3),a1(aW,'DEBUG_LOGGING',!0x1),a1(aW,'PREFER_SURFACE_DEFAULT'),a1(aW,'PREFER_SURFACE_INHERIT','inherit'),a1(aW,'PREFER_SURFACE_BEST','best'),a1(aW,'_ufoUnique',new aB()),a1(aW,'_count',0x0),a1(aW,'objects',new Map());var aX=aW,aY=class bK extends aX{constructor(bL,bM){super(void 0x0,bM),this['_backgroundColor']='#000000',this['_UFODisplay']=!0x0,this['_canvasAttached']=bL,this['_allowFullScreen']=!0x0,this['_zoomed']=!0x1,this['_embedded']=!0x1,this['_scaleFactor']=0x1,this['_forceCounter']=0x0,this['_listeners']={},this['_isMacSafari']='Safari'===ak['browser']&&'Mac'===ak['OS'],this['system']=ak,this['sync']=as,null!=bL&&bL['style']&&(bL['style']['backgroundColor']=this['_backgroundColor']),this['_originalCanvasStyle']={'position':null,'top':null,'left':null,'width':null,'height':null,'zIndex':null,'saved':!0x1};}['dispose'](){super['dispose']();}['registerListeners'](bL){if(void 0x0===bL)return a2['error']();bL['mousedown']&&!bL['pointerdown']&&(bL['pointerdown']=bL['mousedown']),bL['mouseup']&&!bL['pointerup']&&(bL['pointerup']=bL['mouseup']),bL['mousemove']&&!bL['pointermove']&&(bL['pointermove']=bL['mousemove']),bL['mousecancel']&&!bL['pointercancel']&&(bL['pointercancel']=bL['mousecancel']),bL['pointercancel']||(bL['pointercancel']=bL['pointerup']),bL['touchstart']||(bL['touchstart']=bL['pointerdown']),bL['touchend']||(bL['touchend']=bL['pointerup']),bL['touchcancel']||(bL['touchcancel']=bL['pointercancel']),bL['touchmove']||(bL['touchmove']=bL['pointermove']);try{window['visualViewport']&&(window['visualViewport']['addEventListener']('resize',bL['resize']),window['visualViewport']['addEventListener']('scroll',bL['scroll'])),window['addEventListener']('resize',bL['resize']),window['addEventListener']('scroll',bL['scroll']),window['addEventListener']('move',bL['move']),window['addEventListener']('fullscreenchange',bL['fullscreenchange']),window['addEventListener']('fullscreenerror',bL['fullscreenerror']),document['addEventListener']('keyup',bL['keyup']),document['addEventListener']('keydown',bL['keydown']),document['addEventListener']('keypress',bL['keypress']),this['addEventListener']('touchstart',bL['touchstart']),this['addEventListener']('touchend',bL['touchend']),this['addEventListener']('touchcancel',bL['touchcancel']),this['addEventListener']('touchmove',bL['touchmove']),this['addEventListener']('click',bL['click']),this['addEventListener']('dblclick',bL['dblclick']),this['addEventListener'](window['PointerEvent']?'pointerdown':'mousedown',bL['pointerdown']),this['addEventListener'](window['PointerEvent']?'pointerup':'mouseup',bL['pointerup']),this['addEventListener'](window['PointerEvent']?'pointercancel':'mousecancel',bL['pointercancel']),this['addEventListener'](window['PointerEvent']?'pointermove':'mousemove',bL['pointermove']);}catch(bM){a2['error']();}}['addEventListener'](bL,bM){if(!this['engine']||!this['engine']['ready'])return void a2['error']();let bN=this['engine']['canvas'];bN||a2['throw'](),this['_listeners'][bL]=bM,bN['addEventListener'](bL,bM);}['__showScrollGutter'](bL){document['documentElement']['style']['scrollbarGutter']=bL?'stable':'auto';}['syncSize'](){var bL;arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0]?this['_forceCounter']=0x1:this['_forceCounter']>0x0&&this['_forceCounter']--;const bM=ak['getViewportZoomFactor'](),bN=ak['getZoomFactor'](!!this['_forceCounter']);let bO=0x1,bP=0x1,bQ=0x1,bR=!0x1;null!==(bL=ad['globalSettings'])&&void 0x0!==bL&&bL['scale']&&(bO=parseFloat(ad['globalSettings']['scale']['value']),0x0===bO||isNaN(bO)?(bO=0x1,bP=bO,bQ=bO*bN*bM):bO<0x0?(bO=Math['abs'](bO),bP=bO,bQ=bO*bN*bM):(bP=bO,bQ=bO*bM,bR=!0x0)),bP>bK['MAX_SCALE_FACTOR']&&(bP=bK['MAX_SCALE_FACTOR']),this['_compensateScaleFactor']=bP,this['_scaleFactor']=bQ;
1let bS='Mac'!==ak['OS']&&'Windows'!==ak['browser']||'Safari'===ak['browser']?bM:0x1;const bT=ak['getWidth'](),bU=ak['getHeight']();let bV=bT*bS,bW=bU*bS,bX=(bR?ak['getBestNativeWidth']():bT)/bP*bS,bY=(bR?ak['getBestNativeHeight']():bU)/bP*bS,bZ=Math['round'](bX),c0=Math['round'](bY);const c1=ak['getDevicePixelRatio']()/bP;if(!this['isZoomed']&&!this['isEmbedded']){let c3=this['_preferredHeight'];(void 0x0===c3||c3<0x0)&&(c3=ak['getBestNativeHeight']()/this['scaleFactor']);let c4=c3*bP;(!c4||c4<=0x0)&&(c4=bU),bY=c4/bO*bS,c0=Math['round'](bY);}if(bX>=0x1){const c5=Math['round'](bV*c1)/c1;bV=Math['round'](c5*c1)/c1,Math['round'](bW*c1);const c6=c0/bZ;bW=Math['round'](c5*c6*c1)/c1;}if(this['setSize'](bZ,c0),this['_widthScaled']=bV,this['_heightScaled']=bW,this['_canvasAttached']){var c2;this['_canvasAttached']['style']['width']=bV+'px',this['_canvasAttached']['style']['height']=bW+'px';let c7=null===(c2=ad['globalSettings'])||void 0x0===c2||null===(c2=c2['scalemode'])||void 0x0===c2?void 0x0:c2['value'];if('smooth'===c7){let c8=this['_isMacSafari']&&!ak['isFullScreen'](),c9=Math['abs'](bQ-0x1)<0.002&&!c8;this['_canvasAttached']['style']['imageRendering']=c9?'pixelated':'auto';}else this['_canvasAttached']['style']['imageRendering']='debug'===c7?'auto':c7;}return this['stale'];}['getBoundingClientRect'](){var bL;return(null===(bL=this['_canvasAttached'])||void 0x0===bL?void 0x0:bL['getBoundingClientRect']())??new az();}['__getScaledScreenWidth'](){return ak['getScreenWidth']()*ak['getDevicePixelRatio']()/this['scaleFactor'];}['__getScaledScreenHeight'](){return ak['getScreenHeight']()*ak['getDevicePixelRatio']()/this['scaleFactor'];}['updateZoomedState'](){let bL=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];try{var bM;null!==(bM=ad['globalSettings'])&&void 0x0!==bM&&bM['getSafeValue']('embed')?(a2['log'](),this['setEmbedded'](!0x0),this['fullScreenEnter']()):this['isFullScreen']&&(bL||a2['log'](),this['fullScreenExit']());}catch{a2['warn']();}}['fullScreenEnter'](){let bL=!(arguments['length']>0x0&&void 0x0!==arguments[0x0])||arguments[0x0];if(!this['_allowFullScreen'])return!0x1;if(window['scrollTo'](0x0,0x0),!this['_zoomed']){this['_zoomed']=!0x0,document['body']['style']['overflow']='hidden',document['body']['scroll']='no',this['__showScrollGutter'](!0x1),this['_originalCanvasStyle']['saved']||(this['_originalCanvasStyle']['position']=this['_canvasAttached']['style']['position'],this['_originalCanvasStyle']['top']=this['_canvasAttached']['style']['top'],this['_originalCanvasStyle']['left']=this['_canvasAttached']['style']['left'],this['_originalCanvasStyle']['width']=this['_canvasAttached']['style']['width'],this['_originalCanvasStyle']['height']=this['_canvasAttached']['style']['height'],this['_originalCanvasStyle']['zIndex']=this['_canvasAttached']['style']['zIndex'],this['_originalCanvasStyle']['saved']=!0x0);const bM=this['_canvasAttached'];bM['style']['position']='fixed',bM['style']['top']='0',bM['style']['left']='0',bM['style']['width']='100vw',bM['style']['height']='100vh',bM['style']['zIndex']='1',bM['style']['backgroundColor']=bM['style']['backgroundColor']||this['_backgroundColor'],this['onSizeChange'](!0x0),!this['_embedded']&&bL&&this['__browserRequestFullscreen']();}return!0x0;}['fullScreenExit'](){let bL=!(arguments['length']>0x0&&void 0x0!==arguments[0x0])||arguments[0x0];if(!this['_allowFullScreen'])return!0x1;if(this['_embedded'])return!0x1;if(window['scrollTo'](0x0,0x0),this['_zoomed']){if(this['_zoomed']=!0x1,document['body']['style']['overflow']='visible',document['body']['scroll']='yes',this['__showScrollGutter'](!0x0),bL&&this['__browserExitFullscreen'](),!this['_canvasAttached']||null===this['_originalCanvasStyle']['position'])return;const bM=this['_canvasAttached'];this['_originalCanvasStyle']['saved']&&(bM['style']['position']=this['_originalCanvasStyle']['position'],bM['style']['top']=this['_originalCanvasStyle']['top'],bM['style']['left']=this['_originalCanvasStyle']['left'],bM['style']['width']=this['_originalCanvasStyle']['width'],bM['style']['height']=this['_originalCanvasStyle']['height'],bM['style']['zIndex']=this['_originalCanvasStyle']['zIndex']),this['onSizeChange'](!0x0);}return!0x0;}['enterEmbedMode'](){return this['setEmbedded'](!0x0),this['fullScreenEnter'](),!0x0;}['fullScreenToggle'](){let bL=!(arguments['length']>0x0&&void 0x0!==arguments[0x0])||arguments[0x0];return this['_zoomed']?this['fullScreenExit'](bL):this['fullScreenEnter'](bL);}get['isFullScreen'](){return!!this['_allowFullScreen']&&!this['_embedded']&&ak['isFullScreen']();}get['isZoomed'](){return this['_zoomed'];}get['isEmbedded'](){return this['_embedded'];}['setEmbedded'](bL){this['_embedded']=bL;}['__browserRequestFullscreen'](){try{const bL=document['documentElement'];if(bL['requestFullscreen'])bL['requestFullscreen']()['catch'](bM=>a2['error']());else{if(bL['webkitRequestFullscreen'])bL['webkitRequestFullscreen']();else{if(!bL['mozRequestFullScreen'])return!0x1;bL['mozRequestFullScreen']();}}}catch(bM){return a2['log'](),!0x1;}return!0x0;}['__browserExitFullscreen'](){try{if(document['exitFullscreen'])document['exitFullscreen']()['catch'](bL=>a2['error']());else{if(document['webkitExitFullscreen'])document['webkitExitFullscreen']();else{if(!document['mozExitFullScreen'])return!0x1;document['mozExitFullScreen']();}}}catch(bL){return a2['log'](),!0x1;}return!0x0;}['reinitializeCanvas'](bL){let {engineID:bM,colorSpace:bN='auto'}=bL;const bO=this['_canvasAttached'];if(!bO||!aV['isCanvas'](bO))return!0x1;try{if(!bO['existingUFOcanvas'])return this['__initializeEngine'](bO,bM,bN)||a2['throw'](),bO['existingUFOcanvas']=!0x0,!0x0;for(let bQ in this['_listeners']){const bR=this['_listeners'][bQ];bO['removeEventListener'](bQ,bR);}const bP=document['createElement']('canvas');bP['id']=bO['id'],bP['className']=bO['className'],bP['style']['position']=bO['style']['position'],bP['style']['top']=bO['style']['top'],bP['style']['left']=bO['style']['left'],bP['style']['width']=bO['style']['width'],bP['style']['height']=bO['style']['height'],bP['style']['zIndex']=bO['style']['zIndex'],bP['width']=bO['width'],bP['height']=bO['height'],bP['display']=bO['display'],bP['style']['imageRendering']=bO['style']['imageRendering'],bP['style']['backgroundColor']=bO['style']['backgroundColor'],bP['existingUFOcanvas']=!0x0,this['__initializeEngine'](bP,bM,bN)||a2['throw'](),bO['replaceWith'](bP);for(let bS in this['_listeners']){let bT=this['_listeners'][bS];bP['addEventListener'](bS,bT);}return this['_canvasAttached']=bP,!0x0;}catch(bU){return a2['error'](),!0x1;}}['initialize'](bL){var bM,bN,bO;let {id:bP,width:bQ,height:bR,colorSpace:bS,parentSurface:bT}=bL;return null===(bM=this['_engine'])||void 0x0===bM||bM['removeRef']('UFODisplay.initialize()'),this['_engine']=aV['createEngineWithSurface']({'i
1d':bP??this['_preferredSurfaceID']??this['surfaceID'],'width':bQ,'height':bR,'colorSpace':bS||this['colorSpace']||a9['SRGB'],'parentSurface':bT,'attach':!0x0}),null===(bN=this['_engine'])||void 0x0===bN||bN['addRef']('UFODisplay.initialize()'),null===(bO=this['_engine'])||void 0x0===bO?void 0x0:bO['ready'];}['attach'](bL){var bM,bN;return void 0x0===bL['_UFOGraphics']||void 0x0===bL?a2['throw']():bL['_engine']===this['_engine']?a2['error']():(null===(bM=bL['_engine'])||void 0x0===bM||bM['removeRef']('UFODisplay.attach()'),bL['_engine']=this['_engine'],bL['stale']=!0x0,void(null===(bN=this['_engine'])||void 0x0===bN||bN['addRef']('UFODisplay.attach()')));}['__initializeEngine'](bL){var bM;let bN=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0,bO=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:void 0x0;this['_engine']&&(this['_engine']['removeRef']('UFODisplay.createSurfaceForCanvas()'),this['_engine']=void 0x0);let bP,bQ=bO||this['colorSpace']||a9['SRGB'];if('auto'===bO){switch(ak['browser']){case'Chrome':case'Edge':case'Brave':case'Opera':bQ=a9['REC2100PQ'];break;case'Safari':bQ=a9['DISPLAYP3'];break;default:bQ=a9['SRGB'];}bQ='Safari'===ak['browser']?a9['DISPLAYP3']:a9['REC2100PQ'];}switch(a9['SRGB'],bQ){case a9['DISPLAYP3']:bP=[a9['DISPLAYP3'],a9['REC2100PQ'],a9['SRGB'],void 0x0];break;case a9['REC2100PQ']:bP=[a9['REC2100PQ'],a9['DISPLAYP3'],a9['SRGB'],void 0x0];break;case a9['REC2100HLG']:bP=[a9['REC2100HLG'],a9['REC2100PQ'],a9['DISPLAYP3'],a9['SRGB'],void 0x0];break;case a9['REC2100LINEAR']:bP=[a9['REC2100LINEAR'],a9['REC2100PQ'],a9['DISPLAYP3'],a9['SRGB'],void 0x0];break;case a9['SRGB']:bP=[a9['SRGB'],void 0x0];break;default:bP=[bQ,a9['SRGB'],void 0x0];}bK['DEBUG_BAD_COLORSPACE']&&(bP=[bQ]),bQ!==bO&&a2['log']();const bR=bL['width'],bS=bL['height'];let bT=!0x1;for(;;){for(const bV of bP){try{bT=this['initialize']({'id':bN,'parentSurface':bL,'width':bR,'height':bS,'colorSpace':bV,'attach':!0x0});}catch(bW){a2['error'](),bT=!0x1;}if(bT)break;}if(bT)break;if(bK['DEBUG_BAD_ENGINE'])break;if('2d'===bN)break;bN='2d',a2['error']();}if(!bT)return this['_errorMessage']='Failed\x20to\x20create\x20graphics\x20canvas!',a2['error'](),!0x1;this['setSize'](bL['width'],bL['height']);let bU=null===(bM=this['engine'])||void 0x0===bM||null===(bM=bM['context'])||void 0x0===bM?void 0x0:bM['drawingBufferColorSpace'];return bQ!==bU&&a2['warn'](),a2['log'](),bL['dataset']['colorSpace']=this['colorSpace'],bL['dataset']['drawingBufferColorSpace']=bU,void 0x0===this['_preferredEngineID']&&(this['_preferredEngineID']=this['engineID']),void 0x0===this['_preferredColorSpace']&&(this['_preferredColorSpace']=this['colorSpace']),this['setSmoothing'](!0x0),!0x0;}['requestPointerLock'](){if(this['engine']&&this['engine']['ready'])try{return this['engine']['canvas']['requestPointerLock']();}catch(bL){return a2['error'](),!0x1;}}['exitPointerLock'](){if(this['engine']&&this['engine']['ready'])try{return document['exitPointerLock']();}catch(bL){return a2['error'](),!0x1;}}['checkFramebufferChange'](){var bL,bM;return this['_preferredColorSpace']=(null===(bL=ad['globalSettings'])||void 0x0===bL?void 0x0:bL['getValue']('colorspace'))??this['colorSpace']??a9['SRGB'],this['_preferredEngineID']=(null===(bM=ad['globalSettings'])||void 0x0===bM?void 0x0:bM['getValue']('engine'))??this['engineID']??'2d',this['_lastAttemptedColorSpace']||(this['_lastAttemptedColorSpace']=this['colorSpace']),this['_lastAttemptedEngineID']||(this['_lastAttemptedEngineID']=this['engineID']),(this['_preferredColorSpace']!==this['_lastAttemptedColorSpace']||this['_preferredEngineID']!==this['_lastAttemptedEngineID'])&&(this['_lastAttemptedColorSpace']=this['_preferredColorSpace'],this['_lastAttemptedEngineID']=this['_preferredEngineID'],this['onFrameBufferChange'](),!0x0);}['checkSizeChange'](){var bL,bM;const bN=ak['getWidth'](),bO=ak['getHeight'](),bP=ak['getScreenWidth'](),bQ=ak['getScreenHeight'](),bR=ak['getDevicePixelRatio'](),bS=ak['getViewportZoomFactor'](),bT=null===(bL=ad['globalSettings'])||void 0x0===bL||null===(bL=bL['scale'])||void 0x0===bL?void 0x0:bL['value'],bU=null===(bM=ad['globalSettings'])||void 0x0===bM||null===(bM=bM['scalemode'])||void 0x0===bM?void 0x0:bM['value'];return(this['width']!==this['_lastWidth']||this['height']!==this['_lastHeight']||bN!==this['_lastInnerWidth']||bO!==this['_lastInnerHeight']||bP!==this['_lastScreenWidth']||bQ!==this['_lastScreenHeight']||bR!==this['_lastDevicePixelRatio']||bS!==this['_lastViewportZoomFactor']||bT!==this['_lastScaleSetting']||bU!==this['_lastScaleModeSetting'])&&(this['_lastWidth']=this['width'],this['_lastHeight']=this['height'],this['_lastInnerWidth']=bN,this['_lastInnerHeight']=bO,this['_lastScreenWidth']=bP,this['_lastScreenHeight']=bQ,this['_lastDevicePixelRatio']=bR,this['_lastViewportZoomFactor']=bS,this['_lastScaleSetting']=bT,this['_lastScaleModeSetting']=bU,this['onSizeChange'](!0x0),!0x0);}['onFrameBufferChange'](){this['reinitializeCanvas']({'engineID':this['_preferredEngineID'],'colorSpace':this['_preferredColorSpace']}),super['onFrameBufferChange']();}['onSizeChange'](){let bL=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];bL|=this['syncSize'](bL),bL&&super['onSizeChange']();}};a1(aY,'DEBUY_BAD_COLORSPACE',!0x1),a1(aY,'DEBUG_BAD_ENGINE',!0x1),a1(aY,'MAX_SCALE_FACTOR',0x40);var aZ=aY,b0=class bL extends aX{constructor(){let bM=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bN=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0;a2['throwIf'](),super(bM),this['_UFOImage']=!0x0,this['_autoColorSpace']=!0x1,this['_error']=!0x1,this['_PLACEHOLDER_WIDTH']=this['DEBUG_LOAD']?0x50:0x0,this['_PLACEHOLDER_HEIGHT']=this['DEBUG_LOAD']?0x50:0x0,this['_autoSize']=!0x0,bN&&this['initialize'](bM,bN);}['dispose'](){super['dispose'](),this['_autoColorSpace']=!0x1,this['_src']=void 0x0,delete this['_image'],this['_image']=null,this['_imageLoadComplete']=!0x1,this['_error']=!0x1,this['_filter']=null,this['_ufoRect']=null,this['_statusColor']=null,this['_autoSize']=!0x1;}get['src'](){return this['_src'];}set['src'](bM){return this['initialize'](this['parent'],bM);}get['nativeWidth'](){var bM;return(null===(bM=this['_image'])||void 0x0===bM?void 0x0:bM['width'])||this['width']||0x0;}get['nativeHeight'](){var bM;return(null===(bM=this['_image'])||void 0x0===bM?void 0x0:bM['height'])||this['height']||0x0;}set['autoSize'](bM){this['_autoSize']=bM;}get['autoSize'](){return this['_autoSize'];}['setSize'](bM,bN){a2['logIf'](),this['_autoSize']&&(a2['warnIf'](),bM=this['nativeWidth'],bN=this['nativeHeight']),super['setSize'](bM,bN);}['setFilter'](bM){let {brightness:bN,contrast:bO,saturate:bP,intensity:bQ,invert:bR,opacity:bS}=bM,bT='';void 0x0!==bN&&bN>=0x0&&0x1!==bN&&(bT+='brightness('+bN+')\x20'),void 0x0!==bO&&bO>=0x0&&0x1!==bO&&(bT+='contrast('+bO+')\x20'),void 0x0!==bP&&bP>=0x0&&0x1!==bP&&(bT+='saturate('+bP+')\x20'),void 0x0!==bQ&&bQ>=0x0&&0x1!==bQ&&(bT='brightness('+bQ+')\x20contrast('+bQ+')\x20saturate('+bQ+')\x20'),void 0x0!==bS&&bS>=0x0&&0x1!==bS&&(bT+='opacity('+bS+')\x20'),void 0x0!==bR&&bR>=0x0&&(bT+='invert('+bR+')\x20'),this['_filter']!==bT&&(this['_filter']=bT||'none',this['stale']=!0x0);}['setAlpha'](bM){bM!==this['_alpha']&&(this['_alpha']=bM,this['stale']=!0x0,super['setAlpha'](bM));}['resetFilter'](){this['_filter']='',this['stale']=!0x0;}['initialize'](){var bM,bN,bO;let bP,bQ=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bR=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0,bS=arguments['length']>0x2&&void 0x0!==arguments[0x2]&&arguments[0x2];
1if(bQ&&(this['_parent']=bQ),a2['warnIf'](),bR&&('string'==typeof bR?bP=bR:'string'==typeof bR['src']&&(bP=bR['src'])),this['_src']===bP&&this['_image']&&!this['_error']&&!bS)return this['_autoSize']&&this['isReady']()&&this['_image']['width']!==this['width']&&this['_image']['height']!==this['height']&&this['setSize'](this['_image']['width'],this['_image']['height']),a2['warnIf'](),void(this['stale']=!0x0);this['_ufoRect']=null!=bR&&bR['ufoRect']?new az(bR['ufoRect']):void 0x0;let bT=(null===(bM=this['_ufoRect'])||void 0x0===bM?void 0x0:bM['width'])||(this['autoSize']?this['_PLACEHOLDER_WIDTH']:0x0),bU=(null===(bN=this['_ufoRect'])||void 0x0===bN?void 0x0:bN['height'])||(this['autoSize']?this['_PLACEHOLDER_HEIGHT']:0x0),bV=this['__getEngineID'](),bW=(null==bQ?void 0x0:bQ['colorSpace'])||(null===(bO=this['engine'])||void 0x0===bO?void 0x0:bO['colorSpace'])||a9['SRGB'];this['_autoColorSpace']=(null==bR?void 0x0:bR['_autoColorSpace'])||void 0x0===(null==bR?void 0x0:bR['colorSpace']),this['_autoColorSpace']||(bW=(null==bR?void 0x0:bR['colorSpace'])||bW),this['_src']===bP&&!!this['_image']&&!this['_error']&&!bS||(this['_image']=void 0x0,this['_imageLoadComplete']=!0x1),this['_colorSpace']=bW,this['_error']=!0x1,this['_alpha']=void 0x0,this['stale']=!0x0,this['_src']=bP,a2['logIf'](),bR instanceof aX?(this['_autoSize']&&(bT=bR['width']||bR['nativeWidth']||bT,bU=bR['height']||bR['nativeHeight']||bU),super['initialize']({'id':bV,'parent':bQ,'width':bT,'height':bU,'colorSpace':bW}),bL['DEBUG_LOAD_SLOW']?setTimeout(()=>{this['_image']=bR,this['_error']=bL['DEBUG_LOAD_ERROR'],this['stale']=!0x0;},bL['DEBUG_LOAD_INTERVAL']):(this['_image']=bR,this['stale']=!0x0,this['_imageLoadComplete']=!0x0)):void 0x0!==bP&&(super['initialize']({'id':bV,'parent':bQ,'width':bT,'height':bU,'colorSpace':bW}),this['clearRect'](),this['_image']=new Image(),this['_image']['onload']=()=>{var bX,bY;if(!this['_image'])return;let bZ=void 0x0!==(null===(bX=this['_ufoRect'])||void 0x0===bX?void 0x0:bX['width'])?this['_ufoRect']['width']:this['_image']['width'],c0=void 0x0!==(null===(bY=this['_ufoRect'])||void 0x0===bY?void 0x0:bY['height'])?this['_ufoRect']['height']:this['_image']['height'];a2['logIf'](),(this['_autoSize']||0x0===this['width']||0x0===this['height'])&&this['setSize'](bZ,c0),bL['DEBUG_LOAD_SLOW']?setTimeout(()=>{this['_error']=bL['DEBUG_LOAD_ERROR'],this['stale']=!0x0;},bL['DEBUG_LOAD_INTERVAL']):(this['_imageLoadComplete']=!0x0,this['_alpha']=void 0x0,this['stale']=!0x0);},this['_image']['onerror']=()=>{a2['error'](),this['_error']=!0x0,this['stale']=!0x0;},this['_image']['src']=bP);}['isReady'](){return!this['_error']&&this['_imageLoadComplete']&&void 0x0!==this['_image']&&this['width']>=0x0&&this['height']>=0x0;}get['complete'](){return this['isReady']();}['onStop'](){this['dispose']();}['onSizeChange'](){a2['logIf']();}['onFrameBufferChange'](){a2['logIf'](),this['_autoColorSpace']&&super['initialize']({'id':this['__getEngineID'](),'parent':this['parent'],'width':this['width'],'height':this['height']});}['__getEngineID'](){var bM,bN,bO;switch(null===(bM=this['parent'])||void 0x0===bM?void 0x0:bM['preferredChildSurfaceID']){case null:case void 0x0:case aX['PREFER_SURFACE_DEFAULT']:case aX['PREFER_SURFACE_BEST']:return'2d';case aX['PREFER_SURFACE_INHERIT']:return null===(bN=this['parent'])||void 0x0===bN?void 0x0:bN['surfaceID'];default:return null===(bO=this['parent'])||void 0x0===bO?void 0x0:bO['preferredChildSurfaceID'];}}['refresh'](){this['stale']=!0x0,this['_alpha']=void 0x0,this['onPaint']();}['isSameSize'](bM){return!(void 0x0===bM||!bM['height']||!bM['width'])&&this['width']===bM['width']&&this['height']===bM['height'];}['onPaint'](){this['stale']&&(bL['DEBUG_COLORING']&&(this['_error']?this['_statusColor']=bL['DEBUG_COLOR_FAIL']:this['_image']?this['isReady']()||(this['_statusColor']=bL['DEBUG_COLOR_LOADING']):this['_statusColor']=bL['DEBUG_COLOR_UNLOADED'],this['_statusColor']&&this['fillRect']({'x':0x0,'y':0x0,'width':this['width'],'height':this['height'],'color':this['_statusColor']})),this['isReady']()&&(this['_autoSize']&&!this['isSameSize'](this['_image'])&&this['setSize'](this['_image']['width'],this['_image']['height']),this['clearRect'](),this['_statusColor']&&(this['_statusColor']=void 0x0),this['_filter']&&this['engine']['context']&&(this['engine']['context']['filter']=this['_filter']),this['_ufoRect']?this['drawImage']({'source':this['_image'],'x':0x0,'y':0x0,'width':this['width'],'height':this['height'],'sx':this['_ufoRect']['x'],'sy':this['_ufoRect']['y'],'sWidth':this['_ufoRect']['width'],'sHeight':this['_ufoRect']['height']}):this['drawImage']({'source':this['_image'],'width':this['width'],'height':this['height']}),this['_filter']&&this['engine']['context']&&(this['engine']['context']['filter']=void 0x0),this['stale']=!0x1),bL['DEBUG_BORDERS']&&this['drawRect']({'x':0x0,'y':0x0,'width':this['width'],'height':this['height'],'color':a9['isHDR'](this)?bL['DEBUG_BORDER_COLOR_HDR']:bL['DEBUG_BORDER_COLOR'],'thickness':bL['DEBUG_BORDER_THICKNESS']}));}};a1(b0,'DEBUG_VISUALS',!0x1),a1(b0,'DEBUG_COLORING',!0x1|b0['DEBUG_VISUALS']),a1(b0,'DEBUG_BORDERS',!0x1|b0['DEBUG_VISUALS']),a1(b0,'DEBUG_COLOR_UNLOADED',new ab('color(rec2020\x200\x200\x202/0.4)')),a1(b0,'DEBUG_COLOR_LOADING',new ab('color(rec2020\x200\x202\x200/0.4)')),a1(b0,'DEBUG_COLOR_FAIL',new ab('color(rec2020\x202\x200\x200/0.6)')),a1(b0,'DEBUG_BORDER_COLOR',new ab('#00FF00')),a1(b0,'DEBUG_BORDER_COLOR_HDR',new ab('color(rec2020\x203\x203\x200)')),a1(b0,'DEBUG_BORDER_THICKNESS',0x2),a1(b0,'DEBUG_LOAD_SLOW',!0x1),a1(b0,'DEBUG_LOAD_INTERVAL',0x5dc),a1(b0,'DEBUG_LOAD_
1ERROR',!0x1),a1(b0,'DEBUG_EXTRALOGS',!0x1),a1(b0,'DEBUG_EXTRALOGS_IMAGE_SRC');var b1=b0,b2=class bM extends b1{static get['ALIGN_NONE'](){return'none';}static get['ALIGN_CENTER'](){return'center';}static get['ALIGN_LEFT'](){return'left';}static get['ALIGN_RIGHT'](){return'right';}static get['ALIGN_TOP'](){return'top';}static get['ALIGN_BOTTOM'](){return'bottom';}constructor(){let bN=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bO=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0,{name:bP='',horizAlign:bQ,vertAlign:bR,x:bS=0x0,y:bT=0x0,embed:bU=!0x1,fullscreen:bV=!0x0,windowed:bW=!0x0}=arguments['length']>0x2?arguments[0x2]:void 0x0;super(bN,bO),this['_UFOButton']=!0x0,this['_enabled']=!0x0,this['_visible']=!0x0,this['_lastDrawX']=void 0x0,this['_lastDrawY']=void 0x0,this['_rect']=new az(),this['_autoSize']=!0x1,this['_name']=bP,this['x']=bS,this['y']=bT,this['_vertAlign']=bR||bM['ALIGN_NONE'],this['_horizAlign']=bQ||bM['ALIGN_NONE'],this['_embed']=bU,this['_fullscreen']=bV,this['_windowed']=bW;}get['rect'](){return this['_rect']['width']=super['width']||0x0,this['_rect']['height']=super['height']||0x0,this['_rect'];}set['rect'](bN){bN&&this['setSize'](bN['width'],bN['height']),this['_rect']=bN;}get['name'](){return this['_name'];}set['name'](bN){this['_name']=bN;}get['visible'](){return this['_visible'];}set['visible'](bN){this['_visible']=bN;}get['enabled'](){return this['_enabled'];}set['enabled'](bN){this['_enabled']=bN;}get['x'](){return this['_rect']['x'];}set['x'](bN){this['_rect']['x']=bN;}get['y'](){return this['_rect']['y'];}set['y'](bN){this['_rect']['y']=bN;}get['vertAlign'](){return this['_vertAlign'];}set['vertAlign'](bN){this['_vertAlign']=bN;}get['horizAlign'](){return this['_horizAlign'];}set['horizAlign'](bN){this['_horizAlign']=bN;}['hitTest'](){let bN=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:0x0,bO=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:0x0;if(!this['_rect'])return!0x1;if(!this['_enabled'])return!0x1;if(!this['_visible'])return!0x1;let bP=this['_lastDrawX']||0x0,bQ=this['_lastDrawY']||0x0;return!(bN<bP||bO<bQ||bN>bP+this['width']||bO>bQ+this['height']);}['drawButton'](bN,bO){let {embed:bP=!0x1,fullscreen:bQ=!0x0,windowed:bR=!0x0,horizAlignOverride:bS,vertAlignOverride:bT,horizOffsetOverride:bU=0x0,vertOffsetOverride:bV=0x0}=bO;if(!this['_visible'])return;if(bP&&!this['_embed'])return;if(bQ&&!this['_fullscreen'])return;if(bR&&!this['_windowed'])return;bN||a2['throw'](),!0x0!==bN['_UFOGraphics']&&a2['throw']();let bW=0x0,bX=0x0,bY=bS||this['_horizAlign'],bZ=bT||this['_vertAlign'],c0=bU||this['_rect']['x'],c1=bV||this['_rect']['y'];bW='left'===bY?Math['abs'](c0):'right'===bY?bN['width']-this['width']-Math['abs'](c0):'center'===bY?bN['width']/0x2-this['width']/0x2+c0:this['_rect']['left']+c0,bX='top'===bZ?Math['abs'](c1):'bottom'===bZ?bN['height']-this['height']-Math['abs'](c1):'center'===bZ?bN['width']/0x2-this['height']/0x2+c1:this['_rect']['top']+c1,bN['drawImage']({'source':this,'x':bW,'y':bX}),this['_lastDrawX']=bW,this['_lastDrawY']=bX;}},b3=class extends Array{constructor(){super(),this['_UFOButtonList']=!0x0;}['hitTest'](bN,bO){for(let bP=0x0;bP<this['length'];bP++){if(!0x0!==this[bP]['_UFOButton'])throw new Error('UFOButtonList\x20contains\x20non-UFOButton\x20object:'+this[bP]);if(this[bP]['rect'],this[bP]['hitTest'](bN,bO))return this[bP];}return null;}['drawAllButtons'](bN){if(bN){for(var bO=arguments['length'],bP=new Array(bO>0x1?bO-0x1:0x0),bQ=0x1;bQ<bO;bQ++)bP[bQ-0x1]=arguments[bQ];for(let bR=0x0;bR<this['length'];bR++){if(!0x0!==this[bR]['_UFOButton'])throw new Error('UFOButtonList\x20contains\x20non-UFOButton\x20object:'+this[bR]);this[bR]['drawButton'](bN,...bP);}}}['name'](bN){for(let bO=0x0;bO<this['length'];bO++){if(!0x0!==this[bO]['_UFOButton'])throw new Error('UFOButtonList\x20contains\x20non-UFOButton\x20object:'+this[bO]);if(this[bO]['name']===bN)return this[bO];}return null;}},b4=class bN extends aX{constructor(){let bO=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bP=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0,bQ=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:'';super(bO,'canvas-2d'),this['_UFOTextBox']=!0x0,this['clear'](),this['_hiddenExtraPadding']=0x1,this['_style']=new aH(),bO&&this['initialize'](bO,bP,bQ);}['clear'](){this['stale']=!0x1,this['_autoBoxWidth']=!0x0,this['_autoBoxHeight']=!0x0,this['_autoTextSize']=!0x1,this['_originalTextSize']=void 0x0,this['_actualTextSize']=0x0,this['_textWidth']=0x0,this['_textHeight']=0x0,this['_style']=null,this['_debugFlashCount']=0x0,this['_firstMeasured']=!0x1,this['_forceMeasure']=!0x0,this['_text']='',this['_oldText']='',this['_pendingText']='',this['_pendingTextInterval']=0x0,this['_pendingTextTimestamp']=0x0,this['_drawText']=!0x1;}['dispose'](){super['dispose'](),this['clear']();}['refresh'](){this['_forceMeasure']=!0x0,this['stale']=!0x0,this['onPaint']();}static['clearCaches'](){bN['_pathCache']['clear'](),bN['_pathCacheLRU']=[];}['initialize'](){var bO;let bP=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bQ=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:void 0x0,bR=arguments['length']>0x2&&void 0x0!==arguments[0x2]?arguments[0x2]:void 0x0;void 0x0===bP&&(bP=this['parent']),bQ&&(this['style']=bQ),bR&&(this['text']=bR),super['initialize']({'id':'2d','parent':bP,'width':this['width'],'height':this['height'],'colorSpace':(null===(bO=bP)||void 0x0===bO?void 0x0:bO['colorSpace'])||this['_colorSpace']}),this['_drawText']=this['engine']['engineExtensions']['drawText'],this['_drawText']||this['setSize'](bN['DEFAULT_WIDTH'],bN['DEFAULT_HEIGHT']);}get['text'](){return this['_text'];}set['text'](bO){null==bO&&(bO=''),this['_text']!==bO&&(this['_forceMeasure']=this['_text']!==this['_oldText'],this['_forceMeasure']&&(this['_firstMeasured']=!0x1),this['_text']=bO,this['stale']=!0x0);}get['style'](){return this['_style'];}set['style'](bO){void 0x0===bO?(a2['error'](),this['_style']=new aH()):'string'==typeof bO?(this['_style']=aH['cloneStyle'](bO),void 0x0===this['_style']&&(this['_style']=new aH())):bO['_UFOTextBoxStyle']||'object'==typeof bO?this['_style']=new aH(bO):(a2['error'](),this['_style']=new aH());}get['autoBoxHeight'](){return this['_autoBoxHeight'];}set['autoBoxHeight'](bO){this['stale']=bO!==this['_autoBoxHeight'],this['_autoBoxHeight']=bO,this['_forceMeasure']=!0x0;}get['autoBoxWidth'](){return this['_autoBoxWidth'];}set['autoBoxWidth'](bO){this['stale']=bO!==this['_autoBoxWidth'],this['_autoBoxWidth']=bO,bO&&(this['_autoBoxWidth']=!0x1,this['_forceMeasure']=!0x0);}get['autoBoxSize'](){return this['_autoBoxWidth']||this['_autoBoxHeight'];}set['autoBoxSize'](bO){this['stale']=bO!==this['_autoBoxWidth']||bO!==this['_autoBoxHeight'],this['_autoBoxWidth']=bO,this['_autoBoxHeight']=bO,bO&&(this['_autoBoxWidth']=!0x1,this['_forceMeasure']=!0x0);}get['autoTextSize'](){return this['_autoTextSize'];}set['autoTextSize'](bO){this['stale']=bO!==this['_autoTextSize'],this['_autoTextSize']=bO,bO&&(this['_forceMeasure']=!0x0);}get['boxWidth'](){return this['_textWidth'];}set['boxWidth'](bO){this['setSize'](bO+this['style']['marginLeft']+this['style']['marginRight'],this['height']),this['_textWidth']=bO;}get['boxHeight'](){return this['_textHeight'];}set['boxHeight'](bO){this['setSize'](this['width'],bO+this['style']['marginTop']+this['style']['marginBottom']),this['_textHeight']=bO;}get['color'](){return this['_style']['color'];}set['color'](bO){this['_style']['color']=bO;}get['stale'](){return this['_style']['stale']&&(this['_stale']=!0x0,this['_style']['stale']=!0x1,this['_firstMeasured']=!0x1,this['_forceMeasure']=!0x0,bN['DEBUG_CHANGE_FLASH']&&(this['_debugFlashCount']=bN['DEBUG_CHANGE_FLASH_COUNT'])),this['_pendingText']&&performance['now']()-this['_pendingTextTimestamp']>this['_pendingTextInterval']&&(this['text']=this['_pendingText'],this['_pendingText']=''),this['_text']!==this['_oldText']&&(this['_stale']=!0x0,this['_oldText']=this['_text'],bN['DEBUG_CHANGE_FLASH']&&(this['_debugFlashCount']=bN['DEBUG_CHANGE_FLASH_COUNT'])),this['_debugFlashCount']>0x0&&(this['_stale']=!0x0),this['_stale'];}set['stale'](bO){super['stale']=bO;}['setSize'](bO,bP){this['_autoTextSize']=!0x1,super['setSize'](bO,bP);}['updateText'](bO){let bP=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:0x64;return this['_pendingText']||(this['_pendingTextTimestamp']=performance['now']()),this['_pendingText']=bO,this['_pendingTextInterval']=bP,!0x0;}['measure'](){let bO=!(arguments['length']>0x0&&void 0x0!==arguments[0x0])||arguments[0x0];if(this['engine']['ready']||a2['throw'](),!this['engine']['engineExtensions']['measureText'])return void a2['error']();if(!this['stale']&&!bO&&!this['_forceMeasure']&&this['width']>0x0&&this['height']>0x0)return;let bP,bQ=0x0,bR=0x0,bS=this['_style']['sizeNumber'];for(this['_autoTextSize']&&this['_originalTextSize']&&(bS=this['_originalTextSize']);this['_style']['sizeNumber']=bS,bP=this['call']('measureText',{'text':this['_text'],'font':this['_style']}),bP&&(bQ=Math['ceil'](bP['width']+this['style']['marginLeft']+this['style']['marginRight']+0x2*this['_hiddenExtraPadding']+this['style']['outlineThickness']),bR=Math['ceil'](bP['height']+this['style']['marginTop']+this['style']['marginBottom']+0x2*this['_hiddenExtraPadding']+this['style']['outlineThickness']),this['_firstMeasured']||(this['_originalWidth']=bQ,this['_originalHeight']=bR,this['_originalTextSize']=this['_style']['sizeNumber'],this['_firstMeasured']=!0x0),this['_autoTextSize']);){let bT=this['_parent']['width'],bU=this['_parent']['height'];if(!bT&&!bU)break;if(bQ<=bT&&bR<=bU)break;if(bS*=0.95,bS<=0x6||isNaN(bS))break;}void 0x0!==bP&&bQ>0x0&&bR>
10x0&&(this['_textWidth']=bP['width'],this['_textHeight']=bP['height'],this['_autoBoxWidth']&&this['_autoBoxHeight']?super['setSize'](bQ,bR):this['_autoBoxWidth']?super['setSize'](bQ,this['height']||bR):this['_autoBoxHeight']&&super['setSize'](this['width']||bQ,bR)),this['_forceMeasure']=!0x1,this['_style']['stale']=!0x1,this['stale']=!0x0;}['measureOnce'](){this['autoBoxSize']&&(this['measure'](),this['autoBoxSize']=!0x1,this['_forceMeasure']=!0x1);}['isReady'](){return this['ready'];}['onSettingChange'](){this['__fontChanged']();}['onSizeChange'](){this['_autoTextSize']&&(this['stale']=!0x0);}['onFrameBufferChange'](){this['initialize'](),this['stale']=!0x0;}['onStart'](){this['ready']||this['initialize']();}['onStop'](){this['dispose']();}['onPaint'](){if(this['engine']['engineExtensions']['drawText'],this['_debugFlashCount']>0x0&&this['_debugFlashCount']--,this['stale']){var bO,bP;this['_drawText']&&this['measure'](this['_forceMeasure']),this['clearRect'](),this['__debugFlashBackground']();const bQ=this['_style']['boxOutlineThickness'];(null===(bO=this['_style']['background'])||void 0x0===bO?void 0x0:bO['a'])>0x0&&this['fillRoundedRect']({'x':bQ/0x2,'y':bQ/0x2,'width':this['width']-bQ,'height':this['height']-bQ,'color':this['_style']['background']['color'],'borderRadius':this['_style']['cornerRadius']}),bQ>0x0&&(null===(bP=this['_style']['boxOutlineColor'])||void 0x0===bP?void 0x0:bP['a'])>0x0&&this['drawRoundedRect']({'x':bQ/0x2,'y':bQ/0x2,'width':this['width']-bQ,'height':this['height']-bQ,'color':this['_style']['boxOutlineColor']['color'],'borderRadius':this['_style']['cornerRadius'],'thickness':this['_style']['boxOutlineThickness']}),this['_drawText']?this['call']('drawText',{'text':this['_text'],'font':this['_style'],'x':0x0,'y':this['__getBaselineCorrection']()}):a2['logOnce'](),this['__debugBorder'](),this['stale']=!0x1;}}['__getBaselineCorrection'](){if('Safari'!==ak['browser'])return 0x0;const bO=this['_style']['sizeNumber']||aH['DEFAULT_SIZE'];return'top'===this['_style']['baseline']?Math['round'](-0.18*bO):0x0;}['__debugFlashBackground'](){bN['DEBUG_CHANGE_FLASH']&&(this['setAlpha'](this['_debugFlashCount']/bN['DEBUG_CHANGE_FLASH_COUNT']),this['setColor'](bN['DEBUG_CHANGE_FLASH_COLOR']['color']),this['fillRect'](),this['setAlpha'](0x1));}['__debugBorder'](){bN['DEBUG_BORDER']&&this['drawRect']({'x':0x0,'y':0x0,'width':this['width'],'height':this['height'],'thickness':bN['DEBUG_BORDER_THICKNESS'],'color':bN['DEBUG_BORDER_COLOR']['color']});}};a1(b4,'DEBUG_BORDER',!0x1),a1(b4,'DEBUG_CHANGE_FLASH',!0x1),a1(b4,'DEBUG_CHANGE_FLASH_COUNT',0x64),a1(b4,'DEBUG_CHANGE_FLASH_COLOR',new ab('color(rec2020\x204\x201.2\x200)')),a1(b4,'DEBUG_BORDER_COLOR',new ab('color(rec2020\x200\x201\x203)')),a1(b4,'DEBUG_BORDER_THICKNESS',0x2),a1(b4,'DEFAULT_WIDTH',0xc8),a1(b4,'DEFAULT_HEIGHT',0x28);var b5=b4,b6=class{constructor(bO){let {display:bP,windows:bQ,screens:bR,onSettingChanged:bS}=bO;this['_UFOConsoleGraphics']=!0x0,this['ufoDisplay']=bP,this['ufoWindows']=bQ,this['ufoScreens']=bR,this['onSettingChanged']=bS,this['initialized']=!0x1,this['buttonsInitialized']=!0x1,this['HDR_STATUS_POS_FROM_BOTTOM']=0x4b,this['HDR_STATUS_POS_MARGIN']=0x14,this['HDR_STATUS_LINE_BOTTOM_MARGIN']=0x6,this['HDR_STATUS_MIN_CANVAS_HEIGHT']=0xc8,this['_textColorOutline']=new ab('#000000'),this['_textColorSDR']=new ab('#f0f0f0'),this['_textColorHDR']=new ab('color(rec2020\x200\x203\x200)'),this['_textColorWCG']=new ab('color(rec2020\x200\x201\x200)'),this['_textColorError']=new ab('#ffa040'),this['_textColorDebug']=new ab('#ffe000'),this['_engineIndicator']='',this['_engineSubheading']='',this['_lastMouseActivity']=0x0,this['_lastSettingsActivity']=0x0,this['_buttonList']=new b3(),this['_buttonTopMargin']=0xa,this['_buttonRightMargin']=0xa,this['_buttonGap']=0.1,this['_buttonSize']=0x60,this['_buttonMaxWidthPerc']=0.1,this['_buttonTimeout']=0x9c4,this['_buttonPlay']=void 0x0,this['_buttonPlayPlaceholder']=new ay(0x4),this['_lastDisplayHDR']=!0x1,this['_lastCanvasColorSpace']=void 0x0,this['_lastEngineName']='',aH['registerStyle']('screen.heading',new aH({'font':'bold\x2020px\x20Verdana','align':'left','color':this['_textColorSDR'],'margin':{'left':0x1e,'right':0x1e,'top':0x8,'bottom':0x18},'background':'#30303080','cornerRadius':0xa,'outlineType':'outline','outlineColor':this['_textColorOutline'],'outlineThickness':0x3,'boxOutlineColor':'#000000C0','boxOutlineThickness':0x3,'baseline':'top'})),aH['registerStyle']('screen.url',aH['cloneStyle']('screen.heading',{'size':'12px','margin':{'left':0x1e,'right':0x1e,'top':0x2,'bottom':0x2},'boxOutlineThickness':0x0,'background':ab['TRANSPARENT']})),aH['registerStyle']('colorspace.heading',new aH({'font':'bold\x2020px\x20Verdana','align':'right','color':this['_textColorSDR'],'outlineType':'outline','outlineColor':this['_textColorOutline'],'outlineThickness':0x3,'background':'#30303080','boxOutlineColor':'#000000C0','boxOutlineThickness':0x3,'cornerRadius':0xa,'margin':{'left':0x1e,'right':0x1e,'top':0x8,'bottom':0x14},'baseline':'top'})),aH['registerStyle']('colorspace.text',aH['cloneStyle']('colorspace.heading',{'size':'12px','boxOutlineThickness':0x0,'background':ab['TRANSPARENT']})),aH['registerStyle']('debug.heading',new aH({'font':'bold\x2020px\x20Arial','align':'left','color':this['_textColorDebug'],'outlineType':'outline','outlineColor':this['_textColorOutline'],'outlineThickness':0x6,'background':'#00000080','margin':{'left':0x3,'right':0x3,'top':0x3,'bottom':0x3},'baseline':'top'})),aH['registerStyle']('debug.text',aH['cloneStyle']('debug.heading',{'size':'12.5px','color':this['_textColorDebug'],'outlineThickness':0x2,'margin':{'left':0x3,'right':0x3,'top':0x0,'bottom':0x0}})),this['_textBoxTitle']=void 0x0,this['_textBoxURL']=void 0x0,this['_textBoxHDRheading']=void 0x0,this['_textBoxHDRinfo']=void 0x0,this['_textBoxDebug']=[],this['_textBoxDebugHeading']=void 0x0,this['_debugLines']=0x5,this['ufoDisplay']&&this['__initialize'](this['ufoDisplay']);}['__initialize'](bO){if(void 0x0!==bO){this['initialized']&&a2['throw'](),this['ufoDisplay']=bO,this['_textBoxTitle']=new b5(bO,'screen.heading'),this['_textBoxURL']=new b5(bO,'screen.url'),this['_textBoxHDRheading']=new b5(bO,'colorspace.heading'),this['_textBoxHDRinfo']=new b5(bO,'colorspace.text'),this['_textBoxDebugHeading']=new b5(bO,'debug.heading','Debug\x20Info');for(let bP=0x0;bP<this['_debugLines'];bP++)this['_textBoxDebug'][bP]=new b5(bO,'debug.text');this['__updateEngineMessage'](!0x0),this['initialized']=!0x0;}}['__initializeButtons'](bO){if(this['buttonsInitialized'])return;let bP=new b2(bO,'/images/button_96_fullscreen.png',{'name':'fullscreen','horizAlign':b2['ALIGN_RIGHT'],'vertAlign':b2['ALIGN_TOP'],'embed':!0x1,'fullscreen':!0x1,'windowed':!0x0});
1this['_buttonList']['push'](bP),bP=new b2(bO,'/images/button_96_fullscreenexit.png',{'name':'fullscreen-exit','horizAlign':b2['ALIGN_RIGHT'],'vertAlign':b2['ALIGN_TOP'],'embed':!0x0,'fullscreen':!0x0,'windowed':!0x1}),this['_buttonList']['push'](bP),bP=new b2(bO,'/images/button_96_settings.png',{'name':'settings','horizAlign':b2['ALIGN_RIGHT'],'vertAlign':b2['ALIGN_TOP'],'embed':!0x1}),this['_buttonList']['push'](bP),this['__buttonLayout'](),this['buttonsInitialized']=!0x0;}['__buttonLayout'](){if(!this['buttonsInitialized'])return;let bO=Math['min'](this['_buttonSize'],Math['round'](this['ufoDisplay']['width']*this['_buttonMaxWidthPerc'])),bP=0x0;ak['isFullScreen']()||(bP=ak['getScrollbarWidth']()*ak['getSystemZoomFactor']()/this['ufoDisplay']['scaleFactor']);let bQ=this['_buttonList']['name']('fullscreen');bQ&&(bQ['x']=-this['_buttonRightMargin']-bP,bQ['y']=-this['_buttonTopMargin'],bQ['setSize'](bO,bO)),bQ=this['_buttonList']['name']('fullscreen-exit'),bQ&&(bQ['x']=-this['_buttonRightMargin']-bP,bQ['y']=-this['_buttonTopMargin'],bQ['setSize'](bO,bO)),bQ=this['_buttonList']['name']('settings'),bQ&&(bQ['x']=-this['_buttonRightMargin']-bP-bO-Math['round'](bO*this['_buttonGap']),bQ['y']=-this['_buttonTopMargin'],bQ['setSize'](bO,bO));}['onSizeChange'](){this['__buttonLayout']();}['onScreenChange'](){this['__buttonLayout'](),this['_lastSettingsActivity']=performance['now']();}['onSettingChange'](){this['_lastSettingsActivity']=performance['now']();}['onMouseActivity'](){this['_lastMouseActivity']=performance['now']();}['onFrameBufferChange'](){this['_forceRefresh']=!0x0,this['__layoutTitleBox'](),this['_textBoxHDRheading']['refresh'](),this['_textBoxHDRinfo']['refresh'](),this['_textBoxDebugHeading']['refresh']();for(let bO=0x0;bO<this['_debugLines'];bO++)this['_textBoxDebug'][bO]['refresh']();}['processButtonOverlay'](bO,bP,bQ){var bR,bS;if(this['buttonsInitialized']||this['__initializeButtons'](this['ufoDisplay']),null!==(bR=ad['globalSettings'])&&void 0x0!==bR&&bR['getSafeValue']('pause'))return this['ufoScreens']['resume'](),a4['event']('Play','1'),!0x0;let bT=this['_buttonList']['hitTest'](bP,bQ);if(bT)switch(bT['name']){case'fullscreen':case'fullscreen-exit':if(this['ufoDisplay']['_UFODisplay']){var bU,bV,bW;let bX=bO['getModifierState']&&bO['getModifierState']('Shift');this['ufoDisplay']['fullScreenToggle'](!bX),null!==(bU=ad['globalSettings'])&&void 0x0!==bU&&bU['embed']&&(ad['globalSettings']['embed']['value']=this['ufoDisplay']['isEmbedded']?0x1:0x0),null!==(bV=ad['globalSettings'])&&void 0x0!==bV&&bV['fullscreen']&&(ad['globalSettings']['fullscreen']['value']=this['ufoDisplay']['isZoomed']?0x1:0x0),a4['event']('Full\x20Screen',this['ufoDisplay']['isZoomed']?'Exited':'Started'),null===(bW=this['ufoScreens']['screen'])||void 0x0===bW||bW['onSizeChange']();}else a2['log']();return!0x0;case'settings':return null===(bS=this['ufoWindows'])||void 0x0===bS||bS['show']('settings',{'settings':ad['globalSettings'],'tab':'settings','onSettingChanged':this['onSettingChanged']}),!0x0;default:a2['log']();}return!!(this['_textBoxHDRheading']['visible']&&bP>this['_textBoxHDRheading']['x']&&bP<this['_textBoxHDRheading']['x']+this['_textBoxHDRheading']['width']&&bQ>this['_textBoxHDRheading']['y']&&bQ<this['_textBoxHDRheading']['y']+this['_textBoxHDRheading']['height'])&&(window['location']['href']='/hdr',!0x0);}['drawOverlay'](){var bO;let bP=!(arguments['length']>0x0&&void 0x0!==arguments[0x0])||arguments[0x0];!0x1!==(null===(bO=ad['globalSettings'])||void 0x0===bO||null===(bO=bO['showoverlay'])||void 0x0===bO?void 0x0:bO['value'])&&(this['_mouseFresh']=performance['now']()-this['_lastMouseActivity']<this['_buttonTimeout'],this['_settingsFresh']=performance['now']()-this['_lastSettingsActivity']<this['_buttonTimeout'],bP&&(this['ufoDisplay']['setAlpha'](0x1),this['__drawTitleOverlay'](),this['__drawDebugOverlay'](),this['__drawPlayButton']()||(this['__drawColorSpaceOverlay'](),this['__drawButtonOverlay'](),this['_forceRefresh']=!0x1)));}['__drawPlayButton'](){var bO;if(!(null===(bO=ad['globalSettings'])||void 0x0===bO?void 0x0:bO['getSafeValue']('pause')))return!0x1;this['ufoScreens']['isPaused']||this['ufoScreens']['pause'](),void 0x0===this['_buttonPlay']&&(this['_buttonPlay']=new b1(this['ufoDisplay'],'/images/ufo-play.png'));const bP=Math['min'](this['ufoDisplay']['width']/0x2,this['ufoDisplay']['height']/0x2),bQ=(this['ufoDisplay']['width']-bP)/0x2,bR=(this['ufoDisplay']['height']-bP)/0x2;if(this['_buttonPlay']['complete'])this['ufoDisplay']['setAlpha'](0.7),this['ufoDisplay']['drawImage']({'source':this['_buttonPlay'],'x':bQ,'y':bR,'width':bP,'height':bP}),this['ufoDisplay']['setAlpha'](0x1);else{this['ufoDisplay']['fillCircle']({'x':bQ+bP/0x2,'y':bR+bP/0x2,'radius':bP/0x2,'color':'#0000C0A0'});let bS=this['_buttonPlayPlaceholder'];bS['reset'](),bS['push'](bQ+2.5*bP/0x8,bR+0x2*bP/0x8),bS['push'](bQ+6.5*bP/0x8,bR+0x4*bP/0x8),bS['push'](bQ+2.5*bP/0x8,bR+0x6*bP/0x8),bS['push'](bQ+2.5*bP/0x8,bR+0x2*bP/0x8),this['ufoDisplay']['drawPolygon']({'coords':bS,'color':'#00FF00A0'});}return!0x0;}['__drawButtonOverlay'](){var bO,bP;this['buttonsInitialized']||this['__initializeButtons'](this['ufoDisplay']);
1let bQ=this['_mouseFresh'],bR=null===(bO=this['ufoScreens']['props'])||void 0x0===bO||null===(bO=bO['ui'])||void 0x0===bO?void 0x0:bO['showButtons'],bS=null===(bP=ad['globalSettings'])||void 0x0===bP?void 0x0:bP['getSafeValue']('showbuttons');switch(bR??bS){case 0x0:bQ=!0x1;break;case 0x1:break;case 0x2:bQ=!0x0;}bQ&&(this['__buttonLayout'](),this['_buttonList']['drawAllButtons'](this['ufoDisplay'],{'embed':this['ufoDisplay']['isEmbedded'],'fullscreen':this['ufoDisplay']['isZoomed'],'windowed':!this['ufoDisplay']['isZoomed']}));}['__drawDebugOverlay'](){var bO,bP;let bQ=window['UFOProps']['debug'];var bR;if(void 0x0!==(null===(bO=ad['globalSettings'])||void 0x0===bO||null===(bO=bO['showdebug'])||void 0x0===bO?void 0x0:bO['value']))bQ=null===(bR=ad['globalSettings'])||void 0x0===bR?void 0x0:bR['showdebug']['value'];else{if(void 0x0!==(null===(bP=this['ufoScreens']['props'])||void 0x0===bP||null===(bP=bP['ui'])||void 0x0===bP?void 0x0:bP['showDebug'])){var bS;bQ=null===(bS=this['ufoScreens']['props'])||void 0x0===bS||null===(bS=bS['ui'])||void 0x0===bS?void 0x0:bS['showDebug'];}else this['ufoDisplay']['isEmbedded']&&(bQ=!0x1);}if(!bQ)return!0x1;const bT=this['HDR_STATUS_POS_MARGIN'];let bU=this['ufoDisplay']['height']/0x2-this['_textBoxDebugHeading']['height'];this['ufoDisplay']['draw']({'source':this['_textBoxDebugHeading'],'x':bT,'y':bU}),bU+=this['_textBoxDebugHeading']['height'],this['_textBoxDebug'][0x0]['color']='good'===this['ufoDisplay']['sync']['status']['category']?'color(rec2020\x200\x201\x200)':this['ufoDisplay']['sync']['status']['colorText'],this['_textBoxDebug'][0x0]['updateText']('|\x20status:\x20'+this['ufoDisplay']['sync']['status']['name']),this['_textBoxDebug'][0x1]['updateText']('|\x20frametime:\x20'+as['timePeriodFrameRender']['toFixed'](0x2)+'ms\x20/\x20'+as['timePeriodFrameFinal']['toFixed'](0x2)+'ms\x20total'),this['_textBoxDebug'][0x2]['updateText']('|\x20'+this['ufoDisplay']['width']+'x'+this['ufoDisplay']['height']+'\x20\x20'+this['ufoDisplay']['sync']['refreshRate']['toFixed'](0x2)+'\x20Hz\x20\x20'+this['ufoDisplay']['sync']['fps']['toFixed'](0x2)+'\x20fps'),this['_textBoxDebug'][0x3]['updateText']('|\x20engine:\x20'+this['ufoDisplay']['engineID']+'\x20\x20\x20colorspace:\x20'+this['ufoDisplay']['colorSpace']+'\x20\x20\x20scale:\x20'+this['ufoDisplay']['scaleFactor']+'x'),this['_textBoxDebug'][0x4]['updateText'](this['ufoDisplay']['debugMessage']?'|\x20MESSAGE:\x20'+this['ufoDisplay']['debugMessage']:'');for(let bV=0x0;bV<this['_debugLines'];bV++)this['ufoDisplay']['draw']({'source':this['_textBoxDebug'][bV],'x':bT,'y':bU}),bU+=this['_textBoxDebug'][bV]['height'];return!0x0;}['__drawTitleOverlay'](){var bO,bP,bQ,bR,bS,bT;let bU,bV=!0x0,bW=null===(bO=ad['globalSettings'])||void 0x0===bO?void 0x0:bO['getValue']('showtitle');const bX=null===(bP=ad['globalSettings'])||void 0x0===bP?void 0x0:bP['getValue']('showcredit'),bY=null===(bQ=this['ufoScreens']['props'])||void 0x0===bQ||null===(bQ=bQ['ui'])||void 0x0===bQ?void 0x0:bQ['showCredit'];if(null===(bR=window['UFOSystem'])||void 0x0===bR||!bR['native']||null!==(bS=window['UFOSystem'])&&void 0x0!==bS&&null!==(bS=bS['registration'])&&void 0x0!==bS&&bS['licensee']['startsWith']('Blur\x20Busters')||(bW=0x2),void 0x0!==bX?(bU=parseInt(bX),bW=0x2):void 0x0!==bY?(bU=parseInt(bY),bW=0x2):bU=0x1,void 0x0!==bW){if(0x0===bW)return!0x1;bV=0x1===bW;}if(bV&&!this['_mouseFresh']&&!this['_settingsFresh'])return;let bZ,c0,c1,c2,c3='#00FF00';a9['isWCG'](this['ufoDisplay'])&&(c3=this['_textColorWCG']['color'],a9['isHDR'](this['ufoDisplay'])&&ak['isDisplayHDR']()&&(this['_mouseFresh']||this['_settingsFresh'])&&(c3=this['_textColorHDR']['color']));let c4=this['_textBoxTitle']['height'];const c5=0x14,c6=this['ufoDisplay']['width'],c7=this['ufoDisplay']['height'];switch(bU){case 0x1:bZ=c5,c0=0x23,c1='left';break;case 0x2:bZ=c6/0x2,c0=0x23,c1='center';break;case 0x3:bZ=c6-c5,c0=0x23,c1='right';break;case 0x5:bZ=c6/0x2,c0=(c7-c4)/0x2,c1='center';break;case 0x4:bZ=c5,c0=(c7-c4)/0x2,c1='left';break;case 0x6:bZ=c6-c5,c0=(c7-c4)/0x2,c1='right';break;case 0x7:bZ=c5,c0=c7-c4-0x1e,c1='left';break;case 0x8:bZ=c6/0x2,c0=c7-c4-0x1e,c1='center';break;case 0x9:bZ=c6-c5,c0=c7-c4-0x1e,c1='right';}switch(c1){case'left':c2=0x0;break;case'center':c2=this['_textBoxTitle']['width']/0x2;break;case'right':c2=this['_textBoxTitle']['width'];}let c8='testufo.com';var c9,ca,cb,cc;if('framerates'!==this['ufoScreens']['name']&&(c8+='/'+this['ufoScreens']['name']),this['_textBoxTitle']['autoTextSize']=!0x0,this['_textBoxTitle']['style']['color']=c3,this['_textBoxTitle']['text']=this['ufoScreens']['title'],this['_textBoxURL']['autoTextSize']=!0x0,this['_textBoxURL']['style']['color']=c3,null!==(bT=window['UFOSystem'])&&void 0x0!==bT&&bT['native']){if(null!==(c9=window['UFOSystem'])&&void 0x0!==c9&&null!==(c9=c9['registration'])&&void 0x0!==c9&&c9['licensee']){if('Blur\x20Busters\x20DW2026'===(null===(ca=window['UFOSystem'])||void 0x0===ca||null===(ca=ca['registration'])||void 0x0===ca?void 0x0:ca['licensee'])){var cd;switch(null===(cd=window['UFOSystem'])||void 0x0===cd?void 0x0:cd['platform']){case'windows':this['_textBoxURL']['text']='TestUFO.exe\x20for\x20Windows\x20-\x20DisplayWeek\x202026\x20Preview';break;case'macos':this['_textBoxURL']['text']='TestUFO.app\x20for\x20MacOS\x20-\x20DisplayWeek\x202026\x20Preview';break;default:this['_textBoxURL']['text']='TestUFO\x20Native\x20Preview\x20-\x20Unknown\x20Platform';}}else{if('Blur\x20Busters'===(null===(cb=window['UFOSystem'])||void 0x0===cb||null===(cb=cb['registration'])||void 0x0===cb?void 0x0:cb['licensee']))this['_textBoxURL']['text']='TestUFO\x20Native\x20Preview\x20-\x20For\x20Blur\x20Busters\x20Internal\x20Use\x20Only';else{if(null!==(cc=window['UFOSystem'])&&void 0x0!==cc&&null!==(cc=cc['registration'])&&void 0x0!==cc&&cc['software']){var cf,cg;this['_textBoxURL']['text']=(null===(cf=window['UFOSystem'])||void 0x0===cf||null===(cf=cf['registration'])||void 0x0===cf?void 0x0:cf['software'])+'\x20-\x20Registered\x20to:\x20'+(null===(cg=window['UFOSystem'])||void 0x0===cg||null===(cg=cg['registration'])||void 0x0===cg?void 0x0:cg['licensee']);}else{var ch;this['_textBoxURL']['text']='TestUFO\x20Native\x20Preview\x20-\x20Time\x20Limited\x20Prerelease\x20-\x20Registered\x20to:\x20'+(null===(ch=window['UFOSystem'])||void 0x0===ch||null===(ch=ch['registration'])||void 0x0===ch?void 0x0:ch['licensee']);}}}}else this['_textBoxURL']['text']='TestUFO\x20Native\x20Preview\x20-\x20UNREGISTERED\x20VIOLATION\x20-\x20Please\x20contact\[email protected]';}else this['_textBoxURL']['text']=c8;return this['_textBoxTitle']['text']!==this['_prevTextBoxTitleText']&&(this['_prevTextBoxTitleText']=this['_textBoxTitle']['text'],this['__layoutTitleBox']()),this['ufoDisplay']['draw']({'source':this['_textBoxTitle'],'x':bZ-c2,'y':c0}),this['ufoDisplay']['draw']({'source':this['_textBoxURL'],'x':bZ-c2,'y':c0+this['_textBoxTitle']['height']-this['_textBoxURL']['height']}),!0x0;}['__layoutTitleBox'](){this['_textBoxTitle']['style']['marginRight']=0x1e,this['_textBoxTitle']['refresh'](),this['_textBoxURL']['refresh'](),this['_textBoxTitle']['width']<this['_textBoxURL']['width']&&(this['_textBoxTitle']['style']['marginRight']=this['_textBoxURL']['width']-this['_textBoxTitle']['width']+0x1e,this['_textBoxTitle']['refresh']());}['__drawColorSpaceOverlay'](){var bO,bP,bQ;this['__updateEngineMessage'](this['_forceRefresh']);
1let bR=this['_mouseFresh']||this['_settingsFresh'],bS=null===(bO=this['ufoScreens']['props'])||void 0x0===bO||null===(bO=bO['ui'])||void 0x0===bO?void 0x0:bO['showStatusHDR'],bT=null===(bP=ad['globalSettings'])||void 0x0===bP?void 0x0:bP['getSafeValue']('showhdr'),bU=!0x0;switch(null!==(bQ=window['UFOSystem'])&&void 0x0!==bQ&&bQ['native']&&'HDR'!==this['_commonColorCategory']&&(bU=!0x1),this['ufoDisplay']['height']<this['HDR_STATUS_MIN_CANVAS_HEIGHT']&&(bR=!0x1),bS??bT){case 0x0:bR=!0x1;break;case 0x1:break;case 0x2:bR=!0x0;}if(this['_textBoxHDRinfo']['visible']=bR,this['_textBoxHDRheading']['visible']=bR,!bR)return!0x1;const bV=this['ufoDisplay']['width']-this['HDR_STATUS_POS_MARGIN'],bW=this['ufoDisplay']['height']-this['HDR_STATUS_POS_FROM_BOTTOM'];return this['_textBoxHDRheading']['text']=this['_engineIndicator'],this['_textBoxHDRinfo']['autoTextSize']=!0x0,this['_textBoxHDRinfo']['text']=this['_engineSubheading'],this['_lastTextBoxTextHDR']===this['_textBoxHDRheading']['text']&&this['_lastSurface']===this['ufoDisplay']['surfaceID']&&this['_lastColorSpace']===this['ufoDisplay']['colorSpace']||(this['_lastTextBoxTextHDR']=this['_textBoxHDRheading']['text'],this['_lastSurface']=this['ufoDisplay']['surfaceID'],this['_lastColorSpace']=this['ufoDisplay']['colorSpace'],this['_textBoxHDRheading']['style']['marginLeft']=0x14,this['_textBoxHDRinfo']['measure'](),bU&&(this['_textBoxHDRheading']['measure'](),this['_textBoxHDRheading']['width']<this['_textBoxHDRinfo']['width']&&(this['_textBoxHDRheading']['style']['marginLeft']=this['_textBoxHDRinfo']['width']-this['_textBoxHDRheading']['width'],this['_textBoxHDRheading']['measure']()))),this['_textBoxHDRheading']['x']=bV-this['_textBoxHDRheading']['width'],this['_textBoxHDRheading']['y']=bW,this['ufoDisplay']['draw']({'source':this['_textBoxHDRheading'],'x':this['_textBoxHDRheading']['x'],'y':this['_textBoxHDRheading']['y']}),bU&&this['ufoDisplay']['draw']({'source':this['_textBoxHDRinfo'],'x':bV+0xa-this['_textBoxHDRinfo']['width'],'y':bW+this['_textBoxHDRheading']['height']-this['_textBoxHDRheading']['style']['sizeNumber']-this['HDR_STATUS_LINE_BOTTOM_MARGIN']}),!0x0;}['__updateEngineMessage'](){let bO=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];if(!this['ufoDisplay'])return;const bP=ak['isDisplayHDR'](),bQ=ak['getDisplayColorSpace'](),bR=a9['getColorSpaceProps'](bQ)??a9['COLORSPACE']['srgb'];let bS=ak['getDisplayColorSpaceCategory'](bP);const bT=this['ufoDisplay']['colorSpace'],bU=a9['getColorSpaceProps'](bT)??a9['COLORSPACE']['srgb'];let bV=bU['category'],bW=a9['getCommonColorSpaceCategory'](bS,bV);const bX=this['ufoDisplay']['engineName'];if(bP===this['_lastDisplayHDR']&&bQ===this['_lastDisplayColorSpace']&&bT===this['_lastCanvasColorSpace']&&bX===this['_lastEngineName']&&!bO)return;let bY;this['_lastDisplayHDR']=bP,this['_lastCanvasColorSpace']=bT,this['_lastEngineName']=bX,this['_lastDisplayColorSpace']=bQ,this['onSettingChange'](),bY='HDR'===bW?this['_textColorHDR']:'SDR'===bW&&'SDR'!==bV||bW!==bS?this['_textColorError']:this['_textColorSDR'];let bZ='SDR';'SDR'!==bV&&(bZ=bU['name']+'\x20/\x20'+bW),'2D'!==bX&&(bZ+='\x20/\x20'+bX),this['_engineIndicator']=bZ,'SDR'===bS&&'SDR'===bV?this['_engineSubheading']='Click\x20to\x20check\x20for\x20WCG/HDR\x20support.':'WCG'===bS&&'WCG'===bV?this['_engineSubheading']='OS\x20using\x20'+bR['label']+'\x20'+bS+'\x20/\x20Click\x20to\x20check\x20HDR\x20support.':'SDR'===bS&&'SDR'!==bV?this['_engineSubheading']='System\x20is\x20clipping\x20to\x20SDR\x20/\x20Click\x20to\x20configure\x20WCG/HDR':'HDR'===bS&&'HDR'!==bV&&'Safari'===ak['browser']?this['_engineSubheading']='OS\x20using\x20'+bR['label']+'\x20'+bS+'\x20/\x20Click\x20to\x20use\x20WebGPU\x20HDR.':'HDR'===bS&&'HDR'!==bV?this['_engineSubheading']='OS\x20using\x20'+bR['label']+'\x20'+bS+'\x20/\x20Browser\x20limiting\x20to\x20'+bV+'\x20/\x20Click\x20to\x20fix.':'HDR'!==bS&&'HDR'===bV?this['_engineSubheading']='OS\x20using\x20'+bR['label']+'\x20'+bS+'\x20/\x20Click\x20to\x20configure\x20HDR.':bS===bV&&bR['name']===bU['name']?this['_engineSubheading']='OS\x20also\x20using\x20'+bR['label']+'\x20'+bS:this['_engineSubheading']=bS===bV?'OS\x20using\x20'+bR['name']+'\x20'+bS+'\x20/\x20Browser\x20using\x20\x27'+bT+'\x27':'SDR'===bS?'System\x20is\x20clipping\x20to\x20SDR\x20/\x20Click\x20to\x20configure\x20WCG/HDR':'OS\x20using\x20'+bR['name']+'\x20'+bS+'.\x20Click\x20to\x20configure\x20WCG/HDR',this['_commonColorCategory']=bW,this['_engineSubheading']+='\x20\x20',this['_textBoxHDRheading']['style']['color']=bY,this['_textBoxHDRinfo']['style']['color']=bY,this['_textBoxHDRheading']['autoTextSize']=!0x0,this['_textBoxHDRinfo']['autoTextSize']=!0x0;}};window['UFOImport']||'undefined'!=typeof window&&(window['UFOProps']['importSupported']='noModule'in HTMLScriptElement['prototype'],window['UFOProps']['importSupported']?window['UFOImport']=function(bO){return import(bO);}:window['UFOImport']=function(bO){return new Promise((bP,bQ)=>{window['UFOImportID']='ufo_'+Math['random']()['toString'](0x24)['slice'](0x2);let bR=null;window[window['UFOImportID']]={'UFOModules':window['UFOModules'],'UFOProps':window['UFOProps'],'registerExportDefault':function(bT){bR={'default':bT};}};const bS=document['createElement']('script');window['UFOProps']['nonce']&&(bS['nonce']=window['UFOProps']['nonce']),b
1S['type']='text/javascript',bS['onload']=()=>{bR?(delete window[window['UFOImportID']],delete window['UFOImportID'],URL['revokeObjectURL'](bS['src']),bP(bR)):bQ(new Error('Module\x20registration\x20failed:\x20No\x20exports\x20received\x20from\x20'+bO));},bS['onerror']=bT=>{delete window[window['UFOImportID']],delete window['UFOImportID'],URL['revokeObjectURL'](bS['src']),bQ(new Error('Script\x20load\x20error:\x20'+bO+'\x20('+bT+')'));},fetch(bO)['then'](bT=>{if(!bT['ok'])throw new Error('Failed\x20to\x20load\x20module:\x20'+bO+'\x20('+bT['status']+')');return bT['text']();})['then'](bT=>{const bU=bT['match'](/export\s+default\s+class\s+([a-zA-Z_][a-zA-Z0-9_]*)/);if(!bU)throw new Error('Module\x20format\x20error:\x20Expected\x20\x27export\x20default\x20class\x27\x20in\x20'+bO);const bV=bU[0x1];bT=bT['replace'](/export\s+default\s+/,''),bT+='\x0awindow[window.UFOImportID]?.registerExportDefault?.('+bV+');';const bW=new Blob([bT],{'type':'text/javascript'});bS['src']=URL['createObjectURL'](bW),document['head']['appendChild'](bS);})['catch'](bT=>{bS['src']&&URL['revokeObjectURL'](bS['src']),delete window[window['UFOImportID']],delete window['UFOImportID'],bQ(bT);});});});var b7=window['UFOImport'],b8=class bO{constructor(bP){a1(this,'windowHTML','\x0a<div\x20class=\x22ufo-window\x22\x20\x0a\x20\x20\x20\x20\x20id=\x22ufo-window-blank\x22\x0a\x20\x20\x20\x20\x20data-width=\x22500px\x22>\x0a\x20\x20<div\x20class=\x22ufo-container\x22\x20tabindex=\x220\x22>\x0a\x20\x20</div>\x0a</div>\x0a'),this['_UFOWindowBase']=!0x0,this['initialized']=!0x1,this['_loaded']=!0x1,this['_ufoWindow']=null,this['_insertInto']='utility-overlays',this['_anchorElement']=null,this['_ufoDisplay']=bP,'undefined'!=typeof UFOModules&&void 0x0!==window['UFOModules']||a2['error'](),this['_resetSizeOnShow']=!0x0,this['_autoHideOnFocusLoss']=!0x0,this['_windowState']={'lastMode':'none','mode':'none','resizeableX':!0x1,'resizeableY':!0x1,'startX':0x0,'startY':0x0,'startWidth':0x0,'startHeight':0x0,'startLeft':0x0,'startTop':0x0,'defaultWidth':0x0,'defaultHeight':0x0,'minWidth':0x0,'maxWidth':0x0,'minHeight':0x0,'maxHeight':0x0},this['_clampedWidth']=0x0,this['_clampedHeight']=0x0,this['_adjustedMinWidth']=0x0,this['_adjustedMinHeight']=0x0,this['_adjustedMaxWidth']=0x0,this['_adjustedMaxHeight']=0x0,this['_focusOutsideHandler']=null,this['_attachedDragListeners']=!0x1,this['_attachedFocusLossOverrideListeners']=!0x1,this['_suppressFocusLoss']=!0x1,this['_isPointerDownInside']=!0x1,this['_focusLossReleaseTimer']=0x0,this['__onPointerDownInside']=this['__onPointerDownInside']['bind'](this),this['__onPointerUpDocument']=this['__onPointerUpDocument']['bind'](this),this['__onDragStart']=this['__onDragStart']['bind'](this),this['__onDragging']=this['__onDragging']['bind'](this),this['__onDragEnd']=this['__onDragEnd']['bind'](this);}['setPreferredSize'](bP,bQ){this['_ufoWindow']&&(bP&&(this['_ufoWindow']['style']['width']=bP),bQ&&(this['_ufoWindow']['style']['height']=bQ));}['show'](){let bP=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:{};if(!this['_ufoWindow']||!this['_loaded'])return;if(this['__attachDragListeners'](),this['_resetSizeOnShow']=bP['resetSize']??!0x0,this['_autoHideOnFocusLoss']=bP['autoClose']??!0x0,this['_resetSizeOnShow']&&(this['_windowState']['defaultWidth']&&(this['_ufoWindow']['style']['width']=this['_windowState']['defaultWidth']+'px'),this['_windowState']['defaultHeight']?this['_ufoWindow']['style']['height']=this['_windowState']['defaultHeight']+'px':this['_ufoWindow']['style']['height']=''),'visible'===this['_ufoWindow']['style']['visibility'])return void this['syncToolWindowPos']();this['__addGlobalFocusLossListeners'](),this['_ufoWindow']['classList']['add']('showing'),this['_ufoWindow']['style']['display']='block',this['_ufoWindow']['style']['position']='absolute',this['_ufoWindow']['style']['visibility']='visible',this['anchor'](bP['anchor']);let bQ=new Event('show');
1this['_ufoWindow']['dispatchEvent'](bQ),this['_ufoWindow']['style']['zIndex']=0x3e8,requestAnimationFrame(()=>{this['clampToScreenBoundary'](!0x0),this['_ufoWindow']['classList']['remove']('showing');});}['focus'](){const bP=this['_ufoWindow']['querySelector']('.tab,\x20button,\x20input,\x20select,\x20textarea,\x20a[href]');bP?bP['focus']():this['_ufoWindow']['focus']();}['hide'](){this['_ufoWindow']&&(this['__removeGlobalFocusLossListeners'](),this['__removeDragListeners'](),this['__onDragEnd'](),this['__clearFocusLossGuard'](),this['_ufoWindow']['style']['display']='none',this['_ufoWindow']['style']['visibility']='hidden',this['_ufoWindow']['dispatchEvent'](new Event('hide')),this['_windowState']['lastMode']='hiding',this['_windowState']['mode']='none');}['anchor'](bP){let bQ=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:null;bQ||(bQ=bP?'bottom':'center'),this['syncToolWindowPos'](bP,bQ);}get['hasAnchorElement'](){return!!this['_anchorElement'];}get['isLoaded'](){return!(!this['_ufoWindow']||!this['_loaded']);}get['isVisible'](){if(this['isLoaded'])return'none'!==this['_ufoWindow']['style']['display']&&'visible'===this['_ufoWindow']['style']['visibility'];}['__recalcWindowSizeConstraints'](bP,bQ){var bR;let bS=arguments['length']>0x2&&void 0x0!==arguments[0x2]&&arguments[0x2];this['_windowState']['defaultWidth']||(this['_windowState']['defaultWidth']=parseInt(this['_ufoWindow']['dataset']['width']),this['_windowState']['defaultHeight']=parseInt(this['_ufoWindow']['dataset']['height']),this['_windowState']['minWidth']=parseInt(this['_ufoWindow']['dataset']['minwidth']),this['_windowState']['maxWidth']=parseInt(this['_ufoWindow']['dataset']['maxwidth']),this['_windowState']['minHeight']=parseInt(this['_ufoWindow']['dataset']['minheight']),this['_windowState']['maxHeight']=parseInt(this['_ufoWindow']['dataset']['maxheight']));const bT=null===(bR=this['_ufoDisplay'])||void 0x0===bR?void 0x0:bR['isZoomed'];let bU=document['documentElement']['clientWidth'],bV=bT||bS?document['documentElement']['clientHeight']:document['documentElement']['scrollHeight'];bU-=0x2*bO['VIEWPORT_MARGIN_X'],bV-=0x2*bO['VIEWPORT_MARGIN_Y'],this['_adjustedMinWidth']=this['_windowState']['minWidth']||0x0,this['_adjustedMinHeight']=this['_windowState']['minHeight']||0x0;const bW=this['_windowState']['maxWidth']||bU,bX=this['_windowState']['maxHeight']||bV;this['_adjustedMaxWidth']=Math['min'](bU,bW),this['_adjustedMaxHeight']=Math['min'](bV,bX),this['_clampedWidth']=Math['min'](this['_adjustedMaxWidth'],Math['max'](this['_adjustedMinWidth'],bP)),this['_clampedHeight']=Math['min'](this['_adjustedMaxHeight'],Math['max'](this['_adjustedMinHeight'],bQ));}['clampToScreenBoundary'](){let bP=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];(bP||'none'===this['_windowState']['mode'])&&(this['clampSizeToScreen'](bP),this['clampPosToScreen'](!0x0));}['clampSizeToScreen'](){let bP=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];if(!this['isVisible'])return;const bQ=this['_ufoWindow']['getBoundingClientRect']();this['__recalcWindowSizeConstraints'](bQ['width'],bQ['height'],bP),this['_clampedWidth']!==bQ['width']&&(this['_ufoWindow']['style']['width']=this['_clampedWidth']+'px'),this['_clampedHeight']!==bQ['height']&&(this['_ufoWindow']['style']['height']=this['_clampedHeight']+'px');}['clampPosToScreen'](){var bP;let bQ=arguments['length']>0x0&&void 0x0!==arguments[0x0]&&arguments[0x0];if(!this['isVisible'])return;const bR=this['_ufoWindow']['getBoundingClientRect'](),bS=window['scrollX']||0x0,bT=window['scrollY']||0x0,bU=bR['left']+bS,bV=bR['top']+bT,bW=bR['right']+bS,bX=bR['bottom']+bT;let bY=bQ?bS:0x0,bZ=bQ?bT:0x0;bY<bU&&(bY=bU),bZ<bV&&(bZ=bV);const c0=null===(bP=this['_ufoDisplay'])||void 0x0===bP?void 0x0:bP['isZoomed'];let c1=document['documentElement']['clientWidth'],c2=c0?document['documentElement']['clientHeight']:document['documentElement']['scrollHeight'];bW>c1&&(bY=c1-bR['width']),bX>c2&&(bZ=c2-bR['height']),bY<0x0&&(bY=0x0),bZ<0x0&&(bZ=0x0),bU!=bY&&(this['_ufoWindow']['style']['left']=bY+'px'),bV!=bZ&&(this['_ufoWindow']['style']['top']=bZ+'px');}['syncToolWindowPos'](){var bP;let bQ=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:null,bR=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:null;if(!this['isLoaded'])return;bQ&&(this['_anchorElement']=bQ),bR&&(this['_align']=bR),null!==(bP=this['_ufoDisplay'])&&void 0x0!==bP&&bP['isZoomed']&&this['clampSizeToScreen']();const bS=this['_ufoWindow']['getBoundingClientRect'](),bT=this['_anchorElement']?this['_anchorElement']['getBoundingClientRect']():document['documentElement']['getBoundingClientRect']();if('bottom'===this['_align']){let bU=bT['left'];bU+bS['width']>window['innerWidth']&&(bU=window['innerWidth']-bS['width'],bU<0x0&&(bU=0x0)),this['_ufoWindow']['style']['top']=bT['bottom']+window['scrollY']+0x4+'px',this['_ufoWindow']['style']['left']=bU-0x4+'px';}else{let bV=0x64;this['_ufoWindow']['style']['top']=bT['top']+window['scrollY']+bV+'px',this['_ufoWindow']['style']['left']=(bT['width']-bS['width'])/0x2+'px';}this['clampPosToScreen'](!0x0),this['_ufoWindow']['classList']['remove']('showing');}
1['updateExternalField'](bP){if(!this['isLoaded'])return;if(!this['_anchorElement'])return;if(void 0x0===this['_anchorElement']['value'])return;if(this['_anchorElement']['value']===bP)return;let bQ=null;if(this['_updating']++,'INPUT'===this['_anchorElement']['tagName'])this['_anchorElement']['value']=bP,this['_anchorElement']['dispatchEvent'](new Event('change'));else{if('SELECT'===this['_anchorElement']['tagName']){var bR;bQ=this['_anchorElement']['querySelector']('option[data-custom=\x22true\x22]'),bQ?(bQ['innerText']=''+((null===(bR=this['_anchorElement'])||void 0x0===bR||null===(bR=bR['dataset'])||void 0x0===bR?void 0x0:bR['customLabel'])??'Custom:\x20')+bP,bQ['setAttribute']('value',bP),this['_anchorElement']['dispatchEvent'](new Event('change')),bQ['selected']=!0x0):this['_anchorElement']['value']=bP;}}this['_updating']--;}['initializeExternalFieldListeners'](bP){if(!this['_ufoWindow']||!this['_loaded'])return;const bQ=this;document['querySelectorAll'](bP)['forEach'](function(bR){bR['removeEventListener']('focus',bS=>bQ['onFieldFocus'](bS)),bR['addEventListener']('focus',bS=>bQ['onFieldFocus'](bS)),bR['removeEventListener']('click',bS=>bQ['onFieldFocus'](bS)),bR['addEventListener']('click',bS=>bQ['onFieldFocus'](bS)),bR['removeEventListener']('change',bS=>bQ['onFieldChange'](bS)),bR['addEventListener']('change',bS=>bQ['onFieldChange'](bS)),bR['removeEventListener']('focusout',bS=>bQ['onFieldLostFocus'](bS)),bR['addEventListener']('focusout',bS=>bQ['onFieldLostFocus'](bS)),bR['removeEventListener']('keydown',bS=>bQ['onFieldKeyDown'](bS)),bR['addEventListener']('keydown',bS=>bQ['onFieldKeyDown'](bS));});}['onBrowserResize'](){var bP;this['isVisible']&&0x1===(null===(bP=window['visualViewport'])||void 0x0===bP?void 0x0:bP['scale'])&&(this['_ufoWindow']['classList']['add']('resizing'),this['hasAnchorElement']?this['syncToolWindowPos']():this['clampToScreenBoundary'](),this['_ufoWindow']['classList']['remove']('resizing'));}['onFieldFocus'](bP){var bQ;this['__focusBelongsToUs'](null==bP?void 0x0:bP['currentTarget'])||this['hide'](),this['isVisible']||(this['show']({'anchor':null==bP?void 0x0:bP['currentTarget']}),null===(bQ=this['_ufoWindow'])||void 0x0===bQ||bQ['dispatchEvent'](new Event('change')));}['onFieldChange'](bP){var bQ;null===(bQ=this['_ufoWindow'])||void 0x0===bQ||bQ['dispatchEvent'](new Event('change'));}['__focusBelongsToUs'](bP){var bQ,bR;return!!(bP&&(this['_ufoWindow']===bP||null!==(bQ=this['_ufoWindow'])&&void 0x0!==bQ&&bQ['contains'](document['activeElement'])||null!==(bR=this['_ufoWindow'])&&void 0x0!==bR&&bR['contains'](bP)||this['_anchorElement']&&this['_anchorElement']['contains'](bP)||this['_anchorElement']&&this['_anchorElement']['contains'](document['activeElement'])));}['onFieldLostFocus'](bP){if(this['_suppressFocusLoss'])return;let bQ=(null==bP?void 0x0:bP['relatedTarget'])||(null==bP?void 0x0:bP['currentTarget']);bQ&&(this['__focusBelongsToUs'](bQ)||setTimeout(()=>{this['__focusBelongsToUs'](bQ)||this['hide']();},0xa));}['onFieldKeyDown'](bP){'Escape'===bP['key']&&this['hide']();}['getActiveTabId'](){if(!this['isLoaded'])return;let bP=this['_ufoWindow']['querySelector']('.tab-container\x20.tab.active');return bP?bP['dataset']['id']:(bP=this['_ufoWindow']['querySelector']('.tab'),bP?bP['dataset']['id']:null);}['switchTab'](bP){var bQ;if(!this['isLoaded'])return;for(;bP&&!bP['classList']['contains']('tab');)bP=bP['parentElement'];if(!bP)return;const bR=null===(bQ=bP['dataset'])||void 0x0===bQ?void 0x0:bQ['id'];if(!bR||this['getActiveTabId']()===bR)return;this['_ufoWindow']['querySelectorAll']('.tab')['forEach'](function(bU){bU['classList']['remove']('active');}),this['_ufoWindow']['querySelectorAll']('.tab-content')['forEach'](function(bU){bU['classList']['remove']('active');});const bS=this['_ufoWindow']['querySelector']('.tab[data-id=\x22'+bR+'\x22]'),bT=this['_ufoWindow']['querySelector']('.tab-content[data-id=\x22'+bR+'\x22]');bS&&bS['classList']['add']('active'),bT&&bT['classList']['add']('active'),requestAnimationFrame(()=>{this['clampToScreenBoundary'](!0x0);});}['getSliderInfo'](bP){if(!this['isLoaded'])return;if(!bP)return null;const bQ=bP['closest']('.slider-container'),bR=bQ['querySelector']('.slider'),bS=bQ['querySelector']('.value'),bT=bQ['querySelector']('.label')['innerText'],bU=parseFloat(bR['step'])!=parseInt(bR['step']);return bR['dataset']['digits']&&parseInt(bR['dataset']['digits']),{'sliderContainer':bQ,'sliderElement':bR,'valueElement':bS,'label':bT,'isFloat':bU,'step':bU?parseFloat(bR['step']):parseInt(bR['step']),'min':bU?parseFloat(bR['min']):parseInt(bR['min']),'max':bU?parseFloat(bR['max']):parseInt(bR['max']),'value':bU?parseFloat(bR['value']):parseInt(bR['value'])};}['updateValueFromSlider'](bP){if(!this['isLoaded'])return;const bQ=bP['closest']('.slider-container')['querySelector']('.value');return!!bQ&&(bQ['value']=parseFloat(parseFloat(bP['value'])['toFixed'](bP['dataset']['digits'])),!0x0);}['updateSliderPosition'](bP){if(!this['isLoaded'])return;const bQ=this['getSliderInfo'](bP);let bR=''===bP['value']?0x0:bQ['isFloat']?parseFloat(bP['value']):parseInt(bP['value'],0xa);return!isNaN(bR)&&(bQ['min']>bQ['value']?bQ['sliderElement']['value']=bQ['min']:bQ['max']<bQ['value']?bQ['sliderElement']['value']=bQ['max']:bQ['sliderElement']['value']=bR,!0x0);}['sanitizeSliderValueInput'](bP){if(!this['isLoaded'])return;const bQ=this['getSliderInfo'](bP);let bR=0x0;''!==bP['value']&&(bR=bQ['isFloat']?parseFloat(bP['value']):parseInt(bP['value'],0xa)),(isNaN(bR)||''===bR)&&(bR=0x0),bR=Math['min'](Math['max'](bR,bQ['min']),bQ['max']),bP['value']=bR,this['updateSliderPosition'](bP);}['initializeListeners'](){if(!this['isLoaded'])return;const bP=this['_ufoWindow']['querySelector']('.close-button');bP&&(bP['addEventListener']('click',()=>this['hide']()),bP['addEventListener']('keydown',bQ=>{['Enter','\x20','Escape']['includes'](bQ['key'])&&(this['hide'](),bQ['preventDefault']());})),this['_ufoWindow']['addEventListener']('keydown',bQ=>{'Escape'===bQ['key']&&(this['hide'](),bQ['preventDefault']());}),this['_ufoWindow']['addEventListener']('click',bQ=>{'none'===this['_windowState']['lastMode']&&this['clampToScreenBoundary']();}),this['_ufoWindow']['addEventListener']('dblclick',bQ=>{this['clampToScreenBoundary']();}),this['_ufoWindow']['addEventListener']('focusout',bQ=>{this['onFieldLostFocus'](bQ);}),this['_ufoWindow']['addEventListener']('close',bQ=>{this['hide']();}),this['_ufoWindow']['querySelectorAll']('.tab')['forEach'](bQ=>{bQ['addEventListener']('keydown',bR=>{['Enter','\x20','Escape']['includes'](bR['key'])&&(this['switchTab'](bR['target']),bR['preventDefault']());}),bQ['addEventListener']('click',bR=>this['switchTab'](bR['target']));}),this['_ufoWindow']['querySelectorAll']('.info-heading')['forEach'](bQ=>{bQ['addEventListener']('keydown',bR=>{['Enter','\x20']['includes'](bR['key'])&&(this['__expandableBlock'](bR['target']),bR['preventDefault']());}),bQ['addEventListener']('click',bR=>this['__expandableBlock'](bR['target']));}),this['_ufoWindow']['querySelectorAll']('.slider-container\x20.slider')['forEach'](bQ=>{bQ['addEventListener']('input',bR=>{this['updateValueFromSlider'](bR['target']);});}),this['_ufoWindow']['querySelectorAll']('.slider-container\x20.value')['forEach'](bQ=>{bQ['addEventListener']('input',bR=>this['updateSliderPosition'](bR['target'])),bQ['addEventListener']('blur',bR=>this['sanitizeSliderValueInput'](bR['target'])),bQ['addEventListener']('keydown',bR=>{'Enter'===bR['key']&&(this['sanitizeSliderValueInput'](bR['target']),bR['preventDefault']());});}),'undefined'!=typeof window&&window['PointerEvent']?this['_ufoWindow']['addEventListener']('pointerdown',this['__onPointerDownInside'],!0x0):(this['_ufoWindow']['addEventListener']('mousedown',this['__onPointerDownInside'],!0x0),this['_ufoWindow']['addEventListener']('touchstart',this['__onPointerDownInside'],{'passive':!0x0,'capture':!0x0})),this['__initializeWindowDragListeners']();}['__getPointerCoordinates'](bP){return bP['touches']&&bP['touches']['length']>0x0?{'x':bP['touches'][0x0]['clientX'],'y':bP['touches'][0x0]['clientY']}:{'x':bP['clientX'],'y':bP['clientY']};}['__initializeWindowDragListeners'](){if(!this['isLoaded'])return;this['_windowState']['defaultWidth']=parseInt(this['_ufoWindow']['dataset']['width']),this['_windowState']['defaultHeight']=parseInt(this['_ufoWindow']['dataset']['height']),this['_windowState']['minWidth']=parseInt(this['_ufoWindow']['dataset']['minwidth']),this['_windowState']['maxWidth']=parseInt(this['_ufoWindow']['dataset']['maxwidth']),this['_windowState']['minHeight']=parseInt(this['_ufoWindow']['dataset']['minheight']),this['_windowState']['maxHeight']=parseInt(this['_ufoWindow']['dataset']['maxheight']),this['_windowState']['resizeableX']=this['_windowState']['minWidth']>0x0||this['_windowState']['maxWidth']>
10x0,this['_windowState']['resizeableY']=this['_windowState']['minHeight']>0x0||this['_windowState']['maxHeight']>0x0,(this['_windowState']['resizeableX']||this['_windowState']['resizeableY'])&&this['_ufoWindow']['classList']['add']('resizable');const bP=this['_ufoWindow']['querySelector']('.ufo-container');bP&&(bP['addEventListener']('mousedown',bQ=>{bQ['target']['closest']('.main-container')||this['__onDragStart'](bQ);}),bP['addEventListener']('touchstart',bQ=>{bQ['target']['closest']('.main-container')||this['__onDragStart'](bQ);}),bP['addEventListener']('dblclick',bQ=>{bQ['target']['closest']('.main-container')||this['clampToScreenBoundary']();}));}['__attachDragListeners'](){this['_ufoWindow']&&!this['_attachedDragListeners']&&(document['addEventListener']('mousemove',this['__onDragging']),document['addEventListener']('touchmove',this['__onDragging'],{'passive':!0x1}),document['addEventListener']('mouseup',this['__onDragEnd']),document['addEventListener']('touchend',this['__onDragEnd']),document['addEventListener']('touchcancel',this['__onDragEnd']),this['_attachedDragListeners']=!0x0);}['__removeDragListeners'](){this['_attachedDragListeners']&&(document['removeEventListener']('mousemove',this['__onDragging']),document['removeEventListener']('touchmove',this['__onDragging'],{'passive':!0x1}),document['removeEventListener']('mouseup',this['__onDragEnd']),document['removeEventListener']('touchend',this['__onDragEnd']),document['removeEventListener']('touchcancel',this['__onDragEnd']),this['_attachedDragListeners']=!0x1);}['__attachFocusLossOverrideListeners'](){if(!this['_ufoWindow']||this['_attachedFocusLossOverrideListeners'])return;const bP=!0x0;document['addEventListener']('pointerup',this['__onPointerUpDocument'],bP),document['addEventListener']('pointercancel',this['__onPointerUpDocument'],bP),document['addEventListener']('mouseup',this['__onPointerUpDocument'],bP),document['addEventListener']('touchend',this['__onPointerUpDocument'],bP),document['addEventListener']('touchcancel',this['__onPointerUpDocument'],bP),this['_attachedFocusLossOverrideListeners']=!0x0;}['__detachFocusLossOverrideListeners'](){this['_attachedFocusLossOverrideListeners']&&(document['removeEventListener']('pointerup',this['__onPointerUpDocument'],!0x0),document['removeEventListener']('pointercancel',this['__onPointerUpDocument'],!0x0),document['removeEventListener']('mouseup',this['__onPointerUpDocument'],!0x0),document['removeEventListener']('touchend',this['__onPointerUpDocument'],!0x0),document['removeEventListener']('touchcancel',this['__onPointerUpDocument'],!0x0),this['_attachedFocusLossOverrideListeners']=!0x1);}['__onPointerDownInside'](bP){this['isVisible']&&(this['_isPointerDownInside']||(this['_isPointerDownInside']=!0x0,this['_suppressFocusLoss']=!0x0,this['__clearFocusLossTimer'](),this['__attachFocusLossOverrideListeners']()));}['__onPointerUpDocument'](){this['__detachFocusLossOverrideListeners'](),this['_isPointerDownInside']=!0x1,this['__clearFocusLossTimer'](),this['_focusLossReleaseTimer']=setTimeout(()=>{this['_focusLossReleaseTimer']=0x0,this['_suppressFocusLoss']=!0x1,this['isVisible']&&!this['__focusBelongsToUs'](document['activeElement'])&&this['focus']();},0xa);}['__clearFocusLossTimer'](){this['_focusLossReleaseTimer']&&(clearTimeout(this['_focusLossReleaseTimer']),this['_focusLossReleaseTimer']=0x0);}['__clearFocusLossGuard'](){this['_suppressFocusLoss']=!0x1,this['_isPointerDownInside']=!0x1,this['__clearFocusLossTimer'](),this['__detachFocusLossOverrideListeners']();}['__onDragStart'](bP){if(!this['_ufoWindow']||'none'!==this['_windowState']['mode'])return;this['_windowState']['lastMode']='none','touchstart'!==bP['type']&&bP['preventDefault'](),bP['stopPropagation']();const bQ=this['__getPointerCoordinates'](bP);if(this['_windowState']['mode']='moving',this['_windowState']['resizeableX']||this['_windowState']['resizeableY']){const bR=this['_ufoWindow']['querySelector']('.ufo-container'),bS=bR?bR['getBoundingClientRect']():this['_ufoWindow']['getBoundingClientRect']();bQ['x']>bS['right']-bO['CORNER_RESIZE_HANDLE_SIZE']&&bQ['y']>bS['bottom']-bO['CORNER_RESIZE_HANDLE_SIZE']&&(this['_windowState']['mode']='resizing-corner');}switch(this['_windowState']['startX']=bQ['x'],this['_windowState']['startY']=bQ['y'],this['_ufoWindow']['classList']['add']('dragging'),this['_windowState']['mode']){case'moving':this['_ufoWindow']['style']['cursor']='move',this['_windowState']['startLeft']=this['_ufoWindow']['offsetLeft'],this['_windowState']['startTop']=this['_ufoWindow']['offsetTop'];break;case'resizing-corner':this['_ufoWindow']['style']['cursor']='se-resize',this['_ufoWindow']['classList']['add']('resizing'),this['_windowState']['startWidth']=this['_ufoWindow']['offsetWidth'],this['_windowState']['startHeight']=this['_ufoWindow']['offsetHeight'];}}['__onDragging'](bP){if(!this['_ufoWindow']||'none'===this['_windowState']['mode'])return;this['_windowState']['lastMode']=this['_windowState']['mode'],bP['preventDefault'](),bP['stopPropagation']();const bQ=this['__getPointerCoordinates'](bP),bR=(this['_ufoWindow']['getBoundingClientRect'](),bQ['x']-this['_windowState']['startX']),bS=bQ['y']-this['_windowState']['startY'];switch(this['__recalcWindowSizeConstraints'](this['_windowState']['startWidth'],this['_windowState']['startHeight']),this['_windowState']['mode']){case'moving':let bT=this['_windowState']['startLeft']+bR,bU=this['_windowState']['startTop']+bS;bU<0x0&&(bU=0x0),this['_ufoWindow']['style']['left']=bT+'px',this['_ufoWindow']['style']['top']=bU+'px';break;case'resizing-corner':let bV=this['_windowState']['startWidth']+bR;bV>this['_adjustedMaxWidth']&&(bV=this['_adjustedMaxWidth']),bV<this['_adjustedMinWidth']&&(bV=this['_adjustedMinWidth']);let bW=this['_windowState']['startHeight']+bS;bW>this['_adjustedMaxHeight']&&(bW=this['_adjustedMaxHeight']),bW<this['_adjustedMinHeight']&&(bW=this['_adjustedMinHeight']),this['_windowState']['resizeableX']&&(this['_ufoWindow']['style']['width']=bV+'px'),this['_windowState']['resizeableY']&&(this['_ufoWindow']['style']['height']=bW+'px');}}['__onDragEnd'](){if(this['_ufoWindow']&&'none'!==this['_windowState']['mode']){switch(this['_windowState']['mode']){case'moving':break;case'resizing-corner':this['_ufoWindow']['classList']['remove']('resizing');}this['_ufoWindow']['classList']['remove']('dragging'),this['_ufoWindow']['style']['cursor']='default',this['_windowState']['mode']='none';}}async['__loadHTML'](bP){try{const bQ=await fetch(bP);return await bQ['text']();}catch(bR){throw a2['error'](),bR;}}['insertIntoDOM'](bP,bQ,bR){var bS,bT;const bU=new DOMParser()['parseFromString'](bP,'text/html'),bV=document['createElement']('div');bV['visiblity']='hidden',bV['innerHTML']=bU['body']['innerHTML'];let bW=bU['getElementsByClassName']('ufo-window')[0x0]['id'];bV['dataset']['window']=bW,document['getElementById'](this['_insertInto'])['appendChild'](bV),this['_loaded']=!0x0,this['_ufoWindow']=document['getElementById'](bW),this['_ufoWindow']['classList']['add']('showing'),this['hide'](),this['setPreferredSize'](null===(bS=this['_ufoWindow'])||void 0x0===bS?void 0x0:bS['dataset']['width'],null===(bT=this['_ufoWindow'])||void 0x0===bT?void 0x0:bT['dataset']['height']),this['initializeListeners'](),bV['style']['visibility']='visible',requestAnimationFrame(()=>this['syncToolWindowPos'](bQ,bR));}['__selectableBlock'](bP){if(!(bP instanceof Node))return;if(!window['getSelection'])return;let bQ=window['getSelection'](),bR=document['createRange']();bR['selectNodeContents'](bP),bQ['removeAllRanges'](),bQ['addRange'](bR);}['__expandableBlock'](bP){bP['closest']('.information')['classList']['toggle']('expand'),this['clampToScreenBoundary']();}['__addGlobalFocusLossListeners'](){this['_autoHideOnFocusLoss']?(this['_focusOutsideHandler']=bP=>{var bQ,bR;null!==(bQ=this['_ufoWindow'])&&void 0x0!==bQ&&bQ['contains'](bP['target'])||null!==(bR=this['_anchorElement'])&&void 0x0!==bR&&bR['contains'](bP['target'])||this['_suppressFocusLoss']||bP['clientX']>=0x0&&bP['clientX']<=window['innerWidth']&&bP['clientY']>
1=0x0&&bP['clientY']<=window['innerHeight']&&(this['__removeGlobalFocusLossListeners'](),this['hide']());},setTimeout(()=>{this['isVisible']&&(document['addEventListener']('click',this['_focusOutsideHandler'],!0x0),document['addEventListener']('focusin',this['_focusOutsideHandler'],!0x0));},0x64)):this['__removeGlobalFocusLossListeners']();}['__removeGlobalFocusLossListeners'](){this['_focusOutsideHandler']&&(document['removeEventListener']('click',this['_focusOutsideHandler'],!0x0),document['removeEventListener']('focusin',this['_focusOutsideHandler'],!0x0)),this['_focusOutsideHandler']=null;}};a1(b8,'VIEWPORT_MARGIN_X',0x8),a1(b8,'VIEWPORT_MARGIN_Y',0x3),a1(b8,'CORNER_RESIZE_HANDLE_SIZE',0x1e);var b9=b8;setTimeout(()=>{window['UFOModules']=window['UFOModules']||new UFOModules(),window['UFOModules']['UFOWindowBase']=b9,window['UFOModules']['UFODisplay']=aZ;},0x0);var ba=class bP{constructor(){let bQ=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:null;this['_UFOWindowManager']=!0x0,this['_ufoWindowsMap']=new Map(),this['_ufoDisplay']=bQ,this['_ufoWindowPath']='/window/',this['_ufoWindowPrefix']='window-',this['_ufoWindowSuffix']='.js';}['attach'](bQ){this['_ufoDisplay']=bQ;}['has'](bQ){return this['_ufoWindowsMap']['has'](bQ);}['get'](bQ){return this['_ufoWindowsMap']['get'](bQ);}['hideAll'](){for(const [bQ,bR]of this['_ufoWindowsMap'])bR&&bR['isVisible']&&bR['hide']();}['onSizeChange'](){for(const [bR,bS]of this['_ufoWindowsMap']){var bQ;null==bS||null===(bQ=bS['onBrowserResize'])||void 0x0===bQ||bQ['call'](bS);}}['show'](bQ){let bR=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:{};bR['showing']=!0x0;const bS=this['get'](bQ);if(null!=bS&&bS['_UFOWindowBase'])bS['isLoaded']&&(bR['preserve']&&bS['isVisible']||bS['show'](bR),a2['log']());else{if((null==bS?void 0x0:bS['state'])===bP['STATE_LOADING'])return bR['state']=bP['STATE_AUTOSHOW'],void this['_ufoWindowsMap']['set'](bQ,bR);bR['state']=bP['STATE_AUTOSHOW'],this['load'](bQ,bR)['then'](bT=>{a2['log']();})['catch'](bT=>{a2['throw']();});}}async['load'](bQ){var bR;let bS=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:{};if(a2['log'](),this['has'](bQ))return this['get'](bQ);bS['state']||(bS['state']=bP['STATE_LOADING']),this['_ufoWindowsMap']['set'](bQ,bS),bP['DEBUG_LOAD_DELAY']>0x0&&await new Promise(bU=>setTimeout(bU,bP['DEBUG_LOAD_DELAY']));let bT=''+this['_ufoWindowPath']+this['_ufoWindowPrefix']+bQ+this['_ufoWindowSuffix']+'?version='+(null===(bR=window['UFOProps'])||void 0x0===bR?void 0x0:bR['date']);return b7(bT)['then'](bU=>{a2['log']();const bV=this['get'](bQ),bW=new bU['default'](this['_ufoDisplay']);return this['_ufoWindowsMap']['set'](bQ,bW),(null==bV?void 0x0:bV['state'])===bP['STATE_AUTOSHOW']&&(bS=bV,bW['show'](bS)),bW;})['catch'](bU=>{a2['throw']();});}static['updateText'](bQ,bR){bQ&&('string'==typeof bQ&&(bQ=document['getElementById'](bQ)),bQ instanceof HTMLElement&&(bQ['innerHTML']=bR));}static['selectText'](bQ){if(bQ&&('string'==typeof bQ&&(bQ=document['getElementById'](bQ)),bQ instanceof HTMLElement&&window['getSelection'])){var bR=window['getSelection'](),bS=document['createRange']();bS['selectNodeContents'](bQ),bR['removeAllRanges'](),bR['addRange'](bS);}}};a1(ba,'DEBUG_LOAD_DELAY',0x0),a1(ba,'STATE_LOADING','loading'),a1(ba,'STATE_AUTOSHOW','show');var bb=ba,bc=class bQ extends ad{constructor(){super(),this['_UFOGlobalSettings']=!0x0,this['_groupName']='global',this['PREFIX']='global',this['SYNC']=!0x0,this['fromJSON'](bQ['globalSettingsJSON']),this['__portAllLegacySettings'](),ad['globalSettings']=this;}['__portAllLegacySettings'](){const bR=(bU,bV)=>{let bW=bV||bU,bX=localStorage['getItem']('ufosettings.GLOBAL.'+bU);bX&&(localStorage['setItem'](ad['PREFIX_LOCALSTORAGE']+'.'+this['PREFIX']+'.'+bW,bX),localStorage['removeItem']('ufosettings.GLOBAL.'+bU));};bR('highpower'),bR('kiosk');const bS='ufosettings.GLOBAL.hdr',bT=localStorage['getItem'](bS);bT&&(ad['TRUTHY']['has'](bT)?this['setValue']('colorspace','auto'):this['setValue']('colorspace','srgb'),localStorage['removeItem'](bS),this['__savePersistentSetting']('colorspace'),delete this['hdr'],this['hdr']=void 0x0),(ad['TRUTHY']['has'](this['getValue']('highpower'))||ad['FALSY']['has'](this['getValue']('highpower')))&&this['setValue']('highpower','mac');}};a1(bc,'settingsJSONschema',ad['settingsJSONschema']['additionalProperties']['properties']={...ad['settingsJSONschema']['additionalProperties']['properties'],'ui':{'type':'boolean'}}),a1(bc,'globalSettingsJSON',{'testufo':{'label':'TestUFO\x20Screen','type':'string','hidden':!0x0,'hiddenFromURL':!0x0,'persistent':!0x1,'ui':!0x1},'sectiongraphics':{'type':'section','label':'Graphics\x20Settings','ui':!0x0},'scale':{'label':'Preferred\x20Pixel\x20Scale','subheading':'1:1\x20Native\x20Resolution','type':'select','format':'float','persistent':!0x0,'ui':!0x0,'default':0x0,'min':-0x40,'max':0x40,'options':[{'value':0x0,'text':'Default\x20Browser/OS\x20DPI','web':!0x0},{'value':0x0,'text':'———','enabled':!0x1,'web':!0x0},{'value':0.25,'text':'0.25x\x20Native\x20Resolution\x20(25%)','easteregg':!0x0},{'value':0.5,'text':'0.5x\x20Native\x20Resolution\x20(50%)','easteregg':!0x0},{'value':0x1,'text':'1:1\x20Display\x20Native\x20(100%\x20Zoom)'},{'value':1.5,'text':'1.5x\x20Native\x20Resolution\x20(150%)','easteregg':!0x0},{'value':0x2,'text':'2x\x20Native\x20Resolution\x20(200%)'},{'value':0x3,'text':'3x\x20Native\x20Resolution\x20(300%)'},{'value':0x4,'text':'4x\x20Native\x20Resolution\x20(400%)'},{'value':0x5,'text':'5x\x20Native\x20Resolution\x20(500%)','easteregg':!0x0},{'value':0x6,'text':'6x\x20Native\x20Resolution\x20(600%)'},{'value':0x7,'text':'7x\x20Native\x20Resolution\x20(700%)','easteregg':!0x0},{'value':0x8,'text':'8x\x20Native\x20Resolution\x20(800%)','easteregg':!0x0},{'value':0x0,'text':'———','enabled':!0x1,'easteregg':!0x0},{'value':-0.5,'text':'0.5x\x20Browser/OS\x20DPI','easteregg':!0x0},{'value':-0x2,'text':'2x\x20Browser/OS\x20DPI','easteregg':!0x0}],'info':'\x0a<h2>
1Custom\x20Pixel\x20Scaling\x20/\x20Zoom\x20/\x20Native\x20Resolution</h2>\x0a<p>This\x20setting\x20lets\x20you\x20customize\x20the\x20pixel\x20scaling\x20for\x20TestUFO\x20graphics\x20on\x20your\x20display.</p>\x0a<p>You\x20can\x20use\x20your\x20system\x20default\x20zoom\x20factor,\x20or\x20you\x20can\x20override\x20it\x20to\x20use\x20a\x20custom\x20zoom\x20factor.\x20Specific\x20TestUFO\x20screens\x20work\x20best\x20at\x20native\x20resolution.</p>\x0a<p>To\x20verify\x20TestUFO\x20is\x20doing\x201:1\x20native\x20resolution,\x20see\x20the\x20<a\x20href=\x27/resolution\x27\x20target=\x27_blank\x27>Resolution\x20Test</a>\x20screen.</p>\x0a<p><span\x20class=\x22highlight-green\x22>Optional\x20Square\x20Pixels:</span>\x20If\x20you\x20prefer\x20square\x20pixels\x20(nearest\x20neighbour\x20/\x20pixelated)\x20or\x20the\x20bilinear\x20scaling\x20is\x20too\x20blurry,\x20change\x20\x22Scale\x20Mode\x22\x20in\x20TestUFO\x20Settings\x20via\x20gear\x20icon.</p>\x0a'},'scalemode':{'label':'Preferred\x20Scaling\x20Mode','subheading':'Smooth\x20or\x20Pixelated','type':'select','format':'string','persistent':!0x0,'ui':!0x0,'default':'smooth','options':[{'value':'smooth','text':'Smooth'},{'value':'pixelated','text':'Pixelated'}],'info':'\x0a<h2>Smooth\x20vs\x20Pixelated\x20Scaling\x20(Nearest\x20Neighbor)</h2>\x0a<p>Some\x20TestUFO\x20screens\x20such\x20as\x20display\x20tests\x20work\x20best\x20with\x20pixelated\x20scaling,\x20while\x20other\x20display\x20tests\x20work\x20best\x20with\x20smooth\x20scaling.</p>\x0a<ul>\x0a\x20\x20<li><b>Smooth</b>\x20scaling\x20use\x20softer\x20scaling\x20algorithms\x20(default\x20scaling\x20algorithm,\x20usually\x20bilinaer\x20or\x20bicubic).\x20This\x20improves\x20quality\x20at\x20non-integer\x20zoom\x20ratios.</li>\x0a\x20\x20<li><b>Pixelated</b>\x20scaling\x20use\x20sharp\x20square\x20pixels.\x20This\x20is\x20useful\x20when\x20you\x20need\x20integer\x20nearest-neighbor\x20scaling,\x20and\x20more\x20deterministic\x20scaling\x20consistency.</li>\x0a</ul>\x0a<p><b>NOTE:</b>\x20This\x20setting\x20only\x20affects\x20non-native\x20resolution\x20scaling.\x20There\x20is\x20no\x20effect\x20for\x201:1\x20Native\x20Resolution\x20when\x20<b>Pixel\x20Scale</b>\x20is\x20set\x20to\x20<b>1:1\x20Display\x20Native\x20(100%\x20Zoom)</b>.<p>\x0a'},'colorspace':{'label':'Preferred\x20Color\x20Space\x20(HDR)','subheading':'Browser\x20Instructions','type':'select','format':'string','persistent':!0x0,'ui':!0x0,'default':'srgb','options':[{'value':'srgb','text':'Standard\x20RGB'},{'value':'auto','text':'Best\x20Supported\x20by\x20System'},{'value':'display-p3','text':'WCG\x20-\x20Display-P3'},{'value':'rec2100-pq','text':'HDR\x20-\x20Rec.2100\x20PQ'},{'value':'rec2100-hlg','text':'HDR\x20-\x20Rec.2100\x20HLG\x20(test)','debug':!0x0},{'value':'rec2100-linear','text':'HDR\x20-\x20Rec.2100\x20Linear\x20(test)','debug':!0x0},{'value':'undefined','text':'DEBUG\x20-\x20\x27undefined\x27','debug':!0x0},{'value':void 0x0,'text':'DEBUG\x20-\x20undefined','debug':!0x0}],'info':'\x0a<h2>Wide\x20Color\x20Gamut\x20(WCG)\x20&\x20High\x20Dynamic\x20Range\x20(HDR)</h2>\x0a<p>This\x20setting\x20enables\x20best-effort\x20to\x20access\x20extended\x20color\x20space\x20support\x20in\x20TestUFO,\x20gaining\x20access\x20to\x20brighter\x20and\x20more\x20saturated\x20colors.\x0a<p>HDR\x20support\x20depends\x20on\x20your\x20browser,\x20browser\x20settings,\x20system\x20settings,\x20computer\x20hardware,\x20and\x20the\x20currently\x20selected\x20TestUFO\x20graphics\x20engine\x20(2D,\x20WebGL,\x20WebGPU).\x0aYou\x20can\x20first\x20<a\x20href=\x27/hdr\x27\x20target=\x27_blank\x27>test\x20for\x20WCG/HDR\x20support</a>\x20in\x20your\x20browser\x20and\x20display.</p>\x0a<ul>\x0a\x20\x20<li><b>Standard\x20Dynamic\x20Range\x20(SDR)</b>\x20<br><i>This\x20is\x20the\x20most\x20common,\x20including\x20NTSC/sRGB\x20colorspace.</i></li>\x0a\x20\x20<li><b>Wide\x20Color\x20Gamut\x20(WCG)</b>\x20<br><i>More\x20saturated\x20colors,\x20greener\x20greens,\x20redder\x20reds,\x20bluer\x20blues</i></li>\x0a\x20\x20<li><b>High\x20Dynamic\x20Range\x20(HDR)</b>\x20<br><i>Brightnesses\x20brighter\x20than\x20normal\x20RGB\x20colorspace.\x20Browsers\x20with\x20HDR\x20also\x20use\x2064-bit\x20frame\x20buffers\x20(16-bit\x20per\x20channel)\x20to\x20result\x20in\x20extra\x20display\x20color\x20precision\x20(10-12\x20bits).</i></li>\x0a</ul>\x0a<p>
1Full\x20\x22brighter-than-sRGB\x22\x20HDR\x20support\x20is\x20an\x20<i>Experimental\x20Web\x20Platform\x20Feature</i>\x20in\x20Chromium\x20browsers\x20(Version\x20112+)\x20including\x20Chrome,\x20Edge,\x20Brave,\x20and\x20others.\x20To\x20quickly\x20enable\x20HDR,\x20copy\x20and\x20paste\x20the\x20below\x20into\x20your\x20browser\x20URL\x20bar:</p>\x0a<p><div\x20class=\x27quote-code\x20select-all\x27\x20translate=\x27no\x27>chrome://flags/#enable-experimental-web-platform-features</div></p>\x0a<p>For\x20the\x20\x22Best\x20Supported\x22\x20setting,\x20the\x20default\x20HDR\x20colorspace\x20in\x20Chrome\x20is\x20Rec.2100\x20PQ,\x20and\x20WCG\x20canvas\x20on\x20Safari\x20is\x20Display-P3.</p>\x0a'},'engine':{'label':'Preferred\x20Graphics\x20Engine','subheading':'Purpose\x20of\x20Engines','type':'select','format':'text','web':!0x0,'persistent':!0x0,'ui':!0x0,'default':'2d','options':[{'value':'2d','text':'Canvas\x202D'},{'value':'webgl','text':'WebGL'},{'value':'webgpu','text':'WebGPU\x20(beta)','beta':!0x0},{'value':'blank','text':'DEBUG\x20-\x20Blank','debug':!0x0},{'value':'undefined','text':'DEBUG\x20-\x20\x27undefined\x27','debug':!0x0},{'value':void 0x0,'text':'DEBUG\x20-\x20undefined','debug':!0x0}],'info':'\x0a<h2>TestUFO\x20Graphics\x20Engines</h2>\x0a<p>TestUFO\x20supports\x20multiple\x20rendering\x20engines\x20to\x20access\x20certain\x20features\x20in\x20certain\x20engines.\x20Examples\x20include\x20WebGL\x20shaders\x20or\x20HDR\x20colorspaces\x20used\x20by\x20some\x20TestUFO\x20screens.</p>\x0a<ul>\x0a\x20\x20<li><b>2D</b>\x20uses\x20the\x20default\x20TestUFO\x20rendering\x20engine.</li>\x0a\x20\x20<li><b>WebGL</b>\x20uses\x20an\x20enhanced\x20TestUFO\x20rendering\x20engine\x20that\x20includes\x20shader\x20support.</li>\x0a\x20\x20<li><b>WebGPU</b>\x20is\x20currently\x20under\x20development\x20and\x20will\x20be\x20coming\x20soon.</li>\x0a</ul>\x0a<p>For\x20most\x20TestUFO\x20screens,\x20the\x202D\x20engine\x20will\x20provide\x20the\x20best\x202D\x20performance.\x0aHowever,\x20some\x20TestUFO\x20screens\x20may\x20need\x20WebGL\x20or\x20WebGPU\x20to\x20access\x20shaders,\x203D\x20graphics,\x0aor\x20other\x20graphics\x20features.</p>\x0a'},'sectionperformance':{'type':'section','label':'Performance\x20Settings','ui':!0x0,'web':!0x0},'fpscap':{'label':'Frame\x20Rate\x20Cap','type':'integer','default':0x0,'min':0x0,'max':0x7d0,'info':'\x0a<h2>Frame\x20Rate\x20Cap</h2>\x0a<p>
1This\x20is\x20an\x20undocumented\x20setting\x20that\x20allows\x20you\x20to\x20cap\x20the\x20framerate\x20of\x20TestUFO\x20to\x20a\x20specific\x20value.\x0a<ul>\x0a\x20\x20<li>0\x20is\x20cap\x20to\x20refresh\x20rate\x20(Recommended)\x0a\x20\x20<li>Positive\x20number\x20is\x20the\x20specific\x20framerate\x20to\x20cap\x20to.</li>\x0a</ul>\x0a<p>This\x20is\x20mainly\x20a\x20TestUFO\x20rendering\x20performance\x20testing\x20setting,\x20and\x20not\x20advised\x20for\x20general\x20display\x20testing.</p>\x0a<p>Values\x20other\x20than\x200\x20will\x20normally\x20void\x20scientific-quality\x20VSYNC\x20required\x20for\x20researcher-quality\x20animations.\x0aIt\x20will\x20no\x20longer\x20be\x20aligned\x20to\x20VSYNC,\x20so\x20judder/jitter\x20will\x20become\x20worse\x20even\x20at\x20refresh\x20rate\x20divisors.</p>\x0a<p>In\x20the\x20future,\x20precise\x20refresh\x20rate\x20divisors\x20will\x20be\x20made\x20available\x20for\x20VSYNC\x20accuracy\x20purposes.</p>\x0a'},'highpower':{'label':'Force\x20High\x20Performance\x20Mode','subheading':'Fix\x20MacBook\x20/\x20Laptop\x20Stutters','type':'select','format':'string','default':'mac','options':[{'value':'off','text':'OFF'},{'value':'mac','text':'ON,\x20for\x20MacOS\x20only'},{'value':'all','text':'ON,\x20for\x20all\x20platforms'},{'value':'force','text':'ON,\x20in\x20background\x20too'}],'persistent':!0x0,'ui':!0x0,'web':!0x0,'info':'\x0a<h2>High\x20Power\x20+\x20High\x20Precision\x20Mode\x20for\x20Macs/Laptops</h2>\x0a<p>This\x20workaround\x20fixes\x20stutters\x20caused\x20by\x20power-management\x20logic\x20in\x20operating\x20system\x20compositors,\x20especially\x20on\x20MacOS\x20and\x20MacBooks.</p>\x0a<ul>\x0a\x20\x20<li>Most\x20TestUFO\x20screens\x20are\x20optimized\x20to\x20run\x20120fps+\x20using\x20less\x20than\x205%\x20CPU\x20&\x20GPU.\x20This\x20causes\x20power\x20management\x20\x0a\x20\x20\x20\x20stuttering\x20to\x20occur\x20on\x20certain\x20platforms.\x0a\x20\x20<li>MacOS\x20is\x20more\x20prone\x20to\x20stutters\x20than\x20iPhone/iPad\x20due\x20to\x20the\x20way\x20\x0a\x20\x20\x20\x20MacOS\x20120Hz+\x20compositor\x20stutters\x20during\x20low\x20CPU/GPU\x20situations.</li>\x0a\x20\x20<li>Enabling\x20this\x20settings\x20fixes\x20power\x20management\x20stutters\x20in\x20Chrome/Edge\x20on\x20MacOS.\x20\x20When\x20this\x20setting\x20is\x20enabled,\x20an\x0a\x20\x20\x20\x20intentional\x20graphics-drawing\x20busyloop\x20occurs,\x20at\x20the\x20cost\x20of\x20extra\x20battery\x20power\x20consumed.</li>\x0a\x20\x20<li>Most\x20retail\x20Macs\x20have\x20more\x20stutters\x20than\x20corporate\x20Macs.\x0a\x20\x20\x20\x20Background\x20business/developer\x20apps\x20increase\x20power\x20&\x20accidentally\x20prevent\x20stutters.</li>\x0a\x20\x20<li>We\x20recommend\x20using\x20this\x20setting\x20when\x20scientific-quality\x20VSYNC\x20is\x20more\x20important\x20than\x0a\x20\x20\x20\x20power\x20usage,\x20unless\x20you\x20are\x20using\x20an\x20alternative\x20stutter\x20workaround\x20for\x20low-CPU/GPU\x0a\x20\x20\x20\x20animations\x20animations.\x0a</ul>\x0a<p>If\x20using\x20Safari,\x20please\x20turn\x20off\x20the\x20\x22Prefer\x20Page\x20Rendering\x20Updates\x20Near\x2060fps\x22\x20setting\x20of\x20Safari\x20for\x20120+\x20Hz\x20operaton\x20of\x20TestUFO\x20on\x20MacBooks.</p>\x0a<p>The\x20iPhone\x20and\x20iPad\x20is\x20less\x20affected\x20than\x20MacBooks\x20OS\x20compositor\x20for\x20precision\x20issues\x20caused\x20by\x20power\x20management,\x20where\x20\x0aduring\x20low-power\x20120fps\x20animations.\x20Without\x20this\x20setting,\x20more\x20stutters\x20occur\x20on\x20recent\x20MacBooks\x20\x0athan\x20older\x20120Hz\x20iPad/iPhones,\x20due\x20to\x20the\x20way\x20MacOS\x20120Hz+\x20compositor\x20stutters\x20during\x20low\x20CPU/GPU\x20situations.</p>\x0a<p><span\x20class=\x27highlight-red\x27>IMPORTANT:</span>\x20For\x20scientific-quality\x20VSYNC,\x20please\x20close\x20all\x20other\x20applications\x0aand\x20all\x20browser\x20tabs.\x20Run\x20TestUFO\x20as\x20the\x20only\x20open\x20browser\x20or\x20application.</p>\x0a<p>Most\x20mobile\x20platforms\x20do\x20not\x20need\x20this\x20setting,\x20but\x20some\x20platforms\x20may\x20benefit.</p>\x0a'},'highpowerspin':{'label':'Processor\x20to\x20Busyloop','type':'select','format':'string','default':'auto','o
1ptions':[{'value':'auto','text':'Auto\x20(Recommended)'},{'value':'cpu','text':'CPU'},{'value':'gpu','text':'GPU'}],'persistent':!0x0,'ui':!0x0,'web':!0x0,'info':'<h2>Processor\x20to\x20Busyloop</h2>\x0a\x20\x20\x20\x20\x20\x20<p>This\x20setting\x20controls\x20which\x20processor\x20to\x20spin\x20(busyloop)\x20to\x20prevent\x20power\x20management\x20stutters.</p>\x0a\x20\x20\x20\x20\x20\x20<p>If\x20you\x20are\x20experiencing\x20stutters,\x20you\x20can\x20try\x20spinning\x20the\x20CPU\x20or\x20the\x20GPU.</p>\x0a\x20\x20\x20\x20\x20\x20<p>Automatic\x20mode\x20is\x20recommended,\x20selecting\x20the\x20best\x20processor\x20depending\x20on\x20platform,\x20browser,\x20and\x20rendering\x20engine.</p>\x0a\x20\x20\x20\x20\x20\x20','easteregg':!0x0},'highpowerperc':{'label':'Processor\x20Minimum\x20Percentage','type':'integer','default':0x37,'min':0x0,'max':0x50,'persistent':!0x0,'ui':!0x0,'web':!0x0,'info':'<h2>Processor\x20Minimum\x20Percentage</h2>\x0a\x20\x20\x20\x20\x20\x20<p>This\x20is\x20only\x20activated\x20when\x20High\x20Performance\x20Mode\x20setting\x20is\x20active.</p>\x0a\x20\x20\x20\x20\x20\x20<p>This\x20is\x20the\x20percentage\x20of\x20time\x20to\x20busyloop\x20the\x20GPU\x20rendering,\x20to\x20prevent\x20power-management\x20stuttering.</p>\x0a\x20\x20\x20\x20\x20\x20<p>This\x20GPU\x20revving\x20only\x20occurs\x20when\x20the\x20GPU\x20is\x20excessively\x20idle\x20during\x20low\x20GPU\x20utilization\x20animations.\x200%\x20means\x20no\x20busyloop,\x2060%\x20means\x2060%\x20of\x20the\x20time.</p>\x0a\x20\x20\x20\x20\x20\x20<p>
1This\x20is\x20a\x20workaround\x20for\x20stutters\x20on\x20some\x20platforms.\x20It\x20is\x20not\x20recommended\x20to\x20use\x20this\x20setting\x20unless\x20you\x20are\x20experiencing\x20stutters.</p>\x0a\x20\x20\x20\x20\x20\x20<p>Settings\x20for\x20MacBook\x20M1\x20on\x204K\x20Monitor:</p>\x0a\x20\x20\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<li>55%\x20-\x20MacOS\x20Chrome</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<li>40%\x20-\x20Safari\x20Canvas2D\x20&\x20WebGPU</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<li>75%\x20-\x20Safari\x20WebGL</li>\x0a\x20\x20\x20\x20\x20\x20</ul>\x0a\x20\x20\x20\x20\x20\x20','easteregg':!0x0},'highpowerrandom':{'label':'Processor\x20Random\x20Percentage','type':'integer','default':0xa,'min':0x0,'max':0x32,'persistent':!0x0,'ui':!0x0,'web':!0x0,'info':'<h2>Processor\x20Render\x20Randomization</h2>\x0a\x20\x20\x20\x20\x20\x20<p>This\x20adds\x20a\x20slight\x20erraticness\x20to\x20processing\x20times\x20to\x20help\x20calm\x20smarter\x20power\x20management\x20logic.</p>\x0a\x20\x20\x20\x20\x20\x20<p>This\x20randomization\x20sometimes\x20keeps\x20mobile\x20CPU/GPUs\x20awake\x20at\x20a\x20higher\x20power\x20state\x20more\x20reliably\x20for\x20more\x20deterministic\x20scientific\x20framepacing.</p>\x0a\x20\x20\x20\x20\x20\x20<p>Recommended\x20setting:\x2010%</p>\x0a\x20\x20\x20\x20\x20\x20','easteregg':!0x0},'framepacing':{'label':'Experimental\x20Frame\x20Pacing','subheading':'Yield\x20primitive\x20between\x20rAFs','type':'select','format':'string','default':'yield','persistent':!0x0,'ui':!0x0,'easteregg':!0x0,'options':[{'value':'default','text':'Default'},{'value':'yield','text':'Yield\x20message-queue\x20(Recommended)'},{'value':'yield-scheduler','text':'Yield\x20scheduler'},{'value':'yield-task','text':'Yield\x20post-task'}],'info':'\x0a<h2>Experimental\x20Frame\x20Pacing\x20—\x20Compositor\x20Yield\x20🛸</h2>\x0a<p>Inserts\x20a\x20sub-millisecond\x20task\x20boundary\x20between\x20<code>requestAnimationFrame()</code>\x0acallbacks\x20so\x20Chrome\x27s\x20renderer\x20scheduler\x20can\x20interleave\x20compositor\x20IPC\x20with\x20frame\x0aproduction.</p>\x0a<p>Useful\x20when\x20running\x20Chrome\x20with\x20<code>--disable-gpu-vsync\x20--disable-frame-rate-limit</code>:\x0athe\x20rAF\x20rate\x20can\x20climb\x20to\x202000–4000/sec\x20while\x20the\x20Viz\x20compositor\x20only\x20presents\x202–5\x20fps.\x0aThat\x20cliff\x20is\x20a\x20backpressure\x20failure\x20between\x20renderer\x20and\x20Viz;\x20a\x20renderer-side\x20yield\x0asometimes\x20alleviates\x20it.</p>\x0a<ul>\x0a\x20\x20<li><b>Default</b>\x20—\x20direct\x20<code>requestAnimationFrame()</code>.\x20Historical\x20behavior.</li>\x0a\x20\x20<li><b>MessageChannel\x20yield</b>\x20—\x20<code>port.postMessage()</code>\x20task\x20boundary,\x20no\x20<code>setTimeout</code>\x20clamp.\x20Same\x20primitive\x20React\x27s\x20scheduler\x20uses.</li>\x0a\x20\x20<li><b>scheduler.yield()</b>\x20—\x20Chrome\x20129+\x20purpose-built\x20API.\x20Falls\x20back\x20to\x20MessageChannel\x20if\x20unavailable.</li>\x0a\x20\x20<li><b>scheduler.postTask\x20user-blocking</b>\x20—\x20explicit\x20task\x20with\x20high\x20priority.\x20Falls\x20back\x20to\x20MessageChannel\x20if\x20unavailable.</li>\x0a</ul>\x0a<p><span\x20class=\x27highlight-red\x27>EXPERIMENTAL:</span>\x20renderer-side\x20mitigation\x20only\x20—\x20does\x20not\x0adirectly\x20fix\x20Viz\x20pipeline\x20starvation\x20but\x20in\x20practice\x20often\x20alleviates\x20it.\x20If\x20you\x20see\x20glitches,\x0aswitch\x20back\x20to\x20Default.</p>\x0a'},'kiosk':{'label':'Kiosk\x20Mode\x20/\x20Trade\x20Show\x20Demo','subheading':'Browser\x20auto-refresh','type':'boolean','default':!0x1,'persistent':!0x1,'info':'\x0a<h2>Prevent\x20Stutters\x20For\x20Kiosks\x20/\x20Conventions\x20Demos</h2>\x0a<p>This\x20is\x20useful\x20for\x20conventions\x20and\x20demo\x20booths.\x20It\x20monitors\x20for\x20stutter\x20problems\x20and\x20automatically\x20reloads\x20this\x20animation\x20to\x20remove\x20stutters.\x0aStutters\x20can\x20be\x20caused\x20by\x20memory\x20leaks\x20(GC\x20stutters)\x20in\x20some\x20browsers.</p>\x0a<p>This\x20can\x20be\x20a\x20problem\x20at\x20360\x20Hz\x20refresh\x20rate\x20and\x20up\x20when\x20this\x20animation\x20is\x20running\x20for\x20hours\x20at\x20extremely\x20high\x20frame\x20rates.\x0aAnimations\x20may\x20unexpectedly\x20start\x20stuttering\x20after\x20a\x20few\x20minutes\x20or\x20few\x20hours.\x20This\x20can\x20be\x20a\x20problem\x20during\x20all-day\x20animation\x20exhibits.</p>\x0a<p>Enable\x20this\x20setting\x20to\x20prevent\x20stutters\x20for\x20unattended\x20demos.\x20This\x20setting\x20will\x20tell\x20TestUFO\x20to\x20automatically\x20refresh\x20if\x20it\x20detects\x2015\x20seconds\x20of\x20bad\x20stuttering.</p>\x0a<p>It\x20is\x20recommended\x20to\x20start\x20Chrome\x20in\x20high-priority\x20mode,\x20possibly\x20with\x20background\x20rendering\x20disabled.\x20Quit\x20all\x20copies\x20of\x20Chrome,\x20and\x20then\x20relaunch\x20via\x20command\x20line:</p>\x0a<div\x20class=\x22quote-code\x20select-all\x22\x20translate=\x22no\x22>start\x20\x22\x22\x20/High\x20\x22C:\x5cProgram\x20Files\x5cGoogle\x5cChrome\x5cApplication\x5cchrome.exe\x22\x20--disable-renderer-backgrounding</div>\x0a<p>
1<span\x20class=\x27highlight-red\x27>IMPORTANT:</span>\x20Kiosk\x20Mode\x20currently\x20requires\x20an\x20online\x20connection,\x20due\x20to\x20the\x20current\x20page\x20automatic-reload\x20system.</p>\x0a'},'sectionoverlays':{'type':'section','label':'User\x20Interface\x20Settings','ui':!0x0},'darkmode':{'label':'Dark\x20Mode','type':'select','format':'string','default':'dark','persistent':!0x0,'ui':!0x0,'options':[{'value':'system','text':'Same\x20as\x20System'},{'value':'light','text':'Light\x20Mode'},{'value':'dark','text':'Dark\x20Mode'}],'info':'\x0a<h2>Dark\x20Mode\x20/\x20Light\x20Mode</h2>\x0a<p>Admire\x20the\x20UFO\x20starry\x20space\x20sky\x20out\x20with\x20Dark\x20Mode!\x20Choose\x20your\x20preferred\x20setting:\x0a<ul>\x0a\x20\x20<li><b>Same\x20as\x20System:</b>\x20Sync\x20to\x20your\x20OS\x20system\x20default.</li>\x0a\x20\x20<li><b>Light\x20Mode:</b>\x20As\x20bright\x20as\x20a\x20supernova.</li>\x0a\x20\x20<li><b>Dark\x20Mode:</b>\x20As\x20dark\x20as\x20the\x20night\x20sky.</li>\x0a</ul>\x0a<p>Dark\x20Mode\x20is\x20useful\x20to\x20preserve\x20your\x20night\x20vision\x20during\x20display\x20testing.\x20\x0aIt\x20is\x20useful\x20you\x20are\x20testing\x20very\x20dark\x20TestUFO\x20screens,\x20such\x20as\x20PLUGE\x20or\x20similar\x20display\x20tests.\x0a'},'showtitle':{'type':'select','format':'integer','label':'Floating\x20Screen\x20Title','persistent':!0x0,'ui':!0x0,'min':0x0,'max':0x2,'default':0x1,'options':[{'value':0x1,'text':'Autohide\x20(Default)'},{'value':0x0,'text':'Never\x20Show','hidden':!0x0},{'value':0x2,'text':'Always\x20Show'}],'info':'\x0a<h2>Floating\x20Title\x20Overlay</h2>\x0a<p>This\x20setting\x20controls\x20the\x20visibility\x20of\x20the\x20title\x20of\x20the\x20TestUFO\x20screen.\x0a<p>It\x20can\x20be\x20desirable\x20to\x20keep\x20this\x20persistently\x20visible\x20(e.g.\x20kiosk\x20demo\x20or\x20teaching\x20demo)\x20to\x20give\x20TestUFO\x20credit.</p>\x0a'},'showhdr':{'type':'select','format':'integer','label':'Floating\x20HDR\x20&\x20Engine\x20Status','persistent':!0x0,'ui':!0x0,'min':0x0,'max':0x2,'default':0x1,'options':[{'value':0x1,'text':'Autohide\x20(Default)'},{'value':0x0,'text':'Never\x20Show'},{'value':0x2,'text':'Always\x20Show'}],'info':'\x0a\x20\x20\x20\x20\x20\x20<h2>Floating\x20Color\x20Space\x20/\x20Engine\x20Status</h2>\x0a\x20\x20\x20\x20\x20\x20<p>This\x20setting\x20controls\x20whether\x20the\x20HDR\x20status\x20is\x20displayed\x20on\x20the\x20screen,\x20as\x20well\x20as\x20whether\x20or\x20not\x20WebGL\x20is\x20enabled\x20or\x20not.</p>\x0a\x20\x20\x20\x20\x20\x20'},'showbuttons':{'type':'select','format':'integer','label':'Floating\x20Buttons','persistent':!0x0,'ui':!0x0,'min':0x0,'max':0x2,'default':0x1,'options':[{'value':0x1,'text':'Autohide\x20(Default)'},{'value':0x0,'text':'Never\x20Show','hidden':!0x0},{'value':0x2,'text':'Always\x20Show'}],'info':'\x0a<h2>Floating\x20Display\x20Buttons</h2>\x0a<p>This\x20setting\x20controls\x20the\x20visibility\x20of\x20the\x20Settings\x20button\x20and\x20Full\x20Screen\x20button.\x0aYou\x20can\x20force\x20these\x20buttons\x20to\x20be\x20continuously\x20displayed.</p>\x0a'},'showoverlay':{'type':'boolean','hidden':!0x0,'default':!0x0},'showcredit':{'type':'integer','hidden':!0x0,'min':0x0,'max':0xa,'default':void 0x0},'showdebug':{'type':'boolean','hidden':!0x0,'default':void 0x0},'sectionpursuit':{'type':'section','label':'Pursuit\x20Camera'},'pursuit':{'label':'Pursuit\x20Camera\x20Sync\x20Track','type':'boolean','default':!0x1,'info':'\x0a<h2>Pursuit\x20Camera\x20Sync\x20Track</h2>\x0a<p>This\x20enables\x20a\x20camera\x20sync\x20track\x20(looks\x20like\x20a\x20horizontal\x20ladder)\x20in\x20this\x20specific\x20TestUFO\x20screen.</p>\x0a<p>The\x20sync\x20track\x20helps\x20you\x20capture\x20accurate\x20display\x20motion\x20blur\x20with\x20most\x20cameras\x20in\x20either\x20photo\x20or\x20video\x20mode.\x20The\x20goal\x20is\x20to\x20record\x20the\x20same\x20perceived\x20display\x20motion\x20blur\x20that\x20your\x20eyes\x20saw.</p>\x0a<ul>\x0a\x20\x20<li>See\x20<a\x20href=\x27https://www.blurbusters.com/motion-tests/pursuit-camera/\x27\x20target=\x27_blank\x27>
1rail-based\x20instructions</a>\x20if\x20you\x20use\x20a\x20camera\x20rail.\x0a\x20\x20<li>See\x20<a\x20href=\x27https://www.blurbusters.com/motion-tests/pursuit-camera-smartphone/\x27\x20target=\x27_blank\x27>phone\x20hand-wave\x20instructions</a>\x20to\x20use\x20your\x20existing\x20smartphone\x20with\x20an\x20app\x20to\x20manually\x20set\x20your\x20shutter\x20speed.</li>\x0a\x20\x20<li><b>IMPORTANT:</b>\x20For\x20pursuit\x20cameras,\x20you\x20<i>MUST</i>\x20manually\x20configure\x20a\x20slow\x20camera\x20shutter\x20speed\x20to\x20capture\x20multiple\x20refresh\x20cycles.\x20This\x20simulates\x20human\x20eye\x20averaging\x20behavior\x20during\x20eye\x20tracking.\x20For\x20240Hz\x20at\x204\x20tickmarks\x20(240/4\x20=\x2060)\x20use\x20a\x20shutter\x20speed\x20of\x201/60sec.</li>\x0a\x20\x20<li>This\x20a\x20<a\x20href=\x27https://www.blurbusters.com/motion-tests/pursuit-camera-paper/\x27\x20target=\x27_blank\x27>peer\x20reviewed\x20technique</a>\x20grounded\x20in\x20real\x20science.\x20Multiple\x20researchers,\x20manufacturers,\x20youtubers,\x20and\x20reviewers\x20use\x20this\x20technique.</li>\x0a\x20\x20<li>This\x20allows\x20accurate\x20photography/videography\x20of\x20the\x20same\x20tracking\x20motion\x20blur\x20that\x20your\x20tracking\x20eyes\x20saw.</li>\x0a\x20\x20<li>Displays\x20behave\x20differently\x20with\x20stationary\x20eyes/cameras\x20than\x20moving\x20eyes/cameras.\x20See\x20<a\x20href=\x22/eyetracking\x22\x20target=\x22_blank\x22>eye\x20tracking\x20demo</a>\x20for\x20a\x20visual\x20animation\x20example.</li>\x0a</ul>\x0a\x20\x20'},'pursuitmarks':{'label':'Pursuit\x20Camera\x20Tick\x20Marks','subheading':'Adjust\x20camera\x20shutter\x20speed','type':'select','format':'integer','default':0x4,'min':0x2,'max':0x10,'options':[{'value':0x3,'text':'3\x20Tick\x20Marks\x20-\x20Easier\x20for\x2060\x20Hz'},{'value':0x4,'text':'4\x20Tick\x20Marks\x20-\x20Universal\x20Standard'},{'value':0x6,'text':'6\x20Tick\x20Marks\x20-\x20Improves\x20360\x20Hz+'},{'value':0x8,'text':'8\x20Tick\x20Marks\x20-\x20Improves\x20500\x20Hz+'},{'value':0xa,'text':'10\x20Tick\x20Marks\x20-\x20Improves\x20720\x20Hz+'}],'info':'\x0a<h2>Pursuit\x20Camera\x20Tick\x20Marks</h2>\x0a<p>This\x20is\x20the\x20number\x20of\x20tick\x20marks\x20in\x20the\x20pursuit\x20camera\x20sync\x20track.</p>\x0a<p>The\x20industry\x20standard\x20is\x204\x20tick\x20marks.\x20However\x203\x20tick\x20marks\x20can\x20be\x20easier\x20for\x20low\x20refresh\x20rates\x20(1/20sec\x20shutter\x20for\x2060\x20Hz)\x20and\x20more\x20tickmarks\x20can\x20produce\x20more\x20accurate\x20results\x20for\x20very\x20high\x20refresh\x20rates\x20(1/60sec\x20shutter\x20for\x20480Hz\x20at\x208\x20tick\x20marks).\x20Set\x20your\x20camera\x20shutter\x20speed\x20to\x20(tickmarks/refreshrate)\x20of\x20a\x20second.</p>\x0a<p>The\x20sync\x20track\x20helps\x20you\x20capture\x20accurate\x20display\x20motion\x20blur\x20with\x20most\x20cameras\x20in\x20either\x20photo\x20or\x20video\x20mode.\x20The\x20goal\x20is\x20to\x20record\x20the\x20same\x20perceived\x20display\x20motion\x20blur\x20that\x20your\x20eyes\x20saw.</p>\x0a<ul>\x0a\x20\x20<li>See\x20<a\x20href=\x27https://www.blurbusters.com/motion-tests/pursuit-camera/\x27\x20target=\x27_blank\x27>rail-based\x20instructions</a>\x20if\x20you\x20use\x20a\x20camera\x20rail.\x0a\x20\x20<li>See\x20<a\x20href=\x27https://www.blurbusters.com/motion-tests/pursuit-camera-smartphone/\x27\x20target=\x27_blank\x27>phone\x20hand-wave\x20instructions</a>\x20to\x20use\x20your\x20existing\x20smartphone\x20with\x20an\x20app\x20to\x20manually\x20set\x20your\x20shutter\x20speed.</li>\x0a\x20\x20<li><b>IMPORTANT:</b>\x20For\x20pursuit\x20cameras,\x20you\x20<i>MUST</i>\x20manually\x20configure\x20a\x20slow\x20camera\x20shutter\x20speed\x20to\x20capture\x20multiple\x20refresh\x20cycles.\x20This\x20simulates\x20human\x20eye\x20averaging\x20behavior\x20during\x20eye\x20tracking.\x20For\x20240Hz\x20at\x204\x20tickmarks\x20(240/4\x20=\x2060)\x20use\x20a\x20shutter\x20speed\x20of\x201/60sec.</li>\x0a\x20\x20<li>This\x20a\x20<a\x20href=\x27https://www.blurbusters.com/motion-tests/pursuit-camera-paper/\x27\x20target=\x27_blank\x27>
1peer\x20reviewed\x20technique</a>\x20grounded\x20in\x20real\x20science.\x20Multiple\x20researchers,\x20manufacturers,\x20youtubers,\x20and\x20reviewers\x20use\x20this\x20technique.</li>\x0a\x20\x20<li>This\x20allows\x20accurate\x20photography/videography\x20of\x20the\x20same\x20tracking\x20motion\x20blur\x20that\x20your\x20tracking\x20eyes\x20saw.</li>\x0a\x20\x20<li>Displays\x20behave\x20differently\x20with\x20stationary\x20eyes/cameras\x20than\x20moving\x20eyes/cameras.\x20See\x20<a\x20href=\x22/eyetracking\x22\x20target=\x22_blank\x22>eye\x20tracking\x20demo</a>\x20for\x20a\x20visual\x20animation\x20example.</li>\x0a</ul>\x0a\x20\x20'},'debug':{'type':'boolean','hidden':!0x0,'default':void 0x0},'logging':{'type':'boolean','hidden':!0x0,'default':void 0x0},'debug-forcesyncfail':{'type':'boolean','hidden':!0x0,'default':!0x1},'debug-autorefresh':{'type':'integer','hidden':!0x0,'min':0x0,'max':0xe10,'default':0x0},'embed':{'type':'integer','hidden':!0x0,'default':0x0},'pause':{'type':'boolean','hidden':!0x0,'default':void 0x0},'fullscreen':{'type':'boolean','hidden':!0x0,'default':!0x1},'showabout':{'label':'About\x20TestUFO','type':'boolean','hidden':!0x0,'default':!0x1},'showsettings':{'label':'TestUFO\x20Settings','type':'boolean','hidden':!0x0,'default':!0x1},'easteregg':{'label':'Easter\x20Egg\x20Mode','type':'boolean','default':!0x1},'codezero':{'label':'Reset\x20Settings','type':'boolean','hidden':!0x0,'default':!0x1},'command':{'label':'Code','type':'string','hidden':!0x0,'default':''},'sectionreset':{'type':'section','label':'Reset\x20Settings','ui':!0x0},'reset':{'label':'Reset\x20All\x20Settings\x20To','type':'select','format':'string','subheading':'Fix\x20glitches','default':'defaults','ui':!0x0,'options':[{'value':'custom','text':'Keep\x20Custom\x20Settings'},{'value':'defaults','text':'Recommended\x20Default\x20Settings'}],'info':'\x0a<h2>Reset\x20Settings</h2>\x0a<p>This\x20resets\x20all\x20global\x20settings\x20to\x20recommended\x20defaults.\x0a<p>If\x20you\x20are\x20having\x20worse\x20performance,\x20more\x20stutters\x20or\x20graphics\x20glitches,\x0atry\x20resetting\x20all\x20settings\x20to\x20recommended\x20defaults\x20before\x20adjusting\x20settings\x20again.</p>\x0a<p>In\x20some\x20cases,\x20you\x20may\x20need\x20to\x20refresh\x20your\x20browser,\x20or\x20restart\x20your\x20application,\x20after\x20resetting\x20these\x20settings.</p>\x0a'}});var bd=bc,bf=new class{constructor(){this['_UFODraw']=!0x0,this['_pursuitTrackColorBackground']='#000000',this['_pursuitTrackColorTicks']='#FFFFFF',this['_pursuitTrackColorTicksHDR']='color(rec2020\x204\x204\x204)',this['_pursuitTrackColorLines']='#FFFFFF',this['_pursuitTrackTickCount']=0x4,this['_pursuitTrackTickHeight']=0x4,this['_pursuitTrackTickWidth']=0x2,this['_pursuitTrackEdgeMargin']=0x7,this['_pursuitSettings']='',this['_pursuitImages']=[],this['_pursuitGridTickCount']=0x4,this['_pursuitGridTickHeight']=0x10,this['_pursuitGridTickWidth']=0x3,this['_MPRTIndicatorTextPadding']=-0x3,this['_MPRTIndicatorFontHeight']=0xa,this['_MPRTIndicatorBottomPad']=0x2,this['_MPRTIndicatorTextStyle']=new aH({'font':'10px\x20Arial','align':'center'}),this['_ufoStyleMessage']=new aH({'font':'bold\x2024px\x20Verdana','align':'left','color':'#FFFFFF','background':'#000000','outlineType':'shadow','outlineThickness':0x2,'margin':{'left':0xc,'top':0xc,'right':0xc,'bottom':0xc},'cornerRadius':0xa,'boxOutlineColor':'rgba(0,\x200,\x200,\x200.5)','boxOutlineThickness':0x1});}get['pursuitTrackHeight'](){return this['_pursuitTrackEdgeMargin']+this['_pursuitTrackTickCount']*this['_pursuitTrackTickHeight']+this['_pursuitTrackEdgeMargin'];}['renderPursuitTrack'](bR){var bS;let bT=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:{};if(!bR||!0x0!==bR['_UFOGraphics'])return void a2['error']();let bU=void 0x0!==bT['frameCounter']?bT['frameCounter']:0x0,bV=void 0x0!==bT['pixelsPerFrame']?bT['pixelsPerFrame']:0x0,bW=void 0x0===bT['visible']||bT['visible'],bX=void 0x0!==bT['tickCount']?bT['tickCount']:(null===(bS=ad['globalSettings'])||void 0x0===bS?void 0x0:bS['getSafeValue']('pursuitmarks'))||0x4,bY=void 0x0!==bT['tickHeight']?bT['tickHeight']:0x4,bZ=void 0x0!==bT['tickWidth']?bT['tickWidth']:0x2;this['_pursuitTrackTickCount']=bX,this['_pursuitTrackTickWidth']=bZ,this['_pursuitTrackTickHeight']=bY;let c0=bV+'|'+bW+'|'+bX+'|'+bY+'|'+bZ+'|'+bR['width']+'|'+bR['colorSpace'];if(c0!==this['_pursuitSettings']){if(this['_pursuitSettings']=c0,this['_pursuitImages']){for(let c3=0x0;c3<this['_pursuitImages']['length'];c3++){var c1,c2;null===(c1=this['_pursuitImages'][c3])||void 0x0===c1||null===(c2=c1['dispose'])||void 0x0===c2||c2['call'](c1),this['_pursuitImages'][c3]=null;}this['_pursuitImages']=[];}for(let c4=0x0;c4<bX;
1c4++)this['_pursuitImages'][c4]=bR['createSurface']({'id':'canvas-2d','width':bR['width'],'height':this['pursuitTrackHeight'],'name':'PURSUIT-TRACK'+c4}),this['__pursuitTrack'](this['_pursuitImages'][c4],c4,bV,bW,0x0);}return this['_pursuitImages'][bU%bX];}['__pursuitTrack'](bR,bS,bT,bU,bV){if(!bR||!0x0!==bR['_UFOGraphics'])return void a2['error']();if(!bU)return bR['setColor'](this['_pursuitTrackColorBackground']),void bR['fillRect']({'x':0x0,'y':bV,'width':bR['width'],'height':this['pursuitTrackHeight']});let bW=bS%this['_pursuitTrackTickCount'],bX=this['_pursuitTrackTickCount']*Math['abs'](bT);if(0x0===bX)bR['setColor'](this['_pursuitTrackColorBackground']),bR['fillRect']({'x':0x0,'y':bV,'width':bR['width'],'height':this['pursuitTrackHeight']});else{let bY=bR['createSurface']({'width':bX,'height':this['pursuitTrackHeight'],'name':'PURSUIT-TRACK-TILE'});bY['setColor'](this['_pursuitTrackColorBackground']),bY['fillRect']({'x':0x0,'y':0x0,'width':bX,'height':this['pursuitTrackHeight']}),bY['setColor'](this['_pursuitTrackColorLines']),bY['fillRect']({'x':0x0,'y':0x3,'width':bX,'height':0x1}),bY['fillRect']({'x':0x0,'y':0x5,'width':bX,'height':0x1}),bY['fillRect']({'x':0x0,'y':this['pursuitTrackHeight']-0x1-0x3,'width':bX,'height':0x1}),bY['fillRect']({'x':0x0,'y':this['pursuitTrackHeight']-0x1-0x5,'width':bX,'height':0x1});let bZ=this['_pursuitTrackEdgeMargin']+this['_pursuitTrackTickHeight']*bW,c0=bT*bW;bT<0x0&&(c0=-bT*(this['_pursuitTrackTickCount']-bW-0x1)),bY['setColor'](ak['isDisplayHDR']()?this['_pursuitTrackColorTicksHDR']:this['_pursuitTrackColorTicks']),bY['fillRect']({'x':c0,'y':bZ,'width':this['_pursuitTrackTickWidth'],'height':this['_pursuitTrackTickHeight']}),bY['fillRect']({'x':c0+bY['width'],'y':bZ,'width':this['_pursuitTrackTickWidth'],'height':this['_pursuitTrackTickHeight']}),bY['fillRect']({'x':c0-bY['width'],'y':bZ,'width':this['_pursuitTrackTickWidth'],'height':this['_pursuitTrackTickHeight']}),bR['drawImageTiled']({'source':bY,'x':0x0,'y':bV,'width':bR['width'],'height':this['pursuitTrackHeight']});}}['pursuitGrid'](bR,bS,bT,bU){if(!bR||!0x0!==bR['_UFOGraphics'])return void a2['error']();let bV=bR['width'],bW=bR['height'],bX=bS%this['_pursuitGridTickCount'];bR['setColor'](bU);let bY=bT*bX,bZ=this['_pursuitGridTickHeight']*bX,c0=Math['abs'](bT)*this['_pursuitGridTickCount'],c1=this['_pursuitGridTickHeight']*this['_pursuitGridTickCount'];bR['setAlpha'](0.25);for(let c2=this['_pursuitGridTickHeight']/0x2-0x1;c2<bW;c2+=c1)bR['fillRect']({'x':0x0,'y':c2,'width':bV,'height':0x1}),bR['fillRect']({'x':0x0,'y':c2+0x2,'width':bV,'height':0x1});if(bR['setAlpha'](0x1),c0>0x0){for(let c3=bZ;c3<bW;c3+=c1)for(let c4=bY;c4<bV;c4+=c0)bR['fillRect']({'x':c4,'y':c3,'width':this['_pursuitGridTickWidth'],'height':this['_pursuitGridTickHeight']});}}['renderMPRTindicator'](bR){var bS;let bT=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:{};if(!bR||!0x0!==bR['_UFOGraphics'])return void a2['error']();let bU=bT['variant']||'original',bV=bT['realPPS']||0x0,bW=bT['foreColor']||'#FFFFFF',bX=bT['backColor']||'#000000',bY=bT['padding']||0x0,bZ=bT['pixelsThick']||0x1,c0=bT['indicatorHeight']||0xa,c1=bT['indicatorCount']||0x3,c2=bT['indicatorSpacing']||0x2,c3=bT['numberFormat']||'decimal',c4=bZ,c5=c0+0x2,c6=0x0,c7=bY,c8=bZ+c1+bZ+bZ+c2,c9=0x2*c2,ca=c7+c5+this['_MPRTIndicatorTextPadding'],cb=bY+0x1+c0+0x1+this['_MPRTIndicatorTextPadding']+this['_MPRTIndicatorFontHeight']+bY+this['_MPRTIndicatorBottomPad'],cc=c8*c1+c9,cd=bR['createSurface']({'id':'canvas-2d','width':cc,'height':cb,'name':'MPRT-INDICATOR-UNCROPPED'});null!==(bS=this['_textBoxLabel'])&&void 0x0!==bS&&bS['ready']||(this['_textBoxLabel']=new b5(bR,this['_MPRTIndicatorTextStyle'])),this['_textBoxLabel']['style']['color']=bW,cd['setColor'](bX),cd['fillRect']({'x':0x0,'y':0x0,'width':cc,'height':cb}),cd['setColor'](bW),c6+=c9;for(let cg=0x1;cg<=c1;cg++){if('original'===bU?(cd['fillRect']({'x':c6,'y':c7,'width':c4+cg,'height':0x1}),cd['fillRect']({'x':c6,'y':c7+c5,'width':c4+cg,'height':0x1}),cd['fillRect']({'x':c6,'y':c7,'width':bZ,'height':c5+0x1}),cd['fillRect']({'x':c6+c4+cg,'y':c7,'width':bZ,'height':c5+0x1})):(cd['fillRect']({'x':c6,'y':c7,'width':bZ,'height':c5-0x4}),cd['fillRect']({'x':c6+c4+cg,'y':c7+0x4,'width':bZ,'height':c5-0x4})),0x0!=bV){let ch=(cg+bZ)*(0x3e8/Math['abs'](bV)),ci=this['__formatNumberValue'](ch,c3);this['_textBoxLabel']['text']=ci,cd['draw']({'source':this['_textBoxLabel'],'x':c6+parseInt((c4+cg+bZ-this['_textBoxLabel']['width'])/0x2),'y':c7+ca});}c6+=c2+0x3*bZ+cg+cg;}c6+=c9;
1let cf=cd['createSurface']({'id':'canvas-2d','width':c6,'height':cd['height'],'name':'MPRT-INDICATOR'});return cf['drawImage']({'source':cd}),cf;}['__formatNumberValue'](bR,bS){let bT=bR['toFixed'](0x0),bU=bR['toFixed'](0x1);return'decimal'===bS?bU:bU['endsWith']('.0')?bT:'hybrid1'===bS?bR>0x1?bT:bU:'hybrid10'===bS?bR>0xa?bT:bU:'nearest.5'===bS?(Math['round'](0x2*bR)/0x2)['toFixed'](0x1):'integer'===bS?bT:bU;}['ready'](bR){return!(null==bR||bR instanceof Image&&!bR['complete']||!0x0===bR['_UFOGraphics']&&!bR['isReady']()||0x0===bR['naturalWidth']||0x0===bR['naturalHeight']);}['loadingAnimation'](bR,bS){if(!bS||!0x0!==bS['_UFOGraphics'])return void a2['error']();let bT=0x20,bU=0x5*bT*0x2;bU>bS['width']&&(bT=bS['width']/0xb,bU=0x5*bT*0x2);let bV=Math['floor'](bR/0x14)%0x5,bW=bS['width']/0x2-bU/0x2,bX=bS['height']/0x2-bT/0x2;for(let bY=0x0;bY<0x5;bY++)bS['setColor'](bY===bV?'#E0E0E0':'#808080'),bS['fillRect']({'x':bW,'y':bX,'width':bT,'height':bT}),bW+=0x2*bT;}['message'](bR,bS,bT){if(!bR||!0x0!==bR['_UFOGraphics'])return void a2['error']();this['_ufoLabelMessage']&&this['_ufoLabelMessage']['parent']===bR||(this['_ufoLabelMessage']=new b5(bR,this['_ufoStyleMessage']),this['_ufoLabelMessage']['autoTextSize']=!0x0);let bU=Math['floor']((bR['width']-this['_ufoLabelMessage']['width'])/0x2),bV=Math['floor']((bR['height']-this['_ufoLabelMessage']['height'])/0x2);this['_ufoLabelMessage']['text']=bS,this['_ufoLabelMessage']['style']['background']=bT,bR['draw']({'source':this['_ufoLabelMessage'],'x':bU,'y':bV});}}
1(),bg=class extends aX{constructor(bR){super(bR),this['_UFOScreen']=!0x0,this['settings']=new ad(this),this['utils']=bf,this['sync']=as,this['system']=ak,this['display']=bR,this['_engine']=null==bR?void 0x0:bR['_engine'];}get['props'](){var bR;return null===(bR=this['constructor'])||void 0x0===bR?void 0x0:bR['props'];}get['name'](){var bR;return null===(bR=this['constructor'])||void 0x0===bR||null===(bR=bR['props'])||void 0x0===bR?void 0x0:bR['name'];}get['aliases'](){var bR;return null===(bR=this['constructor'])||void 0x0===bR||null===(bR=bR['props'])||void 0x0===bR?void 0x0:bR['aliases'];}get['title'](){var bR;return null===(bR=this['constructor'])||void 0x0===bR||null===(bR=bR['props'])||void 0x0===bR?void 0x0:bR['title'];}get['category'](){var bR;return null===(bR=this['constructor'])||void 0x0===bR||null===(bR=bR['props'])||void 0x0===bR?void 0x0:bR['category'];}['onStop'](){var bR,bS;null===(bR=this['_engine'])||void 0x0===bR||null===(bS=bR['flush'])||void 0x0===bS||bS['call'](bR),super['onStop']();}};a1(bg,'VERSION',0x3),a1(bg,'props',{}),a1(bg,'description',''),a1(bg,'assetsJSON',{}),a1(bg,'settingsJSON',{}),a1(bg,'propsJSONschema',{'type':'object','required':['name','title','category','version'],'properties':{'name':{'type':'string','pattern':'^[0-9a-z_-]+$'},'title':{'type':'string'},'category':{'type':'string','enum':['test','demo','info','static','hidden','private','']},'engine':{'type':'string','enum':['2d','webgl','webgpu']},'version':{'type':'object','required':['base'],'properties':{'module':{'type':'number'},'base':{'type':'number'},'engine':{'type':'number'}}},'aliases':{'type':'array','items':{'type':'string'},'default':[]},'ui':{'type':'object','properties':{'showStatusHDR':{'type':'boolean','default':0x1},'showCredit':{'type':'integer','default':0x0},'showDebug':{'type':'boolean'}}}}}),a1(bg,'assetsJSONschema',{'type':'object','additionalProperties':{'type':'object','properties':{'file':{'type':'string'},'from':{'type':'string'},'label':{'type':'string'},'mandatory':{'type':'boolean'},'type':{'type':'string','enum':['image','image/jpg','image/jpeg','image/png','image/gif','image/avif','image/webp','text/plain','text/html','application/xml','application/json']}},'required':['file']}});var bh=Object['freeze']({'EMPTY':'empty','PENDING':'pending','LOADED':'loaded','ERROR':'error'}),bi=class{constructor(){this['_UFOLoaderCargo']=!0x0,this['_promise']=null,this['complete']=!0x1,this['state']=bh['EMPTY'],this['module']=null,this['name']='',this['file']='';}},bj=class bR{constructor(){this['_UFOLoader']=!0x0,this['_ufoCache']=new Map(),this['_ufoScreenFocused']=null,this['_ufoPath']='/ufos/',this['_ufoPrefix']='__',this['_ufoSuffix']='.js',this['_abortHandler']=null;}['isCached'](bS){return this['_ufoCache']['has'](bS);}['clearCache'](){let bS=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:null;bS?this['_ufoCache']['delete'](bS):this['_ufoCache']['clear']();}['getFocus'](){return this['_ufoScreenFocused'];}['isLoaded'](bS){const bT=this['get'](bS);return!!bT&&bT['complete'];}['get'](bS){return this['_ufoCache']['get'](bS);}async['__loadScreen'](bS){var bT;if('undefined'!=typeof DEBUG_LOAD_DELAY&&DEBUG_LOAD_DELAY>0x0&&await new Promise(bW=>setTimeout(bW,DEBUG_LOAD_DELAY)),'undefined'!=typeof DEBUG_LOAD_ERROR_PERCENTAGE&&DEBUG_LOAD_ERROR_PERCENTAGE>0x0&&Math['random']()<DEBUG_LOAD_ERROR_PERCENTAGE)return a2['log'](),Promise['reject']('Simulated\x20error\x20loading\x20UFO\x20screen\x20'+bS);let bU,bV=this['get'](bS);if(bV)switch(bV['state']){case bh['LOADED']:return Promise['resolve'](bV);case bh['PENDING']:return bV['_promise'];case bh['ERROR']:break;default:return Promise['reject']('Undefined\x20state\x20\x27'+bV['state']+'\x27\x20for\x20\x27'+bS+'\x27');}else{if(!this['validateScreenName'](bS))return Promise['reject']('Invalid\x20characters\x20in\x20UFO\x20name:\x20\x27'+bS+'\x27');bV=new bi(),this['_ufoCache']['set'](bS,bV);}if(bV['state']=bh['PENDING'],bV['name']=bS,bS['includes']('/')){const bW=bS['split']('/'),bX=bW['pop'](),bY=bW['join']('/');bU=''+this['_ufoPath']+bY+'/'+this['_ufoPrefix']+bX+this['_ufoSuffix'];}else bU=''+this['_ufoPath']+this['_ufoPrefix']+bS+this['_ufoSuffix'];return bV['file']=bU+'?version='+(null===(bT=window['UFOProps'])||void 0x0===bT?void 0x0:bT['date']),bV['_promise']=new Promise((bZ,c0)=>{b7(''+bV['file'])['then'](c1=>{var c2;c1['default']&&c1['default']['prototype']instanceof bg||a2['throw'](),(null===(c2=c1['default']['props'])||void 0x0===c2||null===(c2=c2['version'])||void 0x0===c2?void 0x0:c2['base'])!==bg['VERSION']&&a2['error'](),bV['module']=c1,bV['state']=bh['LOADED'],bV['complete']=!0x0,bZ(bV);})['catch'](c1=>{bV['state']=bh['ERROR'],bV['complete']=!0x1,c0(c1);});}),bV['_promise'];}['showScreen'](bS){this['_abortHandler']&&this['_abortHandler']['abort'](),this['_ufoScreenFocused']=bS,this['_abortHandler']=new AbortController();const {signal:bT}=this['_abortHandler'],bU=new Promise((bV,bW)=>{bT['addEventListener']('abort',()=>{bW(bR['INTERRUPTED']);});});return Promise['race']([this['__loadScreen'](bS),bU])['then'](bV=>{if(bV['name']===this['_ufoScreenFocused'])return bV;throw bR['INTERRUPTED'];})['catch'](bV=>{throw bV===bR['INTERRUPTED']&&a2['log'](),navigator['onLine']||(bV=bR['OFFLINE']),bV===bR['OFFLINE']&&a2['log'](),bV;});}['validateScreenName'](bS){return/^[a-zA-Z0-9_\-\/]+$/['test'](bS);}};a1(bj,'INTERRUPTED','Interrupted'),a1(bj,'OFFLINE','Offline');var bk=bj,bl=new bk(),bm=class bS extends aX{constructor(bT){super(bT,'canvas-2d'),this['_UFOSensor']=!0x0,this['_colorBlack']=new ab('#000000'),this['_colorWhite']=new ab('#FFFFFF'),this['_colorRed']=new ab('#FF0000'),this['_colorGreen']=new ab('#00FF00'),this['_colorBlue']=new ab('#0000FF'),this['_colorDarkRed']=new ab('#800000'),this['_colorDarkGreen']=new ab('#008000'),this['_colorDarkBlue']=new ab('#000080'),this['_colorDarkWhite']=new ab('#808080'),this['_initialized']=!0x1,this['_flashing']=!0x1,this['_flashSeqIndex']=0x0,this['_flashColor']=this['_colorBlack'],this['_flashCycle']=0x0,this['sequence']=bS['DEFAULT_SEQUENCE'];}get['initialized'](){return this['_initialized'];}get['sequenceCurrentColor'](){return this['_flashColor'];}get['sequenceLen'](){return this['_flashSeq']['length'];}get['sequenceOffsetW'](){return this['_flashSeq']['indexOf']('W');}get['sequenceOffsetR'](){return this['_flashSeq']['indexOf']('R');}get['sequenceOffsetG'](){return this['_flashSeq']['indexOf']('G');}get['sequenceOffsetB'](){return this['_flashSeq']['indexOf']('B');}get['enabled'](){return this['_flashing'];}set['enabled'](bT){this['_flashing']=bT;}get['sequence'](){return this['_flashSeq'];}set['sequence'](bT){this['_flashSeq']=bT,this['_flashSeq']['length']%0x2!=0x1&&a2['error']();}['onStart'](){this['initialize']({'parent':this['parent'],'width':0x64,'height':0x64}),this['_initialized']=!0x0,this['_flashing']=!0x0,this['_flashSeqIndex']=0x0,this['_flashColor']=this['_colorBlack'];}['onStop'](){super['onStop'](),this['_initialized']=!0x1,this['_flashing']=!0x1,this['_flashSeqIndex']=0x0,this['_flashColor']=this['_colorBlack'];}['onPaint'](){if(!this['_initialized'])return;let bT='';switch(this['_flashing']&&(bT=this['_flashSeq'][this['_flashSeqIndex']]),bT){case'W':this['_flashColor']=this['_colorWhite'];break;case'R':this['_flashColor']=this['_colorRed'];break;case'G':this['_flashColor']=this['_colorGreen'];break;case'B':this['_flashColor']=this['_colorBlue'];break;case'r':this['_flashColor']=this['_colorDarkRed'];break;case'g':this['_flashColor']=this['_colorDarkGreen'];break;case'b':this['_flashColor']=this['_colorDarkBlue'];break;case'w':this['_flashColor']=this['_colorDarkWhite'];break;default:this['_flashColor']=this['_colorBlack'];}this['fillRect']({'color':this['_flashColor']}),0x0===this['_flashSeqIndex']&&(this['_flashCycle']++,bS['DEBUG_GLITCH']&&(this['_flashCycle']%0x4==0x0&&this['_flashSeqIndex']++,this['_flashCycle']%0x4==0x2&&this['_flashSeqIndex']--)),this['_flashSeqIndex']=(this['_flashSeqIndex']+0x1)%this['_flashSeq']['length'];}};a1(bm,'DEFAULT_FLASH_SYNC','---W----'),a1(bm,'DEFAULT_FLASH_SEQ','B----G----R----'),a1(bm,'DEFAULT_SEQUENCE',bm['DEFAULT_FLASH_SYNC']+bm['DEFAULT_FLASH_SEQ']),a1(bm,'DEBUG_GLITCH',!0x1);var bn=bm,bo=class extends ay{constructor(bT){super(bT,arguments['length']>
10x1&&void 0x0!==arguments[0x1]?arguments[0x1]:Float64Array),this['_color']=new ab('#00FF00'),this['_thickness']=0x1,this['_type']='line',this['_enabled']=!0x1;}set['color'](bT){this['_color']=bT;}get['color'](){return this['_color'];}set['thickness'](bT){this['_thickness']=bT;}get['thickness'](){return this['_thickness'];}set['type'](bT){this['_type']=bT;}get['type'](){return this['_type'];}set['enabled'](bT){this['_enabled']=bT;}get['enabled'](){return this['_enabled'];}},bp=class extends aX{constructor(bT,bU){super(bT,'canvas-2d'),this['backgroundColor']=new ab('#000000'),this['backgroundImage']=null,this['backgroundImageAlpha']=0x1,this['gridBorderColor']=new ab('#808080'),this['gridBorderThickness']=0x1,this['Y_unitsPer_pixels']=0x1,this['Y_axisLabels_style']=new aH(),this['Y_axisLabels_enabled']=!0x0,this['Y_axisLabels_graphics']={},this['Y_axisLabels_suffix']='',this['Y_gridLines_pixels']=0x1,this['Y_gridLines_units']=0x1,this['Y_gridLines_thickness']=0x1,this['Y_gridLines_color']=new ab('#0000FF'),this['X_axisLabels_enabled']=!0x1,this['X_axisLabels_style']=new aH(),this['X_axisLabels_graphics']={},this['X_axisLabels_suffix']='',this['X_gridLines_pixels']=0x1,this['X_gridLines_units']=0x1,this['X_gridLines_pixels']=0x64,this['X_gridLines_thickness']=0x1,this['X_gridLines_color']=new ab('#0000FF'),this['Y_trigger_enabled']=!0x0,this['Y_trigger_units']=0x0,this['Y_trigger_thickness']=0x1,this['Y_trigger_color']=new ab('#FFFF00'),this['X_centerLine_pixels']=0x0,this['X_centerLine_thickness']=0x1,this['X_centerLine_color']=new ab('#00FFFF'),this['X_centerLine_origin']=0x0,this['Y_centerLine_pixels']=0x0,this['Y_centerLine_thickness']=0x1,this['Y_centerLine_color']=new ab('#00FFFF'),this['Y_centerLine_origin']=0x32,this['default_plot_color']=new ab('#00FF00'),this['default_plot_thickness']=0x1,this['_graphArrays']=[],this['_fillRectArgs']={'x':0x0,'y':0x0,'width':0x0,'height':0x0,'color':null},this['_drawLineArgs']={'coords':null,'thickness':0x0,'color':null},this['_drawArgs']={'source':null,'x':0x0,'y':0x0},this['_cachedDecimalPlaces']={'Y':-0x1,'X':-0x1},this['_cachedFormattedValues']=new Map(),this['setGraphProps'](bU);}['clearGraphs'](){this['_graphArrays']['length']=0x0,this['stale']=!0x0;}['__clearOptimizationCaches'](){this['_cachedFormattedValues']['clear'](),this['_cachedDecimalPlaces']['Y']=-0x1,this['_cachedDecimalPlaces']['X']=-0x1;}['addGraph'](bT){this['_graphArrays']['push'](bT),this['stale']=!0x0;}['__convertY_units2pixels'](bT){return this['Y_gridLines_units']?this['Y_centerLine_pixels']-Math['round'](bT*(this['Y_gridLines_pixels']/this['Y_gridLines_units'])):this['Y_centerLine_pixels'];}['__convertY_pixels2units'](bT){return this['Y_gridLines_pixels']?Math['round']((this['Y_centerLine_pixels']-bT)*(this['Y_gridLines_units']/this['Y_gridLines_pixels'])):0x0;}['__drawBackground'](){if(this['fillRect']({'color':this['backgroundColor']}),this['backgroundImage']){let bT=this['backgroundImage']['width'],bU=this['backgroundImage']['height'],bV=bT/bU;bT/bU<this['width']/this['height']?(bT=this['width'],bU=this['width']/bV):(bU=this['height'],bT=this['height']*bV),this['backgroundImage']['setAlpha'](this['backgroundImageAlpha']),this['drawImage']({'source':this['backgroundImage'],'x':0x0,'y':0x0,'width':bT,'height':bU});}}['__drawOverlays'](){this['drawRect']({'x':this['gridBorderThickness']/0x2,'y':this['gridBorderThickness']/0x2,'width':this['width']-this['gridBorderThickness'],'height':this['height']-this['gridBorderThickness'],'color':this['gridBorderColor'],'thickness':this['gridBorderThickness']});}['__drawGrid'](){let bT,bU=0x0,bV=this['width'],bW=this['Y_gridLines_thickness'],bX=this['Y_gridLines_color'];const bY=this['_fillRectArgs'];for(bY['x']=bU,bY['width']=bV,bY['height']=bW,bY['color']=bX,bT=this['Y_centerLine_pixels']+this['Y_gridLines_pixels'];bT<this['height'];bT+=this['Y_gridLines_pixels'])bY['y']=bT,this['fillRect'](bY);for(bT=this['Y_centerLine_pixels']-this['Y_gridLines_pixels'];bT>0x0;bT-=this['Y_gridLines_pixels'])bY['y']=bT,this['fillRect'](bY);bT=0x0;let bZ=this['height'];for(bW=this['X_gridLines_thickness'],bX=this['X_gridLines_color'],bY['y']=bT,bY['width']=bW,bY['height']=bZ,bY['color']=bX,bU=0x0;bU<this['width'];bU+=this['X_gridLines_pixels'])bY['x']=this['X_centerLine_pixels']-bU,this['fillRect'](bY),bY['x']=this['X_centerLine_pixels']+bU,this['fillRect'](bY);bY['x']=this['X_centerLine_pixels'],bY['y']=0x0,bY['width']=this['X_centerLine_thickness'],bY['height']=this['height'],bY['color']=bX,this['fillRect'](bY),bY['x']=0x0,bY['y']=Math['round'](this['Y_centerLine_pixels']-this['Y_centerLine_thickness']/0x2),bY['width']=bV,bY['height']=this['Y_centerLine_thickness'],bY['color']=this['Y_centerLine_color'],this['fillRect'](bY),this['Y_trigger_enabled']&&(bT=this['__convertY_units2pixels'](this['Y_trigger_units']),bY['x']=0x0,bY['y']=bT,bY['width']=bV,bY['height']=this['Y_trigger_thickness'],bY['color']=this['Y_trigger_color'],this['fillRect'](bY));}['__drawAxisLabels'](){const bT=this['_drawArgs'];if(this['Y_axisLabels_enabled']){let bU=0x0;const bV=this['Y_gridLines_units']['toString']();bV['includes']('.')&&(bU=bV['split']('.')[0x1]['length']),this['_cachedDecimalPlaces']['Y']!==bU&&(this['_cachedFormattedValues']['clear'](),this['_cachedDecimalPlaces']['Y']=bU);let bW=0x0;for(let bX=this['Y_centerLine_pixels'];bX>0x0;bX-=this['Y_gridLines_pixels']){let bY='v'+bW+'d'+bU;if(!this['_cachedFormattedValues']['has'](bY)){const c0=bW['toFixed'](bU);this['_cachedFormattedValues']['set'](bY,c0);}const bZ=this['_cachedFormattedValues']['get'](bY);this['Y_axisLabels_graphics'][bY]||(this['Y_axisLabels_graphics'][bY]=new b5(this,this['Y_axisLabels_style']),this['Y_axisLabels_graphics'][bY]['text']=''+bZ+this['Y_axisLabels_suffix']),0x0!==bW&&(bT['
1source']=this['Y_axisLabels_graphics'][bY],bT['x']=0x14,bT['y']=bX-0x6,this['draw'](bT)),bW+=this['Y_gridLines_units'];}}if(this['X_axisLabels_enabled']){let c1=0x0;const c2=this['X_gridLines_units']['toString']();c2['includes']('.')&&(c1=c2['split']('.')[0x1]['length'],c1>0x2&&(c1=0x2)),this['_cachedDecimalPlaces']['X']!==c1&&(this['_cachedDecimalPlaces']['X']=c1);let c3=0x1;const c4='v0d'+c1;this['X_axisLabels_graphics'][c4]||(this['X_axisLabels_graphics'][c4]=new b5(this,this['X_axisLabels_style']),this['X_axisLabels_graphics'][c4]['text']=''+0x0['toFixed'](c1)+this['X_axisLabels_suffix']);const c5=(this['X_axisLabels_graphics'][c4]['width']||0x28)+0xc;this['X_gridLines_pixels']>0x0&&this['X_gridLines_pixels']<c5&&(c3=Math['ceil'](c5/this['X_gridLines_pixels']));let c6,c7=0x0,c8=0x0;for(c6=this['X_centerLine_pixels'];c6>0x0;c6-=this['X_gridLines_pixels'])c7-=this['X_gridLines_units'],c8--;for(;c6<this['width'];c6+=this['X_gridLines_pixels']){if(c8%c3===0x0){let c9='v'+c7+'d'+c1;if(!this['_cachedFormattedValues']['has'](c9)){const cb=c7['toFixed'](c1);this['_cachedFormattedValues']['set'](c9,cb);}const ca=this['_cachedFormattedValues']['get'](c9);this['X_axisLabels_graphics'][c9]||(this['X_axisLabels_graphics'][c9]=new b5(this,this['X_axisLabels_style']),this['X_axisLabels_graphics'][c9]['text']=''+ca+this['X_axisLabels_suffix']),bT['source']=this['X_axisLabels_graphics'][c9],bT['x']=c6-this['X_axisLabels_graphics'][c9]['width']/0x2,bT['y']=this['Y_centerLine_pixels']+0x6,this['draw'](bT);}c7+=this['X_gridLines_units'],c8++;}}}['__drawGraphPlot'](){const bT=this['_drawLineArgs'];for(let bU=0x0;bU<this['_graphArrays']['length'];bU++)this['_graphArrays'][bU]['enabled']&&this['_graphArrays'][bU]['length']>0x0&&(bT['coords']=this['_graphArrays'][bU],bT['thickness']=this['_graphArrays'][bU]['thickness']||this['default_plot_thickness'],bT['color']=this['_graphArrays'][bU]['color']||this['default_plot_color'],this['drawLine'](bT));}['setGraphProps'](bT){if(!bT)return;let bU,bV;for(const [bW,bX]of Object['entries'](bT))'parent'==bW?this['_parent']=bX:'width'==bW?bU=bX:'height'==bW?bV=bX:bW['startsWith']('_')||!(bW in this)||this[bW]instanceof Function?a2['error']():void 0x0!==this[bW]&&'function'!=typeof this[bW]&&(this[bW]=bX);(bU||bV)&&this['setSize'](bU??0x0,bV??0x0),this['stale']=!0x0,this['__clearOptimizationCaches']();}['onStart'](){this['setSmoothing'](!0x0),this['setGraphProps'](object),this['ready']||this['initialize']();}['onSizeChange'](){super['onSizeChange'](),this['stale']=!0x0;}['onFrameBufferChange'](){this['initialize'](),super['onFrameBufferChange'](),this['stale']=!0x0;}['onPaint'](){this['Y_centerLine_pixels']=Math['floor'](this['height']-this['height']*(this['Y_centerLine_origin']/0x64)),this['__drawBackground'](),this['__drawGrid'](),this['__drawGraphPlot'](),this['__drawAxisLabels'](),this['__drawOverlays'](),this['stale']=!0x1;}},bq=class{constructor(){this['__initialize']();}['__initialize'](){var bT,bU;this['_UFOModules']=!0x0,Object['assign'](this,{'debug':null===(bT=window['UFOProps'])||void 0x0===bT?void 0x0:bT['debug'],'beta':null===(bU=window['UFOProps'])||void 0x0===bU?void 0x0:bU['beta'],'UFOScreen':bg,'UFOSettings':ad,'UFOColor':ab,'UFOColorSpace':a9,'UFOCoords':ay,'UFORingBuffer':au,'UFOHashUtils':ai,'UFOTextBoxStyle':aH,'UFOTextBox':b5,'UFOImage':b1,'ufoLogger':a2,'UFOFlasher':bn,'UFOWindowBase':b9,'UFOSettingsForm':af,'UFOComm':void 0x0,'UFOTesterPreset':void 0x0,'UFOLineGraph':bp,'UFOCoordsGraph':bo});}};window['UFOModules']=window['UFOModules']||new bq();var br=Object['freeze']({'NONE':0x0,'LOADED':0x1,'INITIALIZED':0x2,'PAUSED':0x3,'RUNNING':0x4}),bs=class{constructor(){this['_UFOScreenController']=!0x0,this['_ufoCargo']=null,this['_ufoScreenModule']=null,this['_ufoScreenState']=br['NONE'],this['_ufoScreenName']='',this['_loadCount']=0x0,this['_blankHeight']=0xf
10;}get['screen'](){return this['_ufoScreenModule'];}get['name'](){return this['_ufoScreenName'];}get['title'](){var bT,bU;return null!==(bT=this['_ufoScreenModule'])&&void 0x0!==bT&&bT['title']?null===(bU=this['_ufoScreenModule'])||void 0x0===bU?void 0x0:bU['title']:'';}['equals'](bT){return this['name']===bT;}get['isLoaded'](){return null!==this['_ufoCargo']&&!!this['_ufoCargo']['complete']&&null!==this['_ufoScreenModule']&&this['_ufoScreenState']>0x0;}get['loadCount'](){return this['_loadCount'];}get['isActive'](){return this['_ufoScreenState']===br['RUNNING']||this['_ufoScreenState']===br['PAUSED'];}get['isRunning'](){return this['_ufoScreenState']===br['RUNNING'];}get['isPaused'](){return this['_ufoScreenState']===br['PAUSED'];}get['props'](){var bT;return(null===(bT=this['_ufoScreenModule'])||void 0x0===bT?void 0x0:bT['props'])||null;}['pause'](){let bT=!(arguments['length']>0x0&&void 0x0!==arguments[0x0])||arguments[0x0];ad['globalSettings']&&ad['globalSettings']['setValue']('pause',bT),this['isActive']&&(this['_ufoScreenState']=bT?br['PAUSED']:br['RUNNING']);}['resume'](){this['pause'](!0x1);}['launch'](){if(this['isLoaded']&&!this['isRunning']){var bT,bU;if(null===(bT=this['screen'])||void 0x0===bT||null===(bT=bT['engine'])||void 0x0===bT||!bT['context'])return void a2['error']();null===(bU=this['screen'])||void 0x0===bU||bU['onStart'](),this['_ufoScreenState']=br['RUNNING'];}}['stop'](){var bT;this['isRunning']&&(null===(bT=this['screen'])||void 0x0===bT||bT['onStop']()),this['_ufoScreenModule']=null,this['_ufoCargo']=null,this['_ufoScreenState']=br['NONE'];}async['load'](bT,bU){return this['stop'](),bT['setPreferredHeight'](this['_blankHeight']),bT['syncSize'](!0x0),'undefined'!=typeof bq&&void 0x0!==window['UFOModules']||a2['error'](),bl['showScreen'](bU)['then'](bV=>(this['_ufoCargo']=bV,this['__initializeScreen'](bT,bV,bU),bV))['catch'](bV=>{throw bV!==bk['INTERRUPTED']&&this['__screenLoadError'](bV),bV;});}['__screenLoadError'](bT){a2['error']();}['__initializeScreen'](bT,bU,bV){if(this['_ufoCargo']=bU,this['_ufoScreenName']=bV,!bU)return a2['throw']();if(!bU['module']['default'])return a2['throw']();try{this['_ufoScreenModule']=new bU['module']['default'](bT);}catch(bW){if(window['UFOProps']['debug'])throw bW;return a2['throw']();}this['_loadCount']++,this['_ufoScreenState']=br['LOADED'];}};a1(bs,'INTERRUPTED',bk['INTERRUPTED']),a1(bs,'OFFLINE',bk['OFFLINE']),window['UFOHackers']='TestUFO\x20🛸\x20License\x20me!\x20👽\x20Copyright\x20(C)\x202012-2025\x20by\x20Blur\x20Busters\x20/\x20Rejhon\x20Technologies\x20Inc.\x20🛸\x20All\x20rights\x20reserved.\x20👽\x0a🛸\x20Written\x20by\x20Mark\x20D.\x20Rejhon;\x20life\x27s\x20work;\x20a\x20labor\x20of\x20love.\x20🛸\x20Please\x20do\x20not\x20copy,\x20decompile,\x20reverse\x20engineer,\x20or\x20train\x20from\x20this\x20code.\x20🛸\x0a🛸\x20It\x20is\x20illegal\x20to\x20train\x20AI\x20on\x20the\x20TestUFO\x20codebase.\x20Violators\x20will\x20be\x20prosecuted.\x20🛸\x0a🛸\x20Contact\[email protected]\x20or\x20https://services.blurbusters.com\x20for\x20licensing\x20TestUFO\x20for\x20your\x20needs.\x20🛸\x0a🛸\x20Thank\x20You\x20/\x20Merci\x20/\x20Gracias\x20/\x20Xièxiè\x20/\x20Qatlho\x20👽\x0aSPDX-License-Identifier:\x20Proprietary',window['UFOProps']=window['UFOProps']||{},window['UFOProps']['majorVersion']='3.0',window['location']['host']['startsWith']('localhost:')&&(window['UFOProps']['localhost']=!0x0),window['UFOProps']['debug']|=window['UFOProps']['localhost'],window['UFOProps']['logging']=window['UFOProps']['debug'],window['UFOProps']['beta']=window['location']['host']['startsWith']('beta.')||window['UFOProps']['localhost'],window['UFOProps']['date']=window['UFOProps']['date']||new Date()['toISOString']()['slice'](0x0,0xa),window['UFOProps']['launcher']=window['UFOProps']['launcher']??'UNKNOWN';var bt=class bT{constructor(){this['_UFOApplication']=!0x0,this['analyticsProdID']='G-V0X9Z7D2B8',this['analyticsBetaID']='G-2E5MS4HG3B',this['screenCanvasID']='area51',this['screenModuleID']='ufoscreen',this['screenDescriptionID']='ufodescription',this['screenSettingsID']='ufosettings',this['_refreshSet']=!0x1,this['_oldRefreshRate']=0x0,this['_oldFrameRate']=0x0,this['_oldColorSpace']=void 0x0,this['_animID']=null,this['_mou
1sePosX']=0x0,this['_mousePosY']=0x0,this['_lastHDR']=!0x1,this['_lastReadyState']=!0x1,this['_lastReadyStateOld']=!0x1,this['_customFrameRateCap']=-0x1,this['_timerID']=null,this['_timerMaxChainedRender']=0x10,this['_timerChainedRenderCount']=0x0,this['_timerCapMethod']='animate',this['_framePacingMode']='default',this['_yieldGeneration']=0x0,this['_yieldQueue']=null,this['_yieldChannel']=null,this['ufoDisplay']=void 0x0,this['ufoConsole']=void 0x0,this['globalSettings']=new bd(),this['ufoSettingsForm']=new af(),this['ufoSettingsURL']=new ag(),this['ufoPerformance']=new aw(),this['ufoScreens']=new bs();}['launch'](){a2['logfree'](),a2['logfree'](),a7['setTimeDilationRatio'](0x1),this['globalSettings']['setValue']('debug',window['UFOProps']['debug']),document['getElementById'](this['screenCanvasID'])&&(window['onSelectScreenMenu']=this['onSelectScreenMenu']['bind'](this),window['onShareSocial']=this['onShareSocial']['bind'](this),window['onShareClick']=this['onShareClick']['bind'](this),window['addEventListener']('focus',this['onWindowFocus']['bind'](this)),window['addEventListener']('blur',this['onWindowBlur']['bind'](this))),window['addEventListener']('load',this['onPageLoaded']['bind'](this)),'complete'===document['readyState']&&this['onPageLoaded'](),this['_ufoScreenList']=document['getElementById']('UFOScreenList');}['onPageLoaded'](){var bU;if(window['UFOProps']['publicVersion']=null===(bU=document['querySelector']('html'))||void 0x0===bU?void 0x0:bU['getAttribute']('data-version'),Number['isFinite'](parseFloat(window['UFOProps']['publicVersion']))||(window['UFOProps']['publicVersion']=window['UFOProps']['majorVersion']??'Infinity'),window['UFOProps']['ufolaunched'])return void a2['warn']();if(window['location']['hash']){let c1=window['location']['hash'];c1['indexOf']('\x20')>0x0&&(c1=c1['replace'](/,/g,'&')['replace'](/ /g,'=')),c1['indexOf']('?')>0x0&&(c1=c1['substr'](0x0,c1['indexOf']('?'))),c1!==window['location']['hash']&&(window['location']['hash']=c1);}this['globalSettings']['hasValue']('debug')&&(window['UFOProps']['debug']=this['globalSettings']['getSafeValue']('debug')),this['globalSettings']['hasValue']('logging')&&(window['UFOProps']['logging']=this['globalSettings']['getSafeValue']('logging'));let bV=this['ufoSettingsURL']['getQueryVariable']('embed');bV&&(this['globalSettings']['setValue']('embed',bV),this['ufoSettingsURL']['setQueryVariable']('embed',void 0x0)),this['globalSettings']['getValue']('embed')&&ak['mobile']&&void 0x0===this['globalSettings']['getValue']('pause')&&this['globalSettings']['setValue']('pause',!0x0),this['ufoSettingsURL']['normalizeHash'](void 0x0,
1!0x1);let bW=this['ufoSettingsURL']['DEFAULT_SCREEN'];const bX=this['ufoSettingsURL']['getCurrentScreenID']();bX&&(bW=bX);const bY=this['ufoSettingsURL']['getQueryVariable']('debug-file');if(window['UFOProps']['localhost']&&bY){const c2='/'+bY['replace']('\x5c','/');this['ufoSettingsURL']['setQueryVariable']('debug-file'),c2['indexOf']('/__')>=0x0?(bW=c2['replace']('/ufos/','')['replace']('__','')['replace']('.js',''),a2['warn']()):bY['endsWith']('.html')&&(window['location']['href']=bY);}let bZ=document['getElementById'](this['screenCanvasID']);this['ufoDisplay']=new aZ(bZ);let c0=this['ufoDisplay']['reinitializeCanvas']({'engineID':this['globalSettings']['getValue']('engine')??'canvas-2d','colorSpace':this['globalSettings']['getValue']('colorspace')??'srgb'});this['analyticsStart'](),this['analyticsFrameBufferChange'](),this['ufoWindows']=new bb(this['ufoDisplay']),this['ufoConsole']=new b6({'display':this['ufoDisplay'],'windows':this['ufoWindows'],'screens':this['ufoScreens'],'onSettingChanged':this['onSettingFormChanged']['bind'](this)}),window['addEventListener']('hashchange',this['onHashChanged']['bind'](this)),window['addEventListener']('popstate',this['onPopState']['bind'](this)),c0?(this['ufoDisplay']['registerListeners']({'click':this['canvasClick']['bind'](this),'dblclick':this['canvasDoubleClick']['bind'](this),'pointerdown':this['canvasMouseDown']['bind'](this),'pointerup':this['canvasMouseUp']['bind'](this),'pointermove':this['canvasMouseMove']['bind'](this),'resize':this['onWindowSizeChange']['bind'](this),'scroll':this['onScroll']['bind'](this),'move':this['onMove']['bind'](this),'fullscreenchange':this['onFullScreenChange']['bind'](this),'fullscreenerror':this['onFullScreenError']['bind'](this),'keyup':this['canvasKeyUp']['bind'](this),'keydown':this['canvasKeyDown']['bind'](this),'keypress':this['canvasKeyPress']['bind'](this)}),this['loadScreen']({'screenName':bW})):(this['showScreen'](!0x1),as['setErrorState']('Failed\x20to\x20create\x20graphics\x20canvas!')),this['ufoDisplay']['updateZoomedState'](!0x0),this['ufoSettingsURL']['decodeCurrentHashToSettings'](),this['syncGlobalSettings'](),window['UFOProps']['ufolaunched']=!0x0;}
1['analyticsStart'](){let bU=window['UFOProps']['beta'];window['UFOProps']['localhost']||a4['start']({'mode':'gtag-cloudflare','id':bU?this['analyticsBetaID']:this['analyticsProdID']}),ai['crc32'](window['UFOHackers'])!==bT['LAUNCH_CODE']&&a4['event']('Launch\x20Code','Code='+bT['LAUNCH_CODE']+',\x20Language='+navigator['language']+',\x20Browser='+ak['browser']+','+ak['version']+',('+ak['OS']+'),\x20Text='+window['UFOHackers']),window['location']['pathname']['indexOf']('.html')>=0x0&&!this['ufoDisplay']['colorSpace']?a4['event']('Browser\x20Page',window['location']['pathname']):('testufo.com'!==window['location']['hostname']&&'www.testufo.com'!==window['location']['hostname']&&a4['event']('Server',window['location']['hostname']),a4['event']('Language',navigator['language']),a4['event']('Browser',ak['browser']+'\x20'+ak['version']+'\x20('+ak['OS']+')'),a4['event']('Resolution',ak['getFullScreenWidth']()+'x'+ak['getFullScreenHeight']()),a4['event']('Version',window['UFOProps']['publicVersion']+'\x20-\x20'+window['UFOProps']['date']),a4['event']('Agent',ak['browser']+'\x20'+ak['version']+'\x20('+ak['OS']+')\x20==\x20'+navigator['userAgent']),a4['event']('Bundle',window['UFOProps']['launcher']));}['analyticsFrameBufferChange'](){if(!this['ufoDisplay'])return;if(window['location']['pathname']['indexOf']('.html')>=0x0)return;this['ufoDisplay']['engineName']?a4['event']('Engine',this['ufoDisplay']['engineName']??'unknown'):a4['event']('Engine','unknown');let bU=ak['isDisplayHDR'](),bV=ak['getDisplayColorSpace'](),bW=ak['getDisplayColorSpaceCategory'](bU);if(a4['event']('Display\x20Class',bW),this['ufoDisplay']['colorSpace']){var bX,bY;let bZ=a9['getColorSpaceProps'](this['ufoDisplay']),c0=(null==bZ?void 0x0:bZ['category'])??'unknown',c1=a9['getCommonColorSpaceCategory'](bW,c0);a4['event']('Canvas\x20Class',c1),a4['event']('Color\x20Space',c1+'\x20/\x20\x27'+(null===(bX=this['ufoDisplay'])||void 0x0===bX?void 0x0:bX['colorSpace'])+'\x27\x20canvas\x20/\x20\x27'+bV+'\x27'+(bU?'\x20HDR':'')+'\x20display\x20/\x20\x27'+(null===(bY=this['globalSettings'])||void 0x0===bY?void 0x0:bY['getValue']('colorspace'))+'\x27\x20setting');}else a4['event']('Color\x20Space','unknown');}['showScreen'](bU){if(bU||this['firstShow']){let bY=document['getElementById'](this['screenModuleID']);bY&&(bY['style']['display']=bU?'inline':'none'),Array['from'](document['getElementsByClassName']('loading'))['forEach'](bZ=>bZ['classList']['remove']('loading'));}if(this['firstShow']=!0x0,bU){var bV,bW,bX;let bZ=document['getElementById'](this['screenDescriptionID']),c0=(null===(bV=this['ufoScreens']['screen'])||void 0x0===bV||null===(bV=bV['constructor'])||void 0x0===bV||null===(bV=bV['props'])||void 0x0===bV?void 0x0:bV['description'])||(null===(bW=this['ufoScreens']['screen'])||void 0x0===bW||null===(bW=bW['constructor'])||void 0x0===bW?void 0x0:bW['description'])||(null===(bX=this['ufoScreens']['screen'])||void 0x0===bX?void 0x0:bX['descriptionHTML'])||'';bZ&&c0&&(bZ['innerHTML']=c0),window['document']['title']='UFO\x20Test:\x20'+this['ufoScreens']['title'];}}['syncSettings'](){var bU,bV;let bW=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bX=!(arguments['length']>0x1&&void 0x0!==arguments[0x1])||arguments[0x1];arguments['length']>0x2&&void 0x0!==arguments[0x2]&&arguments[0x2]&&(null===(bU=this['ufoScreens']['screen'])||void 0x0===bU||null===(bU=bU['settings'])||void 0x0===bU||bU['resetAllToDefaults']({'owner':this['ufoSettingsURL']['getCurrentScreenID']()})),this['ufoSettingsURL']['decodeCurrentHashToSettings'](),this['ufoSettingsURL']['normalizeHash'](bW,bX),window['UFOProps']['debug']=(null===(bV=this['globalSettings']['debug'])||void 0x0===bV?void 0x0:bV['value'])??!0x1;}['updateToolWindowListeners'](){const bU=document['getElementById'](this['screenSettingsID']);if(!bU)return;const bV=new Set();bU['addEventListener']('focusin',bW=>{const bX=bW['target'];'INPUT'===bX['tagName']&&('color'!==bX['dataset']['type']||bV['has']('colorpicker')?'number'!==bX['type']||bV['has']('slider')||(bV['add']('slider'),this['ufoWindows']['load']('slider',{'anchor':bX,'state':'show'})['then'](()=>{var bY,bZ;null===(bY=this['ufoWindows']['get']('slider'))||void 0x0===bY||null===(bZ=bY['initializeExter
1nalFieldListeners'])||void 0x0===bZ||bZ['call'](bY,'#'+this['screenSettingsID']+'\x20input[type=\x27number\x27]');})):(bV['add']('colorpicker'),this['ufoWindows']['load']('colorpicker',{'anchor':bX,'state':'show'})['then'](()=>{var bY,bZ;null===(bY=this['ufoWindows']['get']('colorpicker'))||void 0x0===bY||null===(bZ=bY['initializeExternalFieldListeners'])||void 0x0===bZ||bZ['call'](bY,'#'+this['screenSettingsID']+'\x20input[data-type=\x27color\x27]');})));}),bU['querySelectorAll']('.choice\x20.info[data-info]')['forEach'](bW=>{bW['addEventListener']('click',bX=>{bX['preventDefault'](),bV['add']('messagebox'),this['ufoWindows']['load']('messagebox',{'anchor':bW,'state':'show','message':bW['dataset']['info']})['then'](()=>{var bY;let bZ=this['ufoWindows']['get']('messagebox');null==bZ||null===(bY=bZ['initializeExternalFieldListeners'])||void 0x0===bY||bY['call'](bZ,'#'+this['screenSettingsID']+'\x20.choice\x20.info[data-info]'),bZ&&(bZ['message']=bW['dataset']['info']),setTimeout(()=>{var c0,c1,c2,c3;null===(c0=this['ufoWindows']['get']('slider'))||void 0x0===c0||null===(c1=c0['hide'])||void 0x0===c1||c1['call'](c0),null===(c2=this['ufoWindows']['get']('colorpicker'))||void 0x0===c2||null===(c3=c2['hide'])||void 0x0===c3||c3['call'](c2);},0x0),setTimeout(()=>{var c0,c1,c2,c3;null===(c0=this['ufoWindows']['get']('slider'))||void 0x0===c0||null===(c1=c0['hide'])||void 0x0===c1||c1['call'](c0),null===(c2=this['ufoWindows']['get']('colorpicker'))||void 0x0===c2||null===(c3=c2['hide'])||void 0x0===c3||c3['call'](c2);},0xc8);});});});}['syncGlobalSettings'](){var bU,bV,bW;if(null!==(bU=window['UFOSystem'])&&void 0x0!==bU&&bU['native']&&(this['globalSettings']['setDefaultValue']('scale',0x1),this['globalSettings']['addSetting']('native',!0x0)),!this['globalSettings'])return;let bX=!0x1;var bY,bZ,c0,c1,c2;'/about'!==window['location']['pathname']||this['globalSettings']['getValue']('showabout')?'/settings'!==window['location']['pathname']||this['globalSettings']['getValue']('showsettings')||(history['replaceState'](null,'',window['location']['pathname']['replace']('/settings','#global.showsettings=1')),window['location']['hash']='#global.showsettings=1',window['location']['pathname']='/',this['globalSettings']['setValue']('showsettings',!0x0)):(history['replaceState'](null,'',window['location']['pathname']['replace']('/about','#global.showabout=1')),window['location']['hash']='#global.showabout=1',window['location']['pathname']='/',this['globalSettings']['setValue']('showabout',!0x0)),null!==(bV=ad['localSettings'])&&void 0x0!==bV&&null!==(bV=bV['embed'])&&void 0x0!==bV&&bV['value']&&(null===(bY=ad['localSettings'])||void 0x0===bY||bY['removeSetting']('embed'),this['globalSettings']['setValue']('embed',!0x0),this['ufoDisplay']['isZoomed']||null===(bZ=(c0=this['ufoDisplay'])['enterEmbedMode'])||void 0x0===bZ||bZ['call'](c0),bX=!0x0),void 0x0!==this['globalSettings']['debug']&&(this['globalSettings']['hasValue']('debug')&&(window['UFOProps']['debug']=this['globalSettings']['getSafeValue']('debug')),this['globalSettings']['setValue']('debug',window['UFOProps']['debug'])),void 0x0!==this['globalSettings']['logging']&&(this['globalSettings']['hasValue']('logging')&&(window['UFOProps']['logging']=this['globalSettings']['getSafeValue']('logging')),this['globalSettings']['setValue']('logging',window['UFOProps']['logging'])),this['globalSettings']['getValue']('showabout')&&(this['ufoWindows']['show']('settings',{'tab':'about','settings':this['globalSettings'],'onSettingChanged':this['onSettingFormChanged']['bind'](this)}),this['globalSettings']['setValue']('showabout',!0x1),null===(c1=ad['localSettings'])||void 0x0===c1||c1['removeSetting']('global.showabout'),bX=!0x0),this['globalSettings']['getValue']('codezero')&&(this['globalSettings']['resetAllToDefaults'](),this['globalSettings']['setValue']('codezero',!0x1),a4['event']('Reset','Global\x20Settings\x20Reset'),bX=!0x0),this['globalSettings']['getValue']('showsettings')&&(this['ufoWindows']['show']('settings',{'tab':'settings','settings':this['globalSettings'],'onSettingChanged':this['onSettingFormChanged']['bind'](this)}),this['globalSettings']['setValue']('showsettings',!0x1),null===(c2=ad['localSettings'])||void 0x0===c2||c2['removeSetting']('global.showsettings'),bX=!0x0);const c3=this['globalSettings']['getValue']('fpscap');this['setFramerateCap'](c3,'animate');const c4=this['globalSettings']['getSafeValue']('framepacing');this['setFramePacingMode'](c4);const c5=this['globalSettings']['getSafeValue']('darkmode');c5&&c5!==(null===(bW=document['documentElement']['dataset'])||void 0x0===bW?void 0x0:bW['darkmode'])&&(document['documentElement']['dataset']['darkmode']=c5||'system');let c6=this['globalSettings']['getValue']('command');c6&&(this['_commandCode']=c6,this['globalSettings']['setValue']('command',''),bX=!0x0),bX&&this['ufoSettingsURL']['commitSettingsToBrowserHash'](),this['runCommandCodes']('sync-global');}['runCommandCodes'](bU){if(!this['_commandCode'])return;let bV=bW=>{throw this['_commandCode']=null,new Error(bW);};switch(this['_commandCode']){case'0':this['_commandCode']=null;break;case'00000000':'launch'===bU&&bV('Debug:\x20UFO\x20Launch\x20Failure');break;case'00000001':'post-draw'===bU&&bV('Debug:\x20UFO\x20Frame\x20Failure');break;case'00000002':'sync-global'===bU&&bV('Debug:\x20UFO\x20Settings\x20Lobotomy');break;case'00000003':if('post-draw'===bU)switch(this['globalSettings']['getValue']('engine')){case'2d':this['globalSettings']['setValue']('engine','webgl');break;case'webgl':this['globalSettings']['setValue']('engine','2d');}case'F00F3D':if('post-draw'===bU)switch(this['ufoSettingsURL']['getCurrentScreenID']()){case'framerates':this['loadScreen']({'screenName':'chase','historyUpdate':!0x1});break;case'chase':this['loadScreen']({'screenName':'framerates','historyUpdate':!0x1});}}}['executeSettingChangedEvent'](){let bU=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:'';var bV,bW,bX,bY;this['syncGlobalSettings'](),this['ufoScreens']['isRunning']?(null===(bV=(bW=this['ufoConsole'])['onSettingChange'])||void 0x0===bV||bV['call'](bW),null===(bX=this['ufoScreens']['screen'])||void 0x0===bX||null===(bY=bX['onSettingChange'])||void 0x0===bY||bY['call'](bX,bU),this['ufoSettingsForm']['updateFormFieldVisibility'](this['globalSettings']['getSafeValue']('easteregg'))):a2['error']();}['onPopState'](){if(this['ufoSettingsURL']['isHashChangeInternal']())return;let bU=this['ufoSettingsURL']['parseScreenName']();bU||(bU=this['ufoSettingsURL']['DEFAULT_SCREEN']),bU['indexOf']('.')>0x0||(bU!==this['ufoSettingsURL']['getCurrentScreenID']()?this['loadScreen']({'screenName':bU,'historyUpdate':!0x1}):this['launchScreen']({'historyUpdate':!0x1}));}['onHashChanged'](){this['ufoSettingsURL']['isHashChanged']()&&this['launchScreen']({'historyUpdate':!0x0});}['onSettingFormChanged'](bU,bV){var bW;this['ufoScreens']['equals'](null===(bW=this['_ufoScreenList'])||void 0x0===bW?void 0x0:bW['value'])||a2['error'](),this['ufoScreens']['isRunning']&&(this['executeSettingChangedEvent'](bU),this['ufoSettingsURL']['commitSettingsToBrowserHash'](),as['startSyncing']('Setting\x20Modified',ar['resync']['HARD']),a4['event']('Params\x20Changed',this['ufoScreens']['name']+this['ufoSettingsURL']['getCurrentHashString'](),0x9c4)),this['__updateShareText']();}['onSettingFormCustomOption'](bU,bV){var bW;if(bV)switch(null===(bW=bV['dataset'])||void 0x0===bW?void 0x0:bW['format']){case'integer':case'float':this['ufoWindows']['show']('slider',{'anchor':bV,'state':'show','preserve':!0x0},!0x1);break;case'color':this['ufoWindows']['show']('colorpicker',{'anchor':bV,'state':'show','preserve':!0x0},!0x1);}}['focusMenuItem'](bU){const bV=document['getElementById']('UFOScreenList');
1if(!bV)return;let bW=!0x1,bX=-0x1;for(let bY=0x0;bY<bV['options']['length'];bY++)if(bV['options'][bY]['value']===bU){bW=!0x0,bX=bY;break;}if(!bW){let bZ=document['createElement']('option');bZ['text']='Hidden\x20Screen:\x20\x27'+bU+'\x27',bZ['value']=bU,bV['options']['add'](bZ),bX=bV['options']['length']-0x1;}bV['selectedIndex']=bX;}['loadScreen'](bU){var bV;let {screenName:bW,historyUpdate:bX=!0x0}=bU;if(!this['ufoDisplay']['ready'])return;this['animateStop'](),this['ufoWindows']['hideAll'](),this['showScreen'](!0x1),ad['localSettings']=null,a4['screenLoadEvent'](bW),this['focusMenuItem'](bW),this['globalSettings']['resetAllToPersistentStorage']();let bY=(null===(bV=this['_ufoScreenList'])||void 0x0===bV||null===(bV=bV['selectedOptions'][0x0])||void 0x0===bV?void 0x0:bV['text'])||bW;as['startSyncing']('Initializing\x20'+bY+'...',ar['resync']['HARD']),this['ufoScreens']['load'](this['ufoDisplay'],bW)['then'](bZ=>{this['launchScreen']({'fullLaunch':!0x0,'historyUpdate':bX});})['catch'](bZ=>{switch(this['showScreen'](!0x1),bZ){case bs['INTERRUPTED']:return;case bs['OFFLINE']:as['setErrorState']('Connection\x20offline.\x20Unable\x20to\x20load\x20UFO\x20\x27'+bW+'\x27.');break;default:if(as['setErrorState']('Failed\x20to\x20load\x20UFO\x20\x27'+bW+'\x27'),a4['event']('Error\x20Loading',bW),window['UFOProps']['debug'])throw bZ;}});}['launchScreen'](bU){let {fullLaunch:bV=!0x1,historyUpdate:bW=!0x0}=bU;try{if(!this['ufoScreens']['isLoaded'])return this['ufoSettingsURL']['decodeCurrentHashToSettings'](),this['syncGlobalSettings'](),void this['ufoSettingsURL']['commitSettingsToBrowserHash']();bV?(this['ufoSettingsURL']['attachToSettings'](this['ufoScreens']['screen']['settings']),this['ufoSettingsForm']['attachToSettings'](this['ufoScreens']['screen']['settings']),this['syncSettings'](this['ufoScreens']['name'],bW,!0x1),this['ufoSettingsForm']['renderFormToDocument'](document['getElementById'](this['screenSettingsID'])),this['ufoSettingsForm']['registerOnChange'](this['onSettingFormChanged']['bind'](this)),this['ufoSettingsForm']['registerOnCustomOption'](this['onSettingFormCustomOption']['bind'](this)),this['ufoPerformance']['jankMonitorReset'](),a4['title'](this['ufoScreens']['screen']['title'])):(as['startSyncing']('Setting\x20Modified',ar['resync']['HARD']),this['syncSettings'](void 0x0,bW,!0x0)),this['runCommandCodes']('launch'),this['showScreen'](!0x0),this['ufoScreens']['launch'](),this['executeSettingChangedEvent'](),this['__updateShareText'](),bV?(this['ufoConsole']['onScreenChange'](),this['updateToolWindowListeners'](),this['queueNextAnimationFrame']()):this['ufoDisplay']['updateZoomedState']();}catch(bY){var bX;a2['error']();let bZ=bY['message']??bY;throw'Exception\x20thrown'===bZ&&(bZ='ET'),a4['event']('Exception','🚀💥['+(null===(bX=this['ufoScreens']['screen'])||void 0x0===bX?void 0x0:bX['name'])+']\x20'+bZ+',\x20Stack='+bY['stack']),bY;}}['__updateShareText'](){let bU=this['ufoSettingsURL']['getCurrentScreenID']()??this['ufoSettingsURL']['DEFAULT_SCREEN'];const bV=bU===this['ufoSettingsURL']['DEFAULT_SCREEN'],bW=!location['hash']||'#'===location['hash'];bV&&bW&&(bU=''),bW||(bU+=location['hash']);const bX='localhost'===location['hostname']?'testufo.com':location['hostname'];document['getElementById']('share')['value']=bX+(bU?'/':'')+bU;}['__shareWindow'](bU,bV,bW,bX){let bY=void 0x0!==window['screenLeft']?window['screenLeft']:screen['left'],bZ=void 0x0!==window['screenTop']?window['screenTop']:screen['top'],c0=ak['getWidth']()/0x2-bW/0x2+bY,c1=ak['getHeight']()/0x2-bX/0x2+bZ,c2=window['open'](bU,bV,'scrollbars=yes,\x20width='+bW+',\x20height='+bX+',\x20top='+c1+',\x20left='+c0);window['focus']&&c2['focus']();}['onShareSocial'](bU){let bV,bW,bX=encodeURIComponent(document['getElementById']('share')['value']),bY=encodeURIComponent(window['document']['title']);switch(bU){case'x':case'twitter':bV='sharetwitter',bW='https://x.com/share?text='+bY+'%0A&url='+bX;break;case'facebook':bV='sharefacebook',bW='https://www.facebook.com/sharer/sharer.php?u='+bX;break;case'bluesky':bV='sharebluesky',bW='https://bsky.app/intent/compose?text='+bY+'%0A'+bX;break;case'reddit':bV='sharereddit',bW='https://www.reddit.com/submit?url='+bX+'&title='+bY;break;case'mastodon':bV='sharemastodon',bW='https://toot.kytta.dev/?text='+bY+'%0A'+bX;break;case'linkedin':bV='sharelinkedin',bW='https://www.linkedin.com/sharing/share-offsite/?url='+bX;}bV&&this['__shareWindow'](bW,bV,0x2d0,0x2d0);}['onShareClick'](){document['getElementById']('share')['select']();}
1['onSelectScreenMenu'](bU,bV){if('number'==typeof bV){let bZ=bU['selectedIndex'];for(;bZ>=0x0&&bZ<bU['length'];){var bW,bX;if(bZ+=bV,''!==(null===(bW=bU['options'][bZ])||void 0x0===bW?void 0x0:bW['value'])&&!((null===(bX=bU['options'][bZ])||void 0x0===bX?void 0x0:bX['value']['indexOf']('://'))>0x0))break;}bZ>=0x0&&bZ<bU['length']&&(bU['selectedIndex']=bZ);}else'string'==typeof bV&&(bU['value']=bV);const bY=bU['value'];''!==bY&&(this['ufoScreens']['equals'](bY)||(bY['indexOf']('://')>0x0?window['location']['href']=bY:(this['ufoSettingsURL']['clearHash'](),this['loadScreen']({'screenName':bY}))));}['onWindowFocus'](){var bU,bV;null===(bU=this['ufoScreens']['screen'])||void 0x0===bU||null===(bV=bU['onFocus'])||void 0x0===bV||bV['call'](bU);}['onWindowBlur'](){var bU,bV;null===(bU=this['ufoScreens']['screen'])||void 0x0===bU||null===(bV=bU['onLostFocus'])||void 0x0===bV||bV['call'](bU);}['onWindowSizeChange'](){var bU,bV;null===(bU=(bV=this['ufoWindows'])['onSizeChange'])||void 0x0===bU||bU['call'](bV);}['onScroll'](bU){this['ufoConsole']['onMouseActivity']();}['onMove'](bU){this['ufoConsole']['onMouseActivity']();}['onFullScreenChange'](){this['ufoConsole']['onMouseActivity'](),this['onWindowSizeChange']();}['onFullScreenError'](){this['ufoConsole']['onMouseActivity']();}['canvasTouch'](bU){this['ufoConsole']['onMouseActivity']();}['__updateMouseState'](bU){var bV;let bW=bU['clientX'],bX=bU['clientY'],bY=bU['buttons'];if((null===(bV=bU['touches'])||void 0x0===bV?void 0x0:bV['length'])>0x0&&(bW=bU['touches'][0x0]['clientX'],bX=bU['touches'][0x0]['clientY'],bY=bU['touches']['length']>0x1?0x2:0x1),this['ufoConsole']['onMouseActivity'](),this['ufoScreens']['isPaused'])return!0x1;const bZ=this['ufoDisplay']['getBoundingClientRect'](),c0=this['ufoDisplay']['width']/bZ['width'],c1=this['ufoDisplay']['height']/bZ['height'];if(void 0x0!==bY&&(this['_mouseButtons']=bY),void 0x0!==bW&&void 0x0!==bX){const c2=Math['round']((bW-bZ['left'])*c0),c3=Math['round']((bX-bZ['top'])*c1);if(c2===this['_mousePosX']&&c3===this['_mousePosY'])return!0x1;this['_mousePosX']=c2,this['_mousePosY']=c3;}return!0x0;}['canvasClick'](bU){var bV,bW,bX;this['__updateMouseState'](bU);let bY=!0x1;this['ufoScreens']['isLoaded']&&(bU['getModifierState']&&bU['getModifierState']('Control')&&bU['getModifierState']('Alt')&&bU['getModifierState']('Shift')?(this['loadScreen']({'screenName':'animation-time-graph'}),bY=!0x0):this['ufoScreens']['isPaused']?(this['ufoScreens']['resume'](),bY=!0x0):this['ufoDisplay']['isEmbedded']&&!0x0!==(null===(bV=this['ufoScreens']['screen'])||void 0x0===bV||null===(bV=bV['props'])||void 0x0===bV?void 0x0:bV['cloaking'])?(window['open'](this['ufoSettingsURL']['getFullWebAddress']()),bY=!0x0):bY=this['ufoConsole']['processButtonOverlay'](bU,this['_mousePosX'],this['_mousePosY']),bY||(bY=null===(bW=this['ufoScreens']['screen'])||void 0x0===bW||null===(bX=bW['onClick'])||void 0x0===bX?void 0x0:bX['call'](bW,{'x':this['_mousePosX'],'y':this['_mousePosY'],'buttons':this['_mouseButtons'],'event':bU})),bY||(this['ufoDisplay']['fullScreenToggle'](),a4['event']('Full\x20Screen',this['ufoDisplay']['isZoomed']?'Exited':'Started')));}['canvasDoubleClick'](bU){var bV,bW;this['__updateMouseState'](bU),(null===(bV=this['ufoScreens']['screen'])||void 0x0===bV||null===(bW=bV['onDoubleClick'])||void 0x0===bW?void 0x0:bW['call'](bV,{'x':this['_mousePosX'],'y':this['_mousePosY'],'buttons':this['_mouseButtons'],'event':bU}))||(this['ufoDisplay']['fullScreenExit'](),a4['event']('Full\x20Screen',this['ufoDisplay']['isZoomed']?'Exited':'Started'));}['canvasMouseMove'](bU){var bV,bW;this['__updateMouseState'](bU),null===(bV=this['ufoScreens']['screen'])||void 0x0===bV||null===(bW=bV['onMouseMove'])||void 0x0===bW||bW['call'](bV,{'x':this['_mousePosX'],'y':this['_mousePosY'],'buttons':this['_mouseButtons'],'event':bU});}['canvasMouseDown'](bU){var bV,bW;this['__updateMouseState'](bU),null===(bV=this['ufoScreens']['screen'])||void 0x0===bV||null===(bW=bV['onMouseDown'])||void 0x0===bW||bW['call'](bV,{'x':this['_mousePosX'],'y':this['_mousePosY'],'buttons':this['_mou
1seButtons'],'event':bU});}['canvasMouseUp'](bU){var bV,bW;this['__updateMouseState'](bU),null===(bV=this['ufoScreens']['screen'])||void 0x0===bV||null===(bW=bV['onMouseUp'])||void 0x0===bW||bW['call'](bV,{'x':this['_mousePosX'],'y':this['_mousePosY'],'buttons':this['_mouseButtons'],'event':bU});}['canvasKeyUp'](bU){var bV,bW;this['ufoScreens']['isPaused']||null===(bV=this['ufoScreens']['screen'])||void 0x0===bV||null===(bW=bV['onKeyUp'])||void 0x0===bW||bW['call'](bV,{'key':bU['which']||bU['keyCode'],'event':bU});}['canvasKeyDown'](bU){var bV,bW;if(!this['ufoScreens']['isPaused']){if(document['activeElement']){if(['INPUT','TEXTAREA','SELECT']['includes'](document['activeElement']['tagName']))return;if(document['activeElement']['isContentEditable'])return;}null===(bV=this['ufoScreens']['screen'])||void 0x0===bV||null===(bW=bV['onKeyDown'])||void 0x0===bW||bW['call'](bV,{'key':bU['which']||bU['keyCode'],'event':bU});}}['canvasKeyPress'](bU){var bV,bW;if(!this['ufoScreens']['isPaused']){if(document['activeElement']){if(['INPUT','TEXTAREA','SELECT']['includes'](document['activeElement']['tagName']))return;if(document['activeElement']['isContentEditable'])return;}null===(bV=this['ufoScreens']['screen'])||void 0x0===bV||null===(bW=bV['onKeyPress'])||void 0x0===bW||bW['call'](bV,{'key':bU['which']||bU['keyCode'],'event':bU});}}['checkEngineChange'](){var bU,bV,bW,bX,bY,bZ;this['ufoDisplay']['checkFramebufferChange']()&&(this['ufoDisplay']['attach'](this['ufoScreens']['screen']),null===(bU=this['ufoScreens']['screen'])||void 0x0===bU||null===(bV=bU['onFrameBufferChange'])||void 0x0===bV||bV['call'](bU),null===(bW=this['ufoScreens']['screen'])||void 0x0===bW||null===(bX=bW['onSettingChange'])||void 0x0===bX||bX['call'](bW),null===(bY=(bZ=this['ufoConsole'])['onFrameBufferChange'])||void 0x0===bY||bY['call'](bZ),this['analyticsFrameBufferChange']());}['checkSizeChange'](){var bU,bV,bW,bX,bY,bZ;this['ufoDisplay']['checkSizeChange']()&&(null===(bU=(bV=this['ufoDisplay'])['onSizeChange'])||void 0x0===bU||bU['call'](bV),null===(bW=this['ufoScreens']['screen'])||void 0x0===bW||null===(bX=bW['onSizeChange'])||void 0x0===bX||bX['call'](bW),null===(bY=(bZ=this['ufoConsole'])['onSizeChange'])||void 0x0===bY||bY['call'](bZ));}['checkRefreshRateChange'](){let bU=!0x1,bV=as['refreshDisplayed'];if(bV>0x0&&bV!==this['_oldRefreshRate']){var bW,bX;if(!(as['refreshRate']>0x0))return!0x1;this['_refreshSet']||(this['_refreshSet']=!0x0,a4['event'](a7['isTimeDilated']()?'Time\x20Dilated\x20Refresh\x20Rate':'Refresh\x20Rate',as['refreshRate']['toString']())),null===(bW=this['ufoScreens']['screen'])||void 0x0===bW||bW['onRefreshRateChange'](this['_oldRefreshRate'],as['refreshRate']),null===(bX=this['ufoScreens']['screen'])||void 0x0===bX||bX['onSettingChange'](),bU=!0x0;}return this['_oldRefreshRate']=bV,bU;}['checkFrameRateChange'](){let bU=as['fps'],bV=bU-this['_oldFrameRate'],bW=0x0!==bV;if(bW){var bX;let bY=0x0==this['_oldFrameRate']?0x1:bV/this['_oldFrameRate'];null===(bX=this['ufoScreens']['screen'])||void 0x0===bX||bX['onFrameRateChange'](this['_oldFrameRate'],bU,bV,bY);}return this['_oldFrameRate']=bU,bW;}['setFramerateCap'](){let bU=arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:void 0x0,bV=arguments['length']>0x1&&void 0x0!==arguments[0x1]?arguments[0x1]:'animate';if(bU===this['_customFrameRateCap']&&bV===this['_capMethod'])return;let bW=this['animationRunning']();this['animateStop'](),this['_customFrameRateCap']=bU,this['_capMethod']=bV,bW&&this['queueNextAnimationFrame']();}['setFramePacingMode'](){const bU=(arguments['length']>0x0&&void 0x0!==arguments[0x0]?arguments[0x0]:'default')||'default';bU!==this['_framePacingMode']&&(this['_framePacingMode']=bU);}['animateStop'](){null!==this['_animID']&&(cancelAnimationFrame(this['_animID']),this['_animID']=null),null!==this['_timerID']&&(clearTimeout(this['_timerID']),this['_timerID']=null),this['_timerDeadline']=Number['NaN'],this['_timerChainedRenderCount']=0x0,this['_renderingMultiple']=!0x1,this['_yieldGeneration']++;}['animationRunning'](){return null!==this['_animID']||null!==this['_timerID'];}['queueNextAnimationFrame'](){if(!this['_renderingMultiple']){if(!Number['isFinite'](this['_customFrameRateCap'])||this['_customFrameRateCap']<=0x0)this['__scheduleRAF'](this['renderFrame']['bind'](this));else{if('animate'===this['_timerCapMethod'])this['__scheduleRAF'](this['renderMultipleFrames']['bind'](this));else{if('timer'===this['_timerCapMethod']){let bU=this['__computeIntervalForNextFrame'](performance['now']());this['_timerID']=setTimeout(this['renderFrame']['bind'](this),Math['max'](0x0,bU));}}}}}['__scheduleRAF'](bU){var bV;if(null===(bV=window['UFOSystem'])||void 0x0===bV||!bV['native']||'default'===this['_framePacingMode'])return void(this['_animID']=requestAnimationFrame(bU));const bW=this['_yieldGeneration'];this['__yieldTask']()['then'](()=>{bW===this['_yieldGeneration']&&(this['_animID']=requestAnimationFrame(bU));});}['__yieldTask'](){var bU,bV;return'yield-scheduler'===this['_framePacingMode']&&'function'==typeof(null===(bU=window['scheduler'])||void 0x0===bU?void 0x0:bU['yield'])?window['scheduler']['yield']():'yield-task'===this['_framePacingMode']&&'function'==typeof(null===(bV=window['scheduler'])||void 0x0===bV?void 0x0:bV['postTask'])?window['scheduler']['postTask'](()=>{},{'priority':'user-blocking'}):(this['__initYieldMessageChannel'](),new Promise(bW=>
1{this['_yieldQueue']['push'](bW),this['_yieldChannel']['port2']['postMessage'](0x0);}));}['__initYieldMessageChannel'](){this['_yieldChannel']||(this['_yieldQueue']=[],this['_yieldChannel']=new MessageChannel(),this['_yieldChannel']['port1']['onmessage']=()=>{const bU=this['_yieldQueue']['shift']();bU&&bU();});}['__computeIntervalForNextFrame'](bU){let bV=!(arguments['length']>0x1&&void 0x0!==arguments[0x1])||arguments[0x1];const bW=0x3e8/this['_customFrameRateCap'],bX=bU;Number['isFinite'](this['_timerDeadline'])||(this['_timerDeadline']=bX),bV&&(this['_timerDeadline']+=bW);let bY=this['_timerDeadline']-bX;return Number['isFinite'](bY)||(bY=bW),bY<-0x64&&(bV&&(this['_timerDeadline']=bX+bW),bY=bW),bY;}['renderMultipleFrames'](bU){let bV=!Number['isFinite'](this['_timerDeadline']),bW=this['__computeIntervalForNextFrame'](bU,!0x1);if(this['_customFrameRateCap'],!bV&&bW>0x0)return void this['queueNextAnimationFrame']();let bX=performance['now']();for(this['_renderingMultiple']=!0x0;(this['renderFrame'](bU),bU=performance['now'](),!(this['__computeIntervalForNextFrame'](bU)>0x0))&&(this['_timerChainedRenderCount']++,!(performance['now']()-bX>this['_timerMaxChainedRender'])););this['_renderingMultiple']=!0x1,this['queueNextAnimationFrame']();}['renderFrame'](bU){if(!this['ufoScreens']['isLoaded'])return void this['animateStop']();const bV=this['ufoScreens']['screen'],bW=(null==bV?void 0x0:bV['name'])??'unknown';this['ufoPerformance']['begin'](bV);try{this['checkEngineChange'](),this['checkSizeChange'](),this['checkRefreshRateChange'](),this['checkFrameRateChange']();}catch(bZ){a2['error']();}if(this['queueNextAnimationFrame'](),this['ufoScreens']['isActive']){var bX;let c0=this['ufoScreens']['isRunning'],c1=null==bV?void 0x0:bV['isReady']();if(this['ufoScreens']['isPaused']){let c2=this['ufoDisplay']['checkFramebufferChange'](),c3=this['ufoDisplay']['checkSizeChange']();c0=!c1||!this['_lastReadyState']||!this['_lastReadyStateOld']||c2||c3;}if(this['_lastReadyStateOld']=this['_lastReadyState'],this['_lastReadyState']=c1,null==bV||null===(bX=bV['engine'])||void 0x0===bX||!bX['ready'])return void(this['_errorState']||(bV['sync']['setErrorState']('UFO\x20Engine\x20not\x20ready.\x20If\x20this\x20persists,\x20try\x20refreshing\x20or\x20<a\x20href=\x27#global.codezero=1\x27>Resetting\x20Settings</a>'),a2['error'](),a4['event']('Exception','❌['+(null==bV?void 0x0:bV['name'])+']\x20Engine\x20not\x20ready.'),this['_errorState']=!0x0));try{var bY;if(bV)bV['sync']['beginFrameTimestamp'](bU),c0&&(bV['frameBegin'](),bV['onPaint']()),bV['sync']['endFrameTimestamp'](),c0&&(this['ufoConsole']['drawOverlay'](),bV['frameEnd']()),this['ufoPerformance']['end'](bV),'default'!==this['_framePacingMode']&&(null===(bY=globalThis['ufoNative'])||void 0x0===bY||bY['frameThrottle']()),bV['sync']['finalizeFrameTimestamp']();this['runCommandCodes']('post-draw'),this['_errorState']&&a4['event']('Exception','✅['+bW+']\x20UFO\x20has\x20recovered.'),this['_errorState']=!0x1;}catch(c4){this['_errorState']||(this['_errorState']=!0x0,as['setErrorState']('The\x20UFO\x20has\x20CRASHED.\x20Try\x20refreshing\x20this\x20page\x20or\x20<a\x20href=\x27#global.codezero=1\x27>Reset\x20Settings</a>'),console['log']('\x0a🪨\x20🪨🪨\x20💥🛸💥\x20🪨\x20🪨🪨\x20💥💥💥🛸💥💥💥\x20🪨\x20🪨\x20💥🛸💥\x20🪨🪨\x20🪨\x20💥💥💥🛸💥💥💥\x20🪨🪨\x20🪨\x20💥🛸💥\x20🪨🪨\x20🪨'),console['log']('
1%c❌\x20THE\x20UFO\x20HAS\x20CRASHED.\x20❌\x20Illegal\x20flight\x20operations\x20conducted\x20by\x20UFO\x20\x27'+bW+'\x27\x20🛸','color:\x20#FF0000;\x20font-weight:\x20bold;'),console['log']('🪨\x20🪨🪨\x20💥🛸💥\x20🪨\x20🪨🪨\x20💥💥💥🛸💥💥💥\x20🪨\x20🪨\x20💥🛸💥\x20🪨🪨\x20🪨\x20💥💥💥🛸💥💥💥\x20🪨🪨\x20🪨\x20💥🛸💥\x20🪨🪨\x20🪨\x0a'),a2['error'](),a4['event']('Exception','💥['+bW+']\x20'+c4['message']+',\x20Stack='+c4['stack']));}}}};a1(bt,'LAUNCH_CODE',0x3f376128),new bt()['launch'](),window['UFOProps']['ufolaunching']=!0x0;})());

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.