1(function() { 2 function getConsentedGroupsFromCookie() { 3 var match = document.cookie.match(/(?:^|;\s*)OptanonConsent=([^;]+)/); 4 if (!match) return []; 5 var decoded = decodeURIComponent(match[1]); 6 var groupsPart = decoded.split("&").find(function (p) { return p.indexOf("groups=") === 0; }); 7 if (!groupsPart) return []; 8 return groupsPart.replace("groups=", "") 9 .split(",") 10 .filter(function (g) { return g.indexOf(":1") === g.length - 2; }) 11 .map(function (g) { return g.split(":")[0]; }); 12 } 13 14 function hasPerformanceConsent(consentedGroups) { 15 return (consentedGroups || getConsentedGroupsFromCookie()).indexOf("C0002") !== -1; 16 } 17 18 // PathFactory content-syndication/nurture links append pf_-prefixed query params; 19 // that traffic gets counted by PathFactory itself and was spamming Segment with 20 // low-value duplicate pageviews, so skip loading Segment for it. 21 function isSpamFromPathFactory() { 22 var params = new URLSearchParams(window.location.search); 23 var keys = Array.from(params.keys()); 24 return keys.some(function(key) { return key.indexOf('pf_') === 0; }); 25 } 26 27 function KatalonTracking() { 28 this.track = function(eventName, eventData, callback) { 29 var getPath = window.location.pathname; 30 if (window._DATADOG_SYNTHETICS_BROWSER === undefined) { 31 if (typeof analytics != 'undefined') { 32 analytics.track(eventName, eventData, callback); 33 } else { 34 // load segment script and track 35 var src = ("https:" === document.location.protocol ? "https://" : "http://") + "cdn.segment.com/analytics.js/v1/XrHxalhZW8XsDbwYcANgl8MsU9nzINNW/analytics.min.js"; 36 37 var timeoutLoadScriptID; // 5s to load, if client blocked -> callback function will run 38 timeoutLoadScriptID = window.setTimeout(function() { 39 // callback action 40 if (callback && typeof(callback) == "function") { 41 callback(); 42 } 43 }, 5000); 44 45 jQuery.getScript(src, function() { 46 //update localStoarge not load segment again 47 localStorage.setItem('load_segment_sript', 'true'); 48 let analyticInterval = setInterval(() => { 49 if (typeof analytics != 'undefined') { 50 analytics.track(eventName, eventData, callback); 51 clearInterval(analyticInterval); 52 window.clearTimeout(timeoutLoadScriptID); 53 } 54 }, 500); 55 }).fail(function(){ 56 console.log('fail, go ahead'); 57 if (callback && typeof(callback) == "function") { 58 callback(); 59 } 60 }); 61 } 62 } 63 } 64 this.loadSegmentScript = function() { 65 !function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){if(window[i].initialized)return window[i][e].apply(window[i],arguments);var n=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(e)>-1){var c=document.querySelector("link[rel='canonical']");n.push({__t:"bpc",c:c&&c.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}n.unshift(e);analytics.push(n);return analytics}};for(var n=0;n<analytics.methods.length;n++){var key=analytics.methods[n];analytics[key]=analytics.factory(key)}analytics.load=function(key,n){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.setAttribute("data-global-segment-analytics-key",i);t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(t,r);analytics._loadOptions=n};
65analytics._writeKey="XrHxalhZW8XsDbwYcANgl8MsU9nzINNW";analytics.SNIPPET_VERSION="5.2.0"; 66 analytics.load("XrHxalhZW8XsDbwYcANgl8MsU9nzINNW"); 67 analytics.page(); 68 }}(); 69 } 70 71 // OneTrust's AutoBlock can cloak (type="text/plain") or fail to (re)insert the 72 // Set timeout 10s to wait for Segment to load, then try to reload it if it hasn't initialized yet. 73 this.ensureSegmentLoaded = function(maxWaitMs, intervalMs) { 74 var self = this; 75 maxWaitMs = maxWaitMs || 10000; 76 intervalMs = intervalMs || 1000; 77 var elapsed = 0; 78 79 function isLoaded() { 80 return !!(window.analytics && window.analytics.initialized); 81 } 82 83 function isStuck() { 84 var scriptEl = document.querySelector('script[src*="cdn.segment.com/analytics.js/v1"]'); 85 return !scriptEl || scriptEl.type === 'text/plain'; 86 } 87 88 function attempt() { 89 if (isLoaded()) return; 90 91 if (isStuck()) { 92 // clear the stub so loadSegmentScript's setup isn't swallowed by 93 // its own "Segment snippet included twice" guard 94 window.analytics = undefined; 95 self.loadSegmentScript(); 96 } 97 98 elapsed += intervalMs; 99 if (elapsed >= maxWaitMs) { 100 if (!isLoaded()) { 101 console.warn('[KatalonTracking] Segment did not initialize after ' + maxWaitMs + 'ms, giving up.'); 102 } 103 return; 104 } 105 106 setTimeout(attempt, intervalMs); 107 } 108 109 attempt(); 110 } 111 112 this.send_event_tracking = function(event_name, event_label, event_category) { 113 //get utm from local storage 114 var utmMedium = localStorage.getItem("utm_medium"); 115 var utmCampaign = localStorage.getItem("utm_campaign"); 116 var utmContent = localStorage.getItem("utm_content"); 117 var utmTerm = localStorage.getItem("utm_term"); 118 var utmSource = localStorage.getItem("utm_source"); 119 120 // call class KatalonTracking to handle tracking 121 katalonTracking.track("Button Clicked", { 122 event_name: event_name, 123 category: event_category, 124 label: event_label, 125 tracking_version: 1, 126 utm_medium: utmMedium || "", 127 utm_campaign: utmCampaign || "", 128 utm_content: utmContent || "", 129 utm_term: utmTerm || "", 130 utm_source: utmSource || "", 131 }); 132 133 if (typeof gtag != "undefined") { 134 gtag('event', event_name, { 135 'event_category' : event_category, 136 'event_label' : event_label, 137 'value': 0 138 }); 139 } 140 } 141 142 this.send_event_tracking_v2 = function(event_name, event_label, event_category) { 143 //get utm from local storage 144 var utmMedium = localStorage.getItem("utm_medium"); 145 var utmCampaign = localStorage.getItem("utm_campaign"); 146 var utmContent = localStorage.getItem("utm_content"); 147 var utmTerm = localStorage.getItem("utm_term"); 148 var utmSource = localStorage.getItem("utm_source"); 149 150 // call class KatalonTracking to handle tracking 151 katalonTracking.track("Button Clicked", { 152 button_name: event_name, 153 page_name: event_label, 154 category: event_category, 155 tracking_version: 2, 156 utm_medium: utmMedium || "", 157 utm_campaign: utmCampaign || "", 158 utm_content: utmContent || "", 159 utm_term: utmTerm || "", 160 utm_source: utmSource || "", 161 }); 162 163 if (typeof gtag != "undefined") { 164 gtag('event', `${event_name} Button Clicked`, { 165 'event_category' : event_category, 166 'event_label' : event_label, 167 'value': 0 168 }); 169 } 170 } 171 172 // hubspot tracking 173 this.loadHubspotTrackingScript = function() { 174 var getPath = window.location.pathname; 175 var script = document.createElement('script'); 176 script.onload = function() { 177 178 }; 179 script.src = "//js.hs-scripts.com/2465122.js"; 180 script.id = "hs-script-loader"; 181
182 if (window._DATADOG_SYNTHETICS_BROWSER === undefined && !getPath.includes('verify-email')) { 183 document.getElementsByTagName('head')[0].appendChild(script); 184 } 185 // <script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/2465122.js"></script> 186 } 187 188 // posthog tracking â call explicitly per page, not auto-loaded on init 189 this.loadPostHogScript = function() { 190 if (window._DATADOG_SYNTHETICS_BROWSER !== undefined) return; 191 if (window.posthog && window.posthog.__SV) return; 192 193 !function(t,e){var o,n,p,r;e.__SV||(window.posthog && window.posthog.__loaded)||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="Xi tn init mn Qr yn xn pn capture calculateEventProperties Tn register register_once register_for_session unregister unregister_for_session Pn getFeatureFlag getFeatureFlagPayload getFeatureFlagResult isFeatureEnabled reloadFeatureFlags updateFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSurveysLoaded onSessionId getSurveys getActiveMatchingSurveys renderSurvey displaySurvey cancelPendingSurvey canRenderSurvey canRenderSurveyAsync On identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset setIdentity clearIdentity get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException addExceptionStep captureLog startExceptionAutocapture stopExceptionAutocapture loadToolbar get_property getSessionProperty Mn Cn createPersonProfile setInternalOrTestUser Rn vn Fn opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing get_explicit_consent_status is_capturing clear_opt_in_out_capturing kn debug Kr En getPageViewId captureTraceFeedback captureTraceMetric hn".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]); 194 posthog.init('phc_vDLZ2FaVfkf8abtz9TFFd7oFgDdXPtWEMuwbD3FLxXuA', { 195 api_host: 'https://eu.i.posthog.com', 196 defaults: '2026-05-30', 197 }) 198 } 199 200 this.initAfterConsent = function(consentedGroups) { 201 if (this._trackingInitialized) return; 202 if (!hasPerformanceConsent(consentedGroups)) return; 203 this._trackingInitialized = true; 204 205 var self = this; 206 function doLoad() { 207 if (!isSpamFromPathFactory()) { 208 self.ensureSegmentLoaded(); 209 } 210 } 211 212 if (document.readyState === 'complete') { 213 doLoad(); 214 } else { 215 window.addEventListener('load', doLoad); 216 } 217 } 218 219 }; 220 221 var katalonTracking = window.katalonTracking = new KatalonTracking(); 222 katalonTracking.initAfterConsent(); 223 224 jQuery('.trackable').click(function() { 225 katalonTracking.send_event_tracking( 226 jQuery(this).data('event-name'), 227 jQuery(this).data('event-label'), 228 jQuery(this).data('event-category') 229 ); 230 }); 231 232 jQuery(document).on('click', '.trackable-v2', function() { 233 katalonTracking.send_event_tracking_v2( 234 jQuery(this).data('event-name'), 235 jQuery(this).data('event-label'), 236 jQuery(this).data('event-category') 237 ); 238 }); 239 240})();
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.