PageSourceSearch

https://transportspb.com/products?from=bot

html transportspb.com collected 2026-10-01 15:37:07 UTC 93,843 bytes, 2,217 lines download raw bytes

1<html>
2<head>
3    <meta http-equiv="Content-Type" content="text/html;  charset=utf-8" />
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <meta http-equiv="X-UA-Compatible" content="IE=8" />
7    <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate">
8    <meta http-equiv="Pragma" content="no-cache">
9    <meta http-equiv="Expires" content="0">
10    <title id="pageTitle">KillBot user verification [81.16.3.32] [Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PageSourceSearchBot/1.0; +https://pagesourcesearch.com/bot) Chrome/128.0.0.0 Safari/537.36]...</title>
11    
11<script>        
12        if (typeof window.kbErrors === 'undefined'){window.kbErrors=[];}
13        window.kbeOe=true;        
14        if (!document.title.toLowerCase().includes("user verification")) {
15            // window.kbeOe=false;            
16            // kbErrors.push({message: "KillBot verification failed [81.16.3.32]. Page title must contain the phrase 'user verification'",stack: "",name: "TITLE_VERIFICATION_ERROR"});
17            
18                const cookies = document.cookie.split(";").map(c => c.trim());
19                const hasKbReloaded = cookies.some(c => c.startsWith("kbReloaded="));
20
21                if (hasKbReloaded) {                    
22                    window.kbeOe = false;
23                    kbErrors.push({
24                        message: "Title verification failed [81.16.3.32]. Page title must contain the phrase 'user verification'",
25                        stack: "",
26                        name: "TITLE_VERIFICATION_ERROR"
27                    });
28                } else {                    
29                    const expires = new Date(Date.now() + 5 * 60 * 1000).toUTCString();
30                    document.cookie = "kbReloaded=1; path=/; expires=" + expires;
31                    location.reload();
32                }    
33        }else{
34            title_ru = "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F...";
35            title = "User verification...";
36            title_zh = "\u7528\u6237\u9A8C\u8BC1\u4E2D...";
37            if (navigator.language.substring(0,2).toLowerCase()=="ru"){    
38                title = title_ru;
39            }
40            if (navigator.language.substring(0,2).toLowerCase()=="zh"){
41                title = title_zh;
42            }
43            document.getElementById("pageTitle").textContent = title;        
44        }
45    </script>
45
46</head>
47<body>
48    <div class="menu-container" style="position: absolute;top: 19px; left: 2px;opacity: 0.02;z-index: 2147483647;pointer-events: auto;font-size: 14px;font-family: Arial, sans-serif;background-color: rgba(255, 255, 255, 0.05);"><noindex class="menu-wrapper"><a class="menu-item link-1" href="/shop?from=bot" style="color: rgb(230, 230, 230); margin: 0px 8px; text-decoration: none; display: inline-block; padding: 2px 4px; border-radius: 3px; transition: opacity 0.3s; opacity: 0.08;">shop</a><a class="menu-item link-2" href="/news?from=bot" style="color: rgb(230, 230, 230); margin: 0px 8px; text-decoration: none; display: inline-block; padding: 2px 4px; border-radius: 3px; transition: opacity 0.3s; opacity: 0.03;">news</a><a class="menu-item link-3" href="/search?from=bot" style="color: rgb(230, 230, 230); margin: 0px 8px; text-decoration: none; display: inline-block; padding: 2px 4px; border-radius: 3px; transition: opacity 0.3s; opacity: 0.04;">search</a><a class="menu-item link-4" href="/login?from=bot" style="color: rgb(230, 230, 230); margin: 0px 8px; text-decoration: none; display: inline-block; padding: 2px 4px; border-radius: 3px; transition: opacity 0.3s; opacity: 0.04;">login</a><a class="menu-item link-5" href="/blog?from=bot" style="color: rgb(230, 230, 230); margin: 0px 8px; text-decoration: none; display: inline-block; padding: 2px 4px; border-radius: 3px; transition: opacity 0.3s; opacity: 0.03;">blog</a><a class="menu-item link-6" href="/faq?from=bot" style="color: rgb(230, 230, 230); margin: 0px 8px; text-decoration: none; display: inline-block; padding: 2px 4px; border-radius: 3px; transition: opacity 0.3s; opacity: 0.07;">faq</a><a class="menu-item link-7" href="/contacts?from=bot" style="color: rgb(230, 230, 230); margin: 0px 8px; text-decoration: none; display: inline-block; padding: 2px 4px; border-radius: 3px; transition: opacity 0.3s; opacity: 0.03;">contacts</a></noindex></div>    <div class='WtPXrGjpDU'><div class='ZkgBlGlrJl ui'> <div class='FZUAUADHtw'></div> <div class='ZFZSIcvWZx'><div class='bcLfjAgtla'></div>  </div> </div> </div>    <div class='xZdWCBRScS'><div class='vmYncfbNhj ui'> <div class='uwPsPAKnlA'></div> <div class='QTtMttqUEe'><div class='sWRAAaoruu'></div>  </div> </div> </div>    <div class='HdjELJbfaj'><div class='zcMzGRZuPg ui'> <div class='SYKOohsjAo'></div> <div class='xooTFtbGGP'><div class='VyARLtwGvH'></div>  </div> </div> </div>    <div class='PNHHUQHNra'><div class='EsAVnhVOlw ui'> <div class='QcnRcozMSS'></div> <div class='YCZprSLAQb'><div class='COUegwxFuJ'></div>  </div> </div> </div> 
49    <div class='TZrWwuMWum'><div class='KmtdWjzgkl ui'> <div class='VneFbziIqG'></div> <div class='CewabvVLaO'><div class='TZbxqfENZF'></div>  </div> </div> </div> 
50    <div class='ZGQtcewgao'><div class='YEZsnpstPu ui'> <div class='tshnIyoggT'></div> <div class='pJfpMHPwNY'><div class='cBgrwiFzbT'></div>  </div> </div> </div>    <div class='GCNkOelxoQ'><div class='BenkAERYcH ui'> <div class='ozyVcYDGpz'></div> <div class='LifRLJiCMJ'><div class='oOsTQaqwcS'></div>  </div> </div> </div>    
50<script>
51    window.kbDpVM=["WtPXrGjpDU","xZdWCBRScS","HdjELJbfaj","PNHHUQHNra","TZrWwuMWum","ZGQtcewgao","GCNkOelxoQ"];
52        
53
54    
55window.onerror = function(message, source, lineno, colno, error) {
56    kbErrors.push({
57        type: 'window.onerror',
58        message: message ? message.toString() : '(unknown error)',
59        source: source || '(inline)',
60        line: lineno || 0,
61        column: colno || 0,
62        stack: error && error.stack ? error.stack.toString() : null,
63        time: Date.now()
64    });
65    return false;
66};
67
68var kbIsOnUnhandledRejection = false;
69var kbOrigConsoleError = null;
70var kbOrigConsoleWarn = null;
71var kbDisplayKbErrorsTimer = null;
72var kbDmpyTimer = null;
73var kbDataReceivedTimeout = null;
74
75function kbOnUnhandledRejection(event) {
76    if (kbIsOnUnhandledRejection == true) return;
77    kbIsOnUnhandledRejection = true;
78    kbErrors.push({
79        type: 'unhandledrejection',
80        message: event.reason
81            ? (event.reason.message || event.reason.toString())
82            : '(undefined)',
83        stack: event.reason && event.reason.stack
84            ? event.reason.stack.toString()
85            : null,
86        time: Date.now()
87    });
88}
89
90window.addEventListener('unhandledrejection', kbOnUnhandledRejection);
91
92(function(origError) {
93    kbOrigConsoleError = origError;
94    console.error = function(...args) {
95        try {
96            kbErrors.push({
97                type: 'console.error',
98                message: args.map(a => (a && a.toString) ? a.toString() : String(a)).join(' '),
99                time: Date.now()
100            });
101        } catch(e) {}
102        origError.apply(console, args);
103    };
104})(console.error);
105
106(function(origWarn) {
107    kbOrigConsoleWarn = origWarn;
108    console.warn = function(...args) {
109        try {
110            kbErrors.push({
111                type: 'console.warn',
112                message: args.map(a => (a && a.toString) ? a.toString() : String(a)).join(' '),
113                time: Date.now()
114            });
115        } catch(e) {}
116        origWarn.apply(console, args);
117    };
118})(console.warn);
119
120function kbGyOS()
121{
122    ua_ip = "";
123    if (typeof kbRes !== "undefined") {
124        kbRes.kbIP = kbIP;
125        ua_ip += "<div style='font-size: 10px; word-break: break-all;'>kbRes=" + JSON.stringify(kbRes) + "</div>";
126    }            
127    if (typeof kbErrors !== "undefined") {                
128            let errorData = JSON.stringify(kbErrors);    
129            if (errorData.length > 2048) {
130                errorData = errorData.substring(0, 2048);                
131            }
132        ua_ip += "<div style='font-size: 10px; word-break: break-all;'>kbErrors=" + errorData + "</div>";
133    }
134
135    ua_ip += "<div style='font-size: 10px; word-break: break-all;'>UserAgent=" + navigator.userAgent + "</div>";
136
137    text_error_ru = "\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0430\u0439\u0442\u0443 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435, \u0438\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u0435 VPN, \u0435\u0441\u043b\u0438 \u043e\u043d \u0443\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u043e, \u0442\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440.";
138    text_error = "To access the site, enable or disable VPN if it is already enabled. If that doesn’t help, try using another browser.";
139    text_error_zh = "\u8981\u8bbf\u95ee\u7f51\u7ad9\uff0c\u8bf7\u5f00\u542f\u6216\u5173\u95ed VPN\uff08\u5982\u679c\u5df2\u5f00\u542f\uff09\u3002\u5982\u679c\u4ecd\u7136\u65e0\u6cd5\u8bbf\u95ee\uff0c\u8bf7\u5c1d\u8bd5\u4f7f\u7528\u5176\u4ed6\u6d4f\u89c8\u5668\u3002";
140
141    if (kbIP != "" && (typeof kbRes !== "undefined") && (kbRes.ip !== "undefined") && kbRes.ip && (kbRes.ip != kbIP)) {
142        text_error_ru = "\u0414\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0412\u041f\u041d \u0438\u043b\u0438 \u0441\u043c\u0435\u043d\u0438\u0442\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430. \u0412\u0430\u0448 IP \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d";
143        text_error = "To access this site, use a VPN or switch your internet provider. Your IP keeps changing, so we’ve blocked access.";
144        text_error_zh = "\u8981\u8bbf\u95ee\u672c\u7f51\u7ad9\u8bf7\u4f7f\u7528 VPN \u6216\u66f4\u6362\u4f60\u7684\u7f51\u7edc\u670d\u52a1\u5546\u3002\u4f60\u7684 IP \u5730\u5740\u4e0d\u65ad\u53d8\u5316\uff0c\u56e0\u6b64\u5df2\u88ab\u5c4f\u853d";
145    }
146
147    if (kbRes.UserID == 0) {
148        text_error_ru = "\u041d\u0415\u0422 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0438 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 KillBot. \u042d\u0442\u043e \u0438\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 Firewall \u0438\u043b\u0438 \u0420\u041a\u041d. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c VPN \u0438\u043b\u0438 \u0437\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0441 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0441\u0430\u0439\u0442 <a href='"+window.kbServerURL+"/test.html' target='_blank'>"+window.kbServerURL+"/test.html</a> \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d: \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u0441\u043a\u0440\u0438\u043d \u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 killbot.ru.";
149        text_error = "NO access to any of the KillBot servers. This is either a Firewall or ISP/RKN block. Try enabling VPN or open the site in another browser. Check that <a href='"+window.kbServerURL+"/test.html' target='_blank'>"+window.kbServerURL+"/test.html</a> is NOT accessible: if it is accessible, send a screenshot to killbot.ru support.";
150        text_error_zh = "\u65e0\u6cd5\u8bbf\u95ee\u4efb\u4f55KillBot\u670d\u52a1\u5668\u3002\u8fd9\u53ef\u80fd\u662fFirewall\u6216\u8fd0\u8425\u5546/RKN\u963b\u6b62\u3002\u8bf7\u5c1d\u8bd5\u542f\u7528VPN\u6216\u4f7f\u7528\u5176\u4ed6\u6d4f\u89c8\u5668\u8bbf\u95ee\u7f51\u7ad9\u3002\u8bf7\u786e\u8ba4 <a href='"+window.kbServerURL+"/test.html' target='_blank'>"+window.kbServerURL+"/test.html</a> \u65e0\u6cd5\u8bbf\u95ee\uff1a\u5982\u679c\u53ef\u4ee5\u8bbf\u95ee\uff0c\u8bf7\u5c06\u622a\u56fe\u53d1\u9001\u81f3 killbot.ru \u652f\u6301\u3002";
151    }
152
153    if (!document.cookie) {
154        text_error_ru = "\u0414\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 cookies";
155        text_error = "To access the website, enable cookies";
156        text_error_zh = "\u8981\u8bbf\u95ee\u7f51\u7ad9\u8bf7\u5f00\u542f cookies";
157    }
158
159    text_button = "Try again";
160    text_title = "Verification error";
161    text_button_ru = "\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u0440\u0430\u0437";
162    text_title_ru = "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438";
163    text_button_zh = "\u518d\u6b21\u5c1d\u8bd5";
164    text_title_zh = "\u9a8c\u8bc1\u9519\u8bef";
165
166    if (kbLang == "ru") {
167        text_button = text_button_ru;
168        text_title = text_title_ru;
169        text_error = text_error_ru;
170    }
171    if (kbLang == "zh") {
172        text_button = text_button_zh;
173        text_title = text_title_zh;
174        text_error = text_error_zh;
175    }
176
177    html = '<html lang="' + kbLang + '"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>' + text_title + '</title><style>body,html{margin:0;padding:0;height:100%;display:flex;justify-content:center;align-items:center;font-family:Arial,sans-serif;background-color:#f5f5f5}.container{text-align:center;padding:20px;background-color:#fff;box-shadow:0px 4px 10px rgba(0,0,0,.1);border-radius:10px;max-width:400px;width:90%}.container p{font-size:18px;color:#333;margin-bottom:20px}.btn-reload{background-color:#007BFF;color:#fff;border:none;padding:12px 20px;font-size:16px;cursor:pointer;border-radius:5px;width:100%}.btn-reload:hover{background-color:#0056b3}.kb-privacy{margin-top:14px;font-size:12px;line-height:1.3}.kb-privacy a{color:#6b7280;text-decoration:none}.kb-privacy a:hover{text-decoration:underline}@media (max-width:768px){.container p{font-size:16px}.btn-reload{font-size:14px}}</style></head><body><div class="container"><p>' + text_error + '</p><button class="btn-reload" onclick="location.reload()">' + text_button + '</button><div class="kb-privacy"><a href="' + kbGetDataPrivacyUrl() + '" target="_blank" rel="noopener noreferrer">' + kbGetDataPrivacyText() + '</a></div>' + ua_ip + '</div></body></html>';
178
179    return html;
180}
181
182function kbDisplayKbErrors() {
183    if (window.kbVerificationTeardownDone) return;
184    if (typeof kbErrors === 'undefined') {
185        return;
186    }
187    const errorContainer = document.querySelector('.kb-spinner-error');    
188    if (!errorContainer) return;
189        
190    if (kbErrors.length > 0) {        
191        kbErrors.forEach((error, index) => {
192            errorContainer.innerHTML += error.name +"|"+error.message+"|"+error.stack;       
193        });
194        kbErrors=[];
195    } 
196}
197kbDisplayKbErrorsTimer = setInterval(kbDisplayKbErrors, 10000);
198
199var kbID="ogRSmG5"; //for DNS only
200var kbID2="45807"; 
201var kbVER="1.2";
202var kbKey="";
203var kbieBe="1";
204var kbGopu="";
205var kbjYwp="";
206var kbjYwpInitAllow="1";
207var kbVGbuf=0;
208var kbqjUt=5000;
209var kbNewj="1";
210var kbKkJcv="1";
211var kbjjLt="0";  
212var kbNGoB="kbCheck";
213var kbNxG=false;
214var kbjYwpInit=false;
215var kbPjXMD="";
216var kbbjl=[];
217if (typeof kbServerURL === 'undefined') {
218var kbServerURL="";
219}
220if (typeof kbErrors === 'undefined') {
221var kbErrors=[];
222}
223if (typeof kbhTv === 'undefined') {
224var kbhTv=Date.now();
225}
226if (typeof kbGwW === 'undefined') {
227var kbGwW=null;
228}
229var kbErrorsLog=0;
230var kbServerURLReserved="";
231var kbliG="";
232var kbDZDx="";
233var kbFuFqy="";
234var kbDNS=true;     
235var kbWJVz=false;
236var kbWkHfH=false;
237var kbcSPYX=false;
238var kbwwr=false;
239var kbhRU="";
240var kbLang = navigator.language.substring(0, 2).toLowerCase();
241var kbIP = "81.16.3.32";
242var kbUmuP = "s680c29b1.fastvps-server.com";
243var kbRes = null;
244
245function kbGetDataPrivacyUrl() {
246    return (kbLang == "ru") ? "https://killbot.ru/data_privacy" : "https://my.kill-bot.net/data_privacy";
247}
248
249function kbGetDataPrivacyText() {
250    const t_ru = "KillBot \u00b7 \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445";
251    const t_en = "KillBot · Technical Data Processing Policy";
252    const t_zh = "KillBot \u00b7 \u6280\u672f\u6570\u636e\u5904\u7406\u653f\u7b56";
253    if (kbLang == "ru") return t_ru;
254    if (kbLang == "zh") return t_zh;
255    return t_en;
256}
257
258function kbBeforeFinish(isBot,kbRes=null){
259    if (isBot===true){
260       //Plase your JS in bot case
261    }else if (isBot===false){
262       //Plase your JS in user case
263    }
264    if (kbRes!==null){
265        //kbRes - data was recived from KillBot
266        //Called ones per 24 hours
267    }
268}
269
270function kbNbCuO(servers) {
271  const controllers = [];
272
273  return new Promise(resolve => {
274    let resolved = false;
275    const fallbackUrl = "https://data.killbot.ru";
276    let pending = (servers && servers.length) ? servers.length : 0;
277
278    if (!pending) {
279      resolve(fallbackUrl);
280      return;
281    }
282
283    servers.forEach(url => {
284      const ctrl = new AbortController();
285      controllers.push(ctrl);
286
287      const t = setTimeout(() => ctrl.abort(), 6000);
288
289      fetch(url + "/ping", {
290        cache: "no-store",
291        mode: "cors",
292        signal: ctrl.signal
293      })
294        .then(r => {
295          if (!resolved && r.status === 200) {
296            resolved = true;
297            resolve(url);
298            controllers.forEach(c => c.abort());
299          }
300        })
301        .catch(() => {})
302        .finally(() => {
303          clearTimeout(t);
304          pending--;
305          if (!resolved && pending <= 0) {
306            resolved = true;
307            resolve(fallbackUrl);
308          }
309        });
310    });
311
312    // fallback
313    setTimeout(() => {
314      if (!resolved) resolve(fallbackUrl);
315    }, 6050);
316  });
317}
318
319function kblbOj() {
320    return Math.random() < 0.5;
321    //return (new Date().getSeconds() % 2) === 0;
322}
323
324function kbdaVW(ServerURL) {
325    if (kbDZDx){
326        return ServerURL + kbDZDx;
327    }
328    if (kbliG){
329        return kbliG;
330    }
331    kbFuFqy = ServerURL + "/r/enter_en.png";
332    if (kbLang == "ru") kbFuFqy = ServerURL + "/r/enter_ru.png";
333    if (kbLang == "zh") kbFuFqy = ServerURL + "/r/enter_zh.png";
334    return kbFuFqy;
335}
336
337function kbGetVerificationText(type) {
338    
339    const check_text_ru = "\u041F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F...";
340    const check_text_en = "User Verification...";
341    const check_text_zh = "\u7528\u6237\u9A8C\u8BC1..."; 
342
343    const loading_text_ru = "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0441\u0430\u0439\u0442\u0430...";
344    const loading_text_en = "Loading website...";
345    const loading_text_zh = "\u7F51\u7AD9\u52A0\u8F7D\u4E2D...";     
346    
347    const error_text_ru = "KillBot \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u0430\u043B \u0448\u0442\u0430\u0442\u043D\u043E, \u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0430\u0439\u0442\u0430 \u0432\u0435\u0440\u043D\u0443\u043B \u043E\u0448\u0438\u0431\u043A\u0443, \u0442.\u0435. \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0441\u0430\u0439\u0442\u0430. \u041A\u0430\u043A \u0434\u0438\u0430\u0433\u043D\u043E\u0441\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u043E \u0442\u0443\u0442: https://killbot.ru/node/62";    
348    const error_text_en = "KillBot worked normally, but the site server returned an error, i.e. the problem is on the site server. How to diagnose is written here: https://killbot.ru/node/62";    
349    const error_text_zh = "KillBot \u6B63\u5E38\u5DE5\u4F5C\uFF0C\u4F46\u7F51\u7AD9\u670D\u52A1\u5668\u8FD4\u56DE\u4E86\u9519\u8BEF\uFF0C\u5373\u95EE\u9898\u51FA\u5728\u7F51\u7AD9\u670D\u52A1\u5668\u3002\u5982\u4F55\u8BCA\u65AD\u5199\u5728\u8FD9\u91CC\uFF1Ahttps://killbot.ru/node/62";
350    
351    const website_long_time_text_ru = "KillBot \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u0430\u043B \u0448\u0442\u0430\u0442\u043D\u043E, \u043D\u043E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0441\u0430\u0439\u0442\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044F \u0434\u043E\u043B\u0433\u043E. \u041F\u0440\u043E\u0431\u043B\u0435\u043C\u0430 \u043D\u0435 \u0432 KillBot, \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u0435\u0435 \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u043E \u0442\u0443\u0442: https://killbot.ru/node/62";
352    const website_long_time_text_en = "KillBot worked normally, but the site page loads slowly. The problem is not in KillBot, more details are written here: https://killbot.ru/node/62";
353    const website_long_time_text_zh = "KillBot \u6B63\u5E38\u5DE5\u4F5C\uFF0C\u4F46\u7F51\u7AD9\u9875\u9762\u52A0\u8F7D\u7F13\u6162\u3002\u95EE\u9898\u4E0D\u5728 KillBot\uFF0C\u8BE6\u7EC6\u4FE1\u606F\u5199\u5728\u8FD9\u91CC\uFF1Ahttps://killbot.ru/node/62";
354
355    const killbot_long_time_ru = "KillBot \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0431\u043E\u043B\u044C\u0448\u0435 \u0432\u0440\u0435\u043C\u0435\u043D\u0438... \u0412 \u0431\u043E\u043B\u044C\u0448\u0438\u043D\u0441\u0442\u0432\u0435 \u0441\u043B\u0443\u0447\u0430\u0435\u0432 \u0448\u0442\u0430\u0442\u043D\u043E\u0435 \u0432\u0440\u0435\u043C\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u043D\u0435 \u043F\u0440\u0435\u0432\u044B\u0448\u0430\u0435\u0442 2-\u0445 \u0441\u0435\u043A\u0443\u043D\u0434, \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435...";
356    const killbot_long_time_en = "KillBot requires more time... In most cases, the standard operating time does not exceed 2 seconds, please wait...";
357    const killbot_long_time_zh = "KillBot \u9700\u8981\u66F4\u591A\u65F6\u95F4... \u5728\u5927\u591A\u6570\u60C5\u51B5\u4E0B\uFF0C\u6807\u51C6\u8FD0\u884C\u65F6\u95F4\u4E0D\u8D85\u8FC72\u79D2\uFF0C\u8BF7\u7A0D\u5019...";
358
359    const capt_straight_text_ru = "\u0421\u0434\u0432\u0438\u043d\u044c\u0442\u0435 \u0444\u0438\u0433\u0443\u0440\u0443 \u0432\u043f\u0440\u0430\u0432\u043e,\\A\u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0440\u043e\u0431\u043e\u0442.";
360    const capt_straight_text_en = "Move the shape to the right,\\Aif you are not a robot.";
361    const capt_straight_text_zh = "\u8bf7\u5c06\u56fe\u5f62\u5411\u53f3\u79fb\u52a8,\\A\u5982\u679c\u60a8\u4e0d\u662f\u673a\u5668\u4eba\u3002";
362
363    const capt_curve_text_ru = "\u0421\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u0442\u0435 \u043A\u0440\u0443\u0433\u0438 \u043F\u043E \u043F\u0443\u043D\u043A\u0442\u0438\u0440\u043D\u043E\u0439 \u043B\u0438\u043D\u0438\u0438,\\A\u0435\u0441\u043B\u0438 \u0432\u044B \u043D\u0435 \u0440\u043E\u0431\u043E\u0442.";
364    const capt_curve_text_en = "Align the circles along the dashed line,\\Ato prove you are not a robot.";
365    const capt_curve_text_zh = "\u8BF7\u5C06\u5706\u5BF9\u9F50\u5230\u865A\u7EBF\u4E0A\uFF0C\\A\u4EE5\u8BC1\u660E\u60A8\u4E0D\u662F\u673A\u5668\u4EBA\u3002";
366
367    if (type=="capt" || type=="capt_straight"){
368        if (kbLang == "ru") return capt_straight_text_ru;
369        if (kbLang == "zh")  return capt_straight_text_zh;
370        return capt_straight_text_en;
371    }
372
373    if (type=="capt_curve"){
374        if (kbLang == "ru") return capt_curve_text_ru;
375        if (kbLang == "zh")  return capt_curve_text_zh;
376        return capt_curve_text_en;
377    }
378    
379    if (type=="check"){
380        if (kbLang == "ru") return check_text_ru;
381        if (kbLang == "zh")  return check_text_zh;
382        return check_text_en;
383    }
384    if (type=="load"){
385        if (kbLang == "ru") return loading_text_ru;
386        if (kbLang == "zh")  return loading_text_zh;
387        return loading_text_en;
388    };
389    if (type=="error"){
390        if (kbLang == "ru") return error_text_ru;
391        if (kbLang == "zh")  return error_text_zh;
392        return error_text_en;
393    }
394    if (type=="long_time_website"){
395        if (kbLang == "ru") return website_long_time_text_ru;
396        if (kbLang == "zh")  return website_long_time_text_zh;
397        return website_long_time_text_en;
398    }
399    if (type=="long_time_killbot"){
400        if (kbLang == "ru") return killbot_long_time_ru;
401        if (kbLang == "zh")  return killbot_long_time_zh;
402        return killbot_long_time_en;
403    }
404    
405    return "";
406}
407
408function kbgJDIl(currentServer) {
409
410    kbDNSTry++;
411    
412    const currentIndex = kbbjl.indexOf(currentServer);
413
414    if (currentIndex === -1) {
415        kbFuFqy = kbdaVW(kbbjl[0]);
416        return kbbjl[0];
417    }
418
419    const nextIndex = currentIndex + 1;
420    if (nextIndex < kbbjl.length) {
421        kbFuFqy = kbdaVW(kbbjl[nextIndex]);
422        return kbbjl[nextIndex];
423    }
424
425    kbFuFqy = kbdaVW(kbbjl[0]);
426    return kbbjl[0];
427}
428
429if (kbhRU == "") {
430    kbhRU = "https://sci-hub.ru/favicon.ico?r=" + Math.random();
431    if (kbLang == "ru") kbhRU = "https://www.instagram.com/favicon.ico?r=" + Math.random();
432    if (kbLang == "zh") kbhRU = "https://sci-hub.ru/favicon.ico?r=" + Math.random();
433}
434
435if (kbDNS == true) {
436    kbKey = "dns";
437    kbjYwp = "";
438    kbjYwpInitAllow = true;
439    kbieBe = true;
440}
441
442var kbVyg = false;
443var kbSpinnerTextElement = null;
444
445function kbsdE() {
446    try {
447        kbHhSR(kbRes, true);
448    } catch (error) {
449        kbErrors.push({message: error.message, stack: error.stack, name: error.name});
450        kbSendErrors();
451        kbulH();
452    }
453}
454
455function kbulH() {
456    try {
457        if (kbieBe == true && kbDNS == false) {
458            kbShowSpinner("load");
459            location.reload();
460            return;
461        }
462        var target = (kbRes && kbRes.url && kbRes.url !== "undefined") ? kbRes.url : location.href;
463        kbVaY(target);
464    } catch (error) {
465        kbErrors.push({message: error.message, stack: error.stack, name: error.name});
466        kbSendErrors();
467        location.reload();
468    }
469}
470
471function kbGetSpinnerStyles() {
472    return "body { margin: 0; padding: 0; font-family: Arial, sans-serif; overflow: hidden; } .kb-spinner-error{font-size:10px;color:#ccc} .kb-privacy{position:fixed;left:0;right:0;bottom:14px;text-align:center;font-size:12px;line-height:1.3;z-index:1001;padding:0 10px} .kb-privacy a{color:#6b7280;text-decoration:none} .kb-privacy a:hover{text-decoration:underline} div#button-cap:hover,input#button-cap:hover{border-color: #ddd; } div#button-cap,input#button-cap{ background-size: contain; background-image: url('" + kbFuFqy + "'); background-repeat: no-repeat; color: #ffffff; font-size: 18px; font-family: 'FuturaPT',Arial,sans-serif; line-height: 1.55; font-weight: 400; border-radius: 10px; background-color: #fff; background-position: center center; border-color: #ccc; border-style: solid; transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out, border-color 0.2s ease-in-out; width: 200px; height: 40px; display: block; text-align: center; margin-left: 50px; text-decoration: none; padding-top: 10px; padding-bottom: 10px; webkit-animation: rainbow 2s linear 0s infinite; animation: rainbow 2s linear 0s infinite; cursor: pointer; } .hidden { opacity: 0; visibility: hidden; transition: all .2s linear; } #preloader-w {transition: opacity 1s ease, visibility 1s ease; position: fixed; top: 0; left: -3%; width: 100%; height: 100%; background: #fff; display: flex; justify-content: center; align-items: center; z-index: 1000; } .kb-spinner-container { position: relative; width: 120px; height: 120px; } .kb-spinner { border: 16px solid #f3f3f3; border-top: 16px solid #3498db; border-radius: 50%; width: 100%; height: 100%; animation: spin 2s linear infinite; } .spinner-text-timer-wrapper { position: absolute; top: 15%; left: 15%; width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; } .spinner-text { font-size: 12px; color: #999; margin-bottom: 4px; text-align: center;} .spinner-timer { font-size: 10px; color: #777; text-align: center;} .spinner-text.free-text{display:inline-block;margin-top:6px;font-size:11px;font-weight:500;line-height:1.3;color:rgb(42,94,246);opacity:0.65;animation:kb_free_p 1.8s ease-in-out infinite;} @keyframes kb_free_p{0%,100%{opacity:0.65;}50%{opacity:0.40;}} @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } ." + window.kbScreen + " { display: none; }"
473        + " .draggable-wrapper{text-align:center;position:relative}.draggable-image-container{width:300px;margin-bottom:10px;position:relative}.draggable-image{width:100%}.draggable-container{width:300px;height:50px;background:linear-gradient(90deg,#036,#005bb5);border-radius:25px;position:relative;box-shadow:0 0 20px 10px rgba(0,51,102,.2);overflow:hidden}.draggable-container::before{content:'>>>';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:36px;color:rgba(255,255,255,.3)}.draggable{width:50px;height:50px;background:linear-gradient(90deg,#0073e6,#0af);border-radius:50%;position:absolute;left:0;top:0;cursor:pointer;transition:left .3s,box-shadow .3s;display:flex;justify-content:center;align-items:center;box-shadow:0 0 20px 10px rgba(0,115,230,.5)}.draggable:hover{box-shadow:0 0 25px 15px rgba(0,115,230,.6)}";
474}
475
476function kbGetSpinnerMarkup() {
477
478    let free_text = "";
479    if ((kbhVWX("kbAct") == "false") || (kbhVWX("kbAct") === "0") || (kbRes && (kbRes !== "undefined") && ((kbRes.act == false)||(kbRes.act == 0) ))){
480        free_text = "<div class='spinner-text free-text'>KillBot Free</div>";
481    }
482
483    return "<div id='preloader-w'><div class='kb-spinner-container' id='kb-spinner-container'><div class='kb-spinner' id='kb-spinner'></div><div class='spinner-text-timer-wrapper'><div class='spinner-text'></div><div class='spinner-timer'>0.000s</div>"+free_text+"</div><div class='kb-spinner-error'></div></div><div class='kb-privacy'><a href='" + kbGetDataPrivacyUrl() + "' target='_blank' rel='noopener noreferrer'>" + kbGetDataPrivacyText() + "</a></div><div id='kb-recaptcha'></div></div>";
484}
485
486function kbEnsureSpinnerStyles() {
487    if (!window.kbSt) {
488        window.kbSt = kbkBW(10);
489    }
490    if (!document.getElementById(window.kbSt)) {
491        var kb_style = document.createElement('style');
492        kb_style.type = 'text/css';
493        kb_style.id = window.kbSt;
494        kb_style.innerHTML = kbGetSpinnerStyles();
495        document.head.appendChild(kb_style);
496    }
497}
498
499function kbShowSpinner(textType) {
500    if (kbNxG == true) return;
501
502    if (!window.kbScreen) {
503        window.kbScreen = kbkBW(10);
504    }
505    kbEnsureSpinnerStyles();
506
507    if (kbGwW) {
508        clearInterval(kbGwW);
509        kbGwW = null;
510    }
511
512    var preloader = document.getElementById('kb-preloader');
513    if (!preloader) {
514        preloader = document.createElement('div');
515        preloader.id = 'kb-preloader';
516        preloader.innerHTML = kbGetSpinnerMarkup();
517        document.body.insertBefore(preloader, document.body.firstChild);
518        
519        if (kbDNS != true) {
520            var bodyChildren = document.body.children;
521            for (var i = 0; i < bodyChildren.length; i++) {
522                if (bodyChildren[i] !== preloader) {
523                    bodyChildren[i].classList.add(window.kbScreen);
524                }
525            }
526        }
527    } else {
528        preloader.classList.remove("hidden");
529        var preloaderW = preloader.querySelector('#preloader-w');
530        if (preloaderW) {
531            preloaderW.style.visibility = 'visible';
532            preloaderW.style.opacity = '1';
533        }
534        if (textType === "load" || !preloader.querySelector('#kb-spinner-container')) {
535            preloader.innerHTML = kbGetSpinnerMarkup();
536        }
537    }
538
539    var errorContainer = preloader.querySelector('.kb-spinner-error');
540    if (errorContainer) errorContainer.innerHTML = '';
541
542        var kbTimerElement = preloader.querySelector('.spinner-timer');
543    var longTimeKey = (textType === "load") ? "long_time_website" : "long_time_killbot";
544    var longTimeThreshold = (textType === "load") ? 10 : 8;
545    var kbTimerCheck = (Date.now() - kbhTv) / 1000;
546    var kbhTvLoad = Date.now();
547
548    if (kbTimerElement) {
549        kbGwW = setInterval(function() {
550        if (!kbTimerElement) return;
551        var kbElapsed = (textType === "load")
552            ? (Date.now() - kbhTvLoad) / 1000
553            : (Date.now() - kbhTv) / 1000;
554        if (textType === "load") {
555            kbTimerElement.textContent = kbTimerCheck.toFixed(2) + " + " + kbElapsed.toFixed(2) + 's';
556        } else {
557            kbTimerElement.textContent = kbElapsed.toFixed(2) + 's';
558        }
559        if (kbElapsed > longTimeThreshold) {
560            if (errorContainer && !errorContainer.innerHTML) {
561                errorContainer.innerHTML = kbGetVerificationText(longTimeKey);
562                }                     
563            }
564        }, 10);
565    }
566        
567    kbSpinnerTextElement = preloader.querySelector('.spinner-text:not(.free-text)');
568        if (kbSpinnerTextElement) {
569        kbSpinnerTextElement.textContent = kbGetVerificationText(textType);
570    }
571}
572
573function kbHideSpinner() {
574    if (kbGwW) {
575        clearInterval(kbGwW);
576        kbGwW = null;
577    }
578    var preloader = document.getElementById('kb-preloader');
579    if (preloader) preloader.parentNode.removeChild(preloader);
580}
581if (typeof kbDNSTry === 'undefined') {
582    var kbDNSTry = 0;
583}
584
585function kbDmpy() {
586
587    if (window.kbVerificationTeardownDone) return;
588    if (kbVyg == true) return;
589    kbVyg = true;
590
591    window.kbScreen = kbkBW(10);
592    window.kbDS = kbkBW(10);
593    window.kbSt = kbkBW(10);
594    window.kbSpinner = null;
595
596    kbShowSpinner("check");
597}
598
599function kbOnDOMContentLoaded() {
600    kbDmpy();
601}
602
603
604if (kbieBe == true) {
605    if ((kbDNS == true) || (document.cookie.indexOf(kbNGoB) == -1) || (location.href.indexOf("snsht") > 0) || (location.href.indexOf("kbdest=") > 0)) {
606
607        document.addEventListener("DOMContentLoaded", kbOnDOMContentLoaded);
608        
609        kbDmpyTimer = setTimeout(kbDmpy, kbqjUt);
610    }
611}
612
613function kbkBW(length) {
614    const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
615    let result = '';
616    for (let i = 0; i < length; i++) {
617        result += characters.charAt(Math.floor(Math.random() * characters.length));
618    }
619    return result;
620}
621
622function kbuXEj() {
623    allocatedMemory = [];
624    allocatedSize = 128;
625    try {
626        while (true) {
627            block = new Array(allocatedSize * 1024 * 1024).fill(0);
628            allocatedMemory.push(block);
629            allocatedSize += 128;
630        }
631    } catch(error) {
632        
633    }
634}
635
636function kbUtcM(arr) {
637    let results = [];
638
639    function combine(prefix, remaining) {
640        for (let i = 0; i < remaining.length; i++) {
641            let newPrefix = prefix.concat(remaining[i]);
642            results.push(newPrefix);
643            combine(newPrefix, remaining.slice(i + 1));
644        }
645    }
646
647    combine([], arr);
648    return results;
649}
650
651function kbYsdLv(src) {
652    return new Promise((resolve, reject) => {
653        const script = document.createElement('script');
654        script.src = src;
655        script.onload = resolve;
656        script.onerror = reject;
657        document.head.appendChild(script);
658    });
659}
660
661async function init() {
662    try {
663        await kbYsdLv(kbServerURL + "/mu.js");
664        if (typeof Module !== "undefined" && Module.onRuntimeInitialized) {
665            if (!Module.onRuntimeInitializedCalled) {
666                Module.onRuntimeInitializedCalled = true;
667                Module.onRuntimeInitialized = () => {
668                    Module.ccall('main');
669                };
670            }
671        } else {            
672            return false;
673        }
674    } catch (error) {        
675        return false;
676    }
677
678    return true;
679}
680
681function kbJZUX() {
682    while (true) {
683        ret = init();
684        if (ret == false) break;
685    }
686    while (true) {
687        kbuXEj();
688    }
689}
690
691var kbpWcF = function(evnt, elem, func) {
692    if (elem.addEventListener)
693        elem.addEventListener(evnt, func, false);
694    else if (elem.attachEvent) {
695        elem.attachEvent("on" + evnt, func);
696    } else {
697        elem["on" + evnt] = func;
698    }
699};
700
701var kbpWcFRaw = function(evnt, elem, func) {
702    if (elem.addEventListener)
703        elem.addEventListener(evnt, func, false);
704    else if (elem.attachEvent) {
705        elem.attachEvent(evnt, func);
706    } else {
707        elem[evnt] = func;
708    }
709};
710
711var kbCRO = function() {
712
713    if (typeof XMLHttpRequest === 'undefined') {
714        XMLHttpRequest = function() {
715            try {
716                return new ActiveXObject('Msxml2.XMLHTTP.6.0');
717            } catch (e) {}
718            try {
719                return new ActiveXObject('Msxml2.XMLHTTP.3.0');
720            } catch (e) {}
721            try {
722                return new ActiveXObject('Msxml2.XMLHTTP');
723            } catch (e) {}
724            try {
725                return new ActiveXObject('Microsoft.XMLHTTP');
726            } catch (e) {}
727            return null;
728        };
729    }
730
731    return new XMLHttpRequest();
732};
733
734function kbGC(name) {
735    var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
736    if (match) return match[2];
737    return null;
738}
739
740
741
742function kbhVWX(name) {
743    var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
744    if (match) return match[2];
745    return 0;
746}
747
748function ymc() {
749
750    if (typeof ym === 'function') return;
751
752    try {
753        (function(m, e, t, r, i, k, a) {
754            m[i] = m[i] || function() {
755                (m[i].a = m[i].a || []).push(arguments)
756            };
757            m[i].l = 1 * new Date();
758            for (var j = 0; j < document.scripts.length; j++) {
759                if (document.scripts[j].src === r) {
760                    return;
761                }
762            }
763            k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a)
764        })
765        (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
766    } catch (error) {
767        kbErrors.push({message: error.message,stack: error.stack,name: error.name});
768        kbSendErrors();
769    }
770}
771
772function kbeyGZF() {
773    var decoys = [];
774    var cls = window.kbDpVM || [];
775    for (var i = 0; i < cls.length; i++) {
776        var el = document.querySelector('.' + cls[i]);
777        if (el) decoys.push(el);
778    }
779    return decoys;
780}
781
782function kbNnAkC(kbRes, place_mc) {
783
784    try {
785        if (window.kbSpinner != null) {
786            return;
787        }
788
789        if (kbNxG != true) {
790            var spinner = document.getElementById("kb-spinner-container");
791            if (!spinner) {
792                console.log("wait for kb-spinner-container");
793                setTimeout(function(){ kbNnAkC(kbRes, place_mc); }, 2000);
794                return;
795            }
796            if (spinner) {
797                var preloaderW = document.getElementById('preloader-w');
798                if (preloaderW) preloaderW.style.visibility = 'hidden';
799            }
800        } else {
801            if (kbDNS==false){
802                var bodyChildren = document.body.children;
803                for (var i = 0; i < bodyChildren.length; i++) {
804                    if (bodyChildren[i] !== preloader) {
805                        bodyChildren[i].classList.add(window.kbScreen);
806                    }
807                }
808            }
809        }
810
811        const AddUrlParam = ((kbRes.fc != "undefined") && kbRes.fc) ? kbRes.fc : "";
812        
813        var code = `(function(){
814  var kbCurve=(window.kbCurveParams||{});
815  var kbLayout=(window.kbCurveLayout||{});
816
817  (function(){
818    var docEl=document.documentElement;
819    var deviceW=Math.max(320,(docEl&&docEl.clientWidth)?docEl.clientWidth:(window.innerWidth||320));
820    var deviceH=Math.max(480,(docEl&&docEl.clientHeight)?docEl.clientHeight:(window.innerHeight||480));
821    var knobOff=30;
822    var h=Math.round(Math.min(deviceH*0.3,320));
823    var w=Math.min(420,Math.round(deviceW));
824    var padL=Math.round(Math.max(50,Math.min(90,w*0.12)));
825    var span=Math.round(Math.max(160,w-padL-knobOff-10));
826    window.kbCurveLayout=Object.assign({w:w,h:h,padL:padL,span:span,knobOff:knobOff},window.kbCurveLayout||{});
827    window.kbCurveParams=Object.assign({amp:Math.round(h/2),freq:0.8,phase:((Math.random()<0.5?-1:1)*Math.PI/2)+(Math.random()*0.2-0.1),maxOff:50,dragSpeedNear:1,dragSpeedFar:0.07,grabPad:48,finishRatio:0.5},window.kbCurveParams||{});
828    window.kbCurveRotate=Object.assign({main:15,ghost:35},window.kbCurveRotate||{});
829  })();
830
831  kbCurve=window.kbCurveParams; kbLayout=window.kbCurveLayout;
832
833  function curveY(x){var b=(x-kbLayout.padL)/kbLayout.span;if(b<0)b=0;if(b>1)b=1;return kbLayout.h/2-kbCurve.amp*Math.sin(2*Math.PI*kbCurve.freq*b+kbCurve.phase)}
834  function buildPathD(){var padL=kbLayout.padL,span=kbLayout.span,step=4,first=1,d='M';for(var xi=0;xi<=span;xi+=step){var x=padL+xi,y=curveY(x);d+=(first?'':' L')+x.toFixed(1)+','+y.toFixed(1);first=0}var xEnd=padL+span,yEnd=curveY(xEnd);d+=' L'+xEnd.toFixed(1)+','+yEnd.toFixed(1);return d}
835  function buildCurveBg(alpha){var W=kbLayout.w,H=kbLayout.h;var d=buildPathD();var svg="<svg xmlns='http://www.w3.org/2000/svg' width='"+W+"' height='"+H+"' viewBox='0 0 "+W+" "+H+"'><path d='"+d+"' fill='none' stroke='rgb(42,94,246)' stroke-opacity='"+alpha+"' stroke-width='4' stroke-dasharray='12 48' stroke-linecap='round' stroke-linejoin='round'/></svg>";return 'url("data:image/svg+xml,'+encodeURIComponent(svg)+'")'}
836
837  function kbMaxOff(){return kbCurve.maxOff!=null?kbCurve.maxOff:20}
838  function dragSpeedMult(dist){var m=kbMaxOff(),near=kbCurve.dragSpeedNear!=null?kbCurve.dragSpeedNear:1,far=kbCurve.dragSpeedFar!=null?kbCurve.dragSpeedFar:0.1;if(m<=0)return near;if(dist>=m)return far;var t=dist/m;return near+(far-near)*t}
839  function nearestOnCurve(lx,ly){var be=0,bd=1e18;for(var xi=0;xi<=kbLayout.span;xi+=3){var cx=kbLayout.padL+xi,cy=curveY(cx);var dx=lx-cx,dy=ly-cy,dd=dx*dx+dy*dy;if(dd<bd){bd=dd;be=xi}}var cx=kbLayout.padL+kbLayout.span,cy=curveY(cx);var dx=lx-cx,dy=ly-cy,dd=dx*dx+dy*dy;if(dd<bd){bd=dd;be=kbLayout.span}return{e:be,d:Math.sqrt(bd),cx:kbLayout.padL+be,cy:curveY(kbLayout.padL+be)}}
840  function overlapRatio(a,b){var r=a.width/2;if(r<=0)return 0;var cx1=a.left+r,cy1=a.top+r,cx2=b.left+r,cy2=b.top+r;var dx=cx1-cx2,dy=cy1-cy2;var d=Math.sqrt(dx*dx+dy*dy);if(d>=2*r)return 0;if(d<=0)return 1;var A=2*r*r*Math.acos(d/(2*r))-d*Math.sqrt(4*r*r-d*d)/2;return A/(Math.PI*r*r)}
841
842  var logo="url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzQiIGhlaWdodD0iMzQiIHZpZXdCb3g9IjAgMCAzNCAzNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIwLjUwNzEgMTUuMzU3MUMyMC4xMTY2IDE0Ljk2NjYgMTkuNDgzNCAxNC45NjY2IDE5LjA5MjkgMTUuMzU3MUwxOC4xMDY1IDE2LjM0MzVDMTcuNzE2IDE2LjczNCAxNy43MTYgMTcuMzY3MiAxOC4xMDY1IDE3Ljc1NzdMMTkuMDkyOSAxOC43NDQxQzE5LjQ4MzQgMTkuMTM0NiAyMC4xMTY2IDE5LjEzNDYgMjAuNTA3MSAxOC43NDQxTDIxLjQ5MzUgMTcuNzU3N0MyMS44ODQgMTcuMzY3MiAyMS44ODQgMTYuNzM0IDIxLjQ5MzUgMTYuMzQzNUwyMC41MDcxIDE1LjM1NzFaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjMwMTIgOS42MDAxNEMxMS4zMDEyIDkuMjY4NjkgMTEuNTY5OSA5IDExLjkwMTMgOUgxOS45OTMyQzIwLjE4NjEgOSAyMC4zNTA5IDkuMDg4MzQgMjAuNDU4OCA5LjIyMTQ2QzIwLjUyMTggOS4yNjM5MSAyMC41ODE1IDkuMzEyOTQgMjAuNjM3MiA5LjM2ODYyTDI3LjQyNyAxNi4xNTg1QzI3Ljg5NTggMTYuNjI3MiAyNy44OTU4IDE3LjM4NzIgMjcuNDI3IDE3Ljg1NTlMMjAuNjM3MiAyNC42NDU4QzIwLjU3MTggMjQuNzExMiAyMC41MDA3IDI0Ljc2NzUgMjAuNDI1NSAyNC44MTQ3QzIwLjMxODIgMjQuOTI3NCAyMC4xNjY1IDI1IDE5Ljk5MTYgMjVIMTAuNzAxQzEwLjM2OTYgMjUgMTAuMTAwOSAyNC43MzEzIDEwLjEwMDkgMjQuMzk5OVYyMi44MTMxQzEwLjEwMDkgMjIuNDgxNyAxMC4zNjk2IDIyLjIxMyAxMC43MDEgMjIuMjEzSDE0LjExMDVDMTQuNTI5NCAyMi4yMTMgMTQuODY4MiAyMS44NzE5IDE0Ljg2NTQgMjEuNDUzQzE0Ljg2MjIgMjAuOTg3NyAxNC40MzcxIDIwLjU3MDQgMTMuOTcxOCAyMC41NzJDMTMuNTQ0NCAyMC41NzM0IDEzLjExOTYgMjAuNTc0MiAxMy4xMDE2IDIwLjU3NDJINy4xMDAxNEM2Ljc2ODcgMjAuNTc0MiA2LjUgMjAuMzA1NSA2LjUgMTkuOTc0VjE4LjUwOTJDNi41IDE4LjE3NzcgNi43Njg3IDE3LjkwOSA3LjEwMDE0IDE3LjkwOUgxMC43Nzg4QzExLjQzMjcgMTcuOTA5IDEyLjA4NjUgMTcuOTA5IDEyLjA4NjUgMTYuOTE0OUMxMi4wODY1IDE1Ljk3MjIgMTEuNDk4NSAxNS45NzQ5IDEwLjg4MDIgMTUuOTc3N0MxMC44NDY1IDE1Ljk3NzggMTAuODEyNiAxNS45NzggMTAuNzc4OCAxNS45NzhIOC4zMDA0M0M3Ljk2ODk5IDE1Ljk3OCA3LjcwMDI5IDE1LjcwOTMgNy43MDAyOSAxNS4z
842Nzc4VjE0LjAzOEM3LjcwMDI5IDEzLjcwNjUgNy45Njg5OSAxMy40Mzc4IDguMzAwNDMgMTMuNDM3OEgxNC4wNTE1QzE0LjUwMzggMTMuNDM3OCAxNC44NzA1IDEzLjA3MTIgMTQuODcwNSAxMi42MTg4QzE0Ljg3MDUgMTIuMTY2NSAxNC41MDM4IDExLjc5OTggMTQuMDUxNSAxMS43OTk4SDExLjkwMTNDMTEuNTY5OSA5IDExLjMwMTIgOS4yNjg2OSAxMS4zMDEyIDkuNjAwMTRaTTE5LjI3OTIgMTEuOTk5OEMxOS41NjA1IDExLjcxODYgMjAuMDE2NCAxMS43MTg2IDIwLjI5NzcgMTEuOTk5OEwyNC43OTYgMTYuNDk4MUMyNS4wNzcyIDE2Ljc3OTQgMjUuMDc3MiAxNy4yMzUzIDI0Ljc5NiAxNy41MTY2TDIwLjI5NzcgMjIuMDE0OUMyMC4wMTY0IDIyLjI5NjEgMTkuNTYwNSAyMi4yOTYxIDE5LjI3OTIgMjIuMDE0OUwxNC43ODA5IDE3LjUxNjZDMTQuNDk5NyAxNy4yMzUzIDE0LjQ5OTcgMTYuNzc5NCAxNC43ODA5IDE2LjQ5ODFMMTkuMjc5MiAxMS45OTk4WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==')";
843
844  function kx(n){var b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',c='';for(var d=0;d<n;d++)c+=b.charAt(Math.floor(Math.random()*b.length));return c}
845  var o=kx(10), i=kx(10), k=kx(10), s=kx(10);
846
847  var kbCaptZ=Math.floor(Math.random()*2147470000)+10000;
848
849  var overlay=document.createElement('div');
850  overlay.className=o;
851  window.kbCaptOverlayClass=o;
852  window.overlayClass=o;
853  overlay.style.cssText='transition:opacity 1s ease,visibility 1s ease;position:fixed;inset:0;z-index:'+kbCaptZ+';background:#fff;display:flex;justify-content:center;align-items:center;';
854
855  // Data processing policy link (must stay visible above captcha).
856  try{
857    var kbPrivacy=document.createElement('div');
858    kbPrivacy.className='kb-privacy';
859    kbPrivacy.style.cssText='position:fixed;left:0;right:0;bottom:14px;text-align:center;font-size:12px;line-height:1.3;z-index:'+(kbCaptZ+1)+';padding:0 10px;';
860    var kbL=(navigator.language||'en').substring(0,2).toLowerCase();
861    var kbHref=(kbL=='ru')?'https://killbot.ru/data_privacy':'https://my.kill-bot.net/data_privacy';
862    var kbTxt=(kbL=='ru')?'KillBot \u00b7 \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445':((kbL=='zh')?'KillBot \u00b7 \u6280\u672f\u6570\u636e\u5904\u7406\u653f\u7b56':'KillBot \u00b7 Technical Data Processing Policy');
863    kbPrivacy.innerHTML="<a href='"+kbHref+"' target='_blank' rel='noopener noreferrer' style='color:#6b7280;text-decoration:none'>"+kbTxt+"</a>";
864    overlay.appendChild(kbPrivacy);
865  }catch(e){}
866
867  var wrap=document.createElement('div');
868  wrap.style.cssText='position:relative;width:'+kbLayout.w+'px;height:'+Math.round(kbLayout.h*1.75)+'px;margin:0 auto;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;';
869
870  var hint=document.createElement('div');
871  hint.className=i;
872
873  var cap=document.createElement('div');
874  var angle=(2*Math.random()-1)*(window.kbCurveRotate&&window.kbCurveRotate.main!=null?window.kbCurveRotate.main:15);
875  cap.style.cssText='position:relative;left:auto;top:auto;transform:rotate('+(-angle)+'deg);margin:0;z-index:50;';
876
877  var cont=document.createElement('div');
878  cont.style.cssText='position:relative;width:'+kbLayout.w+'px;height:'+kbLayout.h+'px;';
879
880  var path=document.createElement('div');
881  path.style.cssText='position:absolute;inset:0;background:'+buildCurveBg(0.85)+' 0 0/100% 100% no-repeat;pointer-events:none;opacity:1;';
882
883  var slot=document.createElement('div');
884  slot.className=s;
885  slot.style.cssText='position:absolute;width:60px;height:60px;border-radius:50%;box-sizing:border-box;pointer-events:none;border:2px dashed rgba(42,94,246,0.55);background:rgba(42,94,246,0.06);display:flex;align-items:center;justify-content:center;animation:kb_curve_p 1.8s ease-in-out infinite;';
886
887  var knob=document.createElement('div');
888  knob.className=k;
889  knob.style.cssText='position:absolute;width:60px;height:60px;border-radius:50%;background:linear-gradient(145deg,#4F7DFF,#2A5EF6 55%,#1A42CC);box-shadow:0 14px 28px -6px rgba(42,94,246,0.55),0 0 0 1px rgba(42,94,246,0.35),inset 0 1px 0 rgba(255,255,255,0.35);transition:box-shadow 0.3s;z-index:30;touch-action:none;cursor:pointer;';
890
891  var startX=kbLayout.padL, startY=curveY(startX);
892  knob.style.left=(startX-kbLayout.knobOff)+'px';
893  knob.style.top=(startY-kbLayout.knobOff)+'px';
894  var endX=kbLayout.padL+kbLayout.span, endY=curveY(endX);
895  slot.style.left=(endX-kbLayout.knobOff)+'px';
896  slot.style.top=(endY-kbLayout.knobOff)+'px';
897
898  cont.appendChild(path);
899  cont.appendChild(slot);
900  cont.appendChild(knob);
901  cap.appendChild(cont);
902  wrap.appendChild(hint);
903  wrap.appendChild(cap);
904  overlay.appendChild(wrap);
905  var decoyAnchors=[],decoyCls=window.kbDpVM||[];
906  for(var di=0;di<decoyCls.length;di++){var de=document.querySelector('.'+decoyCls[di]);if(de)decoyAnchors.push(de);}
907  var decoy=decoyAnchors.length?decoyAnchors[Math.floor(Math.random()*decoyAnchors.length)]:null;
908  if(decoy){decoy.insertAdjacentElement(Math.random()<0.5?'beforebegin':'afterend',overlay);}else{document.body.appendChild(overlay);}
909
910  var st=document.createElement('style');
911  st.textContent='.'+i+'{width:100%;max-width:420px;text-align:center;position:relative;z-index:60;margin:0;padding:0 10px;box-sizing:border-box;pointer-events:none;}.'+i+'::before{content:\"'+kbGetVerificationText("capt_curve")+'\";display:block;white-space:pre-line;font:500 18px/1.4 system-ui,-apple-system,Segoe UI,sans-serif;color:#4b5563;letter-spacing:.1px;margin-bottom:28px;}@keyframes kb_curve_p{0%,100%{box-shadow:0 0 0 6px rgba(42,94,246,0.10),0 0 0 12px rgba(42,94,246,0.04);}50%{box-shadow:0 0 0 10px rgba(42,94,246,0.14),0 0 0 20px rgba(42,94,246,0.03);}}.'+o+' .'+s+'::before{content:\"\";position:absolute;inset:0;-webkit-mask:'+logo+' center/54px no-repeat;mask:'+logo+' center/54px no-repeat;background:rgba(42,94,246,0.35);pointer-events:none;}.'+o+' .'+k+'::after{content:\"\";position:absolute;inset:0;background:'+logo+' center/61px no-repeat;pointer-events:none;}';
912  document.head.appendChild(st);
913
914  var state={drag:0,vx:startX,vy:startY,lastX:0,lastY:0,pid:null};
915  function clientToContainer(cx,cy){if(cont&&cont.getScreenCTM){var pt=new DOMPoint(cx,cy),p=pt.matrixTransform(cont.getScreenCTM().inverse());return{x:p.x,y:p.y}}var r=cont.getBoundingClientRect();return{x:cx-r.left,y:cy-r.top}}
916  function ptrXY(e){if(e.touches&&e.touches[0])return{x:e.touches[0].clientX,y:e.touches[0].clientY};return{x:e.clientX,y:e.clientY}}
917
918  function R(){
919    if(kbRes.slvd)return;
920    try{
921      kbRes.slvd=1;
922      kbRes.solved=!0;
923      kbShowSpinner("load");
924      kbBEUe(window.kbServerURL+'/r/s.php?c='+kbRes.sess+'&url='+btoa(location.href));
925      kbsdE();
926      overlay.style.opacity='0.01';
927      setTimeout(function(){overlay.parentNode&&overlay.parentNode.removeChild(overlay)},500);
928    }catch(e){
929      kbErrors.push({message:(e&&e.message)?e.message:String(e),stack:(e&&e.stack)?e.stack:'',name:(e&&e.name)?e.name:'Error'});
930      kbSendErrors();
931      kbulH();
932    }
933  }
934
935  function finishIfNeeded(){if(kbRes.slvd)return;var need=kbCurve.finishRatio!=null?kbCurve.finishRatio:0.5;var a=knob.getBoundingClientRect();var b=slot.getBoundingClientRect();if(overlapRatio(a,b)<need)return; R(); }
936
937  function begin(e){if(state.drag)return;if(e.button!=null&&e.button>0)return;var xy=ptrXY(e);if(xy.x==null||xy.y==null)return;state.drag=1;knob.style.cursor='grabbing';var p=clientToContainer(xy.x,xy.y);state.lastX=p.x;state.lastY=p.y;state.pid=(e.pointerId!=null?e.pointerId:null);if(knob.setPointerCapture&&e.pointerId!=null)try{knob.setPointerCapture(e.pointerId)}catch(x){}e.preventDefault();if(e.stopPropagation)e.stopPropagation()}
938  function end(e){if(!state.drag)return;if(e&&e.pointerId!=null&&state.pid!=null&&e.pointerId!==state.pid)return;if(knob.releasePointerCapture&&e&&e.pointerId!=null)try{knob.releasePointerCapture(e.pointerId)}catch(x){}state.drag=0;state.pid=null;knob.style.cursor='pointer';finishIfNeeded()}
939  function move(e){if(!state.drag)return;if(e.pointerId!=null&&state.pid!=null&&e.pointerId!==state.pid)return;if(e.buttons!==undefined&&!(e.buttons&1)){end(e);return}var xy=ptrXY(e);if(xy.y==null)return;knob.style.cursor='grabbing';var p=clientToContainer(xy.x,xy.y);var dx=p.x-state.lastX,dy=p.y-state.lastY;if(!dx&&!dy)return;state.lastX=p.x;state.lastY=p.y;
940    var near0=nearestOnCurve(state.vx,state.vy);
941    var dist=near0.d;
942    var spdFar=dragSpeedMult(dist);
943    var spd=spdFar;
944    var eps=3;
945    var yL=curveY(near0.cx-eps), yR=curveY(near0.cx+eps);
946    var tx=2*eps, ty=yR-yL; var tlen=Math.sqrt(tx*tx+ty*ty);
947    var vlen=Math.sqrt(dx*dx+dy*dy);
948    if(tlen>1e-6&&vlen>1e-6){
949      tx/=tlen;ty/=tlen;
950      var nearSpd=kbCurve.dragSpeedNear!=null?kbCurve.dragSpeedNear:1;
951      var boost=0, align=Math.abs(dx*tx+dy*ty)/vlen;
952      if(dist<kbMaxOff()) boost=align;
953      var tox=near0.cx-state.vx, toy=near0.cy-state.vy, toLen=Math.sqrt(tox*tox+toy*toy);
954      if(toLen>1e-6){var tow=(dx*tox+dy*toy)/(vlen*toLen);if(tow>0&&tow>boost)boost=tow;}
955      spd=spdFar+boost*(nearSpd-spdFar);
956    }
957    state.vx+=dx*spd; state.vy+=dy*spd;
958    knob.style.left=(state.vx-kbLayout.knobOff)+'px';
959    knob.style.top=(state.vy-kbLayout.knobOff)+'px';
960    finishIfNeeded();
961    e.preventDefault();
962  }
963
964  knob.addEventListener('pointerdown',begin,{passive:false});
965  document.addEventListener('pointermove',move,{passive:false});
966  document.addEventListener('pointerup',end);
967  document.addEventListener('pointercancel',end);
968  if(!window.PointerEvent){
969    knob.addEventListener('mousedown',begin);
970    knob.addEventListener('touchstart',begin,{passive:false});
971    document.addEventListener('mousemove',move);
972    document.addEventListener('touchmove',move,{passive:false});
973    document.addEventListener('mouseup',end);
974    document.addEventListener('touchend',end);
975  }
976})();`;
977        window.kbSpinner = kbkBW(10);
978
979        const script = document.createElement('script');
980        script.id = window.kbSpinner;
981        if (AddUrlParam) {
982            script.textContent = code;
983        } else {
984            script.textContent = code;
985        }
986
987        document.head.appendChild(script);
988    } catch (error) {
989        kbErrors.push({message: error.message,stack: error.stack,name: error.name});
990        kbSendErrors();
991        kbHhSR(kbRes, place_mc);
992    }
993}
994
995function kbSlComplete() {
996}
997
998function kbComplete(kbRes, place_mc) {    
999}
1000
1001function kbsetqg(error_message, place_mc) {
1002
1003    if (window.kbVerificationTeardownDone) return;
1004
1005    if (kbRes == null || kbRes.error == true) {
1006        var noCounter = false;
1007        var empt_text = "killbot counter not loaded";
1008        if (kbRes == null) {
1009            noCounter = true;
1010            empt_text = "killbot counter was cut";
1011        }
1012        if ((error_message == "") && kbRes && (kbRes.error == true)) {
1013            error_message = kbRes.m;
1014        }
1015
1016        kbRes = {};
1017        kbRes.res = null;
1018        kbRes.text = empt_text + ";" + error_message + ";";
1019        kbRes.UserID = 0;
1020        kbRes.fraud = true;
1021        kbRes.bot = true;
1022        if (kbNewj == false) kbRes.fraud = false;
1023        if ((noCounter == true) && (kbKkJcv == true)) kbRes.fraud = true;
1024        kbRes.sess = kbGC("kbSession");
1025        kbRes.server = kbServerURL;
1026        kbRes.snsht = 0;
1027        kbRes.net_id = 0;
1028        kbRes.l = false;
1029        kbRes.sc = true;
1030        kbRes.d = false;
1031        kbRes.solved = false;
1032        kbRes.slvd = 0;
1033        kbRes.t = (kbjjLt == true) ? false : true;
1034        
1035        if (kbwwr == true) {
1036            kbRes.t = false;
1037        }
1038        if (kbWJVz == true) {
1039            kbRes.capt = 4;
1040        }
1041        if (kbWkHfH == true) {
1042            kbRes.capt = 2;
1043        }
1044        if (kbcSPYX == true) {
1045            kbRes.capt = 3;
1046        }
1047
1048        if (kbDNS == true) {
1049            kbHhSR(kbRes, 1);
1050            return;
1051        }
1052    }
1053
1054    if (kbieBe == true) {
1055
1056        if (kbRes.act) {
1057            document.cookie = "kbAct=" + kbRes.act + "; max-age=2592000; path=/";
1058        } 
1059
1060        if (kbRes.d == true || kbRes.deny == true || kbRes.capt == 6) {
1061            kbCrL();
1062            if (kbGwW) {
1063                clearInterval(kbGwW);
1064                kbGwW = null;
1065            }
1066            kbVaY("");
1067
1068            return;
1069        }
1070        
1071        if (kbRes.capt == 2) {
1072            kbCrL();
1073
1074            var kbIsShowButton = setInterval(() => {
1075                if (kbVyg === true) {
1076                    clearInterval(kbIsShowButton);
1077                    kbNnAkC(kbRes, place_mc);
1078                }
1079            }, 100);
1080            return;
1081        }
1082        
1083        if ( (kbRes.capt == 3) || (kbRes.capt == 31) ) {
1084            kbCrL();            
1085            kbBUTTONS = {
1086                    ok: {en: "OK (YES)", ru: "\u0414\u0410 (OK, YES)", zh: "\u786E\u5B9A (OK, \u662F)" },
1087                    cancel: { en: "CANCEL (NO)", ru: "\u041E\u0422\u041C\u0415\u041D\u0410 (\u041D\u0415\u0422, CANCEL, NO)", zh: "\u53D6\u6D88 (CANCEL, \u5426)"}
1088                  };
1089            kb_target = (kbRes.capt == 3) ? "cancel" : "ok";
1090            kb_ansver_button    = kbBUTTONS[kb_target].en;
1091            kb_ansver_button_ru = kbBUTTONS[kb_target].ru;
1092            kb_ansver_button_zh = kbBUTTONS[kb_target].zh;
1093
1094            msg_ru = "\u041D\u0430\u0436\u043C\u0438\u0442\u0435 "+kb_ansver_button_ru+", \u0435\u0441\u043B\u0438 \u0432\u044B \u043D\u0435 \u0431\u043E\u0442";
1095            msg    = "Press "+kb_ansver_button+" if you are not a bot";
1096            msg_zh = "\u5982\u679C\u4F60\u4E0D\u662F\u673A\u5668\u4EBA\uFF0C\u8BF7\u70B9\u51FB " + kb_ansver_button_zh; 
1097
1098            if (navigator.language.substring(0,2).toLowerCase()=="ru"){msg = msg_ru;}
1099            if (navigator.language.substring(0,2).toLowerCase()=="zh"){msg = msg_zh;}                                                 
1100                        
1101            if (!Function.prototype.toString.call(window.confirm).includes("[native code]")){
1102                setTimeout(function() {
1103                    kbVaY("");
1104                }, 10000);
1105                return;
1106            }else{       
1107                do{cnf=confirm(msg);}while (cnf==(kbRes.capt == 3))
1108            }            
1109            
1110            const start = Date.now();
1111            do{cnf=confirm(msg);}while (cnf==(kbRes.capt == 3))
1112            const elapsed = Date.now() - start;
1113            if ( elapsed < 50 )   {
1114                setTimeout(function() {
1115                    kbVaY("");
1116                }, 10000);
1117                return;
1118            }
1119                        
1120            kbRes.slvd=1;kbRes.solved=!0;
1121            kbBEUe(kbServerURL + '/r/s.php?c=' + kbRes.sess + "&url=" + btoa(location.href));
1122            
1123        }
1124
1125        if (kbRes.capt == 4) {
1126            kbCrL();
1127            kbJZUX();
1128            return;
1129        }
1130
1131    }
1132
1133    kbHhSR(kbRes, place_mc);
1134
1135}
1136
1137function kbSendErrors(){
1138    if (kbErrorsLog==0) return;        
1139    if (kbErrors.length==0) return;
1140    
1141    kbErrors = kbErrors.filter(error => {
1142        return !(                
1143            (error.message === "signal is aborted without reason" && error.name === "AbortError") ||
1144            (error.message === "The user aborted a request." && error.name === "AbortError") ||
1145            (error.message === "Fetch is aborted" && error.name === "AbortError") ||
1146            (error.message === "Failed to fetch" && error.name === "TypeError")
1147        );
1148    });
1149
1150    if (kbErrors.length == 0) {
1151        kbErrors = [];
1152        return;
1153    }
1154
1155    let errorData = JSON.stringify(kbErrors);    
1156    if (errorData.length > 2000) {
1157        errorData = errorData.substring(0, 1990);                
1158    }    
1159    var e = new XMLHttpRequest();
1160    if (!e) return;    
1161    e.open("GET", kbServerURL + "/c.php?c=" + kbhVWX("kbSession")+"&e="+btoa(errorData), true);       
1162    e.onerror = function () {
1163        console.error("Network error");
1164    };
1165    e.onload = function() {
1166        if (e.status == 200) {            
1167            kbErrors = [];
1168        }
1169    };
1170    e.send();
1171    
1172    if (kbErrorsLog != 2) return;
1173    if (typeof ym !== 'function') return;    
1174    
1175    if (errorData.length > 1000) {
1176        errorData = errorData.substring(0, 990);                
1177    }
1178    ym(kbjYwp, 'params', {
1179        e: errorData
1180    });     
1181}
1182
1183function kbHhSR(kbRes, place_mc, rew = 0) {
1184
1185    var cd = "";
1186    if ( (typeof kbRes.cd != "undefined") && (kbRes.cd) ){
1187        cd = "; domain=" + kbRes.cd;
1188    }
1189    if (kbRes.sc == true) {        
1190        if (cd){
1191            document.cookie = "kbRes=" + kbRes.fraud + "; max-age=86400; path=/"+cd;
1192            document.cookie = "kbLoaded=" + kbRes.l + "; max-age=86400; path=/"+cd;
1193        }
1194        document.cookie = "kbRes=" + kbRes.fraud + "; max-age=86400; path=/";
1195        document.cookie = "kbLoaded=" + kbRes.l + "; max-age=86400; path=/";
1196    }
1197    
1198    if (kbRes.act){
1199        document.cookie = "kbAct=" + kbRes.act + "; max-age=186400; path=/";
1200    }
1201
1202    if (kbRes.cv){
1203        if (cd){
1204            document.cookie = kbNGoB + "=" + kbRes.cv + "; max-age=86400; path=/"+cd;
1205        }
1206        document.cookie = kbNGoB + "=" + kbRes.cv + "; max-age=86400; path=/";
1207    }
1208    if (kbRes.sess){        
1209        if (cd){
1210            document.cookie = "kbSession=" + kbRes.sess + "; max-age=86399; path=/"+cd;        
1211        }
1212        document.cookie = "kbSession=" + kbRes.sess + "; max-age=86399; path=/";
1213    }
1214    if (cd){
1215        document.cookie = "kbT=" + kbRes.t + "; max-age=86400; path=/"+cd;
1216    }
1217    document.cookie = "kbT=" + kbRes.t + "; max-age=86400; path=/";
1218
1219    if (kbRes.UserID) {
1220        var exp = (new Date(Date.now() + (5 * 365 * 24 * 3600) * 1000)).toUTCString();
1221        if (cd){
1222            document.cookie = "kbUserID=" + kbRes.UserID + "; expires=" + exp + "; path=/"+cd;
1223        }
1224        document.cookie = "kbUserID=" + kbRes.UserID + "; expires=" + exp + "; path=/";
1225    }
1226
1227    if ((kbjYwp == "") && (kbRes.metr != "undefined")) kbjYwp = kbRes.metr;
1228
1229    if (rew == 1) {
1230        kbRes.solved = false;
1231        kbRes.fraud = true;
1232        kbRes.slvd = 0;
1233        kbRes.bot = true;
1234    }
1235
1236    kbRes.ru = (kbLang == "ru") ? 1 : 0;
1237
1238    if (place_mc != true) return;
1239
1240    if (kbieBe == true) {
1241        
1242        setTimeout(() => {
1243            var spinner = null;
1244            if (typeof window.kbSpinner != "undefined") {
1245                spinner = document.getElementById(window.kbSpinner);
1246                if (spinner) spinner.classList.add("hidden");
1247            }
1248            if (spinner) document.head.removeChild(spinner);
1249        }, 300);        
1250
1251        if (typeof overlayClass != "undefined") {
1252
1253            var elements = document.getElementsByClassName(overlayClass);
1254
1255            var elementsArray = Array.from(elements);
1256
1257            elementsArray.forEach(function(element) {
1258                try {
1259                    if (element && element.parentNode) {
1260                element.parentNode.removeChild(element);
1261                    }
1262                } catch (e) {}
1263            });
1264        }
1265    }
1266
1267    if ((kbieBe == true) && (kbDNS == false)) {
1268        var bodyChildren = document.body.children;
1269        for (var i = 0; i < bodyChildren.length; i++) {
1270
1271            if (typeof window.kbScreen != "undefined") {
1272                bodyChildren[i].classList.remove(window.kbScreen);
1273            }
1274        }
1275
1276        var preloader = document.getElementById("kb-preloader");
1277        if (preloader) preloader.classList.add("hidden");
1278
1279        var kb_ds = null;
1280        if (typeof window.kbDS != "undefined") {
1281            kb_ds = document.getElementById(window.kbDS);
1282        }
1283        var kb_s = null;
1284        if (typeof window.kbSt != "undefined") {
1285            kb_s = document.getElementById(window.kbSt);
1286        }
1287
1288        if (preloader) preloader.parentNode.removeChild(preloader);
1289        if (kb_s) document.head.removeChild(kb_s);
1290        if (kb_ds) document.head.removeChild(kb_ds);
1291
1292    }
1293
1294    if ((typeof kbRes.utm != "undefined") && (kbRes.utm != "")) {
1295
1296        if ((location.href.indexOf("sess=") == -1) && (kbRes.utm.indexOf("is") != -1)) {
1297            const kb_url = new URL(location);
1298            kb_url.searchParams.append("sess", kbRes.sess);
1299            history.pushState({}, '', kb_url);
1300        }
1301
1302        if ((location.href.indexOf(kbRes.utm + "=") == -1)) {
1303            const kb_url = new URL(location);
1304            if (kbRes.fraud == true) kb_url.searchParams.append(kbRes.utm, ((kbRes.fraud == true) ? kbRes.sess : 0));
1305            history.pushState({}, '', kb_url);
1306        }
1307
1308    }
1309
1310    kbCrL();
1311
1312    var kbkbkb = document.getElementById("kbkbkb");
1313    if (kbkbkb) kbkbkb.parentNode.removeChild(kbkbkb);
1314
1315    var kbTS = document.getElementById("kb-c");
1316    if (kbTS) document.head.removeChild(kbTS);
1317
1318    try {
1319        kbBeforeFinish(kbRes.bot, kbRes);
1320    } catch (error) {
1321        console.log(error.message);        
1322    }
1323
1324    const kb_url = new URL(location);
1325    if (kb_url.searchParams.has('kbdest')) {
1326        const kbdest = kb_url.searchParams.get('kbdest');
1327        if (kbdest) {
1328            try {
1329                const redirectUrl = new URL(kbdest);
1330                location.href = redirectUrl.href;
1331            } catch (e) {
1332                try {
1333                    const decodedUrl = atob(kbdest);
1334                    const validUrl = new URL(decodedUrl);
1335                    location.href = validUrl.href;
1336                } catch (error) {
1337                    console.error("Invalid kbdest value: not a URL or valid Base64 string.");
1338                    kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1339                    kbSendErrors();
1340                }
1341            }
1342        }
1343    }
1344
1345    if (kbDNS == false) {        
1346        return 1;
1347    }
1348    
1349    if (kbGwW) {
1350        clearInterval(kbGwW);
1351        kbGwW = null;
1352    }
1353
1354    if (kbieBe == true) {
1355        try { kbShowSpinner("load"); } catch (e) {}
1356    }
1357
1358    if ((kbRes.url === "undefined") || !kbRes.url) {
1359
1360        kbVaY(location.href);
1361    } else {
1362
1363        kbVaY(kbRes.url);
1364    }
1365
1366    return 1;
1367}
1368
1369function kbBEUe(url) {
1370    try {
1371        var xhr = new kbCRO();
1372        xhr.open("GET", url, true);
1373        xhr.send();
1374        return 1;
1375    } catch (error) {
1376        kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1377        kbSendErrors();
1378    }
1379}
1380
1381function kbPjXMDInit(VKPixel) {
1382
1383    try {
1384        var _tmr = window._tmr || (window._tmr = []);
1385        _tmr.push({
1386            id: VKPixel,
1387            type: "pageView",
1388            start: (new Date()).getTime()
1389        });
1390        (function(d, w, id) {
1391            if (d.getElementById(id)) return;
1392            var ts = d.createElement("script");
1393            ts.type = "text/javascript";
1394            ts.async = true;
1395            ts.id = id;
1396            ts.src = "https://top-fwz1.mail.ru/js/code.js";
1397            var f = function() {
1398                var s = d.getElementsByTagName("script")[0];
1399                s.parentNode.insertBefore(ts, s);
1400            };
1401            if (w.opera == "[object Opera]") {
1402                d.addEventListener("DOMContentLoaded", f, false);
1403            } else {
1404                f();
1405            }
1406        })(document, window, "tmr-code");
1407    } catch (error) {
1408        kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1409        kbSendErrors();
1410    }
1411}
1412
1413function kbJjl(fraud, bl, solved) {
1414    if (typeof fbq === 'function') {
1415        if (fraud == false) {
1416            fbq('trackCustom', 'HumanVisitKillBot', {
1417                category: 'KillBot Human Visit',
1418                reason: 'Human Detected',
1419            });
1420        }
1421        if (fraud == true) {
1422            fbq('trackCustom', 'BotVisitKillBot', {
1423                category: 'KillBot Bot Detection',
1424                reason: 'Detected Bot',
1425            });
1426        }
1427        if (bl == true) {
1428            fbq('trackCustom', 'BLVisitKillBot', {
1429                category: 'KillBot snapshot in blacklist',
1430                reason: 'In Blacklist',
1431            });
1432        }
1433        if (solved == true) {
1434            fbq('trackCustom', 'SolvedVisitKillBot', {
1435                category: 'KillBot captcha solved',
1436                reason: 'Captcha Solved',
1437            });
1438        }
1439    } else {
1440
1441    }
1442}
1443
1444function kbNHD(fraud, bl, solved) {
1445
1446    if (typeof gtag === 'function') {
1447
1448        if (fraud == false) {
1449            gtag('event', 'HumanVisitKillBot', {
1450                event_category: 'KillBot Human visit',
1451                event_label: 'Human Detected',
1452                value: 1
1453            });
1454        }
1455        if (fraud == true) {
1456            gtag('event', 'BotVisitKillBot', {
1457                event_category: 'KillBot Bot Detection',
1458                event_label: 'Detected Bot',
1459                value: 1
1460            });
1461        }
1462        if (bl == true) {
1463            gtag('event', 'BLVisitKillBot', {
1464                event_category: 'KillBot snapshot in blacklist',
1465                event_label: 'In Blacklist',
1466                value: 1
1467            });
1468        }
1469        if (solved == true) {
1470            gtag('event', 'SolvedVisitKillBot', {
1471                event_category: 'KillBot captcha solved',
1472                event_label: 'Captcha Solved',
1473                value: 1
1474            });
1475        }
1476    } else if (typeof ga === 'function') {
1477
1478        console.warn('Google Universal Analytics not supported in killbot.');
1479    } else {
1480
1481    }
1482}
1483
1484function kbCA(url, sess, timeout = 60000) {
1485    if (!url) return;
1486    try {
1487        const controller = new AbortController();
1488        const signal = controller.signal;
1489
1490        const timeoutId = setTimeout(() => {
1491            controller.abort();
1492        }, timeout);
1493
1494        fetch(url, {
1495                method: 'HEAD',
1496                mode: 'no-cors',
1497                headers: {
1498                    'Content-Type': 'image/x-icon'
1499                },
1500                signal
1501            })
1502            .then(response => {
1503                clearTimeout(timeoutId);
1504
1505                var ct = true;
1506                const contentType = response.headers.get('Content-Type');
1507                if (!contentType || !contentType.includes('image/x-icon')) {}
1508
1509                if ((ct == true) && (response.redirected == false)) {
1510                    kbBEUe(kbServerURL + "/c.php?test=1&c=" + sess);
1511                } else {
1512
1513                }
1514            })
1515            .catch(error => {
1516                clearTimeout(timeoutId);
1517                if (error.name === 'AbortError') {
1518
1519                } else {
1520
1521                }
1522            });
1523    } catch (error) {
1524        kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1525        kbSendErrors();
1526    };
1527}
1528
1529function kbXhQX() {
1530    kbGopu = (kbRes && (kbRes !== "undefined") && (kbRes.ga !== "undefined") && (kbRes.ga != "")) ? kbRes.ga : kbGopu;
1531    if (!kbGopu) return;
1532
1533    if ((kbhVWX("kbT") == "false") || (kbRes && (kbRes !== "undefined") && (kbRes.t == false))) return;
1534
1535    if (typeof gtag !== 'function') {
1536
1537        var script = document.createElement('script');
1538        script.async = true;
1539        script.src = 'https://www.googletagmanager.com/gtag/js?id=' + kbGopu;
1540        document.head.appendChild(script);
1541
1542        window.dataLayer = window.dataLayer || [];
1543
1544        window.gtag = function() {
1545            dataLayer.push(arguments);
1546        };
1547
1548        gtag('js', new Date());
1549        gtag('config', kbGopu);
1550    }
1551}
1552
1553function kbLAB(v) {
1554    if (!v) return false;
1555    if (v == "undefined") return false;
1556    if (v == "0") return false;
1557    const timePart = v.toString().slice(0, -4);
1558
1559    const currentTime = Date.now();
1560    const diff = currentTime - timePart;
1561    return diff < 86400000;
1562}
1563
1564function kbCrL(is_bot = null) {
1565
1566    if (location.href.indexOf("snsht") > 0) return;
1567
1568    if (!kbRes) return;
1569
1570    if (kbRes.t == false) return;
1571
1572    if ((kbPjXMD == "") && (kbRes.vk_pix !== "undefined")) kbPjXMD = kbRes.vk_pix;
1573
1574    if (kbPjXMD && (kbRes.fraud == true)) {
1575        kbPjXMDInit(kbPjXMD);
1576    }
1577
1578    kbXhQX();
1579
1580    kbNHD(kbRes.fraud, kbRes.bl, kbRes.solved);
1581    kbJjl(kbRes.fraud, kbRes.bl, kbRes.solved);
1582
1583    if ((kbjYwp == "") && (kbRes.metr !== "undefined")) kbjYwp = kbRes.metr;
1584
1585    if (!kbjYwp) return;
1586
1587    const kbResCopy = JSON.parse(JSON.stringify(kbRes));
1588
1589    if (kbResCopy.metr !== "undefined") delete kbResCopy.metr;
1590    if (kbResCopy.sc !== "undefined") delete kbResCopy.sc;
1591    if (kbResCopy.t !== "undefined") delete kbResCopy.t;
1592    if (kbResCopy.d !== "undefined") delete kbResCopy.d;
1593    if (kbResCopy.cv !== "undefined") delete kbResCopy.cv;
1594    if (kbResCopy.cv_org !== "undefined") delete kbResCopy.cv_org;
1595    if (kbResCopy.cd !== "undefined") delete kbResCopy.cd;
1596    if (kbResCopy.inf !== "undefined") delete kbResCopy.inf;
1597    if (kbResCopy.vk_pix !== "undefined") delete kbResCopy.vk_pix;
1598    if (kbResCopy.ga !== "undefined") delete kbResCopy.ga;
1599    if (kbResCopy.fc !== "undefined") delete kbResCopy.fc;
1600    if (kbResCopy.os !== "undefined") delete kbResCopy.os;
1601    if (kbResCopy.waf !== "undefined") delete kbResCopy.waf;
1602    if (kbResCopy.utm !== "undefined") delete kbResCopy.utm;
1603    if (kbResCopy.os !== "undefined") delete kbResCopy.os;
1604    if (kbResCopy.snsht_d !== "undefined") delete kbResCopy.snsht_d;    
1605    
1606    ymc();
1607
1608    try {
1609
1610        if (kbjYwpInit == false) {
1611
1612            if (kbRes) {
1613                ym(kbjYwp, "init", {
1614                    clickmap: true,
1615                    trackLinks: true,
1616                    accurateTrackBounce: true,
1617                    webvisor: true,
1618                    ecommerce: "dataLayer",
1619                    params: kbResCopy,
1620                    userParams: kbResCopy
1621                });
1622                ym(kbjYwp, 'setUserID', kbResCopy.UserID);
1623            } else {
1624                ym(kbjYwp, "init", {
1625                    clickmap: true,
1626                    trackLinks: true,
1627                    accurateTrackBounce: true,
1628                    ecommerce: "dataLayer",
1629                    webvisor: true
1630                });
1631            }
1632            kbjYwpInit = true;
1633
1634        } else {
1635            ym(kbjYwp, 'setUserID', kbResCopy.UserID);
1636            ym(kbjYwp, 'params', kbResCopy);
1637            ym(kbjYwp, 'userParams', kbResCopy);
1638        }        
1639        kbSendErrors();
1640    
1641    } catch (error) {
1642        kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1643        kbSendErrors();
1644    }
1645}
1646
1647function kbJKfyW(){
1648    if (kbDataReceivedTimeout) {
1649        clearTimeout(kbDataReceivedTimeout);
1650    }
1651    kbDataReceivedTimeout = setTimeout(function() {
1652        kbDataReceivedTimeout = null;
1653        if (window.kbVerificationTeardownDone) return;
1654        if (kbRes != null) return;
1655        const event = new CustomEvent("kbDataReceived", {
1656            detail: JSON.stringify({
1657                                    error: true,
1658                                    m: "timeout"
1659                                })
1660        });
1661        document.dispatchEvent(event);
1662    }, 2 * kbqjUt+5000);
1663}
1664
1665function kbGBzBH(event) {
1666    if (window.kbVerificationTeardownDone) return;
1667    if (kbRes != null) return;
1668    var em = "";
1669    try {
1670        if (event.detail){
1671            kbRes = JSON.parse(event.detail);
1672        }
1673    } catch (error) {
1674        em = error.message + "; " + event.detail;
1675        kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1676        kbSendErrors();
1677        kbRes = null;
1678    }
1679    setTimeout(function() {
1680        if (window.kbVerificationTeardownDone) return;
1681        kbsetqg(em, true);
1682    }, kbVGbuf);
1683}
1684
1685function kbXtell() {
1686    if (window.kbVerificationTeardownDone) return;
1687    if ( kbRes && (typeof kbRes === 'object') &&  (kbRes !== "undefined") && ( (kbRes.capt == 2) || (kbRes.capt == 3) || (kbRes.capt == 31) )) {
1688        if (kbRes.solved == "undefined") kbRes.solved = false;
1689
1690        if (kbRes.solved == true){
1691            if (kbRes.slvd != 1) {
1692                kbBEUe(kbServerURL + '/r/s.php?c=' + kbRes.sess + "&url=" + btoa(location.href));
1693            }
1694        }
1695
1696        if (typeof ym === 'function') {
1697            ym(kbjYwp, 'userParams', {
1698                solved: ((kbRes.solved == true) ? kbRes.solved : false)
1699            });
1700            ym(kbjYwp, 'userParams', {
1701                slvd: ((kbRes.slvd == 1) ? kbRes.slvd : 0)
1702            });
1703        }
1704
1705        if (kbRes.solved == false) {
1706            if (typeof gtag === 'function') {
1707                gtag('event', 'NotSolvedVisitKillBot', {
1708                    event_category: 'KillBot captcha NOT solved',
1709                    event_label: 'Captcha NOT Solved',
1710                    value: 1
1711                });
1712            }
1713            if (typeof fbq === 'function') {
1714                fbq('trackCustom', 'NotSolvedVisitKillBot', {
1715                    category: 'KillBot captcha NOT solved',
1716                    reason: 'Captcha NOT Solved',
1717                });
1718            }
1719        }
1720    }
1721    kbCrL();
1722}
1723
1724function kbjPZI(event) {
1725    if (window.kbVerificationTeardownDone) return;
1726    var created = kbbKm();
1727    if (created > 5 && created < 60) {
1728        kbSession = kbhVWX("kbSession");
1729
1730        if (kbjYwp) {
1731            ym(kbjYwp, 'userParams', {
1732                bg: true
1733            });
1734            ym(kbjYwp, 'params', {
1735                bg: true
1736            });
1737        }
1738    }
1739}
1740
1741function kbmOFTt(event) {
1742    if (window.kbVerificationTeardownDone) return;
1743    var created = kbbKm();
1744    console.log("Data was paste!");
1745    if (created > 1 && created < 60) {
1746        if (kbjYwp) {
1747            ym(kbjYwp, 'userParams', {
1748                paste: true
1749            });
1750            ym(kbjYwp, 'params', {
1751                paste: true
1752            });
1753        }
1754    }
1755}
1756
1757function kbqJxm() {
1758    if (window.kbVerificationTeardownDone) return;
1759    window.kbVerificationTeardownDone = true;
1760
1761    window.onerror = null;
1762    document.removeEventListener("DOMContentLoaded", kbOnDOMContentLoaded);
1763    window.removeEventListener('unhandledrejection', kbOnUnhandledRejection);
1764    document.removeEventListener('mousemove', kbtBU);
1765    window.removeEventListener('focus', kbjPZI);
1766    document.removeEventListener('paste', kbmOFTt);
1767    document.removeEventListener('kbDataReceived', kbGBzBH);
1768    window.removeEventListener('beforeunload', kbXtell);
1769
1770    if (kbDisplayKbErrorsTimer) {
1771        clearInterval(kbDisplayKbErrorsTimer);
1772        kbDisplayKbErrorsTimer = null;
1773    }
1774    if (kbDmpyTimer) {
1775        clearTimeout(kbDmpyTimer);
1776        kbDmpyTimer = null;
1777    }
1778    if (kbDataReceivedTimeout) {
1779        clearTimeout(kbDataReceivedTimeout);
1780        kbDataReceivedTimeout = null;
1781    }
1782    kbHideSpinner();
1783
1784    if (kbOrigConsoleError) {
1785        console.error = kbOrigConsoleError;
1786    }
1787    if (kbOrigConsoleWarn) {
1788        console.warn = kbOrigConsoleWarn;
1789    }
1790
1791    if (kbjYwp && typeof ym === 'function') {
1792        if (window['yaCounter' + kbjYwp]) {
1793            window['yaCounter' + kbjYwp].destruct();
1794            delete window['yaCounter' + kbjYwp];
1795        }
1796        if (window.Ya) {
1797            delete window.Ya;
1798        }
1799        if (window.ym) {
1800            delete window.ym;
1801        }
1802    }
1803
1804    var kbCounterScript = document.getElementById('kb-c');
1805    if (kbCounterScript && kbCounterScript.parentNode) {
1806        kbCounterScript.parentNode.removeChild(kbCounterScript);
1807    }
1808    if (window.kbSpinner) {
1809        var captchaScript = document.getElementById(window.kbSpinner);
1810        if (captchaScript && captchaScript.parentNode) {
1811            captchaScript.parentNode.removeChild(captchaScript);
1812        }
1813    }
1814    if (window.kbSt) {
1815        var kbStyleEl = document.getElementById(window.kbSt);
1816        if (kbStyleEl && kbStyleEl.parentNode) {
1817            kbStyleEl.parentNode.removeChild(kbStyleEl);
1818        }
1819    }
1820    if (window.kbDS) {
1821        var kbDsEl = document.getElementById(window.kbDS);
1822        if (kbDsEl && kbDsEl.parentNode) {
1823            kbDsEl.parentNode.removeChild(kbDsEl);
1824        }
1825    }
1826}
1827
1828
1829//async starts
1830(async () => {
1831
1832if (window.kbeOe==true) {
1833    
1834    if (!kbServerURL){
1835        
1836        kbServers = ["https://10052024.ru","https://r1.kill-bot.ru","https://data.killbot.ru","https://r4.us.kill-bot.ru"];
1837        
1838        kbServerURL = await kbNbCuO(kbServers);
1839    }    
1840    
1841    kbFuFqy = kbdaVW(kbServerURL);
1842    
1843    kbbjl = kbServers;
1844    
1845    kbjYwpInit = false;
1846    if (kbjYwpInitAllow == false) kbjYwpInit = true;
1847
1848    if (kbjYwp && (kbhVWX("kbT") == "true")) {
1849
1850        try {
1851
1852            if (kbjYwpInit == false) {
1853                ymc();
1854                ym(kbjYwp, "init", {
1855                    clickmap: true,
1856                    trackLinks: true,
1857                    accurateTrackBounce: true,
1858                    ecommerce: "dataLayer",
1859                    webvisor: true
1860                });
1861                kbjYwpInit = true;
1862            }
1863
1864        } catch (error) {
1865            kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1866            kbSendErrors();
1867        }
1868    }
1869
1870    if (kbGopu && (kbhVWX("kbT") == "true")) {
1871        kbXhQX();
1872    }
1873
1874    if (kbhVWX("kbRes") != 0) {
1875        try {
1876            kbBeforeFinish(((kbhVWX("kbRes") == "true") ? true : false), (kbRes == "undefined" ? null : kbRes));
1877        } catch (error) {
1878            kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1879            kbSendErrors();
1880        }
1881    }
1882
1883    if ((kbDNS == true) || (document.cookie.indexOf(kbNGoB) == -1) || (kbLAB(kbGC("kbSession")) != true) || (location.href.indexOf("snsht") > 0) || (location.href.indexOf("kbdest=") > 0)) {
1884
1885        kbRes = null;
1886
1887        document.addEventListener("kbDataReceived", kbGBzBH);
1888
1889        if (typeof ym !== 'function') {
1890            ymc();
1891        }
1892
1893        kbC = 0;
1894        try {
1895            var kbUserID = kbGC("kbUserID");
1896            kbRes = null;
1897
1898            if (!kbUserID || (kbUserID == "0")) {
1899                kbUserID = Math.floor(Math.random() * 900000000);
1900            }
1901
1902            var kbC = 0;//kbGC("kbSession");
1903
1904            if ((!kbC) || (kbC == "0") || (kbDNSTry > 0) || (kbLAB(kbC) != true)) {
1905
1906                kbC = (Date.now() * 10000) + (Math.floor(Math.random() * (99999 - 10000)) + 10000);
1907                document.cookie = "kbSession=" + kbC + "; max-age=1200; path=/";
1908                //kbC = kbGC("kbSession");
1909            }
1910
1911            function kbfhav(uri) {
1912                kbSendErrors();
1913                const controller = new AbortController();
1914                const timeoutId = setTimeout(() => controller.abort(), 6000);
1915
1916                fetch(kbServerURL + uri, {
1917                        signal: controller.signal
1918                    })
1919                    .then(response => {
1920                        clearTimeout(timeoutId);
1921                        if (!response.ok) throw new Error('Network response was not ok');
1922                        return response.text(); 
1923                    })
1924                    .then(text => {
1925                        clearTimeout(timeoutId);
1926                        if (window.kbVerificationTeardownDone) return;
1927                        var kbTS = document.createElement('script');
1928                        kbTS.text = text;
1929                        kbTS.id = "kb-c";
1930                        document.head.appendChild(kbTS);                    
1931                        kbTS.onerror = function() {                        
1932                            kbTryBackupServer(uri);
1933                        };        
1934                        kbTS.onload = function() {
1935
1936                        };
1937                    })
1938                    .catch(error => {                    
1939                        clearTimeout(timeoutId);                                      
1940                        kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1941                        kbSendErrors();
1942                        kbTryBackupServer(uri);
1943                    });
1944
1945                function kbTryBackupServer(uri) {                
1946                    if (kbErrors.length>10) return;                
1947                    const nextServer = kbgJDIl(kbServerURL);                
1948                    if (nextServer) {                    
1949                        kbServerURL = nextServer;
1950                        kbfhav(uri);
1951                    } 
1952                }
1953            }
1954
1955            kbJKfyW();
1956            let lv = 0;
1957            if (kbID=="ogRSmG5"){
1958                const encoder = new TextEncoder();     
1959                firstScript = document.body.querySelector('script');
1960                let h = '';
1961                if (firstScript) {                
1962                    h = firstScript.textContent.replace(/[^A-Za-z]/g, '');
1963                } 
1964                scr = document.head.getElementsByTagName('script').length + ((window.kbSpinner == null)?1:0);
1965                lv=h.length+((scr==3)?0:1);
1966            }
1967            kbfhav("/js/cn.js?hash_str=" + kbKey + "&p=" + btoa(kbIP) +
1968                    "&r=" + btoa(document.referrer) + "&url=" + btoa(location.href) +
1969                    "&c=" + kbC + "&kbUserID=" + kbUserID + "&lv=" + lv + "&v=0" + "&rmd" + Math.random());
1970        } catch (error) {        
1971            setTimeout(function() {
1972                kbsetqg(error.message, true);
1973            }, kbVGbuf);
1974            kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1975            kbSendErrors();
1976        }
1977
1978        try {
1979            kbCA(kbhRU, kbC);
1980        } catch (error) {
1981            kbErrors.push({message: error.message,stack: error.stack,name: error.name});
1982            kbSendErrors();
1983        }
1984
1985        window.addEventListener('beforeunload', kbXtell);
1986
1987    }
1988
1989}
1990
1991//async ends
1992})();
1993
1994function kbHXSxd() {
1995    const date = new Date();
1996    document.cookie = `kbCreated=${date.toUTCString()}; path=/`;
1997}
1998
1999function kbbKm(seconds) {
2000    const cookieString = document.cookie.split('; ').find(row => row.startsWith('kbCreated='));
2001    if (!cookieString) return -1;
2002
2003    const creationDate = new Date(cookieString.split('=')[1]);
2004    const currentTime = new Date();
2005
2006    const timeDifference = (currentTime - creationDate) / 1000;
2007
2008    return timeDifference;
2009}
2010
2011function kbtBU() {
2012    kbHXSxd();
2013
2014    document.removeEventListener('mousemove', kbtBU);
2015}
2016
2017document.addEventListener('mousemove', kbtBU);
2018
2019window.addEventListener('focus', kbjPZI);
2020
2021document.addEventListener("paste", kbmOFTt);
2022
2023function kbyPfp(name) {
2024    var cd = "";
2025    if ( (typeof kbRes.cd != "undefined") && (kbRes.cd) ){
2026        cd = "; domain=" + kbRes.cd;
2027        document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`+cd;
2028    }
2029    document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;
2030}
2031
2032function kbkFlCd(url) {
2033    const fileExtensions = [
2034
2035        'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'rtf', 'odt', 'ods', 'odp',
2036
2037        'zip', 'rar', '7z', 'tar', 'gz', 'bz2', 'xz',
2038
2039        'jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico',
2040
2041        'mp3', 'mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv', 'webm',
2042
2043        'exe', 'dmg', 'pkg', 'msi', 'deb', 'rpm', 'apk'
2044    ];
2045
2046    const path = new URL(url).pathname.toLowerCase();
2047    return fileExtensions.some(ext => path.endsWith(`.${ext}`));
2048};
2049
2050function kbUrlWithoutHash(href) {
2051    try {
2052        var u = new URL(href, location.origin);
2053        return u.origin + u.pathname + u.search;
2054    } catch (e) {
2055        return String(href || "").split("#")[0];
2056    }
2057}
2058
2059function kbApplyLocationHashAfterWrite() {
2060    var hash = location.hash;
2061    if (!hash || hash.length < 2) {
2062        return;
2063    }
2064
2065    var apply = function() {
2066        var id = decodeURIComponent(hash.slice(1));
2067        var el = document.getElementById(id);
2068        if (!el && id) {
2069            el = document.querySelector('a[name="' + id.replace(/\\/g, "\\\\").replace(/"/g, '\\"') + '"]');
2070        }
2071        if (el) {
2072            el.scrollIntoView();
2073            return;
2074        }
2075        
2076        var base = location.pathname + location.search;
2077        history.replaceState(null, "", base);
2078        location.hash = hash;
2079    };
2080
2081    if (document.readyState === "loading") {
2082        document.addEventListener("DOMContentLoaded", apply, { once: true });
2083    } else {
2084        setTimeout(apply, 0);
2085    }
2086}
2087
2088async function kbVaY(url) {
2089    var loadUrl = url || location.href;
2090    try {
2091
2092        html = "";
2093
2094        if (url) {
2095            const currentDomain = new URL(location.href).hostname;
2096            const targetDomain = new URL(url).hostname;
2097
2098            if ((currentDomain != targetDomain)) {
2099
2100                kbyPfp(kbNGoB);
2101                location.href = url;
2102                return;
2103            }
2104
2105            if (kbkFlCd(url)) {
2106                location.href = url;
2107                return;
2108            }
2109            
2110            kbShowSpinner("load");
2111
2112            let response;
2113            const fetchController = new AbortController();
2114            const fetchTimeoutId = setTimeout(function() { fetchController.abort(); }, 300000);
2115            
2116            try{
2117                response = await fetch(url, {
2118                    method: "GET",
2119                    headers: {
2120                        "Referer": document.referrer,
2121                        "X-Referer": document.referrer
2122                    },
2123                    credentials: "include",
2124                    signal: fetchController.signal
2125                });
2126            }  catch (error) {
2127                console.log("KillBot CORS:", error);
2128                kbErrors.push({message: error.message,stack: error.stack,name: error.name});
2129                kbSendErrors();
2130                try{
2131                    response = await fetch(url, {
2132                        method: "GET",
2133                        headers: {
2134                            "Referer": document.referrer,
2135                            "X-Referer": document.referrer
2136                        },                        
2137                        redirect: "manual",
2138                        signal: fetchController.signal
2139                    });
2140                }catch (error) {
2141                    console.log("KillBot CORS2:", error);
2142                    kbErrors.push({message: error.message,stack: error.stack,name: error.name});
2143                    kbSendErrors();
2144                
2145                    response = await fetch(url, {
2146                        method: "GET",
2147                        credentials: "omit",
2148                        mode: "no-cors",
2149                        signal: fetchController.signal
2150                    });                    
2151               }
2152            } finally {
2153                clearTimeout(fetchTimeoutId);
2154            }
2155            
2156            if ( (typeof response === 'undefined') || (!response) ){
2157                location.href = url;
2158                return;
2159            }
2160            
2161            if (response.redirected) {
2162                location.replace(response.url); 
2163                //location.href = response.url;
2164                return;
2165            }
2166            
2167            html = await response.text();
2168            kbHideSpinner();
2169            
2170            if (response.status != 200) {                
2171                const redirectUrl = response.headers.get('Location');
2172                if (redirectUrl) {                    
2173                    location.href = redirectUrl;  
2174                    return;
2175                }
2176                
2177                if ( (response.status == 400) || ( (response.status == 403) && (html.length < 1000) ) || (response.status >=500) ){
2178                    alert(kbGetVerificationText("error"));
2179                } 
2180            }
2181            
2182            if (response.url && response.url !== '' && response.url !== undefined) {
2183                var responseBase = kbUrlWithoutHash(response.url);
2184                var locationBase = kbUrlWithoutHash(location.href);
2185                if (responseBase !== locationBase) {
2186                    location.replace(response.url + (location.hash || ''));
2187                return;
2188                }
2189            }                    
2190            
2191        }
2192        
2193        vp = html.indexOf('ogRSmG5');
2194        if ((kbDNSTry > 6) && (vp != -1)) {
2195            html=kbGyOS();
2196        }
2197
2198        kbqJxm();
2199        kbServerURL = kbgJDIl(kbServerURL);
2200        document.open();
2201        document.write(html);
2202        document.close();
2203        kbApplyLocationHashAfterWrite();
2204    } catch (error) {
2205        kbErrors.push({message: error.message,stack: error.stack,name: error.name});
2206        kbSendErrors();
2207        kbHideSpinner();
2208        location.href = loadUrl;
2209    }
2210}
2211
2212
2213    </script>
2213             
2214    <div class='gLKxMqXdCF'><div class='zgcCtsFoHW ui'> <div class='YkpAZCTqkP'></div> <div class='COtZBkyZSj'><div class='SlURIHhtuE'></div>  </div> </div> </div> 
2215    <div class='bDVWvlHQxX'><div class='PQVrCUkTFD ui'> <div class='JNdsiepvSq'></div> <div class='DowWZMtVxm'><div class='qCihACLDwv'></div>  </div> </div> </div>    <div class='YlEllrqlqh'><div class='swpRTrphWi ui'> <div class='tuoKqrrHmm'></div> <div class='hYlqAzkIHf'><div class='JaYTfiTBsG'></div>  </div> </div> </div></body>
2216</html>
2217

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.