1(()=>{(function(){"use strict";var h="/api/analytics/track",g=10,l=5e3,i=1e3,a=[{domain:"chat.openai.com",platform:"chatgpt"},{domain:"chatgpt.com",platform:"chatgpt"},{domain:"claude.ai",platform:"claude"},{domain:"perplexity.ai",platform:"perplexity"},{domain:"gemini.google.com",platform:"gemini"},{domain:"bard.google.com",platform:"gemini"},{domain:"copilot.microsoft.com",platform:"copilot"},{domain:"bing.com/chat",platform:"copilot"},{domain:"poe.com",platform:"poe"},{domain:"you.com",platform:"you"},{domain:"phind.com",platform:"phind"},{domain:"kagi.com",platform:"kagi"}],o=[],t=null,f={},p=!1,n=null;function O(){var e,t,n,o,s=document.referrer;if(!s)return null;for(t=0;t<a.length;t++)if(s.indexOf(a[t].domain)!==-1)return a[t].platform;if(o=new URLSearchParams(window.location.search),n=o.get("utm_source"),n){if(e=n.toLowerCase(),e.indexOf("chatgpt")!==-1||e.indexOf("openai")!==-1)return"chatgpt";if(e.indexOf("claude")!==-1||e.indexOf("anthropic")!==-1)return"claude";if(e.indexOf("perplexity")!==-1)return"perplexity";if(e.indexOf("gemini")!==-1)return"gemini";if(e.indexOf("copilot")!==-1)return"copilot"}return null}function y(e){if(!e)return;typeof gtag!="undefined"&&(gtag("set","user_properties",{traffic_source:"ai_assistant",ai_platform:e}),gtag("event","ai_referral",{ai_platform:e,event_category:"acquisition",page_path:window.location.pathname}));try{sessionStorage.setItem("ai_traffic_source",e)}catch{}window.location.hostname==="localhost"&&console.log("[Analytics] AI traffic detected:",e)}function c(){if(n)return n;try{return sessionStorage.getItem("ai_traffic_source")}catch{return null}}function j(){if(window.AuthModule&&window.AuthModule.getAccessToken){var e=window.AuthModule.getAccessToken();if(e)return{Authorization:"Bearer "+e,"Content-Type":"application/json"}}return{"Content-Type":"application/json"}}function r(e,t,n){var s=e+":"+t,o=Date.now(),i=f[s]||0;return!(o-i<n)&&(f[s]=o,!0)}function s(n){o.push(n),o.length>=g?e():t||(t=setTimeout(e,l))}function e(){if(t&&(clearTimeout(t),t=null),o.length===0)return;var s,i=o.splice(0,g),n=JSON.stringify({events:i});navigator.sendBeacon?(s=new Blob([n],{type:"application/json"}),navigator.sendBeacon(h,s)):fetch(h,{method:"POST",headers:j(),body:n,keepalive:!0}).catch(function(e){console.error("[Analytics] Failed to send events:",e)}),o.length>0&&(t=setTimeout(e,l))}function v(e,t,n){if(!e)return;if(!r(e,"view",i))return;s({event_type:"view",skill_id:e,skill_slug:t||null,metadata:n||null}),typeof gtag!="undefined"&>ag("event","page_view",{page_title:document.title,skill_id:e})}function b(e,t,n){if(!e)return;s({event_type:"copy",skill_id:e,skill_slug:t||null,metadata:n||null}),typeof gtag!="undefined"&>ag("event","copy_skill",{skill_id:e,event_category:"engagement"})}function m(e,t,n,o){if(!e)return;var i=Object.assign({},o||{},{format:n});s({event_type:"download",skill_id:e,skill_slug:t||null,metadata:i}),typeof gtag!="undefined"&>ag("event","download_skill",{skill_id:e,download_format:n,event_category:"engagement"})}function u(e,t){if(!e)return;if(!r("degree:"+e,"view",i))return;var n=Object.assign({},t||{},{content_type:"degree",degree_slug:e});s({event_type:"view",content_type:"degree",degree_slug:e,metadata:n}),typeof gtag!="undefined"&>ag("event","degree_view",{degree_slug:e,event_category:"acquisition",page_path:window.location.pathname})}function _(e,t,n){if(!t)return;var a,o=e==="degree"?"degree":"course";if(!r(o+":"+t,"paywall:"+n,i))return;a={event_type:"paywall",content_type:o,metadata:{content_type:o,lesson_number:n||null,lang:document.documentElement.lang||"en"}},a[o+"_slug"]=t,a.metadata[o+"_slug"]=t,s(a)}function w(){var t,s,o,i,a,r,n=document.querySelector("[data-skill-id]");n&&(s=n.dataset.skillId,o=window.location.pathname,v(s,o)),t=document.querySelector("article[data-degree-slug]:not(.degree-cert-claim)"),i=!!document.getElementById("dlv-grid"),t&&!i&&(a=t.dataset.degreeSlug,r=document.documentElement.lang||"en",u(a,{lang:r})),document.addEventListener("click",function(e){var t=e.target.closest(".btn-copy, .btn-copy-primary, [data-copy-trigger]");t&&t.dataset.skillId&&b(t.dataset.skillId,t.dataset.skillSlug||null,{source:t.closest(".skill-card")?"card":"detail"})}),document.addEventListener("click",function(e){var t=e.target.closest("[data-download]");t&&t.dataset.skillId&&m(t.dataset.skillId,t.dataset.skillSlug||null,t.dataset.download||"md",{source:t.closest(".skill-card")?"card":"detail"})}),window.addEventListener("beforeunload",function(){e()}),document.addEventListener("visibilitychange",function(){document.visibilityState==="hidden"&&e()})}function d(){if(p)return;p=!0,n=O(),n&&y(n),w(),window.location.hostname==="localhost"&&console.log("[Analytics] Tracker initialized")}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",d):d(),window.AnalyticsTracker={trackView:v,trackCopy:b,trackDownload:m,trackDegreeView:u,trackLessonPaywall:_,flush:e,getAITrafficSource:c,isAITraffic:function(){return!!c()}}})()})()
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.