1(function(){const interactionEvents=['pointerover','mouseover','pointerdown','mousedown','keydown','touchstart','wheel','scroll','focus'];const callbacks=new Set();let isHeadless=false;let initialized=false;let scheduled=false;let hasRun=false;let fallbackTimer=null;let scrollRestoreObserver=null;let scrollRestoreSentinel=null;const fallbackTimeout=10000;function detectHeadless(){try{if(navigator.webdriver)return true;if(/Lighthouse|PageSpeed/.test(navigator.userAgent))return true;if(navigator.userAgentData?.brands?.some(b=>/Lighthouse/i.test(b.brand)))return true;}catch(e){return false;} 2return false;} 3function runCallbacks(){hasRun=true;if(!callbacks.size)return;callbacks.forEach(cb=>{try{cb();}catch(err){console.error(err);}});callbacks.clear();cleanup();} 4function scheduleCallbacks(){if(scheduled)return;scheduled=true;cleanup();const run=()=>{scheduled=false;runCallbacks();};const afterFrame=()=>{if('requestIdleCallback'in window){window.requestIdleCallback(run,{timeout:1200});}else{setTimeout(run,0);}};if('requestAnimationFrame'in window){window.requestAnimationFrame(()=>setTimeout(afterFrame,0));}else{setTimeout(afterFrame,0);}} 5function onInteraction(){scheduleCallbacks();} 6function cleanup(){interactionEvents.forEach(event=>{window.removeEventListener(event,onInteraction,true);});if(scrollRestoreObserver){scrollRestoreObserver.disconnect();scrollRestoreObserver=null;} 7if(scrollRestoreSentinel){scrollRestoreSentinel.remove();scrollRestoreSentinel=null;} 8if(fallbackTimer){clearTimeout(fallbackTimer);fallbackTimer=null;}} 9function setupScrollRestoreDetector(){if(!('IntersectionObserver'in window)){return;} 10if(!document.body){setTimeout(setupScrollRestoreDetector,0);return;} 11scrollRestoreSentinel=document.createElement('span');scrollRestoreSentinel.setAttribute('aria-hidden','true');scrollRestoreSentinel.style.cssText='position:absolute;top:0;left:0;width:1px;height:1px;opacity:0;pointer-events:none;contain:strict;';document.body.insertBefore(scrollRestoreSentinel,document.body.firstChild);scrollRestoreObserver=new IntersectionObserver((entries)=>{const entry=entries[0];if(entry&&!entry.isIntersecting){scheduleCallbacks();}},{root:null,threshold:0});scrollRestoreObserver.observe(scrollRestoreSentinel);} 12function setupListeners(){interactionEvents.forEach(event=>{window.addEventListener(event,onInteraction,{passive:true,capture:true});});setupScrollRestoreDetector();fallbackTimer=setTimeout(()=>{scheduleCallbacks();},fallbackTimeout);} 13function registerCallback(cb){if(!initialized)init();if(isHeadless)return;if(typeof cb==='function'){callbacks.add(cb);} 14if(hasRun){scheduleCallbacks();}} 15function init(){if(initialized)return;initialized=true;isHeadless=detectHeadless();if(isHeadless){return;} 16setupListeners();} 17window.JchOptimizeUserInteraction={onUserInteract:registerCallback,isHeadless:()=>isHeadless};})(); 18JchOptimizeUserInteraction.onUserInteract(()=>{const nodes=Array.from(document.querySelectorAll('link[type^="jchoptimize-text"], style[type^="jchoptimize-text"]'));const batchSize=5;const importantAttrs=['media','nonce','integrity','crossorigin','referrerpolicy','title','disabled','fetchpriority','id','class'];const scheduleTask=(cb)=>{if('requestIdleCallback'in window){window.requestIdleCallback(cb,{timeout:700});}else{setTimeout(cb,0);}};const copyDataAttrs=(from,to)=>{for(const{name,value}of Array.from(from.attributes)){if(name.startsWith('data-')&&!to.hasAttribute(name)){to.setAttribute(name,value);}}};const copyCommonAttrs=(from,to)=>{for(const a of importantAttrs){const v=from.getAttribute(a);if(v!==null)to.setAttribute(a,v);} 19copyDataAttrs(from,to);};const makeStylesheet=(oldLink)=>{const link=document.createElement('link');const rel=oldLink.getAttribute('rel')||'stylesheet';link.setAttribute('rel',rel);const href=oldLink.getAttribute('href')||oldLink.href;if(href)link.setAttribute('href',href);copyCommonAttrs(oldLink,link);return link;};const makeStyle=(oldStyle)=>{const style=document.createElement('style');copyCommonAttrs(oldStyle,style);style.textContent=oldStyle.textContent||'';return style;};let pending=0;let processed=0;const perLinkTimeout=12000;const done=()=>{if(processed>=nodes.length&&pending===0){document.dispatchEvent(new Event('onJchCssAsyncLoaded'));document.dispatchEvent(new Event('jch:dynamicCssLoaded'));}};const processNode=(staticNode)=>{try{if(staticNode.tagName==='LINK'){const link=makeStylesheet(staticNode);
19pending++;let settled=false;const settle=()=>{if(settled)return;settled=true;pending--;done();};let timer=setTimeout(settle,perLinkTimeout);link.addEventListener('load',()=>{clearTimeout(timer);settle();},{once:true});link.addEventListener('error',()=>{clearTimeout(timer);settle();},{once:true});staticNode.replaceWith(link);}else if(staticNode.tagName==='STYLE'){const style=makeStyle(staticNode);staticNode.replaceWith(style);}}finally{processed++;}};const processBatch=()=>{const end=Math.min(processed+batchSize,nodes.length);while(processed<end){processNode(nodes[processed]);} 20if(processed<nodes.length){scheduleTask(processBatch);} 21done();};scheduleTask(processBatch);}); 22(function(){const CONFIG={observeLateScripts:false,perScriptTimeoutMs:12000,preconnect:true};const supportsModule=('noModule'in HTMLScriptElement.prototype);function qsa(selector,root=document){return Array.from(root.querySelectorAll(selector));} 23function scheduleTask(){return new Promise((resolve)=>{if('requestIdleCallback'in window){window.requestIdleCallback(resolve,{timeout:700});}else{setTimeout(resolve,0);}});} 24function shouldSkip(node){const t=node.getAttribute('type');if(t==='jchoptimize-text/module'&&!supportsModule)return true;if(t==='jchoptimize-text/nomodule'&&supportsModule)return true;return false;} 25function copyKeyAttrs(from,to){const t=from.getAttribute('type');if(t==='jchoptimize-text/module'){to.type='module';}else{to.removeAttribute('type');} 26if(t==='jchoptimize-text/nomodule'){to.noModule=true;} 27to.async=false;const important=['id','integrity','crossorigin','referrerpolicy','nonce','fetchpriority'];for(const name of important){const v=from.getAttribute(name);if(v!==null)to.setAttribute(name,v);} 28to.setAttribute('src',from.getAttribute('data-src'));for(const{name,value}of Array.from(from.attributes)){if(name.startsWith('data-')&&name!=='data-src'&&!to.hasAttribute(name)){to.setAttribute(name,value);}} 29if(from.textContent){to.textContent=from.textContent;}} 30function withLateLifecycleShim(runUntilDone){const docIsInteractive=document.readyState!=='loading';
30const winIsComplete=document.readyState==='complete';const origDocAEL=Document.prototype.addEventListener;const origWinAEL=Window.prototype.addEventListener;function maybeCallNow(target,type,listener){const domReady=(type==='DOMContentLoaded'||type==='readystatechange')&&docIsInteractive;const winLoad=(type==='load'||type==='pageshow')&&winIsComplete;if(domReady||winLoad){queueMicrotask(()=>{try{listener.call(target,new Event(type));}catch(e){setTimeout(()=>{throw e;});}});return true;} 31return false;} 32Document.prototype.addEventListener=function(type,listener,options){if(!maybeCallNow(document,type,listener)){return origDocAEL.call(this,type,listener,options);}};Window.prototype.addEventListener=function(type,listener,options){if(!maybeCallNow(window,type,listener)){return origWinAEL.call(this,type,listener,options);}};const finalize=()=>{Document.prototype.addEventListener=origDocAEL;Window.prototype.addEventListener=origWinAEL;};try{const p=runUntilDone();return(p&&typeof p.then==='function')?p.finally(finalize):(finalize(),p);}catch(e){finalize();throw e;}} 33function createExecPromise(node,newNode){return withLateLifecycleShim(()=>new Promise((resolve)=>{let settled=false;let timeoutId=null;const onDone=()=>{if(settled)return;settled=true;if(timeoutId)clearTimeout(timeoutId);resolve();};newNode.addEventListener('load',onDone,{once:true});newNode.addEventListener('error',onDone,{once:true});const hasSrc=!!newNode.getAttribute('src');if(hasSrc&&CONFIG.perScriptTimeoutMs>0){timeoutId=setTimeout(onDone,CONFIG.perScriptTimeoutMs);} 34if(!hasSrc){queueMicrotask(onDone);} 35node.replaceWith(newNode);}));} 36function loadOne(node){if(shouldSkip(node)){node.remove();return Promise.resolve();} 37const s=document.createElement('script');copyKeyAttrs(node,s);return createExecPromise(node,s);} 38async function loadSequentially(nodes){for(const n of nodes){await scheduleTask();await loadOne(n);} 39document.dispatchEvent(new Event('onJchJsDynamicLoaded'));document.dispatchEvent(new Event('jch:dynamicJsLoaded'));} 40function uniqueCrossOrigins(nodes){const out=new Set();nodes.forEach(n=>{const src=n.getAttribute('data-src')||n.getAttribute('src');if(!src||src.startsWith('data:'))return;try{const url=new URL(src,document.baseURI);if(url.origin!==location.origin)out.add(url.origin);}catch(_){}});return Array.from(out);} 41function addPreconnect(origins){if(!origins.length)return;const frag=document.createDocumentFragment();origins.forEach(origin=>{const link=document.createElement('link');link.rel='preconnect';link.href=origin;frag.appendChild(link);});document.head.appendChild(frag);} 42function collectInitial(){return qsa('script[type^="jchoptimize-text"]');} 43function makeLateObserver(enqueue){if(!CONFIG.observeLateScripts)return{disconnect(){}};const obs=new MutationObserver(muts=>{for(const m of muts){m.addedNodes&&m.addedNodes.forEach(node=>{if(node&&node.nodeType===1){if(node.tagName==='SCRIPT'&&/^jchoptimize-text/.test(node.getAttribute('type')||'')){enqueue(node);} 44const nested=node.querySelectorAll&&node.querySelectorAll('script[type^="jchoptimize-text"]');if(nested&&nested.length){nested.forEach(enqueue);}}});}});obs.observe(document,{childList:true,subtree:true});return obs;} 45function start(){const queue=collectInitial();if(CONFIG.preconnect){addPreconnect(uniqueCrossOrigins(queue));} 46const late=[];const obs=makeLateObserver((node)=>late.push(node));loadSequentially(queue).then(async()=>{while(late.length){const batch=late.splice(0,late.length);if(CONFIG.preconnect)addPreconnect(uniqueCrossOrigins(batch));await loadSequentially(batch);} 47obs.disconnect();});} 48if(window.JchOptimizeUserInteraction&&typeof JchOptimizeUserInteraction.onUserInteract==='function'){JchOptimizeUserInteraction.onUserInteract(start);}else{const once=()=>{window.removeEventListener('pointerdown',once,{passive:true});window.removeEventListener('keydown',once);start();};window.addEventListener('pointerdown',once,{passive:true});window.addEventListener('keydown',once);}})();
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.