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

Signing you up...

Thank you for signing up!

PHP Decode

eval(base64_decode("cmVxdWlyZSBfX0RJUl9fLicvdmVuZG9yL2F1dG9sb2FkLnBocCc7CiRpZyA9IG5ldyBcSW..

Decoded Output download

require __DIR__.'/vendor/autoload.php';
$ig = new \InstagramAPI\Instagram();

output_clean("
    __  ___                __            __   _                          __ 
   /  |/  /___ ___________/ /___  ____  / /__(_)___  ____ _  ____  ___  / /_
  / /|_/ / __ `/ ___/ ___/ / __ \/ __ \/ //_/ / __ \/ __ `/ / __ \/ _ \/ __/
 / /  / / /_/ (__  |__  ) / /_/ / /_/ / ,< / / / / / /_/ / / / / /  __/ /_  
/_/  /_/\__,_/____/____/_/\____/\____/_/|_/_/_/ /_/\__, (_)_/ /_/\___/\__/  
                                                  /____/                          
");

output_clean("Masslooking Business");
output_clean("v.3.1");
output_clean("");
output_clean(" Masslooking.net");
output_clean("");

run($ig);

/**
 * Let's start the show
 */
function run($ig) {
    try {

        output('Please provide login data of your Instagram Account.');

        $login = getVarFromUser("Login");
        if (empty($login)) {
            do { 
                $login = getVarFromUser("Login"); 
            } while (empty($login));
        }

        $password = getVarFromUser("Password");
        if (empty($password)) {
            do { 
                $password = getVarFromUser("Password");
            } while (empty($password));
        }

        $first_loop = true;
        do {
            if ($first_loop) {
                output("(Optional) Set proxy, if needed. It's better to use a proxy from the country from you running this script.");
                output("Proxy should match following pattern:");
                output("http://ip:port or http://username:password@ip:port");
                output("Don't use in pattern https://.");
                output("Type 3 to skip and don't use proxy.");
                $first_loop = false;
            } else {
                output("Proxy - [NOT VALID]");
                output("Please check the proxy syntax and try again.");
            }

            $proxy = getVarFromUser("Proxy");

            if (empty($proxy)) {
                do { 
                    $proxy = getVarFromUser("Proxy");
                } while (empty($proxy));
            }

            if ($proxy == '3') {
                // Skip proxy setup
                break;
            }
        } while (!isValidProxy($proxy));

        if ($proxy == "3") {
           // Skip proxy setup
        } else {
            output("Proxy - [OK]");
            $ig->setProxy($proxy);
        }

        output('Please choose the masslooking estimated speed.');
        output('Type integer value without spaces from 1 to 5 000 000 stories/day or 0 for maximum possible speed.');
        output('When you are using the maximum speed you may exceed the masslooking limits per day if this account actively used by a user in the Instagram app at the same time.');
        output('If you are using another type of automation, we recommend to you reducing masslooking speed to find your golden ratio. For example: 400 000 stories/day.');
        $speed = (int)getVarFromUser("Speed");

        if ($speed > 5000000) {
            do { 
                output("Speed value is incorrect. Type integer value from 1 to 5 000 000 stories/day.");
                output('Type 0 for maximum speed.');
                $speed = (int)getVarFromUser("Delay");
            } while ($speed > 5000000);
        }

        if ($speed == 0) {
            output("Maximum speed enabled.");
            $delay = 34;
        } else {
            output("Speed set to " . $speed . " stories/day.");
            if ($speed > 5000000) {
                $speed = 500000;
            }
            $delay = round(60*60*24*200/$speed);
        }

        $is_connected = false;
        $is_connected_count = 0;
        $fail_message = "There is a problem with your Ethernet connection or Instagram is down at the moment. We couldn't establish connection with Instagram 10 times. Please try again later.";

        do {
            if ($is_connected_count == 10) {
                if ($e->getResponse()) {
                    output($e->getMessage());
                }
                throw new Exception($fail_message);
            }

            try {
                if ($is_connected_count == 0) {
                    output("Emulation of an Instagram app initiated...");
                }
                $login_resp = $ig->login($login, $password);
    
                if ($login_resp !== null && $login_resp->isTwoFactorRequired()) {
                    // Default verification method is phone
                    $twofa_method = '1';
    
                    // Detect is Authentification app verification is available 
                    $is_totp = json_decode(json_encode($login_resp), true);
                    if ($is_totp['two_factor_info']['totp_two_factor_on'] == '1'){
                        output("Two-factor authentication required, please enter the code from you Authentication app");
                        $twofa_id = $login_resp->getTwoFactorInfo()->getTwoFactorIdentifier();
                        $twofa_method = '3';
                    } else {
                        output("Two-factor authentication required, please enter the code sent to your number ending in %s", 
                            $login_resp->getTwoFactorInfo()->getObfuscatedPhoneNumber());
                        $twofa_id = $login_resp->getTwoFactorInfo()->getTwoFactorIdentifier();
                    }
    
                    $twofa_code = getVarFromUser("Two-factor code");
    
                    if (empty($twofa_code)) {
                        do { 
                            $twofa_code = getVarFromUser("Two-factor code");
                        } while (empty($twofa_code));
                    }
    
                    $is_connected = false;
                    $is_connected_count = 0;
                    do {
                        if ($is_connected_count == 10) {
                            if ($e->getResponse()) {
                                output($e->getMessage());
                            }
                            throw new Exception($fail_message);
                        }

                        if ($is_connected_count == 0) {
                            output("Two-factor authentication in progress...");
                        }

                        try {
                            $twofa_resp = $ig->finishTwoFactorLogin($login, $password, $twofa_id, $twofa_code, $twofa_method);
                            $is_connected = true;
                        } catch (\InstagramAPI\Exception\NetworkException $e) {
                            sleep(7);
                        } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                            sleep(7);
                        } catch (\InstagramAPI\Exception\InvalidSmsCodeException $e) {
                            $is_code_correct = false;
                            $is_connected= true;
                            do {
                                output("Code is incorrect. Please check the syntax and try again.");
                                $twofa_code = getVarFromUser("Two-factor code");
            
                                if (empty($twofa_code)) {
                                    do { 
                                        $twofa_code = getVarFromUser("Security code");
                                    } while (empty($twofa_code));
                                }
            
                                $is_connected = false;
                                $is_connected_count = 0;
                                do {
                                    try {
                                        if ($is_connected_count == 10) {
                                            if ($e->getResponse()) {
                                                output($e->getMessage());
                                            }
                                            throw new Exception($fail_message);
                                        }

                                        if ($is_connected_count == 0) {
                                            output("Verification in progress...");
                                        }
                                        $twofa_resp = $ig->finishTwoFactorLogin($login, $password, $twofa_id, $twofa_code, $twofa_method);
                                        $is_code_correct = true;
                                        $is_connected = true;
                                    } catch (\InstagramAPI\Exception\NetworkException $e) { 
                                        sleep(7);
                                    } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                                        sleep(7);
                                    } catch (\InstagramAPI\Exception\InvalidSmsCodeException $e) {
                                        $is_code_correct = false;
                                        $is_connected = true;
                                    } catch (\Exception $e) {
                                        throw $e;
                                    }
                                    $is_connected_count += 1;
                                } while (!$is_connected);
                            } while (!$is_code_correct);
                        } catch (\Exception $e) {
                            throw $e;
                        }

                        $is_connected_count += 1;
                    } while (!$is_connected);
                }

                $is_connected = true;
            } catch (\InstagramAPI\Exception\NetworkException $e) {
                sleep(7);
            } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                sleep(7);
            } catch (\InstagramAPI\Exception\CheckpointRequiredException $e) {
                throw new Exception("Please go to Instagram website or mobile app and pass checkpoint!");
            } catch (\InstagramAPI\Exception\ChallengeRequiredException $e) {

                if (!($ig instanceof InstagramAPI\Instagram)) {
                    throw new Exception("Oops! Something went wrong. Please try again later! (invalid_instagram_client)");
                }
        
                if (!($e instanceof InstagramAPI\Exception\ChallengeRequiredException)) {
                    throw new Exception("Oops! Something went wrong. Please try again later! (unexpected_exception)");
                }

                if (!$e->hasResponse() || !$e->getResponse()->isChallenge()) {
                    throw new Exception("Oops! Something went wrong. Please try again later! (unexpected_exception_response)");
                }
        
                $challenge = $e->getResponse()->getChallenge();

                if (is_array($challenge)) {
                    $api_path = $challenge["api_path"];
                } else {
                    $api_path = $challenge->getApiPath();
                }

                output("Instagram want to send you a security code to verify your identity.");
                output("How do you want receive this code?");
                output("1 - [Email]");
                output("2 - [SMS]");
                output("3 - [Exit]");

                $choice = getVarFromUser("Choice");

                if (empty($choice)) {
                    do { 
                        $choice = getVarFromUser("Choice");
                    } while (empty($choice));
                }

                if ($choice == '1' || $choice == '2' || $choice == '3') {
                    // All fine
                } else {
                    $is_choice_ok = false;
                    do {
                        output("Choice is incorrect. Type 1, 2 or 3.");
                        $choice = getVarFromUser("Choice");

                        if (empty($choice)) {
                            do { 
                                $choice = getVarFromUser("Choice");
                            } while (empty($choice));
                        }

                        if ($confirm == '1' || $confirm == '2' || $confirm == '3') { 
                            $is_choice_ok = true;
                        }
                    } while (!$is_choice_ok);
                }

                $challange_choice = 0;
                if ($choice == '3') {
                    run($ig);
                } elseif ($choice == '1') {
                    // Email
                    $challange_choice = 1;
                } else {
                    // SMS
                    $challange_choice = 0;
                }

                $is_connected = false;
                $is_connected_count = 0;
                do {
                    if ($is_connected_count == 10) {
                        if ($e->getResponse()) {
                            output($e->getMessage());
                        }
                        throw new Exception($fail_message);
                    }

                    try {
                        $challenge_resp = $ig->sendChallangeCode($api_path, $challange_choice);

                        // Failed to send challenge code via email. Try with SMS.
                        if ($challenge_resp->status != "ok") {
                            $challange_choice = 0;
                            sleep(7);
                            $challenge_resp = $ig->sendChallangeCode($api_path, $challange_choice);
                        }

                        $is_connected = true;
                    } catch (\InstagramAPI\Exception\NetworkException $e) {
                        sleep(7);
                    } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                        sleep(7);
                    } catch (\Exception $e) {
                        throw $e;
                    }

                    $is_connected_count += 1;
                } while (!$is_connected);

                if (isset($challenge_resp->message)) {
                    if ($challenge_resp->message == "This field is required.") {
                        output("Instagram already sent to you verification code to your email or mobile phone number. Please enter this code.");
                    }
                } elseif ($challenge_resp->status != "ok") {
                    output("Instagram Response: " . json_encode($challenge_resp));
                    output("Couldn't send a verification code for the login challenge. Please try again later.");
                    output("- Is this account has attached mobile phone number in settings?");
                    output("- If no, this can be a reason of this problem. You should add mobile phone number in account settings.");
                    throw new Exception("- Sometimes Instagram can force you to phone verification challenge process.");
                }

                if (isset($challenge_resp->step_data->contact_point)){
                    $contact_point = $challenge_resp->step_data->contact_point;
                    if ($choice == 2) {
                        output("Enter the code sent to your number ending in " . $contact_point . ".");
                    } else {
                        output("Enter the 6-digit code sent to the email address " . $contact_point . ".");
                    }
                }

                $security_code = getVarFromUser("Security code");

                if (empty($security_code)) {
                    do { 
                        $security_code = getVarFromUser("Security code");
                    } while (empty($security_code));
                }

                if ($security_code == "3") {
                    throw new Exception("Reset in progress...");
                }

                // Verification challenge
                $ig = challange($ig, $login, $password, $api_path, $security_code, $proxy);

                if ($igp == "3") {
                    throw new Exception("Reset in progress...");
                }

            } catch (\InstagramAPI\Exception\AccountDisabledException $e) {
                throw new Exception("Your account has been disabled for violating Instagram terms. Go Instagram website or mobile app to learn how you may be able to restore your account.");
            } catch (\InstagramAPI\Exception\ConsentRequiredException $e) {
                throw new Exception("Instagram updated Terms and Data Policy. Please go to Instagram website or mobile app to review these changes and accept them.");
            } catch (\InstagramAPI\Exception\SentryBlockException $e) {
                throw new Exception("Please take a 24 hours break for this account and try again. Your account has been banned from Instagram API for spam behavior or otherwise abusing.");
            } catch (\InstagramAPI\Exception\IncorrectPasswordException $e) {
                throw new Exception("The password you entered is incorrect. Please try again.");
            } catch (\InstagramAPI\Exception\InvalidUserException $e) {
                throw new Exception("The username you entered doesn't appear to belong to an account. Please check your username and try again.");
            } catch (\Exception $e) {
                throw $e;
            }

            $is_connected_count += 1;
        } while (!$is_connected);

        output("Logged as @" . $login . " successfully.");

        $data = define_targets($ig);
        masslooking_v2($data, $ig, $delay);

    } catch (\Exception $e){
        output($e->getMessage());
        run($ig);
    }
}

/**
 * Define targets for masslooking
 */
function define_targets($ig) {

    do {
        output("Please define the targets.");
        output("Write all Instagram profile usernames via comma without '@' symbol.");
        output("Example: apple, instagram, zendaya");
        $targets_input = getVarFromUser("Usernames");

        if (empty($targets_input)) {
            do { 
                $targets_input = getVarFromUser("Usernames");
            } while (empty($targets_input));
        }

        $targets_input = str_replace(' ','',$targets_input);
        $targets = [];
        $targets = explode(',',trim($targets_input));
        $targets = array_unique($targets);

        $pks = [];
        $filtered_targets = [];
        foreach ($targets as $target) {

            $is_connected = false;
            $is_connected_count = 0;
            do {
                if ($is_connected_count == 10) {
                    if ($e->getResponse()) {
                        output($e->getMessage());
                    }
                    $fail_message = "There is a problem with your Ethernet connection or Instagram is down at the moment. We couldn't establish connection with Instagram 10 times. Please try again later.";
                    output($fail_message);
                    run($ig);
                }

                try {
                    $user_resp = $ig->people->getUserIdForName($target);
                    output("@" . $target . " - [OK]");
                    $filtered_targets[] = $target;
                    $pks[] = $user_resp;
                    $is_connected = true;
                    if (($target != $targets[count($targets) - 1]) && (count($targets) > 0)) {
                        sleep(1);
                    }
                } catch (\InstagramAPI\Exception\NetworkException $e) { 
                    sleep(7);
                } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                    sleep(7);
                } catch (\InstagramAPI\Exception\ChallengeRequiredException $e) {
                    output("Please login again and pass verification challenge. Instagram will send you a security code to verify your identity.");
                    run($ig);
                } catch (\InstagramAPI\Exception\CheckpointRequiredException $e) {
                    output("Please go to Instagram website or mobile app and pass checkpoint!");
                    run($ig);
                } catch (\InstagramAPI\Exception\AccountDisabledException $e) {
                    output("Your account has been disabled for violating Instagram terms. Go Instagram website or mobile app to learn how you may be able to restore your account.");
                    output("Use this form for recovery your account: https://help.instagram.com/contact/1652567838289083");
                    run($ig);
                } catch (\InstagramAPI\Exception\ConsentRequiredException $e) {
                    output("Instagram updated Terms and Data Policy. Please go to Instagram website or mobile app to review these changes and accept them.");
                    run($ig);
                } catch (\InstagramAPI\Exception\SentryBlockException $e) {
                    output("Access to Instagram API restricted for this account.");
                    run($ig);
                } catch (\InstagramAPI\Exception\ThrottledException $e) {
                    output("Throttled by Instagram because of too many API requests.");
                    output("Please login again after 1 hour. You reached Instagram limits.");
                    run($ig);
                } catch (InstagramAPI\Exception\NotFoundException $e) {
                    $is_connected = true;
                    $is_username_correct = false;
                    do {
                        output("Instagram profile username @" . $target . " is incorrect or maybe user just blocked you (Login to Instagram website or mobile app and check that).");
                        output("Type 3 for skip this target.");
                        $target_new = getVarFromUser("Please provide valid username");
    
                        if (empty($target_new)) {
                            do { 
                                $target_new = getVarFromUser("Please provide valid username");
                            } while (empty($target_new));
                        }
    
                        if ($target_new == "3") {
                            break;
                        } else {
                            $is_connected = false;
                            $is_connected_count = 0;
                            do { 
                                if ($is_connected_count == 10) {
                                    if ($e->getResponse()) {
                                        output($e->getMessage());
                                    }
                                    $fail_message = "There is a problem with your Ethernet connection or Instagram is down at the moment. We couldn't establish connection with Instagram 10 times. Please try again later.";
                                    output($fail_message);
                                    run($ig);
                                }

                                try {
                                    $user_resp = $ig->people->getUserIdForName($target_new);
                                    output("@" . $target_new . " - [OK]");
                                    $filtered_targets[] = $target_new;
                                    $pks[] = $user_resp;
                                    $is_username_correct = true;
                                    $is_connected = true;
                                } catch (\InstagramAPI\Exception\NetworkException $e) { 
                                    sleep(7);
                                } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                                    sleep(7);
                                } catch (InstagramAPI\Exception\NotFoundException $e) {
                                    $is_username_correct = false;
                                    $is_connected = true;
                                } catch (\Exception $e) {
                                    output($e->getMessage());
                                    run($ig);
                                }
                                $is_connected_count += 1;
                            } while (!$is_connected);
                        }
                    } while (!$is_username_correct);
                } catch (Exception $e){
                    output($e->getMessage());
                    run($ig);
                }
                
                $is_connected_count += 1;
            } while (!$is_connected);
        }
    } while (empty($filtered_targets));

    $targets = array_unique($filtered_targets);
    $pks = array_unique($pks);

    $data = [];
    for ($i = 0; $i < count($targets); $i++) {
        $data[$i] = [
            'username' => $targets[$i],
            'pk' => $pks[$i],
        ];
    }

    output("Selected " . count($targets) . " targets: @" . implode(", @", $targets) . ".");
    output("Please confirm that the selected targets are correct.");
    output("1 - [Yes]");
    output("2 - [No]");
    output("3 - [Exit]");

    $confirm = getVarFromUser("Choice");

    if (empty($confirm)) {
        do { 
            $confirm = getVarFromUser("Choice");
        } while (empty($confirm));
    }

    if ($confirm == '1' || $confirm == '2' || $confirm == '3') {
        // All fine
    } else {
        $is_choice_ok = false;
        do {
            output("Choice is incorrect. Type 1, 2 or 3.");
            $confirm = getVarFromUser("Choice");

            if (empty($confirm)) {
                do { 
                    $confirm = getVarFromUser("Choice");
                } while (empty($confirm));
            }

            if ($confirm == '1' || $confirm == '2' || $confirm == '3') { 
                $is_choice_ok = true;
            }
        } while (!$is_choice_ok);
    }

    if ($confirm == '3') {
        run($ig);
    } elseif ($confirm == '2') {
        $data = define_targets($ig);
    } else {
        // All fine. Going to masslooking.
    }

    return $data;
}

/**
 * Get varable from user
 */
function getVarFromUser($text) {
    echo $text . ": ";
    $var = trim(fgets(STDIN));
    return $var;
}

/**
 * Output message with data to console
 */
function output($message) {
    echo "[", date("H:i:s"), "] ", $message, PHP_EOL;
}

/**
 * Output clean message to console
 */
function output_clean($message) {
    echo $message, PHP_EOL;
}

/**
 * Validates proxy address
 */
function isValidProxy($proxy) {
    output("Connecting to Instagram...");

    try {
        $client = new \GuzzleHttp\Client();
        $res = $client->request('GET', 'http://www.instagram.com', 
                                [
                                    "timeout" => 60,
                                    "proxy" => $proxy
                                ]);
        $code = $res->getStatusCode();
        $is_connected = true;
    } catch (\Exception $e) {
        output($e->getMessage());
        return false;
    }

    return $code == 200;
}

/**
 * Validates proxy address
 */
function finishLogin($ig, $login, $password, $proxy) {
    $is_connected = false;
    $is_connected_count = 0;

    try {
        do {
            if ($is_connected_count == 10) {
                if ($e->getResponse()) {
                    output($e->getMessage());
                }
                $fail_message = "There is a problem with your Ethernet connection or Instagram is down at the moment. We couldn't establish connection with Instagram 10 times. Please try again later.";
                output($fail_message);
                run($ig);
            }

            if ($proxy == "3") {
                // Skip proxy setup
            } else {
                $ig->setProxy($proxy);
            }

            try {
                $login_resp = $ig->login($login, $password);
        
                if ($login_resp !== null && $login_resp->isTwoFactorRequired()) {
                    // Default verification method is phone
                    $twofa_method = '1';

                    // Detect is Authentification app verification is available 
                    $is_totp = json_decode(json_encode($login_resp), true);
                    if ($is_totp['two_factor_info']['totp_two_factor_on'] == '1'){
                        output("Two-factor authentication required, please enter the code from you Authentication app");
                        $twofa_id = $login_resp->getTwoFactorInfo()->getTwoFactorIdentifier();
                        $twofa_method = '3';
                    } else {
                        output("Two-factor authentication required, please enter the code sent to your number ending in %s", 
                            $login_resp->getTwoFactorInfo()->getObfuscatedPhoneNumber());
                        $twofa_id = $login_resp->getTwoFactorInfo()->getTwoFactorIdentifier();
                    }

                    $twofa_code = getVarFromUser("Two-factor code");

                    if (empty($twofa_code)) {
                        do { 
                            $twofa_code = getVarFromUser("Two-factor code");
                        } while (empty($twofa_code));
                    }

                    $is_connected = false;
                    $is_connected_count = 0;
                    do {
                        if ($is_connected_count == 10) {
                            if ($e->getResponse()) {
                                output($e->getMessage());
                            }
                            output($fail_message);
                            run($ig);
                        }

                        if ($is_connected_count == 0) {
                            output("Two-factor authentication in progress...");
                        }

                        try {
                            $twofa_resp = $ig->finishTwoFactorLogin($login, $password, $twofa_id, $twofa_code, $twofa_method);
                            $is_connected = true;
                        } catch (\InstagramAPI\Exception\NetworkException $e) {
                            sleep(7);
                        } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                            sleep(7);
                        } catch (\InstagramAPI\Exception\InvalidSmsCodeException $e) {
                            $is_code_correct = false;
                            $is_connected= true;
                            do {
                                output("Code is incorrect. Please check the syntax and try again.");
                                $twofa_code = getVarFromUser("Two-factor code");
            
                                if (empty($twofa_code)) {
                                    do { 
                                        $twofa_code = getVarFromUser("Security code");
                                    } while (empty($twofa_code));
                                }
            
                                $is_connected = false;
                                $is_connected_count = 0;
                                do {
                                    try {
                                        if ($is_connected_count == 10) {
                                            if ($e->getResponse()) {
                                                output($e->getMessage());
                                            }
                                            output($fail_message);
                                            run($ig);
                                        }

                                        if ($is_connected_count == 0) {
                                            output("Verification in progress...");
                                        }
                                        $twofa_resp = $ig->finishTwoFactorLogin($login, $password, $twofa_id, $twofa_code, $twofa_method);
                                        $is_code_correct = true;
                                        $is_connected = true;
                                    } catch (\InstagramAPI\Exception\NetworkException $e) { 
                                        sleep(7);
                                    } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                                        sleep(7);
                                    } catch (\InstagramAPI\Exception\InvalidSmsCodeException $e) {
                                        $is_code_correct = false;
                                        $is_connected = true;
                                    } catch (\Exception $e) {
                                        throw new $e;
                                    }
                                    $is_connected_count += 1;
                                } while (!$is_connected);
                            } while (!$is_code_correct);
                        } catch (\Exception $e) {
                            throw $e;
                        }

                        $is_connected_count += 1;
                    } while (!$is_connected);
                }

                $is_connected = true;
            } catch (\InstagramAPI\Exception\NetworkException $e) { 
                sleep(7);
            } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                sleep(7);
            } catch (\InstagramAPI\Exception\CheckpointRequiredException $e) {
                throw new Exception("Please go to Instagram website or mobile app and pass checkpoint!");
            } catch (\InstagramAPI\Exception\ChallengeRequiredException $e) {
                output("Instagram Response: " . json_encode($e->gerResponse()));
                output("Couldn't complete the verification challenge. Please try again later.");
                throw new Exception("Developer code: Challenge loop.");
            } catch (\Exception $e) {
                throw $e;
            }

            $is_connected_count += 1;
        } while (!$is_connected);
    } catch (\Exception $e){
        output($e->getMessage());
        run($ig);
    }

    return $ig;
}

/**
 * Verification challenge
 */
function challange($ig, $login, $password, $api_path, $security_code, $proxy) {
    $is_connected = false;
    $is_connected_count = 0;
    $fail_message = "There is a problem with your Ethernet connection or Instagram is down at the moment. We couldn't establish connection with Instagram 10 times. Please try again later.";

    do {
        if ($is_connected_count == 10) {
            if ($e->getResponse()) {
                output($e->getMessage());
            }
            throw new Exception($fail_message);
        }

        if ($is_connected_count == 0) {
            output("Verification in progress...");
        }

        try {
            $challenge_resp = $ig->finishChallengeLogin($login, $password, $api_path, $security_code);
            $is_connected = true;
        } catch (\InstagramAPI\Exception\NetworkException $e) {
            sleep(7);
        } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
            sleep(7);
        } catch (\InstagramAPI\Exception\InstagramException $e) {

            if ($e->hasResponse()) {
                $msg = $e->getResponse()->getMessage();
                output($msg);
            } else {
                $msg = explode(":", $e->getMessage(), 2);
                $msg = end($msg);
                output($msg);
            }

            output("Type 3 - to exit.");

            $security_code = getVarFromUser("Security code");

            if (empty($security_code)) {
                do { 
                    $security_code = getVarFromUser("Security code");
                } while (empty($security_code));
            }

            if ($security_code == "3") {
                throw new Exception("Reset in progress...");
            }

        } catch (\Exception $e) {
            $msg = $e->getMessage();
            if ($msg == 'Invalid Login Response at finishChallengeLogin().') {
                sleep(7);
                $ig = finishLogin($ig, $login, $password, $proxy);
                $is_connected = true;
            } else {
                throw $e;
            }
        }

        $is_connected_count += 1;
    } while (!$is_connected);

    return $ig;
}

/**
 * Masslooking loop - Algorithm #2
 */
function masslooking_v2($data, $ig, $delay) {

    $view_count = 0;
    $st_count = 0;
    $st_count_seen = 0;
    $begin = strtotime(date("Y-m-d H:i:s"));
    $begin_ms = strtotime(date("Y-m-d H:i:s"));
    $begin_f = strtotime(date("Y-m-d H:i:s"));
    $speed = 0;
    $delitel = 0;
    $counter1 = 0;
    $counter2 = 0;
    $stories = [];

    output("Masslooking loop started.");

    $targets = [];
    $targets = $data;

    for ($i = 0; $i < count($data); $i++) {
        $data[$i] += [
            'rank_token' => \InstagramAPI\Signatures::generateUUID(), 
            'users_count' => 0, 
            'max_id' => null,
            'begin_gf' => null
        ];
    }

    do {
        foreach ($data as $key => $d) {
            try {
                if ($d['max_id'] == null) {
                    $is_gf_first = 1;
                }

                if (!empty($d['begin_gf'])) {
                    $current_time = strtotime(date("Y-m-d H:i:s"));
                    if (($current_time - $d['begin_gf']) < 7) {
                        $sleep_time = 7 - ($current_time - $d['begin_gf']);
                        sleep($sleep_time);
                    }
                }

                $followers = $ig->people->getFollowers($d['pk'], $d['rank_token'], null, $d['max_id']);
                $data[$key]['begin_gf'] = strtotime(date("Y-m-d H:i:s"));

                if (empty($followers->getUsers())) { 
                    output("@" . $d['username'] . " don't have any follower.");
                    unset($data[$key]);
                    continue;
                }

                // Get next $max_id value
                $data[$key]['max_id'] = $followers->getNextMaxId();

                $followers_ids = [];
                foreach ($followers->getUsers() as $follower) {
                    $followers_ids[] = $follower->getPk();
                }

                $data[$key]['users_count'] = $d['users_count'] + count($followers_ids);

                $number = count($followers_ids);

                if ($is_gf_first) {
                    output($number . " followers of @" . $d['username'] . " collected.");
                    $is_gf_first = 0;
                } else {
                    output("Next " . $number . " followers of @" . $d['username'] . " collected. Total: " . number_format($data[$key]['users_count'], 0, '.', ' ') . " followers of @" . $d['username'] . " parsed.");
                }

                $index_new = 0;
                $index_old = 0;
                $last = false;

                do { 
                    $index_new += 13;

                    if (!isset($followers_ids[$index_new])) {
                        do {
                            $index_new -= 1;
                        } while (!isset($followers_ids[$index_new]));
                        $last = true;
                    }

                    if ($index_new < $index_old) {
                        break;
                    }

                    $ids = [];
                    for ($i = $index_old; $i <= $index_new; $i++) {
                        $ids[] = $followers_ids[$i];
                    }

                    try {
                        $stories_reels = $ig->story->getReelsMediaFeed($ids);

                        $counter1 += 1;

                        if (isset($stories_reels) && $stories_reels->isOk() && count($stories_reels->getReels()->getData()) > 0) {
                            // Save user story reels's to array
                            $reels = [];
                            $reels = $stories_reels->getReels()->getData();

                            foreach ($reels as $r) {
                                $items = [];
                                $stories_loop = [];
                                $items = $r->getItems();
                                
                                foreach ($items as $item) {
                                    if (!$item->getId()) {
                                        // Item is not valid
                                        continue;
                                    }
                                    $stories_loop[] = $item;
                                }

                                if (empty($stories)) {
                                    $stories = $stories_loop;
                                } else {
                                    $stories = array_merge($stories, $stories_loop);
                                }

                                $st_count =  $st_count + count($stories_loop);
                                $view_count = $view_count + count($stories_loop);

                                $now_f = strtotime(date("Y-m-d H:i:s"));
                                if ($now_f - $begin_f > 1) {
                                    $begin_f = strtotime(date("Y-m-d H:i:s"));
                                    // output($st_count . " stories found. / Debug: getReelsMediaFeed (" . $counter1 . "), markMediaSeen (" . $counter2 . ")");
                                    output($st_count . " stories found.");
                                }

                                if ($st_count > 200) {
                                    // output($st_count . " stories found. / Debug: getReelsMediaFeed (" . $counter1 . "), markMediaSeen (" . $counter2 . ")");
                                    output($st_count . " stories found.");

                                    $now_ms = strtotime(date("Y-m-d H:i:s"));
                                    if ($now_ms - $begin_ms >= $delay) {
                                        // all fine
                                    } else {
                                        $counter3 = $delay - ($now_ms - $begin_ms);
                                        output("Starting " . $counter3 . " second(s) delay for bypassing Instagram limits.");
                                        do {
                                            output($counter3 . " second(s) left.");
                                            sleep(1);
                                            $counter3 -= 1;
                                        } while ($counter3 != 0);
                                    }

                                    // Mark collected stories as seen
                                    $mark_seen_resp = $ig->story->markMediaSeen($stories);
                                    $begin_ms = strtotime(date("Y-m-d H:i:s"));
                                    
                                    $st_count_seen = number_format($st_count, 0, '.', ' ');
                                    $counter2 += 1;
                                    // output($st_count_seen . " stories marked as seen. / Debug: getReelsMediaFeed (" . $counter1 . "), markMediaSeen (" . $counter2 . ")."); 
                                    output($st_count_seen . " stories marked as seen.");

                                    output_clean("");
                                    output_clean("Total: " . number_format($view_count, 0, '.', ' ') . " stories successfully seen.  Masslooking.net.");
                                    output_clean("");
                
                                    // Initialize arrays and parameters again
                                    $stories = [];
                                    $st_count = 0;
                                }
                            }
                        }
                        
                        if (($st_count > 0) && $last && $data[$key]['max_id'] == null) {
                            // Mark collected stories as seen
                            $mark_seen_resp = $ig->story->markMediaSeen($stories);  
                            
                            $st_count_seen = number_format($st_count, 0, '.', ' ');
                            $counter2 += 1;
                            // output($st_count_seen . " stories marked as seen. / Debug: getReelsMediaFeed (" . $counter1 . "), markMediaSeen (" . $counter2 . ")."); 
                            output($st_count_seen . " stories marked as seen.");
                            output_clean("");
                            output_clean("Total: " . number_format($view_count, 0, '.', ' ') . " stories successfully seen.  Masslooking.net.");
                            output_clean("");

                            // Initialize arrays and parameters again
                            $stories = [];
                            $st_count = 0;
                        }
                    } catch (\InstagramAPI\Exception\NetworkException $e) {
                        output("We couldn't connect to Instagram at the moment. Trying again.");
                        sleep(7);
                        $index_new -= 13;
                        continue;
                    } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                        output("Instagram sent us empty response. Trying again.");
                        sleep(7);
                        $index_new -= 13;
                        continue;
                    } catch (\InstagramAPI\Exception\LoginRequiredException $e) {
                        output("Please login again to your Instagram account. Login required.");
                        run($ig);
                    } catch (\InstagramAPI\Exception\ChallengeRequiredException $e) {
                        output("Please login again and pass verification challenge. Instagram will send you a security code to verify your identity.");
                        run($ig);
                    } catch (\InstagramAPI\Exception\CheckpointRequiredException $e) {
                        output("Please go to Instagram website or mobile app and pass checkpoint!");
                        run($ig);
                    } catch (\InstagramAPI\Exception\AccountDisabledException $e) {
                        output("Your account has been disabled for violating Instagram terms. Go Instagram website or mobile app to learn how you may be able to restore your account.");
                        output("Use this form for recovery your account: https://help.instagram.com/contact/1652567838289083");
                        run($ig);
                    } catch (\InstagramAPI\Exception\ConsentRequiredException $e) {
                        output("Instagram updated Terms and Data Policy. Please go to Instagram website or mobile app to review these changes and accept them.");
                        run($ig);
                    } catch (\InstagramAPI\Exception\SentryBlockException $e) {
                        output("Access to Instagram API restricted for this account.");
                        run($ig);
                    } catch (\InstagramAPI\Exception\ThrottledException $e) {
                        output("Throttled by Instagram because of too many API requests.");
                        output("Please connect account again after 12 hours. You reached Instagram daily limit for masslooking. Just take a break.");
                        run($ig);
                    } catch (Exception $e){
                        output($e->getMessage());
                        sleep(7);
                    }
                    
                    $index_old = $index_new + 1;

                } while ($last == false);

                // Speed related delay
                // sleep($delay);

                // Check is $max_id is null
                if ($data[$key]['max_id'] == null) {
                    output_clean("All stories of @" .  $d['username'] . "'s followers successfully seen.");
                    unset($data[$key]);
                    continue;
                }

            } catch (\InstagramAPI\Exception\NetworkException $e) {
                sleep(7);
            } catch (\InstagramAPI\Exception\EmptyResponseException $e) {
                sleep(7);
            } catch (\InstagramAPI\Exception\LoginRequiredException $e) {
                output("Please login again to your Instagram account. Login required.");
                run($ig);
            } catch (\InstagramAPI\Exception\ChallengeRequiredException $e) {
                output("Please login again and pass verification challenge. Instagram will send you a security code to verify your identity.");
                run($ig);
            } catch (\InstagramAPI\Exception\CheckpointRequiredException $e) {
                output("Please go to Instagram website or mobile app and pass checkpoint!");
                run($ig);
            } catch (\InstagramAPI\Exception\AccountDisabledException $e) {
                output("Your account has been disabled for violating Instagram terms. Go Instagram website or mobile app to learn how you may be able to restore your account.");
                output("Use this form for recovery your account: https://help.instagram.com/contact/1652567838289083");
                run($ig);
            } catch (\InstagramAPI\Exception\ConsentRequiredException $e) {
                output("Instagram updated Terms and Data Policy. Please go to Instagram website or mobile app to review these changes and accept them.");
                run($ig);
            } catch (\InstagramAPI\Exception\SentryBlockException $e) {
                output("Access to Instagram API restricted for this account.");
                run($ig);
            } catch (\InstagramAPI\Exception\ThrottledException $e) {
                output("Throttled by Instagram because of too many API requests.");
                output("Please connect account again after 12 hours. You reached Instagram daily limit for masslooking. Just take a break.");
                run($ig);
            } catch (Exception $e){
                output($e->getMessage());
                sleep(7);
            }
        }
    } while (!empty($data));

    output_clean("All stories related to the targets seen. Starting the new loop.");
    output_clean("");

    masslooking_v2($targets, $ig, $delay); 
}

Did this file decode correctly?

Original Code

eval(base64_decode("cmVxdWlyZSBfX0RJUl9fLicvdmVuZG9yL2F1dG9sb2FkLnBocCc7CiRpZyA9IG5ldyBcSW5zdGFn
cmFtQVBJXEluc3RhZ3JhbSgpOwoKb3V0cHV0X2NsZWFuKCIKICAgIF9fICBfX18gICAgICAgICAg
ICAgICAgX18gICAgICAgICAgICBfXyAgIF8gICAgICAgICAgICAgICAgICAgICAgICAgIF9fIAog
ICAvICB8LyAgL19fXyBfX19fX19fX19fXy8gL19fXyAgX19fXyAgLyAvX18oXylfX18gIF9fX18g
XyAgX19fXyAgX19fICAvIC9fCiAgLyAvfF8vIC8gX18gYC8gX19fLyBfX18vIC8gX18gXC8gX18g
XC8gLy9fLyAvIF9fIFwvIF9fIGAvIC8gX18gXC8gXyBcLyBfXy8KIC8gLyAgLyAvIC9fLyAoX18g
IHxfXyAgKSAvIC9fLyAvIC9fLyAvICw8IC8gLyAvIC8gLyAvXy8gLyAvIC8gLyAvICBfXy8gL18g
IAovXy8gIC9fL1xfXyxfL19fX18vX19fXy9fL1xfX19fL1xfX19fL18vfF8vXy9fLyAvXy9cX18s
IChfKV8vIC9fL1xfX18vXF9fLyAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgL19fX18vICAgICAgICAgICAgICAgICAgICAgICAgICAKIik7CgpvdXRw
dXRfY2xlYW4oIk1hc3Nsb29raW5nIEJ1c2luZXNzIik7Cm91dHB1dF9jbGVhbigidi4zLjEiKTsK
b3V0cHV0X2NsZWFuKCIiKTsKb3V0cHV0X2NsZWFuKCLCqSBNYXNzbG9va2luZy5uZXQiKTsKb3V0
cHV0X2NsZWFuKCIiKTsKCnJ1bigkaWcpOwoKLyoqCiAqIExldCdzIHN0YXJ0IHRoZSBzaG93CiAq
LwpmdW5jdGlvbiBydW4oJGlnKSB7CiAgICB0cnkgewoKICAgICAgICBvdXRwdXQoJ1BsZWFzZSBw
cm92aWRlIGxvZ2luIGRhdGEgb2YgeW91ciBJbnN0YWdyYW0gQWNjb3VudC4nKTsKCiAgICAgICAg
JGxvZ2luID0gZ2V0VmFyRnJvbVVzZXIoIkxvZ2luIik7CiAgICAgICAgaWYgKGVtcHR5KCRsb2dp
bikpIHsKICAgICAgICAgICAgZG8geyAKICAgICAgICAgICAgICAgICRsb2dpbiA9IGdldFZhckZy
b21Vc2VyKCJMb2dpbiIpOyAKICAgICAgICAgICAgfSB3aGlsZSAoZW1wdHkoJGxvZ2luKSk7CiAg
ICAgICAgfQoKICAgICAgICAkcGFzc3dvcmQgPSBnZXRWYXJGcm9tVXNlcigiUGFzc3dvcmQiKTsK
ICAgICAgICBpZiAoZW1wdHkoJHBhc3N3b3JkKSkgewogICAgICAgICAgICBkbyB7IAogICAgICAg
ICAgICAgICAgJHBhc3N3b3JkID0gZ2V0VmFyRnJvbVVzZXIoIlBhc3N3b3JkIik7CiAgICAgICAg
ICAgIH0gd2hpbGUgKGVtcHR5KCRwYXNzd29yZCkpOwogICAgICAgIH0KCiAgICAgICAgJGZpcnN0
X2xvb3AgPSB0cnVlOwogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKCRmaXJzdF9sb29wKSB7
CiAgICAgICAgICAgICAgICBvdXRwdXQoIihPcHRpb25hbCkgU2V0IHByb3h5LCBpZiBuZWVkZWQu
IEl0J3MgYmV0dGVyIHRvIHVzZSBhIHByb3h5IGZyb20gdGhlIGNvdW50cnkgZnJvbSB5b3UgcnVu
bmluZyB0aGlzIHNjcmlwdC4iKTsKICAgICAgICAgICAgICAgIG91dHB1dCgiUHJveHkgc2hvdWxk
IG1hdGNoIGZvbGxvd2luZyBwYXR0ZXJuOiIpOwogICAgICAgICAgICAgICAgb3V0cHV0KCJodHRw
Oi8vaXA6cG9ydCBvciBodHRwOi8vdXNlcm5hbWU6cGFzc3dvcmRAaXA6cG9ydCIpOwogICAgICAg
ICAgICAgICAgb3V0cHV0KCJEb24ndCB1c2UgaW4gcGF0dGVybiBodHRwczovLy4iKTsKICAgICAg
ICAgICAgICAgIG91dHB1dCgiVHlwZSAzIHRvIHNraXAgYW5kIGRvbid0IHVzZSBwcm94eS4iKTsK
ICAgICAgICAgICAgICAgICRmaXJzdF9sb29wID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICBvdXRwdXQoIlByb3h5IC0gW05PVCBWQUxJRF0iKTsKICAgICAgICAg
ICAgICAgIG91dHB1dCgiUGxlYXNlIGNoZWNrIHRoZSBwcm94eSBzeW50YXggYW5kIHRyeSBhZ2Fp
bi4iKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHByb3h5ID0gZ2V0VmFyRnJvbVVzZXIo
IlByb3h5Iik7CgogICAgICAgICAgICBpZiAoZW1wdHkoJHByb3h5KSkgewogICAgICAgICAgICAg
ICAgZG8geyAKICAgICAgICAgICAgICAgICAgICAkcHJveHkgPSBnZXRWYXJGcm9tVXNlcigiUHJv
eHkiKTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5KCRwcm94eSkpOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICBpZiAoJHByb3h5ID09ICczJykgewogICAgICAgICAgICAgICAgLy8g
U2tpcCBwcm94eSBzZXR1cAogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAg
ICAgICB9IHdoaWxlICghaXNWYWxpZFByb3h5KCRwcm94eSkpOwoKICAgICAgICBpZiAoJHByb3h5
ID09ICIzIikgewogICAgICAgICAgIC8vIFNraXAgcHJveHkgc2V0dXAKICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICBvdXRwdXQoIlByb3h5IC0gW09LXSIpOwogICAgICAgICAgICAkaWctPnNl
dFByb3h5KCRwcm94eSk7CiAgICAgICAgfQoKICAgICAgICBvdXRwdXQoJ1BsZWFzZSBjaG9vc2Ug
dGhlIG1hc3Nsb29raW5nIGVzdGltYXRlZCBzcGVlZC4nKTsKICAgICAgICBvdXRwdXQoJ1R5cGUg
aW50ZWdlciB2YWx1ZSB3aXRob3V0IHNwYWNlcyBmcm9tIDEgdG8gNSAwMDAgMDAwIHN0b3JpZXMv
ZGF5IG9yIDAgZm9yIG1heGltdW0gcG9zc2libGUgc3BlZWQuJyk7CiAgICAgICAgb3V0cHV0KCdX
aGVuIHlvdSBhcmUgdXNpbmcgdGhlIG1heGltdW0gc3BlZWQgeW91IG1heSBleGNlZWQgdGhlIG1h
c3Nsb29raW5nIGxpbWl0cyBwZXIgZGF5IGlmIHRoaXMgYWNjb3VudCBhY3RpdmVseSB1c2VkIGJ5
IGEgdXNlciBpbiB0aGUgSW5zdGFncmFtIGFwcCBhdCB0aGUgc2FtZSB0aW1lLicpOwogICAgICAg
IG91dHB1dCgnSWYgeW91IGFyZSB1c2luZyBhbm90aGVyIHR5cGUgb2YgYXV0b21hdGlvbiwgd2Ug
cmVjb21tZW5kIHRvIHlvdSByZWR1Y2luZyBtYXNzbG9va2luZyBzcGVlZCB0byBmaW5kIHlvdXIg
Z29sZGVuIHJhdGlvLiBGb3IgZXhhbXBsZTogNDAwIDAwMCBzdG9yaWVzL2RheS4nKTsKICAgICAg
ICAkc3BlZWQgPSAoaW50KWdldFZhckZyb21Vc2VyKCJTcGVlZCIpOwoKICAgICAgICBpZiAoJHNw
ZWVkID4gNTAwMDAwMCkgewogICAgICAgICAgICBkbyB7IAogICAgICAgICAgICAgICAgb3V0cHV0
KCJTcGVlZCB2YWx1ZSBpcyBpbmNvcnJlY3QuIFR5cGUgaW50ZWdlciB2YWx1ZSBmcm9tIDEgdG8g
NSAwMDAgMDAwIHN0b3JpZXMvZGF5LiIpOwogICAgICAgICAgICAgICAgb3V0cHV0KCdUeXBlIDAg
Zm9yIG1heGltdW0gc3BlZWQuJyk7CiAgICAgICAgICAgICAgICAkc3BlZWQgPSAoaW50KWdldFZh
ckZyb21Vc2VyKCJEZWxheSIpOwogICAgICAgICAgICB9IHdoaWxlICgkc3BlZWQgPiA1MDAwMDAw
KTsKICAgICAgICB9CgogICAgICAgIGlmICgkc3BlZWQgPT0gMCkgewogICAgICAgICAgICBvdXRw
dXQoIk1heGltdW0gc3BlZWQgZW5hYmxlZC4iKTsKICAgICAgICAgICAgJGRlbGF5ID0gMzQ7CiAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3V0cHV0KCJTcGVlZCBzZXQgdG8gIiAuICRzcGVl
ZCAuICIgc3Rvcmllcy9kYXkuIik7CiAgICAgICAgICAgIGlmICgkc3BlZWQgPiA1MDAwMDAwKSB7
CiAgICAgICAgICAgICAgICAkc3BlZWQgPSA1MDAwMDA7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgJGRlbGF5ID0gcm91bmQoNjAqNjAqMjQqMjAwLyRzcGVlZCk7CiAgICAgICAgfQoKICAgICAg
ICAkaXNfY29ubmVjdGVkID0gZmFsc2U7CiAgICAgICAgJGlzX2Nvbm5lY3RlZF9jb3VudCA9IDA7
CiAgICAgICAgJGZhaWxfbWVzc2FnZSA9ICJUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB5b3VyIEV0
aGVybmV0IGNvbm5lY3Rpb24gb3IgSW5zdGFncmFtIGlzIGRvd24gYXQgdGhlIG1vbWVudC4gV2Ug
Y291bGRuJ3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gd2l0aCBJbnN0YWdyYW0gMTAgdGltZXMuIFBs
ZWFzZSB0cnkgYWdhaW4gbGF0ZXIuIjsKCiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoJGlz
X2Nvbm5lY3RlZF9jb3VudCA9PSAxMCkgewogICAgICAgICAgICAgICAgaWYgKCRlLT5nZXRSZXNw
b25zZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCRlLT5nZXRNZXNzYWdlKCkpOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZmFp
bF9tZXNzYWdlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAg
ICAgIGlmICgkaXNfY29ubmVjdGVkX2NvdW50ID09IDApIHsKICAgICAgICAgICAgICAgICAgICBv
dXRwdXQoIkVtdWxhdGlvbiBvZiBhbiBJbnN0YWdyYW0gYXBwIGluaXRpYXRlZC4uLiIpOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGxvZ2luX3Jlc3AgPSAkaWctPmxvZ2luKCRs
b2dpbiwgJHBhc3N3b3JkKTsKICAgIAogICAgICAgICAgICAgICAgaWYgKCRsb2dpbl9yZXNwICE9
PSBudWxsICYmICRsb2dpbl9yZXNwLT5pc1R3b0ZhY3RvclJlcXVpcmVkKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAvLyBEZWZhdWx0IHZlcmlmaWNhdGlvbiBtZXRob2QgaXMgcGhvbmUKICAgICAg
ICAgICAgICAgICAgICAkdHdvZmFfbWV0aG9kID0gJzEnOwogICAgCiAgICAgICAgICAgICAgICAg
ICAgLy8gRGV0ZWN0IGlzIEF1dGhlbnRpZmljYXRpb24gYXBwIHZlcmlmaWNhdGlvbiBpcyBhdmFp
bGFibGUgCiAgICAgICAgICAgICAgICAgICAgJGlzX3RvdHAgPSBqc29uX2RlY29kZShqc29uX2Vu
Y29kZSgkbG9naW5fcmVzcCksIHRydWUpOwogICAgICAgICAgICAgICAgICAgIGlmICgkaXNfdG90
cFsndHdvX2ZhY3Rvcl9pbmZvJ11bJ3RvdHBfdHdvX2ZhY3Rvcl9vbiddID09ICcxJyl7CiAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dCgiVHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiByZXF1
aXJlZCwgcGxlYXNlIGVudGVyIHRoZSBjb2RlIGZyb20geW91IEF1dGhlbnRpY2F0aW9uIGFwcCIp
OwogICAgICAgICAgICAgICAgICAgICAgICAkdHdvZmFfaWQgPSAkbG9naW5fcmVzcC0+Z2V0VHdv
RmFjdG9ySW5mbygpLT5nZXRUd29GYWN0b3JJZGVudGlmaWVyKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICR0d29mYV9tZXRob2QgPSAnMyc7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCJUd28tZmFjdG9yIGF1dGhlbnRpY2F0aW9u
IHJlcXVpcmVkLCBwbGVhc2UgZW50ZXIgdGhlIGNvZGUgc2VudCB0byB5b3VyIG51bWJlciBlbmRp
bmcgaW4gJXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2dpbl9yZXNwLT5nZXRU
d29GYWN0b3JJbmZvKCktPmdldE9iZnVzY2F0ZWRQaG9uZU51bWJlcigpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgJHR3b2ZhX2lkID0gJGxvZ2luX3Jlc3AtPmdldFR3b0ZhY3RvckluZm8oKS0+
Z2V0VHdvRmFjdG9ySWRlbnRpZmllcigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgIAogICAg
ICAgICAgICAgICAgICAgICR0d29mYV9jb2RlID0gZ2V0VmFyRnJvbVVzZXIoIlR3by1mYWN0b3Ig
Y29kZSIpOwogICAgCiAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCR0d29mYV9jb2RlKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICBkbyB7IAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJHR3b2ZhX2NvZGUgPSBnZXRWYXJGcm9tVXNlcigiVHdvLWZhY3RvciBjb2RlIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5KCR0d29mYV9jb2RlKSk7CiAgICAgICAg
ICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgICAgICAgICAgJGlzX2Nvbm5lY3RlZCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICRpc19jb25uZWN0ZWRfY291bnQgPSAwOwogICAgICAg
ICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpc19jb25uZWN0
ZWRfY291bnQgPT0gMTApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZS0+Z2V0
UmVzcG9uc2UoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgkZS0+
Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJGZhaWxfbWVzc2FnZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaXNfY29u
bmVjdGVkX2NvdW50ID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgi
VHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBpbiBwcm9ncmVzcy4uLiIpOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJHR3b2ZhX3Jlc3AgPSAkaWctPmZpbmlzaFR3b0ZhY3RvckxvZ2luKCRs
b2dpbiwgJHBhc3N3b3JkLCAkdHdvZmFfaWQsICR0d29mYV9jb2RlLCAkdHdvZmFfbWV0aG9kKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc19jb25uZWN0ZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxOZXR3b3Jr
RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCg3KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cRW1w
dHlSZXNwb25zZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xl
ZXAoNyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhj
ZXB0aW9uXEludmFsaWRTbXNDb2RlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkaXNfY29kZV9jb3JyZWN0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkaXNfY29ubmVjdGVkPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8g
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgiQ29kZSBpcyBpbmNvcnJl
Y3QuIFBsZWFzZSBjaGVjayB0aGUgc3ludGF4IGFuZCB0cnkgYWdhaW4uIik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJHR3b2ZhX2NvZGUgPSBnZXRWYXJGcm9tVXNlcigiVHdvLWZh
Y3RvciBjb2RlIik7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChlbXB0eSgkdHdvZmFfY29kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG8geyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0d29m
YV9jb2RlID0gZ2V0VmFyRnJvbVVzZXIoIlNlY3VyaXR5IGNvZGUiKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoZW1wdHkoJHR3b2ZhX2NvZGUpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICRpc19jb25uZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkaXNfY29ubmVjdGVkX2NvdW50ID0gMDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
eSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzX2Nvbm5l
Y3RlZF9jb3VudCA9PSAxMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgkZS0+Z2V0UmVzcG9uc2UoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQoJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJGZhaWxfbWVzc2Fn
ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpc19jb25uZWN0ZWRfY291bnQgPT0g
MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgi
VmVyaWZpY2F0aW9uIGluIHByb2dyZXNzLi4uIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
dHdvZmFfcmVzcCA9ICRpZy0+ZmluaXNoVHdvRmFjdG9yTG9naW4oJGxvZ2luLCAkcGFzc3dvcmQs
ICR0d29mYV9pZCwgJHR3b2ZhX2NvZGUsICR0d29mYV9tZXRob2QpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJGlzX2NvZGVfY29ycmVjdCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfY29ubmVjdGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxF
eGNlcHRpb25cTmV0d29ya0V4Y2VwdGlvbiAkZSkgeyAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNsZWVwKDcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxFbXB0eVJlc3BvbnNlRXhjZXB0
aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCg3
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3Jh
bUFQSVxFeGNlcHRpb25cSW52YWxpZFNtc0NvZGVFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc19jb2RlX2NvcnJlY3QgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc19jb25uZWN0ZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9u
ICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyAkZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkaXNfY29ubmVjdGVkX2NvdW50ICs9IDE7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoISRpc19jb25uZWN0ZWQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSB3aGlsZSAoISRpc19jb2RlX2NvcnJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvdyAkZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgICAgICAgICAgJGlzX2Nvbm5lY3RlZF9jb3VudCArPSAxOwogICAgICAgICAgICAgICAgICAg
IH0gd2hpbGUgKCEkaXNfY29ubmVjdGVkKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAkaXNfY29ubmVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3Jh
bUFQSVxFeGNlcHRpb25cTmV0d29ya0V4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgc2xl
ZXAoNyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXEVtcHR5
UmVzcG9uc2VFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIHNsZWVwKDcpOwogICAgICAg
ICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxDaGVja3BvaW50UmVxdWlyZWRF
eGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlBsZWFz
ZSBnbyB0byBJbnN0YWdyYW0gd2Vic2l0ZSBvciBtb2JpbGUgYXBwIGFuZCBwYXNzIGNoZWNrcG9p
bnQhIik7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXENoYWxs
ZW5nZVJlcXVpcmVkRXhjZXB0aW9uICRlKSB7CgogICAgICAgICAgICAgICAgaWYgKCEoJGlnIGlu
c3RhbmNlb2YgSW5zdGFncmFtQVBJXEluc3RhZ3JhbSkpIHsKICAgICAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXhjZXB0aW9uKCJPb3BzISBTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHRy
eSBhZ2FpbiBsYXRlciEgKGludmFsaWRfaW5zdGFncmFtX2NsaWVudCkiKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIGlmICghKCRlIGluc3RhbmNlb2YgSW5zdGFn
cmFtQVBJXEV4Y2VwdGlvblxDaGFsbGVuZ2VSZXF1aXJlZEV4Y2VwdGlvbikpIHsKICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJPb3BzISBTb21ldGhpbmcgd2VudCB3cm9u
Zy4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEgKHVuZXhwZWN0ZWRfZXhjZXB0aW9uKSIpOwogICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghJGUtPmhhc1Jlc3BvbnNlKCkgfHwg
ISRlLT5nZXRSZXNwb25zZSgpLT5pc0NoYWxsZW5nZSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEV4Y2VwdGlvbigiT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSB0
cnkgYWdhaW4gbGF0ZXIhICh1bmV4cGVjdGVkX2V4Y2VwdGlvbl9yZXNwb25zZSkiKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgICRjaGFsbGVuZ2UgPSAkZS0+Z2V0
UmVzcG9uc2UoKS0+Z2V0Q2hhbGxlbmdlKCk7CgogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5
KCRjaGFsbGVuZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgJGFwaV9wYXRoID0gJGNoYWxsZW5n
ZVsiYXBpX3BhdGgiXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgJGFwaV9wYXRoID0gJGNoYWxsZW5nZS0+Z2V0QXBpUGF0aCgpOwogICAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICAgIG91dHB1dCgiSW5zdGFncmFtIHdhbnQgdG8gc2VuZCB5b3UgYSBz
ZWN1cml0eSBjb2RlIHRvIHZlcmlmeSB5b3VyIGlkZW50aXR5LiIpOwogICAgICAgICAgICAgICAg
b3V0cHV0KCJIb3cgZG8geW91IHdhbnQgcmVjZWl2ZSB0aGlzIGNvZGU/Iik7CiAgICAgICAgICAg
ICAgICBvdXRwdXQoIjEgLSBbRW1haWxdIik7CiAgICAgICAgICAgICAgICBvdXRwdXQoIjIgLSBb
U01TXSIpOwogICAgICAgICAgICAgICAgb3V0cHV0KCIzIC0gW0V4aXRdIik7CgogICAgICAgICAg
ICAgICAgJGNob2ljZSA9IGdldFZhckZyb21Vc2VyKCJDaG9pY2UiKTsKCiAgICAgICAgICAgICAg
ICBpZiAoZW1wdHkoJGNob2ljZSkpIHsKICAgICAgICAgICAgICAgICAgICBkbyB7IAogICAgICAg
ICAgICAgICAgICAgICAgICAkY2hvaWNlID0gZ2V0VmFyRnJvbVVzZXIoIkNob2ljZSIpOwogICAg
ICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5KCRjaG9pY2UpKTsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICBpZiAoJGNob2ljZSA9PSAnMScgfHwgJGNob2ljZSA9PSAnMicg
fHwgJGNob2ljZSA9PSAnMycpIHsKICAgICAgICAgICAgICAgICAgICAvLyBBbGwgZmluZQogICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkaXNfY2hvaWNlX29rID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQoIkNob2ljZSBpcyBpbmNvcnJlY3QuIFR5cGUgMSwgMiBvciAzLiIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAkY2hvaWNlID0gZ2V0VmFyRnJvbVVzZXIoIkNob2ljZSIpOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRjaG9pY2UpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkbyB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaG9pY2Ug
PSBnZXRWYXJGcm9tVXNlcigiQ2hvaWNlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IHdoaWxlIChlbXB0eSgkY2hvaWNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgkY29uZmlybSA9PSAnMScgfHwgJGNvbmZpcm0gPT0gJzIn
IHx8ICRjb25maXJtID09ICczJykgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc19j
aG9pY2Vfb2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgfSB3aGlsZSAoISRpc19jaG9pY2Vfb2spOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICRjaGFsbGFuZ2VfY2hvaWNlID0gMDsKICAgICAgICAgICAgICAgIGlmICgkY2hv
aWNlID09ICczJykgewogICAgICAgICAgICAgICAgICAgIHJ1bigkaWcpOwogICAgICAgICAgICAg
ICAgfSBlbHNlaWYgKCRjaG9pY2UgPT0gJzEnKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gRW1h
aWwKICAgICAgICAgICAgICAgICAgICAkY2hhbGxhbmdlX2Nob2ljZSA9IDE7CiAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIFNNUwogICAgICAgICAgICAgICAg
ICAgICRjaGFsbGFuZ2VfY2hvaWNlID0gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg
ICAgICAkaXNfY29ubmVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkaXNfY29ubmVjdGVk
X2NvdW50ID0gMDsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICBpZiAo
JGlzX2Nvbm5lY3RlZF9jb3VudCA9PSAxMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
JGUtPmdldFJlc3BvbnNlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgk
ZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCRmYWlsX21lc3NhZ2UpOwogICAgICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAg
ICAgICAgJGNoYWxsZW5nZV9yZXNwID0gJGlnLT5zZW5kQ2hhbGxhbmdlQ29kZSgkYXBpX3BhdGgs
ICRjaGFsbGFuZ2VfY2hvaWNlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhaWxlZCB0
byBzZW5kIGNoYWxsZW5nZSBjb2RlIHZpYSBlbWFpbC4gVHJ5IHdpdGggU01TLgogICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoJGNoYWxsZW5nZV9yZXNwLT5zdGF0dXMgIT0gIm9rIikgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJGNoYWxsYW5nZV9jaG9pY2UgPSAwOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2xlZXAoNyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
Y2hhbGxlbmdlX3Jlc3AgPSAkaWctPnNlbmRDaGFsbGFuZ2VDb2RlKCRhcGlfcGF0aCwgJGNoYWxs
YW5nZV9jaG9pY2UpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
ICAgICAgICAkaXNfY29ubmVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNo
IChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxOZXR3b3JrRXhjZXB0aW9uICRlKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHNsZWVwKDcpOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJ
bnN0YWdyYW1BUElcRXhjZXB0aW9uXEVtcHR5UmVzcG9uc2VFeGNlcHRpb24gJGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgc2xlZXAoNyk7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAo
XEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyAkZTsKICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRpc19jb25uZWN0ZWRfY291bnQg
Kz0gMTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKCEkaXNfY29ubmVjdGVkKTsKCiAgICAgICAg
ICAgICAgICBpZiAoaXNzZXQoJGNoYWxsZW5nZV9yZXNwLT5tZXNzYWdlKSkgewogICAgICAgICAg
ICAgICAgICAgIGlmICgkY2hhbGxlbmdlX3Jlc3AtPm1lc3NhZ2UgPT0gIlRoaXMgZmllbGQgaXMg
cmVxdWlyZWQuIikgewogICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQoIkluc3RhZ3JhbSBh
bHJlYWR5IHNlbnQgdG8geW91IHZlcmlmaWNhdGlvbiBjb2RlIHRvIHlvdXIgZW1haWwgb3IgbW9i
aWxlIHBob25lIG51bWJlci4gUGxlYXNlIGVudGVyIHRoaXMgY29kZS4iKTsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGNoYWxsZW5nZV9yZXNwLT5zdGF0
dXMgIT0gIm9rIikgewogICAgICAgICAgICAgICAgICAgIG91dHB1dCgiSW5zdGFncmFtIFJlc3Bv
bnNlOiAiIC4ganNvbl9lbmNvZGUoJGNoYWxsZW5nZV9yZXNwKSk7CiAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0KCJDb3VsZG4ndCBzZW5kIGEgdmVyaWZpY2F0aW9uIGNvZGUgZm9yIHRoZSBsb2dp
biBjaGFsbGVuZ2UuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuIik7CiAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0KCItIElzIHRoaXMgYWNjb3VudCBoYXMgYXR0YWNoZWQgbW9iaWxlIHBob25lIG51
bWJlciBpbiBzZXR0aW5ncz8iKTsKICAgICAgICAgICAgICAgICAgICBvdXRwdXQoIi0gSWYgbm8s
IHRoaXMgY2FuIGJlIGEgcmVhc29uIG9mIHRoaXMgcHJvYmxlbS4gWW91IHNob3VsZCBhZGQgbW9i
aWxlIHBob25lIG51bWJlciBpbiBhY2NvdW50IHNldHRpbmdzLiIpOwogICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFeGNlcHRpb24oIi0gU29tZXRpbWVzIEluc3RhZ3JhbSBjYW4gZm9yY2Ug
eW91IHRvIHBob25lIHZlcmlmaWNhdGlvbiBjaGFsbGVuZ2UgcHJvY2Vzcy4iKTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGNoYWxsZW5nZV9yZXNwLT5zdGVw
X2RhdGEtPmNvbnRhY3RfcG9pbnQpKXsKICAgICAgICAgICAgICAgICAgICAkY29udGFjdF9wb2lu
dCA9ICRjaGFsbGVuZ2VfcmVzcC0+c3RlcF9kYXRhLT5jb250YWN0X3BvaW50OwogICAgICAgICAg
ICAgICAgICAgIGlmICgkY2hvaWNlID09IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0KCJFbnRlciB0aGUgY29kZSBzZW50IHRvIHlvdXIgbnVtYmVyIGVuZGluZyBpbiAiIC4gJGNv
bnRhY3RfcG9pbnQgLiAiLiIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dCgiRW50ZXIgdGhlIDYtZGlnaXQgY29kZSBzZW50IHRvIHRo
ZSBlbWFpbCBhZGRyZXNzICIgLiAkY29udGFjdF9wb2ludCAuICIuIik7CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRzZWN1cml0eV9jb2Rl
ID0gZ2V0VmFyRnJvbVVzZXIoIlNlY3VyaXR5IGNvZGUiKTsKCiAgICAgICAgICAgICAgICBpZiAo
ZW1wdHkoJHNlY3VyaXR5X2NvZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgZG8geyAKICAgICAg
ICAgICAgICAgICAgICAgICAgJHNlY3VyaXR5X2NvZGUgPSBnZXRWYXJGcm9tVXNlcigiU2VjdXJp
dHkgY29kZSIpOwogICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5KCRzZWN1cml0eV9j
b2RlKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRzZWN1cml0eV9j
b2RlID09ICIzIikgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlJl
c2V0IGluIHByb2dyZXNzLi4uIik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
Ly8gVmVyaWZpY2F0aW9uIGNoYWxsZW5nZQogICAgICAgICAgICAgICAgJGlnID0gY2hhbGxhbmdl
KCRpZywgJGxvZ2luLCAkcGFzc3dvcmQsICRhcGlfcGF0aCwgJHNlY3VyaXR5X2NvZGUsICRwcm94
eSk7CgogICAgICAgICAgICAgICAgaWYgKCRpZ3AgPT0gIjMiKSB7CiAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiUmVzZXQgaW4gcHJvZ3Jlc3MuLi4iKTsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXEFj
Y291bnREaXNhYmxlZEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4
Y2VwdGlvbigiWW91ciBhY2NvdW50IGhhcyBiZWVuIGRpc2FibGVkIGZvciB2aW9sYXRpbmcgSW5z
dGFncmFtIHRlcm1zLiBHbyBJbnN0YWdyYW0gd2Vic2l0ZSBvciBtb2JpbGUgYXBwIHRvIGxlYXJu
IGhvdyB5b3UgbWF5IGJlIGFibGUgdG8gcmVzdG9yZSB5b3VyIGFjY291bnQuIik7CiAgICAgICAg
ICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXENvbnNlbnRSZXF1aXJlZEV4Y2Vw
dGlvbiAkZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSW5zdGFncmFt
IHVwZGF0ZWQgVGVybXMgYW5kIERhdGEgUG9saWN5LiBQbGVhc2UgZ28gdG8gSW5zdGFncmFtIHdl
YnNpdGUgb3IgbW9iaWxlIGFwcCB0byByZXZpZXcgdGhlc2UgY2hhbmdlcyBhbmQgYWNjZXB0IHRo
ZW0uIik7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXFNlbnRy
eUJsb2NrRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9u
KCJQbGVhc2UgdGFrZSBhIDI0IGhvdXJzIGJyZWFrIGZvciB0aGlzIGFjY291bnQgYW5kIHRyeSBh
Z2Fpbi4gWW91ciBhY2NvdW50IGhhcyBiZWVuIGJhbm5lZCBmcm9tIEluc3RhZ3JhbSBBUEkgZm9y
IHNwYW0gYmVoYXZpb3Igb3Igb3RoZXJ3aXNlIGFidXNpbmcuIik7CiAgICAgICAgICAgIH0gY2F0
Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXEluY29ycmVjdFBhc3N3b3JkRXhjZXB0aW9uICRl
KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUaGUgcGFzc3dvcmQgeW91
IGVudGVyZWQgaXMgaW5jb3JyZWN0LiBQbGVhc2UgdHJ5IGFnYWluLiIpOwogICAgICAgICAgICB9
IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxJbnZhbGlkVXNlckV4Y2VwdGlvbiAkZSkg
ewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGhlIHVzZXJuYW1lIHlvdSBl
bnRlcmVkIGRvZXNuJ3QgYXBwZWFyIHRvIGJlbG9uZyB0byBhbiBhY2NvdW50LiBQbGVhc2UgY2hl
Y2sgeW91ciB1c2VybmFtZSBhbmQgdHJ5IGFnYWluLiIpOwogICAgICAgICAgICB9IGNhdGNoIChc
RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyAkZTsKICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgJGlzX2Nvbm5lY3RlZF9jb3VudCArPSAxOwogICAgICAgIH0gd2hpbGUgKCEk
aXNfY29ubmVjdGVkKTsKCiAgICAgICAgb3V0cHV0KCJMb2dnZWQgYXMgQCIgLiAkbG9naW4gLiAi
IHN1Y2Nlc3NmdWxseS4iKTsKCiAgICAgICAgJGRhdGEgPSBkZWZpbmVfdGFyZ2V0cygkaWcpOwog
ICAgICAgIG1hc3Nsb29raW5nX3YyKCRkYXRhLCAkaWcsICRkZWxheSk7CgogICAgfSBjYXRjaCAo
XEV4Y2VwdGlvbiAkZSl7CiAgICAgICAgb3V0cHV0KCRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAg
IHJ1bigkaWcpOwogICAgfQp9CgovKioKICogRGVmaW5lIHRhcmdldHMgZm9yIG1hc3Nsb29raW5n
CiAqLwpmdW5jdGlvbiBkZWZpbmVfdGFyZ2V0cygkaWcpIHsKCiAgICBkbyB7CiAgICAgICAgb3V0
cHV0KCJQbGVhc2UgZGVmaW5lIHRoZSB0YXJnZXRzLiIpOwogICAgICAgIG91dHB1dCgiV3JpdGUg
YWxsIEluc3RhZ3JhbSBwcm9maWxlIHVzZXJuYW1lcyB2aWEgY29tbWEgd2l0aG91dCAnQCcgc3lt
Ym9sLiIpOwogICAgICAgIG91dHB1dCgiRXhhbXBsZTogYXBwbGUsIGluc3RhZ3JhbSwgemVuZGF5
YSIpOwogICAgICAgICR0YXJnZXRzX2lucHV0ID0gZ2V0VmFyRnJvbVVzZXIoIlVzZXJuYW1lcyIp
OwoKICAgICAgICBpZiAoZW1wdHkoJHRhcmdldHNfaW5wdXQpKSB7CiAgICAgICAgICAgIGRvIHsg
CiAgICAgICAgICAgICAgICAkdGFyZ2V0c19pbnB1dCA9IGdldFZhckZyb21Vc2VyKCJVc2VybmFt
ZXMiKTsKICAgICAgICAgICAgfSB3aGlsZSAoZW1wdHkoJHRhcmdldHNfaW5wdXQpKTsKICAgICAg
ICB9CgogICAgICAgICR0YXJnZXRzX2lucHV0ID0gc3RyX3JlcGxhY2UoJyAnLCcnLCR0YXJnZXRz
X2lucHV0KTsKICAgICAgICAkdGFyZ2V0cyA9IFtdOwogICAgICAgICR0YXJnZXRzID0gZXhwbG9k
ZSgnLCcsdHJpbSgkdGFyZ2V0c19pbnB1dCkpOwogICAgICAgICR0YXJnZXRzID0gYXJyYXlfdW5p
cXVlKCR0YXJnZXRzKTsKCiAgICAgICAgJHBrcyA9IFtdOwogICAgICAgICRmaWx0ZXJlZF90YXJn
ZXRzID0gW107CiAgICAgICAgZm9yZWFjaCAoJHRhcmdldHMgYXMgJHRhcmdldCkgewoKICAgICAg
ICAgICAgJGlzX2Nvbm5lY3RlZCA9IGZhbHNlOwogICAgICAgICAgICAkaXNfY29ubmVjdGVkX2Nv
dW50ID0gMDsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKCRpc19jb25uZWN0
ZWRfY291bnQgPT0gMTApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGUtPmdldFJlc3BvbnNl
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCRlLT5nZXRNZXNzYWdlKCkpOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkZmFpbF9tZXNzYWdlID0g
IlRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHlvdXIgRXRoZXJuZXQgY29ubmVjdGlvbiBvciBJbnN0
YWdyYW0gaXMgZG93biBhdCB0aGUgbW9tZW50LiBXZSBjb3VsZG4ndCBlc3RhYmxpc2ggY29ubmVj
dGlvbiB3aXRoIEluc3RhZ3JhbSAxMCB0aW1lcy4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4iOwog
ICAgICAgICAgICAgICAgICAgIG91dHB1dCgkZmFpbF9tZXNzYWdlKTsKICAgICAgICAgICAgICAg
ICAgICBydW4oJGlnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0cnkgewog
ICAgICAgICAgICAgICAgICAgICR1c2VyX3Jlc3AgPSAkaWctPnBlb3BsZS0+Z2V0VXNlcklkRm9y
TmFtZSgkdGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICBvdXRwdXQoIkAiIC4gJHRhcmdldCAu
ICIgLSBbT0tdIik7CiAgICAgICAgICAgICAgICAgICAgJGZpbHRlcmVkX3RhcmdldHNbXSA9ICR0
YXJnZXQ7CiAgICAgICAgICAgICAgICAgICAgJHBrc1tdID0gJHVzZXJfcmVzcDsKICAgICAgICAg
ICAgICAgICAgICAkaXNfY29ubmVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBpZiAo
KCR0YXJnZXQgIT0gJHRhcmdldHNbY291bnQoJHRhcmdldHMpIC0gMV0pICYmIChjb3VudCgkdGFy
Z2V0cykgPiAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgxKTsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2Vw
dGlvblxOZXR3b3JrRXhjZXB0aW9uICRlKSB7IAogICAgICAgICAgICAgICAgICAgIHNsZWVwKDcp
OwogICAgICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cRW1wdHlS
ZXNwb25zZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgIHNsZWVwKDcpOwogICAg
ICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cQ2hhbGxlbmdlUmVx
dWlyZWRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXQoIlBsZWFzZSBs
b2dpbiBhZ2FpbiBhbmQgcGFzcyB2ZXJpZmljYXRpb24gY2hhbGxlbmdlLiBJbnN0YWdyYW0gd2ls
bCBzZW5kIHlvdSBhIHNlY3VyaXR5IGNvZGUgdG8gdmVyaWZ5IHlvdXIgaWRlbnRpdHkuIik7CiAg
ICAgICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChcSW5z
dGFncmFtQVBJXEV4Y2VwdGlvblxDaGVja3BvaW50UmVxdWlyZWRFeGNlcHRpb24gJGUpIHsKICAg
ICAgICAgICAgICAgICAgICBvdXRwdXQoIlBsZWFzZSBnbyB0byBJbnN0YWdyYW0gd2Vic2l0ZSBv
ciBtb2JpbGUgYXBwIGFuZCBwYXNzIGNoZWNrcG9pbnQhIik7CiAgICAgICAgICAgICAgICAgICAg
cnVuKCRpZyk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlv
blxBY2NvdW50RGlzYWJsZWRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICBvdXRw
dXQoIllvdXIgYWNjb3VudCBoYXMgYmVlbiBkaXNhYmxlZCBmb3IgdmlvbGF0aW5nIEluc3RhZ3Jh
bSB0ZXJtcy4gR28gSW5zdGFncmFtIHdlYnNpdGUgb3IgbW9iaWxlIGFwcCB0byBsZWFybiBob3cg
eW91IG1heSBiZSBhYmxlIHRvIHJlc3RvcmUgeW91ciBhY2NvdW50LiIpOwogICAgICAgICAgICAg
ICAgICAgIG91dHB1dCgiVXNlIHRoaXMgZm9ybSBmb3IgcmVjb3ZlcnkgeW91ciBhY2NvdW50OiBo
dHRwczovL2hlbHAuaW5zdGFncmFtLmNvbS9jb250YWN0LzE2NTI1Njc4MzgyODkwODMiKTsKICAg
ICAgICAgICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0
YWdyYW1BUElcRXhjZXB0aW9uXENvbnNlbnRSZXF1aXJlZEV4Y2VwdGlvbiAkZSkgewogICAgICAg
ICAgICAgICAgICAgIG91dHB1dCgiSW5zdGFncmFtIHVwZGF0ZWQgVGVybXMgYW5kIERhdGEgUG9s
aWN5LiBQbGVhc2UgZ28gdG8gSW5zdGFncmFtIHdlYnNpdGUgb3IgbW9iaWxlIGFwcCB0byByZXZp
ZXcgdGhlc2UgY2hhbmdlcyBhbmQgYWNjZXB0IHRoZW0uIik7CiAgICAgICAgICAgICAgICAgICAg
cnVuKCRpZyk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlv
blxTZW50cnlCbG9ja0V4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgIG91dHB1dCgi
QWNjZXNzIHRvIEluc3RhZ3JhbSBBUEkgcmVzdHJpY3RlZCBmb3IgdGhpcyBhY2NvdW50LiIpOwog
ICAgICAgICAgICAgICAgICAgIHJ1bigkaWcpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoXElu
c3RhZ3JhbUFQSVxFeGNlcHRpb25cVGhyb3R0bGVkRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0KCJUaHJvdHRsZWQgYnkgSW5zdGFncmFtIGJlY2F1c2Ugb2YgdG9vIG1h
bnkgQVBJIHJlcXVlc3RzLiIpOwogICAgICAgICAgICAgICAgICAgIG91dHB1dCgiUGxlYXNlIGxv
Z2luIGFnYWluIGFmdGVyIDEgaG91ci4gWW91IHJlYWNoZWQgSW5zdGFncmFtIGxpbWl0cy4iKTsK
ICAgICAgICAgICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElu
c3RhZ3JhbUFQSVxFeGNlcHRpb25cTm90Rm91bmRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAg
ICAgICAgICAkaXNfY29ubmVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAkaXNfdXNl
cm5hbWVfY29ycmVjdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0KCJJbnN0YWdyYW0gcHJvZmlsZSB1c2VybmFtZSBAIiAuICR0
YXJnZXQgLiAiIGlzIGluY29ycmVjdCBvciBtYXliZSB1c2VyIGp1c3QgYmxvY2tlZCB5b3UgKExv
Z2luIHRvIEluc3RhZ3JhbSB3ZWJzaXRlIG9yIG1vYmlsZSBhcHAgYW5kIGNoZWNrIHRoYXQpLiIp
OwogICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQoIlR5cGUgMyBmb3Igc2tpcCB0aGlzIHRh
cmdldC4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldF9uZXcgPSBnZXRWYXJGcm9t
VXNlcigiUGxlYXNlIHByb3ZpZGUgdmFsaWQgdXNlcm5hbWUiKTsKICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZW1wdHkoJHRhcmdldF9uZXcpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkbyB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRfbmV3
ID0gZ2V0VmFyRnJvbVVzZXIoIlBsZWFzZSBwcm92aWRlIHZhbGlkIHVzZXJuYW1lIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChlbXB0eSgkdGFyZ2V0X25ldykpOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0
YXJnZXRfbmV3ID09ICIzIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkaXNfY29ubmVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNf
Y29ubmVjdGVkX2NvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpc19jb25uZWN0ZWRfY291bnQgPT0g
MTApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlLT5nZXRSZXNw
b25zZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQo
JGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZhaWxfbWVzc2FnZSA9ICJUaGVy
ZSBpcyBhIHByb2JsZW0gd2l0aCB5b3VyIEV0aGVybmV0IGNvbm5lY3Rpb24gb3IgSW5zdGFncmFt
IGlzIGRvd24gYXQgdGhlIG1vbWVudC4gV2UgY291bGRuJ3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24g
d2l0aCBJbnN0YWdyYW0gMTAgdGltZXMuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCRmYWlsX21lc3NhZ2UpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1c2VyX3Jlc3AgPSAkaWctPnBl
b3BsZS0+Z2V0VXNlcklkRm9yTmFtZSgkdGFyZ2V0X25ldyk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dCgiQCIgLiAkdGFyZ2V0X25ldyAuICIgLSBbT0tdIik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWx0ZXJlZF90YXJnZXRzW10gPSAk
dGFyZ2V0X25ldzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBrc1tdID0g
JHVzZXJfcmVzcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzX3VzZXJu
YW1lX2NvcnJlY3QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
aXNfY29ubmVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNh
dGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxOZXR3b3JrRXhjZXB0aW9uICRlKSB7IAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCg3KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxFbXB0eVJl
c3BvbnNlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNsZWVwKDcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEluc3Rh
Z3JhbUFQSVxFeGNlcHRpb25cTm90Rm91bmRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJGlzX3VzZXJuYW1lX2NvcnJlY3QgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzX2Nvbm5lY3RlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQoJGUtPmdldE1lc3NhZ2UoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bigkaWcpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
aXNfY29ubmVjdGVkX2NvdW50ICs9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdo
aWxlICghJGlzX2Nvbm5lY3RlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICB9IHdoaWxlICghJGlzX3VzZXJuYW1lX2NvcnJlY3QpOwogICAgICAgICAgICAg
ICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKXsKICAgICAgICAgICAgICAgICAgICBvdXRwdXQoJGUt
PmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRpc19jb25uZWN0ZWRfY291
bnQgKz0gMTsKICAgICAgICAgICAgfSB3aGlsZSAoISRpc19jb25uZWN0ZWQpOwogICAgICAgIH0K
ICAgIH0gd2hpbGUgKGVtcHR5KCRmaWx0ZXJlZF90YXJnZXRzKSk7CgogICAgJHRhcmdldHMgPSBh
cnJheV91bmlxdWUoJGZpbHRlcmVkX3RhcmdldHMpOwogICAgJHBrcyA9IGFycmF5X3VuaXF1ZSgk
cGtzKTsKCiAgICAkZGF0YSA9IFtdOwogICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJHRhcmdl
dHMpOyAkaSsrKSB7CiAgICAgICAgJGRhdGFbJGldID0gWwogICAgICAgICAgICAndXNlcm5hbWUn
ID0+ICR0YXJnZXRzWyRpXSwKICAgICAgICAgICAgJ3BrJyA9PiAkcGtzWyRpXSwKICAgICAgICBd
OwogICAgfQoKICAgIG91dHB1dCgiU2VsZWN0ZWQgIiAuIGNvdW50KCR0YXJnZXRzKSAuICIgdGFy
Z2V0czogQCIgLiBpbXBsb2RlKCIsIEAiLCAkdGFyZ2V0cykgLiAiLiIpOwogICAgb3V0cHV0KCJQ
bGVhc2UgY29uZmlybSB0aGF0IHRoZSBzZWxlY3RlZCB0YXJnZXRzIGFyZSBjb3JyZWN0LiIpOwog
ICAgb3V0cHV0KCIxIC0gW1llc10iKTsKICAgIG91dHB1dCgiMiAtIFtOb10iKTsKICAgIG91dHB1
dCgiMyAtIFtFeGl0XSIpOwoKICAgICRjb25maXJtID0gZ2V0VmFyRnJvbVVzZXIoIkNob2ljZSIp
OwoKICAgIGlmIChlbXB0eSgkY29uZmlybSkpIHsKICAgICAgICBkbyB7IAogICAgICAgICAgICAk
Y29uZmlybSA9IGdldFZhckZyb21Vc2VyKCJDaG9pY2UiKTsKICAgICAgICB9IHdoaWxlIChlbXB0
eSgkY29uZmlybSkpOwogICAgfQoKICAgIGlmICgkY29uZmlybSA9PSAnMScgfHwgJGNvbmZpcm0g
PT0gJzInIHx8ICRjb25maXJtID09ICczJykgewogICAgICAgIC8vIEFsbCBmaW5lCiAgICB9IGVs
c2UgewogICAgICAgICRpc19jaG9pY2Vfb2sgPSBmYWxzZTsKICAgICAgICBkbyB7CiAgICAgICAg
ICAgIG91dHB1dCgiQ2hvaWNlIGlzIGluY29ycmVjdC4gVHlwZSAxLCAyIG9yIDMuIik7CiAgICAg
ICAgICAgICRjb25maXJtID0gZ2V0VmFyRnJvbVVzZXIoIkNob2ljZSIpOwoKICAgICAgICAgICAg
aWYgKGVtcHR5KCRjb25maXJtKSkgewogICAgICAgICAgICAgICAgZG8geyAKICAgICAgICAgICAg
ICAgICAgICAkY29uZmlybSA9IGdldFZhckZyb21Vc2VyKCJDaG9pY2UiKTsKICAgICAgICAgICAg
ICAgIH0gd2hpbGUgKGVtcHR5KCRjb25maXJtKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAg
IGlmICgkY29uZmlybSA9PSAnMScgfHwgJGNvbmZpcm0gPT0gJzInIHx8ICRjb25maXJtID09ICcz
JykgeyAKICAgICAgICAgICAgICAgICRpc19jaG9pY2Vfb2sgPSB0cnVlOwogICAgICAgICAgICB9
CiAgICAgICAgfSB3aGlsZSAoISRpc19jaG9pY2Vfb2spOwogICAgfQoKICAgIGlmICgkY29uZmly
bSA9PSAnMycpIHsKICAgICAgICBydW4oJGlnKTsKICAgIH0gZWxzZWlmICgkY29uZmlybSA9PSAn
MicpIHsKICAgICAgICAkZGF0YSA9IGRlZmluZV90YXJnZXRzKCRpZyk7CiAgICB9IGVsc2Ugewog
ICAgICAgIC8vIEFsbCBmaW5lLiBHb2luZyB0byBtYXNzbG9va2luZy4KICAgIH0KCiAgICByZXR1
cm4gJGRhdGE7Cn0KCi8qKgogKiBHZXQgdmFyYWJsZSBmcm9tIHVzZXIKICovCmZ1bmN0aW9uIGdl
dFZhckZyb21Vc2VyKCR0ZXh0KSB7CiAgICBlY2hvICR0ZXh0IC4gIjogIjsKICAgICR2YXIgPSB0
cmltKGZnZXRzKFNURElOKSk7CiAgICByZXR1cm4gJHZhcjsKfQoKLyoqCiAqIE91dHB1dCBtZXNz
YWdlIHdpdGggZGF0YSB0byBjb25zb2xlCiAqLwpmdW5jdGlvbiBvdXRwdXQoJG1lc3NhZ2UpIHsK
ICAgIGVjaG8gIlsiLCBkYXRlKCJIOmk6cyIpLCAiXSAiLCAkbWVzc2FnZSwgUEhQX0VPTDsKfQoK
LyoqCiAqIE91dHB1dCBjbGVhbiBtZXNzYWdlIHRvIGNvbnNvbGUKICovCmZ1bmN0aW9uIG91dHB1
dF9jbGVhbigkbWVzc2FnZSkgewogICAgZWNobyAkbWVzc2FnZSwgUEhQX0VPTDsKfQoKLyoqCiAq
IFZhbGlkYXRlcyBwcm94eSBhZGRyZXNzCiAqLwpmdW5jdGlvbiBpc1ZhbGlkUHJveHkoJHByb3h5
KSB7CiAgICBvdXRwdXQoIkNvbm5lY3RpbmcgdG8gSW5zdGFncmFtLi4uIik7CgogICAgdHJ5IHsK
ICAgICAgICAkY2xpZW50ID0gbmV3IFxHdXp6bGVIdHRwXENsaWVudCgpOwogICAgICAgICRyZXMg
PSAkY2xpZW50LT5yZXF1ZXN0KCdHRVQnLCAnaHR0cDovL3d3dy5pbnN0YWdyYW0uY29tJywgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidGltZW91dCIgPT4gNjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJwcm94eSIgPT4gJHByb3h5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XSk7CiAgICAgICAgJGNvZGUgPSAkcmVzLT5nZXRTdGF0dXNDb2RlKCk7CiAgICAgICAgJGlzX2Nv
bm5lY3RlZCA9IHRydWU7CiAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgb3V0
cHV0KCRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBy
ZXR1cm4gJGNvZGUgPT0gMjAwOwp9CgovKioKICogVmFsaWRhdGVzIHByb3h5IGFkZHJlc3MKICov
CmZ1bmN0aW9uIGZpbmlzaExvZ2luKCRpZywgJGxvZ2luLCAkcGFzc3dvcmQsICRwcm94eSkgewog
ICAgJGlzX2Nvbm5lY3RlZCA9IGZhbHNlOwogICAgJGlzX2Nvbm5lY3RlZF9jb3VudCA9IDA7Cgog
ICAgdHJ5IHsKICAgICAgICBkbyB7CiAgICAgICAgICAgIGlmICgkaXNfY29ubmVjdGVkX2NvdW50
ID09IDEwKSB7CiAgICAgICAgICAgICAgICBpZiAoJGUtPmdldFJlc3BvbnNlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQoJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAkZmFpbF9tZXNzYWdlID0gIlRoZXJlIGlzIGEgcHJvYmxlbSB3aXRo
IHlvdXIgRXRoZXJuZXQgY29ubmVjdGlvbiBvciBJbnN0YWdyYW0gaXMgZG93biBhdCB0aGUgbW9t
ZW50LiBXZSBjb3VsZG4ndCBlc3RhYmxpc2ggY29ubmVjdGlvbiB3aXRoIEluc3RhZ3JhbSAxMCB0
aW1lcy4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4iOwogICAgICAgICAgICAgICAgb3V0cHV0KCRm
YWlsX21lc3NhZ2UpOwogICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgIGlmICgkcHJveHkgPT0gIjMiKSB7CiAgICAgICAgICAgICAgICAvLyBTa2lwIHBy
b3h5IHNldHVwCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaWctPnNldFBy
b3h5KCRwcm94eSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAg
ICAgICAkbG9naW5fcmVzcCA9ICRpZy0+bG9naW4oJGxvZ2luLCAkcGFzc3dvcmQpOwogICAgICAg
IAogICAgICAgICAgICAgICAgaWYgKCRsb2dpbl9yZXNwICE9PSBudWxsICYmICRsb2dpbl9yZXNw
LT5pc1R3b0ZhY3RvclJlcXVpcmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0
IHZlcmlmaWNhdGlvbiBtZXRob2QgaXMgcGhvbmUKICAgICAgICAgICAgICAgICAgICAkdHdvZmFf
bWV0aG9kID0gJzEnOwoKICAgICAgICAgICAgICAgICAgICAvLyBEZXRlY3QgaXMgQXV0aGVudGlm
aWNhdGlvbiBhcHAgdmVyaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSAKICAgICAgICAgICAgICAgICAg
ICAkaXNfdG90cCA9IGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKCRsb2dpbl9yZXNwKSwgdHJ1ZSk7
CiAgICAgICAgICAgICAgICAgICAgaWYgKCRpc190b3RwWyd0d29fZmFjdG9yX2luZm8nXVsndG90
cF90d29fZmFjdG9yX29uJ10gPT0gJzEnKXsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
KCJUd28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLCBwbGVhc2UgZW50ZXIgdGhlIGNv
ZGUgZnJvbSB5b3UgQXV0aGVudGljYXRpb24gYXBwIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICR0d29mYV9pZCA9ICRsb2dpbl9yZXNwLT5nZXRUd29GYWN0b3JJbmZvKCktPmdldFR3b0ZhY3Rv
cklkZW50aWZpZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHR3b2ZhX21ldGhvZCA9ICcz
JzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQoIlR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gcmVxdWlyZWQsIHBsZWFzZSBlbnRlciB0
aGUgY29kZSBzZW50IHRvIHlvdXIgbnVtYmVyIGVuZGluZyBpbiAlcyIsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJGxvZ2luX3Jlc3AtPmdldFR3b0ZhY3RvckluZm8oKS0+Z2V0T2JmdXNj
YXRlZFBob25lTnVtYmVyKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAkdHdvZmFfaWQgPSAk
bG9naW5fcmVzcC0+Z2V0VHdvRmFjdG9ySW5mbygpLT5nZXRUd29GYWN0b3JJZGVudGlmaWVyKCk7
CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkdHdvZmFfY29kZSA9
IGdldFZhckZyb21Vc2VyKCJUd28tZmFjdG9yIGNvZGUiKTsKCiAgICAgICAgICAgICAgICAgICAg
aWYgKGVtcHR5KCR0d29mYV9jb2RlKSkgewogICAgICAgICAgICAgICAgICAgICAgICBkbyB7IAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR3b2ZhX2NvZGUgPSBnZXRWYXJGcm9tVXNlcigi
VHdvLWZhY3RvciBjb2RlIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVtcHR5
KCR0d29mYV9jb2RlKSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg
ICAkaXNfY29ubmVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgJGlzX2Nvbm5lY3Rl
ZF9jb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoJGlzX2Nvbm5lY3RlZF9jb3VudCA9PSAxMCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCRlLT5nZXRSZXNwb25zZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0KCRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCRmYWlsX21lc3NhZ2Up
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaXNfY29ubmVjdGVkX2NvdW50
ID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgiVHdvLWZhY3RvciBh
dXRoZW50aWNhdGlvbiBpbiBwcm9ncmVzcy4uLiIpOwogICAgICAgICAgICAgICAgICAgICAgICB9
CgogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJHR3b2ZhX3Jlc3AgPSAkaWctPmZpbmlzaFR3b0ZhY3RvckxvZ2luKCRsb2dpbiwgJHBhc3N3
b3JkLCAkdHdvZmFfaWQsICR0d29mYV9jb2RlLCAkdHdvZmFfbWV0aG9kKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICRpc19jb25uZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxOZXR3b3JrRXhjZXB0aW9uICRl
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCg3KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cRW1wdHlSZXNwb25zZUV4
Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoNyk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXEludmFs
aWRTbXNDb2RlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNf
Y29kZV9jb3JyZWN0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfY29u
bmVjdGVkPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgiQ29kZSBpcyBpbmNvcnJlY3QuIFBsZWFzZSBj
aGVjayB0aGUgc3ludGF4IGFuZCB0cnkgYWdhaW4uIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJHR3b2ZhX2NvZGUgPSBnZXRWYXJGcm9tVXNlcigiVHdvLWZhY3RvciBjb2RlIik7
CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgk
dHdvZmFfY29kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geyAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0d29mYV9jb2RlID0gZ2V0
VmFyRnJvbVVzZXIoIlNlY3VyaXR5IGNvZGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSB3aGlsZSAoZW1wdHkoJHR3b2ZhX2NvZGUpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICRpc19jb25uZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkaXNfY29ubmVjdGVkX2NvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzX2Nvbm5lY3RlZF9jb3VudCA9
PSAxMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk
ZS0+Z2V0UmVzcG9uc2UoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQoJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHB1dCgkZmFpbF9tZXNzYWdlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoJGlzX2Nvbm5lY3RlZF9jb3VudCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCJWZXJpZmljYXRpb24gaW4gcHJvZ3Jlc3MuLi4i
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0d29mYV9yZXNwID0gJGlnLT5maW5pc2hUd29G
YWN0b3JMb2dpbigkbG9naW4sICRwYXNzd29yZCwgJHR3b2ZhX2lkLCAkdHdvZmFfY29kZSwgJHR3
b2ZhX21ldGhvZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNf
Y29kZV9jb3JyZWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICRpc19jb25uZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxOZXR3b3JrRXhjZXB0aW9uICRl
KSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoNyk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElc
RXhjZXB0aW9uXEVtcHR5UmVzcG9uc2VFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKDcpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxJbnZhbGlkU21zQ29k
ZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JGlzX2NvZGVfY29ycmVjdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJGlzX2Nvbm5lY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyAkZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfY29u
bmVjdGVkX2NvdW50ICs9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGls
ZSAoISRpc19jb25uZWN0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAo
ISRpc19jb2RlX2NvcnJlY3QpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChcRXhj
ZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyAkZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJGlzX2Nvbm5lY3Rl
ZF9jb3VudCArPSAxOwogICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCEkaXNfY29ubmVjdGVk
KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkaXNfY29ubmVjdGVkID0gdHJ1
ZTsKICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cTmV0d29ya0V4
Y2VwdGlvbiAkZSkgeyAKICAgICAgICAgICAgICAgIHNsZWVwKDcpOwogICAgICAgICAgICB9IGNh
dGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxFbXB0eVJlc3BvbnNlRXhjZXB0aW9uICRlKSB7
CiAgICAgICAgICAgICAgICBzbGVlcCg3KTsKICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3Jh
bUFQSVxFeGNlcHRpb25cQ2hlY2twb2ludFJlcXVpcmVkRXhjZXB0aW9uICRlKSB7CiAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJQbGVhc2UgZ28gdG8gSW5zdGFncmFtIHdlYnNp
dGUgb3IgbW9iaWxlIGFwcCBhbmQgcGFzcyBjaGVja3BvaW50ISIpOwogICAgICAgICAgICB9IGNh
dGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxDaGFsbGVuZ2VSZXF1aXJlZEV4Y2VwdGlvbiAk
ZSkgewogICAgICAgICAgICAgICAgb3V0cHV0KCJJbnN0YWdyYW0gUmVzcG9uc2U6ICIgLiBqc29u
X2VuY29kZSgkZS0+Z2VyUmVzcG9uc2UoKSkpOwogICAgICAgICAgICAgICAgb3V0cHV0KCJDb3Vs
ZG4ndCBjb21wbGV0ZSB0aGUgdmVyaWZpY2F0aW9uIGNoYWxsZW5nZS4gUGxlYXNlIHRyeSBhZ2Fp
biBsYXRlci4iKTsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkRldmVsb3Bl
ciBjb2RlOiBDaGFsbGVuZ2UgbG9vcC4iKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlv
biAkZSkgewogICAgICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICRpc19jb25uZWN0ZWRfY291bnQgKz0gMTsKICAgICAgICB9IHdoaWxlICghJGlzX2Nvbm5l
Y3RlZCk7CiAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKXsKICAgICAgICBvdXRwdXQoJGUtPmdl
dE1lc3NhZ2UoKSk7CiAgICAgICAgcnVuKCRpZyk7CiAgICB9CgogICAgcmV0dXJuICRpZzsKfQoK
LyoqCiAqIFZlcmlmaWNhdGlvbiBjaGFsbGVuZ2UKICovCmZ1bmN0aW9uIGNoYWxsYW5nZSgkaWcs
ICRsb2dpbiwgJHBhc3N3b3JkLCAkYXBpX3BhdGgsICRzZWN1cml0eV9jb2RlLCAkcHJveHkpIHsK
ICAgICRpc19jb25uZWN0ZWQgPSBmYWxzZTsKICAgICRpc19jb25uZWN0ZWRfY291bnQgPSAwOwog
ICAgJGZhaWxfbWVzc2FnZSA9ICJUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB5b3VyIEV0aGVybmV0
IGNvbm5lY3Rpb24gb3IgSW5zdGFncmFtIGlzIGRvd24gYXQgdGhlIG1vbWVudC4gV2UgY291bGRu
J3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gd2l0aCBJbnN0YWdyYW0gMTAgdGltZXMuIFBsZWFzZSB0
cnkgYWdhaW4gbGF0ZXIuIjsKCiAgICBkbyB7CiAgICAgICAgaWYgKCRpc19jb25uZWN0ZWRfY291
bnQgPT0gMTApIHsKICAgICAgICAgICAgaWYgKCRlLT5nZXRSZXNwb25zZSgpKSB7CiAgICAgICAg
ICAgICAgICBvdXRwdXQoJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigkZmFpbF9tZXNzYWdlKTsKICAgICAgICB9CgogICAgICAg
IGlmICgkaXNfY29ubmVjdGVkX2NvdW50ID09IDApIHsKICAgICAgICAgICAgb3V0cHV0KCJWZXJp
ZmljYXRpb24gaW4gcHJvZ3Jlc3MuLi4iKTsKICAgICAgICB9CgogICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICRjaGFsbGVuZ2VfcmVzcCA9ICRpZy0+ZmluaXNoQ2hhbGxlbmdlTG9naW4oJGxvZ2lu
LCAkcGFzc3dvcmQsICRhcGlfcGF0aCwgJHNlY3VyaXR5X2NvZGUpOwogICAgICAgICAgICAkaXNf
Y29ubmVjdGVkID0gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlv
blxOZXR3b3JrRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHNsZWVwKDcpOwogICAgICAgIH0g
Y2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXEVtcHR5UmVzcG9uc2VFeGNlcHRpb24gJGUp
IHsKICAgICAgICAgICAgc2xlZXAoNyk7CiAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxF
eGNlcHRpb25cSW5zdGFncmFtRXhjZXB0aW9uICRlKSB7CgogICAgICAgICAgICBpZiAoJGUtPmhh
c1Jlc3BvbnNlKCkpIHsKICAgICAgICAgICAgICAgICRtc2cgPSAkZS0+Z2V0UmVzcG9uc2UoKS0+
Z2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgICAgb3V0cHV0KCRtc2cpOwogICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgJG1zZyA9IGV4cGxvZGUoIjoiLCAkZS0+Z2V0TWVzc2Fn
ZSgpLCAyKTsKICAgICAgICAgICAgICAgICRtc2cgPSBlbmQoJG1zZyk7CiAgICAgICAgICAgICAg
ICBvdXRwdXQoJG1zZyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG91dHB1dCgiVHlwZSAz
IC0gdG8gZXhpdC4iKTsKCiAgICAgICAgICAgICRzZWN1cml0eV9jb2RlID0gZ2V0VmFyRnJvbVVz
ZXIoIlNlY3VyaXR5IGNvZGUiKTsKCiAgICAgICAgICAgIGlmIChlbXB0eSgkc2VjdXJpdHlfY29k
ZSkpIHsKICAgICAgICAgICAgICAgIGRvIHsgCiAgICAgICAgICAgICAgICAgICAgJHNlY3VyaXR5
X2NvZGUgPSBnZXRWYXJGcm9tVXNlcigiU2VjdXJpdHkgY29kZSIpOwogICAgICAgICAgICAgICAg
fSB3aGlsZSAoZW1wdHkoJHNlY3VyaXR5X2NvZGUpKTsKICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgaWYgKCRzZWN1cml0eV9jb2RlID09ICIzIikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEV4Y2VwdGlvbigiUmVzZXQgaW4gcHJvZ3Jlc3MuLi4iKTsKICAgICAgICAgICAgfQoKICAgICAg
ICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICRtc2cgPSAkZS0+Z2V0TWVz
c2FnZSgpOwogICAgICAgICAgICBpZiAoJG1zZyA9PSAnSW52YWxpZCBMb2dpbiBSZXNwb25zZSBh
dCBmaW5pc2hDaGFsbGVuZ2VMb2dpbigpLicpIHsKICAgICAgICAgICAgICAgIHNsZWVwKDcpOwog
ICAgICAgICAgICAgICAgJGlnID0gZmluaXNoTG9naW4oJGlnLCAkbG9naW4sICRwYXNzd29yZCwg
JHByb3h5KTsKICAgICAgICAgICAgICAgICRpc19jb25uZWN0ZWQgPSB0cnVlOwogICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CgogICAgICAgICRpc19jb25uZWN0ZWRfY291bnQgKz0gMTsKICAgIH0gd2hpbGUgKCEkaXNf
Y29ubmVjdGVkKTsKCiAgICByZXR1cm4gJGlnOwp9CgovKioKICogTWFzc2xvb2tpbmcgbG9vcCAt
IEFsZ29yaXRobSAjMgogKi8KZnVuY3Rpb24gbWFzc2xvb2tpbmdfdjIoJGRhdGEsICRpZywgJGRl
bGF5KSB7CgogICAgJHZpZXdfY291bnQgPSAwOwogICAgJHN0X2NvdW50ID0gMDsKICAgICRzdF9j
b3VudF9zZWVuID0gMDsKICAgICRiZWdpbiA9IHN0cnRvdGltZShkYXRlKCJZLW0tZCBIOmk6cyIp
KTsKICAgICRiZWdpbl9tcyA9IHN0cnRvdGltZShkYXRlKCJZLW0tZCBIOmk6cyIpKTsKICAgICRi
ZWdpbl9mID0gc3RydG90aW1lKGRhdGUoIlktbS1kIEg6aTpzIikpOwogICAgJHNwZWVkID0gMDsK
ICAgICRkZWxpdGVsID0gMDsKICAgICRjb3VudGVyMSA9IDA7CiAgICAkY291bnRlcjIgPSAwOwog
ICAgJHN0b3JpZXMgPSBbXTsKCiAgICBvdXRwdXQoIk1hc3Nsb29raW5nIGxvb3Agc3RhcnRlZC4i
KTsKCiAgICAkdGFyZ2V0cyA9IFtdOwogICAgJHRhcmdldHMgPSAkZGF0YTsKCiAgICBmb3IgKCRp
ID0gMDsgJGkgPCBjb3VudCgkZGF0YSk7ICRpKyspIHsKICAgICAgICAkZGF0YVskaV0gKz0gWwog
ICAgICAgICAgICAncmFua190b2tlbicgPT4gXEluc3RhZ3JhbUFQSVxTaWduYXR1cmVzOjpnZW5l
cmF0ZVVVSUQoKSwgCiAgICAgICAgICAgICd1c2Vyc19jb3VudCcgPT4gMCwgCiAgICAgICAgICAg
ICdtYXhfaWQnID0+IG51bGwsCiAgICAgICAgICAgICdiZWdpbl9nZicgPT4gbnVsbAogICAgICAg
IF07CiAgICB9CgogICAgZG8gewogICAgICAgIGZvcmVhY2ggKCRkYXRhIGFzICRrZXkgPT4gJGQp
IHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGlmICgkZFsnbWF4X2lkJ10gPT0g
bnVsbCkgewogICAgICAgICAgICAgICAgICAgICRpc19nZl9maXJzdCA9IDE7CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkZFsnYmVnaW5fZ2YnXSkpIHsKICAg
ICAgICAgICAgICAgICAgICAkY3VycmVudF90aW1lID0gc3RydG90aW1lKGRhdGUoIlktbS1kIEg6
aTpzIikpOwogICAgICAgICAgICAgICAgICAgIGlmICgoJGN1cnJlbnRfdGltZSAtICRkWydiZWdp
bl9nZiddKSA8IDcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNsZWVwX3RpbWUgPSA3IC0g
KCRjdXJyZW50X3RpbWUgLSAkZFsnYmVnaW5fZ2YnXSk7CiAgICAgICAgICAgICAgICAgICAgICAg
IHNsZWVwKCRzbGVlcF90aW1lKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgJGZvbGxvd2VycyA9ICRpZy0+cGVvcGxlLT5nZXRGb2xsb3dl
cnMoJGRbJ3BrJ10sICRkWydyYW5rX3Rva2VuJ10sIG51bGwsICRkWydtYXhfaWQnXSk7CiAgICAg
ICAgICAgICAgICAkZGF0YVska2V5XVsnYmVnaW5fZ2YnXSA9IHN0cnRvdGltZShkYXRlKCJZLW0t
ZCBIOmk6cyIpKTsKCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJGZvbGxvd2Vycy0+Z2V0VXNl
cnMoKSkpIHsgCiAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCJAIiAuICRkWyd1c2VybmFtZSdd
IC4gIiBkb24ndCBoYXZlIGFueSBmb2xsb3dlci4iKTsKICAgICAgICAgICAgICAgICAgICB1bnNl
dCgkZGF0YVska2V5XSk7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICB9CgogICAgICAgICAgICAgICAgLy8gR2V0IG5leHQgJG1heF9pZCB2YWx1ZQogICAgICAg
ICAgICAgICAgJGRhdGFbJGtleV1bJ21heF9pZCddID0gJGZvbGxvd2Vycy0+Z2V0TmV4dE1heElk
KCk7CgogICAgICAgICAgICAgICAgJGZvbGxvd2Vyc19pZHMgPSBbXTsKICAgICAgICAgICAgICAg
IGZvcmVhY2ggKCRmb2xsb3dlcnMtPmdldFVzZXJzKCkgYXMgJGZvbGxvd2VyKSB7CiAgICAgICAg
ICAgICAgICAgICAgJGZvbGxvd2Vyc19pZHNbXSA9ICRmb2xsb3dlci0+Z2V0UGsoKTsKICAgICAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZGF0YVska2V5XVsndXNlcnNfY291bnQnXSA9
ICRkWyd1c2Vyc19jb3VudCddICsgY291bnQoJGZvbGxvd2Vyc19pZHMpOwoKICAgICAgICAgICAg
ICAgICRudW1iZXIgPSBjb3VudCgkZm9sbG93ZXJzX2lkcyk7CgogICAgICAgICAgICAgICAgaWYg
KCRpc19nZl9maXJzdCkgewogICAgICAgICAgICAgICAgICAgIG91dHB1dCgkbnVtYmVyIC4gIiBm
b2xsb3dlcnMgb2YgQCIgLiAkZFsndXNlcm5hbWUnXSAuICIgY29sbGVjdGVkLiIpOwogICAgICAg
ICAgICAgICAgICAgICRpc19nZl9maXJzdCA9IDA7CiAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgIG91dHB1dCgiTmV4dCAiIC4gJG51bWJlciAuICIgZm9sbG93ZXJz
IG9mIEAiIC4gJGRbJ3VzZXJuYW1lJ10gLiAiIGNvbGxlY3RlZC4gVG90YWw6ICIgLiBudW1iZXJf
Zm9ybWF0KCRkYXRhWyRrZXldWyd1c2Vyc19jb3VudCddLCAwLCAnLicsICcgJykgLiAiIGZvbGxv
d2VycyBvZiBAIiAuICRkWyd1c2VybmFtZSddIC4gIiBwYXJzZWQuIik7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgJGluZGV4X25ldyA9IDA7CiAgICAgICAgICAgICAgICAkaW5k
ZXhfb2xkID0gMDsKICAgICAgICAgICAgICAgICRsYXN0ID0gZmFsc2U7CgogICAgICAgICAgICAg
ICAgZG8geyAKICAgICAgICAgICAgICAgICAgICAkaW5kZXhfbmV3ICs9IDEzOwoKICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzc2V0KCRmb2xsb3dlcnNfaWRzWyRpbmRleF9uZXddKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5k
ZXhfbmV3IC09IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCFpc3NldCgkZm9s
bG93ZXJzX2lkc1skaW5kZXhfbmV3XSkpOwogICAgICAgICAgICAgICAgICAgICAgICAkbGFzdCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJGlu
ZGV4X25ldyA8ICRpbmRleF9vbGQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkaWRzID0gW107CiAgICAg
ICAgICAgICAgICAgICAgZm9yICgkaSA9ICRpbmRleF9vbGQ7ICRpIDw9ICRpbmRleF9uZXc7ICRp
KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGlkc1tdID0gJGZvbGxvd2Vyc19pZHNbJGld
OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgJHN0b3JpZXNfcmVlbHMgPSAkaWctPnN0b3J5LT5nZXRSZWVsc01l
ZGlhRmVlZCgkaWRzKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRjb3VudGVyMSArPSAxOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRzdG9yaWVzX3JlZWxzKSAmJiAkc3Rv
cmllc19yZWVscy0+aXNPaygpICYmIGNvdW50KCRzdG9yaWVzX3JlZWxzLT5nZXRSZWVscygpLT5n
ZXREYXRhKCkpID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2F2ZSB1c2Vy
IHN0b3J5IHJlZWxzJ3MgdG8gYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWVs
cyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlZWxzID0gJHN0b3JpZXNfcmVl
bHMtPmdldFJlZWxzKCktPmdldERhdGEoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JlYWNoICgkcmVlbHMgYXMgJHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
aXRlbXMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3Rvcmllc19sb29w
ID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1zID0gJHItPmdldEl0
ZW1zKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghJGl0ZW0tPmdldElkKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0ZW0gaXMgbm90IHZhbGlkCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkc3Rvcmllc19sb29wW10gPSAkaXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkc3Rvcmllcykp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0b3JpZXMgPSAkc3Rvcmll
c19sb29wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdG9yaWVzID0gYXJyYXlfbWVyZ2UoJHN0b3Jp
ZXMsICRzdG9yaWVzX2xvb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0X2NvdW50ID0gICRzdF9jb3VudCArIGNv
dW50KCRzdG9yaWVzX2xvb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2aWV3
X2NvdW50ID0gJHZpZXdfY291bnQgKyBjb3VudCgkc3Rvcmllc19sb29wKTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJG5vd19mID0gc3RydG90aW1lKGRhdGUoIlktbS1kIEg6aTpz
IikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbm93X2YgLSAkYmVnaW5f
ZiA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJlZ2luX2YgPSBz
dHJ0b3RpbWUoZGF0ZSgiWS1tLWQgSDppOnMiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG91dHB1dCgkc3RfY291bnQgLiAiIHN0b3JpZXMgZm91bmQuIC8gRGVidWc6
IGdldFJlZWxzTWVkaWFGZWVkICgiIC4gJGNvdW50ZXIxIC4gIiksIG1hcmtNZWRpYVNlZW4gKCIg
LiAkY291bnRlcjIgLiAiKSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQoJHN0X2NvdW50IC4gIiBzdG9yaWVzIGZvdW5kLiIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdF9j
b3VudCA+IDIwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXRw
dXQoJHN0X2NvdW50IC4gIiBzdG9yaWVzIGZvdW5kLiAvIERlYnVnOiBnZXRSZWVsc01lZGlhRmVl
ZCAoIiAuICRjb3VudGVyMSAuICIpLCBtYXJrTWVkaWFTZWVuICgiIC4gJGNvdW50ZXIyIC4gIiki
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCRzdF9jb3VudCAu
ICIgc3RvcmllcyBmb3VuZC4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICRub3dfbXMgPSBzdHJ0b3RpbWUoZGF0ZSgiWS1tLWQgSDppOnMiKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbm93X21zIC0gJGJlZ2luX21zID49ICRkZWxheSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsIGZpbmUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICRjb3VudGVyMyA9ICRkZWxheSAtICgkbm93X21zIC0g
JGJlZ2luX21zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCgiU3RhcnRpbmcgIiAuICRjb3VudGVyMyAuICIgc2Vjb25kKHMpIGRlbGF5IGZvciBieXBhc3Np
bmcgSW5zdGFncmFtIGxpbWl0cy4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQoJGNvdW50ZXIzIC4gIiBzZWNvbmQocykgbGVmdC4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCgxKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAkY291bnRlcjMgLT0gMTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCRjb3VudGVyMyAhPSAwKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTWFyayBjb2xsZWN0ZWQgc3RvcmllcyBhcyBzZWVuCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICRtYXJrX3NlZW5fcmVzcCA9ICRpZy0+c3RvcnktPm1hcmtN
ZWRpYVNlZW4oJHN0b3JpZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
YmVnaW5fbXMgPSBzdHJ0b3RpbWUoZGF0ZSgiWS1tLWQgSDppOnMiKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkc3RfY291bnRfc2VlbiA9IG51bWJlcl9mb3JtYXQoJHN0X2NvdW50LCAwLCAnLicsICcgJyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb3VudGVyMiArPSAxOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXRwdXQoJHN0X2NvdW50X3NlZW4g
LiAiIHN0b3JpZXMgbWFya2VkIGFzIHNlZW4uIC8gRGVidWc6IGdldFJlZWxzTWVkaWFGZWVkICgi
IC4gJGNvdW50ZXIxIC4gIiksIG1hcmtNZWRpYVNlZW4gKCIgLiAkY291bnRlcjIgLiAiKS4iKTsg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgkc3RfY291bnRfc2Vl
biAuICIgc3RvcmllcyBtYXJrZWQgYXMgc2Vlbi4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHB1dF9jbGVhbigiIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dF9jbGVhbigiVG90YWw6ICIgLiBudW1iZXJfZm9ybWF0KCR2aWV3X2Nv
dW50LCAwLCAnLicsICcgJykgLiAiIHN0b3JpZXMgc3VjY2Vzc2Z1bGx5IHNlZW4uIMKpIE1hc3Ns
b29raW5nLm5ldC4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
X2NsZWFuKCIiKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJbml0aWFsaXplIGFycmF5cyBhbmQgcGFyYW1ldGVycyBhZ2FpbgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RvcmllcyA9IFtdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAkc3RfY291bnQgPSAwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCgkc3RfY291bnQgPiAwKSAmJiAkbGFzdCAmJiAkZGF0YVska2V5XVsnbWF4X2lk
J10gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFyayBjb2xsZWN0
ZWQgc3RvcmllcyBhcyBzZWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWFya19zZWVu
X3Jlc3AgPSAkaWctPnN0b3J5LT5tYXJrTWVkaWFTZWVuKCRzdG9yaWVzKTsgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RfY291bnRf
c2VlbiA9IG51bWJlcl9mb3JtYXQoJHN0X2NvdW50LCAwLCAnLicsICcgJyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkY291bnRlcjIgKz0gMTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG91dHB1dCgkc3RfY291bnRfc2VlbiAuICIgc3RvcmllcyBtYXJrZWQgYXMgc2Vlbi4g
LyBEZWJ1ZzogZ2V0UmVlbHNNZWRpYUZlZWQgKCIgLiAkY291bnRlcjEgLiAiKSwgbWFya01lZGlh
U2VlbiAoIiAuICRjb3VudGVyMiAuICIpLiIpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dCgkc3RfY291bnRfc2VlbiAuICIgc3RvcmllcyBtYXJrZWQgYXMgc2Vlbi4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jbGVhbigiIik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXRfY2xlYW4oIlRvdGFsOiAiIC4gbnVtYmVyX2Zvcm1hdCgkdmll
d19jb3VudCwgMCwgJy4nLCAnICcpIC4gIiBzdG9yaWVzIHN1Y2Nlc3NmdWxseSBzZWVuLiDCqSBN
YXNzbG9va2luZy5uZXQuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY2xl
YW4oIiIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgYXJyYXlz
IGFuZCBwYXJhbWV0ZXJzIGFnYWluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3Rvcmll
cyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0X2NvdW50ID0gMDsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdy
YW1BUElcRXhjZXB0aW9uXE5ldHdvcmtFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0KCJXZSBjb3VsZG4ndCBjb25uZWN0IHRvIEluc3RhZ3JhbSBhdCB0aGUgbW9t
ZW50LiBUcnlpbmcgYWdhaW4uIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKDcpOwog
ICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXhfbmV3IC09IDEzOwogICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFt
QVBJXEV4Y2VwdGlvblxFbXB0eVJlc3BvbnNlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHB1dCgiSW5zdGFncmFtIHNlbnQgdXMgZW1wdHkgcmVzcG9uc2UuIFRyeWlu
ZyBhZ2Fpbi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoNyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICRpbmRleF9uZXcgLT0gMTM7CiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0
aW9uXExvZ2luUmVxdWlyZWRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0KCJQbGVhc2UgbG9naW4gYWdhaW4gdG8geW91ciBJbnN0YWdyYW0gYWNjb3VudC4gTG9n
aW4gcmVxdWlyZWQuIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bigkaWcpOwogICAgICAg
ICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXENoYWxsZW5nZVJl
cXVpcmVkRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgiUGxl
YXNlIGxvZ2luIGFnYWluIGFuZCBwYXNzIHZlcmlmaWNhdGlvbiBjaGFsbGVuZ2UuIEluc3RhZ3Jh
bSB3aWxsIHNlbmQgeW91IGEgc2VjdXJpdHkgY29kZSB0byB2ZXJpZnkgeW91ciBpZGVudGl0eS4i
KTsKICAgICAgICAgICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAgICAgICAgICAg
fSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cQ2hlY2twb2ludFJlcXVpcmVkRXhjZXB0
aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgiUGxlYXNlIGdvIHRvIElu
c3RhZ3JhbSB3ZWJzaXRlIG9yIG1vYmlsZSBhcHAgYW5kIHBhc3MgY2hlY2twb2ludCEiKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRj
aCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cQWNjb3VudERpc2FibGVkRXhjZXB0aW9uICRlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgiWW91ciBhY2NvdW50IGhhcyBiZWVuIGRp
c2FibGVkIGZvciB2aW9sYXRpbmcgSW5zdGFncmFtIHRlcm1zLiBHbyBJbnN0YWdyYW0gd2Vic2l0
ZSBvciBtb2JpbGUgYXBwIHRvIGxlYXJuIGhvdyB5b3UgbWF5IGJlIGFibGUgdG8gcmVzdG9yZSB5
b3VyIGFjY291bnQuIik7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgiVXNlIHRoaXMg
Zm9ybSBmb3IgcmVjb3ZlcnkgeW91ciBhY2NvdW50OiBodHRwczovL2hlbHAuaW5zdGFncmFtLmNv
bS9jb250YWN0LzE2NTI1Njc4MzgyODkwODMiKTsKICAgICAgICAgICAgICAgICAgICAgICAgcnVu
KCRpZyk7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRp
b25cQ29uc2VudFJlcXVpcmVkRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dCgiSW5zdGFncmFtIHVwZGF0ZWQgVGVybXMgYW5kIERhdGEgUG9saWN5LiBQbGVhc2Ug
Z28gdG8gSW5zdGFncmFtIHdlYnNpdGUgb3IgbW9iaWxlIGFwcCB0byByZXZpZXcgdGhlc2UgY2hh
bmdlcyBhbmQgYWNjZXB0IHRoZW0uIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bigkaWcp
OwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0aW9uXFNl
bnRyeUJsb2NrRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCgi
QWNjZXNzIHRvIEluc3RhZ3JhbSBBUEkgcmVzdHJpY3RlZCBmb3IgdGhpcyBhY2NvdW50LiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICAgICAgICAgICAgICB9IGNh
dGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxUaHJvdHRsZWRFeGNlcHRpb24gJGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KCJUaHJvdHRsZWQgYnkgSW5zdGFncmFtIGJlY2F1
c2Ugb2YgdG9vIG1hbnkgQVBJIHJlcXVlc3RzLiIpOwogICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQoIlBsZWFzZSBjb25uZWN0IGFjY291bnQgYWdhaW4gYWZ0ZXIgMTIgaG91cnMuIFlvdSBy
ZWFjaGVkIEluc3RhZ3JhbSBkYWlseSBsaW1pdCBmb3IgbWFzc2xvb2tpbmcuIEp1c3QgdGFrZSBh
IGJyZWFrLiIpOwogICAgICAgICAgICAgICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICAgICAg
ICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpewogICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQoJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKDcp
OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAkaW5kZXhfb2xkID0gJGluZGV4X25ldyArIDE7CgogICAgICAgICAgICAgICAgfSB3
aGlsZSAoJGxhc3QgPT0gZmFsc2UpOwoKICAgICAgICAgICAgICAgIC8vIFNwZWVkIHJlbGF0ZWQg
ZGVsYXkKICAgICAgICAgICAgICAgIC8vIHNsZWVwKCRkZWxheSk7CgogICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgaXMgJG1heF9pZCBpcyBudWxsCiAgICAgICAgICAgICAgICBpZiAoJGRhdGFbJGtl
eV1bJ21heF9pZCddID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY2xlYW4o
IkFsbCBzdG9yaWVzIG9mIEAiIC4gICRkWyd1c2VybmFtZSddIC4gIidzIGZvbGxvd2VycyBzdWNj
ZXNzZnVsbHkgc2Vlbi4iKTsKICAgICAgICAgICAgICAgICAgICB1bnNldCgkZGF0YVska2V5XSk7
CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAg
ICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxOZXR3b3JrRXhjZXB0aW9uICRl
KSB7CiAgICAgICAgICAgICAgICBzbGVlcCg3KTsKICAgICAgICAgICAgfSBjYXRjaCAoXEluc3Rh
Z3JhbUFQSVxFeGNlcHRpb25cRW1wdHlSZXNwb25zZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAg
ICAgICAgc2xlZXAoNyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1BUElcRXhjZXB0
aW9uXExvZ2luUmVxdWlyZWRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgIG91dHB1dCgi
UGxlYXNlIGxvZ2luIGFnYWluIHRvIHlvdXIgSW5zdGFncmFtIGFjY291bnQuIExvZ2luIHJlcXVp
cmVkLiIpOwogICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxJ
bnN0YWdyYW1BUElcRXhjZXB0aW9uXENoYWxsZW5nZVJlcXVpcmVkRXhjZXB0aW9uICRlKSB7CiAg
ICAgICAgICAgICAgICBvdXRwdXQoIlBsZWFzZSBsb2dpbiBhZ2FpbiBhbmQgcGFzcyB2ZXJpZmlj
YXRpb24gY2hhbGxlbmdlLiBJbnN0YWdyYW0gd2lsbCBzZW5kIHlvdSBhIHNlY3VyaXR5IGNvZGUg
dG8gdmVyaWZ5IHlvdXIgaWRlbnRpdHkuIik7CiAgICAgICAgICAgICAgICBydW4oJGlnKTsKICAg
ICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cQ2hlY2twb2ludFJlcXVp
cmVkRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICBvdXRwdXQoIlBsZWFzZSBnbyB0byBJ
bnN0YWdyYW0gd2Vic2l0ZSBvciBtb2JpbGUgYXBwIGFuZCBwYXNzIGNoZWNrcG9pbnQhIik7CiAg
ICAgICAgICAgICAgICBydW4oJGlnKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQ
SVxFeGNlcHRpb25cQWNjb3VudERpc2FibGVkRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAg
ICBvdXRwdXQoIllvdXIgYWNjb3VudCBoYXMgYmVlbiBkaXNhYmxlZCBmb3IgdmlvbGF0aW5nIElu
c3RhZ3JhbSB0ZXJtcy4gR28gSW5zdGFncmFtIHdlYnNpdGUgb3IgbW9iaWxlIGFwcCB0byBsZWFy
biBob3cgeW91IG1heSBiZSBhYmxlIHRvIHJlc3RvcmUgeW91ciBhY2NvdW50LiIpOwogICAgICAg
ICAgICAgICAgb3V0cHV0KCJVc2UgdGhpcyBmb3JtIGZvciByZWNvdmVyeSB5b3VyIGFjY291bnQ6
IGh0dHBzOi8vaGVscC5pbnN0YWdyYW0uY29tL2NvbnRhY3QvMTY1MjU2NzgzODI4OTA4MyIpOwog
ICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxJbnN0YWdyYW1B
UElcRXhjZXB0aW9uXENvbnNlbnRSZXF1aXJlZEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAg
ICAgb3V0cHV0KCJJbnN0YWdyYW0gdXBkYXRlZCBUZXJtcyBhbmQgRGF0YSBQb2xpY3kuIFBsZWFz
ZSBnbyB0byBJbnN0YWdyYW0gd2Vic2l0ZSBvciBtb2JpbGUgYXBwIHRvIHJldmlldyB0aGVzZSBj
aGFuZ2VzIGFuZCBhY2NlcHQgdGhlbS4iKTsKICAgICAgICAgICAgICAgIHJ1bigkaWcpOwogICAg
ICAgICAgICB9IGNhdGNoIChcSW5zdGFncmFtQVBJXEV4Y2VwdGlvblxTZW50cnlCbG9ja0V4Y2Vw
dGlvbiAkZSkgewogICAgICAgICAgICAgICAgb3V0cHV0KCJBY2Nlc3MgdG8gSW5zdGFncmFtIEFQ
SSByZXN0cmljdGVkIGZvciB0aGlzIGFjY291bnQuIik7CiAgICAgICAgICAgICAgICBydW4oJGln
KTsKICAgICAgICAgICAgfSBjYXRjaCAoXEluc3RhZ3JhbUFQSVxFeGNlcHRpb25cVGhyb3R0bGVk
RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICBvdXRwdXQoIlRocm90dGxlZCBieSBJbnN0
YWdyYW0gYmVjYXVzZSBvZiB0b28gbWFueSBBUEkgcmVxdWVzdHMuIik7CiAgICAgICAgICAgICAg
ICBvdXRwdXQoIlBsZWFzZSBjb25uZWN0IGFjY291bnQgYWdhaW4gYWZ0ZXIgMTIgaG91cnMuIFlv
dSByZWFjaGVkIEluc3RhZ3JhbSBkYWlseSBsaW1pdCBmb3IgbWFzc2xvb2tpbmcuIEp1c3QgdGFr
ZSBhIGJyZWFrLiIpOwogICAgICAgICAgICAgICAgcnVuKCRpZyk7CiAgICAgICAgICAgIH0gY2F0
Y2ggKEV4Y2VwdGlvbiAkZSl7CiAgICAgICAgICAgICAgICBvdXRwdXQoJGUtPmdldE1lc3NhZ2Uo
KSk7CiAgICAgICAgICAgICAgICBzbGVlcCg3KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
IH0gd2hpbGUgKCFlbXB0eSgkZGF0YSkpOwoKICAgIG91dHB1dF9jbGVhbigiQWxsIHN0b3JpZXMg
cmVsYXRlZCB0byB0aGUgdGFyZ2V0cyBzZWVuLiBTdGFydGluZyB0aGUgbmV3IGxvb3AuIik7CiAg
ICBvdXRwdXRfY2xlYW4oIiIpOwoKICAgIG1hc3Nsb29raW5nX3YyKCR0YXJnZXRzLCAkaWcsICRk
ZWxheSk7IAp9"));

Function Calls

base64_decode 1

Variables

None

Stats

MD5 8a29e938290b045f15cb472765097b05
Eval Count 1
Decode Time 137 ms