PageSourceSearch

https://www.basketinside.com/serie-a/news-serie-a/

html basketinside.com collected 2026-10-02 10:44:14 UTC 74,820 bytes, 2,117 lines download raw bytes

1<!DOCTYPE html>
2<html dir="ltr" lang="en">
3
4<head>
5	<meta charset="utf-8" />
6	<meta name="generator" content="BotBlocker v. 1.7.5" />
7	<meta name="author" content="BotBlocker project by GLOBUS.studio" />
8	<meta name="referrer" content="unsafe-url" />
9	<meta name="robots" content="noindex" />
10	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
11	<link rel="icon" href="data:,">
12	<title>BotBlocker security plugin</title>
13				<style>
14			/* BotBlocker Template Styles */
15html,body {
16    height: 100%;
17    margin: 0;
18    padding: 0;
19    font-family: Arial, sans-serif;
20    background-color: #ffffff;
21}
22
23body {
24    display: flex;
25    flex-direction: column;
26}
27
28h1 {
29    color:#bd2426;
30}
31
32h2 {
33    text-align: center;
34}
35
36.header {
37    height: 85px;
38    background-color: #f0f5f7;
39    box-shadow: 0px 3px 7px 3px rgba(0, 0, 0, 0.1);
40    display: flex;
41    justify-content: center;
42    align-items: center;
43}
44
45.logo {
46    height: 65px;
47}
48
49.content {
50    flex-grow: 1;
51    display: flex;
52    flex-direction: column;
53    justify-content: center;
54    align-items: center;
55    padding: 20px;
56}
57
58.footer {
59    height: 50px;
60    background-color: #f0f5f7;
61    box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.1);
62    display: flex;
63    justify-content: center;
64    align-items: center;
65    flex-direction: row;
66    flex-wrap: wrap;
67    align-content: center;
68    font-size: 13px;
69}
70
71.footer small a {
72    text-decoration: none;
73    color: #2f2f2f;
74    margin: 0 10px;
75}
76
77.info {
78    display: flex;
79    text-align: center;
80    font-size: 20px;
81    flex-direction: column;
82    flex-wrap: nowrap;
83    align-content: center;
84    justify-content: center;
85    align-items: center;
86}
87
88/* Button Styles Fallback */
89.botblocker-btn-success {
90    border: 1px solid transparent;
91    background: #7785ef;
92    color: #ffffff;
93    font-size: 16px;
94    line-height: 15px;
95    padding: 10px 15px;
96    text-decoration: none;
97    text-shadow: none;
98    border-radius: 5px;
99    box-shadow: none;
100    transition: 0.25s;
101    display: block;
102    margin: 0 auto;
103    font-weight: 600;
104}
105
106.botblocker-btn-success:hover {
107    background-color: #bfc7ff;
108}
109
110.botblocker-btn-color {
111    cursor: pointer;
112    padding: 14px 14px;
113    text-decoration: none;
114    display: inline-block;
115    width: 16px;
116    height: 16px;
117    border-radius: 80px;
118}
119
120.botblocker-btn-color:hover {
121    width: 16px;
122    height: 16px;
123}
124/* Button Styles Fallback */
125
126.block1 {
127    display: flex;
128    flex-direction: row;
129    flex-wrap: wrap;
130    align-content: center;
131    justify-content: center;
132    align-items: center;
133}
134
135.block2 {
136    display: flex;
137    align-content: center;
138    justify-content: center;
139    align-items: center;
140    flex-wrap: wrap;
141    flex-direction: column;
142    width: 100%;
143}
144
145#bbcs-status {
146    text-align: center;
147    min-height: 24px;
148    padding: 6px 0;
149    font-size: 14px;
150    color: #555;
151    width: 100%;
152}
153
154.user-data {
155    display: flex;
156    padding-top: 14px;
157    font-size: 10px;
158    font-weight: 600;
159    flex-direction: column;
160    flex-wrap: nowrap;
161    align-content: center;
162    justify-content: center;
163    align-items: center;
164}
165
166.con-center {
167    text-align: center;
168    padding-top: 3px;
169} 
170
171.info-block {
172    font-size: 26px;
173    margin: 0;
174}
175
176.block-string {
177    font-weight: normal !important;
178}
179
180/* Loading Spinner Style */
181.lds-dual-ring,
182.lds-dual-ring:after {
183    box-sizing: border-box;
184}
185
186.lds-dual-ring {
187    display: inline-block;
188    width: 40px;
189    height: 40px;
190    color: #333;
191}
192
193.lds-dual-ring:after {
194    content: " ";
195    display: block;
196    width: 32px;
197    height: 32px;
198    margin: 8px;
199    border-radius: 50%;
200    border: 3px solid currentColor;
201    border-color: currentColor transparent currentColor transparent;
202    animation: lds-dual-ring 1.2s linear infinite;
203}
204
205@keyframes lds-dual-ring {
206    0% {
207    transform: rotate(0deg);
208    }
209
210    100% {
211    transform: rotate(360deg);
212    }
213}	</style>
214					<style>
215			.se2bb49f8e043d4ca134e5e0c99eb30f0{border:1px solid transparent;background:#7785ef;color:#ffffff;font-size:16px;line-height:15px;padding:10px 15px;text-decoration:none;text-shadow:none;border-radius:5px;box-shadow:none;transition:0.25s;display:block;margin:0 auto;font-weight:600;}.se2bb49f8e043d4ca134e5e0c99eb30f0:hover{background-color:#bfc7ff;}.sa6b4504a6273d85034ef5423b558f2b7{cursor:pointer;padding:14px 14px;text-decoration:none;display:inline-block;width:16px;height:16px;border-radius:80px;}.sa6b4504a6273d85034ef5423b558f2b7:hover{width:16px;height:16px;}	</style>
216		</head>
217
218<body>
219	<header class="header">
220			<img src="https://www.basketinside.com/wp-content/plugins/botblocker-security/admin/img/logo-small-transparent.webp" alt="BotBlocker WordPress Plugin" class="logo">
221		</header>
222
223	<div class="content">
224
225	<div class="lds-dual-ring"></div>
226	<br />
227
228	<h2>Checking your browser before accessing the site</h2>
229	<div class="block1">
230		<div class="block2">
231				<div class="info" id="content">Loading...</div>
232		</div>
233	</div>
234	<div class="user-data">
235		<span class="">Connection info: 81.16.3.32</span>
236		<span class="con-center">
236Connection ID: e3cb65aa43641fe7774eaa06853c13 ~ 1790937853.28088</span>
237	</div>
238	</div>
239
240	
241	<footer class="footer">
242		<small><a href="https://botblocker.top/" title="BotBlocker plugin for WordPress" target="_blank">Protected by <b>BotBlocker</b> plugin</a></small>
243	<small><a href="https://globus.studio" title="Project by GLOBUS.studio" target="_blank">BotBlocker is <b>GLOBUS.studio</b> project</a></small>
244		<small>2026</small>
245	</footer>
246
247	
247<script>
248		var bbcsJsData = {"ajaxUrl":"https:\/\/www.basketinside.com\/wp-admin\/admin-ajax.php","verifyUrl":"https:\/\/www.basketinside.com\/bbcs-verify\/","nonce":"628deecdae","debugEnabled":false,"version":"1.7.5","shortName":"BotBlocker","hostBase64":"YmFza2V0aW5zaWRlLmNvbQ==","hostNoPortBase64":"YmFza2V0aW5zaWRlLmNvbQ==","redirectUrlBase64":"aHR0cHM6Ly9iYXNrZXRpbnNpZGUuY29tL3NlcmllLWEvbmV3cy1zZXJpZS1hLw==","loadingText":"Loading...","testHash":"2b70d69ce35bdf7a9aa7a882c8bf3dd30ba6cb56122fd6515a9fc8a395dfe3b5","h1Hash":"cc0d98fba86988ebf01e7bdb1da2341a19fc3d9a7a090f6f8cff89f02a657a71","time":1790937853,"hosting":"-","country":"AM","ip":"81.16.3.32","cid":"1790937853.28088","ptr":"host-32.3.16.81.ucom.am","httpAccept":"text%2Fhtml%2Capplication%2Fxhtml%2Bxml%2Capplication%2Fxml%3Bq%3D0.9%2Cimage%2Favif%2Cimage%2Fwebp%2Cimage%2Fapng%2C%2A%2F%2A%3Bq%3D0.8%2Capplication%2Fsigned-exchange%3Bv%3Db3%3Bq%3D0.7","ipVersion":4,"recaptchaEnabled":false,"recaptchaKey3":"","apiIpv6":"https:\/\/api.botblocker.top\/v2\/ip?v=6\u0026format=json","apiGsIpv6":"https:\/\/api.globus.studio\/v2\/ip?v=6\u0026format=json","emptyValue":"-","jsAdminEnabled":true,"jsErrorMessage":"Your request has been denied.","cookieDisabledText":"Cookies are disabled in your browser. Enable cookies to continue.","jsDisabledText":"JavaScript is disabled in your browser. Enable JavaScript to continue.","redirectUrl":"\/serie-a\/news-serie-a\/","checkFunctionName":"fadc2530ffa8892c13a4476448ef1e942","selectRequestMode":"x4dfa69220443b19517c6756e12699dcf","ruleRecordId":0,"suspectStatus":2,"reasonForAction":null,"resultOfAction":"No cookies users(Human?)","uid":"e3cb65aa43641fe7774eaa06853c13","samesite":"Lax","cookieLifetime":86400,"botblockerUrl":"https:\/\/www.basketinside.com\/wp-content\/plugins\/botblocker-security\/","captchaURL":"https:\/\/www.google.com\/recaptcha\/api.js?render=","silentMode":false,"approvedText":"Access approved. Redirecting...","verifyingText":"Verifying...","retryingText":"Retrying...","verificationFailedText":"Verification failed. Please complete the challenge below.","ddosResilience":false};</script>
248
249		
249<script>
250		window.adb_var = 1;</script>
250
251		
251<script>
252		/*
253 * BotBlocker Script - AdBlock Detection Logic
254 * Version: 1.2.3
255 * Copyright (c) 2026 BotBlocker
256 * 
257 * This file contains detection algorithms for various ad blocking software
258 * and implements countermeasures without affecting user experience.
259 * Do not modify without proper understanding of the code flow.
260 */
261
262// Essential detection variable - DO NOT MODIFY!
263adb_var = 0;
264
265(function() {
266    var _dummy = {
267        check_interval: 3000,
268        last_detection: new Date().getTime(),
269        detection_active: false,
270        counter: Math.floor(Math.random() * 1000)
271    };
272
273    function simulateCheck() {
274        if (_dummy.counter > 950) {
275            _dummy.counter = 0;
276            return true;
277        }
278        _dummy.counter += (Math.random() * 10);
279        return false;
280    }
281
282    if (document.readyState === 'complete' || document.readyState === 'interactive') {
283        setTimeout(function() {
284            _dummy.detection_active = simulateCheck();
285        }, _dummy.check_interval);
286    }
287})();</script>
287
288		
288<script>
289		/*
290 * BotBlocker Detection Utilities
291 * Version: 2.0.0
292 * Copyright (c) 2026 BotBlocker
293 * 
294 * This file contains various detection algorithms for identifying bots and automated browser environments.
295 */ 
296
297function bbcs_detectJitter() {
298    const timings = [];
299    const iterations = 10;
300    const workload = 100000;
301    
302    for (let i = 0; i < iterations; i++) {
303        const start = performance.now();
304        let x = 0;
305        for (let j = 0; j < workload; j++) {
306            x += Math.sqrt(j);
307        }
308        const end = performance.now();
309        timings.push(end - start);
310    }
311    
312    const avg = timings.reduce((a, b) => a + b, 0) / timings.length;
313    const deviations = timings.map(t => Math.abs(t - avg));
314    const avgDeviation = deviations.reduce((a, b) => a + b, 0) / deviations.length;
315    const maxDeviation = Math.max(...deviations);
316    
317    if (avgDeviation > avg * 0.4 || maxDeviation > avg * 2) {
318        return true;
319    }
320    
321    const dateVsPerformance = [];
322    for (let i = 0; i < 5; i++) {
323        const dateStart = Date.now();
324        const perfStart = performance.now();
325        
326        let x = 0;
327        for (let j = 0; j < 100000; j++) {
328            x += j;
329        }
330        
331        const dateEnd = Date.now();
332        const perfEnd = performance.now();
333        
334        dateVsPerformance.push({
335            date: dateEnd - dateStart,
336            perf: perfEnd - perfStart
337        });
338    }
339    
340    const inconsistentTiming = dateVsPerformance.some(item => 
341        item.date === 0 || 
342        item.perf === 0 || 
343        item.date < item.perf
344    );
345    
346    if (inconsistentTiming) {
347        return true;
348    }
349
350    if (timings.every(t => t === 0)) {
351        return true;
352    }
353    
354    return false;
355}
356
357function bbcs_detectNavigatorMismatch() {
358    const nav = window.navigator;
359    const userAgent = nav.userAgent;
360    const platform = nav.platform;
361    const vendor = nav.vendor;
362
363    if (nav.webdriver === true) {
364        return true;
365    }
366
367    try {
368        if (Object.getOwnPropertyDescriptor(nav, 'webdriver') !== undefined) {
369            return true;
370        }
371    } catch (e) {}
372
373    if (/HeadlessChrome|PhantomJS|SlimerJS/i.test(userAgent)) {
374        return true;
375    }
376
377    if (window.outerWidth === 0 && window.outerHeight === 0) {
378        return true;
379    }
380    
381    let browserData = {
382        chrome: userAgent.includes('Chrome') && !userAgent.includes('Edg/') && !userAgent.includes('OPR/'),
383        firefox: userAgent.includes('Firefox') && !userAgent.includes('Seamonkey'),
384        safari: userAgent.includes('Safari') && !userAgent.includes('Chrome') && !userAgent.includes('Chromium'),
385        edge: userAgent.includes('Edg/'),
386        opera: userAgent.includes('OPR/') || userAgent.includes('Opera'),
387        ie: userAgent.includes('MSIE') || userAgent.includes('Trident/')
388    };
389    
390    let platformData = {
391        windows: platform.includes('Win'),
392        mac: platform.includes('Mac'),
393        linux: platform.includes('Linux') || platform.includes('X11'),
394        android: userAgent.includes('Android'),
395        ios: /iPhone|iPad|iPod/.test(userAgent)
396    };
397    
398    if ((browserData.chrome && vendor !== 'Google Inc.') || 
399        (browserData.safari && vendor !== 'Apple Computer, Inc.') ||
400        (platformData.windows && !platform.includes('Win')) ||
401        (platformData.mac && !platform.includes('Mac')) ||
402        (platformData.android && !userAgent.includes('Android')) ||
403        (platformData.ios && !userAgent.match(/iPhone|iPad|iPod/))) {
404        return true;
405    }
406    
407    if (nav.hardwareConcurrency !== undefined) {
408        const cores = nav.hardwareConcurrency;
409        if (cores === 0 || cores > 128) return true;
410    }
411    
412    if (window.screen) {
413        const screenRatio = window.screen.width / window.screen.height;
414        if (screenRatio < 0.5 || screenRatio > 5) return true;
415    }
416    
417    const memoryDeviation = nav.deviceMemory && (nav.deviceMemory < 0.5 || nav.deviceMemory > 128);
418    if (memoryDeviation) return true;
419
420    if (userAgent.length < 30 || userAgent.length > 500) return true;
421    
422    return false;
423}
424
425function bbcs_detectUnsupportedFeatures() {
426    const modernApis = ['Promise', 'fetch', 'Map', 'Set', 'Symbol', 'WeakMap', 'WeakSet'];
427    const modernNavFeatures = ['serviceWorker', 'permissions', 'geolocation'];
428    
429    let missingBasicApis = modernApis.some(api => typeof window[api] === 'undefined');
430    
431    if (missingBasicApis) {
432        return true;
433    }
434    
435    const inconsistentBuiltins = (window.Array && typeof window.Array.from === 'undefined') || 
436                                 (window.Object && typeof window.Object.assign === 'undefined');
437    if (inconsistentBuiltins) {
438        return true;
439    }
440    
441    if (typeof Proxy !== 'undefined' && typeof Reflect === 'undefined') {
442        return true;
443    }
444
445    const asyncStorage = !window.indexedDB && window.localStorage;
446    if (asyncStorage) {
447        return true;
448    }
449    
450    try {
451        if (typeof window.localStorage !== 'undefined') {
452            const testKey = `_bbcs_test_${Date.now()}`;
453            window.localStorage.setItem(testKey, '1');
454            if (window.localStorage.getItem(testKey) !== '1') {
455                return true;
456            }
457            window.localStorage.removeItem(testKey);
458        }
459    } catch(e) {
460        if (!e.toString().includes('quota') && !e.toString().includes('secure context')) {
461            return true;
462        }
463    }
464
465    return false;
466}
467
468function bbcs_detectFakePlugins() {
469    const plugins = navigator.plugins || [];
470    
471    if (plugins.length === 0 && !navigator.userAgent.includes('Mobile')) {
472        const chromeBased = navigator.userAgent.includes('Chrome') || 
473                           navigator.userAgent.includes('Edg') || 
474                           navigator.userAgent.includes('OPR');
475        if (chromeBased) {
476            return true;
477        }
478    }
479    
480    if (plugins.length > 0) {
481        let allNames = [];
482        for (let i = 0; i < plugins.length; i++) {
483            allNames.push(plugins[i].name);
484        }
485        
486        const hasMultiplePdf = allNames.filter(name => 
487            name.includes('PDF') || name.includes('Acrobat')
488        ).length > 2;
489        
490        if (hasMultiplePdf) {
491            return true;
492        }
493        
494        const hasInvalidLength = Array.from(plugins).some(p => 
495            typeof p.length !== 'number' || 
496            p.length === 0 ||
497            (p.length > 0 && !p[0])
498        );
499        
500        if (hasInvalidLength) {
501            return true;
502        }
503        
504        if (plugins.namedItem && plugins.item) {
505            const firstPlugin = plugins[0];
506            const byName = plugins.namedItem(firstPlugin.name);
507            const byIndex = plugins.item(0);
508            
509            if (firstPlugin !== byName || firstPlugin !== byIndex) {
510                return true;
511            }
512        }
513    }
514    
515    if (typeof navigator.mimeTypes !== 'undefined') {
516        const mimes = navigator.mimeTypes;
517        if (plugins.length > 0 && mimes.length === 0) {
518            return true;
519        }
520    }
521    
522    return false;
523}
524
525function bbcs_detectFontRenderMismatch() {
526    const canvas = document.createElement('canvas');
527    canvas.width = 240;
528    canvas.height = 60;
529    
530    try {
531        const ctx = canvas.getContext('2d');
532        if (!ctx) return true;
533        
534        ctx.textBaseline = 'alphabetic';
535        ctx.fillStyle = '#000';
536        ctx.fillRect(0, 0, canvas.width, canvas.height);
537        
538        ctx.fillStyle = '#FFF';
539        ctx.font = '24px "Arial", sans-serif';
540        ctx.fillText("QWЁЙß好きAБВ", 10, 40);
541        
542        ctx.font = '24px "Times New Roman", serif';
543        ctx.fillText("XYЭЮę很好", 10, 20);
544        
545        const data = canvas.toDataURL();
546        if (!data || data === 'data:,' || data.length < 500) {
547            return true;
548        }
549        
550        const emptyData = document.createElement('canvas')
551            .toDataURL()
552            .length;
553            
554        if (data.length <= emptyData) {
555            return true;
556        }
557        
558        const imgData = ctx.getImageData(0, 0, 8, 8).data;
559        let allZero = true;
560        let allFF = true;
561        
562        for (let i = 0; i < imgData.length; i++) {
563            if (imgData[i] !== 0) allZero = false;
564            if (imgData[i] !== 255) allFF = false;
565        }
566        
567        if (allZero || allFF) {
568            return true;
569        }
570
571        var subPixels = ctx.getImageData(0, 0, 60, 40).data;
572        var rValues = [];
573        var rSum = 0;
574        for (var i = 0; i < subPixels.length; i += 4) {
575            rValues.push(subPixels[i]);
576            rSum += subPixels[i];
577        }
578        var rAvg = rSum / rValues.length;
579        var sameCount = 0;
580        for (var i = 0; i < rValues.length; i++) {
581            if (rValues[i] === Math.round(rAvg)) sameCount++;
582        }
583        if (sameCount / rValues.length > 0.9) {
584            return true;
585        }
586    } catch(e) {
587        return true;
588    }
589    
590    return false;
591}
592
593function bbcs_detectChromiumProperties() {
594    const isChromiumClaim = !!window.chrome;
595    
596    if (isChromiumClaim) {
597        const chromeObj = window.chrome;
598        const emptyChrome = Object.keys(chromeObj).length === 0;
599        
600        if (emptyChrome) {
601            return true;
602        }
603        
604        const hasRuntime = typeof chromeObj.runtime === 'object';
605        const hasWebstore = typeof chromeObj.webstore === 'object';
606        
607        const invalidStructure = 
608            (hasRuntime && (!chromeObj.runtime.id || !chromeObj.runtime.connect)) ||
609            (hasWebstore && typeof chromeObj.webstore.install !== 'function');
610            
611        if (invalidStructure) {
612            return true;
613        }
614    }
615    
616    const anomalyProps = [
617        '_phantom',
618        '__nightmare',
619        'callPhantom',
620        '_selenium',
621        'callSelenium',
622        '_Selenium_IDE_Recorder',
623        '__webdriver_script_fn',
624        '__driver_evaluate',
625        '__webdriver_evaluate',
626        '__selenium_evaluate',
627        '__fxdriver_evaluate',
628        '__driver_unwrapped',
629        '__webdriver_unwrapped',
630        '__selenium_unwrapped',
631        '__fxdriver_unwrapped',
632        '__webdriver_script_func',
633        '$chrome_asyncScriptInfo',
634        '__puppeteer_evaluation_script__',
635        '__playwright_evaluation_script__',
636        '_WEBDRIVER_ELEM_CACHE',
637        'domAutomation',
638        'domAutomationController',
639        '__lastWatirAlert',
640        '__lastWatirConfirm',
641        '__lastWatirPrompt',
642        'webdriver',
643        '__pw_manual',
644        '__pw_traverse',
645        '__playwright__binding__'
646    ];
647    
648    if (anomalyProps.some(prop => prop in window)) {
649        return true;
650    }
651
652    var cdcFound = Object.getOwnPropertyNames(window).some(function(k) {
653        return /^\$cdc_/.test(k);
654    });
655    if (cdcFound) return true;
656
657    try {
658        if ('domAutomationController' in document ||
659            '__webdriver_evaluate' in document) {
660            return true;
661        }
662        if (Object.getOwnPropertyNames(document).some(function(k) {
663            return /^\$cdc_/.test(k);
664        })) return true;
665    } catch (e) {}
666
667    try {
668        var desc = Object.getOwnPropertyDescriptor(Navigator.prototype, 'webdriver');
669        if (desc && desc.get) {
670            var fnStr = Function.prototype.toString.call(desc.get);
671            if (typeof fnStr === 'string' && !/\[native code\]/.test(fnStr)) {
672                return true;
673            }
674        }
675    } catch (e) {}
676    
677    if (navigator.userAgent.includes('Chrome') && !window.chrome) {
678        return true;
679    }
680
681    if (navigator.userAgent.includes('Firefox') &&
682        typeof CSS !== 'undefined' && CSS.supports &&
683        !CSS.supports('-moz-appearance', 'none')) {
684        return true;
685    }
686
687    var hasBrowserStack = Object.getOwnPropertyNames(window).some(function(k) {
688        return /^__BROWSERSTACK_/.test(k);
689    });
690    if (hasBrowserStack) return true;
691
692    var hasLighthouse = Object.getOwnPropertyNames(window).some(function(k) {
693        return /^__LIGHTHOUSE_/.test(k);
694    });
695    if (hasLighthouse) return true;
696    
697    return false;
698}
699
700function bbcs_detectWebGL() {
701    const canvas = document.createElement('canvas');
702    let gl;
703    
704    try {
705        gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
706    } catch (e) {
707        return true;
708    }
709    
710    if (!gl) {
711        return false; 
712    }
713    
714    const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
715    let renderer = '';
716    let vendor = '';
717    
718    if (debugInfo) {
719        renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) || '';
720        vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) || '';
721    }
722    
723    if (!renderer || !vendor) {
724        try {
725            renderer = gl.getParameter(gl.RENDERER) || '';
726            vendor = gl.getParameter(gl.VENDOR) || '';
727        } catch (e) {}
728    }
729    
730    if (!renderer && !vendor) {
731        try {
732            var ext = gl.getSupportedExtensions();
733            if (ext) {
734                var softwareExts = ['swiftshader', 'mesa', 'llvmpipe', 'softpipe'];
735                for (var i = 0; i < ext.length; i++) {
736                    for (var j = 0; j < softwareExts.length; j++) {
737                        if (ext[i].toLowerCase().indexOf(softwareExts[j]) !== -1) return true;
738                    }
739                }
740            }
741        } catch (e) {}
742        return false;
743    }
744    
745    if (renderer && vendor) {
746        if (renderer.length < 2 || vendor.length < 2) {
747            return true;
748        }
749        
750        const standardVendors = ['NVIDIA', 'Intel', 'AMD', 'ATI', 'Apple', 'Microsoft', 'Qualcomm', 'ARM', 'Google'];
751        const hasValidVendor = standardVendors.some(v => vendor.includes(v));
752        
753        if (!hasValidVendor) {
754            return true;
755        }
756        
757        const blacklistedRenderers = ['SwiftShader', 'Google SwiftShader', 'VirtualBox', 'VMware', 'llvmpipe', 'Software Rasterizer', 'Microsoft Basic Render'];
758        const isEmulated = blacklistedRenderers.some(r => renderer.includes(r));
759        
760        if (isEmulated) {
761            return true;
762        }
763    }
764    
765    return false;
766}
767
768function bbcs_detectTouchEvent() {
769    const hasTouch = 'ontouchstart' in window || 
770                      navigator.maxTouchPoints > 0;
771                      
772    const screenTouchMatch = window.matchMedia && 
773                            window.matchMedia('(pointer: coarse)').matches === hasTouch;
774                            
775    if (!screenTouchMatch) {
776        return true;
777    }
778    
779    const mobileUA = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
780    
781    if (mobileUA && (!hasTouch || navigator.maxTouchPoints === 0)) {
782        return true;
783    }
784    
785    if (hasTouch && navigator.maxTouchPoints > 20) {
786        return true;
787    }
788    
789    const desktopDeviceWithTouch = 
790        !mobileUA && 
791        hasTouch && 
792        navigator.maxTouchPoints <= 5 && 
793        /Windows NT|Macintosh|Linux/i.test(navigator.userAgent);
794        
795    if (desktopDeviceWithTouch && 
796        (window.outerHeight - window.innerHeight > 200 || 
797         window.outerWidth - window.innerWidth > 200)) {
798        return true;
799    }
800    
801    if (hasTouch && navigator.maxTouchPoints === 1 && !mobileUA) {
802        return true;
803    }
804    
805    return false;
806}
807
808function bbcs_detectLanguageMismatch() {
809    const lang = navigator.language || navigator.userLanguage || '';
810    const langs = navigator.languages || [];
811    
812    if (Array.isArray(langs) && langs.length > 0) {
813        if (langs[0] !== lang) {
814            return true;
815        }
816        
817        const uniqueLangs = new Set(langs);
818        if (uniqueLangs.size !== langs.length) {
819            return true;
820        }
821        
822        const invalidLang = langs.some(l => typeof l !== 'string' || l.length < 2 || l.length > 35);
823        if (invalidLang) {
824            return true;
825        }
826    }
827    
828    if (!lang || lang.length < 2) {
829        return true;
830    }
831    
832    const invalidChars = /[^a-zA-Z0-9\-_]/;
833    if (invalidChars.test(lang)) {
834        return true;
835    }
836    
837    const acceptLanguage = navigator.languages?.join(',') || navigator.language || '';
838    if (acceptLanguage && !acceptLanguage.includes(lang)) {
839        return true;
840    }
841    
842    return false;
843}
844
845let _bbcs_incognitoResult = false;
846let _bbcs_incognitoResolved = false;
847
848(function() {
849    var ua = navigator.userAgent;
850    var isChromium = ua.includes('Chrome') || ua.includes('Edg/');
851    var isSafari = ua.includes('Safari') && !ua.includes('Chrome');
852
853    if (isChromium) {
854        if (navigator.storage && navigator.storage.estimate) {
855            navigator.storage.estimate().then(function(est) {
856                _bbcs_incognitoResult = est.quota < 120000000;
857                _bbcs_incognitoResolved = true;
858            }).catch(function() { _bbcs_incognitoResolved = true; });
859        } else {
860            var fs = window.requestFileSystem || window.webkitRequestFileSystem;
861            if (fs) {
862                fs(window.TEMPORARY, 100,
863                    function() { _bbcs_incognitoResolved = true; },
864                    function() { _bbcs_incognitoResult = true; _bbcs_incognitoResolved = true; }
865                );
866            } else {
867                _bbcs_incognitoResolved = true;
868            }
869        }
870    } else if (isSafari) {
871        try {
872            var db = window.indexedDB.open('_bbcs_inc');
873            db.onerror = function() { _bbcs_incognitoResult = true; _bbcs_incognitoResolved = true; };
874            db.onsuccess = function() { _bbcs_incognitoResolved = true; try { db.result.close(); } catch(e) {} };
875        } catch (e) {
876            _bbcs_incognitoResolved = true;
877        }
878    } else {
879        _bbcs_incognitoResolved = true;
880    }
881})();
882
883function bbcs_isIncognito() {
884    if (_bbcs_incognitoResolved) return _bbcs_incognitoResult;
885    const ua = navigator.userAgent;
886
887    if (ua.includes('Firefox')) {
888        try {
889            const idbReq = indexedDB.open('_bbcs_inc');
890            if (Object.getPrototypeOf(idbReq).constructor.name !== 'IDBOpenDBRequest') {
891                return true;
892            }
893        } catch (e) {
894            return true;
895        }
896        return false;
897    }
898
899    if (ua.includes('Safari') && !ua.includes('Chrome')) {
900        try {
901            if (!window.localStorage) return true;
902            window.localStorage.setItem('_bbcs_t', '1');
903            window.localStorage.removeItem('_bbcs_t');
904        } catch (e) {
905            return true;
906        }
907        return false;
908    }
909
910    return _bbcs_incognitoResult;
911}
912
913function bbcs_clean_and_decode_base64_to_utf8(str) {
914   str = str.replace(/\s/g, '');
915   return decodeURIComponent(escape(window.atob(str)));
916}
917
918window.bbcs_detectJitter = bbcs_detectJitter;
919window.bbcs_detectNavigatorMismatch = bbcs_detectNavigatorMismatch;
920window.bbcs_detectUnsupportedFeatures = bbcs_detectUnsupportedFeatures;
921window.bbcs_detectFakePlugins = bbcs_detectFakePlugins;
922window.bbcs_detectFontRenderMismatch = bbcs_detectFontRenderMismatch;
923window.bbcs_detectChromiumProperties = bbcs_detectChromiumProperties;
924window.bbcs_detectWebGL = bbcs_detectWebGL;
925window.bbcs_detectTouchEvent = bbcs_detectTouchEvent;
926window.bbcs_detectLanguageMismatch = bbcs_detectLanguageMismatch;
927window.bbcs_isIncognito = bbcs_isIncognito;
928window.bbcs_clean_and_decode_base64_to_utf8 = bbcs_clean_and_decode_base64_to_utf8;</script>
928
929		
929<script>
930		/*
931 * BotBlocker Detection Utilities
932 * Version: 2.0.0
933 * Copyright (c) 2026 BotBlocker
934 * 
935 */
936
937function bbcs_computeFingerprint() {
938
939    const components = [];
940    const addComponent = (name, value) => {
941        if (value !== undefined) components.push(`${name}:${value}`);
942    };
943
944    const navData = [
945        navigator.userAgent,
946        navigator.platform,
947        navigator.vendor,
948        navigator.language,
949        Array.isArray(navigator.languages) ? navigator.languages.join(',') : '',
950        navigator.hardwareConcurrency,
951        navigator.deviceMemory,
952        navigator.maxTouchPoints,
953        screen.width + 'x' + screen.height + 'x' + screen.colorDepth,
954        window.innerWidth + 'x' + window.innerHeight,
955        window.outerWidth + 'x' + window.outerHeight,
956        window.devicePixelRatio
957    ].filter(Boolean).join('|');
958    addComponent('nav', navData);
959
960    try {
961        const canvas = document.createElement('canvas');
962        canvas.width = 280;
963        canvas.height = 60;
964        const ctx = canvas.getContext('2d');
965
966        ctx.textBaseline = 'alphabetic';
967        ctx.fillStyle = '#f60';
968        ctx.fillRect(125, 1, 62, 20);
969
970        const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);
971        gradient.addColorStop(0, '#0f0');
972        gradient.addColorStop(0.5, '#f0f');
973        gradient.addColorStop(1, '#00f');
974        ctx.fillStyle = gradient;
975        ctx.font = '16px Arial';
976        ctx.fillText("BotBlocker 👾 2026", 2, 15);
977        ctx.fillStyle = 'rgba(102, 204, 0, 0.7)';
978        ctx.font = '18px Times New Roman';
979        ctx.fillText("BotblockeR", 4, 45);
980
981        ctx.fillStyle = '#f0f';
982        ctx.font = 'bold 14px Georgia';
983        ctx.fillText("👻🔒🛡️", 180, 30);
984
985        ctx.strokeStyle = '#639';
986        ctx.lineWidth = 2;
987        ctx.beginPath();
988        ctx.moveTo(0, 30);
989        ctx.bezierCurveTo(25, 15, 75, 55, 100, 30);
990        ctx.stroke();
991
992        const dataURL = canvas.toDataURL();
993        const canvasHash = simpleHash(dataURL.substring(0, 1000)); 
994        addComponent('cnv', canvasHash);
995    } catch(e) {
996        addComponent('cnv_err', simpleHash(e.toString()));
997    }
998
999    try {
1000        const canvas = document.createElement('canvas');
1001        const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
1002        if (gl) {
1003            const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
1004            const vendor = debugInfo ? gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) : '';
1005            const renderer = debugInfo ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) : '';
1006            const webglData = [
1007                gl.getParameter(gl.VERSION),
1008                vendor,
1009                renderer,
1010                gl.getParameter(gl.SHADING_LANGUAGE_VERSION),
1011                (gl.getSupportedExtensions() || []).join('~').substring(0, 100) 
1012            ].join('|');
1013            addComponent('gl', simpleHash(webglData));
1014
1015            const shaderPrecision = [
1016                gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision,
1017                gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision,
1018                gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).rangeMin,
1019                gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).rangeMax
1020            ].join('|');
1021            addComponent('gl_prec', simpleHash(shaderPrecision));
1022        }
1023    } catch(e) {
1024        addComponent('gl_err', simpleHash(e.toString()));
1025    }
1026
1027    try {
1028        const audioContext = window.AudioContext || window.webkitAudioContext;
1029        if (audioContext) {
1030            let audioContextAllowed = false;
1031            try {
1032                const tempContext = new audioContext();
1033                if (tempContext.state === 'running') {
1034                    audioContextAllowed = true;
1035                    
1036                    const oscillator = tempContext.createOscillator();
1037                    const analyser = tempContext.createAnalyser();
1038                    const gain = tempContext.createGain();
1039                    oscillator.type = 'triangle';
1040                    gain.gain.value = 0; 
1041                    oscillator.connect(analyser);
1042                    analyser.connect(gain);
1043                    gain.connect(tempContext.destination);
1044                    
1045                    analyser.fftSize = 256;
1046                    const bufferLength = analyser.frequencyBinCount;
1047                    const dataArray = new Uint8Array(bufferLength);
1048                    
1049                    oscillator.start();
1050                    analyser.getByteFrequencyData(dataArray);
1051                    oscillator.stop();
1052
1053                    const samples = [];
1054                    for (let i = 0; i < bufferLength; i += 4) {
1055                        samples.push(dataArray[i]);
1056                    }
1057                    addComponent('aud', simpleHash(samples.join(',')));
1058                    addComponent('aud_ctx', simpleHash(tempContext.sampleRate + '|' + tempContext.destination.channelCount));
1059
1060                    if (typeof tempContext.close === 'function') {
1061                        tempContext.close();
1062                    }
1063                } else {
1064                    addComponent('aud', 'suspended');
1065                    if (typeof tempContext.close === 'function') {
1066                        tempContext.close();
1067                    }
1068                }
1069            } catch(e) {
1070                addComponent('aud', 'blocked');
1071            }
1072        } else {
1073            addComponent('aud', 'not_supported');
1074        }
1075    } catch(e) {
1076        addComponent('aud_err', simpleHash(e.toString()));
1077    }
1078
1079    try {
1080        const timeData = [
1081            Intl.DateTimeFormat().resolvedOptions().timeZone,
1082            new Date().getTimezoneOffset(),
1083            Intl.DateTimeFormat().resolvedOptions().locale,
1084            new Date().toString().substring(0, 25)
1085        ].join('|');
1086        addComponent('tz', simpleHash(timeData));
1087    } catch(e) {
1088        addComponent('tz_err', simpleHash(e.toString()));
1089    }
1090
1091    const mathConstants = [
1092        Math.PI.toString().substring(0, 40),
1093        Math.E.toString().substring(0, 40),
1094        Math.SQRT2.toString().substring(0, 40),
1095        Math.SQRT1_2.toString().substring(0, 40),
1096        Math.LN2.toString().substring(0, 40),
1097        Math.LN10.toString().substring(0, 40),
1098        Math.LOG2E.toString().substring(0, 40),
1099        Math.LOG10E.toString().substring(0, 40)
1100    ].join('');
1101    
1102    const mathOperations = [
1103        Math.sin(Math.PI / 4).toString(),
1104        Math.cos(Math.PI / 4).toString(),
1105        Math.tan(Math.PI / 4).toString(),
1106        Math.sin(0).toString(),
1107        Math.exp(1).toString(),
1108        Math.log(10).toString(),
1109        Math.log10(100).toString(),
1110        Math.sqrt(2).toString(),
1111        Math.cbrt(27).toString()
1112    ].join('');
1113    
1114    addComponent('math', simpleHash(mathConstants + mathOperations));
1115
1116    const apiFeatures = [
1117        'Promise' in window,
1118        'Symbol' in window,
1119        'fetch' in window,
1120        'Proxy' in window,
1121        'Reflect' in window,
1122        'Map' in window,
1123        'Set' in window,
1124        'WeakMap' in window,
1125        'WeakSet' in window,
1126        'BigInt' in window,
1127        'Atomics' in window,
1128        'SharedArrayBuffer' in window,
1129        'Intl' in window,
1130        'WebAssembly' in window,
1131        'ArrayBuffer' in window,
1132        'WebSocket' in window,
1133        'Worker' in window,
1134        'IntersectionObserver' in window,
1135        'ResizeObserver' in window,
1136        'MutationObserver' in window,
1137        'localStorage' in window,
1138        'sessionStorage' in window,
1139        'indexedDB' in window,
1140        'crypto' in window,
1141        'Bluetooth' in navigator,
1142        'clipboard' in navigator,
1143        'credentials' in navigator,
1144        'geolocation' in navigator,
1145        'mediaDevices' in navigator,
1146        'serviceWorker' in navigator,
1147        'requestIdleCallback' in window,
1148        'speechSynthesis' in window,
1149        'performance' in window,
1150        'Notification' in window
1151    ].map((val, idx) => val ? idx.toString(36) : '').join('');
1152    addComponent('api', simpleHash(apiFeatures));
1153
1154    try {
1155        if (navigator.plugins) {
1156            const plugins = Array.from(navigator.plugins || [])
1157                .map(p => [p.name, p.description, p.filename].filter(Boolean).join('~'))
1158                .join('|');
1159            if (plugins) addComponent('plg', simpleHash(plugins));
1160
1161            const mimeTypes = Array.from(navigator.mimeTypes || [])
1162                .map(m => [m.type, m.description, m.suffixes].filter(Boolean).join('~'))
1163                .join('|');
1164            if (mimeTypes) addComponent('mime', simpleHash(mimeTypes));
1165        }
1166    } catch(e) {
1167        addComponent('plg_err', simpleHash(e.toString()));
1168    }
1169
1170    try {
1171        if (performance) {
1172            const performanceData = [
1173                performance.timeOrigin,
1174                performance.now(),
1175                performance.memory ? performance.memory.jsHeapSizeLimit : null,
1176                performance.memory ? performance.memory.totalJSHeapSize : null,
1177                performance.memory ? performance.memory.usedJSHeapSize : null
1178            ].filter(Boolean).join('|');
1179            addComponent('perf', simpleHash(performanceData));
1180        }
1181    } catch(e) {
1182        addComponent('perf_err', simpleHash(e.toString()));
1183    }
1184
1185    let timeWarpDetection = '';
1186    try {
1187        const startNow = Date.now();
1188        const startPerf = performance.now();
1189        let sum = 0;
1190        for (let i = 0; i < 10000; i++) sum += Math.sqrt(i);
1191        const endNow = Date.now();
1192        const endPerf = performance.now();
1193        const dateTimeDiff = endNow - startNow;
1194        const perfTimeDiff = endPerf - startPerf;
1195        const timingRatio = dateTimeDiff > 0 ? (perfTimeDiff / dateTimeDiff).toFixed(2) : 'error';
1196        timeWarpDetection = timingRatio;
1197    } catch(e) {
1198        timeWarpDetection = 'error';
1199    }
1200    addComponent('time_warp', timeWarpDetection);
1201
1202    try {
1203        const conn = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
1204        if (conn) {
1205            const connData = [conn.effectiveType, conn.type, conn.downlink, conn.rtt, conn.saveData]
1206                .filter(v => v !== undefined).join('|');
1207            addComponent('conn', simpleHash(connData));
1208        }
1209    } catch(e) {}
1210
1211    try {
1212        if (typeof CSS !== 'undefined' && CSS.supports) {
1213            const cssFeatures = [
1214                CSS.supports('-webkit-appearance', 'none'),
1215                CSS.supports('-moz-appearance', 'none'),
1216                CSS.supports('accent-color', 'auto'),
1217                CSS.supports('container-type', 'inline-size'),
1218                CSS.supports('color', 'oklch(0.5 0.2 240)'),
1219                CSS.supports('view-transition-name', 'root'),
1220                CSS.supports('anchor-name', '--a')
1221            ].map((v, i) => v ? i.toString(36) : '').join('');
1222            addComponent('css', simpleHash(cssFeatures));
1223        }
1224    } catch(e) {}
1225
1226    function simpleHash(str) {
1227        if (!str) return 'empty';
1228        
1229        let h1 = 0xdeadbeef, h2 = 0x41c6ce57;
1230        for (let i = 0, ch; i < str.length; i++) {
1231            ch = str.charCodeAt(i);
1232            h1 = Math.imul(h1 ^ ch, 2654435761);
1233            h2 = Math.imul(h2 ^ ch, 1597334677);
1234        }
1235        h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507);
1236        h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909);
1237        h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507);
1238        h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909);
1239
1240        const h = 4294967296 * (2097151 & h2) + (h1 >>> 0);
1241        return h.toString(36);
1242    }
1243
1244    const allComponents = components.join(';');
1245    const fingerprint = simpleHash(allComponents);
1246
1247    return {
1248        fingerprint: fingerprint,
1249        //fingerprintDetails: allComponents // Uncomment to see the details and debug 
1250    };
1251}
1252
1253window.bbcs_computeFingerprint = bbcs_computeFingerprint;</script>
1253
1254		
1254<script>
1255		var bbcsCaptchaData = {"mode":5,"params":{"instruction":"Find the shape:  Triangle,  with color:  Red","shapesData":[{"type":"triangle","color":"blue","hash":"564f2c1c70b6e055ece5130820c86a9e6e6c0f088f4cf140b2fd8a9268f0e82b"},{"type":"square","color":"purple","hash":"6433b609cf1cea8bc10fd58020b903736b93844515849297d4971d85afe497ad"},{"type":"square","color":"green","hash":"a08661437881e18a019cf80763becbec3b27675c4d0d114fee5c82254951fa6a"},{"type":"triangle","color":"red","hash":"9d2e9642e984959e94e9c1215cda0db3793b25717abb3299911b79af571606c8"},{"type":"circle","color":"blue","hash":"5810c194f93a9e5e78197d6bb58007325676503b67dcf85ec668df5de8dfc26a"}]},"ajaxUrl":"https:\/\/www.basketinside.com\/wp-admin\/admin-ajax.php","nonce":"628deecdae","time":1790937853,"selectRequestMode":"x4dfa69220443b19517c6756e12699dcf","checkFunction":"fadc2530ffa8892c13a4476448ef1e942","data":"window.data","autoRender":false,"challengeToken":"1eEkrhJVlyAouweOojLN3BpYM6LKy3CLx0UaD+Cf51IoypPZID90Wzntq8xF5Av0aXtF\/i7emebNEnd5gHppdeRRcp9a7PFBNb82mqKUxQUzdYa5YsT1tnLw5qi8zNpM1imyfe8FvoOMmRXl11hkQH0UBzKEaGkmYUfRlxalvHk="};</script>
1255
1256		
1256<script>
1257		/* Main CAPTCHA JS Controller */
1258
1259function renderCaptcha() {
1260  if (typeof bbcsCaptchaData === "undefined") {
1261    console.error('[BBCS DEBUG] CAPTCHA initial data not loaded');
1262    if (typeof bbcsJsData !== 'undefined' && bbcsJsData.debugEnabled) {
1263      console.log('[BBCS DEBUG] renderCaptcha: bbcsCaptchaData is undefined');
1264    }
1265    return;
1266  }
1267
1268  const mode = parseInt(bbcsCaptchaData.mode, 10);
1269  const params = bbcsCaptchaData.params;
1270
1271  if (typeof bbcsJsData !== 'undefined' && bbcsJsData.debugEnabled) {
1272    console.log('[BBCS DEBUG] renderCaptcha: mode=' + mode + ' params keys=' + (params ? Object.keys(params).join(',') : 'null') + ' token=' + (bbcsCaptchaData.challengeToken ? bbcsCaptchaData.challengeToken.substring(0,10)+'...' : 'empty'));
1273  }
1274
1275  switch (mode) {
1276    case 0:
1277      if (typeof renderMode0Captcha === "function") {
1278        renderMode0Captcha(params);
1279      }
1280      break;
1281    case 1:
1282      if (typeof renderMode1Captcha === "function") {
1283        renderMode1Captcha(params);
1284      }
1285      break;
1286    case 2:
1287      if (typeof renderMode2Captcha === "function") {
1288        renderMode2Captcha(params);
1289      }
1290      break;
1291    case 3:
1292      if (typeof renderMode3Captcha === "function") {
1293        renderMode3Captcha(params);
1294      }
1295      break;
1296    case 4:
1297      if (typeof renderMode4Captcha === "function") {
1298        renderMode4Captcha(params);
1299      }
1300      break;
1301    case 5:
1302      if (typeof renderMode5Captcha === "function") {
1303        renderMode5Captcha(params);
1304      }
1305      break;
1306    case 6:
1307      if (typeof renderMode6Captcha === "function") {
1308        renderMode6Captcha(params);
1309      }
1310      break;
1311    case 7:
1312      if (typeof renderMode7Captcha === "function") {
1313        renderMode7Captcha(params);
1314      }
1315      break;
1316    case 8:
1317      if (typeof renderMode8Captcha === "function") {
1318        renderMode8Captcha(params);
1319      }
1320      break;
1321    default:
1322      const renderer = window['renderMode' + mode + 'Captcha'];
1323      if (typeof renderer === "function") {
1324        renderer(params);
1325      } else if (typeof renderMode0Captcha === "function") {
1326        renderMode0Captcha(params);
1327      } else {
1328        console.error('[BBCS DEBUG] Unknown CAPTCHA mode:', mode);
1329      }
1330      break;
1331  }
1332}
1333
1334window.renderCaptcha = renderCaptcha;</script>
1334
1335		
1335<script>
1336		/* CAPTCHA Mode 5 JS (moving shapes) */
1337
1338function renderMode5Captcha(params) {
1339    const { instruction, shapesData } = params;
1340    
1341    document.getElementById("content").innerHTML = `
1342        <div style="text-align:center;">
1343            <p>${instruction}</p>
1344            <canvas id="captchaCanvas" width="300" height="200" style="border:1px solid #ddd;"></canvas>
1345        </div>
1346    `;
1347
1348    (function() {
1349        const canvas = document.getElementById("captchaCanvas");
1350        const ctx = canvas.getContext("2d");
1351
1352        const shapes = shapesData.map(shape => ({
1353            ...shape,
1354            x: Math.random() * 250 + 25,
1355            y: Math.random() * 150 + 25,
1356            size: 25,
1357            speedX: Math.random() * 2 - 1,
1358            speedY: Math.random() * 2 - 1
1359        }));
1360        
1361        function drawShapes() {
1362            ctx.clearRect(0, 0, canvas.width, canvas.height);
1363            
1364            shapes.forEach(shape => {
1365                ctx.fillStyle = shape.color;
1366                ctx.strokeStyle = "#000";
1367                ctx.lineWidth = 1;
1368
1369                shape.x += shape.speedX;
1370                shape.y += shape.speedY;
1371
1372                if (shape.x < shape.size || shape.x > canvas.width - shape.size) {
1373                    shape.speedX = -shape.speedX;
1374                }
1375                if (shape.y < shape.size || shape.y > canvas.height - shape.size) {
1376                    shape.speedY = -shape.speedY;
1377                }
1378
1379                switch(shape.type) {
1380                    case "circle":
1381                        ctx.beginPath();
1382                        ctx.arc(shape.x, shape.y, shape.size, 0, Math.PI * 2);
1383                        ctx.fill();
1384                        ctx.stroke();
1385                        break;
1386                    case "square":
1387                        ctx.fillRect(shape.x - shape.size, shape.y - shape.size, shape.size * 2, shape.size * 2);
1388                        ctx.strokeRect(shape.x - shape.size, shape.y - shape.size, shape.size * 2, shape.size * 2);
1389                        break;
1390                    case "triangle":
1391                        ctx.beginPath();
1392                        ctx.moveTo(shape.x, shape.y - shape.size);
1393                        ctx.lineTo(shape.x + shape.size, shape.y + shape.size);
1394                        ctx.lineTo(shape.x - shape.size, shape.y + shape.size);
1395                        ctx.closePath();
1396                        ctx.fill();
1397                        ctx.stroke();
1398                        break;
1399                    case "star":
1400                        drawStar(ctx, shape.x, shape.y, 5, shape.size, shape.size/2);
1401                        break;
1402                    case "hexagon":
1403                        drawHexagon(ctx, shape.x, shape.y, shape.size);
1404                        break;
1405                }
1406            });
1407            
1408            requestAnimationFrame(drawShapes);
1409        }
1410        
1411        function drawStar(ctx, cx, cy, spikes, outerRadius, innerRadius) {
1412            let rot = Math.PI / 2 * 3;
1413            let x = cx;
1414            let y = cy;
1415            let step = Math.PI / spikes;
1416
1417            ctx.beginPath();
1418            ctx.moveTo(cx, cy - outerRadius);
1419            
1420            for (let i = 0; i < spikes; i++) {
1421                x = cx + Math.cos(rot) * outerRadius;
1422                y = cy + Math.sin(rot) * outerRadius;
1423                ctx.lineTo(x, y);
1424                rot += step;
1425
1426                x = cx + Math.cos(rot) * innerRadius;
1427                y = cy + Math.sin(rot) * innerRadius;
1428                ctx.lineTo(x, y);
1429                rot += step;
1430            }
1431            
1432            ctx.lineTo(cx, cy - outerRadius);
1433            ctx.closePath();
1434            ctx.fill();
1435            ctx.stroke();
1436        }
1437        
1438        function drawHexagon(ctx, x, y, size) {
1439            ctx.beginPath();
1440            for (let i = 0; i < 6; i++) {
1441                const angle = 2 * Math.PI / 6 * i;
1442                const hx = x + size * Math.cos(angle);
1443                const hy = y + size * Math.sin(angle);
1444                if (i === 0) ctx.moveTo(hx, hy);
1445                else ctx.lineTo(hx, hy);
1446            }
1447            ctx.closePath();
1448            ctx.fill();
1449            ctx.stroke();
1450        }
1451
1452        canvas.addEventListener("click", function(e) {
1453            const rect = canvas.getBoundingClientRect();
1454            const x = e.clientX - rect.left;
1455            const y = e.clientY - rect.top;
1456            
1457            shapes.forEach(shape => {
1458                if (isPointInShape(x, y, shape)) {
1459                    window[bbcsJsData.checkFunctionName]('post', window.data, shape.hash);
1460                }
1461            });
1462        });
1463        
1464        function isPointInShape(x, y, shape) {
1465            switch(shape.type) {
1466                case "circle":
1467                    return Math.sqrt((x - shape.x) * (x - shape.x) + (y - shape.y) * (y - shape.y)) <= shape.size;
1468                case "square":
1469                    return x >= shape.x - shape.size && x <= shape.x + shape.size && 
1470                           y >= shape.y - shape.size && y <= shape.y + shape.size;
1471                case "triangle": {
1472                    const p1 = {x: shape.x, y: shape.y - shape.size};
1473                    const p2 = {x: shape.x + shape.size, y: shape.y + shape.size};
1474                    const p3 = {x: shape.x - shape.size, y: shape.y + shape.size};
1475                    return isPointInTriangle(x, y, p1, p2, p3);
1476                }
1477                case "star":
1478                case "hexagon":
1479                    return Math.sqrt((x - shape.x) * (x - shape.x) + (y - shape.y) * (y - shape.y)) <= shape.size * 1.2;
1480            }
1481            return false;
1482        }
1483        
1484        function isPointInTriangle(px, py, p1, p2, p3) {
1485            const area = 0.5 * Math.abs(
1486                (p1.x * (p2.y - p3.y) + p2.x * (p3.y - p1.y) + p3.x * (p1.y - p2.y))
1487            );
1488            
1489            const a = 0.5 * Math.abs(
1490                (p1.x * (p2.y - py) + p2.x * (py - p1.y) + px * (p1.y - p2.y))
1491            );
1492            const b = 0.5 * Math.abs(
1493                (px * (p2.y - p3.y) + p2.x * (p3.y - py) + p3.x * (py - p2.y))
1494            );
1495            const c = 0.5 * Math.abs(
1496                (p1.x * (py - p3.y) + px * (p3.y - p1.y) + p3.x * (p1.y - py))
1497            );
1498            
1499            return Math.abs(area - (a + b + c)) < 0.01;
1500        }
1501
1502        requestAnimationFrame(drawShapes);
1503    })();
1504}
1505
1506window.renderMode5Captcha = renderMode5Captcha;</script>
1506
1507		
1507<script>
1508		// BotBlocker Check Core - Shared JS for FULL and FRONTEND modes
1509// Requires: window.bbcsJsData to be set BEFORE this script runs.
1510
1511window.__bbcs_hp_t = Date.now();
1512
1513window.bbcs_cleanAndDecodeBase64ToUtf8 = function(str) {
1514    str = str.replace(/\s/g, '');
1515    return decodeURIComponent(escape(window.atob(str)));
1516};
1517
1518window.ipv4 = '';
1519window.ipdbc = '';
1520window.rct = '';
1521
1522window.bbcsDebugEnabled = !!bbcsJsData.debugEnabled;
1523
1524window.bbcsDebugLog = function(...args) {
1525    if (window.bbcsDebugEnabled) {
1526        console.log('[BBCS DEBUG]', ...args);
1527    }
1528};
1529
1530window.bbcsDebugWarn = function(...args) {
1531    if (window.bbcsDebugEnabled) {
1532        console.warn('[BBCS DEBUG]', ...args);
1533    }
1534};
1535
1536window.bbcsDebugError = function(...args) {
1537    if (window.bbcsDebugEnabled) {
1538        console.error('[BBCS DEBUG]', ...args);
1539    }
1540};
1541
1542bbcsDebugLog(bbcsJsData.shortName + ' v.' + bbcsJsData.version);
1543
1544var bbcsDdosRetryCount = 0;
1545var bbcsDdosMaxRetries = 3;
1546
1547window.bbcsCheckUI = {
1548    timerInterval: null,
1549    secondsLeft: 6,
1550    attempt: 0,
1551    maxAttempts: 3,
1552    _lastMsg: '',
1553
1554    showVerifying: function () {
1555        this._stopTimer();
1556        this.secondsLeft = 6;
1557        this.attempt = 0;
1558        this._render(bbcsJsData.verifyingText || 'Verifying...');
1559    },
1560
1561    showRetry: function (attemptNum) {
1562        this._stopTimer();
1563        this.attempt = attemptNum;
1564        this._render((bbcsJsData.retryingText || 'Retrying...') + ' (' + attemptNum + '/' + this.maxAttempts + ')', true);
1565        this._startTimer();
1566    },
1567
1568    showCAPTCHA: function () {
1569        this._stopTimer();
1570        this._render(bbcsJsData.verificationFailedText || 'Verification failed. Please complete the challenge below.');
1571    },
1572
1573    showSuccess: function () {
1574        this._stopTimer();
1575        this._render(bbcsJsData.approvedText || 'Access approved. Redirecting...');
1576    },
1577
1578    hide: function () {
1579        this._stopTimer();
1580        var el = document.getElementById('bbcs-status');
1581        if (el) { el.innerHTML = ''; el.style.display = 'none'; }
1582    },
1583
1584    _render: function (msg, showSeconds) {
1585        this._lastMsg = msg;
1586        var el = document.getElementById('bbcs-status');
1587        if (!el) return;
1588        el.style.display = '';
1589        var html = '<div style="margin-bottom:2px;">' + msg + '</div>';
1590        if (showSeconds) {
1591            html += '<div style="font-size:12px;color:#999;">' + this.secondsLeft + 's</div>';
1592        }
1593        el.innerHTML = html;
1594    },
1595
1596    _startTimer: function () {
1597        var self = this;
1598        this.timerInterval = setInterval(function () {
1599            if (self.secondsLeft > 0) {
1600                self.secondsLeft--;
1601                self._render(self._lastMsg, true);
1602            }
1603            if (self.secondsLeft <= 0) {
1604                self._stopTimer();
1605            }
1606        }, 1000);
1607    },
1608
1609    _stopTimer: function () {
1610        if (this.timerInterval) {
1611            clearInterval(this.timerInterval);
1612            this.timerInterval = null;
1613        }
1614    }
1615};
1616
1617function bbcs_isDdosResponse(responseText, status) {
1618    if (!responseText) return false;
1619    if (typeof status !== 'undefined' && status !== 200) return false;
1620    try {
1621        JSON.parse(responseText.trim());
1622        return false;
1623    } catch(e) {}
1624    return responseText.indexOf('<') !== -1 || responseText.indexOf('document.cookie') !== -1;
1625}
1626
1627function bbcs_extractDdosCookie(responseText) {
1628    if (!responseText) return false;
1629    var cookiePatterns = [
1630        /document\.cookie\s*=\s*"([^"]+)"/,
1631        /document\.cookie\s*=\s*'([^']+)'/
1632    ];
1633    for (var i = 0; i < cookiePatterns.length; i++) {
1634        var cookieMatch = responseText.match(cookiePatterns[i]);
1635        if (cookieMatch && cookieMatch[1]) {
1636            bbcsDebugLog('DDoS protection cookie detected, setting: ' + cookieMatch[1].substring(0, 20) + '...');
1637            document.cookie = cookieMatch[1];
1638            return true;
1639        }
1640    }
1641    return false;
1642}
1643
1644function bbcs_handleDdosResponse(responseText, s, d, x, checkFn) {
1645    bbcs_extractDdosCookie(responseText);
1646    if (bbcsDdosRetryCount < bbcsDdosMaxRetries) {
1647        bbcsDdosRetryCount++;
1648        if (bbcsJsData.ddosResilience) {
1649            bbcsCheckUI.showRetry(bbcsDdosRetryCount);
1650        }
1651        var delay = bbcsDdosRetryCount * 1000;
1652        bbcsDebugLog('DDoS retry ' + bbcsDdosRetryCount + '/' + bbcsDdosMaxRetries + ' in ' + delay + 'ms');
1653        setTimeout(function() {
1654            checkFn(s, d, x);
1655        }, delay);
1656        return true;
1657    }
1658    if (bbcsJsData.ddosResilience) {
1659        bbcsCheckUI.showCAPTCHA();
1660    }
1661    var rc = 0;
1662    try { rc = parseInt(sessionStorage.getItem('bbcsRedirectCount') || '0', 10); } catch(e) {}
1663    if (rc >= 2) {
1664        bbcsDebugLog('DDoS redirect loop detected, stopping');
1665        botblocker_captcha_render();
1666        return true;
1667    }
1668    try { sessionStorage.setItem('bbcsRedirectCount', String(rc + 1)); } catch(e) {}
1669    bbcsDebugLog('DDoS retries exhausted, redirecting to page');
1670    window.location.href = bbcsJsData.redirectUrl;
1671    return true;
1672}
1673
1674function bbcs_detectAll() {
1675    const results = {
1676        navigatorMismatch: bbcs_detectNavigatorMismatch(),
1677        unsupportedFeatures: bbcs_detectUnsupportedFeatures(),
1678        fakePlugins: bbcs_detectFakePlugins(),
1679        fontRenderMismatch: bbcs_detectFontRenderMismatch(),
1680        chromiumProperties: bbcs_detectChromiumProperties(),
1681        jitter: bbcs_detectJitter(),
1682        webGLMismatch: bbcs_detectWebGL(),
1683        touchEventMismatch: bbcs_detectTouchEvent(),
1684        languageMismatch: bbcs_detectLanguageMismatch(),
1685        crossbrowserIncognito: bbcs_isIncognito(),
1686        browserFingerprint: bbcs_computeFingerprint()
1687    };
1688    return results;
1689}
1690
1691function bbcs_getDetectionParams() {
1692    const startTime = Date.now();
1693    const timeoutLimit = 1000;
1694    try {
1695        const detectionResult = bbcs_detectAll();
1696        if (Date.now() - startTime > timeoutLimit) {
1697            bbcsDebugWarn('Detection methods took too long, returning partial results');
1698        }
1699        detectionResult.browserFingerprint = detectionResult.browserFingerprint.fingerprint;
1700        let detectionParams = '';
1701        for (const [key, value] of Object.entries(detectionResult)) {
1702            detectionParams += '&' + key + '=' + encodeURIComponent(value);
1703        }
1704        return detectionParams;
1705    } catch (e) {
1706        bbcsDebugError('Error during detection:', e);
1707        return '&error=detection_failed';
1708    }
1709}
1710
1711function bbcs_areCookiesEnabled() {
1712    var cookieEnabled = navigator.cookieEnabled;
1713    if (cookieEnabled === undefined) {
1714        document.cookie = "testcookie";
1715        cookieEnabled = document.cookie.indexOf("testcookie") != -1;
1716    }
1717    return cookieEnabled;
1718}
1719
1720if (!bbcs_areCookiesEnabled()) {
1721    var cookieoff = 1;
1722} else {
1723    var cookieoff = 0;
1724}
1725
1726var _host = window.location.hostname;
1727if (_host.indexOf('www.') === 0) { _host = _host.substring(4); }
1728if (_host !== window.atob(bbcsJsData.hostBase64) &&
1729    _host !== window.atob(bbcsJsData.hostNoPortBase64)) {
1730    window.location = window.atob(bbcsJsData.redirectUrlBase64);
1731    throw "stop";
1732}
1733
1734document.getElementById("content").innerHTML = bbcsJsData.loadingText;
1735
1736function handleWorkerSignal() {
1737    return new Promise(function(resolve) {
1738        if (bbcsJsData.recaptchaEnabled) {
1739            try {
1740                grecaptcha.ready(function() {
1741                    grecaptcha.execute(bbcsJsData.recaptchaKey3, {
1742                        action: bbcsJsData.country
1743                    }).then(function(token) {
1744                        window.rct = token;
1745                        resolve('HWS');
1746                    }).catch(function(e) {
1747                        bbcsDebugError('reCAPTCHA execute failed:', e);
1748                        window.rct = '';
1749                        resolve('HWS');
1750                    });
1751                });
1752            } catch (e) {
1753                bbcsDebugError('reCAPTCHA unavailable:', e);
1754                window.rct = '';
1755                resolve('HWS');
1756            }
1757        } else {
1758            window.rct = '';
1759            resolve('HWS');
1760        }
1761    });
1762}
1763
1764function makeIpv6Request(url) {
1765    return new Promise(function(resolve) {
1766        var xhr = new XMLHttpRequest();
1767        xhr.open('GET', url, true);
1768        xhr.setRequestHeader("Content-Type", "application/json");
1769        xhr.timeout = 5000;
1770        xhr.onload = function() {
1771            if (xhr.readyState === 4 && xhr.status === 200) {
1772                var json = JSON.parse(xhr.responseText);
1773                window.ipv4 = json.ip;
1774                window.ipdbc = bbcsJsData.emptyValue;
1775                resolve(true);
1776            } else {
1777                bbcsDebugError('Error status:', xhr.status);
1778                resolve(false);
1779            }
1780        };
1781        xhr.ontimeout = function() {
1782            bbcsDebugError('Timeout');
1783            resolve(false);
1784        };
1785        xhr.onerror = function() {
1786            bbcsDebugError('Error');
1787            resolve(false);
1788        };
1789        xhr.send();
1790    });
1791}
1792
1793async function dispatchServiceEvent() {
1794    if (bbcsJsData.ipVersion == 6) {
1795        var ok = await makeIpv6Request(bbcsJsData.apiIpv6);
1796        if (!ok) {
1797            ok = await makeIpv6Request(bbcsJsData.apiGsIpv6);
1798        }
1799        return ok ? 'DSE' : 'Error DSE';
1800    }
1801    window.ipv4 = '';
1802    window.ipdbc = '';
1803    return 'Result DSE';
1804}
1805
1806function initProcessHandler(result1, result2) {
1807    var bbcs_detectionParams = bbcs_getDetectionParams();
1808    window.data = 'test=' + bbcsJsData.testHash +
1809        '&h1=' + bbcsJsData.h1Hash +
1810        '&date=' + bbcsJsData.time +
1811        '&hdc=' + bbcsJsData.hosting +
1812        '&a=' + window.adb_var +
1813        '&country=' + bbcsJsData.country +
1814        '&ip=' + bbcsJsData.ip +
1815        '&version=' + bbcsJsData.version +
1816        '&cid=' + bbcsJsData.cid +
1817        '&ptr=' + bbcsJsData.ptr +
1818        '&w=' + screen.width +
1819        '&h=' + screen.height +
1820        '&cw=' + document.documentElement.clientWidth +
1821        '&ch=' + document.documentElement.clientHeight +
1822        '&co=' + screen.colorDepth +
1823        '&pi=' + screen.pixelDepth +
1824        '&ref=' + encodeURIComponent(document.referrer) +
1825        '&accept=' + bbcsJsData.httpAccept +
1826        '&tz=' + Intl.DateTimeFormat().resolvedOptions().timeZone +
1827        '&ipdbc=' + window.ipdbc +
1828        '&ipv4=' + window.ipv4 +
1829        '&rct=' + window.rct +
1830        '&cookieoff=' + cookieoff +
1831        bbcs_detectionParams;
1832
1833    var bbcsHpInput = document.querySelector('[data-bbcs-honeypot]');
1834    window.__bbcs_hp_present = !!(bbcsHpInput && bbcsHpInput.name);
1835    if (window.__bbcs_hp_present) {
1836        window.data += '&bbcs_hp_name=' + encodeURIComponent(bbcsHpInput.name);
1837        window.data += '&' + bbcsHpInput.name + '=' + encodeURIComponent(bbcsHpInput.value || '');
1838    }
1839    window[bbcsJsData.checkFunctionName]('botblocker-security', window.data, '');
1840    bbcsDebugLog('initProcessHandler -> ', result1, result2);
1841}
1842
1843async function performAsyncStep() {
1844    try {
1845        const result1 = await handleWorkerSignal();
1846        const result2 = await dispatchServiceEvent();
1847        initProcessHandler(result1, result2);
1848    } catch (error) {
1849        bbcsDebugError(error);
1850    }
1851}
1852
1853performAsyncStep();
1854
1855function botblocker_captcha_render() {
1856    if (bbcsJsData.ddosResilience && typeof bbcsCircuitBreaker !== 'undefined' && bbcsCircuitBreaker.isOpen()) {
1857        bbcsCircuitBreaker.showFallback();
1858        return;
1859    }
1860    if (typeof renderCaptcha === 'function') {
1861        window.__bbcs_hp_t = Date.now();
1862        renderCaptcha();
1863    }
1864}
1865
1866window[bbcsJsData.checkFunctionName] = function(s, d, x, ajaxEndpoint) {
1867    if (bbcsJsData.ddosResilience) {
1868        if (typeof bbcsCircuitBreaker !== 'undefined' && bbcsCircuitBreaker.isOpen()) {
1869            bbcsCircuitBreaker.showFallback();
1870            return;
1871        }
1872    }
1873    if (!ajaxEndpoint) ajaxEndpoint = bbcsJsData.ajaxUrl;
1874    if (bbcsJsData.ddosResilience) {
1875        if (bbcsDdosRetryCount === 0) {
1876            bbcsCheckUI.showVerifying();
1877        }
1878    } else {
1879        document.getElementById("content").innerHTML = bbcsJsData.loadingText;
1880    }
1881
1882    var formData = new FormData();
1883    formData.append('action', 'bbcs_botblocker_check');
1884    formData.append('nonce', bbcsJsData.nonce);
1885    formData.append(bbcsJsData.selectRequestMode, s);
1886    formData.append('xxx', x);
1887    formData.append('rowid', bbcsJsData.ruleRecordId);
1888    formData.append('from_suspect', bbcsJsData.suspectStatus);
1889    formData.append('suspect_reason', bbcsJsData.reasonForAction);
1890    formData.append('check_result', bbcsJsData.resultOfAction);
1891
1892    if (typeof bbcsCaptchaData !== 'undefined' && bbcsCaptchaData.challengeToken) {
1893        formData.append('challenge_token', bbcsCaptchaData.challengeToken);
1894    }
1895
1896    var additionalParams = new URLSearchParams(d);
1897    for (var pair of additionalParams.entries()) {
1898        formData.append(pair[0], pair[1]);
1899    }
1900
1901    if (window.__bbcs_hp_present) {
1902        formData.append('bbcs_hp_time', String(Date.now() - window.__bbcs_hp_t));
1903    }
1904
1905    var xhr = new XMLHttpRequest();
1906    xhr.open('POST', ajaxEndpoint, true);
1907    xhr.timeout = bbcsDdosRetryCount > 0 ? 10000 : 5000;
1908
1909    xhr.onload = function() {
1910        if (xhr.status == 200) {
1911            bbcsDebugLog('Plugin status: ' + xhr.status);
1912            try {
1913                var responseText = xhr.responseText.trim();
1914                bbcsDebugLog('Response text:', responseText);
1915
1916                if (responseText) {
1917                    var obj = JSON.parse(responseText);
1918
1919                    var bbcsSigValid = true;
1920                    if (bbcsJsData.ddosResilience) {
1921                        if (typeof obj.bbcs_sig !== 'string') {
1922                            bbcsSigValid = false;
1923                        } else {
1924                            delete obj.bbcs_sig;
1925                        }
1926                    }
1927
1928                    if (bbcsJsData.ddosResilience && bbcsSigValid && typeof obj.cookie !== 'string') {
1929                        var backupCookie = xhr.getResponseHeader('X-BBCS-' + bbcsJsData.uid);
1930                        if (backupCookie) {
1931                            obj.cookie = backupCookie;
1932                        }
1933                    }
1934
1935                    // ddos mode: a cookie is only trusted from a signed response
1936                    if (typeof(obj.cookie) == "string" && (!bbcsJsData.ddosResilience || bbcsSigValid)) {
1937                        bbcsDebugLog('Cookie received, value=' + obj.cookie.substring(0,20) + '... uid=' + bbcsJsData.uid + ' redirectUrl=' + bbcsJsData.redirectUrl);
1938                        if (bbcsJsData.ddosResilience) {
1939                            bbcsCheckUI.showSuccess();
1940                            if (typeof bbcsCircuitBreaker !== 'undefined') {
1941                                bbcsCircuitBreaker.recordSuccess();
1942                            }
1943                        }
1944                        var expiryDate = new Date();
1945                        expiryDate.setTime(expiryDate.getTime() + ((bbcsJsData.cookieLifetime || 604800) * 1000));
1946                        var expires = "expires=" + expiryDate.toUTCString();
1947                        var bbcsSS = bbcsJsData.samesite;
1948                        if (bbcsSS === 'None' && window.location.protocol !== 'https:') { bbcsSS = 'Lax'; }
1949                        var cookieStr = bbcsJsData.uid + "=" + obj.cookie + "-" + bbcsJsData.time + "; SameSite=" + bbcsSS + ";" +
1950                            (bbcsSS === 'None' ? ' Secure' : '') + "; " + expires + "; path=/;";
1951                        bbcsDebugLog('Setting cookie: name=' + bbcsJsData.uid + ' value_len=' + (obj.cookie + "-" + bbcsJsData.time).length);
1952                        document.cookie = cookieStr;
1953                        var verifyCookie = document.cookie;
1954                        bbcsDebugLog('document.cookie after set (first 80 chars): ' + (verifyCookie ? verifyCookie.substring(0,80) : 'EMPTY') + ' hasUidCookie=' + (verifyCookie && verifyCookie.indexOf(bbcsJsData.uid) !== -1));
1955                        try { sessionStorage.removeItem('bbcsRedirectCount'); } catch(e) {}
1956                        if (bbcsJsData.silentMode) {
1957                            try { sessionStorage.removeItem('bbcsMode8Retries'); } catch(e) {}
1958                            document.getElementById("content").innerHTML = bbcsJsData.approvedText;
1959                            setTimeout(function() { window.location.href = bbcsJsData.redirectUrl; }, 0);
1960                        } else {
1961                            document.getElementById("content").innerHTML = bbcsJsData.loadingText;
1962                            bbcsDebugLog('redirecting to ' + bbcsJsData.redirectUrl);
1963                            window.location.href = bbcsJsData.redirectUrl;
1964                        }
1965                    } else if (!bbcsSigValid) {
1966                        bbcsDebugLog('No cookie AND invalid sig. cookie=' + (typeof obj.cookie) + ' sigValid=' 
1966+ bbcsSigValid + ' ddos=' + bbcsJsData.ddosResilience);
1967                        if (typeof bbcsCircuitBreaker !== 'undefined') {
1968                            bbcsCircuitBreaker.recordFailure();
1969                        }
1970                        if (bbcsJsData.ddosResilience) {
1971                            bbcsCheckUI.showCAPTCHA();
1972                        }
1973                        botblocker_captcha_render();
1974                        bbcsDebugLog('Response signature missing or invalid; rejecting tampered response');
1975                    } else {
1976                        bbcsDebugLog('No cookie, sig valid. cookie=' + (typeof obj.cookie) + ' keys=' + Object.keys(obj).join(','));
1977                        if (bbcsJsData.ddosResilience) {
1978                            bbcsCheckUI.showCAPTCHA();
1979                        }
1980                        botblocker_captcha_render();
1981                        bbcsDebugLog('Bad bot detected');
1982                    }
1983
1984                    if (typeof(obj.error) == "string") {
1985                        if (bbcsJsData.jsAdminEnabled) {
1986                            if (obj.error == "BotBlocker Account Not Found"
1987                                || obj.error == "This domain doesn't have a valid license"
1988                                || obj.error == "Subscription Expired"
1989                                || obj.error == "This domain is not registered or is not active"
1990                                || obj.error == bbcsJsData.jsErrorMessage) {
1991                                const ErrorMsg = document.createElement('div');
1992                                const errH1 = document.createElement('h1');
1993                                errH1.style.textAlign = 'center';
1994                                errH1.style.color = 'red';
1995                                errH1.textContent = obj.error;
1996                                ErrorMsg.appendChild(errH1);
1997                                document.body.insertAdjacentElement('afterbegin', ErrorMsg);
1998                                document.getElementById("content").style.visibility = "hidden";
1999                                document.getElementById("content").innerHTML = '';
2000                            } else if (obj.error == "Cookies disabled") {
2001                                document.getElementById("content").innerHTML =
2002                                "<h2 style=\"text-align:center; color:red;\">" + bbcsJsData.cookieDisabledText + "</h2>";
2003                            }
2004                        }
2005                        if (obj.error == "timeout" || obj.error == "Wrong Click") {
2006                            if (bbcsJsData.silentMode) {
2007                                var r = 0;
2008                                try { r = parseInt(sessionStorage.getItem('bbcsMode8Retries') || '0', 10); } catch(e) {}
2009                                if (r < 2) {
2010                                    try { sessionStorage.setItem('bbcsMode8Retries', String(r + 1)); } catch(e) {}
2011                                    window.location.reload();
2012                                    return;
2013                                }
2014                            }
2015                            document.getElementById("content").innerHTML = bbcsJsData.loadingText;
2016                            window.location.href = bbcsJsData.redirectUrl;
2017                        }
2018                    }
2019                } else {
2020                    bbcsDebugWarn('Empty or invalid response from server.');
2021                    if (ajaxEndpoint !== bbcsJsData.verifyUrl && bbcsJsData.verifyUrl) {
2022                        bbcsDebugLog('admin-ajax.php returned empty response, trying verify endpoint');
2023                        window[bbcsJsData.checkFunctionName](s, d, x, bbcsJsData.verifyUrl);
2024                        return;
2025                    }
2026                    if (bbcsJsData.ddosResilience) {
2027                        if (typeof bbcsCircuitBreaker !== 'undefined') {
2028                            bbcsCircuitBreaker.recordFailure();
2029                        }
2030                        bbcsCheckUI.showCAPTCHA();
2031                    }
2032                    botblocker_captcha_render();
2033                }
2034            } catch (e) {
2035                bbcsDebugError('Error parsing JSON:', e);
2036                bbcsDebugLog('Response text received:', xhr.responseText);
2037                if (bbcs_isDdosResponse(xhr.responseText, xhr.status)) {
2038                    var checkFn = window[bbcsJsData.checkFunctionName];
2039                    if (bbcs_handleDdosResponse(xhr.responseText, s, d, x, checkFn)) return;
2040                }
2041                if (bbcsJsData.ddosResilience) {
2042                    if (typeof bbcsCircuitBreaker !== 'undefined') {
2043                        bbcsCircuitBreaker.recordFailure();
2044                    }
2045                    bbcsCheckUI.showCAPTCHA();
2046                }
2047                botblocker_captcha_render();
2048            }
2049
2050        } else {
2051            bbcsDebugLog('Error: ' + xhr.status);
2052            if (ajaxEndpoint !== bbcsJsData.verifyUrl && bbcsJsData.verifyUrl) {
2053                bbcsDebugLog('admin-ajax.php returned ' + xhr.status + ', trying verify endpoint');
2054                window[bbcsJsData.checkFunctionName](s, d, x, bbcsJsData.verifyUrl);
2055                return;
2056            }
2057            if (bbcs_isDdosResponse(xhr.responseText, xhr.status)) {
2058                var checkFn = window[bbcsJsData.checkFunctionName];
2059                if (bbcs_handleDdosResponse(xhr.responseText, s, d, x, checkFn)) return;
2060            }
2061            if (bbcsJsData.ddosResilience) {
2062                if (typeof bbcsCircuitBreaker !== 'undefined') {
2063                    bbcsCircuitBreaker.recordFailure();
2064                }
2065                bbcsCheckUI.showCAPTCHA();
2066            }
2067            botblocker_captcha_render();
2068        }
2069    };
2070
2071    xhr.ontimeout = function() {
2072        bbcsDebugLog('timeout');
2073        if (ajaxEndpoint !== bbcsJsData.verifyUrl && bbcsJsData.verifyUrl) {
2074            bbcsDebugLog('admin-ajax.php timeout, trying verify endpoint');
2075            window[bbcsJsData.checkFunctionName](s, d, x, bbcsJsData.verifyUrl);
2076            return;
2077        }
2078        if (bbcsDdosRetryCount > 0) {
2079            bbcsDebugLog('Timeout during DDoS retry, redirecting');
2080            window.location.href = bbcsJsData.redirectUrl;
2081            return;
2082        }
2083        if (bbcsJsData.ddosResilience) {
2084            if (typeof bbcsCircuitBreaker !== 'undefined') {
2085                bbcsCircuitBreaker.recordFailure();
2086            }
2087            bbcsCheckUI.showCAPTCHA();
2088        }
2089        botblocker_captcha_render();
2090    };
2091
2092    xhr.onerror = function() {
2093        bbcsDebugLog('error');
2094        if (ajaxEndpoint !== bbcsJsData.verifyUrl && bbcsJsData.verifyUrl) {
2095            bbcsDebugLog('admin-ajax.php error, trying verify endpoint');
2096            window[bbcsJsData.checkFunctionName](s, d, x, bbcsJsData.verifyUrl);
2097            return;
2098        }
2099        if (bbcsDdosRetryCount > 0) {
2100            bbcsDebugLog('Error during DDoS retry, redirecting');
2101            window.location.href = bbcsJsData.redirectUrl;
2102            return;
2103        }
2104        if (bbcsJsData.ddosResilience) {
2105            if (typeof bbcsCircuitBreaker !== 'undefined') {
2106                bbcsCircuitBreaker.recordFailure();
2107            }
2108            bbcsCheckUI.showCAPTCHA();
2109        }
2110        botblocker_captcha_render();
2111    };
2112
2113    xhr.send(formData);
2114};
2115</script>
2115
2116	</body>
2117</html>

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.