Anda di halaman 1dari 197

<?php /** * * -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=* * WARNING: THERE ARE NO EDITABLE PORTIONS OF THIS SCRIPT.

* ALL OPTIONS ARE CONFIGURABLE VIA THE WEB INTERFACE. * * -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=* * Script Name: ImportBuddy.php for use with BackupBuddy backups. * Plugin URI: http://pluginbuddy.com/backupbuddy/ * Description: Backup - Restore - Migrate. Backs up files, settings, and conten t for a complete snapshot of your site. Allows migration to a new host or URL. * Version: 2.2.0 - See importbuddy/history.txt * Author: Dustin Bolton (PluginBuddy.com) * Author URI: http://dustinbolton.com/ * * Usage: * * 1. Upload this script to the server you would like to restore/migrate to. * 2. Upload your backup ZIP file created with BackupBuddy. * 3. Navigate to the web address of this script. Ex: http://yoursite.com/import buddy.php * 4. Follow the on screen instructions. * */ $php_minimum = '5.1'; // User's PHP must be equal or newer to this version. if ( version_compare( PHP_VERSION, $php_minimum ) < 0 ) { die( 'ERROR #9013. See <a href="http://ithemes.com/codex/page/BackupBudd y:_Error_Codes#9013">this codex page for details</a>. Sorry! PHP version ' . $ph p_minimum . ' or newer is required for BackupBuddy to properly run. You are runn ing PHP version ' . PHP_VERSION . '.' ); } class pluginbuddy_importbuddy { var $_version = '2.2.0'; var $_bbversion = '2.2.33'; var $_php_minimum = '5.2'; var $debug = false; // Displays PHP warnings. var $_timestamp = 'M j, Y, H:i:s'; // PHP timestamp format. var $_total_steps = '6'; var $_defaults = array( 'import_password' => '402051f 4be0cc3aad33bcf3ac3d6532b', // MD5 hash of the import password. Prevents una uthorized access. Default: #PASSWORD# 'password' => '', // MD5 hash of password given. 'file' => '', // Selected backup import file. 'zip_id' => '', // ID from the random strings in the ZIP filenam e. This allows finding of the temp directory in the wp-uploads directory. 'type' =>

'', te, restore

// Set on step 4 via a POST. Valid values: migra 'skip_files' 'skip_database_import' 'skip_database_migration' 'wipe_database' 'skip_htaccess' 'force_compatibility_medium'=> 'force_compatibility_slow' 'show_php_warnings' 'replace_existing_tables' 'ignore_sql_errors' => => => => => false, => => => => false, false, false, false, false, false, false, false, false,

'log_level' => 2, // 0 = none, 1 = errors only, 2 = errors + warni ngs, 3 = debugging (all kinds of actions) 'db_server' => '', 'db_user' => '', 'db_password' => '', 'db_name' => '', 'db_prefix' => '', 'siteurl' => '', ); var $has_access = false; var $_backupdata; const UPLOAD_ACCESS_DENIED = 'To prevent unauthorized file uploads an im portbuddy password must be configured to use this feature.'; /** * pluginbuddy_importbuddy() * * Default constructor. * */ function __construct() { // Prevent access to importbuddy.php if it is still in plugin di rectory. if ( file_exists( dirname( __FILE__ ) . '/backupbuddy.php' ) ) { echo 'The BackupBuddy importer, ImportBuddy, can ONLY be accessed on the destination server that you wish to import your backup to.<br>' ; echo 'Upload the importer in the root web directory on t he destination server and try again.<br><br>'; echo 'If you need assistance visit <a href="http://plugi nbuddy.com">http://pluginbuddy.com</a>'; die(); } define( 'ABSPATH', dirname( __FILE__ ) . '/' ); date_default_timezone_set( @date_default_timezone_get() ); // Pr events date() from throwing a warning if the default timezone has not been set.

// Unpack importbuddy files into importbuddy directory. if ( !file_exists( ABSPATH . 'importbuddy' ) ) { unpack_importbuddy(); } // Return image if requested. if ( isset( $_GET['ezimg'] ) ) { require_once( 'importbuddy/classes/ezimg.php' ); ezimg::showImg( $_GET['ezimg'] ); } // Start logging time for steps that report how long they took. $this->time_start = microtime( true ); // Try to prevent browser timeouts. Greedy script limits are han dled on the steps that need them. header( 'Keep-Alive: 3600' ); header( 'Connection: keep-alive' ); // Set up options. if ( isset( $_POST['options'] ) ) { $this->_options = unserialize( stripslashes( htmlspecial chars_decode( $_POST['options'] ) ) ); $this->_options = array_merge( $this->_defaults, (array) $this->_options ); // Add in any defaults not explicitly set yet. } else { $this->_options = $this->_defaults; } if ( $this->_options['log_serial'] == '' ) { $this->_options['log_serial'] = $this->rand_string( 10 ) ; } // Database step's AJAX-based tester. if ( isset( $_POST['action'] ) && ( $_POST['action'] == 'mysql_t est' ) ) { require_once( 'importbuddy/classes/mysql_test.php' ); } // Set up PHP error levels. if ( ( $this->debug === true ) || ( $this->_options['show_php_wa rnings'] === true ) ) { error_reporting( E_ERROR | E_WARNING | E_PARSE | E_NOTIC E ); // HIGH $this->log( 'PHP error reporting set HIGH.' ); } else { error_reporting( E_ALL ^ E_NOTICE ); // LOW } // Detect max execution time for database steps so they can paus e when needed for additional PHP processes. $this->detected_max_execution_time = str_ireplace( 's', '', ini_ get( 'max_execution_time' ) ); if ( is_numeric( $this->detected_max_execution_time ) === false ) { $detected_max_execution_time = 30; }

// Determine the current step. if ( ( isset( $_GET['step'] ) ) && ( is_numeric( $_GET['step'] ) ) ) { $this->_step = $_GET['step']; } else { $this->_step = 1; } // Handle importbuddy authentication (if needed). $this->has_access = false; // default if ( $this->_defaults['import_password'] == '#PASSWORD#' ) { //$this->has_access = true; die( 'ERROR: A password is required to be set to use thi s script for security purposes. This prevents unauthorized usage of the script. ' ); } else { if ( md5( $this->_options['password'] ) == $this->_defau lts['import_password'] ) { $this->has_access = true; } if ( isset( $_POST['password'] ) || isset( $_GET['v'] ) ) { if ( md5( $_POST['password'] ) == $this->_d efaults['import_password'] ) { $this->_options['password'] = $_POST['pa ssword']; $this->has_access = true; } if ( isset( $_GET['v'] ) && ( $_GET['v'] == ( 'xv' . md5( $this->_defaults['import_password'] . 'importbuddy' ) ) ) ) { $this->has_access = true; } } } // Run function for the requested step. require_once( 'importbuddy/classes/ezimg.php' ); // Handles displaying the current page and running the needed co de for that step. $mode = 'html'; if ( $mode == 'html' ) { require_once( 'importbuddy/classes/view_page.php' ); } elseif ( $mode == 'api_1' ) { die( 'API not implemented yet.' ); if ( $this->has_access === true ) { require_once( 'step_' . $this->_step . '_api.php ' ); } else { $this->status( 'error', 'Access Denied. You must authenticate first.' ); die( "Access Denied.\n" ); } } } function rand_string($length = 32, $chars = 'abcdefghijkmnopqrstuvwxyz12 34567890') { $chars_length = (strlen($chars) - 1);

$string = $chars{rand(0, $chars_length)}; for ($i = 1; $i < $length; $i = strlen($string)) { $r = $chars{rand(0, $chars_length)}; if ($r != $string{$i - 1}) $string .= $r; } return $string; } /** * log() * * Logs to a text file depending on settings. * 0 = none, 1 = errors only, 2 = errors + warnings, 3 = debugging (all kinds of actions) * * $text string Text to log. * $log_type string Valid options: error, warning, a ll (default so may be omitted). * */ function log( $text, $log_type = 'all' ) { if ( defined( 'PB_DEMO_MODE' ) ) { return; } $write = false; if ( !isset( $this->_options['log_level'] ) ) { $this->load(); } if ( $this->_options['log_level'] == 0 ) { // No logging. return; } elseif ( $this->_options['log_level'] == 1 ) { // Errors only. if ( $log_type == 'error' ) { $write = true; } } elseif ( $this->_options['log_level'] == 2 ) { // Errors and w arnings only. if ( ( $log_type == 'error' ) || ( $log_type == 'warning ' ) ) { $write = true; } } elseif ( $this->_options['log_level'] == 3 ) { // Log all; Err ors, warnings, actions, notes, etc. $write = true; } if ( $write === true ) { $fh = @fopen( ABSPATH . '/importbuddy-' . $this->_option s['log_serial'] . '.txt', 'a'); if ( $fh ) { fwrite( $fh, '[' . date( $this->_timestamp ) . ' -' . $log_type . '] ' . $text . "\n" ); fclose( $fh ); } } }

/** * tip() * * Displays a message to the user when they hover over the question mark. Gracefully falls back to normal tooltip. * HTML is supposed within tooltips. * * $message string Actual message to show t o user. * $title string Title of message to show to user. This is displayed at top of tip in bigger letters. Default is blank. ( optional) * $echo_tip boolean Whether to echo the tip (default; true), or return the tip (false). (optional) */ function tip( $message, $title = '', $echo_tip = true ) { $tip = ' <a class="pluginbuddy_tip" title="' . $title . ' - ' . $message . '">' . ezimg::genImageTag( 'pluginbuddy_tip.png' ) . '</a>'; if ( $echo_tip === true ) { echo $tip; } else { return $tip; } } /** * alert() * * Displays a message to the user. * * $message string Message you want to disp lay to the user. * $error boolean OPTIONAL! true indicates this alert is an error and displays as red. Default: false * $error_code int OPTIONAL! Error code number to use in linking in the wiki for easy reference. */ function alert( $message_title, $message_details = '', $error_code = '' ) { ?> <div class="alert"> <img src="?ezimg=alert.png" style="float: left;" height= "55"> <div style="margin-left: 65px;"> <b><?php echo $message_title; ?></b><br><br> <?php echo $message_details; ?> <?php if ( ( $error_code != '' ) && ( $error_code != ' 9021' ) ) { echo '<p><a href="http://ithemes.com/cod ex/page/BackupBuddy:_Error_Codes#' . $error_code . '" target="_new"><i>BackupBud dy Error Code ' . $error_code . ' - Click for more details.</i></a></p>'; $this->log( 'Error #' . $error_code . ': ' . $message_title, 'error' ); } ?> </div> </div> <?php

} /** * status_box() * * Displays a textarea for placing status text into. * * @param $default_text string First li ne of text to display. * @return string HTML for textarea. */ function status_box( $default_text = '' ) { return '<textarea style="width: 100%; height: 120px;" id="import buddy_status">' . $default_text . '</textarea>'; } /** * status() * * Write a status line into an existing textarea created with the s tatus_box() function. * * @param $type string message, details, error, or warning. Currently not in use. * @param $message string Message to append to the status box. * @param $log boolean Default: true. Pass to log() function. * @return null */ function status( $type, $message, $log = true ) { $status = date( $this->_timestamp, time() ) . ': ' . htmlentitie s( addslashes( $message ) ); echo '<script type="text/javascript">jQuery( "#importbuddy_statu s" ).append( "\n' . $status . '"); textareaelem = document.getElementById( "importbuddy_status" ); textareaelem.scrollTop = textareaelem.scrollHeight; </script>'; flush(); if ( $type == 'error' ) { $this->log( $message, 'error' ); } elseif ( $type == 'warning' ) { $this->log( $message, 'warning' ); } else { $this->log( '[' . $type . '] ' . $message, 'all' ); } } /** * set_greedy_script_limits() * * Sets greedy script limits to help prevent timeouts, running out of memory, etc. * * @return null

* */ function set_greedy_script_limits( &$status_callback = '' ) { $status_callback = &$status_callback; if ( ( $status_callback == '' ) && ( method_exists( $this, 'stat us' ) ) ) { $status_callback = &$this; } $this->status( 'message', 'Requisitioning increased server resou rces.' ); // Don't abort script if the client connection is lost/closed @ignore_user_abort( true ); // Set socket timeout to 2 hours. @ini_set( 'default_socket_timeout', 60 * 60 * 2 ); // Set maximum runtime to 2 hours. $original_maximum_runtime = ini_get( 'max_execution_time' ); @set_time_limit( 60 * 60 * 2 ); $this->log( 'Attempted to increase maximum PHP runtime. Original : ' . $original_maximum_runtime . '; New: ' . @ini_get( 'max_execution_time' ) . '.' ); // Increase the memory limit $current_memory_limit = trim( @ini_get( 'memory_limit' ) ); // Make sure a minimum memory limit of 256MB is set. if ( preg_match( '/(\d+)(\w*)/', $current_memory_limit, $matches ) ) { $current_memory_limit = $matches[1]; $unit = $matches[2]; // Up memory limit if currently lower than 256M. if ( 'g' !== strtolower( $unit ) ) { if ( ( $current_memory_limit < 256 ) || ( 'm' != = strtolower( $unit ) ) ) @ini_set('memory_limit', '256M'); $this->log( 'Set memory limit to 256M. P revious value < 256M.' ); } } else { // Couldn't determine current limit, set to 256M to be s afe. @ini_set('memory_limit', '256M'); $this->log( 'Set memory limit to 256M. Previous value un known.' ); } $this->log( 'Original PHP memory limit: ' . $current_memory_limi t . '; New: ' . @ini_get( 'memory_limit' ) . '.' ); } function remove_file( $file, $description, $error_on_missing = false ) { $this->status( 'message', 'Deleting `' . $description . '`...' ) ; @chmod( $file, 0755 ); // High permissions to delete.

if ( is_dir( $file ) ) { // directory. $this->remove_dir( $file ); if ( file_exists( $file ) ) { $this->status( 'error', 'Unable to delete direct ory: `' . $description . '`. You should manually delete it.' ); } else { $this->status( 'message', 'Deleted.', false ); / / No logging of this action to prevent recreating log. } } else { // file if ( file_exists( $file ) ) { if ( @unlink( $file ) != 1 ) { $this->status( 'error', 'Unable to delet e file: `' . $description . '`. You should manually delete it.' ); } else { $this->status( 'message', 'Deleted.', fa lse ); // No logging of this action to prevent recreating log. } } } } function get_fileperms( $file ) { $perms = fileperms( $file ); if (($perms & 0xC000) == 0xC000) { // Socket $info = 's'; } elseif (($perms & 0xA000) == 0xA000) // Symbolic Link $info = 'l'; } elseif (($perms & 0x8000) == 0x8000) // Regular $info = '-'; } elseif (($perms & 0x6000) == 0x6000) // Block special $info = 'b'; } elseif (($perms & 0x4000) == 0x4000) // Directory $info = 'd'; } elseif (($perms & 0x2000) == 0x2000) // Character special $info = 'c'; } elseif (($perms & 0x1000) == 0x1000) // FIFO pipe $info = 'p'; } else { // Unknown $info = 'u'; }

{ { { { { {

// Owner $info .= (($perms & 0x0100) ? 'r' : '-'); $info .= (($perms & 0x0080) ? 'w' : '-'); $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-')); // Group

$info .= (($perms & 0x0020) ? 'r' : '-'); $info .= (($perms & 0x0010) ? 'w' : '-'); $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-')); // World $info .= (($perms & 0x0004) ? 'r' : '-'); $info .= (($perms & 0x0002) ? 'w' : '-'); $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-')); return $info; } /** * get_zip_id() * * Given a BackupBuddy ZIP file, extracts the random ZIP ID from th e filename. This random string determines * where BackupBuddy will find the temporary directory in the backu p's wp-uploads directory. IE a zip ID of * 3poje9j34 will mean the temporary directory is wp-uploads/temp_3 poje9j34/. backupbuddy_dat.php is in this * directory as well as the SQL dump. * * Currently handles old BackupBuddy ZIP file format. Remove this b ackward compatibility at some point. * * $file string BackupBuddy ZIP filename . * @return string ZIP ID characters. * */ function get_zip_id( $file ) { $posa = strrpos($file,'_')+1; $posb = strrpos($file,'-')+1; if ( $posa < $posb ) { $zip_id = strrpos($file,'-')+1; } else { $zip_id = strrpos($file,'_')+1; } $zip_id = substr( $file, $zip_id, - 4 ); return $zip_id; } /** * * * e of the backup * * * * *

load_backup_dat() Gets the serialized data from the backupbuddy_dat.php file insid ZIP. This happens post-file-extraction. Saves data to $this->_backupdata. @return null

* */ function load_backup_dat() { $maybe_backupdata_file = ABSPATH . 'wp-content/uploads/temp_'. $ this->_options['zip_id'] .'/backupbuddy_dat.php'; // Full backup dat file locati on $maybe_backupdata_file_new = ABSPATH . 'wp-content/uploads/backu pbuddy_temp/'. $this->_options['zip_id'] .'/backupbuddy_dat.php'; // Full backup dat file location if ( file_exists( $maybe_backupdata_file ) ) { // Full backup lo cation. $dat_file = $maybe_backupdata_file; } elseif ( file_exists( $maybe_backupdata_file_new ) ) { // Full backup location. $dat_file = $maybe_backupdata_file_new; } elseif ( file_exists( ABSPATH . 'backupbuddy_dat.php' ) ) { // DB only location. $dat_file = ABSPATH . 'backupbuddy_dat.php'; } else { echo 'Error: Unable to find DAT file.'; } $this->_backupdata = $this->get_backup_dat( $dat_file ); } function get_backup_dat( $dat_file ) { require_once( 'importbuddy/classes/_get_backup_dat.php' ); return $return; } /** * migrate_htaccess() * * Migrates .htaccess file if it exists. * * @return boolean False only if file is unwritable . True if write success; true if file does not even exist. * */ function migrate_htaccess() { if ( $this->_options['skip_htaccess'] == true ) { $this->status( 'message', 'Skipping .htaccess migration based on settings.' ); return true; } else { if ( !is_writable( ABSPATH . '.htaccess' ) ) { $this->status( 'error', 'Error #9020: Unable to write to .htaccess file. Verify permissions.' ); $this->alert( 'ERROR: Unable to write to file .h taccess.', 'Verify this file has proper write permissions. You may receive 404 N ot Found errors on your site if this is not corrected. Re-save permalinks to fix this.', '9020' ); return false; } // If no .htaccess file exists then create a basic defau lt one then migrate that as needed. @since 2.2.32. if ( !file_exists( ABSPATH . '.htaccess' ) ) { $this->status( 'message', 'No .htaccess file fou

nd. Creating basic default .htaccess file.' ); // Default .htaccess file. $htaccess_contents = "# BEGIN WordPress\n <IfModule mod_rewrite.c>\n RewriteEngine On\n RewriteBase /\n RewriteRule ^index\\.php$ - [L]\n RewriteCond %{REQUEST_FILENAME} !-f\n RewriteCond %{REQUEST_FILENAME} !-d\n RewriteRule . /index.php [L]\n </IfModule>\n # END WordPress\n"; file_put_contents( ABSPATH . '.htaccess', $htacc ess_contents ); unset( $htaccess_contents ); } $this->status( 'message', 'Migrating .htaccess file...' ); $oldurl = strtolower( $this->_backupdata['siteurl'] ); $oldurl = str_replace( '/', '\\', $oldurl ); $oldurl = str_replace( 'http:\\', '', $oldurl ); $oldurl = trim( $oldurl, '\\' ); $oldurl = explode( '\\', $oldurl ); $oldurl[0] = ''; $newurl = strtolower( $this->_options['siteurl'] ); $newurl = str_replace( '/', '\\', $newurl ); $newurl = str_replace( 'http:\\', '', $newurl ); $newurl = trim( $newurl, '\\' ); $newurl = explode( '\\', $newurl ); $newurl[0] = ''; $this->status( 'message', 'Checking .htaccess file.' ); // If the URL (domain and/or URL subdirectory ) has chan ged, then need to update .htaccess file. if ( $newurl !== $oldurl ) { $this->status( 'message', 'URL directory has cha nged. Updating from `' . implode( '/', $oldurl ) . '` to `' . implode( '/', $new url ) . '`.' ); $rewrite_lines = array(); $got_rewrite = false; $rewrite_path = implode( '/', $newurl ); $file_array = file( ABSPATH . '.htaccess' ); foreach ($file_array as $line_number => $line) { if ( $got_rewrite == true ) { // In a Wo rdPress section. if ( strstr( $line, 'END WordPre ss' ) ) { // End of a WordPress block so stop replacing. $got_rewrite = false; $rewrite_lines[] = $lin e; // Captures end of WordPress block. } else { if ( strstr( $line, 'Rew

riteBase' ) ) { // RewriteBase $rewrite_lines[] = 'RewriteBase ' . $rewrite_path . '/' . "\n"; } elseif ( strstr( $line , 'RewriteRule' ) ) { // RewriteRule if ( strstr( $li ne, '^index\.php$' ) ) { // Handle new strange rewriterule. Leave as is. $rewrite _lines[] = $line; $this->l og( 'Htaccess ^index\.php$ detected. Leaving as is.' ); } else { // Norm al spot. $rewrite _lines[] = 'RewriteRule . ' . $rewrite_path . '/index.php' . "\n"; } } else { $rewrite_lines[] = $line; // Captures everything inside WordPress block we arent modifying. } } } else { // Outside a WordPress section. if ( strstr( $line, 'BEGIN WordP ress' ) ) { $got_rewrite = true; // Beginning of a WordPress block so start replacing. } $rewrite_lines[] = $line; // Ca ptures everything outside of WordPress block. } } $handling = fopen( ABSPATH . '.htaccess', 'w'); fwrite( $handling, implode( $rewrite_lines ) ); fclose( $handling ); unset( $handling ); $this->status( 'message', 'Migrated .htaccess fi le.' ); } else { $this->status( 'message', 'No changes needed for .htaccess file.' ); } } return true; } /** * connect() * * Initializes a connection to the mysql database. * * @return boolean True on success; else false. Suc cess testing is very loose. */ function connect_database() { // Set up database connection. if ( false === @mysql_connect( $this->_options['db_server'], $th is->_options['db_user'], $this->_options['db_password'] ) ) {

$this->alert( 'ERROR: Unable to connect to database serv er and/or log in. Verify the database server name, username, and password. Detai ls: ' . mysql_error(), true, '9006' ); return false; } $database_name = mysql_real_escape_string( $this->_options['db_n ame'] ); flush(); // Select the database. if ( false === @mysql_select_db( $this->_options['db_name'] ) ) { $this->status( 'error', 'Error: Unable to connect or aut henticate to database `' . $this->_options['db_name'] . '`.' ); return false; } // Set up character set. Important. mysql_query("SET NAMES 'utf8'"); return true; } function restore_database( $query_start = 0 ) { $options['db_server'] = $this->_options['db_server']; $options['db_name'] = $this->_options['db_name']; $options['db_user'] = $this->_options['db_user']; $options['db_password'] = $this->_options['db_password']; $options['db_prefix'] = $this->_options['db_prefix']; $options['zip_id'] = $this->_options['zip_id']; $options['old_prefix'] = $this->_backupdata['db_prefix']; if ( $this->_options['ignore_sql_errors'] != false ) { $ignore_sql_errors = true; } else { $ignore_sql_errors = false; } require_once( 'importbuddy/lib/dbimport/dbimport.php' ); $dbimport = new pluginbuddy_dbimport( $options, $this, $ignore_s ql_errors ); $import_result = $dbimport->restore_database( $query_start ); return $import_result; } /** * migrate_database() * * Migrates the already imported database's content for updates ABS PATH and URL. * * @return boolean True=success, False=failed. * */ function migrate_database() { require( 'importbuddy/classes/_migrate_database.php' ); return $return;

} /** * * * a. * * @return boolean Currently always true. */ function wipe_database() { $this->status( 'message', 'Beginning wipe of database...' ); // Connect to database. $this->connect_database(); $result = mysql_query( 'SHOW TABLES' ); $table_wipe_count = mysql_num_rows( $result ); while( $row = mysql_fetch_row( $result ) ) { mysql_query( 'DROP TABLE `' . $row[0] . '`' ); } mysql_free_result( $result ); // Free memory. $this->status( 'message', 'Wiped database of ' . $table_wipe_cou nt . ' tables.' ); return true; } /** * remove_dir() * * ? * * @return ? */ function remove_dir( $dir ) { if ( !file_exists( $dir ) ) { return true; } if ( !is_dir( $dir ) || is_link( $dir ) ) { return unlink($dir); } foreach ( scandir( $dir ) as $item ) { if ( $item == '.' || $item == '..' ) { continue; } if ( !$this->remove_dir( $dir . "/" . $item ) ) { chmod( $dir . "/" . $item, 0777 ); if ( !$this->remove_dir( $dir . "/" . $item ) ) { return false; } } } return rmdir($dir); }

wipe_database() Clear out the existing database to prepare for importing new dat

/** * phpinfo_array() * * Get phpinfo() data as an array. * * @return array */ function phpinfo_array() { ob_start(); phpinfo(-1);

Array of phpinfo() data.

$pi = preg_replace( array('#^.*<body>(.*)</body>.*$#ms', '#<h2>PHP License</h2>.*$#m s', '#<h1>Configuration</h1>#', "#\r?\n#", "#</(h1|h2|h3|tr)>#", '# +<#', "#[ \t]+#", '#&nbsp;#', '# +#', '# class=".*?"#', '%&#039;%', '#<tr>(?:.*?)" src="(?:.*?)=(.*?)" alt="PHP Logo" /></a>' .'<h1>PHP Version (.*?)</h1>(?:\n+?)</td></tr>#', '#<h1><a href="(?:.*?)\?=(.*?)">PHP Credits</a></h1>#', '#<tr>(?:.*?)" src="(?:.*?)=(.*?)"(?:.*?)Zend Engine (.*?),(?:.* ?)</tr>#', "# +#", '#<tr>#', '#</tr>#'), array('$1', '', '', '', '</$1>' . "\n", '<', ' ', ' ', ' ', '', ' ', '<h2>PHP Configuration</h2>'."\n".'<tr><td>PHP Version</td><td>$ 2</td></tr>'. "\n".'<tr><td>PHP Egg</td><td>$1</td></tr>', '<tr><td>PHP Credits Egg</td><td>$1</td></tr>', '<tr><td>Zend Engine</td><td>$2</td></tr>' . "\n" . '<tr><td>Zend Egg</td><td>$1</td></tr>', ' ', '%S%', '%E%'), ob_get_clean()); $sections = explode('<h2>', strip_tags($pi, '<h2><th><td>')); unset($sections[0]); $pi = array(); foreach($sections as $section){ $n = substr($section, 0, strpos($section, '</h2>')); preg_match_all( '#%S%(?:<td>(.*?)</td>)?(?:<td>(.*?)</td >)?(?:<td>(.*?)</td>)?%E%#', $section, $askapache, PREG_SET_ORDER); foreach($askapache as $m) { if (isset($m[2])) { // Fix undefined offset warn ing. $pi[$n][$m[1]]=(!isset($m[3])||$m[2]==$m [3])?$m[2]:array_slice($m,2); } } } return $pi; } /** * * * * *

migrate_wp_config() Migrates and updates the wp-config.php file contents as needed. @return null True on success.

Currently always true. */ function migrate_wp_config() { $this->status( 'message', 'Starting migration of wp-config.php f ile...' ); flush(); // Check that we can write to this file. if ( !is_writable( ABSPATH . 'wp-config.php' ) ) { $this->alert( 'ERROR: Unable to write to file wp-config. php.', 'Verify this file has proper write permissions.', '9020' ); return false; } if ( file_exists( ABSPATH . 'wp-config.php' ) ) { // Useful REGEX site: http://gskinner.com/RegExr/ $updated_home_url = false; $wp_config = array(); $lines = file( ABSPATH . 'wp-config.php' ); $patterns = array(); $replacements = array(); /* Update WP_SITEURL, WP_HOME if they exist. Update database DB_NAME, DB_USER, DB_PASSWORD, and DB_HO ST. RegExp: /define\([\s]*('|")WP_SITEURL('|"),[\s]*('|")(.) *('|")[\s]*\);/gi pattern: define\([\s]*('|")WP_SITEURL('|"),[\s]*('|")(.) *('|")[\s]*\); */ $pattern[0] *(\'|")(.)*(\'|")[\s]*\);/i'; $replace[0] options['siteurl'], '/' ) . "' );"; $pattern[1] '|")(.)*(\'|")[\s]*\);/i'; $replace[1] ions['home'], '/' ) . "' );"; $pattern[2] '|")(.)*(\'|")[\s]*\);/i'; $replace[2] db_name'] . "' );"; $pattern[3] '|")(.)*(\'|")[\s]*\);/i'; $replace[3] db_user'] . "' );"; $pattern[4] ]*(\'|")(.)*(\'|")[\s]*\);/i'; $replace[4] ns['db_password'] . "' );"; $pattern[5] '|")(.)*(\'|")[\s]*\);/i'; $replace[5] db_server'] . "' );"; = '/define\([\s]*(\'|")WP_SITEURL(\'|"),[\s] = "define( 'WP_SITEURL', '" . trim( $this->_ = '/define\([\s]*(\'|")WP_HOME(\'|"),[\s]*(\ = "define( 'WP_HOME', '" . trim( $this->_opt = '/define\([\s]*(\'|")DB_NAME(\'|"),[\s]*(\ = "define( 'DB_NAME', '" . $this->_options[' = '/define\([\s]*(\'|")DB_USER(\'|"),[\s]*(\ = "define( 'DB_USER', '" . $this->_options[' = '/define\([\s]*(\'|")DB_PASSWORD(\'|"),[\s = "define( 'DB_PASSWORD', '" . $this->_optio = '/define\([\s]*(\'|")DB_HOST(\'|"),[\s]*(\ = "define( 'DB_HOST', '" . $this->_options['

// If multisite, update domain. $pattern[6] = '/define\([\s]*(\'|")DOMAIN_CURRENT_SITE(\ '|"),[\s]*(\'|")(.)*(\'|")[\s]*\);/i'; $replace[6] = "define( 'DOMAIN_CURRENT_SITE', '" . $this ->_options['domain'] . "' );"; /* Update table prefix. RegExp: /\$table_prefix[\s]*=[\s]*('|")(.)*('|");/gi pattern: \$table_prefix[\s]*=[\s]*('|")(.)*('|"); */ $pattern[7] = '/\$table_prefix[\s]*=[\s]*(\'|")(.)*(\'|" );/i'; $replace[7] = '$table_prefix = \'' . $this->_options['db _prefix'] . '\';'; // Perform the actual replacement. $lines = preg_replace( $pattern, $replace, $lines ); // Write changes to config file. if ( false === ( file_put_contents( ABSPATH . 'wp-config .php', $lines ) ) ) { $this->alert( 'ERROR: Unable to save changes to wp-config.php.', 'Verify this file has proper write permissions.', '9020' ); return false; } unset( $lines ); } else { $this->status( 'warning', 'Warning: wp-config.php file n ot found.' ); $this->alert( 'Note: wp-config.php file not found. This is normal for a database only backup.' ); } $this->status( 'message', 'Migration of wp-config.php complete.' ); return true; } /** * array_remove() * * Removes array values in $remove from $array. * * @param $array array rray. This will have values removed and be returned. * @param $remove array values to search for in $array and remove. * @return array Returns array $array stripped of all values found in $remove */ function array_remove( $array, $remove ) { if ( !is_array( $remove ) ) { $remove = array( $remove ); } return array_values( array_diff( $array, $remove ) ); }

Source a Array of

// TODO: Modify all references to use unlink_recursive() function delete_directory( $dir ) { unlink_recursive( $dir ); } } define( 'pluginbuddy_importbuddy', true ); // Tell Server Info page to not load some sections. $pluginbuddy_importbuddy = new pluginbuddy_importbuddy(); // Compatibility with some WordPress localization. function __( $text, $domain ) { return $text; } function _e( $text, $domain ) { echo $text; } /** * unlink_recursive() * * Recursively unlinks (deletes) the directories and all files and director ies within. * * $path string Full absolute path to file / directory t o delete. * @return null * */ function unlink_recursive( $dir ) { if ( !file_exists( $dir ) ) { return true; } if ( !is_dir( $dir ) || is_link( $dir ) ) { return unlink($dir); } foreach ( scandir( $dir ) as $item ) { if ( $item == '.' || $item == '..' ) { continue; } if ( !unlink_recursive( $dir . "/" . $item ) ) { chmod( $dir . "/" . $item, 0777 ); if ( !unlink_recursive( $dir . "/" . $item ) ) { return false; } } } return rmdir( $dir ); } /** * * *

mkdir_recursive() Recursively creates the directories needed to generate a full directory

path. * * $path string Full absolute path to generate. * @return null * */ function mkdir_recursive( $path ) { if ( empty( $path ) ) { // prevent infinite loop on bad path return; } is_dir( dirname( $path ) ) || mkdir_recursive( dirname( $path ) ); return is_dir( $path ) || mkdir( $path ); } /** * Check value to find if it was serialized. * * If $data is not an string, then returned value will always be false. * Serialized data is always a string. * Courtesy WordPress; since WordPress 2.0.5. * * @param mixed $data Value to check to see if was serialized. * @return bool False if not serialized and true if it was. */ function is_serialized( $data ) { // if it isn't a string, it isn't serialized if ( ! is_string( $data ) ) return false; $data = trim( $data ); if ( 'N;' == $data ) return true; $length = strlen( $data ); if ( $length < 4 ) return false; if ( ':' !== $data[1] ) return false; $lastc = $data[$length-1]; if ( ';' !== $lastc && '}' !== $lastc ) return false; $token = $data[0]; switch ( $token ) { case 's' : if ( '"' !== $data[$length-2] ) return false; case 'a' : case 'O' : return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data ); case 'b' : case 'i' : case 'd' : return (bool) preg_match( "/^{$token}:[0-9.E-]+;\$/", $d ata ); } return false; } /**

* array_remove() * * Removes array values in $remove from $array. * * @param $array array is will have values removed and be returned. * @param $remove array to search for in $array and remove. * @return array array $array stripped of all values found in $remove */ function array_remove( $array, $remove ) { if ( !is_array( $remove ) ) { $remove = array( $remove ); } return array_values( array_diff( $array, $remove ) ); }

Source array. Th Array of values Returns

/** * unpack_importbuddy() * * Unpacks required files encoded in importbuddy.php into stand-alone files . * * @return null */ function unpack_importbuddy() { if ( !is_writable( ABSPATH ) ) { echo 'Error #224834. This directory is not write enabled. Please verify write permissions to continue.'; die(); } else { $unpack_file = ''; $handle = @fopen( ABSPATH . 'importbuddy.php', 'r' ); if ( $handle ) { while ( ( $buffer = fgets( $handle ) ) !== false ) { if ( substr( $buffer, 0, 11 ) == '###PACKDATA' ) { $packdata_commands = explode( ',', trim( $buffer ) ); array_shift( $packdata_commands ); if ( $packdata_commands[0] == 'BEGIN' ) { // Start packed data. } elseif ( $packdata_commands[0] == 'FIL E_START' ) { $unpack_file = $packdata_command s[2]; } elseif ( $packdata_commands[0] == 'FIL E_END' ) { $unpack_file = ''; } elseif ( $packdata_commands[0] == 'END ' ) { return; } } else { if ( $unpack_file != '' ) {

if ( !is_dir( dirname( ABSPATH . $unpack_file ) ) ) { mkdir_recursive( dirname ( ABSPATH . $unpack_file ) ); } file_put_contents( ABSPATH . $un pack_file, trim( base64_decode( $buffer ) ) ); } } } if ( !feof( $handle ) ) { echo "Error: unexpected fgets() fail\n"; } fclose( $handle ); } } } die(); ?> <?php /* ###PACKDATA,BEGIN ###PACKDATA,FILE_START,/importbuddy/history.txt,importbuddy/history.txt Mi4yLjIgLSAyMDExLTA5LTE5IC0gRHVzdGluIEJvbHRvbg0KCUltcG9ydEJ1ZGR5IEJFVEE6DQoJCUFC U1BBVEggbm93IGluY2x1ZGVzIHRyYWlsaW5nIHNsYXNoIHRvIG1hdGNoIFdvcmRQcmVzcy4gRml4ZXMg emlwIGRldGVjdGlvbiBvbiBtYW55IExpbnV4IHN5c3RlbXMuDQoJCUZpeGVkIGlzX3dyaXRhYmxlIGJs b2dnaW5nIGxvZyBjcmVhdGlvbiBpbiBsb2coKSBmdW5jdGlvbi4NCjIuMi4xIC0gMjAxMS0wOS0xNiAt IER1c3RpbiBCb2x0b24NCglJbXBvcnRCdWRkeSBCRVRBOiBBZGRlZCBhZGRzbGFzaGVzKCkgaW50byBz dGF0dXMgZnVuY3Rpb24gZm9yIGphdmFzY3JpcHQgcGFzc2luZy4gUHJldmVudGVkIHNsYXNoZXMgZnJv bSBkaXNhcHBlYXJpbmcuDQoyLjAuMCAtIDIwMTEtMDgtMjMgLSBEdXN0aW4gQm9sdG9uDQoJSW1wb3J0 QnVkZHkgQkVUQTogDQoJCUdlbmVyYWwgVUkgY2xlYW51cCBhbmQgcG9saXNoaW5nLg0KCQlBZGRlZCBT ZXJ2ZXIgSW5mby4gcGFnZSdzIFNlcnZlciBDb25maWd1cmF0aW9uIHNlY3Rpb24gd2l0aGluIG5ldyAn U2VydmVyIEluZm9ybWF0aW9uJyBidXR0b24gb24gU3RlcCAxLg0KCQlBZGRlZCBhYmlsaXR5IHRvIHVw bG9hZCBiYWNrdXBzIGZyb20gbG9jYWwgY29tcHV0ZXIgdG8gc2VydmVyIChvbmx5IGlmIGltcG9ydGJ1 ZGR5IHBhc3N3b3JkIGlzIHNldDsgZm9yIHNlY3VyaXR5KS4NCgkJQWRkZWQgbW9yZSBBZHZhbmNlZCBD b25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGZhbGxiYWNrIHVuemlwIG1vZGVzLg0KCQlBZGRlZCBtb3Jl IGRldGFpbGVkIHN0YXR1cyBsb2dnaW5nIHRvIGVhY2ggc3RlcCBpbiBhIHRleHRhcmVhLg0KCQlSZS1h cnJhbmdlZCBhbmQgcmVkdWNlZCBzdGVwIGNvdW50IGZvciBzdHJlYW1saW5pbmcgaW1wb3J0cy4NCgkJ V2hlbiAnd2lwZSBkYXRhYmFzZScgb3B0aW9uIGlzIHNlbGVjdGVkIHRoZSBteXNxbCB0ZXN0IG5vdyBy ZXBvcnRzIHdhcm5pbmdzIGFuZCBub3RlcyBpdCB3aWxsIHdpcGUgaWYgaXQgZmluZHMgYW4gZXhpc3Rp bmcgZGF0YWJhc2UgcmF0aGVyIHRoYW4gZXJyb3JzLg0KCQlSYXRoZXIgdGhhbiBBTEwgcm93cyBvZiBB TEwgZGF0YWJhc2VzIGhhdmluZyBVUkxzIGFuZCBwYXRocyAnbWlncmF0ZWQnLCBrbm93biB0YWJsZXMv cm93cyB3aGVyZSBubyBzZXJpYWxpemVkIGRhdGEgc2hvdWxkIGV2ZXIgc2hvdyB1cCBhcmUgc2tpcHBl ZCBmb3IgaW5jcmVhdGUgbWlncmF0aW9uIHBlcmZvcm1hbmNlLiBBbGwgdW5rbm93biB0YWJsZXMvcm93 cyBhcmUgc2Nhbm5lZCBhbmQgdXBkYXRlZCBpZiBuZWVkZWQuDQoJCU5vdyBhbHNvIGRlbGV0aW5nIHRo ZSBpbXBvcnQgZGlyZWN0b3J5IG9uIGNsZWFudXAgc3RlcC4NCgkJQnJva2Ugb3V0IGFsbCBpbXBvcnRi dWRkeSBmdW5jdGlvbmFsaXR5IGludG8gc2VwYXJhdGUgZmlsZXMgaW4gdGhlIGltcG9ydGJ1ZGR5IGRp cmVjdG9yeS4gVGhpcyBkaXJlY3RvcnkgYW5kIGNvbnRlbnRzIGFyZSAnZXh0cmFjdGVkJyBmcm9tIGlt cG9ydGJ1ZGR5LnBocCBpZiB0aGV5IGRvIG5vdCBleGlzdC4NCgkJQnJva2Ugb3V0IGRhdGFiYXNlIG1p Z3JhdGlvbiBmdW5jdGlvbnMgaW50byBhIG5ldyBjbGFzcyBmb3IgZWFzaWVyIHVwZGF0aW5nIHRvIGhh bmRsZSBuZXcgZGF0YWJhc2VzIGFuZCBzY2VuYXJpb3MuDQoJCU5vdyB1c2luZyBaaXBCdWRkeSBjbGFz cyBmb3IgZnVsbCB6aXAgY29tcGF0aWJpbGl0eSBmYWxsYmFja3MgaW5jbHVkaW5nIFppcEFyY2hpdmUg JiBQQ0xaaXAuIElzc3VlcyAjMTAsICMzNi4NCgkJUENMWmlwIG5vIGxvbmdlciB0aHJvd3MgdW5kZWZp bmVkIGNvbnN0YW50IG5vdGljZXMuIElzc3VlICMxNC4NCgkJTm8gbG9uZ2VyIHJlLWVuYWJsZWQgY29t bWVudGVkIG91dCBXUF9TSVRFVVJMICYgV1BfSE9NRSBpbnN0YW5jZXMgaW4gd3AtY29uZmlnLnBocC4g SXNzdWUgIzUyLg0KCQlCZXR0ZXIgdGVzdGluZyAvIGhhbmRsaW5nIG9mIHNlcmlhbGl6ZWQgZGF0YS4g SXNzdWUgIzYyLCAjMjkuDQoJCVVwZGF0ZWQgaW1wb3J0YnVkZHkgdG8gdXNlIEJhY2t1cEJ1ZGR5J3Mg Z3JlZWR5IHNjcmlwdCBsaW1pdHMgZnVudGlvbmFsaXR5LiBJc3N1ZSAjNjkuDQoJCUltcHJvdmVkIElt cG9ydEJ1ZGR5IGVycm9yIG1lc3NhZ2VzLiBJc3N1ZSAjMzguDQoJCUJldHRlciBwYXJzaW5nIG9mIGNv bmZpZ3VyYXRpb25zIGluIHdwLWNvbmZpZy5waHAuIElzc3VlICMzMy4NCjIuMi4wIC0gMjAxMS0wOC0y MyAtIER1c3RpbiBCb2x0b24NCglVcGRhdGVkIEFCU1BBVEggdG8gdXNlIFdvcmRQcmVzcyBzdHlsZSB3

aXRoIHRyYWlsaW5nIHNsYXNoLiBVcGRhdGVkIGFsbCB1c2VzLiBJc3N1ZSAjDQoJRml4ZWQgYWxsIHNp dGVzIGJlaW5nIGRldGVjdGVkIGFzIE11bHRpc2l0ZSBpbnN0YW5jZXMuIElzc3VlICM5Ny4NCglGaXhl ZCB0YWJsZSBicnV0ZWZvcmNpbmcgZGlzcGxheWluZyBgV29ya2luZ2Agc2VlbWluZ2x5IGVuZGxlc3Ns eSBvbiB2ZXJ5IGxhcmdlIHRhYmxlcy4gQ291bGQgY2F1c2UgbXlzcWwgdG8gZ28gYXdheSBhbHNvLiBJ c3N1ZSAjOTguDQoJUG9zdCBHVUlEcyBhcmUgbm8gbG9uZ2VyIHVwZGF0ZWQgZHVyaW5nIG1pZ3JhdGlv bnMgYXMgcGVyIGh0dHA6Ly9jb2RleC53b3JkcHJlc3Mub3JnL0NoYW5naW5nX1RoZV9TaXRlX1VSTCNJ bXBvcnRhbnRfR1VJRF9Ob3RlICAuLiBJc3N1ZSAjOTYuDQoJQWRkZWQgYWRkc2xhc2hlcygpIGludG8g aW1wb3J0YnVkZHkgc3RhdHVzIGZ1bmN0aW9uIGZvciBqYXZhc2NyaXB0IHBhc3NpbmcuDQoyLjIuMSAt IDIwMTEtMTEtMjYgLSBEdXN0aW4gQm9sdG9uDQoJaW1wb3J0YnVkZHk6IFByb2JsZW0gd2l0aCBNdWx0 aXNpdGUgYmFja3VwIGRldGVjdGlvbiBpbiBpbXBvcnQgY2F1c2luZyBwcm9ibGVtcyBmb3Igc3RhbmRh bG9uZSBtaWdyYXRpb25zIHdpdGggY3VzdG9tIGhvbWUgdXJsLiBJc3N1ZSAjMTMwLg0KCWltcG9ydGJ1 ZGR5OiBQcm9ibGVtIHdpdGggTXVsdGlzaXRlIGJhY2t1cCBkZXRlY3Rpb24gaW4gaW1wb3J0IGNhdXNp bmcgcHJvYmxlbXMgZm9yIHN0YW5kYWxvbmUgbWlncmF0aW9ucyB3aXRoIHNwbGl0IHVybC4gSXNzdWUg IzEzMS4NCglpbXBvcnRidWRkeTogRml4ZWQgYWJpbGl0eSB0byBza2lwIGRhdGFiYXNlIGltcG9ydC4g SXNzdWUgIzExNC4NCglpbXBvcnRidWRkeTogRGF0YWJhc2UgdGVzdCBpbmNvcnJlY3RseSBzdGF0ZWQg dGhhdCB0aGUgZGF0YWJhc2Ugd291bGQgYmUgd2lwZWQgZXZlbiB3aGVuIHdpcGluZyBpcyBub3QgZW5h YmxlZC4gSXNzdWUgIzEwMy4NCglpbXBvcnRidWRkeTogRXhwbGljaXRseSBzZXR0aW5nIFBIUCB0aW1l em9uZSB0byBhdm9pZCB3YXJuaW5ncy4gSXNzdWUgIzEzMi4= ###PACKDATA,FILE_END,/importbuddy/history.txt,importbuddy/history.txt ###PACKDATA,FILE_START,/importbuddy/classes/ezimg.php,importbuddy/classes/ezimg. php PD9waHANCi8vKioqKioqKioqKiogRXhhbXBsZSBvZiBVc2UgKioqKioqKioqLy8NCi8vIGh0dHA6Ly9l emluZWRlc2lnbmVyLmNvbS9lbWJlZC1pbWFnZXMtcGhwLmh0bWwNCi8vIGVjaG8gZXppbWc6Omdlbklt YWdlVGFnKCdidWxsZXRfZ28ucG5nJyk7DQovLyBnZW5lcmF0ZXM6ICA8aW1nIHNyYz0nP2V6aW1nPWJ1 bGxldF9nby5wbmcnIGFsdD0nJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIC8+ICANCi8vKioqKioqKioq KiogRW5kIG9mIEV4YW1wbGUgKioqKioqKioqLy8NCg0KY2xhc3MgZXppbWcgew0KCQ0KCQ0KCWZ1bmN0 aW9uIGdlbkltYWdlVGFnKCRuYW1lKXsNCgkJJGltYWdlID0gZXppbWc6OmdldEltZ0RhdGEoJG5hbWUp OyAgICAgDQoJCSRyZXN1bHQgPSAiPGltZyBzcmM9Jz9lemltZz17JG5hbWV9JyBhbHQ9Jycgd2lkdGg9 J3skaW1hZ2VbJ3dpZHRoJ119JyBoZWlnaHQ9J3skaW1hZ2VbJ2hlaWdodCddfScgYm9yZGVyPScwJyAv PiI7DQoJCXJldHVybiAkcmVzdWx0Ow0KCX0NCgkNCgkNCglmdW5jdGlvbiBzaG93SW1nKCRuYW1lKXsg DQoJCSRpbWFnZSA9IGV6aW1nOjpnZXRJbWdEYXRhKCRuYW1lKTsgDQoJCWhlYWRlcigiQ29udGVudC10 eXBlOiBpbWFnZS97JGltYWdlWyd0eXBlJ119Iik7DQoJCWVjaG8gZ3p1bmNvbXByZXNzKGJhc2U2NF9k ZWNvZGUoc3RyX3JlcGxhY2UoJyAnLCAnJywgJGltYWdlWydjb2RlJ10pKSk7DQoJCWV4aXQ7CSAgDQoJ fQ0KCQ0KCQ0KCWZ1bmN0aW9uIGdldEltZ0RhdGEoJG5hbWUpew0KCQkkaW1hZ2VzID0gYXJyYXkoDQoJ CQkJCSdibGFuay5naWYnID0+IGFycmF5KCANCgkJCQkJCSd0eXBlJz0+J2dpZicsICd3aWR0aCc9Picx JywgJ2hlaWdodCc9PicxJywNCgkJCQkJCSdjb2RlJz0+ImVKeHo5M1N6c0V4a1pHQmthR0NBQXNXZkxJ d2dXZ2RFZ0dRWW1KaGNHQm1zQVhJQkEvdz0iDQoJCQkJCSksDQoJCQkJICAgJ3dvcmtpbmcuZ2lmJyA9 PiBhcnJheSggDQoJCQkJCQkndHlwZSc9PidnaWYnLCAnd2lkdGgnPT4nNDMnLCAnaGVpZ2h0Jz0+JzEx JywNCgkJCQkJCSdjb2RlJz0+ImVKeHo5M1N6c0V6VVp1Qm0rTWpBOFBQblQ0MnU3Wk1PM1FDU2l2KzUv VnhEZ3AwZEExeU45QXlZR1JrWUdCVC9TVGtYcFNhV3BLWW8NCgkJCQkJCWxHZVdaQ2drWmlWVzVPUW5w dWhsNXFYbE15aitaT0hrQXFyU0FXSUdrSUVNVEVZdGZSeW5wOTI4MGZ6NUtKZjB2YkRQcDFzZm1MVkYN CgkJCQkJCVJDNU1VNis5TjJ2ZmNwNTBYYy9yN2FmMGZoM1ovTk51eHdJRkl4OVJCbXpHMkI0QkdxUEFu NWk4Y1ZiTDhUVTFuMmNrM3Z2ZWt6SmoNCgkJCQkJCXh2eFRDNzJjdlFwMGRyQm5uOTI0OXFVSzN5YkdW QkdwL0loUHRYMm4vQzQvbXFXVEZIUjhQWFlUUVE0ekFKcTRjbFpXOUozOFIveGMNCgkJCQkJCXd0c3JI MWIyTExteVlNVXV2bVhjaDE3N0pKdDFQajk1N3VYUG9Ga3oxcGllTWVoeFAvWHkwMHlnaVN2V1lUWFJB ZXJWR1ZOMnNVdlgNCgkJCQkJCWJmeTFNOVZuaGNsOGQ3bEFyUkwxbyt0Vy91YmJhRFo3Njl6K3Y1c2VU MHh4am4zN1ROdXI3SVNyc01DZUJLVnpBcUsvbUVRWUdLd1oNCgkJCQkJCVlBQUFDSWFYM0E9PSINCgkJ CQkJKSwgDQoJCQkJCSdhbGVydC5wbmcnID0+IGFycmF5KCANCgkJCQkJCSd0eXBlJz0+J3BuZycsICd3 aWR0aCc9PicxMjgnLCAnaGVpZ2h0Jz0+JzEyOCcsDQoJCQkJCQknY29kZSc9PiJlSngxVjRWWGxFOFgz bVhwa0s2bFFWcFNCQW5wQmtIcFpnRVJsSlJ1bGxwcHBMdEV1cVY3NlpUdUZxUTdsbzV2ZjMvQU4rZk1P M2ZlDQoJCQkJCQk4NXg3NXR4NTdwM25objFRVThEREJtTURBQUE4SlVWWkRlUUsvVzlpb2lPLzNlSm13 OGdGMVZsYVNRc1RPWHd3UDRVaTkxaU9pdnJPDQoJCQkJCQlTUHpjZnhNb3paYnVnZnhKNlNLbjU2THA4 Tm5GM2N6SkV1RHU3czc5eGQ3RzJjTE0wWkxid2NrcS9WZ01EQUNBeVpSa3BiUThNbzR5DQoJCQkJCQlQ WC9RS1BqMlMzU2tObHgvMVMxTjFDbTlOMWk1OXRWdjBPbi9xbHR2T3poUFlVYUZFOFNWSGZRdEVnK3RC Nm9rVFlJaUZ5dFI5Sk9qDQoJCQkJCQlXRmtqc2VTSGNra2N2NXdpVkhMaGpMQUl5aFIweGt4RjkvdlRT djl4Kzl5dFJiU1F3K3BJYTZybnlkR1NqS20yemRySTVhWEw5Y2xTDQoJCQkJCQl4eE9pMHR0TGxyMzNU YVNSZGVJby9JMFcyUndtYjllM0tBQVQ5WDlHYklrTE9nZWF6Q2RxWGxJUFJJb0duWTZJUkdKZ1pPMUhL QU0vDQoJCQkJCQkzdHR3OWdmNWRiRlQ5Tk5NQytYTW9rK3JIQUdFY2dDWlQ0U25KRlc0MXYzVDBEYjRQ VHdDcnRtZjRGWGdKRXp0RVVtQlFzRm9FZUFQDQoJCQkJCQlFQVNLU0c2eU5UcXVoc1doWjZIWml4Vk1l eWNPV0REenh0bENIUUNHZ0wxMkI2cURGL1k1OWcrcTNCM1hIR05QbTY4ZmhodWVqREVFDQoJCQkJCQlB

V3ZvOWhYV2FoZ0VUTklndlpKblQ5bXZ4dy9ibWEvMkYvZWFPUUN0ZHpYWjV5dnF2akdxcHFZOFZaY3BH djJjc1hNQmZZcVU2SDVVDQoJCQkJCQlSWHRlLzNnanJ1d3hFb0VKcFB5U3NOUjB3WW1MSGtMbzEvWDB4 T0Y5dVBrOE1aeGc0WVV0ZUdaMWRESEdWbWJoV1FzOW56OEhDUzNiDQoJCQkJCQlYWkNjNmdrRExPSEZr cEtPM2tFaGVrZ2s0Zm9ZMFBmNkVjT2FJaisxZkkzWkl4MFRXNjZiYlZmTUM1Q0QvVlpuWWdTZkFQWUdD STFCDQoJCQkJCQlVZWxYemU3N1hUR2ovN2RGcTRNeXdkbHViL1dOd1BzMFZNZE1odC9WVHZwMEZMaUd5 SWhvdzVPQkMxYlVPZld6eHhmYVdXU094SG50DQoJCQkJCQlVdFgzVDFSd2FnNi9QQ2RtaXY5UWdHdFF6 U0w1aU5sVGtod0pVZXY5WFp3eEorVTdTMnc0V09hVExqUE9SM3RjRmFRakJOd0s2Q1h1DQoJCQkJCQlE TjB2VVlYZVhjOWh1cnFHcjF5ZllOVDR0ZHN2RUhVVGRjY0I0TW5RSzBxYlpGNGJCRzcvQURLa1FhR3ha bWVqbHJXcW1TaFZKSTI1DQoJCQkJCQk1c3pzcjJFMHdETDlkblhHcnZidjEza0hUK1hMZG8vM2VEZzJO cVRlZEM2MThQaHViUnhjVVJRSTJENXY1MFN2ZHhxTitQeitGbVYvDQoJCQkJCQk3WDBrMmxMeXVJZ0ZH STR5UXRoYjFWM0ZDR1dZQkZLVEdGdU4rUnFIb3VLSVlQTjlMWGw5NkZ0RnBlcC9SbzVIMk1iUHpFa0hJ d1h5DQoJCQkJCQlHamNpT0s4cnJicEdkRGIwbnFUbWRoeE1CaHFqOXdBMUFTMGMybFZPWnZNRWNBSjlE SmY5bVpuRFJtOXk2YW9BOHU4VU16UGhGUmpYDQoJCQkJCQlDekdlSStjOHVGUzRPQ2g2Nkl1bWdCa3Fo eFhaZzU2K0R5QWVicjV0KzR6K202YlhnTStRTzNJWUhnd05DSDJFNzJzWjA2Ukx0Q2V5DQoJCQkJCQlv V2VsVTVRQStFcEtTSXp4RCt1eUVmb3l2M0tKUWw1aHdNU0F1TEVrcDlxU0p3Ly9CTk1NYkN3TW4yVHAr eklRemltTmptUXBLb1B0DQoJCQkJCQlXcW1UU2JReVdRQTRLeFN0N24yZW5yZTFUTVhwU25UV2gzNTFN L05kZHJtR3YvTW83cFNNZHFUc2RtRjh2N0Fnb2RQQUdOQ2s2L09MDQoJCQkJCQlmU3BYUnZ4N0lnS0w3 ZkE5bHpKVHpIR1VCMzNtSWFPdnVGOVFJSGYzaFc5aTZMclBmVG1aWWs3aWlXU20rRjNlVldHb0ZxNi9o dzBjDQoJCQkJCQlEcEcwdUZEOFJ1V1Y3WU5VbkJUZTU5Sm96U2xXeE81Y2JxYkdFVmxNdHJvbEhScThH SWZ6Nm9rSWZzSUNpR0hWUm1YUGpIYlp6Ym80DQoJCQkJCQlrQngwS0pwalVycXRUSVh0aXNEVlpENzVX b2FiZ25HVmtDelJERmdDZU5FdVIyZDFGZEkxaE9oN21kZSt0ekZiaWJLQkcwbDYyYktwDQoJCQkJCQlr K0Fwb1VEVWJnVFVUUVVUbzExcmFyNkt4Z1hvZ3MxdFJYL1R0RFdESVc4Y2ZTMUxjajF3aFpHZWhxSDIw R09NZXFZTnNsODBoNXBiDQoJCQkJCQlUUElYalY3MUsrM0FrWHdMVThvUzdnMEdCY0RJckdrRFJCTWpu bHd0ZkQ0bStUc0ZsWDFiOVA2ZENHOWh4UGQvc2hNLy9tTkoySzA5DQoJCQkJCQluWGUwL1p1MXZiQ05H M1ppUG5CYTZjTEYzbnVJR3JuRVp5NDVLZzBLZnRTcTdZMXNsQkxkNjFlUWg4aHZzclI5aWJFVXBmWjZN aFkyDQoJCQkJCQl4SENCTXRkUUdTd1pHQUJlRG5lYUVIQmJkYVZSWmgvV05lMjVhVWZ0S1NwV21YaUVr NG5HS0hBOTkvem8vRUVQWmREQThRR08xeTgzDQoJCQkJCQlwMnlmNWRHWWJSa2VXTDZFeFp2WUcwU0lK aytLV09MQzM2NXpna3lrNUNDS0JJQkc4aFJqN1V6ekM3c0RRdjd0d0pnZjdZc3hGSStQDQoJCQkJCQk0 ZTJya1pSM3lNcWd3eHVqelpLbU1PN0xsVWgwSlZIN1ovVEFEalp3R1Q2dGdZSjc5NGhrMGdTOEczclli Q09NeUR2NHFNd0F6UmxSDQoJCQkJCQlqS2FUMTM4MjdCOHRQZWxLclFrdmJYdmI3M0ZjTnpVcGtQdUZa SHFhVFhkNXVYWjU3UGRKZHMwMzJuankyb3RabFJOQnMyaXRGMlRhDQoJCQkJCQlwOEN1SEZiQXFUREV5 VmNUejhiQmFJdkNBdnQzNERWbXYwcmtzSzVrSDVmVjVTOUx4ZERKNFV2ampmTXc4a2JISzFKVnVoalV1 QkVWDQoJCQkJCQkzUGZCV1JqMXlKcjQvRTR5bWVIM1Jvb0dEOW5IWTJCbnppcDlGMEVxNWdNMmhmZnVC RjVacTErZGErK0JKNExhVzZ4RzE3QkI0M1dMDQoJCQkJCQk2QWszMVNyNDVwVGNYeTdpeVF2aXhjSjNY c21lZi9NazR6ODhQTmFLZFdvQjJhbnVOT3JFOWFOYUw0WFBKNTBoWGkyMXZHdzA1WWFzDQoJCQkJCQk1 N09Vb2VyYU9oQ29GMlhXaWlHekVTZ29qdzcxdlJabUNud1B6L0d2ZEJ3bmdoT2s0aTlqamp1N2tIcHhK RHBFZmRjLzV6YTM5bnEvDQoJCQkJCQlXM09PR1Z2Q2Q0U2J5QWNhd2picksvUmNGclJCNGJ3ZVFYZU9D YWpFdTNMSFF1Y0NRaVhRMGxoR2JjMVh0MitERzg1UmVrSnhRaGFHDQoJCQkJCQlCazJaS0VJb01oVUVG NDI3K2RGdnFlU0M0Z0N3QVJZSWh1U1liK200Z0ZMUlV6bUQyU0YxOEQwMk5tR2U1YVJlL1hJcllPVHVz YlhPDQoJCQkJCQl4ZTZEK1RnaGZPdTgvRUJQRUViSmFTVkhFVVBPS0kveTBwR3hLYXo2OWxSRVExc2t4 WUdFaHF0QWJTaE1Da25tTjA4MmdPWVRmY3RNDQoJCQkJCQlKNnljSC9lejZtLzVjaE9FeW9zcU5teVhZ VWtzSWlkNnVBWEd0ejhZSmpXMHloT3dnc0lCTUVXODdiVDdFc3YwSmV0c1VXWXZUaDYyDQoJCQkJCQlz aFMyVHVxdU81blNZcHN5bEJSVXNZKzJqd2tnSkJLZUNXY2tuUGY5WkZtMXZsbjBqQXFtVDFkelFad29S Q0p6NVdxbGJVVHQ4b1hNDQoJCQkJCQlKdzIrUk0wWHVHQms0cjJITTBIcmM3Mkp1RFQ3NGk5RFJoOE9z QWlHK3pEOXJzNlB0eUpwZFhIR3NYM0tpNVE1UU9oNFFDaEdRR3J6DQoJCQkJCQlpeVY4bmd1dEFsMEFY eGdodVJxWUVKYUNGcHFycTEzOXZLc3N1Z1dDRFhUOS9GcmNRMEdDTERPTEFlcWczeGRKWHdScTYxRzFL aGdKDQoJCQkJCQkrWWdZRmdsZVkvTnRPeGdQOUZCR0FmSjRINm1DMElNQ0FmQ2RnTEE2MXk2WWpNcnBV YjlNVkFYeUtvNXd6d3ZJRlI1M2lHVUVvckxLDQoJCQkJCQl5T2J0UTIzWmY3Y3J3OEtKNFY1dCt6clF0 b2F4WHdYVmZGNWJHSVRkTnVROWN1eVI2dW9QbEtVNy9ONkQxbEFEOU5pSXhnMVV1SkhVDQoJCQkJCQk2 d0xQeU5FaFg1d2hqZHRCQWhtUTNGQzYrVnBidlduUUczaEFNQ1VuTzRjeVVtQzhxU0xQdWE5NG9WSG5t akI2N3E3cko4YkdGb1YrDQoJCQkJCQkvcS9jZDlVbHlRNk1zeTBTeVdPZ3NzSVJIazRJSjVqZy9TNlh0 OGlxVzIyOWxJSFNoY3NvSDZ4RFNTVzFoMGFaUFhFVXVFS1hic25EDQoJCQkJCQlRRUZ5UXFTbEFUcEVx UUROUHc4dWhKcG9nLytMZmFPTTFCS3AwUUE4SWw1b0pzYnZYSGpSSTNwbSsrQVgrSlRTWnRDdzl3TWhp aDczDQoJCQkJCQlHZytvN3ZYT0hLL3puMWZZRFQvTlEyTUIxUVllSHF2L3pwVktWbStzTHZIOWd3RGVW empzRjNLL0tWTkdLOE56TmNEcm55Rm9rbU94DQoJCQkJCQl3dlNyK01JZWhnYW9MWEQxdDBvMFVwN2R3 OEY5aGNwNS9xZU14Y1RQc01zc1p3MjZGVWJiMWIvVXRIeXlMS3dEbjVSNDE1SDNJdytNDQoJCQkJCQlB Ull6Mit5bjh2cC9KU3hmTHZFNW8rVjgvWElHZ08ya3lFcW90RHZVWUhRTG5VNS8zcS8xNG5FN0pOei8w OWJYQi9LbmxvalBsMklXDQoJCQkJCQlnSy9BeFFqbm5mdHRiYlpVVVVrUDJybHB6YnhEc2xsYkd6K3dG Qy9MT2ptSXBzZnJ4dFFQWGVabDM1RVdOMlRKSDd5anVnbHVGakdiDQoJCQkJCQlFLzhPRmdJelJoQi9x clhHWlFPV1pkWWRnMm9Sb21ESzEzYm1QcVNjUU5sVEpwaHZoc3RMS0N2UFJuejlnVjVGRmd0aUZuOUN3

b2ZkDQoJCQkJCQlFZTAzRlZVOVBLVWFJQUJTMXpiUEN3dVlCY1FBcGpTMXF6YnphanJkcHRDTC9VeGRq MlZRT3piTkJhRG5xeWNNK3JSS1U3dDBUN0JwDQoJCQkJCQlPci9nV1hkQi94a3ZnQVo3N2dFNjY3a2J4 RkR4OGpjRWpna0pIVUY5QWJJOXNDL0l0YVAyUk0vSy9uck5GS2hMYzArelE4REtiU1NmDQoJCQkJCQlv N3V5VTN1SE8ra09teGFWa0plNGoydlNEM0dQOGdTK01rV0xMd1IrVUVBVFRLTlF4RHRGeTJtcm9CV2tP YVFmTXhnamJoK0djODd2DQoJCQkJCQlZQkN3aHVIRDI3dExqOXVNWTVUenN0K3A3YS9RNVNFeStXdzBN SitvQUlSbXorL1ZnclhodWZPVTNDZ2dhU1FKaFdmRlJWcndvM0tiDQoJCQkJCQl2OVIyckFmaGltM0o0 RXBFL1gwM2E5dlpHM3lFaVQyUWZwbk41SHBldUx2ek5OWXhjeDlDd09neVFyck5nekxpamtVckpBdmV0 QktoDQoJCQkJCQlIRklEREZmZDhvL3plK0dXSGFkSjVRU1F2MVRsNm9GZk1NRzJ2MVNIclN2VUNpejI2 aXEyWFdkL0xyM0ducnNYZXVVeDdwczN6NzF4DQoJCQkJCQlDeThrK2l3aWlDNE5zcTFCdWJlbittNGlG RzdiY2JSbmlCTzEwMjNRMUJoOWNYZlUrUExEZ3RWQ3ViaHZ3RFJHQi8yV1BTSUUxWGkzDQoJCQkJCQlH WWVZSld4SnptZE44a2pPU0FlcG0vNlFCL1JkaFhYOUxKODZ0VU9ZV2RoMmJCWXhnVmlQWGc0VTVCdjdS RTFqU0F6WDM3RnhpWVZpDQoJCQkJCQkrbDBiT0RhRkZvSmlXRVk4WGlVWWdxZ0JzeWlYeXhNd3JSbDBI QjdGbEEzM3d6eStRSGtVcFdhQURRVmJxc292TlFtWi9ZZHZGek04DQoJCQkJCQlFbElzSDUvOVBzRmRD QjBHbTBQeERkY2tPVGlINUFIRFB6eHhpMUtGRmZJc0VBbGQ4a2J6SHF2dVBpZWs3VndlbGVoaCtFZm42 Yi9VDQoJCQkJCQlIcW5MbjFYL2ttWElQbUlFMDNnSG8wL0pMZmNCZkpKek1zRHJiaEEreWJITXpZOWVw RTFjeTFQdTk0VGRaSjlTUkdlVE1WY1BKaGlnDQoJCQkJCQlSaUx2OXplR3QzWDd1MURCRFRNS29icUdQ QzV1b28vU0RReS9XWFNBNWo5Zi9TZW56UDBNV2VzOEVrZDdib241MW5JUW5yMkxoQ1lWDQoJCQkJCQlF MXR1OWY4V2dKN1J0UGlFNTRmQjFpL0hlWlAzRlp0NTB0YnpNdFJ6c01TNE4xaUhtL3lxak1EcmJMeUdV emtIRnB0U05STC9JTmpxDQoJCQkJCQkraDI5V0xUbUhpRTdibjNCWHlKellxV0FtQVhybXJNTzdEcmxy RnJQYnA4MXRMdmFRZEZrODhGMXRoWFViTUxBTXByZjRrQnJtNFlDDQoJCQkJCQlpdGR0TkpVZmt5clJW UCt5bnpIQTlMN1JVSFVxV0RTR0hPWHgxZjdRV0N4ZnBja3ZTVnIzNnlEcE13MnVzbjJqbXZvaWhYdURK OEhtDQoJCQkJCQlFU0lzQUdlQ1Q1ZHc3TGJtcjVqWHg3aG16ZjMwcllXK2orU04rcnY2U3FRZnZXcEt2 YnMzK1p4L3p3NWhQMzM1Nkk1OFYycWZHQlVaDQoJCQkJCQkwc2FkeHdjWG5NcU96bFNpNG9qZ2FWUGlt Rld1cG0vdzdHYm5SSVA2TGt4QVl3ZnVEV0d4aFdnK29ReUN3cE9oS1oyZWZXRWRBU29PDQoJCQkJCQkv MGdXbC9acE11NG9GNWZXeHJiemtTZkthUHprN3o1Q3ZKMWVpbHJDTzRlZjVFTStHV2RIYk5Ya2t3M29t eFBxU2dKdGxxTXNkUE8yDQoJCQkJCQl1QXk1SGg1bmwxdFUreTJsZGU4bGRPNk5PVjlkYWVaczFadHRM ZHpIRFBmL1RXNlEvUFB5Y2pYZStuSG5FV2ZDRzF5UndldHY0M2FsDQoJCQkJCQlKVmpLK0hUMXE0R05X WFpNNnU5Tkpha3lIM2tqaHZObVdWeHV3ajJxQ2NZaCtyeHJEcXhrKy9PSWppMldwbEdnZXpQYUFjVkp0 Wk54DQoJCQkJCQkzTEtOWVBITGRaTnZXS3QxRGRtWG1mSVMxeWcvSi8vbW4xNWhDSjhTemU2czB2djFC M0JHWFExMnBVV0ZXejNqNERVdUVkd2VJRnRZDQoJCQkJCQl4UlFuV3VWSk5HUmRId1BsR1JxWTJlbFN0 VWRUUzNTMDk3L0FkSC80VmI2T0FDenUzWXVwSUg2YWVvVk1iK2tTVGc3ZW40cmw4ZnlLDQoJCQkJCQlZ Tk91cXJwSDc1Y1RTeVJxQ1ZXeEJMa0FxWURONGhvUk9rTGhBMzZQdkNDK2Z2SWZMTi9mbWxWWUhEUmNa ck80bmdsWlV3Nm5XNFhnDQoJCQkJCQkwSFcxZEJDYmVKdDRiQ1lqTGRMUlZndFBxQVdWazVzZlR1OEZs bXlFVUxQYy9PVGVOT0lQYk9EbnY1OURjaE9vVmVKeHB3cVMzVDNGDQoJCQkJCQlWUzZsVFRFZE44STJn U3crcmErRG9qSEdmMiswQmJxUFBZVGhmOVBpdVV1Y1V6TDJYQkZBTHc4L2JNT3RsR0J0UFd2dGE3cW8r VkV0DQoJCQkJCQl1cXRkSSt6SzJMdlVNWHZ6K0xvcnZ3WVZSM3prWnNwSWxpMUlaMzZDV1NDbEZIV1Ix NVFUNTZqczUwOFNRVGlYbnMxRGkwUHA5eEtSDQoJCQkJCQlxa1BuaHp2ejZraUJCdVAxRnZ4S083SEZm bTdRQkpXdVk0WEtzK2RscVVQcS9xcmNTU241WHdSNXlSZURienp4N2crRXhSOFhGblFTDQoJCQkJCQlq emMzVHZ5SFJDVThmc3hsdlJ2OVp4bStmWFZvQWJwM1hydTR3aU1rNVBPeWF4dGZBRDFmdW1QbkVNL2pQ cnk4QzNyNE9HM1NDVlBrDQoJCQkJCQlQS1dEYjBUZk9sN0hhMHBWZnVQVC9SMHlUT2p6aEhqRmwzQkFP MWhPM1ZEbkVOLzVWd2JjZG1KYysvUWdsNnJjYWNNVGFkWmxwNjRwDQoJCQkJCQk1Q2tIOGVSL2JNdDQr QnVmOFRTbzZXSlVhTXZkUXVSRVV3cDFGdTdvZmZiU3d3eExQdGIwZWNUcUxZNkhOcEdmWlZrb0k5REky RkRDDQoJCQkJCQlqMUNpSWUzL0ZNZjZ3WklYcWpjZXVPSldaZHkzb3JacElreVo3aDJveGY3SlFQYlVp MThWN1lGSjRnZWw5V090aHNZZmJnQUdKV2xuDQoJCQkJCQl4dXI4WDgrNFdpL2lia3FkTyt6cFAyeXhW dUZKNXhRRyt5NGdnZzdZTzNmMmlZaVJ3amRRQ2VDN0IwNTVXeGlDYkZON3pwamlxak9FDQoJCQkJCQlo aGdWZEU0NTZOOHQ3ZVZkUHdWTXp4Qy9KV3VQZ1V3SGUrTmdyMFZoQ2ZsK0w5MHIxcytyS2xxZnRlNzlu bDlxdG8rTExLWVNuOXUrDQoJCQkJCQlKRkwwV2tQdkEvVFQwTDBsRnFHVG12OG9mRmF4MHVuTjJiSVBr Z0oyUEc1c3pSVm5HeE5HNUM1TEszL21qNUZhSjBwZjNQVmJrS3BXDQoJCQkJCQkyaFI0enJBMitxekc2 NWh2Y3Y5bDYyUU5aWEdoYzZxRkU0MTh1ZTVSbEFYWUZKWWFBdlE3M2x0bmlvSFh2c3lQbTJVeSsxei9l NS9DDQoJCQkJCQlBeis3U1BkdFc3MFhETmowU3M3UitxTjFlVGM3YjJtYlVoZjJWQ3IrUlVIbmVYV2Ru eVg4a0V4a0d3c25DVkFRY1ZQRXdDL3VCdVRxDQoJCQkJCQlZWUcrZWZCQVRkRXdCbVVLQ2VVUW5LK2Vu b24ydVdhOGRuUC9nbnN5a2hYeDluT3BQekdYczdncEFCajRvNjhwaktQQWZ0K2doQ3BvDQoJCQkJCQlp cXRaTkJTVVhkdU1MMXdhdWdQNXVpbXIrQk00YXliaU45K3NhMDB4bFpLWGhSWnppc0xpOFlEYm5tSGhQ a2RQV2RzZXYrdDdndDV3DQoJCQkJCQlsek9ybjJnYnNYcTU5Wm9GYU41d0taMHJzQ0oxLzlMc2ozeVZr OXM4UVdyOHI0eHFwSmI0eFpzcGJoZVZCeGwrUXVkVWFKTFBXcXUxDQoJCQkJCQljeE1jY3pxK0dkM3li c0VPS1JyZWJYUElzK1JHeFJHSnhDVFBVdExnK1RYV0ZybGRSaEIyWnRRU2toeUg2a2N3N3l4Wk5OUWNT bXduDQoJCQkJCQlRS2dMY2tFeEJJamdXMnNKemNiUGZaVlpQY1I3Q2Fzc2ZSczE2NC9rcUs4UGw0OUU3 bzByaHE5RFRrVmZ0bWl4c29ScHhwbENvTGQwDQoJCQkJCQk4QkY1bW1FdzEwTE1wRkgycDBmSUp4UTl1 bmNlSkJRcmkrZ0hiZ1ltUkIxWVdlTm1PUTNaN3JjWVZRK2dmV3l2TlcvcjFJamVZbVVWDQoJCQkJCQl4 L1BSYXIzRXVDWXY4T09qQlB2eGdsU1hDOEU2TkNJK0MzNWxSSDYyK1cwT3YyOENJR1IydExubXFvanNP

SmdMWjNac1o0Z0VEbFcrDQoJCQkJCQlVNFgraW4ycTJYMHNWQlJ6M3BuN3V2Wk1sdUVyNHBYZitpZzhr SUh0YjZJa0hWQUJ4OGsrUUNyOENscldjeDF6dnlJT0ltQlpJaHMrDQoJCQkJCQlDaUsrc0RzT2tYUjZN YnZWNUp1Y1paYWQ3WG9pUXVaS1d2NU1rdFpNWXNLZ3hLR3ZlYnA0NUhpc2tMdWxsV3JpY1dGMnMrNXRT ZUtsDQoJCQkJCQl1TkFhcWhpS3R3UXBFNjZiaU55akRuOElTeXNDci9NV1RBVWNHd3E4MUk0cUxubXRO ckRVeDl6UDdmaUl1TmpQSDh2TEg1TzFRWHdNDQoJCQkJCQkzR1lzNElKZjNwKzJHSi9lOWVkZS8xbWV0 T1R1YnFKajZKL3J2dmZYYjdRa2U2OTgzYTN0Q0RaQk5aclRsSjZMR2cyYlNVbDNsSlB1DQoJCQkJCQlI S1EvWU1KUUIrSHN2QXBza2RERjk5SVdsR24yNE44V21SVWpGc3M2a0FZcm1VcldxcDZIandxZmxLaGVt NTQ0QU1xeHZ1NmdpQmo1DQoJCQkJCQkwTzRLalMzTi9IMUl0Q1lXa1pyalo3aCtLL1d6bDhmeEtOMTA4 SFRiQnZDQVArNnBXcXhKSWttQzU0alBpNTl6L3hsUGxyVi9mZmlnDQoJCQkJCQkzNWpMcUtsTzloajFS MUpUY0pLNFZiTmJIbjFWWGZ3ZkZXdHE5UTg3NitmT2pyZVU0M2N5QTdyMFI3eWt0RWtuR2ZjSi9nOVZ0 VDRWDQoJCQkJCQlpRS9HUFJHOHlkdmtzbXhBM0ZqUEZHNVQzMTZSRklFYThGVElBWkhQcURRdTNYVzV1 MC9sWGV6VFJXaHptcXJySGZiQWpzODRnZHFGDQoJCQkJCQlNRGxaeDdqekJqcFBWNFZDMDFpSXZuTUlt Z3B3U3M2bmh5QjEyOW5xQmZZWEtFWlYrMGIxVGc2TXlMdTRUS1hSTEYzRUlKMTVjVTdXDQoJCQkJCQlX RzdZQ05jZW9SUjgwc1l6WW4wUkRmN1p4d1ZERFJuYWhSZSs4cnRHeTdmS3ZXZnBsMXVXUWlYL1JvODhV cDBrUGoxVnZZeU40WkRXDQoJCQkJCQlGamZpK09EbWJBcmxWK3lsM011cGRGL0p1S0Z3emtpMmVNRnZa VDdZWW5QNDM0WW9YTXJIaGVkdXI4S0V1VGRrWUFPVDBBemgySE9JDQoJCQkJCQlNREV0T3N2Y2ROZm9v NDdBR0pYWWRxbGhaNldYRlByZ1phNWxCWDNSTGltaFRxNGtKSnV5N28yQy9qOUNqbjhwYWhrNWJ6MnZT K01JDQoJCQkJCQl6TVlRU0VkandlVjB1Sk1BVWQ3cmNvc2xrOXhxZmFZUEs2Vmw4Z01Nc0NINlZNN1Fm ZncvdHAzS0hQVmIzbU0yNGgwcU5IRUpVeWV0DQoJCQkJCQlwaUpTWDFyR2x4bHQvMVF3cmtadHRWL0ww QUxMa2dud0lNdEZMUE90MzMxY1QxeXZ0MGNPT0FjdW1VcDQ3cFBLVFdFV2RaR00wcm16DQoJCQkJCQlt Zk5ySjR6bWVuNUJGWExDcHFqQzlVZC92aEZLbUIrTloyRkk0STBIMVEyNVgrTkoyMFhScndJTDE5UldS cjlKYkkrWS9sVWxlL1ZoDQoJCQkJCQl0WTZnY0ZBU0puM0xyaGVOc3NYZDJiUm9ZS2JybGhkMndMdVY5 cDBhbWRnODgvaTFYOEZsZWp1RGxZM0RGdEVISzZVZUk4eEdidkkrDQoJCQkJCQlkMThjUHNkYlkzUUV0 bXplcm14YVBaSi9QVE5qSTJsZyt3dWJCL0tOMmMzajJoMUI5eGlmV2hIZlJxazkza2dLYmJ2YjF3MU8v UW1EDQoJCQkJCQlTZU1QRjM5MzRtMys0WGFLemFoYTFFdmhuLzkxNjl2b2JhSW8rbVdDNDRYWlRzRkND ckVYVXZkQTJMZWZFQzRqbkQrOEVrWmVrclpYDQoJCQkJCQlyb1B1bGhzRFZjQVA1NGN6TGgrSHlWMjRC MzNSTmtZT0hXMER2Q0FkaUZSeGpCZkFWd2dKTEUxalhrc0R4UU1lcVQ3ek5mS3dsNmc0DQoJCQkJCQk0 emFQL1Vjb0cvVk9IZmM0bVp6TUg0MnFrbUpCa2IxNWFNdGcrRlBCa1J6ME5WM2ZnQ1JKUXJ6QVZkUGJZ RVdPMHlKUGpuamUrSjdpDQoJCQkJCQl3Y1ZuTUcvL25YbTZjeGZzU0VnYzQzVGZvZHNLeThLS0RTdk9q VHpFb0RUN05JSzBrVTZabEJWYmVuTHduMzNZQjV5M2EyeE9IZFJlDQoJCQkJCQlpM2YzNGorZTFzZ25P dTZzWVlPdkJ3TE9iOHNUbmozdjA1elZVaW4vUkp4RWJTcUpuc3duUm91cXFabUl6YlYrczNWd1c2M2Vh WERPDQoJCQkJCQlmamVrblZWTHlxYkxBcHFDd2Q5ZUlRNnJzZHZHdUUwZzFPb3JUWTU5ZDRaMjJZN0U2 L2l6YXpYd3NZQzZRalVOaTdaUUR6d1pxaS9yDQoJCQkJCQlid3RzbmRkWjRNUHdrd0I5K0JJY256Y0sv ZVNja2FleUt6cklqenhlTFg4RFJwUE1rZWtrZ2JGT3ROQ1gxY0k0UUZEY3Q3eGFCNnJSDQoJCQkJCQlQ Uk52MVBJZmppMFFPcEx1MzFJVkhheUpLNkM1MWkrTVpuZnRiTTh0ZWdSV21PM203WEtaVjVoWmI0S0I4 bThyQ0NIQi84ZDRvclBnDQoJCQkJCQlIOHhqS1k0L0FpQ0hrcHlhYklVMEpQQi81aXNYWlE9PSINCgkJ CQkJKSwNCgkJCQkJJ3BsdWdpbmJ1ZGR5X3RpcC5wbmcnID0+IGFycmF5KCANCgkJCQkJCSd0eXBlJz0+ J3BuZycsICd3aWR0aCc9PicxNScsICdoZWlnaHQnPT4nMTUnLA0KCQkJCQkJJ2NvZGUnPT4iZUp3Qk5R TEsvWWxRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUFQQUFBQUR3Z0dBQUFBTzlhVlNnQUFBZnhKUkVGVWVO cDlrVDJJR2tFWQ0KCQkJCQkJaHVmT2EzSlJpNFNrTm9HRGxJcVk0c2dSZ2swSWFUUkZiSzRRSW9MRm9a QkNzRWhFRUl3Z2E2RWdZbUVLUlJBYi93cC9sd2k3QkpUag0KCQkJCQkJQWdiMUdoV0ZnRWFGNENrbk4z bFpVUFkyUHk4OE1NeDh6OHczTXlTVHlRams4M2xTS3BVRWFyWGFZL0FTdkFaUHdINnhXQ1RwZEpxSQ0K CQkJCQkJSTVWZkFPWXIwdWwwdnZkNnZVNFRLWmZMZGNodi9pZGJXSmJsNXZQNWpFcXlYQzUvOFR6ZmhQ d2V5cjVVZmw2cFZQak5abk5OLzVFYg0KCQkJCQkJQkJ1Y1J5S1JkOUJrZ2h5THhVZ2lrUWhNcDlPZjI4 TEJZRUN6MlN5TngrTVVOeEIzY0pWS3BWaVZTdlZnS3o5RU94d1ZKWmZMQ1V3bQ0KCQkJCQkJRXhxTlJ1 bDRQTjZ0MWV2MUM0dkY4aGJxQVFtRlFpZlZhdldiV0Y2dFZuUTRIQW9iQklOQnVsZ3NkbXV0VnV2U2Fy VitnS3dnZnIvLw0KCQkJCQkJdUZBb1FMNFZvVjFzVFB2OVBoV0g0N2hMazhua2hYeWZlRHdlUlNBUWFO d2dvaHFoVlhSRXBVa21reTJkVG5lMmxZblQ2ZnpZN1haLw0KCQkJCQkJaUl2d2JkVGxjdDBTUjZQUnpH dzI1eUhxd1YxaXQ5c0pVTHZkN2didWRpVXV4Zy9zeHV2MSt0cm44M0U0MVEveENNaTJNc0VMbnVLaw0K CQkJCQkJUnJ2ZDNuVWcrcnFaMSt2bDlYcjlaMGpQZ0p4SXNtYzBHby94R0l6TlptTVpobW1HdytGemg4 UHh4V0F3Wk5WcTlTZlVuSUI3WUE5SQ0KCQkJCQkJSTB3ZXl1VnlsVmFyTldvMEdyTlNxWHlGdWFmZ0VW Qkl4RDhEbVNBeWNBY2Nnb08vU2I4QlovUDdDRXlwMkYwQUFBQUFTVVZPUks1Qw0KCQkJCQkJWUlJMlNn UXAiDQoJCQkJCSksDQoJCQkJCSdncmF5LWdyYWQucG5nJyA9PiBhcnJheSggDQoJCQkJCQkndHlwZSc9 PidwbmcnLCAnd2lkdGgnPT4nNScsICdoZWlnaHQnPT4nMzEnLA0KCQkJCQkJJ2NvZGUnPT4iZUp6ckRQ Qno1K1dTNG1KZ1lPRDE5SEFKQXRLc1FDelB3UVFrRnpoTThBZFN6TVZPbmlFY0hCeTNIL28vQUhJNUN6 d2lpeGtZdUlWQQ0KCQkJCQkJbVBIUzNiby9RRUhGRXRlSWt1RDh0Skx5eEtKVUJ0L0U1S0w4M05TVXpF UUZ0OHlpMVBMOG91eGlCUk05ZzFkcTZxVkF4V0lneGM1Rg0KCQkJCQkJcVlrbG1mbDVDaUdadWFrTWhn YjZSaWI2QmhhYWZLdC9BMVZvZXJvNGhsVE1TYTc1L1UyWFdTamg1Ly8vOWtiek94bEZGM3hldVZZdQ0K CQkJCQkJZGw3SVYyWmQvNVdWVzhMNEdhekZkYjV6SHRyRERkVEU0T25xNTdMT0thRUpBQVFGUDQ4PSIN CgkJCQkJKSwNCgkJCQkgICAnYnVsbGV0X2dvLnBuZycgPT4gYXJyYXkoIA0KCQkJCQkgJ3R5cGUnPT4n

cG5nJywgJ3dpZHRoJz0+JzE2JywgJ2hlaWdodCc9PicxNicsDQoJCQkJCSAnY29kZSc9PiJlSndCbWdG bC9vbFFUa2NOQ2hvS0FBQUFEVWxJUkZJQUFBQVFBQUFBRUFnR0FBQUFIL1AvWVFBQUFBUm5RVTFCQUFD dnlEY0ZpdWtBDQoJCQkJCQkJICBBQUFaZEVWWWRGTnZablIzWVhKbEFFRmtiMkpsSUVsdFlXZGxVbVZo WkhseHlXVThBQUFCTEVsRVFWUTR5MlA0Ly84L0F5V1lZWmdiDQoJCQkJCQkJICBrTDNZL0d2cWZNUC84 WE4xT2NreUlIbSs0ZGZHelZIL3cyZG8vUGVmS3M5SjBJRDhwYmIvY3hlYi8wMWZhUHczY2E3KzM1cjFv ZjlYDQoJCQkJCQkJICBuWjc0djJTMS8zL1hmdkcvdHQyQ1BIZ05BRHI1LzRaejAvNnZQVHNGckhIRjZR bi9KK3dwK2Ivd2VOZi9qS1Z1LzAzYjJmL3FOalB5DQoJCQkJCQkJICA0elFBNkdTdzVyNWQrZjg3ZDJU L2I5Mlc5cjloYytML3BxM3AvMmNjYXY0ZnM4RG12Mm85d3grY0JrVFAxdnkvOHRTRS8wdFA5UDVmDQoJ CQkJCQkJICBlS3pyLzd5akhVQkRzdjVQUDlUMFAyMnB4My9GV29aWDBwVU1CamdOQ0p5dStNOXpvdlEv NTM3UmY5YmQvUC9pNWx2OW4zYXc0WC9TDQoJCQkJCQkJICBZcmYvOHJVTXp5VXJHYlJJaWdYdFpzYXY4 UXVkLzh0WE16d0JhbFluT1JxQlR2NHFWODM4WDdTU1FaSHNsQ2hjenNBNXVQTUNBSWVWDQoJCQkJCQkJ ICB4L29PM2F6c0FBQUFBRWxGVGtTdVFtQ0NIWmJQZFE9PSINCgkJCQkJKSwNCgkJCQkJJ2J1bGxldF9l cnJvci5wbmcnID0+IGFycmF5KCANCgkJCQkJICd0eXBlJz0+J3BuZycsICd3aWR0aCc9PicxNicsICdo ZWlnaHQnPT4nMTYnLA0KCQkJCQkgJ2NvZGUnPT4iZUp3QnhnRTUvb2xRVGtjTkNob0tBQUFBRFVsSVJG SUFBQUFRQUFBQUVBZ0dBQUFBSC9QL1lRQUFBQVJuUVUxQkFBQ3Z5RGNGaXVrQQ0KCQkJCQkJCSAgQUFB WmRFVllkRk52Wm5SM1lYSmxBRUZrYjJKbElFbHRZV2RsVW1WaFpIbHh5V1U4QUFBQldFbEVRVlE0eTJQ OC8vOC9BeVdBaVlGQw0KCQkJCQkJCSAgUUxFQkxMZ2tIaHlJRC8zLzcxL3gvMy8vL1pSY2xyd2l5UVgz OXNUdy9mdjl1NUZmenQ4Y1NKZVI3QVdncGdJK1dXOU5Qa2xEaGo4Lw0KCQkJCQkJCSAgZnlkZlh4ZGdT clFCdHphRmFBRTE1Zk9LQ0REOC9iU0pRVnd2UmVEdnoxKzFsNWQ0c0JJMEFHZ1QwNStmdnlwRnRhS0ZH SDZjWXppMQ0KCQkJCQkJCSAgYUNrRGo4QjNoajgvZnZrQXNSOUJBNEEydVhFSjY4WHdDbjVqK1BmelBn UEQvMzhNZjcrY1psQjBLR2I4OC9Objg2bEpscnc0RGJpNA0KCQkJCQkJCSAgMEkwTmFFdUxnSndCdzc5 dmw0QjZ2ek1ZQjZzei9QdjFqSUdENHhhRHVHNkVKdEIxaFRnTkFOcWVLcVRpYmN6Ris0YmgvNSszREF5 TQ0KCQkJCQkJCSAgekF4bjE5MENCU25EdngrM0dFVFY1SUZxZm1jZmF0TFJ3cG9PL3Z6NENmUzdQOURJ Qnd4TWZLSkFrZjhNWmtrQmNIdVlPWlVabEZ6TA0KCQkJCQkJCSAgeFc1dGJtb0VDb1JpR3ZEekY4ZTUy Y0hmZ1FrSDZQeC9TUGcvbkdZQTBmLy9TeUM3Z0hIb1p5WUFUTE9vR2VMWXFRd0FBQUFBU1VWTw0KCQkJ CQkJCSAgUks1Q1lJS3kxc2xyIg0KCQkJCQkpLA0KCQkJCQkgJ3BsdWdpbmJ1ZGR5LnBuZycgPT4gYXJy YXkoIA0KCQkJCQkgJ3R5cGUnPT4ncG5nJywgJ3dpZHRoJz0+JzE2JywgJ2hlaWdodCc9PicxNicsDQoJ CQkJCSAnY29kZSc9PiJlSndCSUEzZjhvbFFUa2NOQ2hvS0FBQUFEVWxJUkZJQUFBQVFBQUFBRUFnR0FB QUFIL1AvWVFBQUFBbHdTRmx6QUFBTEV3QUFDeE1CDQoJCQkJCQkJICBBSnFjR0FBQUNrOXBRME5RVUdo dmRHOXphRzl3SUVsRFF5QndjbTltYVd4bEFBQjQycDFUWjFSVDZSWTk5OTcwUWt1SWdKUkxiMUlWDQoJ CQkJCQkJICBDQ0JTUW91QUZKRW1LaUVKRUVxSUlhSFpGVkhCRVVWRkJCdklvSWdEam82QWpCVlJMQXlL Q3RnSDVDR2lqb09qaUlySysrRjdvMnZXDQoJCQkJCQkJICB2UGZtemY2MTF6N25yUE9kczg4SHdBZ01s a2d6VVRXQURLbENIaEhnZzhmRXh1SGtMa0NCQ2lSd0FCQUlzMlFoYy8wakFRRDRmanc4DQoJCQkJCQkJ ICBLeUxBQjc0QUFYalRDd2dBd0UyYndEQWNoLzhQNmtLWlhBR0FoQUhBZEpFNFN3aUFGQUJBZW81Q3Bn QkFSZ0dBblpnbVV3Q2dCQUJnDQoJCQkJCQkJICB5Mk5pNHdCUUxRQmdKMy9tMHdDQW5maVpld0VBVzVR aEZRR2drUUFnRTJXSVJBQm9Pd0NzejFhS1JRQllNQUFVWmt2RU9RRFlMUUF3DQoJCQkJCQkJICBTVmRt U0FDd3R3REF6aEFMc2dBSURBQXdVWWlGS1FBRWV3Qmd5Q01qZUFDRW1RQVVSdkpYUFBFcnJoRG5LZ0FB ZUpteVBMa2tPVVdCDQoJCQkJCQkJICBXd2d0Y1FkWFZ5NGVLTTVKRnlzVU5tRUNZWnBBTHNKNW1Sa3ln VFFQNFBQTUFBQ2drUlVSNElQei9Yak9EcTdPemphT3RnNWZMZXEvDQoJCQkJCQkJICBCdjhpWW1Mai91 WFBxM0JBQUFEaGRIN1IvaXd2c3hxQU93YUFiZjZpSmU0RWFGNExvSFgzaTJheUQwQzFBS0RwMmxmemNQ aCtQRHhGDQoJCQkJCQkJICBvWkM1MmRubDVPVFlTc1JDVzJIS1YzMytaOEpmd0ZmOWJQbCtQUHozOWVD KzRpU0JNbDJCUndUNDRNTE05RXlsSE0rU0NZUmkzT2FQDQoJCQkJCQkJICBSL3kzQy8vOEhkTWl4RWxp dVZncUZPTlJFbkdPUkpxTTh6S2xJb2xDa2luRkpkTC9aT0xmTFBzRFB0ODFBTEJxUGdGN2tTMm9YV01E DQoJCQkJCQkJICA5a3NuRUZoMHdPTDNBQUR5dTIvQjFDZ0lBNEJvZytIUGQvL3ZQLzFIb0NVQWdHWkpr bkVBQUY1RUpDNVV5ck0veHdnQUFFU2dnU3F3DQoJCQkJCQkJICBRUnYwd1Jnc3dBWWN3UVhjd1F2OFlE YUVRaVRFd2tJUVFncGtnQnh5WUNtc2drSW9oczJ3SFNwZ0w5UkFIVFRBVVdpR2szQU9Mc0pWDQoJCQkJ CQkJICB1QTQ5Y0EvNllRaWV3U2k4Z1FrRVFjZ0lFMkVoMm9nQllvcFlJNDRJRjVtRitDSEJTQVFTaXlR Z3lZZ1VVU0pMa1RWSU1WS0tWQ0JWDQoJCQkJCQkJICBTQjN5UFhJQ09ZZGNScnFSTzhnQU1vTDhocnhI TVpTQnNsRTkxQXkxUTdtb054cUVScUlMMEdSME1acVBGcUNiMEhLMEdqMk1OcUhuDQoJCQkJCQkJICAw S3RvRDlxUFBrUEhNTURvR0FjenhHd3dMc2JEUXJFNExBbVRZOHV4SXF3TXE4WWFzRmFzQTd1SjlXUFBz WGNFRW9GRndBazJCSGRDDQoJCQkJCQkJICBJR0VlUVVoWVRGaE8yRWlvSUJ3a05CSGFDVGNKQTRSUndp Y2lrNmhMdENhNkVmbkVHR0l5TVlkWVNDd2oxaEtQRXk4UWU0aER4RGNrDQoJCQkJCQkJICBFb2xETWll NWtBSkpzYVJVMGhMU1J0SnVVaVBwTEttYk5FZ2FJNVBKMm1ScnNnYzVsQ3dnSzhpRjVKM2t3K1F6NUJ2 a0lmSmJDcDFpDQoJCQkJCQkJICBRSEdrK0ZQaUtGTEtha29aNVJEbE5PVUdaWmd5UVZXam1sTGRxS0ZV RVRXUFdrS3RvYlpTcjFHSHFCTTBkWm81ellNV1NVdWxyYUtWDQoJCQkJCQkJICAweHBvRjJqM2FhL29k TG9SM1pVZVRwZlFWOUxMNlVmb2wrZ0Q5SGNNRFlZVmc4ZUlaeWdabXhnSEdHY1pkeGl2bUV5bUdkT0xH Y2RVDQoJCQkJCQkJICBNRGN4NjVqbm1RK1piMVZZS3JZcWZCV1J5Z3FWU3BVbWxSc3FMMVNwcXFhcTNx b0xWZk5WeTFTUHFWNVRmYTVHVlROVDQ2a0oxSmFyDQoJCQkJCQkJICBWYXFkVU90VEcxTm5xVHVvaDZw bnFHOVVQNlIrV2YySkJsbkRUTU5QUTZSUm9MRmY0N3pHSUF0akdiTjRMQ0ZyRGF1R2RZRTF4Q2F4DQoJ CQkJCQkJICB6ZGw4ZGlxN21QMGR1NHM5cXFtaE9VTXpTak5YczFMemxHWS9CK09ZY2ZpY2RFNEo1eWlu

bC9OK2l0NFU3eW5pS1J1bU5FeTVNV1ZjDQoJCQkJCQkJICBhNnFXbDVaWXEwaXJVYXRINjcwMnJ1Mm5u YWE5UmJ0Wis0RU9RY2RLSjF3blIyZVB6Z1dkNTFQWlU5Mm5DcWNXVFQwNjlhNHVxbXVsDQoJCQkJCQkJ ICBHNkc3UkhlL2JxZnVtSjYrWG9DZVRHK24zbm05NS9vY2ZTLzlWUDF0K3FmMVJ3eFlCck1NSkFiYkRN NFlQTVUxY1c4OEhTL0gyL0ZSDQoJCQkJCQkJICBRMTNEUUVPbFlaVmhsK0dFa2JuUlBLUFZSbzFHRDR4 cHhsempKT050eG0zR295WUdKaUVtUzAzcVRlNmFVazI1cGltbU8wdzdUTWZODQoJCQkJCQkJICB6TTJp emRhWk5aczlNZGN5NTV2bm05ZWIzN2RnV25oYUxMYW90cmhsU2JMa1dxWlo3cmE4Ym9WYU9WbWxXRlZh WGJOR3JaMnRKZGE3DQoJCQkJCQkJICByYnVuRWFlNVRwTk9xNTdXWjhPdzhiYkp0cW0zR2JEbDJBYmJy clp0dG4xaFoySVhaN2ZGcnNQdWs3MlRmYnA5amYwOUJ3MkgyUTZyDQoJCQkJCQkJICBIVm9kZm5PMGNo UTZWanJlbXM2YzdqOTl4ZlNXNlM5bldNOFF6OWd6NDdZVHl5bkVhWjFUbTlOSFp4ZG51WE9EODRpTGlV dUN5eTZYDQoJCQkJCQkJICBQaTZiRzhiZHlMM2tTblQxY1YzaGV0TDFuWnV6bThMdHFOdXY3amJ1YWU2 SDNKL01OSjhwbmxremM5RER5RVBnVWVYUlB3dWZsVEJyDQoJCQkJCQkJICAzNngrVDBOUGdXZTE1eU12 WXkrUlY2M1hzTGVsZDZyM1llOFhQdlkrY3AvalB1TThOOTR5M2xsZnpEZkF0OGkzeTAvRGI1NWZoZDlE DQoJCQkJCQkJICBmeVAvWlA5Ni85RUFwNEFsQVdjRGlZRkJnVnNDKy9oNmZDRy9qajg2MjJYMnN0bnRR WXlndVVFVlFZK0NyWUxsd2EwaGFNanNrSzBoDQoJCQkJCQkJICA5K2VZenBIT2FRNkZVSDdvMXRBSFll WmhpOE4rRENlRmg0VlhoaitPY0loWUd0RXhselYzMGR4RGM5OUUra1NXUk42Ylp6RlBPYTh0DQoJCQkJ CQkJICBTalVxUHFvdWFqemFON28wdWovR0xtWlp6TlZZblZoSmJFc2NPUzRxcmpadWJMN2YvTzN6aCtL ZDRndmpleGVZTDhoZGNIbWh6c0wwDQoJCQkJCQkJICBoYWNXcVM0U0xEcVdRRXlJVGppVThFRVFLcWdX akNYeUUzY2xqZ3A1d2gzQ1p5SXYwVGJSaU5oRFhDb2VUdkpJS2sxNmt1eVJ2RFY1DQoJCQkJCQkJICBK TVV6cFN6bHVZUW5xWkM4VEExTTNaczZuaGFhZGlCdE1qMDZ2VEdEa3BHUWNVS3FJVTJUdG1mcVorWm1k c3VzWllXeS9zVnVpN2N2DQoJCQkJCQkJICBIcFVIeVd1emtLd0ZXUzBLdGtLbTZGUmFLTmNxQjdKblpW ZG12ODJKeWptV3E1NHJ6ZTNNczhyYmtEZWM3NS8vN1JMQ0V1R1N0cVdHDQoJCQkJCQkJICBTMWN0SFZq bXZheHFPYkk4Y1huYkN1TVZCU3VHVmdhc1BMaUt0aXB0MVUrcjdWZVhybjY5Sm5wTmE0RmV3Y3FDd2JV QmErc0xWUXJsDQoJCQkJCQkJICBoWDNyM05mdFhVOVlMMW5mdFdINmhwMGJQaFdKaXE0VTJ4ZVhGWC9Z S054NDVSdUhiOHEvbWR5VXRLbXJ4TGxrejJiU1p1bm0zaTJlDQoJCQkJCQkJICBXdzZXcXBmbWx3NXVE ZG5hdEEzZlZyVHQ5ZlpGMnkrWHpTamJ1NE8yUTdtanZ6eTR2R1dueWM3Tk96OVVwRlQwVlBwVU51N1Mz YlZoDQoJCQkJCQkJICAxL2h1MGU0YmU3ejJOT3pWMjF1ODkvMCt5YjdiVlFGVlRkVm0xV1g3U2Z1ejl6 K3VpYXJwK0piN2JWMnRUbTF4N2NjRDBnUDlCeU1PDQoJCQkJCQkJICB0dGU1MU5VZDBqMVVVby9XSyt0 SERzY2Z2djZkNzNjdERUWU5WWTJjeHVJamNFUjU1T24zQ2QvM0hnMDYybmFNZTZ6aEI5TWZkaDFuDQoJ CQkJCQkJICBIUzlxUXByeW1rYWJVNXI3VzJKYnVrL01QdEhXNnQ1Ni9FZmJIdytjTkR4WmVVcnpWTWxw MnVtQzA1Tm44cytNblpXZGZYNHUrZHhnDQoJCQkJCQkJICAyNksyZStkanp0OXFEMi92dWhCMDRkSkYv NHZuTzd3N3psenl1SFR5c3R2bEUxZTRWNXF2T2w5dDZuVHFQUDZUMDAvSHU1eTdtcTY1DQoJCQkJCQkJ ICBYR3U1N25xOXRYdG05K2tibmpmTzNmUzllZkVXLzliVm5qazkzYjN6ZW0vM3hmZjEzeGJkZm5Jbi9j N0x1OWwzSis2dHZFKzhYL1JBDQoJCQkJCQkJICA3VUhaUTkySDFUOWIvdHpZNzl4L2FzQjNvUFBSM0Vm M0JvV0R6LzZSOVk4UFF3V1BtWS9MaGcyRzY1NDRQams1NGo5eS9lbjhwMFBQDQoJCQkJCQkJICBaTTht bmhmK292N0xyaGNXTDM3NDFldlh6dEdZMGFHWDhwZVR2MjE4cGYzcXdPc1pyOXZHd3NZZXZzbDRNekZl OUZiNzdjRjMzSGNkDQoJCQkJCQkJICA3NlBmRDAva2ZDQi9LUDlvK2JIMVU5Q24rNU1aazVQL0JBT1k4 L3hqTXkzYkFBQUFJR05JVWswQUFIb2xBQUNBZ3dBQStmOEFBSURwDQoJCQkJCQkJICBBQUIxTUFBQTZt QUFBRHFZQUFBWGI1SmZ4VVlBQUFKTFNVUkJWSGphZEpOTlNGUlJGTWQvOTczNzVzMDR5cGlqYWRnRVlv cUJ1QXZDDQoJCQkJCQkJICBGaVZFUk9SR0Y0TWJ0MUtMYWxYTHdMWlJ0SEZScE5CU3dhQk4wRXJhVkFz dGtnb01JbENUY1Q3TUdYVyszbnVueGJ3Wm5jbitjT0dlDQoJCQkJCQkJICBlejc0bi8rNVI4WGpjUnRv QmNLQXdTR0VlcWdqZHc4NEFIWTBFSm01KzJvcEhDd05LQ3NtSUFpQ2JTdEVOUUVLSlhtS1JSZUZBaFJT DQoJCQkJCQkJICBYbGVGa3Q2WWVqeCtYZ09oZ0hhN3pZNDdtTzIzRkFoS0NidE9KNnViUHhHRWMxMHgy dTJkU3JJbzNQUnpndHVQVGdOTjJxZXRSUGU0DQoJCQkJCQkJICB5dTQzcXh4bmwxUE1Ma2NSZ2JGQmor bVJnVm9mWXZXNmdBa1l1dHF2U0xHdTRTY2ZmN09leXdPUVdnbHcvMklYNFlBdmcxZW94ZFZFDQoJCQkJ CQkJICAwMmE5WXBIUTRkMjJJR1FkYW1nZWlUVWFOZjcxcDR3QXM2TzlUQXhHdWRIWHl2eDRIMHBWZkkz ejBBMmo0dWJyTFZZemFZWmp6ZlMzDQoJCQkJCQkJICBWV2c4VzlsbWJPRUhRMjFSM2t5ZXFZdlhqV1JH ZWd6ZWJaWlorTGFEb1RLK1FJcXdWZkZWSG95NkxBRnd5MWtUSjhtOTRTQnoxMjJhDQoJCQkJCQkJICB0 WVVuNEFrRWpRQXpWMFBjR3c2Qms4UnpzdFVLb29GU29hUzNyY1REbG1KbURvc0MxMktMenRsV1YzOU9o Z0dodTJXZkMrMTUxMXU3DQoJCQkJCQkJICBZcGE5QUpRM1ZMNW9KWUNDQm5LYnFjamNxV2gyUWlSdEtj UjkvMkZxZmkvMzREYjBuZ0NGS216c2ZIMDcvVFF5a0kwTHlsUXFXTjVLDQoJCQkJCQkJICB0eXdDZXlv ZWo1dEFrNzhMSnVBQUhVdERrMHNKcHlNSzBLbVQ2Y3RmWGw0Q1VyNXVMckFQSEZTTm5IOXFvMCtXT20x TXAvS1JTaWNEDQoJCQkJCQkJICB3QjZRYUp5YXdmRTRDSHFaVDFVaklMdmYvZTM3Qi9vL0JiS2pheS9H Z1diZjNnZDJqd3Y4T3dDT205VmVTaXdNdndBQUFBQkpSVTVFDQoJCQkJCQkJICBya0pnZ3IzNU93WT0i DQoJCQkJCSksDQoJCQkJCSdidXR0b24tZ3JhZC5wbmcnID0+IGFycmF5KCANCgkJCQkJICd0eXBlJz0+ J3BuZycsICd3aWR0aCc9Pic1JywgJ2hlaWdodCc9PiczMCcsDQoJCQkJCSAnY29kZSc9PiJlSnpyRFBC ejUrV1M0bUpnWU9EMTlIQUpBdEtzUUN6SHdRWWtuOVJkMlF1a1dJcWRQRU00Z0tDR0k2VUR5T2NzOEln c1ptRGdGZ0poDQoJCQkJCQkJICB4a3QzNi80QUJSVkxYQ05LZ3ZQVFNzb1RpMUlaZkJPVGkvSnpVMU15 RXhYY01vdFN5L09Mc29zVlRQUU1YcW1wbHdJVmk0RVVPeGVsDQoJCQkJCQkJICBKcFprNXVjcGhHVG1w aklZR3VvYm11c2JXTnpLS1MwRXFuRHpkSEVNcVppVGZPWE56YS96R1hrM0dQdzVMcENjOFBQL2YvbGxD b2Z0DQoJCQkJCQkJICBjNXB1aFB3N25xWVc5blpLbEV2VDVBMVJMVy9PL1c4Kzd4bXk1WVg5TGkraEdw

Ykx2K2N2OFBKeFpIalY1RjBlWEdIVUR6U1J3ZFBWDQoJCQkJCQkJICB6MldkVTBJVEFLVXdVc3M9Ig0K CQkJCQkpLA0KCQkJCQknd2hpdGUtZ3JhZC5wbmcnID0+IGFycmF5KCANCgkJCQkJICd0eXBlJz0+J3Bu ZycsICd3aWR0aCc9Pic1JywgJ2hlaWdodCc9PiczMCcsDQoJCQkJCSAnY29kZSc9PiJlSnpyRFBCejUr V1M0bUpnWU9EMTlIQUpBdEtzUUN6SHdRWWtuOVJkMlF1a1dJcWRQRU00Z0tDR0k2VUR5T2NzOElnc1pt RGdGZ0poDQoJCQkJCQkgIHhrdDM2LzRBQlJWTFhDTktndlBUU3NvVGkxSVpmQk9UaS9KelUxTXlFeFhj TW90U3kvT0xzb3NWVFBRTVhxbXBsd0lWaTRFVU94ZWwNCgkJCQkJCSAgSnBaazV1Y3BoR1RtcGpJWUd1 b2JtdXNiV056S0tTMEVxbEQxZEhFTXFaaVQvT2YvLy8vMWJDWUhXdlFPZ0VDVHEyTFp3WVdMYWxmcw0K CQkJCQkJICBLUDdSS3NUUXpHT2xkcy9ieEJHb2djSFQxYzlsblZOQ0V3Qnhoa0NUIg0KCQkJCQkpLA0K CQkJCQknbG9hZGluZy5naWYnID0+IGFycmF5KA0KCQkJCQkgJ3R5cGUnPT4nZ2lmJywgJ3dpZHRoJz0+ JzE2JywgJ2hlaWdodCc9PicxMScsDQoJCQkJCSAnY29kZSc9PiJlSnh6OTNTenNFd1VZT0JtK01MQThQ Ly9Bd1lHaGx1M0RseTRzUDNWcTNOc2JLeEFycDZlUmxOVFVVSkN5SzVkUzVTVVpMMjhITHU2DQoJCQkJ CQkJICBLbE5TSXZidFc2Nm1wc2pDd3V6bjUvTHMyYWtiTi9aOStYTGR3c0x3enAxRG56NWQzYlp0d1lJ RnZhZE9iWHIzN2lJRERDais1L1p6DQoJCQkJCQkJICBEUWwyZGd4d05kSXpZR1lFQ2YyVGNpNUtUU3hK VFZFb3p5ekpVRWpNU3F6SXlVOU0wY3ZNUzh0blVQekp3c2tOVktVRDBnMXlKQU9yDQoJCQkJCQkJICBy b0pDWDBybXZDVUx1QjZkWWxybklOQnNjY2EwNEhMMXZkczc1dk94UHhGczMvTEk0UVNQWHZHNmExeXVh NmM1WVROQkpTRlJnalZoDQoJCQkJCQkJICAzb3BNbWZhSit3N2NPclR5emFYbHZjL2Y3SDI5TzBKZll3 NXJvN1ZncHdRVE5vMW1RS3U3RTNVZWQ2aHdLa254SkM5SldxUnhVdnI4DQoJCQkJCQkJICBsdDdYUmxJ SHBqTWZhTm9iL2ZHRXQyRGoyWXVYZHdqN3pUd1V5cTBsTXMzdmtBQTJvMHlCUmkzaGNCVU1ZZXA5YkpL azRubnhsVTIvDQoJCQkJCQkJICA4UG5TeXVmV3MzaVhNNTlvc1V2YTRQNUx0UC9NeEdKTEZxbksxZGU2 ZDJuTkRWTEVacElSSkR5dWJZcDQ1aEk0ZVlmSHBhU2dVTmVUDQoJCQkJCQkJICBXMklmV2NXOW5YYWJN ZTF3Zk9BTFpjYmVFODlPc0NiUDgxcDU5YXNVVnIrWlE0eFJLWXh0V2JFcGFWbm16ZGJFNlJtUEYyM0xu UlhMDQoJCQkJCQkJICBwL0RtYjlQMlJNRUh6SHJUZlZYNlo1Z3d4ZXN5bUptZFhyRHZRUkFITnJQMElX WTlBYnBueGFaM3E0cGtWSU8yOEQ0d1hmOTd1MHpCDQoJCQkJCQkJICBkTzV2WFVkbUZiYksvSXJUWlRC aGM0NWN2d1JyQUpGc2hqVThsUUVBWEUvOWRnPT0iDQoJCQkJCSkNCgkJCQkpOw0KCQlpZiAoIGlzc2V0 KCAkaW1hZ2VzWyRuYW1lXSApICkgew0KCQkJcmV0dXJuICRpbWFnZXNbJG5hbWVdOw0KCQl9IGVsc2Ug ew0KCQkJcmV0dXJuICRpbWFnZXNbJ2JsYW5rLmdpZiddOw0KCQl9DQoJfQ0KfQ0KPz4= ###PACKDATA,FILE_END,/importbuddy/classes/ezimg.php,importbuddy/classes/ezimg.ph p ###PACKDATA,FILE_START,/importbuddy/classes/mysql_test.php,importbuddy/classes/m ysql_test.php PD9waHANCiRjYW5fY29ubmVjdCA9IGZhbHNlOw0KJGNvbm5lY3RfZXJyb3IgPSAnTi9BJzsNCiRjYW5f c2VsZWN0ID0gZmFsc2U7DQokc2VsZWN0X2Vycm9yID0gJ04vQSc7DQokd29yZHByZXNzX2V4aXN0cyA9 IGZhbHNlOw0KJGZhaWx1cmVfZW5jb3VudGVyZWQgPSBmYWxzZTsNCg0KaWYgKCBmYWxzZSA9PT0gQG15 c3FsX2Nvbm5lY3QoICRfUE9TVFsnc2VydmVyJ10sICRfUE9TVFsndXNlciddLCAkX1BPU1RbJ3Bhc3Mn XSApICkgeyAvLyBDb3VsZG50IGNvbm5lY3QgdG8gc2VydmVyIG9yIGludmFsaWQgY3JlZGVudGlhbHMu DQoJJGNvbm5lY3RfZXJyb3IgPSBteXNxbF9lcnJvcigpOw0KfSBlbHNlIHsNCgkkY2FuX2Nvbm5lY3Qg PSB0cnVlOw0KCQ0KCWlmICggZmFsc2UgPT09IEBteXNxbF9zZWxlY3RfZGIoICRfUE9TVFsnbmFtZSdd ICkgKSB7IC8vIA0KCQkkY2FuX3NlbGVjdCA9IGZhbHNlOw0KCQkkc2VsZWN0X2Vycm9yID0gbXlzcWxf ZXJyb3IoKTsNCgl9IGVsc2Ugew0KCQkkY2FuX3NlbGVjdCA9IHRydWU7DQoJCQ0KCQkvLyBDaGVjayBu dW1iZXIgb2YgdGFibGVzIGFscmVhZHkgZXhpc3Rpbmcgd2l0aCB0aGlzIHByZWZpeC4NCgkJJHJlc3Vs dCA9IG15c3FsX3F1ZXJ5KCAiU0hPVyBUQUJMRVMgTElLRSAnIiAuIG15c3FsX3JlYWxfZXNjYXBlX3N0 cmluZyggJF9QT1NUWydwcmVmaXgnXSApIC4gIiUnIiApOw0KCQlpZiAoIG15c3FsX251bV9yb3dzKCAk cmVzdWx0ICkgPiAwICkgew0KCQkJJHdvcmRwcmVzc19leGlzdHMgPSB0cnVlOw0KCQl9IGVsc2Ugew0K CQkJJHdvcmRwcmVzc19leGlzdHMgPSBmYWxzZTsNCgkJfQ0KCQl1bnNldCggJHJlc3VsdCApOw0KCX0N Cn0NCg0KDQovLyBDQU4gQ09OTkVDVA0KZWNobyAnMS4gTG9nZ2luZyBpbiB0byBzZXJ2ZXIgLi4uICc7 DQppZiAoICRjYW5fY29ubmVjdCA9PT0gdHJ1ZSApIHsNCgllY2hvICdTdWNjZXNzPGJyPic7DQp9IGVs c2Ugew0KCWVjaG8gJzxmb250IGNvbG9yPXJlZD5GYWlsZWQ8L2ZvbnQ+PGJyPic7DQoJZWNobyAnJm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RXJyb3I6ICcgLiAkY29ubmVjdF9lcnJvciAuICc8YnI+JzsNCgkk ZmFpbHVyZV9lbmNvdW50ZXJlZCA9IHRydWU7DQp9DQoNCg0KLy8gQ0FOIEFDQ0VTUyBEQVRBQkFTRSBC WSBOQU1FDQplY2hvICcyLiBWZXJpZnlpbmcgZGF0YWJhc2UgYWNjZXNzICYgcGVybWlzc2lvbiDigKYg JzsNCmlmICggJGNhbl9zZWxlY3QgPT09IHRydWUgKSB7DQoJZWNobyAnU3VjY2Vzczxicj4nOw0KfSBl bHNlIHsNCgllY2hvICc8Zm9udCBjb2xvcj1yZWQ+RmFpbGVkPC9mb250Pjxicj4nOw0KCWVjaG8gJyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwO0Vycm9yOiAnIC4gJHNlbGVjdF9lcnJvciAuICc8YnI+JzsNCgkk ZmFpbHVyZV9lbmNvdW50ZXJlZCA9IHRydWU7DQp9DQoNCg0KLy8gRE9FUyBXT1JEUFJFU1MgRVhJU1Q/ DQplY2hvICczLiBWZXJpZnlpbmcgbm8gZXhpc3RpbmcgV1AgZGF0YSAuLi4gJzsNCmlmICggJGZhaWx1 cmVfZW5jb3VudGVyZWQgPT09IHRydWUgKSB7DQoJZWNobyAnTi9BPGJyPic7DQp9IGVsc2Ugew0KCWlm ICggJHdvcmRwcmVzc19leGlzdHMgIT09IHRydWUgKSB7IC8vIE5vIGV4aXN0aW5nIFdvcmRQcmVzcy4N CgkJZWNobyAnU3VjY2Vzczxicj4nOw0KCX0gZWxzZSB7IC8vIFdvcmRQcmVzcyBleGlzdHMuDQoJCWlm ICggJF9QT1NUWyd3aXBlX2RhdGFiYXNlJ10gPT0gJzEnICkgeyAvLyBPcHRpb24gdG8gd2lwZSBlbmFi bGVkLg0KCQkJZWNobyAnPGZvbnQgY29sb3I9cmVkPldhcm5pbmc8L2ZvbnQ+PGJyPic7DQoJCQllY2hv

ICcmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXb3JkUHJlc3MgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBk YXRhYmFzZSB3aXRoIHRoaXMgcHJlZml4Ljxicj4nOw0KCQkJZWNobyAnJm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7SXQgd2lsbCBiZSB3aXBlZCBwcmlvciB0byBpbXBvcnQgb24gdGhlIG5leHQgc3RlcC4gVXNl IGNhdXRpb24uPGJyPic7DQoJCX0gZWxzZSB7IC8vIE5vdCB3aXBpbmcuIFdlIGhhdmUgYW4gZXJyb3Iu DQoJCQllY2hvICcmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtFcnJvcjogV29yZFByZXNzIGFscmVhZHkg ZXhpc3RzIGluIHRoaXMgZGF0YWJhc2Ugd2l0aCB0aGlzIHByZWZpeC48YnI+JzsNCgkJCSRmYWlsdXJl X2VuY291bnRlcmVkID0gdHJ1ZTsNCgkJfQ0KCX0NCn0NCg0KDQovLyBPVkVSQUxMIFJFU1VMVA0KZWNo byAnNC4gT3ZlcmFsbCBteVNRTCB0ZXN0IHJlc3VsdCAuLi4gJzsNCmlmICggJGZhaWx1cmVfZW5jb3Vu dGVyZWQgIT09IHRydWUgKSB7DQoJZWNobyAnU3VjY2Vzczxicj4nOw0KfSBlbHNlIHsNCgllY2hvICc8 Zm9udCBjb2xvcj1yZWQ+RmFpbGVkPC9mb250Pjxicj4nOw0KfQ0KDQoNCmRpZSgpOw0KPz4= ###PACKDATA,FILE_END,/importbuddy/classes/mysql_test.php,importbuddy/classes/mys ql_test.php ###PACKDATA,FILE_START,/importbuddy/classes/step_0_api.php,importbuddy/classes/s tep_0_api.php PD9waHANCmNsYXNzIHBsdWdpbmJ1ZGR5X2ltcG9ydGJ1ZGR5X3N0ZXBfMCB7DQoJZnVuY3Rpb24gX19j b25zdHJ1Y3QoICYkcGFyZW50ICkgew0KCQkkdGhpcy0+X3BhcmVudCA9ICYkcGFyZW50Ow0KCX0NCn0N Cj8+ ###PACKDATA,FILE_END,/importbuddy/classes/step_0_api.php,importbuddy/classes/ste p_0_api.php ###PACKDATA,FILE_START,/importbuddy/classes/step_0_view.php,importbuddy/classes/ step_0_view.php PD9waHANCmlmICggaXNzZXQoICRfR0VUWydhY3Rpb24nXSApICkgew0KCWlmICggJF9HRVRbJ2FjdGlv biddID09ICdwaHBpbmZvJyApIHsNCgkJcGhwaW5mbygpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJ0ludmFs aWQgYWN0aW9uLic7DQoJfQ0KfSBlbHNlIHsNCgllY2hvICdObyBhY3Rpb24gZ2l2ZW4uJzsNCn0NCj8+ ###PACKDATA,FILE_END,/importbuddy/classes/step_0_view.php,importbuddy/classes/st ep_0_view.php ###PACKDATA,FILE_START,/importbuddy/classes/step_1_api.php,importbuddy/classes/s tep_1_api.php PD9waHANCmNsYXNzIHBsdWdpbmJ1ZGR5X2ltcG9ydGJ1ZGR5X3N0ZXBfMSB7DQoJZnVuY3Rpb24gX19j b25zdHJ1Y3QoICYkcGFyZW50ICkgew0KCQkkdGhpcy0+X3BhcmVudCA9ICYkcGFyZW50Ow0KCX0NCgkN CgkNCgkvKioNCgkgKgl1cGxvYWQoKQ0KCSAqDQoJICoJUHJvY2Vzc2VzIHVwbG9hZGVkIGJhY2t1cCBm aWxlLg0KCSAqDQoJICoJQHJldHVybgkJYXJyYXkJCVRydWUgb24gdXBsb2FkIHN1Y2Nlc3M7IGZhbHNl IG90aGVyd2lzZS4NCgkgKi8NCglmdW5jdGlvbiB1cGxvYWQoKSB7DQoJCWlmICggaXNzZXQoICRfUE9T VFsndXBsb2FkJ10gKSAmJiAoICRfUE9TVFsndXBsb2FkJ10gPT0gJ2xvY2FsJyApICkgew0KCQkJaWYg KCAkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ3Bhc3N3b3JkJ10gIT0gJyNQQVNTV09SRCMnICkgew0K CQkJCSRwYXRoX3BhcnRzID0gcGF0aGluZm8oICRfRklMRVNbJ2ZpbGUnXVsnbmFtZSddICk7DQoJCQkJ aWYgKCAoIHN0cnRvbG93ZXIoIHN1YnN0ciggJF9GSUxFU1snZmlsZSddWyduYW1lJ10sIDAsIDYgKSAp ID09ICdiYWNrdXAnICkgJiYgKCBzdHJ0b2xvd2VyKCAkcGF0aF9wYXJ0c1snZXh0ZW5zaW9uJ10gKSA9 PSAnemlwJyApICkgew0KCQkJCQlpZiAoIG1vdmVfdXBsb2FkZWRfZmlsZSggJF9GSUxFU1snZmlsZSdd Wyd0bXBfbmFtZSddLCBiYXNlbmFtZSggJF9GSUxFU1snZmlsZSddWyduYW1lJ10gKSApICkgew0KCQkJ CQkJJHRoaXMtPl9wYXJlbnQtPmFsZXJ0KCAnRmlsZSBVcGxvYWRlZCcsICdZb3VyIGJhY2t1cCB3YXMg c3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLicgKTsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9IGVsc2Ug ew0KCQkJCQkJJHRoaXMtPl9wYXJlbnQtPmFsZXJ0KCAnRXJyb3InLCAnU29ycnksIHRoZXJlIHdhcyBh IHByb2JsZW0gdXBsb2FkaW5nIHlvdXIgZmlsZS4nICk7DQoJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJ CX0NCgkJCQl9IGVsc2Ugew0KCQkJCQkkdGhpcy0+X3BhcmVudC0+YWxlcnQoICdFcnJvcicsICdPbmx5 IHByb3Blcmx5IG5hbWVkIEJhY2t1cEJ1ZGR5IHppcCBhcmNoaXZlcyB3aXRoIGEgemlwIGV4dGVuc2lv biBtYXkgYmUgdXBsb2FkZWQuJyApOw0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJfQ0KCQkJfSBlbHNl IHsNCgkJCQkkdGhpcy0+X3BhcmVudC0+YWxlcnQoICdVcGxvYWQgQWNjZXNzIERlbmllZCcsIHNlbGY6 OlVQTE9BRF9BQ0NFU1NfREVOSUVEICk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJfQ0K CQ0KCQ0KCS8qKg0KCSAqCWdldF9hcmNoaXZlc19saXN0KCkNCgkgKg0KCSAqCVJldHVybnMgYW4gYXJy YXkgb2YgYmFja3VwIGFyY2hpdmUgemlwIGZpbGVuYW1lcyBmb3VuZC4NCgkgKg0KCSAqCUByZXR1cm4J CWFycmF5CQlBcnJheSBvZiAuemlwIGZpbGVuYW1lczsgcGF0aCBOT1QgaW5jbHVkZWQuDQoJICovDQoJ ZnVuY3Rpb24gZ2V0X2FyY2hpdmVzX2xpc3QoKSB7DQoJCS8vIExpc3QgYmFja3VwIGZpbGVzIGluIHRo aXMgZGlyZWN0b3J5Lg0KCQkkYmFja3VwX2FyY2hpdmVzID0gZ2xvYiggQUJTUEFUSCAuICdiYWNrdXAq LnppcCcgKTsNCgkJaWYgKCAhaXNfYXJyYXkoICRiYWNrdXBfYXJjaGl2ZXMgKSB8fCBlbXB0eSggJGJh Y2t1cF9hcmNoaXZlcyApICkgeyAvLyBPbiBmYWlsdXJlIGdsb2IoKSByZXR1cm5zIGZhbHNlIG9yIGFu IGVtcHR5IGFycmF5IGRlcGVuZGluZyBvbiBzZXJ2ZXIgc2V0dGluZ3Mgc28gbm9ybWFsaXplIGhlcmUu DQoJCQkkYmFja3VwX2FyY2hpdmVzID0gYXJyYXkoKTsNCgkJfQ0KCQlmb3JlYWNoKCAkYmFja3VwX2Fy Y2hpdmVzIGFzICRiYWNrdXBfaWQgPT4gJGJhY2t1cF9hcmNoaXZlICkgew0KCQkJJGJhY2t1cF9hcmNo aXZlc1skYmFja3VwX2lkXSA9IGJhc2VuYW1lKCAkYmFja3VwX2FyY2hpdmUgKTsNCgkJfQ0KCQkNCgkJ

cmV0dXJuICRiYWNrdXBfYXJjaGl2ZXM7DQoJfQ0KCQ0KCQ0KCS8qKg0KCSAqCXdvcmRwcmVzc19leGlz dHMoKQ0KCSAqDQoJICoJTm90aWZpZXMgdGhlIHVzZXIgd2l0aCBhbiBhbGVydCBpZiBXb3JkUHJlc3Mg YXBwZWFycyB0byBhbHJlYWR5IGV4aXN0IGluIHRoaXMgZGlyZWN0b3J5Lg0KCSAqDQoJICoJQHJldHVy bgkJYm9vbGVhbgkJVHJ1ZSBpZiBXb3JkUHJlc3MgYWxyZWFkeSBleGlzdHM7IGZhbHNlIG90aGVyd2lz ZS4NCgkgKi8NCglmdW5jdGlvbiB3b3JkcHJlc3NfZXhpc3RzKCkgew0KCQlpZiAoIGZpbGVfZXhpc3Rz KCBBQlNQQVRIIC4gJ3dwLWNvbmZpZy5waHAnICkgKSB7DQoJCQkkdGhpcy0+X3BhcmVudC0+bG9nKCAn Rm91bmQgZXhpc3RpbmcgV29yZFByZXNzIGluc3RhbGxhdGlvbi4nLCAnd2FybmluZycgKTsNCgkJCSR0 aGlzLT5fcGFyZW50LT5hbGVydCggJ1dBUk5JTkc6IEV4aXN0aW5nIFdvcmRQcmVzcyBpbnN0YWxsYXRp b24gZm91bmQuJywgJ0l0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgZXhpc3RpbmcgV29yZFBy ZXNzIGZpbGVzIGFuZCBkYXRhYmFzZSBiZSByZW1vdmVkIHByaW9yIHRvIG1pZ3JhdGluZyBvciByZXN0 b3JpbmcgdG8gYXZvaWQgY29uZmxpY3RzLiBZb3Ugc2hvdWxkIG5vdCBpbnN0YWxsIFdvcmRQcmVzcyBw cmlvciB0byBtaWdyYXRpbmcuJyApOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0gZWxzZSB7DQoJCQlyZXR1 cm4gZmFsc2U7DQoJCX0NCgl9DQp9DQo/Pg== ###PACKDATA,FILE_END,/importbuddy/classes/step_1_api.php,importbuddy/classes/ste p_1_api.php ###PACKDATA,FILE_START,/importbuddy/classes/step_1_view.php,importbuddy/classes/ step_1_view.php U2VsZWN0IHRoZSBCYWNrdXBCdWRkeSBiYWNrdXAgZmlsZSB5b3Ugd291bGQgbGlrZSB0byBpbXBvcnQg b3IgbWlncmF0ZS4NClRocm91Z2hvdXQgdGhlIHJlc3RvcmUgcHJvY2VzcyB5b3UgbWF5IGhvdmVyIG92 ZXIgcXVlc3Rpb24gbWFya3MNCiA8P3BocCAkdGhpcy0+dGlwKCAnVGhpcyBpcyBhbiBleGFtcGxlIGhl bHAgdGlwLiBIb3ZlciBvdmVyIHRoZXNlIGZvciBhZGRpdGlvbmFsIGhlbHAuJyApOyA/PiANCmZvciBh ZGRpdGlvbmFsIGhlbHAuIA0KDQpGb3Igc3VwcG9ydCBzZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9pdGhl bWVzLmNvbS9jb2RleC9wYWdlL0JhY2t1cEJ1ZGR5IiB0YXJnZXQ9Il9ibGFuayI+S25vd2xlZGdlIEJh c2U8L2E+DQpvciA8YSBocmVmPSJodHRwOi8vcGx1Z2luYnVkZHkuY29tL3N1cHBvcnQvIiB0YXJnZXQ9 Il9ibGFuayI+U3VwcG9ydCBGb3J1bTwvYT4uDQoNCjxicj48YnI+DQoNCjw/cGhwDQokYXBpLT51cGxv YWQoKTsNCg0KZWNobyAnPGJyPjxicj4nOw0KPz4NCg0KPGRpdiBpZD0icGx1Z2luYnVkZHktdGFicyI+ DQoJPHVsPg0KCQk8bGk+PGEgaHJlZj0iI3BsdWdpbmJ1ZGR5LXRhYnMtc2VydmVyIj48c3Bhbj5TZXJ2 ZXI8L3NwYW4+PC9hPjwvbGk+DQoJCTxsaT48YSBocmVmPSIjcGx1Z2luYnVkZHktdGFicy11cGxvYWQi PjxzcGFuPlVwbG9hZDwvc3Bhbj48L2E+PC9saT4NCgk8L3VsPg0KCTxkaXYgY2xhc3M9InRhYnMtYm9y ZGVyd3JhcCIgaWQ9ImVkaXRib3giIHN0eWxlPSJib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RGREZE RjsiPg0KCQkNCgkJPGRpdiBpZD0icGx1Z2luYnVkZHktdGFicy11cGxvYWQiPg0KCQkJPGRpdiBjbGFz cz0idGFicy1pdGVtIj4NCgkJCQk8P3BocA0KCQkJCWlmICggJHRoaXMtPl9vcHRpb25zWydwYXNzd29y ZCddID09ICcjUEFTU1dPUkQjJyApIHsNCgkJCQkJZWNobyBzZWxmOjpVUExPQURfQUNDRVNTX0RFTklF RDsNCgkJCQl9IGVsc2Ugew0KCQkJCT8+DQoJCQkJPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0t ZGF0YSIgYWN0aW9uPSI/c3RlcD0xIiBtZXRob2Q9IlBPU1QiPg0KCQkJCQk8aW5wdXQgdHlwZT0iaGlk ZGVuIiBuYW1lPSJ1cGxvYWQiIHZhbHVlPSJsb2NhbCI+DQoJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4i IG5hbWU9Im9wdGlvbnMiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoIHNlcmlhbGl6 ZSggJHRoaXMtPl9vcHRpb25zICkgKTsgPz4nIiAvPg0KCQkJCQlDaG9vc2UgYmFja3VwIHRvIHVwbG9h ZDogPGlucHV0IG5hbWU9ImZpbGUiIHR5cGU9ImZpbGUiIC8+Jm5ic3A7DQoJCQkJCTxpbnB1dCB0eXBl PSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiIGNsYXNzPSJ0b2dnbGUgYnV0dG9uLXNlY29uZGFyeSI+DQoJ CQkJPC9mb3JtPg0KCQkJCTw/cGhwDQoJCQkJfQ0KCQkJCT8+DQoJCQk8L2Rpdj4NCgkJPC9kaXY+DQoJ CQ0KCQk8ZGl2IGlkPSJwbHVnaW5idWRkeS10YWJzLXNlcnZlciI+DQoJCQk8ZGl2IGNsYXNzPSJ0YWJz LWl0ZW0iPg0KCQkJCTw/cGhwDQoJCQkJJGJhY2t1cF9hcmNoaXZlcyA9ICRhcGktPmdldF9hcmNoaXZl c19saXN0KCk7DQoJCQkJaWYgKCBlbXB0eSggJGJhY2t1cF9hcmNoaXZlcyApICkgeyAvLyBObyBiYWNr dXBzIGZvdW5kLg0KCQkJCQkkdGhpcy0+YWxlcnQoICdFUlJPUjogVW5hYmxlIHRvIGZpbmQgYW55IEJh Y2t1cEJ1ZGR5IGJhY2t1cCBmaWxlcy4nLA0KCQkJCQkJJ1VwbG9hZCB0aGUgYmFja3VwIHppcCBhcmNo aXZlIGludG8gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMgZmlsZSwNCgkJCQkJCWtlZXBpbmcgdGhl IG9yaWdpbmFsIGZpbGUgbmFtZS4gRXg6IGJhY2t1cC15b3VyX2NvbS0yMDExXzA3XzE5LWcxZDFqcHZk NGUuemlwPGJyPjxicj4NCgkJCQkJCUlmIHlvdSBtYW51YWxseSBleHRyYWN0ZWQsIHVwbG9hZCB0aGUg YmFja3VwIGZpbGUsIHNlbGVjdCBpdCwgdGhlbiBzZWxlY3QgPGk+QWR2YW5jZWQNCgkJCQkJCVRyb3Vi bGVzaG9vdGluZyBPcHRpb25zPC9pPiAmIGNsaWNrIDxpPlNraXAgWmlwIEV4dHJhY3Rpb248L2k+Licg KTsNCgkJCQl9IGVsc2UgeyAvLyBGb3VuZCBvbmUgb3IgbW9yZSBiYWNrdXBzLg0KCQkJCQk/Pg0KCQkJ CQkJPGZvcm0gYWN0aW9uPSI/c3RlcD0yIiBtZXRob2Q9InBvc3QiPg0KCQkJCQkJCTxpbnB1dCB0eXBl PSJoaWRkZW4iIG5hbWU9Im9wdGlvbnMiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMo IHNlcmlhbGl6ZSggJHRoaXMtPl9vcHRpb25zICkgKTsgPz4nIiAvPg0KCQkJCQk8P3BocA0KCQkJCQll Y2hvIGV6aW1nOjpnZW5JbWFnZVRhZyggJ2J1bGxldF9nby5wbmcnICk7DQoJCQkJCWVjaG8gJyZuYnNw OzxzZWxlY3QgbmFtZT0iZmlsZSIgc3R5bGU9Im1heC13aWR0aDogNTkwcHg7Ij4nOw0KCQkJCQlmb3Jl YWNoKCAkYmFja3VwX2FyY2hpdmVzIGFzICRiYWNrdXBfYXJjaGl2ZSApIHsNCgkJCQkJCWVjaG8gJzxv cHRpb24gdmFsdWU9IicgLiAkYmFja3VwX2FyY2hpdmUgLiAnIj4nIC4gJGJhY2t1cF9hcmNoaXZlIC4g Jzwvb3B0aW9uPic7DQoJCQkJCX0NCgkJCQkJZWNobyAnPC9zZWxlY3Q+JzsNCgkJCQkJZWNobyAkdGhp

cy0+dGlwKCAnU2VsZWN0IHRoZSBiYWNrdXAgZmlsZSB5b3Ugd291bGQgbGlrZSB0byByZXN0b3JlIGRh dGEgZnJvbS4gVGhpcyBtdXN0IGJlIGEgdmFsaWQgQmFja3VwQnVkZHkgYmFja3VwIGFyY2hpdmUgd2l0 aCBpdHMgb3JpZ2luYWwgZmlsZW5hbWUuIFJlbWVtYmVyIHRvIGRlbGV0ZSBpbXBvcnRidWRkeS5waHAg YW5kIHRoaXMgYmFja3VwIGZpbGUgZnJvbSB5b3VyIHNlcnZlciBhZnRlciBtaWdyYXRpb24uJywgJycs IHRydWUgKTsNCgkJCQl9DQoJCQkJPz4NCgkJCTwvZGl2Pg0KCQk8L2Rpdj4NCgk8L2Rpdj4NCjwvZGl2 Pg0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMjBweDsgbWFyZ2luLXRvcDogMTJweDsiPg0KCTxz cGFuIGNsYXNzPSJ0b2dnbGUgYnV0dG9uLXNlY29uZGFyeSIgaWQ9InNlcnZlcmluZm8iPlNlcnZlciBJ bmZvcm1hdGlvbjwvc3Bhbj4gPHNwYW4gY2xhc3M9InRvZ2dsZSBidXR0b24tc2Vjb25kYXJ5IiBpZD0i YWR2YW5jZWQiPkFkdmFuY2VkIENvbmZpZ3VyYXRpb24gT3B0aW9uczwvc3Bhbj4NCgk8ZGl2IGlkPSJ0 b2dnbGUtYWR2YW5jZWQiIGNsYXNzPSJ0b2dnbGVkIiBzdHlsZT0ibWFyZ2luLXRvcDogMTJweDsiPg0K CQk8P3BocA0KCQkvLyR0aGlzLT5hbGVydCggJ1dBUk5JTkc6IFRoZXNlIGFyZSBhZHZhbmNlZCBjb25m aWd1cmF0aW9uIG9wdGlvbnMuJywgJ1VzZSBjYXV0aW9uIGFzIGltcHJvcGVyIHVzZSBjb3VsZCByZXN1 bHQgaW4gZGF0YSBsb3NzIG9yIG90aGVyIGRpZmZpY3VsdGllcy4nICk7DQoJCT8+DQoJCTxiPldBUk5J Tkc6PC9iPiBJbXByb3BlciB1c2Ugb2YgQWR2YW5jZWQgT3B0aW9ucyBjb3VsZCByZXN1bHQgaW4gZGF0 YSBsb3NzLjxicj4NCgkJJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TGVhdmUgYXMgaXMgdW5sZXNzIHlv dSB1bmRlcnN0YW5kIHdoYXQgdGhlc2Ugc2V0dGluZ3MgZG8uDQoJCTxicj48YnI+DQoJCTxpbnB1dCB0 eXBlPSJjaGVja2JveCIgbmFtZT0id2lwZV9kYXRhYmFzZSIgb25jbGljaz0iDQoJCQlpZiAoICFjb25m aXJtKCAnV0FSTklORyEgV0FSTklORyEgV0FSTklORyEgV0FSTklORyEgV0FSTklORyEgXG5cblRoaXMg d2lsbCBjbGVhciBhbnkgZXhpc3RpbmcgV29yZFByZXNzIGluc3RhbGxhdGlvbiBvciBvdGhlciBjb250 ZW50IGluIHRoaXMgZGF0YWJhc2UuIFRoaXMgY291bGQgcmVzdWx0IGluIGxvc3Mgb2YgcG9zdHMsIGNv bW1lbnRzLCBwYWdlcywgc2V0dGluZ3MsIGFuZCBvdGhlciBzb2Z0d2FyZSBkYXRhIGxvc3MuIFZlcmlm eSB5b3UgYXJlIHVzaW5nIHRoZSBleGFjdCBkYXRhYmFzZSBzZXR0aW5ncyB5b3Ugd2FudCB0byBiZSB1 c2luZy4gUGx1Z2luQnVkZHkgJiBhbGwgcmVsYXRlZCBwZXJzb25zIGhvbGQgbm8gcmVzcG9uc2liaWxp dHkgZm9yIGFueSBsb3NzIG9mIGRhdGEgY2F1c2VkIGJ5IHVzaW5nIHRoaXMgb3B0aW9uLiBcblxuIEFy ZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkbyB0aGlzIGFuZCBwb3RlbnRpYWxseSB3aXBlIGV4aXN0aW5n IGRhdGE/IFxuXG4gV0FSTklORyEgV0FSTklORyEgV0FSTklORyEgV0FSTklORyEgV0FSTklORyEnICkg KSB7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkiIC8+IFdpcGUgZGF0YWJhc2Ugb24gaW1wb3J0 LiBVc2Ugd2l0aCBjYXV0aW9uLiA8P3BocCAkdGhpcy0+dGlwKCAnV0FSTklORzogQ2hlY2tpbmcgdGhp cyBib3ggd2lsbCBoYXZlIHRoaXMgc2NyaXB0IGNsZWFyIEFMTCBleGlzdGluZyBkYXRhIGZyb20geW91 ciBkYXRhYmFzZSBwcmlvciB0byBpbXBvcnQsIGluY2x1ZGluZyBub24tV29yZFByZXNzIGRhdGEuIFRo aXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUgcmVzdG9yaW5nIG92ZXIgYW4gZXhpc3Rpbmcgc2l0ZSBvciBm b3IgcmVwYWlyZWQgYSBmYWlsZWQgbWlncmF0aW9uLiBVc2UgY2F1dGlvbiB3aGVuIHVzaW5nIHRoaXMg b3B0aW9uLicgKTsgPz48YnI+DQoJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iaWdub3JlX3Nx bF9lcnJvcnMiIC8+IElnbm9yZSBTUUwgZXJyb3JzICYgaGlkZSB0aGVtLiA8YnI+DQoJCTxpbnB1dCB0 eXBlPSJjaGVja2JveCIgbmFtZT0ic2tpcF9maWxlcyIgLz4gU2tpcCB6aXAgZmlsZSBleHRyYWN0aW9u LiA8P3BocCAkdGhpcy0+dGlwKCAnQ2hlY2tpbmcgdGhpcyBib3ggd2lsbCBwcmV2ZW50IGV4dHJhY3Rp b24vdW56aXBwaW5nIG9mIHRoZSBiYWNrdXAgWklQIGZpbGUuICBZb3Ugd2lsbCBuZWVkIHRvIG1hbnVh bGx5IGV4dHJhY3QgaXQgZWl0aGVyIG9uIHlvdXIgbG9jYWwgY29tcHV0ZXIgdGhlbiB1cGxvYWQgaXQg b3IgdXNlIGEgc2VydmVyLWJhc2VkIHRvb2wgc3VjaCBhcyBjUGFuZWwgdG8gZXh0cmFjdCBpdC4gVGhp cyBmZWF0dXJlIGlzIHVzZWZ1bCBpZiB0aGUgZXh0cmFjdGlvbiBzdGVwIGlzIHVuYWJsZSB0byBjb21w bGV0ZSBmb3Igc29tZSByZWFzb24uJyApOyA/Pjxicj4NCgkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBu YW1lPSJza2lwX2RhdGFiYXNlX2ltcG9ydCIgLz4gU2tpcCBpbXBvcnQgb2YgZGF0YWJhc2UuIDxicj4N CgkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJza2lwX2RhdGFiYXNlX21pZ3JhdGlvbiIgLz4g U2tpcCBtaWdyYXRpb24gb2YgZGF0YWJhc2UuIDxicj4NCgkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBu YW1lPSJza2lwX2h0YWNjZXNzIiAvPiBTa2lwIG1pZ3JhdGlvbiBvZiAuaHRhY2Nlc3MgZmlsZS4gPGJy Pg0KCQk8IS0tIFRPRE86IDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibWVyZ2VfZGF0YWJhc2Vz IiAvPiBJZ25vcmUgZXhpc3RpbmcgV29yZFByZXNzIGRhdGEgJiBtZXJnZSBkYXRhYmFzZS48P3BocCAk dGhpcy0+dGlwKCAnVGhpcyBtYXkgcmVzdWx0IGluIGRhdGEgY29uZmxpY3RzLCBsb3N0IGRhdGFiYXNl IGRhdGEsIG9yIGluY29tcGxldGUgcmVzdG9yZXMuJywgJ1dBUk5JTkcnICk7ID8+PC9hPjxicj4gLS0+ DQoJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZm9yY2VfY29tcGF0aWJpbGl0eV9tZWRpdW0i IC8+IEZvcmNlIG1lZGl1bSBzcGVlZCBjb21wYXRpYmlsaXR5IG1vZGUgKFppcEFyY2hpdmUpLiA8YnI+ DQoJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZm9yY2VfY29tcGF0aWJpbGl0eV9zbG93IiAv PiBGb3JjZSBzbG93IHNwZWVkIGNvbXBhdGliaWxpdHkgbW9kZSAoUENMWmlwKS4gPGJyPg0KCQk8P3Bo cCAvLzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZm9yY2VfaGlnaF9zZWN1cml0eSI+IEZvcmNl IGhpZ2ggc2VjdXJpdHkgb24gYSBub3JtYWwgc2VjdXJpdHkgYmFja3VwPGJyPiA/Pg0KCQk8aW5wdXQg dHlwZT0iY2hlY2tib3giIG5hbWU9InNob3dfcGhwX3dhcm5pbmdzIiAvPiBTaG93IGRldGFpbGVkIFBI UCB3YXJuaW5ncy4gPGJyPg0KCQk8YnI+DQoJCVBIUCBNYXhpbXVtIEV4ZWN1dGlvbiBUaW1lOiA8aW5w dXQgdHlwZT0idGV4dCIgbmFtZT0ibWF4X2V4ZWN1dGlvbl90aW1lIiB2YWx1ZT0iPD9waHAgZWNobyAk dGhpcy0+ZGV0ZWN0ZWRfbWF4X2V4ZWN1dGlvbl90aW1lOyA/PiIgc2l6ZT0iNSI+IHNlY29uZHMuIDw/ cGhwICR0aGlzLT50aXAoICdUaGUgbWF4aW11bSBhbGxvd2VkIFBIUCBydW50aW1lLiBJZiB5b3VyIGRh

dGFiYXNlIGltcG9ydCBzdGVwIGlzIHRpbWluZyBvdXQgdGhlbiBsb3dlcmluZyB0aGlzIHZhbHVlIHdp bGwgaW5zdHJ1Y3QgdGhlIHNjcmlwdCB0byBsaW1pdCBlYWNoIGBjaHVua2AgdG8gYWxsb3cgaXQgdG8g ZmluaXNoIHdpdGhpbiB0aGlzIHRpbWUgcGVyaW9kLicgKTsgPz4NCgkJPGJyPg0KCQlFcnJvciBMb2dn aW5nIHRvIGltcG9ydGJ1ZGR5LnR4dDogPHNlbGVjdCBuYW1lPSJsb2dfbGV2ZWwiPg0KCQkJPG9wdGlv biB2YWx1ZT0iMCI+Tm9uZTwvb3B0aW9uPg0KCQkJPG9wdGlvbiB2YWx1ZT0iMSIgc2VsZWN0ZWQ+RXJy b3JzIE9ubHkgKGRlZmF1bHQpPC9vcHRpb24+DQoJCQk8b3B0aW9uIHZhbHVlPSIyIj5FcnJvcnMgJiBX YXJuaW5nczwvb3B0aW9uPg0KCQkJPG9wdGlvbiB2YWx1ZT0iMyI+RXZlcnl0aGluZyAoZGVidWcgbW9k ZSk8L29wdGlvbj4NCgkJPC9zZWxlY3Q+IDw/cGhwICR0aGlzLT50aXAoICdFcnJvcnMgYW5kIG90aGVy IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHdyaXR0ZW4gdG8gaW1wb3J0YnVkZHkudHh0IGlu IHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBpbXBvcnRidWRkeS5waHAuICBUaGlzIGlzIHVzZWZ1bCBmb3Ig ZGVidWdnaW5nIGFueSBwcm9ibGVtcyBlbmNvdW50ZXJlZCBkdXJpbmcgaW1wb3J0LiAgU3VwcG9ydCBt YXkgcmVxdWVzdCB0aGlzIGZpbGUgdG8gYWlkIGluIHRyYWNraW5nIGRvd24gYW55IHByb2JsZW1zIG9y IGJ1Z3MuJyApOyA/Pg0KCTwvZGl2Pg0KCTw/cGhwDQoJZWNobyAnPGRpdiBpZD0idG9nZ2xlLXNlcnZl cmluZm8iIGNsYXNzPSJ0b2dnbGVkIiBzdHlsZT0ibWFyZ2luLXRvcDogMTJweDsiPic7DQoJcmVxdWly ZV9vbmNlKCAndmlld190b29scy1zZXJ2ZXIucGhwJyApOw0KCWVjaG8gJzwvZGl2Pic7DQoJPz4NCjwv ZGl2Pg0KPGJyPg0KPD9waHANCmVjaG8gJzxicj4nOw0KDQovLyBXYXJuIG9mIGV4aXN0aW5nIFdvcmRQ cmVzcyBpbnN0YWxsYXRpb24uIFBvdGVudGlhbCBjb25mbGljdC4NCiRhcGktPndvcmRwcmVzc19leGlz dHMoKTsNCmVjaG8gJzxicj4nOw0KDQovLyBJZiBvbmUgb3IgbW9yZSBiYWNrdXAgZmlsZXMgd2FzIGZv dW5kIHRoZW4gcHJvdmlkZSBhIGJ1dHRvbiB0byBjb250aW51ZS4NCmlmICggIWVtcHR5KCAkYmFja3Vw X2FyY2hpdmVzICkgKSB7DQoJZWNobyAnPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxpbnB1 dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9Ik5leHQgU3RlcCAmcmFxdW87IiBjbGFz cz0iYnV0dG9uIj48L3A+JzsNCn0gZWxzZSB7DQoJZWNobyAnPHA+PGk+VXBsb2FkIGEgYmFja3VwIGZp bGUgdG8gY29udGludWUuPC9pPjwvcD4nOw0KfQ0KZWNobyAnPC9mb3JtPic7DQo/Pg== ###PACKDATA,FILE_END,/importbuddy/classes/step_1_view.php,importbuddy/classes/st ep_1_view.php ###PACKDATA,FILE_START,/importbuddy/classes/step_2_api.php,importbuddy/classes/s tep_2_api.php PD9waHANCmNsYXNzIHBsdWdpbmJ1ZGR5X2ltcG9ydGJ1ZGR5X3N0ZXBfMiB7DQoJZnVuY3Rpb24gX19j b25zdHJ1Y3QoICYkcGFyZW50ICkgew0KCQkkdGhpcy0+X3BhcmVudCA9ICYkcGFyZW50Ow0KCX0NCgkN CgkNCgkvKioNCgkgKglwYXJzZV9vcHRpb25zKCkNCgkgKg0KCSAqCVBhcnNlcyB2YXJpb3VzIHN1Ym1p dHRlZCBvcHRpb25zIGFuZCBzZXR0aW5ncyBmcm9tIHN0ZXAgMS4NCgkgKg0KCSAqCUByZXR1cm4JCW51 bGwNCgkgKi8NCglmdW5jdGlvbiBwYXJzZV9vcHRpb25zKCkgew0KCQkvLyBTZXQgYWR2YW5jZWQgZGVi dWcgb3B0aW9ucyBpZiB1c2VyIHNldCBhbnkuDQoJCWlmICggKCBpc3NldCggJF9QT1NUWydza2lwX2Zp bGVzJ10gKSApICYmICggJF9QT1NUWydza2lwX2ZpbGVzJ10gPT0gJ29uJyApICkgeyAkdGhpcy0+X3Bh cmVudC0+X29wdGlvbnNbJ3NraXBfZmlsZXMnXSA9IHRydWU7IH0NCgkJaWYgKCAoIGlzc2V0KCAkX1BP U1RbJ3NraXBfZGF0YWJhc2VfaW1wb3J0J10gKSApICYmICggJF9QT1NUWydza2lwX2RhdGFiYXNlX2lt cG9ydCddID09ICdvbicgKSApIHsgJHRoaXMtPl9wYXJlbnQtPl9vcHRpb25zWydza2lwX2RhdGFiYXNl X2ltcG9ydCddID0gdHJ1ZTsgfQ0KCQlpZiAoICggaXNzZXQoICRfUE9TVFsnc2tpcF9kYXRhYmFzZV9t aWdyYXRpb24nXSApICkgJiYgKCAkX1BPU1RbJ3NraXBfZGF0YWJhc2VfbWlncmF0aW9uJ10gPT0gJ29u JyApICkgeyAkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ3NraXBfZGF0YWJhc2VfbWlncmF0aW9uJ10g PSB0cnVlOyB9DQoJCWlmICggKCBpc3NldCggJF9QT1NUWyd3aXBlX2RhdGFiYXNlJ10gKSApICYmICgg JF9QT1NUWyd3aXBlX2RhdGFiYXNlJ10gPT0gJ29uJyApICkgeyAkdGhpcy0+X3BhcmVudC0+X29wdGlv bnNbJ3dpcGVfZGF0YWJhc2UnXSA9IHRydWU7IH0NCgkJaWYgKCAoIGlzc2V0KCAkX1BPU1RbJ3NraXBf aHRhY2Nlc3MnXSApICkgJiYgKCAkX1BPU1RbJ3NraXBfaHRhY2Nlc3MnXSA9PSAnb24nICkgKSB7ICR0 aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snc2tpcF9odGFjY2VzcyddID0gdHJ1ZTsgfQ0KCQlpZiAoICgg aXNzZXQoICRfUE9TVFsnaWdub3JlX3NxbF9lcnJvcnMnXSApICkgJiYgKCAkX1BPU1RbJ2lnbm9yZV9z cWxfZXJyb3JzJ10gPT0gJ29uJyApICkgeyAkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ2lnbm9yZV9z cWxfZXJyb3JzJ10gPSB0cnVlOyB9DQoJCWlmICggKCBpc3NldCggJF9QT1NUWydmb3JjZV9jb21wYXRp YmlsaXR5X21lZGl1bSddICkgKSAmJiAoICRfUE9TVFsnZm9yY2VfY29tcGF0aWJpbGl0eV9tZWRpdW0n XSA9PSAnb24nICkgKSB7ICR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snZm9yY2VfY29tcGF0aWJpbGl0 eV9tZWRpdW0nXSA9IHRydWU7IH0NCgkJaWYgKCAoIGlzc2V0KCAkX1BPU1RbJ2ZvcmNlX2NvbXBhdGli aWxpdHlfc2xvdyddICkgKSAmJiAoICRfUE9TVFsnZm9yY2VfY29tcGF0aWJpbGl0eV9zbG93J10gPT0g J29uJyApICkgeyAkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ2ZvcmNlX2NvbXBhdGliaWxpdHlfc2xv dyddID0gdHJ1ZTsgfQ0KCQlpZiAoICggaXNzZXQoICRfUE9TVFsnZm9yY2VfaGlnaF9zZWN1cml0eSdd ICkgKSAmJiAoICRfUE9TVFsnZm9yY2VfaGlnaF9zZWN1cml0eSddID09ICdvbicgKSApIHsgJHRoaXMt Pl9wYXJlbnQtPl9vcHRpb25zWydmb3JjZV9oaWdoX3NlY3VyaXR5J10gPSB0cnVlOyB9DQoJCWlmICgg KCBpc3NldCggJF9QT1NUWydzaG93X3BocF93YXJuaW5ncyddICkgKSAmJiAoICRfUE9TVFsnc2hvd19w aHBfd2FybmluZ3MnXSA9PSAnb24nICkgKSB7ICR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snc2hvd19w aHBfd2FybmluZ3MnXSA9IHRydWU7IH0NCgkJaWYgKCAoIGlzc2V0KCAkX1BPU1RbJ2ZpbGUnXSApICkg JiYgKCAkX1BPU1RbJ2ZpbGUnXSAhPSAnJyApICkgeyAkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ2Zp

bGUnXSA9ICRfUE9TVFsnZmlsZSddOyB9DQoJCWlmICggKCBpc3NldCggJF9QT1NUWydtYXhfZXhlY3V0 aW9uX3RpbWUnXSApICkgJiYgKCBpc19udW1lcmljKCAkX1BPU1RbJ21heF9leGVjdXRpb25fdGltZSdd ICkgKSApIHsNCgkJCSR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snbWF4X2V4ZWN1dGlvbl90aW1lJ10g PSAkX1BPU1RbJ21heF9leGVjdXRpb25fdGltZSddOw0KCQl9IGVsc2Ugew0KCQkJJHRoaXMtPl9wYXJl bnQtPl9vcHRpb25zWydtYXhfZXhlY3V0aW9uX3RpbWUnXSA9IDMwOw0KCQl9DQoJCWlmICggKCBpc3Nl dCggJF9QT1NUWydsb2dfbGV2ZWwnXSApICkgJiYgKCAkX1BPU1RbJ2xvZ19sZXZlbCddICE9ICcnICkg KSB7ICR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snbG9nX2xldmVsJ10gPSAkX1BPU1RbJ2xvZ19sZXZl bCddOyB9DQoJCQ0KCQkvLyBTZXQgWklQIGlkIChha2Egc2VyaWFsKS4NCgkJJHRoaXMtPl9wYXJlbnQt Pl9vcHRpb25zWyd6aXBfaWQnXSA9ICR0aGlzLT5fcGFyZW50LT5nZXRfemlwX2lkKCAkdGhpcy0+X3Bh cmVudC0+X29wdGlvbnNbJ2ZpbGUnXSApOw0KCX0NCgkNCgkNCgkvKioNCgkgKglleHRyYWN0KCkNCgkg Kg0KCSAqCUV4dHJhY3QgYmFja3VwIHppcCBmaWxlLg0KCSAqDQoJICoJQHJldHVybgkJYXJyYXkJCVRy dWUgaWYgdGhlIGV4dHJhY3Rpb24gd2FzIGEgc3VjY2VzcyBPUiBza2lwcGluZyBvZiBleHRyYWN0aW9u IGlzIHNldC4NCgkgKi8NCglmdW5jdGlvbiBleHRyYWN0KCkgew0KCQlpZiAoIHRydWUgPT09ICR0aGlz LT5fcGFyZW50LT5fb3B0aW9uc1snc2tpcF9maWxlcyddICkgeyAvLyBPcHRpb24gdG8gc2tpcCBhbGwg ZmlsZSB1cGRhdGluZyAvIGV4dHJhY3RpbmcuDQoJCQkkdGhpcy0+X3BhcmVudC0+c3RhdHVzKCAnbWVz c2FnZScsICdTa2lwcGVkIGV4dHJhY3RpbmcgZmlsZXMgYmFzZWQgb24gZGVidWdnaW5nIG9wdGlvbnMu JyApOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0gZWxzZSB7DQoJCQkkdGhpcy0+X3BhcmVudC0+c2V0X2dy ZWVkeV9zY3JpcHRfbGltaXRzKCk7DQoJCQkNCgkJCSR0aGlzLT5fcGFyZW50LT5zdGF0dXMoICdtZXNz YWdlJywgJ1VuemlwcGluZyBpbnRvIGAnIC4gQUJTUEFUSCAuICdgJyApOw0KCQkJDQoJCQkkYmFja3Vw X2FyY2hpdmUgPSBBQlNQQVRIIC4gJHRoaXMtPl9wYXJlbnQtPl9vcHRpb25zWydmaWxlJ107DQoJCQkk ZGVzdGluYXRpb25fZGlyZWN0b3J5ID0gQUJTUEFUSDsNCgkJCQ0KCQkJLy8gU2V0IGNvbXBhdGliaWxp dHkgbW9kZSBpZiBkZWZpbmVkIGluIGFkdmFuY2VkIG9wdGlvbnMuDQoJCQkkY29tcGF0aWJpbGl0eV9t b2RlID0gZmFsc2U7IC8vIERlZmF1bHQgdG8gbm8gY29tcGF0aWJpbGl0eSBtb2RlLg0KCQkJaWYgKCAk dGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ2ZvcmNlX2NvbXBhdGliaWxpdHlfbWVkaXVtJ10gIT0gZmFs c2UgKSB7DQoJCQkJJGNvbXBhdGliaWxpdHlfbW9kZSA9ICd6aXBhcmNoaXZlJzsNCgkJCX0gZWxzZWlm ICggJHRoaXMtPl9wYXJlbnQtPl9vcHRpb25zWydmb3JjZV9jb21wYXRpYmlsaXR5X3Nsb3cnXSAhPSBm YWxzZSApIHsNCgkJCQkkY29tcGF0aWJpbGl0eV9tb2RlID0gJ3BjbHppcCc7DQoJCQl9DQoJCQkNCgkJ CS8vIFppcCAmIFVuemlwIGxpYnJhcnkgc2V0dXAuDQoJCQlyZXF1aXJlX29uY2UoIEFCU1BBVEggLiAn aW1wb3J0YnVkZHkvbGliL3ppcGJ1ZGR5L3ppcGJ1ZGR5LnBocCcgKTsNCgkJCSRfemlwYnVkZHkgPSBu ZXcgcGx1Z2luYnVkZHlfemlwYnVkZHkoIEFCU1BBVEgsICcnLCAndW56aXAnICk7DQoJCQkkX3ppcGJ1 ZGR5LT5zZXRfc3RhdHVzX2NhbGxiYWNrKCBhcnJheSggJiR0aGlzLT5fcGFyZW50LCAnc3RhdHVzJyAp ICk7DQoJCQkNCgkJCS8vIEV4dHJhY3QgemlwIGZpbGUgJiB2ZXJpZnkgaXQgd29ya2VkLg0KCQkJaWYg KCB0cnVlICE9PSAoICRyZXN1bHQgPSAkX3ppcGJ1ZGR5LT51bnppcCggJGJhY2t1cF9hcmNoaXZlLCAk ZGVzdGluYXRpb25fZGlyZWN0b3J5LCAkY29tcGF0aWJpbGl0eV9tb2RlICkgKSApIHsNCgkJCQkkdGhp cy0+X3BhcmVudC0+c3RhdHVzKCAnZXJyb3InLCAnRmFpbGVkIHVuemlwcGluZyBhcmNoaXZlLicgKTsN CgkJCQkkdGhpcy0+X3BhcmVudC0+YWxlcnQoICdGYWlsZWQgdW56aXBwaW5nIGFyY2hpdmUuJyApOw0K CQkJCXJldHVybiBmYWxzZTsNCgkJCX0gZWxzZSB7IC8vIFJlcG9ydGVkIHN1Y2Nlc3M7IHZlcmlmeSBl eHRyYWN0aW9uLg0KCQkJCSR0aGlzLT5fcGFyZW50LT5fYmFja3VwZGF0YV9maWxlID0gQUJTUEFUSCAu ICd3cC1jb250ZW50L3VwbG9hZHMvdGVtcF8nIC4gJHRoaXMtPl9wYXJlbnQtPl9vcHRpb25zWyd6aXBf aWQnXSAuICcvYmFja3VwYnVkZHlfZGF0LnBocCc7IC8vIEZ1bGwgYmFja3VwIGRhdCBmaWxlIGxvY2F0 aW9uDQoJCQkJJHRoaXMtPl9wYXJlbnQtPl9iYWNrdXBkYXRhX2ZpbGVfZGJvbmx5ID0gQUJTUEFUSCAu ICdiYWNrdXBidWRkeV9kYXQucGhwJzsgLy8gREIgb25seSBkYXQgZmlsZSBsb2NhdGlvbg0KCQkJCSR0 aGlzLT5fcGFyZW50LT5fYmFja3VwZGF0YV9maWxlX25ldyA9IEFCU1BBVEggLiAnd3AtY29udGVudC91 cGxvYWRzL2JhY2t1cGJ1ZGR5X3RlbXAvJyAuICR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snemlwX2lk J10gLiAnL2JhY2t1cGJ1ZGR5X2RhdC5waHAnOyAvLyBGdWxsIGJhY2t1cCBkYXQgZmlsZSBsb2NhdGlv bg0KCQkJCWlmICggIWZpbGVfZXhpc3RzKCAkdGhpcy0+X3BhcmVudC0+X2JhY2t1cGRhdGFfZmlsZSAp ICYmICFmaWxlX2V4aXN0cyggJHRoaXMtPl9wYXJlbnQtPl9iYWNrdXBkYXRhX2ZpbGVfZGJvbmx5ICkg JiYgIWZpbGVfZXhpc3RzKCAkdGhpcy0+X3BhcmVudC0+X2JhY2t1cGRhdGFfZmlsZV9uZXcgKSApIHsN CgkJCQkJJHRoaXMtPl9wYXJlbnQtPnN0YXR1cyggJ2Vycm9yJywgJ0Vycm9yICM5MDA0OiBLZXkgZmls ZXMgbWlzc2luZy4nLCAnVGhlIHVuemlwIHByb2Nlc3MgcmVwb3J0ZWQgc3VjY2VzcyBidXQgdGhlIGJh Y2t1cCBkYXRhIGZpbGUsIGJhY2t1cGJ1ZGR5X2RhdC5waHAgd2FzIG5vdCBmb3VuZCBpbiB0aGUgZXh0 cmFjdGVkIGZpbGVzLiBUaGUgdW56aXAgcHJvY2VzcyBlaXRoZXIgZmFpbGVkIChtb3N0IGxpa2VseSkg b3IgdGhlIHppcCBmaWxlIGlzIG5vdCBhIHByb3BlciBCYWNrdXBCdWRkeSBiYWNrdXAuJyApOw0KCQkJ CQkkdGhpcy0+X3BhcmVudC0+YWxlcnQoICdFcnJvcjogS2V5IGZpbGVzIG1pc3NpbmcuJywgJ1RoZSB1 bnppcCBwcm9jZXNzIHJlcG9ydGVkIHN1Y2Nlc3MgYnV0IHRoZSBiYWNrdXAgZGF0YSBmaWxlLCBiYWNr dXBidWRkeV9kYXQucGhwIHdhcyBub3QgZm91bmQgaW4gdGhlIGV4dHJhY3RlZCBmaWxlcy4gVGhlIHVu emlwIHByb2Nlc3MgZWl0aGVyIGZhaWxlZCAobW9zdCBsaWtlbHkpIG9yIHRoZSB6aXAgZmlsZSBpcyBu b3QgYSBwcm9wZXIgQmFja3VwQnVkZHkgYmFja3VwLicsICc5MDA0JyApOw0KCQkJCQlyZXR1cm4gZmFs c2U7DQoJCQkJfQ0KCQkJCSR0aGlzLT5fcGFyZW50LT5zdGF0dXMoICdkZXRhaWxzJywgJ1N1Y2Nlc3Mg ZXh0cmFjdGluZyBaaXAgRmlsZSAiJyAuIEFCU1BBVEggLiAkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNb

J2ZpbGUnXSAuICciIGludG8gIicgLiBBQlNQQVRIIC4gJyIuJyApOw0KCQkJCXJldHVybiB0cnVlOw0K CQkJfQ0KCQl9DQoJfQ0KDQoNCn0NCj8+ ###PACKDATA,FILE_END,/importbuddy/classes/step_2_api.php,importbuddy/classes/ste p_2_api.php ###PACKDATA,FILE_START,/importbuddy/classes/step_2_view.php,importbuddy/classes/ step_2_view.php PD9waHANCiRhcGktPnBhcnNlX29wdGlvbnMoKTsNCg0KZWNobyAkdGhpcy0+c3RhdHVzX2JveCggJ0V4 dHJhY3RpbmcgYmFja3VwIFpJUCBmaWxlIHdpdGggSW1wb3J0QnVkZHkgJyAuICR0aGlzLT5fdmVyc2lv biAuICcuLi4nICk7DQplY2hvICc8ZGl2IGlkPSJwYl9pbXBvcnRidWRkeV93b3JraW5nIj48aW1nIHNy Yz0iP2V6aW1nPXdvcmtpbmcuZ2lmIiB0aXRsZT0iV29ya2luZy4uLiBQbGVhc2Ugd2FpdCBhcyB0aGlz IG1heSB0YWtlIGEgbW9tZW50Li4uIj48L2Rpdj4nOw0KDQokcmVzdWx0cyA9ICRhcGktPmV4dHJhY3Qo KTsNCg0KZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmpRdWVyeSgiI3BiX2ltcG9y dGJ1ZGR5X3dvcmtpbmciKS5oaWRlKCk7PC9zY3JpcHQ+JzsNCg0KaWYgKCB0cnVlID09PSAkcmVzdWx0 cyApIHsgLy8gTW92ZSBvbiB0byBuZXh0IHN0ZXAuDQoJZWNobyAnPGJyPjxicj48Yj5GaWxlcyBzdWNj ZXNzZnVsbHkgZXh0cmFjdGVkLjwvYj4nOw0KCWVjaG8gJzxmb3JtIGFjdGlvbj0iP3N0ZXA9MyIgbWV0 aG9kPXBvc3Q+JzsNCgllY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvcHRpb25zIiB2YWx1 ZT0iJyAuIGh0bWxzcGVjaWFsY2hhcnMoIHNlcmlhbGl6ZSggJHRoaXMtPl9vcHRpb25zICkgKSAuICci IC8+JzsNCgllY2hvICc8YnI+PGJyPjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48aW5wdXQg dHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJOZXh0IFN0ZXAgJnJhcXVvOyIgY2xhc3M9 ImJ1dHRvbiIgLz48L3A+JzsNCgllY2hvICc8L2Zvcm0+JzsNCn0gZWxzZSB7DQoJJHRoaXMtPmFsZXJ0 KCAnRmlsZSBleHRyYWN0aW9uIHByb2Nlc3MgZGlkIG5vdCBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuJywg J1VuYWJsZSB0byBjb250aW51ZSB0byBuZXh0IHN0ZXAuIE1hbnVhbGx5IGV4dHJhY3QgdGhlIGJhY2t1 cCBaSVAgZmlsZSBhbmQgY2hvb3NlIHRvICJTa2lwIEZpbGUgRXh0cmFjdGlvbiIgZnJvbSB0aGUgYWR2 YW5jZWQgb3B0aW9ucyBvbiBTdGVwIDEuJywgJzkwMDUnICk7DQoJZWNobyAnPHAgc3R5bGU9InRleHQt YWxpZ246IGNlbnRlcjsiPjxhIGhyZWY9Imh0dHA6Ly9wbHVnaW5idWRkeS5jb20vdHV0b3JpYWxzL3Vu emlwLWJhY2t1cC16aXAtZmlsZS1pbi1jcGFuZWwvIj5DbGljayBoZXJlIGZvciBpbnN0cnVjdGlvbnMg b24gbWFudWFsIFpJUCBleHRyYWN0aW9uIGFzIGEgd29yay1hcm91bmQuPC9hPjwvcD4nOw0KfQ0KPz4= ###PACKDATA,FILE_END,/importbuddy/classes/step_2_view.php,importbuddy/classes/st ep_2_view.php ###PACKDATA,FILE_START,/importbuddy/classes/step_3_api.php,importbuddy/classes/s tep_3_api.php PD9waHANCmNsYXNzIHBsdWdpbmJ1ZGR5X2ltcG9ydGJ1ZGR5X3N0ZXBfMyB7DQoJDQoJDQoJZnVuY3Rp b24gX19jb25zdHJ1Y3QoICYkcGFyZW50ICkgew0KCQkkdGhpcy0+X3BhcmVudCA9ICYkcGFyZW50Ow0K CQkvLyBTZXQgdXAgYmFja3VwIGRhdGEgZnJvbSB0aGUgYmFja3VwYnVkZHlfZGF0LnBocC4NCgkJJHRo aXMtPl9wYXJlbnQtPmxvYWRfYmFja3VwX2RhdCgpOw0KCX0NCgkNCgkNCglmdW5jdGlvbiBnZXRfcHJl dmlvdXNfZGF0YWJhc2Vfc2V0dGluZ3MoKSB7DQoJCS8vIElmIGluIGhpZ2ggc2VjdXJpdHkgbW9kZSB0 aGVuIG5vIGd1ZXNzZXMgb3IgcHJldmlvdXMgdmFsdWVzIHdpbGwgYmUgZ2l2ZW4uDQoJCWlmICggKCAk dGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ2ZvcmNlX2hpZ2hfc2VjdXJpdHknXSAhPSBmYWxzZSApIHx8 ICggaXNzZXQoICR0aGlzLT5fcGFyZW50LT5fYmFja3VwZGF0YVsnaGlnaF9zZWN1cml0eSddICkgJiYg KCAkdGhpcy0+X3BhcmVudC0+X2JhY2t1cGRhdGFbJ2hpZ2hfc2VjdXJpdHknXSA9PT0gdHJ1ZSApICkg KSB7DQoJCQkkcmVzcG9uc2VbJ3NlcnZlciddID0gJyc7DQoJCQkkcmVzcG9uc2VbJ2RhdGFiYXNlJ10g PSAnJzsNCgkJCSRyZXNwb25zZVsndXNlciddID0gJyc7DQoJCQkkcmVzcG9uc2VbJ3Bhc3N3b3JkJ10g PSAnJzsNCgkJCSRyZXNwb25zZVsncHJlZml4J10gPSAnJzsNCgkJCXJldHVybiAkcmVzcG9uc2U7DQoJ CX0gZWxzZSB7IC8vIG5vcm1hbCBtb2RlLiBwcm92aWRlIHByZXZpb3VzIHZhbHVlcy4NCgkJCSRyZXNw b25zZVsnc2VydmVyJ10gPSAkdGhpcy0+X3BhcmVudC0+X2JhY2t1cGRhdGFbJ2RiX3NlcnZlciddOw0K CQkJJHJlc3BvbnNlWydkYXRhYmFzZSddID0gJHRoaXMtPl9wYXJlbnQtPl9iYWNrdXBkYXRhWydkYl9u YW1lJ107DQoJCQkkcmVzcG9uc2VbJ3VzZXInXSA9ICR0aGlzLT5fcGFyZW50LT5fYmFja3VwZGF0YVsn ZGJfdXNlciddOw0KCQkJJHJlc3BvbnNlWydwYXNzd29yZCddID0gJHRoaXMtPl9wYXJlbnQtPl9iYWNr dXBkYXRhWydkYl9wYXNzd29yZCddOw0KCQkJJHJlc3BvbnNlWydwcmVmaXgnXSA9ICR0aGlzLT5fcGFy ZW50LT5fYmFja3VwZGF0YVsnZGJfcHJlZml4J107DQoJCQlyZXR1cm4gJHJlc3BvbnNlOw0KCQl9DQoJ fQ0KCQ0KCQ0KCS8qKg0KCSAqCWdldF9kZWZhdWx0X3ZhbHVlcygpDQoJICoNCgkgKglQYXJzZXMgdmFy aW91cyBzdWJtaXR0ZWQgb3B0aW9ucyBhbmQgc2V0dGluZ3MgZnJvbSBzdGVwIDEuDQoJICoNCgkgKglA cmV0dXJuCQludWxsDQoJICovDQoJZnVuY3Rpb24gZ2V0X2RhdGFiYXNlX2RlZmF1bHRzKCkgew0KCQkv LyBEYXRhYmFzZSBkZWZhdWx0cy4NCgkJJHJlc3BvbnNlWydzZXJ2ZXInXSA9ICdsb2NhbGhvc3QnOw0K CQkkcmVzcG9uc2VbJ2RhdGFiYXNlJ10gPSAnJzsNCgkJJHJlc3BvbnNlWyd1c2VyJ10gPSAnJzsNCgkJ JHJlc3BvbnNlWydwYXNzd29yZCddID0gJyc7DQoJCSRyZXNwb25zZVsncHJlZml4J10gPSAnd3BfJzsN CgkJJHJlc3BvbnNlWyd3aXBlJ10gPSAkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ3dpcGVfZGF0YWJh c2UnXTsNCgkJDQoJCS8vIElmIGluIGhpZ2ggc2VjdXJpdHkgbW9kZSB0aGVuIG5vIGd1ZXNzZXMgb3Ig cHJldmlvdXMgdmFsdWVzIHdpbGwgYmUgZ2l2ZW4uDQoJCWlmICggaXNzZXQoICR0aGlzLT5fYmFja3Vw ZGF0YVsnaGlnaF9zZWN1cml0eSddICkgJiYgKCAkdGhpcy0+X2JhY2t1cGRhdGFbJ2hpZ2hfc2VjdXJp

dHknXSA9PT0gdHJ1ZSApICkgeyANCgkJCXJldHVybiAkcmVzcG9uc2U7DQoJCX0NCgkJDQoJCWlmICgg ZmFsc2UgIT09IEBteXNxbF9jb25uZWN0KCAkdGhpcy0+X3BhcmVudC0+X2JhY2t1cGRhdGFbJ2RiX3Nl cnZlciddLCAkdGhpcy0+X3BhcmVudC0+X2JhY2t1cGRhdGFbJ2RiX3VzZXInXSwgJHRoaXMtPl9wYXJl bnQtPl9iYWNrdXBkYXRhWydkYl9wYXNzd29yZCddICkgKSB7IC8vIENvdWxkbnQgY29ubmVjdCB0byBz ZXJ2ZXIgb3IgaW52YWxpZCBjcmVkZW50aWFscy4NCgkJCSRyZXNwb25zZVsnc2VydmVyJ10gPSAkdGhp cy0+X3BhcmVudC0+X2JhY2t1cGRhdGFbJ2RiX3NlcnZlciddOw0KCQkJJHJlc3BvbnNlWyd1c2VyJ10g PSAkdGhpcy0+X3BhcmVudC0+X2JhY2t1cGRhdGFbJ2RiX3VzZXInXTsNCgkJCSRyZXNwb25zZVsncGFz c3dvcmQnXSA9ICR0aGlzLT5fcGFyZW50LT5fYmFja3VwZGF0YVsnZGJfcGFzc3dvcmQnXTsNCgkJCQ0K CQkJaWYgKCBmYWxzZSAhPT0gQG15c3FsX3NlbGVjdF9kYiggJHRoaXMtPl9wYXJlbnQtPl9iYWNrdXBk YXRhWydkYl9uYW1lJ10gKSApIHsNCgkJCQkkcmVzcG9uc2VbJ2RhdGFiYXNlJ10gPSAkdGhpcy0+X3Bh cmVudC0+X2JhY2t1cGRhdGFbJ2RiX25hbWUnXTsNCgkJCQkNCgkJCQkkcmVzdWx0ID0gbXlzcWxfcXVl cnkoICJTSE9XIFRBQkxFUyBMSUtFICciIC4gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCAkdGhpcy0+ X3BhcmVudC0+X2JhY2t1cGRhdGFbJ2RiX3ByZWZpeCddICkgLiAiJSciICk7DQoJCQkJaWYgKCBteXNx bF9udW1fcm93cyggJHJlc3VsdCApID09IDAgKSB7DQoJCQkJCSRyZXNwb25zZVsncHJlZml4J10gPSAk dGhpcy0+X3BhcmVudC0+X2JhY2t1cGRhdGFbJ2RiX3ByZWZpeCddOw0KCQkJCX0NCgkJCX0NCgkJfQ0K CQkNCgkJcmV0dXJuICRyZXNwb25zZTsNCgl9DQoJDQoJDQoJLyoqDQoJICoJZ2V0X2RlZmF1bHRfdXJs KCkNCgkgKg0KCSAqCVJldHVybnMgdGhlIGRlZmF1bHQgc2l0ZSBVUkwuDQoJICoNCgkgKglAcmV0dXJu CQlzdHJpbmcJCVVSTC4NCgkgKi8NCglmdW5jdGlvbiBnZXRfZGVmYXVsdF91cmwoKSB7DQoJCS8vIEdl dCB0aGUgY3VycmVudCBVUkwgb2Ygd2hlcmUgdGhlIGltcG9ydGJ1ZGR5IHNjcmlwdCBpcyBydW5uaW5n Lg0KCQkkdXJsID0gc3RyX3JlcGxhY2UoICRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSwgJycsICRfU0VS VkVSWydSRVFVRVNUX1VSSSddICk7DQoJCSR1cmwgPSBzdHJfcmVwbGFjZSggYmFzZW5hbWUoICR1cmwg KSAsICcnLCAkdXJsICk7DQoJCSR1cmwgPSBwcmVnX3JlcGxhY2UoICd8LyokfCcsICcnLCAkdXJsICk7 ICAvLyBzdHJpcHMgdHJhaWxpbmcgc2xhc2goZXMpLg0KCQkkdXJsID0gJ2h0dHA6Ly8nIC4gJF9TRVJW RVJbJ0hUVFBfSE9TVCddIC4gJHVybDsNCgkJDQoJCXJldHVybiAkdXJsOw0KCX0NCgkNCgkNCglmdW5j dGlvbiBnZXRfZGVmYXVsdF9kb21haW4oKSB7DQoJCXByZWdfbWF0Y2goIi9eKGh0dHA6XC9cLyk/KFte XC9dKykvaSIsICR0aGlzLT5nZXRfZGVmYXVsdF91cmwoKSwgJGRvbWFpbiApOw0KCQlyZXR1cm4gJGRv bWFpblsyXTsNCgl9DQoJDQoJDQp9DQo/Pg== ###PACKDATA,FILE_END,/importbuddy/classes/step_3_api.php,importbuddy/classes/ste p_3_api.php ###PACKDATA,FILE_START,/importbuddy/classes/step_3_view.php,importbuddy/classes/ step_3_view.php PD9waHANCiRkYXRhYmFzZV9kZWZhdWx0cyA9ICRhcGktPmdldF9kYXRhYmFzZV9kZWZhdWx0cygpOw0K JGRhdGFiYXNlX3ByZXZpb3VzID0gJGFwaS0+Z2V0X3ByZXZpb3VzX2RhdGFiYXNlX3NldHRpbmdzKCk7 DQokZGVmYXVsdF91cmwgPSAkYXBpLT5nZXRfZGVmYXVsdF91cmwoKTsNCg0KJGN1c3RvbV9ob21lX3Rp cCA9ICdPUFRJT05BTC4gVGhpcyBpcyBhbHNvIGtub3duIGFzIHRoZSBzaXRlIGFkZHJlc3MuIFRoaXMg aXMgdGhlIGhvbWUgYWRkcmVzcw0KCXdoZXJlIHlvdXIgbWFpbiBzaXRlIHJlc2lkZXMuIFRoaXMgbWF5 IGRpZmZlciBmcm9tIHlvdXIgV29yZFByZXNzIFVSTC4gRXg6IGh0dHA6Ly9mb28uY29tJzsNCj8+DQoN Cjxmb3JtIGFjdGlvbj0iP3N0ZXA9NCIgbWV0aG9kPXBvc3Q+DQoJPGlucHV0IHR5cGU9ImhpZGRlbiIg bmFtZT0ib3B0aW9ucyIgaWQ9InBiX29wdGlvbnMiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFs Y2hhcnMoIHNlcmlhbGl6ZSggJHRoaXMtPl9vcHRpb25zICkgKTsgPz4iIC8+DQoJDQoJPGgzPlVSTCBT ZXR0aW5nczwvaDM+DQoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDIwcHg7Ij4NCgkJDQoJCTxsYWJl bD4NCgkJCVdvcmRQcmVzcyBBZGRyZXNzDQoJCQk8P3BocCAkdGhpcy0+dGlwKCAnVGhpcyBpcyB0aGUg YWRkcmVzcyB3aGVyZSB5b3Ugd2FudCB0aGUgZmluYWwgV29yZFByZXNzIHNpdGUgeW91IGFyZQ0KCQkJ CXJlc3RvcmluZyAvIG1pZ3JhdGluZyB0byByZXNpZGUuIEV4OiBodHRwOi8vZm9vLmNvbS93cCcsICcn LCB0cnVlICk7ID8+DQoJCQk8YnI+DQoJCQk8c3BhbiBjbGFzcz0ibGlnaHQiPihTaXRlIFVSTCk8L3Nw YW4+DQoJCTwvbGFiZWw+DQoJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzaXRldXJsIiB2YWx1ZT0i PD9waHAgZWNobyAkZGVmYXVsdF91cmw7ID8+IiBzaXplPSI1MCIgLz48YnI+DQoJCSZuYnNwOzxzcGFu IGNsYXNzPSJsaWdodCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDQwMHB4OyI+ cHJldmlvdXNseTogPD9waHAgZWNobyAkdGhpcy0+X2JhY2t1cGRhdGFbJ3NpdGV1cmwnXTsgPz48L3Nw YW4+DQoJCQ0KCQk8P3BocCBpZiAoIGlzc2V0KCAkdGhpcy0+X2JhY2t1cGRhdGFbJ2lzX211bHRpc2l0 ZSddICkgJiYgKCAoICR0aGlzLT5fYmFja3VwZGF0YVsnaXNfbXVsdGlzaXRlJ10gPT09IHRydWUgKSB8 fCAoICR0aGlzLT5fYmFja3VwZGF0YVsnaXNfbXVsdGlzaXRlJ10gPT0gJ3RydWUnICkgKSApIHsgLy8g bXVsdGlzaXRlID8+DQoJCQk8bGFiZWw+DQoJCQkJTXVsdGlTaXRlIERvbWFpbg0KCQkJCTw/cGhwICR0 aGlzLT50aXAoICdUaGlzIGlzIHRoZSBNdWx0aVNpdGUgbWFpbiBkb21haW4uIEV4OiBmb28uY29tJywg JycsIHRydWUgKTsgPz48YnI+DQoJCQkJJm5ic3A7DQoJCQk8L2xhYmVsPg0KCQkJPGlucHV0IHR5cGU9 InRleHQiIG5hbWU9ImRvbWFpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gJGFwaS0+Z2V0X2RlZmF1bHRfZG9t YWluKCk7ID8+IiBzaXplPSI1MCIgLz48YnI+DQoJCQkmbmJzcDs8c3BhbiBjbGFzcz0ibGlnaHQiIHN0 eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiA0MDBweDsiPnByZXZpb3VzbHk6IDw/cGhw IGVjaG8gJHRoaXMtPl9iYWNrdXBkYXRhWydkb21haW4nXTsgPz48L3NwYW4+DQoJCTw/cGhwIH0gZWxz ZSB7ID8+DQoJCQ0KCQk8bGFiZWwgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW4tbGVmdDogMTUwcHg7

Ij4NCgkJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY3VzdG9tX2hvbWUiIGNsYXNzPSJvcHRp b25fdG9nZ2xlIiB2YWx1ZT0ib24iIGlkPSJjdXN0b21faG9tZSI+DQoJCQlVc2Ugb3B0aW9uYWwgY3Vz dG9tIHNpdGUgYWRkcmVzcyAoSG9tZSBVUkwpDQoJCQk8P3BocCAkdGhpcy0+dGlwKCAkY3VzdG9tX2hv bWVfdGlwLCAnJywgdHJ1ZSApOyA/Pg0KCQk8L2xhYmVsPg0KCQk8YnI+PGJyPg0KCQkNCgkJPGRpdiBj bGFzcz0iY3VzdG9tX2hvbWVfdG9nZ2xlIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KCQkJPGxhYmVs Pg0KCQkJCVNpdGUgQWRkcmVzcw0KCQkJCTw/cGhwICR0aGlzLT50aXAoICRjdXN0b21faG9tZV90aXAs ICcnLCB0cnVlICk7ID8+DQoJCQkJPGJyPg0KCQkJCTxzcGFuIGNsYXNzPSJsaWdodCI+KEhvbWUgVVJM KTwvc3Bhbj4NCgkJCTwvbGFiZWw+DQoJCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9tZSIgdmFs dWU9Ijw/cGhwIGVjaG8gJGRlZmF1bHRfdXJsOyA/PiIgc2l6ZT0iNTAiIC8+CQkJPGJyPg0KCQkJJm5i c3A7PHNwYW4gY2xhc3M9ImxpZ2h0IiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDog NDAwcHg7Ij5wcmV2aW91c2x5OiA8P3BocCBlY2hvICR0aGlzLT5fYmFja3VwZGF0YVsnaG9tZXVybCdd OyA/Pjwvc3Bhbj4NCgkJPC9kaXY+DQoJCTxicj48YnI+DQoJCQ0KCQk8P3BocCB9IC8vIGVuZCBub24t bXVsdGlzaXRlID8+DQoJCQ0KCTwvZGl2Pg0KCQ0KCTxoMz5EYXRhYmFzZSBTZXR0aW5nczw/cGhwDQoJ CSR0aGlzLT50aXAoICdUaGVzZSBzZXR0aW5ncyBjb250cm9sIHdoZXJlIHlvdXIgYmFja2VkIHVwIGRh dGFiYXNlIHdpbGwgYmUgcmVzdG9yZWQgdG8uDQoJCUlmIHlvdSBhcmUgcmVzdG9yaW5nIHRvIHRoZSBz YW1lIHNlcnZlciwgdGhlIHNldHRpbmdzIGJlbG93IHdpbGwgaW1wb3J0IHRoZSBkYXRhYmFzZQ0KCQl0 byB5b3VyIGV4aXN0aW5nIFdvcmRQcmVzcyBkYXRhYmFzZSBsb2NhdGlvbiwgb3ZlcndyaXRpbmcgeW91 ciBleGlzdGluZyBXb3JkUHJlc3MgZGF0YWJhc2UNCgkJYWxyZWFkeSBvbiB0aGUgc2VydmVyLiAgSWYg eW91IGFyZSBtb3ZpbmcgdG8gYSBuZXcgaG9zdCB5b3Ugd2lsbCBuZWVkIHRvIGNyZWF0ZSBhIGRhdGFi YXNlDQoJCXRvIGltcG9ydCBpbnRvLiBUaGUgZGF0YWJhc2Ugc2V0dGluZ3MgTVVTVCBiZSB1bmlxdWUg Zm9yIGVhY2ggV29yZFByZXNzIGluc3RhbGxhdGlvbi4gIElmDQoJCXlvdSB1c2UgdGhlIHNhbWUgc2V0 dGluZ3MgZm9yIG11bHRpcGxlIFdvcmRQcmVzcyBpbnN0YWxsYXRpb25zIHRoZW4gYWxsIGJsb2cgY29u dGVudCBhbmQNCgkJc2V0dGluZ3Mgd2lsbCBiZSBzaGFyZWQsIGNhdXNpbmcgY29uZmxpY3RzIScsICcn LCB0cnVlICk7DQoJPz48L2gzPg0KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAyMHB4OyI+DQoJCQ0K CQk8aW1nIHNyYz0iP2V6aW1nPWJ1bGxldF9lcnJvci5wbmciIHN0eWxlPSJmbG9hdDogbGVmdDsiPg0K CQk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMjBweDsiPg0KCQkJRGF0YWJhc2Ugc2V0dGluZ3MgbXVz dCBiZSB1bmlxdWUgdG8gZWFjaCBXb3JkUHJlc3MgaW5zdGFsbGF0aW9uICh0aGV5IGNhbiBub3Qgc2hh cmUgaWRlbnRpY2FsIHNldHRpbmdzKS4NCgkJCUNyZWF0ZSBhIG5ldyBkYXRhYmFzZSBvciB1bmlxdWUg cHJlZml4IGZvciBlYWNoIFdvcmRQcmVzcyBpbnN0YWxsYXRpb24gb24gdGhpcyBzZXJ2ZXIuDQoJCTwv ZGl2Pg0KCQk8YnI+DQoJCQ0KCQk8bGFiZWw+DQoJCQlNeVNRTCBTZXJ2ZXINCgkJCTw/cGhwICR0aGlz LT50aXAoICdUaGlzIGlzIHRoZSBhZGRyZXNzIHRvIHRoZSBteVNRTCBzZXJ2ZXIgd2hlcmUgeW91ciBk YXRhYmFzZSB3aWxsIGJlIHN0b3JlZC4NCgkJCQkJOTklIG9mIHRoZSB0aW1lIHRoaXMgaXMgbG9jYWxo b3N0LiAgVGhlIGxvY2F0aW9uIG9mIHlvdXIgbXlTUUwgc2VydmVyIHdpbGwgYmUgcHJvdmlkZWQNCgkJ CQkJdG8geW91IGJ5IHlvdXIgaG9zdCBpZiBpdCBkaWZmZXJzLicsICcnLCB0cnVlICk7ID8+DQoJCTwv bGFiZWw+DQoJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYl9zZXJ2ZXIiIGlkPSJteXNxbF9zZXJ2 ZXIiIHZhbHVlPSI8P3BocCBlY2hvICRkYXRhYmFzZV9kZWZhdWx0c1snc2VydmVyJ107ID8+IiBzdHls ZT0id2lkdGg6IDE3NXB4OyIgLz4NCgkJPD9waHAgaWYgKCAkZGF0YWJhc2VfcHJldmlvdXNbJ3NlcnZl ciddICE9ICcnICkgeyBlY2hvICc8c3BhbiBjbGFzcz0ibGlnaHQiPnByZXZpb3VzbHk6ICcgLiAkZGF0 YWJhc2VfcHJldmlvdXNbJ3NlcnZlciddIC4gJzwvc3Bhbj4nOyB9ID8+DQoJCTxicj4NCgkJDQoJCTxs YWJlbD4NCgkJCURhdGFiYXNlIE5hbWUNCgkJCTw/cGhwICR0aGlzLT50aXAoICdUaGlzIGlzIHRoZSBu YW1lIG9mIHRoZSBkYXRhYmFzZSB5b3Ugd2FudCB0byBpbXBvcnQgeW91ciBibG9nIGludG8uIFRoZSBk YXRhYmFzZQ0KCQkJCXVzZXIgbXVzdCBoYXZlIHBlcm1pc3Npb25zIHRvIGJlIGFibGUgdG8gYWNjZXNz IHRoaXMgZGF0YWJhc2UuICBJZiB5b3UgYXJlIG1pZ3JhdGluZyB0aGlzIGJsb2cNCgkJCQl0byBhIG5l dyBob3N0IHlvdSB3aWxsIG5lZWQgdG8gY3JlYXRlIHRoaXMgZGF0YWJhc2UgKGllIHVzaW5nIENQYW5l bCBvciBwaHBteWFkbWluKSBhbmQgY3JlYXRlDQoJCQkJYSBteXNxbCBkYXRhYmFzZSB1c2VyIHdpdGgg cGVybWlzc2lvbnMuJywgJycsIHRydWUgKTsgPz4NCgkJPC9sYWJlbD4NCgkJPGlucHV0IHR5cGU9InRl eHQiIG5hbWU9ImRiX25hbWUiIGlkPSJteXNxbF9uYW1lIiB2YWx1ZT0iPD9waHAgZWNobyAkZGF0YWJh c2VfZGVmYXVsdHNbJ2RhdGFiYXNlJ107ID8+IiBzdHlsZT0id2lkdGg6IDE3NXB4OyIgLz4NCgkJPD9w aHAgaWYgKCAkZGF0YWJhc2VfcHJldmlvdXNbJ2RhdGFiYXNlJ10gIT0gJycgKSB7IGVjaG8gJzxzcGFu IGNsYXNzPSJsaWdodCI+cHJldmlvdXNseTogJyAuICRkYXRhYmFzZV9wcmV2aW91c1snZGF0YWJhc2Un XSAuICc8L3NwYW4+JzsgfSA/Pg0KCQk8YnI+DQoJCQ0KCQk8bGFiZWw+DQoJCQlEYXRhYmFzZSBVc2Vy DQoJCQk8P3BocCAkdGhpcy0+dGlwKCAnVGhpcyBpcyB0aGUgZGF0YWJhc2UgdXNlciBhY2NvdW50IHRo YXQgaGFzIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSBkYXRhYmFzZSBuYW1lDQoJCQkJaW4gdGhlIGlu cHV0IGFib3ZlLiAgVGhpcyB1c2VyIG11c3QgYmUgZ2l2ZW4gcGVybWlzc2lvbiB0byB0aGlzIGRhdGFi YXNlIGZvciB0aGUgaW1wb3J0IHRvIHdvcmsuJywgJycsIHRydWUgKTsgPz4NCgkJPC9sYWJlbD4NCgkJ PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRiX3VzZXIiIGlkPSJteXNxbF91c2VyIiB2YWx1ZT0iPD9w aHAgZWNobyAkZGF0YWJhc2VfZGVmYXVsdHNbJ3VzZXInXTsgPz4iIHN0eWxlPSJ3aWR0aDogMTc1cHg7 IiAvPg0KCQk8P3BocCBpZiAoICRkYXRhYmFzZV9wcmV2aW91c1sndXNlciddICE9ICcnICkgeyBlY2hv ICc8c3BhbiBjbGFzcz0ibGlnaHQiPnByZXZpb3VzbHk6ICcgLiAkZGF0YWJhc2VfcHJldmlvdXNbJ3Vz ZXInXSAuICc8L3NwYW4+JzsgfSA/Pg0KCQk8YnI+DQoJCQ0KCQk8bGFiZWw+DQoJCQlEYXRhYmFzZSBQ

YXNzDQoJCQk8P3BocCAkdGhpcy0+dGlwKCAnVGhpcyBpcyB0aGUgcGFzc3dvcmQgZm9yIHRoZSBkYXRh YmFzZSB1c2VyLicsICcnLCB0cnVlICk7ID8+DQoJCTwvbGFiZWw+DQoJCTxpbnB1dCB0eXBlPSJ0ZXh0 IiBuYW1lPSJkYl9wYXNzd29yZCIgaWQ9Im15c3FsX3Bhc3N3b3JkIiB2YWx1ZT0iPD9waHAgZWNobyAk ZGF0YWJhc2VfZGVmYXVsdHNbJ3Bhc3N3b3JkJ107ID8+IiBzdHlsZT0id2lkdGg6IDE3NXB4OyIgLz4N CgkJPD9waHAgaWYgKCAkZGF0YWJhc2VfcHJldmlvdXNbJ3Bhc3N3b3JkJ10gIT0gJycgKSB7IGVjaG8g JzxzcGFuIGNsYXNzPSJsaWdodCI+cHJldmlvdXNseTogJyAuICRkYXRhYmFzZV9wcmV2aW91c1sncGFz c3dvcmQnXSAuICc8L3NwYW4+JzsgfSA/Pg0KCQk8YnI+DQoJCQ0KCQk8bGFiZWw+DQoJCQlEYXRhYmFz ZSBQcmVmaXgNCgkJCTw/cGhwICR0aGlzLT50aXAoICdUaGlzIGlzIHRoZSBwcmVmaXggZ2l2ZW4gdG8g YWxsIHRhYmxlcyBpbiB0aGUgZGF0YWJhc2UuICBJZiB5b3UgYXJlIGNsb25pbmcgdGhlIHNpdGUNCgkJ CQlvbiB0aGUgc2FtZSBzZXJ2ZXIgQU5EIHRoZSBzYW1lIGRhdGFiYXNlIG5hbWUgdGhlbiB5b3Ugd2ls bCB3YW50IHRvIGNoYW5nZSB0aGlzIG9yIGVsc2UgdGhlIGltcG9ydGVkDQoJCQkJZGF0YWJhc2Ugd2ls bCBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIHRhYmxlcy4nLCAnJywgdHJ1ZSApOyA/Pg0KCQk8L2xhYmVs Pg0KCQk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGJfcHJlZml4IiBpZD0ibXlzcWxfcHJlZml4IiBp ZD0ibXlzcWxfcHJlZml4IiB2YWx1ZT0iPD9waHAgZWNobyAkZGF0YWJhc2VfZGVmYXVsdHNbJ3ByZWZp eCddOyA/PiIgc3R5bGU9IndpZHRoOiAxNzVweDsiIC8+DQoJCTw/cGhwIGlmICggJGRhdGFiYXNlX3By ZXZpb3VzWydwcmVmaXgnXSAhPSAnJyApIHsgZWNobyAnPHNwYW4gY2xhc3M9ImxpZ2h0Ij5wcmV2aW91 c2x5OiAnIC4gJGRhdGFiYXNlX3ByZXZpb3VzWydwcmVmaXgnXSAuICc8L3NwYW4+JzsgfSA/Pg0KCQk8 YnI+DQoJCQ0KCQk8ZGl2IHN0eWxlPSJmb250LXNpemU6IDlweDsgbWFyZ2luLWJvdHRvbTogN3B4OyI+ DQoJCQk8bGFiZWw+Jm5ic3A7PC9sYWJlbD4mbmJzcDsNCgkJCTxhIHRhcmdldD0iX25ldyIgaHJlZj0i aHR0cDovL3BsdWdpbmJ1ZGR5LmNvbS90dXRvcmlhbC1jcmVhdGUtZGF0YWJhc2UtaW4tY3BhbmVsLyI+ DQoJCQkJTmVlZCBoZWxwIGNyZWF0aW5nIGEgZGF0YWJhc2UgaW4gY1BhbmVsPyBTZWUgdGhpcyB0dXRv cmlhbC4NCgkJCTwvYT4NCgkJPC9kaXY+DQoJCQ0KCQk8bGFiZWw+Jm5ic3A7PC9sYWJlbD4NCgkJDQoJ CTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAyMHB4OyBtYXJnaW4tdG9wOiAxMnB4OyI+DQoJCQk8aW5w dXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ3aXBlX2RhdGFiYXNlIiBpZD0id2lwZV9kYXRhYmFzZSIgdmFs dWU9Ijw/cGhwIGVjaG8gJGRhdGFiYXNlX2RlZmF1bHRzWyd3aXBlJ107ID8+Ij4NCgkJCTxzcGFuIGNs YXNzPSJ0b2dnbGUgYnV0dG9uLXNlY29uZGFyeSIgaWQ9Iml0aGVtZXNfbXlzcWxfdGVzdCI+VGVzdCBk YXRhYmFzZSBzZXR0aW5ncy4uLjwvc3Bhbj4NCgkJCTw/cGhwDQoJCQkvKg0KCQkJPHNwYW4gY2xhc3M9 InRvZ2dsZSBidXR0b24tc2Vjb25kYXJ5IiBpZD0iYWR2YW5jZWQiPkFkdmFuY2VkIENvbmZpZ3VyYXRp b24gT3B0aW9uczwvc3Bhbj4NCgkJCTxkaXYgaWQ9InRvZ2dsZS1hZHZhbmNlZCIgY2xhc3M9InRvZ2ds ZWQiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMnB4OyBtYXJnaW4tbGVmdDogMTM1cHg7Ij4NCgkJCQk8P3Bo cA0KCQkJCS8vJHRoaXMtPmFsZXJ0KCAnV0FSTklORzogVGhlc2UgYXJlIGFkdmFuY2VkIGNvbmZpZ3Vy YXRpb24gb3B0aW9ucy4nLCAnVXNlIGNhdXRpb24gYXMgaW1wcm9wZXIgdXNlIGNvdWxkIHJlc3VsdCBp biBkYXRhIGxvc3Mgb3Igb3RoZXIgZGlmZmljdWx0aWVzLicgKTsNCgkJCQk/Pg0KCQkJCTxiPldBUk5J Tkc6PC9iPiBJbXByb3BlciB1c2Ugb2YgQWR2YW5jZWQgT3B0aW9ucyBjb3VsZCByZXN1bHQgaW4gZGF0 YSBsb3NzLg0KCQkJCTxicj48YnI+DQoJCQkJDQoJCQkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1l PSJ3aXBlX2RhdGFiYXNlIiBvbmNsaWNrPSINCgkJCQkJaWYgKCAhY29uZmlybSggJ1dBUk5JTkchIFdB Uk5JTkchIFdBUk5JTkchIFdBUk5JTkchIFdBUk5JTkchIFxuXG5UaGlzIHdpbGwgY2xlYXIgYW55IGV4 aXN0aW5nIFdvcmRQcmVzcyBpbnN0YWxsYXRpb24gb3Igb3RoZXIgY29udGVudCBpbiB0aGlzIGRhdGFi YXNlLiBUaGlzIGNvdWxkIHJlc3VsdCBpbiBsb3NzIG9mIHBvc3RzLCBjb21tZW50cywgcGFnZXMsIHNl dHRpbmdzLCBhbmQgb3RoZXIgc29mdHdhcmUgZGF0YSBsb3NzLiBWZXJpZnkgeW91IGFyZSB1c2luZyB0 aGUgZXhhY3QgZGF0YWJhc2Ugc2V0dGluZ3MgeW91IHdhbnQgdG8gYmUgdXNpbmcuIFBsdWdpbkJ1ZGR5 ICYgYWxsIHJlbGF0ZWQgcGVyc29ucyBob2xkIG5vIHJlc3BvbnNpYmlsaXR5IGZvciBhbnkgbG9zcyBv ZiBkYXRhIGNhdXNlZCBieSB1c2luZyB0aGlzIG9wdGlvbi4gXG5cbiBBcmUgeW91IHN1cmUgeW91IHdh bnQgdG8gZG8gdGhpcyBhbmQgcG90ZW50aWFsbHkgd2lwZSBleGlzdGluZyBkYXRhPyBcblxuIFdBUk5J TkchIFdBUk5JTkchIFdBUk5JTkchIFdBUk5JTkchIFdBUk5JTkchJyApICkgew0KCQkJCQkJcmV0dXJu IGZhbHNlOw0KCQkJCQl9DQoJCQkJIiA8P3BocCBpZiAoICR0aGlzLT5fb3B0aW9uc1snd2lwZV9kYXRh YmFzZSddID09ICcxJyApIGVjaG8gJ2NoZWNrZWQnOyA/Pj4gV2lwZSBkYXRhYmFzZSBvbiBpbXBvcnQu IFVzZSB3aXRoIGNhdXRpb24uIDw/cGhwICR0aGlzLT50aXAoICdXQVJOSU5HOiBDaGVja2luZyB0aGlz IGJveCB3aWxsIGhhdmUgdGhpcyBzY3JpcHQgY2xlYXIgQUxMIGV4aXN0aW5nIGRhdGEgZnJvbSB5b3Vy IGRhdGFiYXNlIHByaW9yIHRvIGltcG9ydCwgaW5jbHVkaW5nIG5vbi1Xb3JkUHJlc3MgZGF0YS4gVGhp cyBpcyB1c2VmdWwgaWYgeW91IGFyZSByZXN0b3Jpbmcgb3ZlciBhbiBleGlzdGluZyBzaXRlIG9yIGZv ciByZXBhaXJlZCBhIGZhaWxlZCBtaWdyYXRpb24uIFVzZSBjYXV0aW9uIHdoZW4gdXNpbmcgdGhpcyBv cHRpb24uJyApOyA/Pjxicj4NCgkJCQk8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNraXBfZGF0 YWJhc2VfaW1wb3J0IiA8P3BocCBpZiAoICR0aGlzLT5fb3B0aW9uc1snc2tpcF9kYXRhYmFzZV9pbXBv cnQnXSA9PSAnMScgKSBlY2hvICdjaGVja2VkJzsgPz4+IFNraXAgaW1wb3J0IG9mIGRhdGFiYXNlLiA8 YnI+DQoJCQkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJza2lwX2RhdGFiYXNlX21pZ3JhdGlv biIgPD9waHAgaWYgKCAkdGhpcy0+X29wdGlvbnNbJ3NraXBfZGF0YWJhc2VfbWlncmF0aW9uJ10gPT0g JzEnICkgZWNobyAnY2hlY2tlZCc7ID8+PiBTa2lwIG1pZ3JhdGlvbiBvZiBkYXRhYmFzZS4gPGJyPg0K CQkJCTxicj4NCgkJCQk8Yj5BZnRlciBpbXBvcnRpbmcsIHNraXAgZGF0YSBtaWdyYXRpb24gb24gdGhl c2UgdGFibGVzOjwvYj48P3BocCAkdGhpcy0+dGlwKCAnRGF0YWJhc2UgdGFibGVzIHRvIGV4Y2x1ZGUg

ZnJvbSBtaWdyYXRpb24uIFRoZXNlIHRhYmxlcyB3aWxsIHN0aWxsIGJlIGltcG9ydGVkIGludG8gdGhl IGRhdGFiYXNlIGJ1dCBVUkxzIGFuZCBwYXRocyB3aWxsIG5vdCBiZSBtb2RpZmllZC4gVGhpcyBpcyB1 c2VmdWwgaWYgdGhlIG1pZ3JhdGlvbiBpcyB0aW1pbmcgb3V0LicgKTsgPz48YnI+PHRleHRhcmVhIG5h bWU9ImV4Y2x1ZGVfdGFibGVzIiBzdHlsZT0id2lkdGg6IDMwMHB4OyBoZWlnaHQ6IDc1cHg7Ij48L3Rl eHRhcmVhPg0KCQkJPC9kaXY+DQoJCQkqLw0KCQkJPz4NCgkJCTxkaXYgc3R5bGU9ImRpc3BsYXk6IG5v bmU7IGJhY2tncm91bmQtY29sb3I6ICNGMUVERUQ7IC1tb3otYm9yZGVyLXJhZGl1czo0cHggNHB4IDRw eCA0cHg7IGJvcmRlcjoxcHggc29saWQgI0RGREZERjsgbWFyZ2luOjEwcHg7IHBhZGRpbmc6M3B4OyBt YXJnaW4tbGVmdDogMTM1cHg7IiBpZD0iaXRoZW1lc19sb2FkaW5nIj4NCgkJCQk8P3BocCBlY2hvIGV6 aW1nOjpnZW5JbWFnZVRhZyggJ2xvYWRpbmcuZ2lmJyApIC4gJyBMb2FkaW5nIC4uLic7ID8+DQoJCQk8 L2Rpdj4NCgkJPC9kaXY+DQoJCQ0KCQk8P3BocCBpZiAoICggJHRoaXMtPl9vcHRpb25zWydmb3JjZV9o aWdoX3NlY3VyaXR5J10gIT0gZmFsc2UgKSB8fCAoIGlzc2V0KCAkdGhpcy0+X2JhY2t1cGRhdGFbJ2hp Z2hfc2VjdXJpdHknXSApICYmICggJHRoaXMtPl9iYWNrdXBkYXRhWydoaWdoX3NlY3VyaXR5J10gPT09 IHRydWUgKSApICkgeyA/Pg0KCQkJPGxhYmVsPiZuYnNwOzwvbGFiZWw+PGJyPg0KCQkJPGgzPkNyZWF0 ZSBBZG1pbmlzdHJhdG9yIEFjY291bnQgPD9waHAgJHRoaXMtPnRpcCggJ1lvdXIgYmFja3VwIHdhcyBj cmVhdGVkIGVpdGhlciB3aXRoIEhpZ2ggU2VjdXJpdHkgTW9kZSBlbmFibGVkIG9yIGZyb20gYSBXb3Jk UHJlc3MgTXVsdGlzaXRlIGluc3RhbGxhdGlvbi4gRm9yIHNlY3VyaXR5IHlvdXIgbXVzdCBwcm92aWRl IGEgV29yZFByZXNzIHVzZXJuYW1lIGFuZCBwYXNzd29yZCB0byBncmFudCBhZG1pbmlzdHJhdG9yIHBy aXZpbGVnZXMgdG8uJywgJycsIHRydWUgKTsgPz48L2gzPg0KCQkJPGxhYmVsPg0KCQkJCU5ldyBhZG1p biB1c2VybmFtZQ0KCQkJPC9sYWJlbD4NCgkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJhZG1pbl91 c2VyIiBpZD0iYWRtaW5fdXNlciIgdmFsdWU9IiIgc3R5bGU9IndpZHRoOiAxNzVweDsiIC8+DQoJCQk8 c3BhbiBjbGFzcz0ibGlnaHQiPihpZiB1c2VyIGV4aXN0cywgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbik8 L3NwYW4+DQoJCQk8YnI+DQoJCQk8bGFiZWw+DQoJCQkJUGFzc3dvcmQNCgkJCTwvbGFiZWw+DQoJCQk8 aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWRtaW5fcGFzcyIgaWQ9ImFkbWluX3Bhc3MiIHZhbHVlPSIi IHN0eWxlPSJ3aWR0aDogMTc1cHg7IiAvPg0KCQkJPGJyPg0KCQk8P3BocCB9IC8vIGVuZCBoaWdoIHNl Y3VyaXR5LiA/Pg0KCQkNCgkJDQoJPC9kaXY+PGJyPg0KCQ0KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5h bWU9ImZpbGUiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxlbnRpdGllcyggJHRoaXMtPl9vcHRpb25zWydm aWxlJ10gKTsgPz4iIC8+DQoJPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxpbnB1dCB0eXBl PSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9Ik5leHQgU3RlcCAmcmFxdW87IiBjbGFzcz0iYnV0 dG9uIiAvPjwvcD4NCjwvZm9ybT4= ###PACKDATA,FILE_END,/importbuddy/classes/step_3_view.php,importbuddy/classes/st ep_3_view.php ###PACKDATA,FILE_START,/importbuddy/classes/step_4_api.php,importbuddy/classes/s tep_4_api.php PD9waHANCmNsYXNzIHBsdWdpbmJ1ZGR5X2ltcG9ydGJ1ZGR5X3N0ZXBfNCB7DQoJZnVuY3Rpb24gX19j b25zdHJ1Y3QoICYkcGFyZW50ICkgew0KCQkkdGhpcy0+X3BhcmVudCA9ICYkcGFyZW50Ow0KCQkNCgkJ JHRoaXMtPnBhcnNlX29wdGlvbnMoKTsNCgkJLy8gU2V0IHVwIGJhY2t1cCBkYXRhIGZyb20gdGhlIGJh Y2t1cGJ1ZGR5X2RhdC5waHAuDQoJCSR0aGlzLT5fcGFyZW50LT5sb2FkX2JhY2t1cF9kYXQoKTsNCgl9 DQoJDQoJDQoJLyoqDQoJICoJcGFyc2Vfb3B0aW9ucygpDQoJICoNCgkgKglQYXJzZXMgdmFyaW91cyBz dWJtaXR0ZWQgb3B0aW9ucyBhbmQgc2V0dGluZ3MgZnJvbSBzdGVwIDEuDQoJICoNCgkgKglAcmV0dXJu CQludWxsDQoJICovDQoJZnVuY3Rpb24gcGFyc2Vfb3B0aW9ucygpIHsNCgkJaWYgKCBpc3NldCggJF9Q T1NUWydzaXRldXJsJ10gKSApIHsgJHRoaXMtPl9wYXJlbnQtPl9vcHRpb25zWydzaXRldXJsJ10gPSAk X1BPU1RbJ3NpdGV1cmwnXTsgfQ0KCQlpZiAoIGlzc2V0KCAkX1BPU1RbJ2N1c3RvbV9ob21lJ10gKSAp IHsNCgkJCSR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snaG9tZSddID0gJF9QT1NUWydob21lJ107DQoJ CX0gZWxzZSB7DQoJCQkkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ2hvbWUnXSA9ICRfUE9TVFsnc2l0 ZXVybCddOw0KCQl9DQoJCQ0KCQkvLyBNdWx0aXNpdGUgZG9tYWluLg0KCQlpZiAoIGlzc2V0KCAkX1BP U1RbJ2RvbWFpbiddICkgKSB7ICR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snZG9tYWluJ10gPSAkX1BP U1RbJ2RvbWFpbiddOyB9DQoJCQ0KCQlpZiAoIGlzc2V0KCAkX1BPU1RbJ2RiX3NlcnZlciddICkgKSB7 ICR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snZGJfc2VydmVyJ10gPSAkX1BPU1RbJ2RiX3NlcnZlcidd OyB9DQoJCWlmICggaXNzZXQoICRfUE9TVFsnZGJfdXNlciddICkgKSB7ICR0aGlzLT5fcGFyZW50LT5f b3B0aW9uc1snZGJfdXNlciddID0gJF9QT1NUWydkYl91c2VyJ107IH0NCgkJaWYgKCBpc3NldCggJF9Q T1NUWydkYl9wYXNzd29yZCddICkgKSB7ICR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snZGJfcGFzc3dv cmQnXSA9ICRfUE9TVFsnZGJfcGFzc3dvcmQnXTsgfQ0KCQlpZiAoIGlzc2V0KCAkX1BPU1RbJ2RiX25h bWUnXSApICkgeyAkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ2RiX25hbWUnXSA9ICRfUE9TVFsnZGJf bmFtZSddOyB9DQoJCWlmICggaXNzZXQoICRfUE9TVFsnZGJfcHJlZml4J10gKSApIHsgJHRoaXMtPl9w YXJlbnQtPl9vcHRpb25zWydkYl9wcmVmaXgnXSA9ICRfUE9TVFsnZGJfcHJlZml4J107IH0NCgl9DQoJ DQoJDQoJLyoqDQoJICoJaW1wb3J0X2RhdGFiYXNlKCkNCgkgKg0KCSAqCVBhcnNlcyB2YXJpb3VzIHN1 Ym1pdHRlZCBvcHRpb25zIGFuZCBzZXR0aW5ncyBmcm9tIHN0ZXAgMS4NCgkgKg0KCSAqCUByZXR1cm4J CWFycmF5CQlhcnJheSggaW1wb3J0X3N1Y2Nlc3MsIGltcG9ydF9jb21wbGV0ZSApLg0KCSAqCQkJCQkJ CWltcG9ydF9zdWNjZXNzOiBmYWxzZSBpZiB1bmFibGUgdG8gaW1wb3J0IGludG8gZGF0YWJhc2UsIHRy dWUgaWYgaW1wb3J0IGlzIHdvcmtpbmcgdGh1cyBmYXIvY29tcGxldGVkLg0KCSAqCQkJCQkJCWltcG9y

dF9jb21wbGV0ZTogSWYgaW5jb21wbGV0ZSwgYW4gaW50ZWdlciBvZiB0aGUgbmV4dCBxdWVyeSB0byBi ZWdpbiBvbi4gSWYgY29tcGxldGUsIHRydWUuIEZhbHNlIGlmIGltcG9ydF9zdWNjZXNzID0gZmFsc2Uu DQoJICovDQoJZnVuY3Rpb24gaW1wb3J0X2RhdGFiYXNlKCkgew0KCQkkdGhpcy0+X3BhcmVudC0+c2V0 X2dyZWVkeV9zY3JpcHRfbGltaXRzKCk7DQoJCQ0KCQkkdGhpcy0+X3BhcmVudC0+c3RhdHVzKCAnbWVz c2FnZScsICdWZXJpZnlpbmcgZGF0YWJhc2UgY29ubmVjdGlvbiBhbmQgc2V0dGluZ3MuLi4nICk7DQoJ CWlmICggJHRoaXMtPl9wYXJlbnQtPmNvbm5lY3RfZGF0YWJhc2UoKSA9PT0gZmFsc2UgKSB7DQoJCQkk dGhpcy0+X3BhcmVudC0+YWxlcnQoICdFUlJPUjogVW5hYmxlIHRvIHNlbGVjdCB5b3VyIHNwZWNpZmll ZCBkYXRhYmFzZS4gVmVyaWZ5IHRoZSBkYXRhYmFzZSBuYW1lIGFuZCB0aGF0IHlvdSBoYXZlIHNldCB1 cCBwcm9wZXIgcGVybWlzc2lvbnMgZm9yIHlvdXIgc3BlY2lmaWVkIHVzZXJuYW1lIHRvIGFjY2VzcyBp dC4gRGV0YWlsczogJyAuIG15c3FsX2Vycm9yKCksIHRydWUsICc5MDA3JyApOw0KCQkJcmV0dXJuKCBh cnJheSggZmFsc2UsIGZhbHNlICkgKTsNCgkJfSBlbHNlIHsNCgkJCSR0aGlzLT5fcGFyZW50LT5taWdy YXRlX2h0YWNjZXNzKCk7DQoJCQkkdGhpcy0+X3BhcmVudC0+c3RhdHVzKCAnbWVzc2FnZScsICdEYXRh YmFzZSBjb25uZWN0aW9uIGFuZCBzZXR0aW5ncyB2ZXJpZmllZC4nICk7DQoJCQkvLyBJbXBvcnQgZGF0 YWJhc2UgdW5sZXNzIGRpc2FibGVkLg0KCQkJJGRiX2NvbnRpbnVlID0gZmFsc2U7DQoJCQlpZiAoIGZh bHNlID09PSAkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ3NraXBfZGF0YWJhc2VfaW1wb3J0J10gKSB7 DQoJCQkJLy8gV2lwZSBkYXRhYmFzZSBpZiBvcHRpb24gd2FzIHNlbGVjdGVkLg0KCQkJCWlmICggJHRo aXMtPl9wYXJlbnQtPl9vcHRpb25zWyd3aXBlX2RhdGFiYXNlJ10gPT0gdHJ1ZSApIHsNCgkJCQkJaWYg KCBpc3NldCggJF9QT1NUWydkYl9jb250aW51ZSddICkgJiYgKCBpc19udW1lcmljKCAkX1BPU1RbJ2Ri X2NvbnRpbnVlJ10gKSApICkgew0KCQkJCQkJLy8gZG8gbm90aGluZw0KCQkJCQl9IGVsc2UgeyAvLyBk b250IHdpcGUgb24gc3Vic3RlcHMgb2YgZGIgaW1wb3J0Lg0KCQkJCQkJJHRoaXMtPl9wYXJlbnQtPnN0 YXR1cyggJ21lc3NhZ2UnLCAnV2lwaW5nIGV4aXN0aW5nIGRhdGFiYXNlIGJhc2VkIG9uIHNldHRpbmdz Li4uJyApOw0KCQkJCQkJJGZhaWxlZCA9ICEkdGhpcy0+X3BhcmVudC0+d2lwZV9kYXRhYmFzZSgpOw0K CQkJCQkJaWYgKCBmYWxzZSAhPT0gJGZhaWxlZCApIHsNCgkJCQkJCQkkdGhpcy0+X3BhcmVudC0+bWVz c2FnZSggJ2Vycm9yJywgJ1VuYWJsZSB0byB3aXBlIGRhdGFiYXNlIGFzIGNvbmZpZ3VyZWQgaW4gdGhl IHNldHRpbmdzLicgKTsNCgkJCQkJCQkkdGhpcy0+X3BhcmVudC0+YWxlcnQoICdFcnJvcicsICdVbmFi bGUgdG8gd2lwZSBkYXRhYmFzZSBhcyBjb25maWd1cmVkIGluIHRoZSBzZXR0aW5ncy4nICk7DQoJCQkJ CQl9DQoJCQkJCX0NCgkJCQl9DQoJCQkJDQoJCQkJLy8gU2FuaXRpemUgZGIgY29udGludWF0aW9uIHZh bHVlIGlmIG5lZWRlZC4NCgkJCQlpZiAoIGlzc2V0KCAkX1BPU1RbJ2RiX2NvbnRpbnVlJ10gKSAmJiAo IGlzX251bWVyaWMoICRfUE9TVFsnZGJfY29udGludWUnXSApICkgKSB7DQoJCQkJCS8vIGRvIG5vdGhp bmcNCgkJCQl9IGVsc2Ugew0KCQkJCQkkX1BPU1RbJ2RiX2NvbnRpbnVlJ10gPSAwOw0KCQkJCX0NCgkJ CQkkaW1wb3J0X3Jlc3VsdCA9ICR0aGlzLT5fcGFyZW50LT5yZXN0b3JlX2RhdGFiYXNlKCAkX1BPU1Rb J2RiX2NvbnRpbnVlJ10gKTsNCgkJCQlpZiAoIHRydWUgPT09ICRpbXBvcnRfcmVzdWx0ICkgeyAvLyBG dWxseSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuDQoJCQkJCXJldHVybiggYXJyYXkoIHRydWUsIHRydWUg KSApOw0KCQkJCX0gZWxzZWlmICggZmFsc2UgPT09ICRpbXBvcnRfcmVzdWx0ICkgeyAvLyBGdWxsIGZh aWx1cmUuDQoJCQkJCXJldHVybiggYXJyYXkoIGZhbHNlLCBmYWxzZSApICk7DQoJCQkJfSBlbHNlIHsg Ly8gTmVlZHMgdG8gY2h1bmsgdXAgREIgaW1wb3J0IGFuZCBjb250aW51ZS4uLg0KCQkJCQkvLyRkYl9j b250aW51ZSA9IHRydWU7DQoJCQkJCS8vIENvbnRpbnVlIG9uIHF1ZXJ5ICRpbXBvcnRfcmVzdWx0Li4u DQoJCQkJCSR0aGlzLT5fcGFyZW50LT5zdGF0dXMoICdtZXNzYWdlJywgJ05leHQgc3RlcCB3aWxsIGJl Z2luIGltcG9ydCBvbiBxdWVyeSAnIC4gJGltcG9ydF9yZXN1bHQgLiAnLicgKTsNCgkJCQkJcmV0dXJu IGFycmF5KCB0cnVlLCAkaW1wb3J0X3Jlc3VsdCApOw0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJJHRo aXMtPl9wYXJlbnQtPnN0YXR1cyggJ21lc3NhZ2UnLCAnU2tpcHBpbmcgZGF0YWJhc2UgcmVzdG9yZSBi YXNlZCBvbiBzZXR0aW5ncy4nICk7DQoJCQkJcmV0dXJuIGFycmF5KCB0cnVlLCB0cnVlICk7DQoJCQl9 DQoJCX0NCgl9DQoNCg0KfQ0KPz4= ###PACKDATA,FILE_END,/importbuddy/classes/step_4_api.php,importbuddy/classes/ste p_4_api.php ###PACKDATA,FILE_START,/importbuddy/classes/step_4_view.php,importbuddy/classes/ step_4_view.php PD9waHANCiRmYWlsZWQgPSBmYWxzZTsNCg0KZWNobyAkdGhpcy0+c3RhdHVzX2JveCggJ0ltcG9ydGlu ZyBkYXRhYmFzZSBjb250ZW50IHdpdGggSW1wb3J0QnVkZHkgJyAuICR0aGlzLT5fdmVyc2lvbiAuICcu Li4nICk7DQplY2hvICc8ZGl2IGlkPSJwYl9pbXBvcnRidWRkeV93b3JraW5nIj48aW1nIHNyYz0iP2V6 aW1nPXdvcmtpbmcuZ2lmIiB0aXRsZT0iV29ya2luZy4uLiBQbGVhc2Ugd2FpdCBhcyB0aGlzIG1heSB0 YWtlIGEgbW9tZW50Li4uIj48L2Rpdj4nOw0KDQokaW1wb3J0X3Jlc3VsdCA9ICRhcGktPmltcG9ydF9k YXRhYmFzZSgpOw0KDQplY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+alF1ZXJ5KCIj cGJfaW1wb3J0YnVkZHlfd29ya2luZyIpLmhpZGUoKTs8L3NjcmlwdD4nOw0KDQppZiAoICRpbXBvcnRf cmVzdWx0WzBdID09IHRydWUgKSB7DQoJZWNobyAnPGJyPjxicj4nOw0KCWlmICggJGltcG9ydF9yZXN1 bHRbMV0gIT09IHRydWUgKSB7IC8vIGlmIG5vdCBmaW5pc2hlZC4NCgkJJHRoaXMtPmFsZXJ0KCAnRGF0 YWJhc2UgdG9vIGxhcmdlIHRvIGltcG9ydCBpbiBvbmUgc3RlcC4nLCAnWW91ciBkYXRhYmFzZSB3YXMg dG9vIGxhcmdlIHRvIGltcG9ydCBpbiBvbmUgc3RlcCBhbmQgd2lsbCBiZSBpbXBvcnRlZCBpbiBjaHVu a3MuIFBsZWFzZSBjb250aW51ZSB0aGUgcHJvY2VzcyB1bnRpbCB0aGlzIHN0ZXAgaXMgZmluaXNoZWQu IFRoaXMgbWF5IHRha2UgYSBmZXcgc3RlcHMgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHlvdXIgZGF0

YWJhc2UgYW5kIHNlcnZlciBzcGVlZC4nICk7DQoJCWVjaG8gJzxicj4nOw0KCQllY2hvICdQbGVhc2Ug a2VlcCBjb250aW51aW5nIHVudGlsIHlvdXIgZGF0YWJhc2UgaGFzIGZ1bGx5IGltcG9ydGVkLiBUaGlz IG1heSB0YWtlIGEgZmV3IHN0ZXBzLic7DQoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iP3N0ZXA9NCIgbWV0 aG9kPXBvc3Q+JzsNCgkJZWNobyAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZGJfY29udGludWUi IHZhbHVlPSInIC4gJGltcG9ydF9yZXN1bHRbMV0gLiAnIj4nOw0KCQllY2hvICc8aW5wdXQgdHlwZT0i aGlkZGVuIiBuYW1lPSJvcHRpb25zIiB2YWx1ZT0iJyAuIGh0bWxzcGVjaWFsY2hhcnMoIHNlcmlhbGl6 ZSggJHRoaXMtPl9vcHRpb25zICkgKSAuICciIC8+JzsNCgkJZWNobyAnPGJyPjxicj48cCBzdHlsZT0i dGV4dC1hbGlnbjogY2VudGVyOyI+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiBjbGFz cz0iYnV0dG9uIiB2YWx1ZT0iQ29udGludWUgRGF0YWJhc2UgSW1wb3J0ICZyYXF1byIgLz48L3A+JzsN CgkJZWNobyAnPC9mb3JtPic7DQoJfSBlbHNlIHsNCgkJZWNobyAnPGI+SW5pdGlhbCBkYXRhYmFzZSBp bXBvcnQgY29tcGxldGUhPC9iPjxicj48YnI+JzsNCgkJZWNobyAnTmV4dCB0aGUgZGF0YSBpbiB0aGUg ZGF0YWJhc2Ugd2lsbCBiZSBtaWdyYXRlZCB0byBhY2NvdW50IGZvciBhbnkgZmlsZSBwYXRoIG9yIFVS TCBjaGFuZ2VzLic7DQoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iP3N0ZXA9NSIgbWV0aG9kPXBvc3Q+JzsN CgkJZWNobyAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib3B0aW9ucyIgdmFsdWU9IicgLiBodG1s c3BlY2lhbGNoYXJzKCBzZXJpYWxpemUoICR0aGlzLT5fb3B0aW9ucyApICkgLiAnIiAvPic7DQoJCWVj aG8gJzxicj48YnI+PHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxpbnB1dCB0eXBlPSJzdWJt aXQiIG5hbWU9InN1Ym1pdCIgY2xhc3M9ImJ1dHRvbiIgdmFsdWU9Ik5leHQgU3RlcCAmcmFxdW8iIC8+ PC9wPic7DQoJCWVjaG8gJzwvZm9ybT4nOw0KCX0NCn0gZWxzZSB7DQoJZWNobyAnPGJyPjxiPkRhdGFi YXNlIGltcG9ydCBmYWlsZWQuIFBsZWFzZSB1c2UgeW91ciBiYWNrIGJ1dHRvbiB0byBjb3JyZWN0IGFu eSBlcnJvcnMuPC9iPic7DQp9DQo/Pg== ###PACKDATA,FILE_END,/importbuddy/classes/step_4_view.php,importbuddy/classes/st ep_4_view.php ###PACKDATA,FILE_START,/importbuddy/classes/step_5_api.php,importbuddy/classes/s tep_5_api.php PD9waHANCmNsYXNzIHBsdWdpbmJ1ZGR5X2ltcG9ydGJ1ZGR5X3N0ZXBfNSBleHRlbmRzIHBsdWdpbmJ1 ZGR5X2ltcG9ydGJ1ZGR5IHsNCglmdW5jdGlvbiBfX2NvbnN0cnVjdCggJiRwYXJlbnQgKSB7DQoJCSR0 aGlzLT5fcGFyZW50ID0gJiRwYXJlbnQ7DQoJCS8vIFNldCB1cCBiYWNrdXAgZGF0YSBmcm9tIHRoZSBi YWNrdXBidWRkeV9kYXQucGhwLg0KCQkkdGhpcy0+X3BhcmVudC0+bG9hZF9iYWNrdXBfZGF0KCk7DQoJ fQ0KCQ0KCQ0KCS8qKg0KCSAqCW1pZ3JhdGVfZGF0YWJhc2UoKQ0KCSAqDQoJICoJQ29ubmVjdHMgZGF0 YWJhc2UgYW5kIHBlcmZvcm1zIG1pZ3JhdGlvbiBvZiBEQiBjb250ZW50LiBIYW5kbGVzIHNraXBwaW5n Lg0KCSAqDQoJICoJQHJldHVybgkJbnVsbA0KCSAqLw0KCWZ1bmN0aW9uIG1pZ3JhdGVfZGF0YWJhc2Uo KSB7DQoJCSR0aGlzLT5fcGFyZW50LT5jb25uZWN0X2RhdGFiYXNlKCk7DQoJCQ0KCQlpZiAoIGZhbHNl ID09PSAkdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ3NraXBfZGF0YWJhc2VfbWlncmF0aW9uJ10gKSB7 DQoJCQlyZXR1cm4gJHRoaXMtPl9wYXJlbnQtPm1pZ3JhdGVfZGF0YWJhc2UoKTsNCgkJfSBlbHNlIHsN CgkJCSR0aGlzLT5fcGFyZW50LT5zdGF0dXMoICdtZXNzYWdlJywgJ1NraXBwaW5nIGRhdGFiYXNlIG1p Z3JhdGlvbiBiYXNlZCBvbiBzZXR0aW5ncy4nICk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCX0NCgkN CgkNCgkvKioNCgkgKgltaWdyYXRlX3dwX2NvbmZpZygpDQoJICoNCgkgKglQYXNzdGhyb3VnaCBmb3Ig c3V0dXJlIHVzZTsgdHJ5aW5nIHRvIGZ1bm5lbCBhbGwgZXNzZW50aWFsIG1pZ3JhdGlvbiBzdGVwcyB0 aHJvdWdoIHRoZSBBUEkgZmlsZXMuDQoJICoNCgkgKglAcmV0dXJuCQludWxsDQoJICovDQoJZnVuY3Rp b24gbWlncmF0ZV93cF9jb25maWcoKSB7DQoJCXJldHVybiAkdGhpcy0+X3BhcmVudC0+bWlncmF0ZV93 cF9jb25maWcoKTsNCgl9DQoJDQoJDQp9DQo/Pg== ###PACKDATA,FILE_END,/importbuddy/classes/step_5_api.php,importbuddy/classes/ste p_5_api.php ###PACKDATA,FILE_START,/importbuddy/classes/step_5_view.php,importbuddy/classes/ step_5_view.php PD9waHANCiR0aGlzLT5zZXRfZ3JlZWR5X3NjcmlwdF9saW1pdHMoKTsNCg0KDQoNCg0KZWNobyAkdGhp cy0+c3RhdHVzX2JveCggJ01pZ3JhdGluZyBkYXRhYmFzZSBjb250ZW50IHdpdGggSW1wb3J0QnVkZHkg JyAuICR0aGlzLT5fdmVyc2lvbiAuICcuLi4nICk7DQplY2hvICc8ZGl2IGlkPSJwYl9pbXBvcnRidWRk eV93b3JraW5nIj48aW1nIHNyYz0iP2V6aW1nPXdvcmtpbmcuZ2lmIiB0aXRsZT0iV29ya2luZy4uLiBQ bGVhc2Ugd2FpdCBhcyB0aGlzIG1heSB0YWtlIGEgbW9tZW50Li4uIj48L2Rpdj4nOw0KDQokcmVzdWx0 ID0gJGFwaS0+bWlncmF0ZV9kYXRhYmFzZSgpOw0KDQplY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2 YXNjcmlwdCI+alF1ZXJ5KCIjcGJfaW1wb3J0YnVkZHlfd29ya2luZyIpLmhpZGUoKTs8L3NjcmlwdD4n Ow0KDQppZiAoIHRydWUgPT09ICRyZXN1bHQgKSB7DQoJaWYgKCB0cnVlID09PSAkYXBpLT5taWdyYXRl X3dwX2NvbmZpZygpICkgew0KCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdJbXBvcnQgY29tcGxl dGUhJyApOw0KCQllY2hvICc8YnI+PGJyPjxiPkltcG9ydCBjb21wbGV0ZSBmb3IgdGhlIHNpdGU6IDwv Yj48YSBocmVmPSInIC4gJHRoaXMtPl9vcHRpb25zWydzaXRldXJsJ10gLiAnIiB0YXJnZXQ9Il9uZXci PicgLiAkdGhpcy0+X29wdGlvbnNbJ3NpdGV1cmwnXSAuICc8L2E+PGJyPjxicj4nOw0KCQllY2hvICc8 aW1nIHNyYz0iP2V6aW1nPWJ1bGxldF9lcnJvci5wbmciIHN0eWxlPSJmbG9hdDogbGVmdDsiPjxkaXYg c3R5bGU9Im1hcmdpbi1sZWZ0OiAyMHB4OyI+VmVyaWZ5IHNpdGUgZnVuY3Rpb25hbGl0eSB0aGVuIGRl bGV0ZSB0aGUgYmFja3VwIFpJUCBmaWxlIGFuZCBpbXBvcnRidWRkeS5waHAgZnJvbSB5b3VyIHNpdGUg

cm9vdCAodGhlIG5leHQgc3RlcCB3aWxsIGF0dGVtcHQgdG8gZG8gdGhpcyBmb3IgeW91KS4gTGVhdmlu ZyB0aGVzZSBmaWxlcyBpcyBhIHNlY3VyaXR5IHJpc2suIExlYXZpbmcgdGhlIHppcCBmaWxlIGFuZCB0 aGVuIHN1YnNlcXVlbnRseSBydW5uaW5nIGEgQmFja3VwQnVkZHkgYmFja3VwIHdpbGwgcmVzdWx0IGlu IGV4Y2Vzc2l2ZWx5IGxhcmdlIGJhY2t1cHMgYXMgdGhpcyB6aXAgZmlsZSB3aWxsIGJlIGluY2x1ZGVk LjwvZGl2Pic7DQoJCQ0KCQllY2hvICc8Zm9ybSBhY3Rpb249Ij9zdGVwPTYiIG1ldGhvZD1wb3N0Pic7 DQoJCWVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9wdGlvbnMiIHZhbHVlPSInIC4gaHRt bHNwZWNpYWxjaGFycyggc2VyaWFsaXplKCAkdGhpcy0+X29wdGlvbnMgKSApIC4gJyIgLz4nOw0KCQk/ Pg0KCQkNCgkJPGJyPg0KCQk8aDM+TGFzdCBzdGVwOiBGaWxlIENsZWFudXA8L2gzPg0KCQk8dGFibGU+ PHRyPjx0ZD4NCgkJCTxsYWJlbCBmb3I9ImRlbGV0ZV9iYWNrdXAiIHN0eWxlPSJ3aWR0aDogYXV0bzsg Zm9udC1zaXplOiAxMnB4OyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkZWxldGVfYmFja3Vw IiBpZD0iZGVsZXRlX2JhY2t1cCIgdmFsdWU9IjEiIGNoZWNrZWQ+IERlbGV0ZSBiYWNrdXAgemlwIGFy Y2hpdmU8L2xhYmVsPg0KCQkJPGJyPgkJDQoJCQk8bGFiZWwgZm9yPSJkZWxldGVfdGVtcCIgc3R5bGU9 IndpZHRoOiBhdXRvOyBmb250LXNpemU6IDEycHg7Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9 ImRlbGV0ZV90ZW1wIiBpZD0iZGVsZXRlX3RlbXAiIHZhbHVlPSIxIiBjaGVja2VkPiBEZWxldGUgdGVt cG9yYXJ5IGltcG9ydCBmaWxlczwvbGFiZWw+DQoJCTwvdGQ+PHRkPg0KCQkJPGxhYmVsIGZvcj0iZGVs ZXRlX2ltcG9ydGJ1ZGR5IiBzdHlsZT0id2lkdGg6IGF1dG87IGZvbnQtc2l6ZTogMTJweDsiPjxpbnB1 dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZGVsZXRlX2ltcG9ydGJ1ZGR5IiBpZD0iZGVsZXRlX2ltcG9y dGJ1ZGR5IiB2YWx1ZT0iMSIgY2hlY2tlZD4gRGVsZXRlIGltcG9ydGJ1ZGR5LnBocCBzY3JpcHQ8L2xh YmVsPg0KCQkJPGJyPg0KCQkJPGxhYmVsIGZvcj0iZGVsZXRlX2ltcG9ydGJ1ZGR5bG9nIiBzdHlsZT0i d2lkdGg6IGF1dG87IGZvbnQtc2l6ZTogMTJweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0i ZGVsZXRlX2ltcG9ydGJ1ZGR5bG9nIiBpZD0iZGVsZXRlX2ltcG9ydGJ1ZGR5bG9nIiB2YWx1ZT0iMSIg Y2hlY2tlZD4gRGVsZXRlIGltcG9ydGJ1ZGR5LnR4dCBsb2cgZmlsZTwvbGFiZWw+DQoJCTwvdGQ+PC90 cj48L3RhYmxlPg0KCQkNCgkJPD9waHANCgkJZWNobyAnPGJyPjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBj ZW50ZXI7Ij48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIGNsYXNzPSJidXR0b24iIHZh bHVlPSJDbGVhbiB1cCAmIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgJnJhcXVvIiAvPjwvcD4nOw0KCQll Y2hvICc8L2Zvcm0+JzsNCgl9IGVsc2Ugew0KCQkkdGhpcy0+YWxlcnQoICdFcnJvcjogVW5hYmxlIHRv IHVwZGF0ZSB3cC1jb25maWcucGhwIGZpbGUuJywgJ1ZlcmlmeSB3cml0ZSBwZXJtaXNzaW9ucyBmb3Ig dGhlIHdwLWNvbmZpZy5waHAgZmlsZSB0aGVuIHJlZnJlc2ggdGhpcyBwYWdlLicgKTsNCgl9DQp9IGVs c2Ugew0KCSR0aGlzLT5hbGVydCggJ0Vycm9yOiBVbmFibGUgdG8gbWlncmF0ZSBkYXRhYmFzZSBjb250 ZW50LicsICdTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBkYXRhYmFzZSBtaWdyYXRpb24gcG9y dGlvbiBvZiB0aGUgcmVzdG9yZSBwcm9jZXNzLicgKTsNCn0NCj8+ ###PACKDATA,FILE_END,/importbuddy/classes/step_5_view.php,importbuddy/classes/st ep_5_view.php ###PACKDATA,FILE_START,/importbuddy/classes/step_6_api.php,importbuddy/classes/s tep_6_api.php PD9waHANCmNsYXNzIHBsdWdpbmJ1ZGR5X2ltcG9ydGJ1ZGR5X3N0ZXBfNiB7DQoJZnVuY3Rpb24gX19j b25zdHJ1Y3QoICYkcGFyZW50ICkgew0KCQkkdGhpcy0+X3BhcmVudCA9ICYkcGFyZW50Ow0KCX0NCgkN CgkNCglmdW5jdGlvbiBjbGVhbnVwKCkgew0KCQlpZiAoIGlzc2V0KCAkX1BPU1RbJ2RlbGV0ZV9iYWNr dXAnXSApICYmICggJF9QT1NUWydkZWxldGVfYmFja3VwJ10gPT0gJzEnICkgKSB7DQoJCQkkdGhpcy0+ X3BhcmVudC0+cmVtb3ZlX2ZpbGUoICR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snZmlsZSddLCAnYmFj a3VwIC5aSVAgZmlsZSAoJyAuICR0aGlzLT5fcGFyZW50LT5fb3B0aW9uc1snZmlsZSddIC4gJyknLCB0 cnVlICk7DQoJCX0NCgkJDQoJCWlmICggaXNzZXQoICRfUE9TVFsnZGVsZXRlX3RlbXAnXSApICYmICgg JF9QT1NUWydkZWxldGVfdGVtcCddID09ICcxJyApICkgew0KCQkJLy8gRnVsbCBiYWNrdXAgLnNxbCBm aWxlDQoJCQkkdGhpcy0+X3BhcmVudC0+cmVtb3ZlX2ZpbGUoIEFCU1BBVEggLiAnd3AtY29udGVudC91 cGxvYWRzL3RlbXBfJy4kdGhpcy0+X3BhcmVudC0+X29wdGlvbnNbJ3ppcF9pZCddLicvZGIuc3FsJywg J2RiLnNxbCAoYmFja3VwIGRhdGFiYXNlIGR1bXApJywgZmFsc2UgKTsNCgkJCSR0aGlzLT5fcGFyZW50 LT5yZW1vdmVfZmlsZSggQUJTUEFUSCAuICd3cC1jb250ZW50L3VwbG9hZHMvdGVtcF8nLiR0aGlzLT5f cGFyZW50LT5fb3B0aW9uc1snemlwX2lkJ10uJy9kYl8xLnNxbCcsICdkYl8xLnNxbCAoYmFja3VwIGRh dGFiYXNlIGR1bXApJywgZmFsc2UgKTsNCgkJCSR0aGlzLT5fcGFyZW50LT5yZW1vdmVfZmlsZSggQUJT UEFUSCAuICd3cC1jb250ZW50L3VwbG9hZHMvYmFja3VwYnVkZHlfdGVtcC8nLiR0aGlzLT5fcGFyZW50 LT5fb3B0aW9uc1snemlwX2lkJ10uJy9kYl8xLnNxbCcsICdkYl8xLnNxbCAoYmFja3VwIGRhdGFiYXNl IGR1bXApJywgZmFsc2UgKTsNCgkJCS8vIERCIG9ubHkgc3FsIGZpbGUNCgkJCSR0aGlzLT5fcGFyZW50 LT5yZW1vdmVfZmlsZSggQUJTUEFUSCAuICdkYi5zcWwnLCAnZGIuc3FsIChiYWNrdXAgZGF0YWJhc2Ug ZHVtcCknLCBmYWxzZSApOw0KCQkJJHRoaXMtPl9wYXJlbnQtPnJlbW92ZV9maWxlKCBBQlNQQVRIIC4g J2RiXzEuc3FsJywgJ2RiXzEuc3FsIChiYWNrdXAgZGF0YWJhc2UgZHVtcCknLCBmYWxzZSApOw0KCQkJ DQoJCQkvLyBGdWxsIGJhY2t1cCBkYXQgZmlsZQ0KCQkJJHRoaXMtPl9wYXJlbnQtPnJlbW92ZV9maWxl KCBBQlNQQVRIIC4gJ3dwLWNvbnRlbnQvdXBsb2Fkcy90ZW1wXycgLiAkdGhpcy0+X3BhcmVudC0+X29w dGlvbnNbJ3ppcF9pZCddIC4gJy9iYWNrdXBidWRkeV9kYXQucGhwJywgJ2JhY2t1cGJ1ZGR5X2RhdC5w aHAgKGJhY2t1cCBkYXRhIGZpbGUpJywgZmFsc2UgKTsNCgkJCSR0aGlzLT5fcGFyZW50LT5yZW1vdmVf ZmlsZSggQUJTUEFUSCAuICd3cC1jb250ZW50L3VwbG9hZHMvYmFja3VwYnVkZHlfdGVtcC8nIC4gJHRo

aXMtPl9wYXJlbnQtPl9vcHRpb25zWyd6aXBfaWQnXSAuICcvYmFja3VwYnVkZHlfZGF0LnBocCcsICdi YWNrdXBidWRkeV9kYXQucGhwIChiYWNrdXAgZGF0YSBmaWxlKScsIGZhbHNlICk7DQoJCQkvLyBEQiBv bmx5IGRhdCBmaWxlDQoJCQkkdGhpcy0+X3BhcmVudC0+cmVtb3ZlX2ZpbGUoIEFCU1BBVEggLiAnYmFj a3VwYnVkZHlfZGF0LnBocCcsICdiYWNrdXBidWRkeV9kYXQucGhwIChiYWNrdXAgZGF0YSBmaWxlKScs IGZhbHNlICk7DQoJCQkNCgkJCSR0aGlzLT5fcGFyZW50LT5yZW1vdmVfZmlsZSggQUJTUEFUSCAuICd3 cC1jb250ZW50L3VwbG9hZHMvYmFja3VwYnVkZHlfdGVtcC8nIC4gJHRoaXMtPl9wYXJlbnQtPl9vcHRp b25zWyd6aXBfaWQnXSAuICcvJywgJ1RlbXBvcmFyeSBiYWNrdXAgZGlyZWN0b3J5LicsIGZhbHNlICk7 DQoJCQkNCgkJCSR0aGlzLT5fcGFyZW50LT5yZW1vdmVfZmlsZSggQUJTUEFUSCAuICdpbXBvcnRidWRk eS8nLCAnSW1wb3J0QnVkZHkgRGlyZWN0b3J5JywgdHJ1ZSApOw0KCQl9DQoJCWlmICggaXNzZXQoICRf UE9TVFsnZGVsZXRlX2ltcG9ydGJ1ZGR5J10gKSAmJiAoICRfUE9TVFsnZGVsZXRlX2ltcG9ydGJ1ZGR5 J10gPT0gJzEnICkgKSB7DQoJCQkkdGhpcy0+X3BhcmVudC0+cmVtb3ZlX2ZpbGUoICdpbXBvcnRidWRk eS5waHAnLCAnaW1wb3J0YnVkZHkucGhwICh0aGlzIHNjcmlwdCknLCB0cnVlICk7DQoJCX0NCgkJLy8g RGVsZXRlIGxvZyBmaWxlIGxhc3QuDQoJCWlmICggaXNzZXQoICRfUE9TVFsnZGVsZXRlX2ltcG9ydGJ1 ZGR5bG9nJ10gKSAmJiAoICRfUE9TVFsnZGVsZXRlX2ltcG9ydGJ1ZGR5bG9nJ10gPT0gJzEnICkgKSB7 DQoJCQkkdGhpcy0+X3BhcmVudC0+cmVtb3ZlX2ZpbGUoICdpbXBvcnRidWRkeS0nIC4gJHRoaXMtPl9v cHRpb25zWydsb2dfc2VyaWFsJ10gLiAnLnR4dCcsICdpbXBvcnRidWRkeS0nIC4gJHRoaXMtPl9vcHRp b25zWydsb2dfc2VyaWFsJ10gLiAnLnR4dCBsb2cgZmlsZScsIHRydWUgKTsNCgkJfQ0KCX0NCgkNCgkN Cn0= ###PACKDATA,FILE_END,/importbuddy/classes/step_6_api.php,importbuddy/classes/ste p_6_api.php ###PACKDATA,FILE_START,/importbuddy/classes/step_6_view.php,importbuddy/classes/ step_6_view.php PD9waHANCiR0aGlzLT5sb2coICdCZWdpbm5pbmcgZmluYWwgc3RlcCBjbGVhbnVwIScgKTsNCg0KZWNo byAnVGhpcyBzdGVwIGhhbmRsZXMgY2xlYW51cCBvZiBmaWxlcy4gSXQgaXMgY29tbW9uIHRvIG5vdCBi ZSBhYmxlIHRvIGRlbGV0ZSBzb21lIGZpbGVzIGR1ZSB0byBwZXJtaXNzaW9uIGVycm9ycy4gWW91IG1h eSBtYW51YWxseSBkZWxldGUgdGhlbSBvciBpZ25vcmUgYW55IGVycm9ycyBpZiB5b3Ugd2lzaC48YnI+ PGJyPic7DQoNCmVjaG8gJHRoaXMtPnN0YXR1c19ib3goICdDbGVhbmluZyB1cCBhZnRlciByZXN0b3Jl IHdpdGggSW1wb3J0QnVkZHkgJyAuICR0aGlzLT5fdmVyc2lvbiAuICcuLi4nICk7DQplY2hvICc8ZGl2 IGlkPSJwYl9pbXBvcnRidWRkeV93b3JraW5nIj48aW1nIHNyYz0iP2V6aW1nPXdvcmtpbmcuZ2lmIiB0 aXRsZT0iV29ya2luZy4uLiBQbGVhc2Ugd2FpdCBhcyB0aGlzIG1heSB0YWtlIGEgbW9tZW50Li4uIj48 L2Rpdj4nOw0KDQpmbHVzaCgpOw0Kc2xlZXAoIDUgKTsgLy8gUGF1c2UgdG8gYWxsb3cgQ1NTLCBldGMg dGltZSB0byBsb2FkIGJlZm9yZSBpbXBvcnRidWRkeSBzdGFydHMgZGVsZXRpbmcgdGhvc2UgZmlsZXMu DQoNCiRhcGktPmNsZWFudXAoKTsNCg0KZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi PmpRdWVyeSgiI3BiX2ltcG9ydGJ1ZGR5X3dvcmtpbmciKS5oaWRlKCk7PC9zY3JpcHQ+JzsNCg0KZWNo byAnPGJyID48YnI+JzsNCmVjaG8gJzxicj48YnI+PGI+SW1wb3J0IGNvbXBsZXRlIGZvciB0aGUgc2l0 ZTogPC9iPjxhIGhyZWY9IicgLiAkdGhpcy0+X29wdGlvbnNbJ3NpdGV1cmwnXSAuICciIHRhcmdldD0i X25ldyI+JyAuICR0aGlzLT5fb3B0aW9uc1snc2l0ZXVybCddIC4gJzwvYT48YnI+PGJyPic7DQplY2hv ICc8YnI+PGJyPjxiPlRoYW5rIHlvdSBmb3IgY2hvb3NpbmcgQmFja3VwQnVkZHkhPC9iPic7DQoNCiR0 aGlzLT5sb2coICdGaW5pc2hlZCBmaW5hbCBzdGVwIGNsZWFudXAhIEtlcmZ1ZmZsZSEnICk7DQo/Pg== ###PACKDATA,FILE_END,/importbuddy/classes/step_6_view.php,importbuddy/classes/st ep_6_view.php ###PACKDATA,FILE_START,/importbuddy/classes/view_page.php,importbuddy/classes/vi ew_page.php PGh0bWw+DQoJPGhlYWQ+DQoJCTx0aXRsZT5CYWNrdXBCdWRkeSBpbXBvcnRidWRkeS5waHAgYnkgUGx1 Z2luQnVkZHkuY29tPC90aXRsZT4NCgkJPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4 Ij4NCgk8L2hlYWQ+DQoJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i aW1wb3J0YnVkZHkvY3NzL3N0eWxlLmNzcyIgLz4NCgk8c2NyaXB0IHNyYz0iaW1wb3J0YnVkZHkvanMv anF1ZXJ5LmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJp bXBvcnRidWRkeS9qcy91aS5jb3JlLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0K CTxzY3JpcHQgc3JjPSJpbXBvcnRidWRkeS9qcy91aS53aWRnZXQuanMiIHR5cGU9InRleHQvamF2YXNj cmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9ImltcG9ydGJ1ZGR5L2pzL3VpLnRhYnMuanMiIHR5 cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9ImltcG9ydGJ1ZGR5L2pz L3Rvb2x0aXAuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9 ImltcG9ydGJ1ZGR5L2pzL2ltcG9ydGJ1ZGR5LmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2Ny aXB0Pg0KCTxib2R5Pg0KCQkNCgkJPGgxPkJhY2t1cEJ1ZGR5IFJlc3RvcmF0aW9uICYgTWlncmF0aW9u IFRvb2w8L2gxPg0KCQk8P3BocCAvLzxhIGhyZWY9Imh0dHA6Ly9pdGhlbWVzLmNvbS9jb2RleC9wYWdl L0JhY2t1cEJ1ZGR5IiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyI+TmVlZCBoZWxwPyBTZWUg dGhlIDxiPktub3dsZWRnZSBCYXNlPC9iPiBmb3IgdHV0b3JpYWxzICYgbW9yZS48L2E+PGJyPiA/Pg0K CQkNCgkJPD9waHANCgkJaWYgKCAkdGhpcy0+X29wdGlvbnNbJ3NraXBfZmlsZXMnXSAhPSBmYWxzZSAp IHsNCgkJCWVjaG8gJ1dBUk5JTkc6IERlYnVnIG9wdGlvbiB0byBza2lwIGZpbGVzIGlzIHNldCB0byB0

cnVlLiBGaWxlcyB3aWxsIG5vdCBiZSBleHRyYWN0ZWQuPGJyPic7DQoJCX0NCgkJaWYgKCAkdGhpcy0+ X29wdGlvbnNbJ3dpcGVfZGF0YWJhc2UnXSAhPSBmYWxzZSApIHsNCgkJCWVjaG8gJ1dBUk5JTkc6IERl YnVnIG9wdGlvbiB0byB3aXBlIGRhdGFiYXNlIGlzIHNldCB0byB0cnVlLiBBbGwgZXhpc3RpbmcgZGF0 YSB3aWxsIGJlIGVyYXNlZC48YnI+JzsNCgkJfQ0KCQlpZiAoICR0aGlzLT5fb3B0aW9uc1snc2tpcF9k YXRhYmFzZV9pbXBvcnQnXSAhPSBmYWxzZSApIHsNCgkJCWVjaG8gJ1dBUk5JTkc6IERlYnVnIG9wdGlv biB0byBza2lwIGRhdGFiYXNlIGltcG9ydCBzZXQgdG8gdHJ1ZS4gVGhlIGRhdGFiYXNlIHdpbGwgbm90 IGJlIGltcG9ydGVkLjxicj4nOw0KCQl9DQoJCWlmICggJHRoaXMtPl9vcHRpb25zWydza2lwX2RhdGFi YXNlX21pZ3JhdGlvbiddICE9IGZhbHNlICkgew0KCQkJZWNobyAnV0FSTklORzogRGVidWcgb3B0aW9u IHRvIHNraXAgZGF0YWJhc2UgaW1wb3J0IHNldCB0byB0cnVlLiBUaGUgZGF0YWJhc2Ugd2lsbCBub3Qg YmUgbWlncmF0ZWQuPGJyPic7DQoJCX0NCgkJaWYgKCAkdGhpcy0+X29wdGlvbnNbJ3NraXBfaHRhY2Nl c3MnXSAhPSBmYWxzZSApIHsNCgkJCWVjaG8gJ1dBUk5JTkc6IERlYnVnIG9wdGlvbiB0byBza2lwIG1p Z3JhdGluZyB0aGUgaHRhY2Nlc3MgZmlsZSBpcyBzZXQgdG8gdHJ1ZS4gVGhlIGZpbGUgd2lsbCBub3Qg YmUgbWlncmF0ZWQgaWYgbmVlZGVkLjxicj4nOw0KCQl9DQoJCWlmICggJHRoaXMtPl9vcHRpb25zWydm b3JjZV9jb21wYXRpYmlsaXR5X21lZGl1bSddICE9IGZhbHNlICkgew0KCQkJZWNobyAnV0FSTklORzog RGVidWcgb3B0aW9uIHRvIGZvcmNlIG1lZGl1bSBjb21wYXRpYmlsaXR5IG1vZGUuIFRoaXMgbWF5IHJl c3VsdCBpbiBzbG93ZXIsIGxlc3MgcmVsaWFibGUgb3BlcmF0aW9uLjxicj4nOw0KCQl9DQoJCWlmICgg JHRoaXMtPl9vcHRpb25zWydmb3JjZV9jb21wYXRpYmlsaXR5X3Nsb3cnXSAhPSBmYWxzZSApIHsNCgkJ CWVjaG8gJ1dBUk5JTkc6IERlYnVnIG9wdGlvbiB0byBmb3JjZSBzbG93IGNvbXBhdGliaWxpdHkgbW9k ZS4gVGhpcyBtYXkgcmVzdWx0IGluIHNsb3dlciwgbGVzcyByZWxpYWJsZSBvcGVyYXRpb24uPGJyPic7 DQoJCX0NCgkJaWYgKCAkdGhpcy0+X29wdGlvbnNbJ2ZvcmNlX2hpZ2hfc2VjdXJpdHknXSAhPSBmYWxz ZSApIHsNCgkJCWVjaG8gJ1dBUk5JTkc6IERlYnVnIG9wdGlvbiB0byBmb3JjZSBoaWdoIHNlY3VyaXR5 IG1vZGUuIFlvdSBtYXkgYmUgcHJvbXB0ZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24gdGhhbiBub3JtYWwu PGJyPic7DQoJCX0NCgkJaWYgKCAkdGhpcy0+X29wdGlvbnNbJ3Nob3dfcGhwX3dhcm5pbmdzJ10gIT0g ZmFsc2UgKSB7DQoJCQllY2hvICdXQVJOSU5HOiBEZWJ1ZyBvcHRpb24gdG8gc3RyaWN0bHkgcmVwb3J0 IGFsbCBlcnJvcnMgJiB3YXJuaW5ncyBmcm9tIFBIUCBpcyBzZXQgdG8gdHJ1ZS4gVGhpcyBtYXkgY2F1 c2Ugb3BlcmF0aW9uIHByb2JsZW1zLjxicj4nOw0KCQl9DQoJCWVjaG8gJzxicj4nOw0KCQk/Pg0KCQkN CgkJPGRpdiBzdHlsZT0iZGlzcGxheTogbm9uZTsiIGlkPSJwYl9pbXBvcnRidWRkeV9ibGFua2FsZXJ0 Ij48P3BocCAkdGhpcy0+YWxlcnQoICcjVElUTEUjJywgJyNNRVNTQUdFIycsICc5MDIxJyApOyA/Pjwv ZGl2Pg0KCQkNCgkJPGRpdiBzdHlsZT0id2lkdGg6IDcwMHB4OyBtYXJnaW4tbGVmdDogYXV0bzsgbWFy Z2luLXJpZ2h0OiBhdXRvOyI+DQoJCQk8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6IDY4MHB4OyBtYXJnaW46 MTBweDsgcGFkZGluZzogMjBweDsgYm9yZGVyOjFweCBzb2xpZCAjY2NjOyAtbW96LWJvcmRlci1yYWRp dXM6IDEwcHg7IC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTBweDsgYmFja2dyb3VuZDogI0Y5RjlGOTsg LW1vei1ib3gtc2hhZG93OiAxMHB4IDEwcHggMTVweCAtMTJweCAjMzU2RDhGOyAtd2Via2l0LWJveC1z aGFkb3c6IDEwcHggMTBweCAxNXB4IC0xMnB4ICMzNTZEOEY7IHBhZGRpbmctcmlnaHQ6IDIwcHg7Ij4N CgkJCQk8ZGl2IGNsYXNzPSJ3cmFwIj4NCgkJCQkJPD9waHANCgkJCQkJLy8gUmVxdWlyZSBwYXNzd29y ZCBpZiBzZXQuDQoJCQkJCWlmICggJHRoaXMtPmhhc19hY2Nlc3MgPT09IGZhbHNlICkgew0KCQkJCQkJ ZWNobyAnPGgyPkF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkPC9oMj4nOw0KCQkJCQkJZWNobyAnUGxlYXNl IGVudGVyIHlvdXIgSW1wb3J0QnVkZHkgcGFzc3dvcmQgdG8gY29udGludWUuIFRoaXMgd2FzIHNldCBm cm9tIHRoZSBCYWNrdXBCdWRkeSBzZXR0aW5ncyBwYWdlLjxicj48YnI+JzsNCgkJCQkJCWVjaG8gJzxi cj48Zm9ybSBhY3Rpb249Ij9zdGVwPTEiIG1ldGhvZD0icG9zdCI+JzsNCgkJCQkJCWVjaG8gJzxkaXYg c3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFz c3dvcmQiIHZhbHVlPSIiIC8+Jm5ic3A7JzsNCgkJCQkJCWVjaG8gJzxpbnB1dCB0eXBlPSJzdWJtaXQi IG5hbWU9InN1Ym1pdCIgdmFsdWU9IkF1dGhlbnRpY2F0ZSAmcmFxdW87IiBjbGFzcz0iYnV0dG9uIiAv PjwvZGl2Pic7DQoJCQkJCQllY2hvICc8L2Zvcm0+JzsNCgkJCQkJfSBlbHNlIHsgLy8gTm8gcGFzc3dv cmQgbmVlZGVkIG9yIHN1Y2Nlc3NmdWxseSBwYXNzZWQgdGhlIGNvcnJlY3QgcGFzc3dvcmQuDQoJCQkJ CQllY2hvICc8aDI+U3RlcCAnIC4gJHRoaXMtPl9zdGVwIC4gJyBvZiAnIC4gJHRoaXMtPl90b3RhbF9z dGVwcyAuICc8L2gyPic7DQoJCQkJCQkNCgkJCQkJCWlmICggZmlsZV9leGlzdHMoIEFCU1BBVEggLiAn aW1wb3J0YnVkZHkvY2xhc3Nlcy9zdGVwXycgLiAkdGhpcy0+X3N0ZXAgLiAnX3ZpZXcucGhwJyApICkg ew0KCQkJCQkJCSR0aGlzLT5sb2coICdJbml0aWF0aW5nIHN0ZXAgIycgLiAkdGhpcy0+X3N0ZXAgLiAn LicgKTsNCgkJCQkJCQkNCgkJCQkJCQlyZXF1aXJlX29uY2UoICdzdGVwXycgLiAkdGhpcy0+X3N0ZXAg LiAnX2FwaS5waHAnICk7DQoJCQkJCQkJJGFwaV9jbGFzcyA9ICdwbHVnaW5idWRkeV9pbXBvcnRidWRk eV9zdGVwXycgLiAkdGhpcy0+X3N0ZXA7DQoJCQkJCQkJJGFwaSA9IG5ldyAkYXBpX2NsYXNzKCAkdGhp cyApOw0KCQkJCQkJCQ0KCQkJCQkJCXJlcXVpcmVfb25jZSggJ3N0ZXBfJyAuICR0aGlzLT5fc3RlcCAu ICdfdmlldy5waHAnICk7DQoJCQkJCQkJJHRoaXMtPmxvZyggJ0NvbXBsZXRlZCBzdGVwICMnIC4gJHRo aXMtPl9zdGVwIC4gJy4nICk7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCSR0aGlzLT5sb2coICdVbmFi bGUgdG8gaW5pdGlhdGUgc3RlcCAjJyAuICR0aGlzLT5fc3RlcCAuICcuIEhhbHRlZC4nLCAnZXJyb3In ICk7DQoJCQkJCQkJZGllKCAnRVJST1IgIzU0NjU0Mi4gSW52YWxpZCBzdGVwICInIC4gJHRoaXMtPl9z dGVwIC4gJyIuJyApOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCT8+DQoJCQkJPC9kaXY+DQoJCQk8L2Rp dj4NCgkJPC9kaXY+DQoJCQ0KCQk8ZGl2IHN0eWxlPSJjbGVhcjogYm90aDsiPjxicj48YnI+DQoJCQk8 P3BocA0KCQkJaWYgKCAkdGhpcy0+X3N0ZXAgIT0gJzYnICkgeyAvLyBhZnRlciBpbXBvcnRidWRkeSBk

ZWxldGVkIG9uIHN0ZXAgNiwgdGhpcyBpbWFnZSBjYW50IGxvYWQgc28gZG9udCBwdXQgaXQgaW4uLi4N CgkJCQllY2hvICc8YSBocmVmPSJodHRwOi8vcGx1Z2luYnVkZHkuY29tIj48aW1nIHNyYz0iP2V6aW1n PXBsdWdpbmJ1ZGR5LnBuZyIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiAtMnB4OyI+PC9hPiAnOw0KCQkJ fQ0KCQkJZWNobyAnPGEgaHJlZj0iaHR0cDovL3BsdWdpbmJ1ZGR5LmNvbSI+UGx1Z2luQnVkZHkuY29t PC9hPjxicj4nOw0KCQkJZWNobyAnPC9kaXY+JzsNCgkJCWlmICggJHRoaXMtPl92ZXJzaW9uID09ICcj VkVSU0lPTiMnKSB7DQoJCQkJLy9lY2hvICc8aT5WZXJzaW9uIFVua25vd248L2k+JzsNCgkJCX0gZWxz ZSB7DQoJCQkJZWNobyAnPGJyPjxpPkltcG9ydEJ1ZGR5IHYnIC4gJHRoaXMtPl92ZXJzaW9uIC4gJyBm b3IgQmFja3VwQnVkZHkgdicgLiAkdGhpcy0+X2JidmVyc2lvbiAuICc8L2k+JzsNCgkJCX0NCgkJCT8+ DQo8L2JvZHk+DQo8L2h0bWw+ ###PACKDATA,FILE_END,/importbuddy/classes/view_page.php,importbuddy/classes/view _page.php ###PACKDATA,FILE_START,/importbuddy/css/style.css,importbuddy/css/style.css Ym9keSB7DQoJYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsNCglmb250LWZhbWlseToiTHVjaWRhIEdy YW5kZSIsVmVyZGFuYSxBcmlhbCwiQml0c3RyZWFtIFZlcmEgU2FucyIsc2Fucy1zZXJpZjsNCglmb250 LXNpemU6IDEycHg7DQoJY29sb3I6ICM0NjQ2NDY7DQoJcGFkZGluZzogMzBweDsNCgl0ZXh0LWFsaWdu OiBjZW50ZXI7DQp9DQphIHsNCgljb2xvcjogIzIxNzU5QjsNCgl0ZXh0LWRlY29yYXRpb246IG5vbmU7 DQp9DQphOmhvdmVyIHsNCgljb2xvcjogIzAwMDAwMDsNCgl0ZXh0LWRlY29yYXRpb246IHVuZGVybGlu ZTsNCn0NCi53aWRlZmF0IHsNCgktd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsNCgktbW96LWJvcmRl ci1yYWRpdXM6IDNweDsNCglib3JkZXItcmFkaXVzOiAzcHg7DQoJYm9yZGVyLXNwYWNpbmc6IDA7DQog ICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsNCiAgICBib3JkZXItd2lkdGg6IDFweDsNCiAgICBjbGVhcjog Ym90aDsNCiAgICBtYXJnaW46IDA7DQogICAgd2lkdGg6IDEwMCU7DQoJYmFja2dyb3VuZC1jb2xvcjog I0ZGRkZGRjsNCiAgICBib3JkZXItY29sb3I6ICNERkRGREY7DQp9DQoud2lkZWZhdCB0ZCwgLndpZGVm YXQgdGggew0KCWZvbnQtZmFtaWx5OiJMdWNpZGEgR3JhbmRlIixWZXJkYW5hLEFyaWFsLCJCaXRzdHJl YW0gVmVyYSBTYW5zIixzYW5zLXNlcmlmOw0KCWJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkOw0KICAg IGJvcmRlci1ib3R0b20td2lkdGg6IDFweDsNCiAgICBmb250LXNpemU6IDExcHg7DQoJYm9yZGVyLWNv bG9yOiAjREZERkRGOw0KfQ0KLndpZGVmYXQgdGggew0KCWJhY2tncm91bmQ6IHVybCgiLi4vLi4vaW1w b3J0YnVkZHkucGhwP2V6aW1nPWdyYXktZ3JhZC5wbmciKSByZXBlYXQteCBzY3JvbGwgbGVmdCB0b3Ag I0RGREZERjsNCgljb2xvcjogIzMzMzMzMzsNCglmb250LXNpemU6IDExcHg7DQoJdGV4dC1zaGFkb3c6 IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOw0KCWxpbmUtaGVpZ2h0OiAxLjNlbTsNCiAg ICBwYWRkaW5nOiA3cHggN3B4IDhweDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KLndpZGVmYXQg dGQgew0KCXBhZGRpbmc6IDNweCA3cHg7DQogICAgdmVydGljYWwtYWxpZ246IHRvcDsNCn0NCmgxIHsN Cgljb2xvcjogIzQ2NDY0NjsNCglmb250LXNpemU6IDI0cHg7DQoJZm9udC1mYW1pbHk6IEdlb3JnaWEs IlRpbWVzIE5ldyBSb21hbiIsIkJpdHN0cmVhbSBDaGFydGVyIixUaW1lcyxzZXJpZjsNCglmb250LXN0 eWxlOiBpdGFsaWM7DQoJbWFyZ2luLXRvcDogMHB4Ow0KfQ0KaDIgew0KCWNvbG9yOiAjNDY0NjQ2Ow0K CWZvbnQtc2l6ZTogMjBweDsNCglmb250LWZhbWlseTogR2VvcmdpYSwiVGltZXMgTmV3IFJvbWFuIiwi Qml0c3RyZWFtIENoYXJ0ZXIiLFRpbWVzLHNlcmlmOw0KCWZvbnQtc3R5bGU6IGl0YWxpYzsNCgltYXJn aW4tdG9wOiAtMTBweDsNCn0NCi53cmFwIHsNCgltYXJnaW4tdG9wOiAxMHB4Ow0KCW1pbi1oZWlnaHQ6 IDIwMHB4Ow0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCgl0ZXh0LWFsaWduOiBsZWZ0Ow0KCW1hcmdpbi1s ZWZ0OiBhdXRvOw0KCW1hcmdpbi1yaWdodDogYXV0bzsNCn0NCmltZyB7DQoJdmVydGljYWwtYWxpZ246 IC0ycHg7DQp9DQoubWVudSB7DQoJcGFkZGluZzogOHB4Ow0KCXRleHQtYWxpZ246IGNlbnRlcjsNCgli YWNrZ3JvdW5kLWNvbG9yOiAjQ0NDQ0NDOw0KCWZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KaW5wdXRbdHlw ZT0idGV4dCJdLCB0ZXh0YXJlYSB7DQoJbWFyZ2luOiAzcHg7DQoJcGFkZGluZzogM3B4Ow0KCS1tb3ot Ym9yZGVyLXJhZGl1czo0cHggNHB4IDRweCA0cHg7DQoJLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7 DQoJYm9yZGVyLXJhZGl1czogNHB4Ow0KCWJvcmRlci1zdHlsZTpzb2xpZDsNCglib3JkZXItd2lkdGg6 MXB4Ow0KCWJvcmRlci1jb2xvcjogI0RGREZERjsNCn0NCnRleHRhcmVhIHsNCglmb250LWZhbWlseTog c2Fucy1zZXJpZjsNCglmb250LXNpemU6IDEzcHg7DQoJbGluZS1oZWlnaHQ6IDEuNGVtOw0KCWNvbG9y OiAjNDY0NjQ2Ow0KfQ0KLmJ1dHRvbiB7DQoJLyoNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJbGVmdDog MzclOw0KCSovDQoJbWFyZ2luLWxlZnQ6IGF1dG87DQoJbWFyZ2luLXJpZ2h0OiBhdXRvOw0KCWJvdHRv bTogMTVweDsNCgkNCgliYWNrZ3JvdW5kOnVybCgiLi4vLi4vaW1wb3J0YnVkZHkucGhwP2V6aW1nPWJ1 dHRvbi1ncmFkLnBuZyIpIHJlcGVhdC14IHNjcm9sbCBsZWZ0IHRvcCAjMjE3NTlCOw0KCWJvcmRlci1j b2xvcjojMjk4Q0JBOw0KCWNvbG9yOiNGRkZGRkY7DQoJZm9udC13ZWlnaHQ6Ym9sZDsNCgl0ZXh0LXNo YWRvdzowIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMyk7DQoJLW1vei1ib3JkZXItcmFkaXVzOjExcHgg MTFweCAxMXB4IDExcHg7DQoJLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxMXB4Ow0KCWJvcmRlci1yYWRp dXM6IDExcHg7DQoJLW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Ow0KCWJvcmRlci1zdHlsZTpzb2xp ZDsNCglib3JkZXItd2lkdGg6MXB4Ow0KCWN1cnNvcjpwb2ludGVyOw0KCWZvbnQtc2l6ZToxMXB4ICFp bXBvcnRhbnQ7DQoJbGluZS1oZWlnaHQ6MTRweDsNCglwYWRkaW5nOjJweCA4cHg7DQoJdGV4dC1kZWNv cmF0aW9uOm5vbmU7DQoJZm9udC1mYW1pbHk6Ikx1Y2lkYSBHcmFuZGUiLFZlcmRhbmEsQXJpYWwsIkJp dHN0cmVhbSBWZXJhIFNhbnMiLHNhbnMtc2VyaWY7DQoJZm9udC1zaXplOjEzcHg7DQp9DQouYnV0dG9u OmhvdmVyIHsNCglib3JkZXItY29sb3I6ICMxMzQ1NUI7DQp9DQouYnV0dG9uLXNlY29uZGFyeSB7DQoJ YmFja2dyb3VuZDp1cmwoIi4uLy4uL2ltcG9ydGJ1ZGR5LnBocD9lemltZz13aGl0ZS1ncmFkLnBuZyIp

IHJlcGVhdC14IHNjcm9sbCBsZWZ0IHRvcCAjMjE3NTlCOw0KCWJvcmRlci1jb2xvcjojQkJCQkJCOw0K CWNvbG9yOiM0NjQ2NDY7DQoJLW1vei1ib3JkZXItcmFkaXVzOjExcHggMTFweCAxMXB4IDExcHg7DQoJ LXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxMXB4Ow0KCWJvcmRlci1yYWRpdXM6IDExcHg7DQoJLW1vei1i b3gtc2l6aW5nOmNvbnRlbnQtYm94Ow0KCWJvcmRlci1zdHlsZTpzb2xpZDsNCglib3JkZXItd2lkdGg6 MXB4Ow0KCWN1cnNvcjpwb2ludGVyOw0KCWZvbnQtc2l6ZToxMXB4ICFpbXBvcnRhbnQ7DQoJbGluZS1o ZWlnaHQ6MTRweDsNCglwYWRkaW5nOjJweCA4cHg7DQoJdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQoJZm9u dC1mYW1pbHk6Ikx1Y2lkYSBHcmFuZGUiLFZlcmRhbmEsQXJpYWwsIkJpdHN0cmVhbSBWZXJhIFNhbnMi LHNhbnMtc2VyaWY7DQoJZm9udC1zaXplOjEzcHg7DQp9DQouYnV0dG9uLXNlY29uZGFyeTpob3ZlciB7 DQoJYm9yZGVyLWNvbG9yOiAjMTM0NTVCOw0KfQ0KLmFsZXJ0IHsNCgliYWNrZ3JvdW5kLWNvbG9yOiNG RkZGRTA7DQoJYm9yZGVyOiAxcHggc29saWQgI0U2REI1NTsNCglwYWRkaW5nOiAxMHB4Ow0KCS13ZWJr aXQtYm9yZGVyLXJhZGl1czogM3B4Ow0KCS1tb3otYm9yZGVyLXJhZGl1czogM3B4Ow0KCWJvcmRlci1y YWRpdXM6IDNweDsNCgltYXJnaW4tdG9wOiA0cHg7DQoJbWFyZ2luLWJvdHRvbTogNHB4Ow0KCW1pbi1o ZWlnaHQ6IDU1cHg7DQp9DQpsYWJlbCB7DQoJZmxvYXQ6IGxlZnQ7DQoJd2lkdGg6IDE1MHB4Ow0KCW1h cmdpbi10b3A6IDdweDsNCn0NCi50b2dnbGUgew0KCWN1cnNvcjogcG9pbnRlcjsNCn0NCi50b2dnbGVk IHsNCglkaXNwbGF5OiBub25lOw0KCWJvcmRlcjogMXB4IHNvbGlkICNDQ0NDQ0M7DQoJbWFyZ2luOiA0 cHg7DQoJcGFkZGluZzogOHB4Ow0KCS13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4Ow0KCS1tb3otYm9y ZGVyLXJhZGl1czogNHB4Ow0KCWJvcmRlci1yYWRpdXM6IDRweDsNCn0NCg0KI3Rvb2x0aXAgew0KCXBv c2l0aW9uOiBhYnNvbHV0ZTsNCgl6LWluZGV4OiAzMDAwOw0KCWJvcmRlcjogMXB4IHNvbGlkICMxMTE7 DQoJYmFja2dyb3VuZC1jb2xvcjogI2VlZTsNCglwYWRkaW5nOiA1cHg7DQoJbWF4LXdpZHRoOiAzMDBw eDsNCglvcGFjaXR5OiAwLjg1Ow0KCWJvcmRlci1yYWRpdXM6IDVweDsNCgktd2Via2l0LWJvcmRlci1y YWRpdXM6IDVweDsNCgktbW96LWJvcmRlci1yYWRpdXM6IDVweDsNCn0NCiN0b29sdGlwIGgzLCAjdG9v bHRpcCBkaXYgeyBtYXJnaW46IDA7IH0NCi5saWdodCB7DQoJY29sb3I6ICNBRkFGQUY7DQp9DQojcGJf aW1wb3J0YnVkZHlfd29ya2luZyB7DQoJdGV4dC1hbGlnbjogY2VudGVyOw0KCXBhZGRpbmctdG9wOiAy MHB4Ow0KfQ0KDQovKiBUYWJzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi51 aS10YWJzIHsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNERkRGREY7IG1hcmdpbi10b3A6IDIwcHg7IH0g LyogcGFkZGluZzogLjJlbTsgem9vbTogMTsgKi8NCi51aS10YWJzIC51aS10YWJzLW5hdiB7IHotaW5k ZXg6IDE1OyBsaXN0LXN0eWxlOiBub25lOyBwb3NpdGlvbjogcmVsYXRpdmU7IHBhZGRpbmc6IDBweCAw cHggMHB4OyBtYXJnaW4tdG9wOiAtMTVweDsgbWFyZ2luLWxlZnQ6IDEwcHg7IH0NCi51aS10YWJzIC51 aS10YWJzLW5hdiBsaSB7IG1hcmdpbjogLTExcHggM3B4IC0xcHggMHB4OyBwb3NpdGlvbjogcmVsYXRp dmU7IGZsb2F0OiBsZWZ0OyBwYWRkaW5nOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0NCi51aS10YWJz IC51aS10YWJzLW5hdiBsaSBhIHsgYmFja2dyb3VuZC1jb2xvcjogI0VERURFRDsgaGVpZ2h0OiAxOXB4 OyBmbG9hdDogbGVmdDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBwYWRkaW5nLWxlZnQ6IDEwcHg7IHBh ZGRpbmctcmlnaHQ6IDEwcHg7IC1tb3otYm9yZGVyLXJhZGl1czogMTBweCAxMHB4IDBweCAwcHg7IC13 ZWJraXQtYm9yZGVyLXJhZGl1czogMTBweCAxMHB4IDBweCAwcHg7IGJvcmRlcjogMXB4IHNvbGlkICNE RkRGREY7IG91dGxpbmU6IG5vbmU7IHBhZGRpbmctdG9wOiA1cHg7IH0NCi51aS10YWJzIC51aS10YWJz LW5hdiBsaSBhOmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjogI0RGREZERjsgfQ0KLnVpLXRhYnMgLnVp LXRhYnMtbmF2IGxpLnVpLXRhYnMtc2VsZWN0ZWQgeyAgfSAvKiBwYWRkaW5nLWJvdHRvbTogMHB4OyAq Lw0KLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtc2VsZWN0ZWQgYSwgLnVpLXRhYnMgLnVp LXRhYnMtbmF2IGxpLnVpLXN0YXRlLWRpc2FibGVkIGEsIC51aS10YWJzIC51aS10YWJzLW5hdiBsaS51 aS1zdGF0ZS1wcm9jZXNzaW5nIGEgeyBoZWlnaHQ6IDIwcHg7IGN1cnNvcjogdGV4dDsgYmFja2dyb3Vu ZC1jb2xvcjogI0ZGRkZGRjsgZm9udC13ZWlnaHQ6IGJvbGQ7IGJvcmRlci1ib3R0b206IDBweDsgY29s b3I6ICMzMzMzMzM7IH0NCi51aS10YWJzIC51aS10YWJzLW5hdiBsaSBhLCAudWktdGFicy51aS10YWJz LWNvbGxhcHNpYmxlIC51aS10YWJzLW5hdiBsaS51aS10YWJzLXNlbGVjdGVkIGEgeyBjdXJzb3I6IHBv aW50ZXI7IH0gLyogZmlyc3Qgc2VsZWN0b3IgaW4gZ3JvdXAgc2VlbXMgb2Jzb2xldGUsIGJ1dCByZXF1 aXJlZCB0byBvdmVyY29tZSBidWcgaW4gT3BlcmEgYXBwbHlpbmcgY3Vyc29yOiB0ZXh0IG92ZXJhbGwg aWYgZGVmaW5lZCBlbHNld2hlcmUuLi4gKi8NCi51aS10YWJzIC51aS10YWJzLXBhbmVsIHsgcGFkZGlu Zy10b3A6IDNweDsgZGlzcGxheTogYmxvY2s7IGJvcmRlci13aWR0aDogMDsgYmFja2dyb3VuZDogbm9u ZTsgfQ0KLnVpLXRhYnMgLnVpLXRhYnMtaGlkZSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQ0K LnRhYnMtaXRlbSB7DQoJcGFkZGluZzogMTZweDsNCglwYWRkaW5nLXRvcDogMjhweDsNCglwYWRkaW5n LWJvdHRvbTogMjhweDsNCgliYWNrZ3JvdW5kOiAjRkZGRkZGOw0KfQ== ###PACKDATA,FILE_END,/importbuddy/css/style.css,importbuddy/css/style.css ###PACKDATA,FILE_START,/importbuddy/images/alert.png,importbuddy/images/alert.pn g iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN 1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABoWSURBVHic7Z15 kB1Hfcc/v5m392pXq5VWq/ta3fd9WbdWx2pXtmzJ2BhhGwuDLZ+DcYwNBcSASUIUAkWRP6iiKqlKUpWq kEqqkjJFSIBA2fERqIAjg/ElGx+yZN3H7r7X+WOON2/ezLyZee/t20NfVWvfzPT0dPfv27/+9a97ekQp xTWMXGiVzsA1VBbXCDDCcY0AIxzXCDDCkap0BioFQ2QcMBV49ZhSH1Y6P5WCjLRRgCEyDTiKKfxG4Dzw BvCdY0qdqGTeKoERRQBDZBHwFLAMaMfUgL3A+8CLwFPHlHqmcjkceIwYAhgiY4F/ADYBOkDjKLhw3omS Bp4Fbjym1HuVyGMlMJJsgG8AWwDpvm8b6w5uoG78TC6/9yrP/uMz/Mu3/l0HNgDfBm6uaE4HECNCA1iq

/3lEau785p0s6trpuioAvPqzn/LdT32PTF9fL7D0mFLHK5HXgcZIGQZ+G6jpeuQwi/ZuB5UBlBUyQIaZ mzbR88QRgGrgm5XL6sBi2BPAENkObBrV3s7aj2xD2f9UBqUyoJQVMqzo2UDTxIkA2w2RFRXO+oBgWBPA EBHgzwF99/0HaBilma3fJXibCApFwyjoPHoAoAo4VtHMDxCGNQGAjwJLx0yfxrKu1Vnhu1S/GZRzbene NTRNmgRwnSGysXJZHxgMWwIYIlXAlwHZZxygttbu81WeFnATo75Bsfv+G8AcKn6jciUYGAxbAgD3A7Pa F8xh/pZFFBK8+/qSXSsZPWUKwBpDZFclC1FuDEsCGCL1wGcBej5zgOqqTID699cIdXWK3ffvB7N+vm7Z EsMSw5IAwJeA9hlrlzBr9QzHyMu3/oOIkWHxzmW0TJ0CsBS4oWIlKTOGHQGsWb5PIsK+h/ej6/6t3G39 +w0La2sVex90tMCTw1ULDDsCYBpuo+fvWMXUBRPy+/kC6t9NjAXbl9A6YxrAAswRxbDDsCKAIdIBHBRd Z899XYgECzoKMWqqM+x9sBtMf/EXDRG9MiUrH4YVATBduPUr969nwsxW4lj+Qdfnb17IuI7pALOBuypV sHJh2BDAEFkHdOrV1ey4exdCsIEXhxjV1YquB/fZj3nM8i8MGwwLAlgG2l8A1Rtv3UTrxMZQAy8uMeZu nMf4uTMAZmD6F4YNhgUBgP3A6lRdHZs/vpUoBp6bGKoAMaqqFF0P7LWf9VlDpKEShSwHhjwBDJEU8FVA 7/zkNppaa2Nb/kQgxpz1c5i4cBaYS8m+VJnSlh5DngDAJ4AFtU2jWHtoQ67w3Y6eUMdPYWLoKUW34dgC dxkibRUpbYkxpAlgiNQBjwPSdf8O6ht1Ig/7EhBj5orpdKxfCNAC/FklylxqDGkCYPr7pzWPH8PyfSsj j++TEkPTMnQ9sAdMp+BNhsjsyhS7dBiyBDBExmCu76f7oR1U10iukef045mSEmPSvHaW7FoO0MAwWDo2 ZAkAPAm0jZ/VzsJt1nRvFOu/SGIIGXbd04noOsBOQ2R9ZYpfGgxJAhgiU4HbAHoe3I6ewqcft4VZemK0 TWth3Y1rwFxAemwoTxQNSQJgTvg0T182lY51s7NqO5KBVxpibDuyHb26GmA1cH1lqqF4DDkCGCLLgG6A 7ge2I+IWpB3sU+UjRvO4erbdvgHMpWNfGaou4iFHAMzWX7dgUweTF06K2I+Xhxgbbr2O6vo6MKeLh+RE 0ZAigCHSifluH3uObjXf6Yni+CkTMRqaq9nz6U1gThc/Zi1FG1IYMgSw5uKfAqpX9yxg/IxxRB7GlZEY q25YQ2NrE8A0rHWIQwlDhgDArcBy0TR23nUdSinLV1/E+L4ExKipS9H9wBY7j0ct/8SQwZAggCFSC3wB 0Lbcupjm8aMdYeVb62UkhpNeblqLO5fSOmUMwDjgKwNeQUVgSBAAuBeYXVWdYvNt6xEy5oKPkL7ajxj9 /Yq+3owZ+pQVMlYwj1UmmkfQfS2VEvY/tM3O622GyPSK1FICDPr9AQyR0cDDgOy6azn1o+tRSiGAoMxI jh9GWf9bx86r78KZs4qrvTjHeO6109I0oWkU1NQoV9zctNzPsu+fs3Eekxe089ZL7zZhjlQOFlXwAcKg JwDwOWByfVMNa29c5RhjCrKC9wjHS4zLV0DGLWf0pGVIiNLL9F3i8okXuHD2FUwfjwSSzEsMTYSeB7by 3U//PUCXIbLimFIvFlHuAcGg3iDCEJkI/AoYe+jRDay8frV1xet59Rx7PLNXW7dSM7s77y4b3hr48Bd/ RYv+emB6JjHyryml+P5Df8vLz7wJ8GNg57HBXMEMfhvgq8DYlvH1LNu7JLhfLmDgpSasBFdsbxBPqJ20 PMTGUAE2RgaAffc5I4JNwKB/r3DQEsAQmQ/cCNBzdBV6KpVvjYdZ8i5iaHpN6LPyCJGqMe0MlTEDygph xqd53DZrAiv3zAZzj4GvDfZ3CQYtAYA/BZomzmxi3ub5hLfyAsSIC4XZyslfIxiFGJ1HNtpdwzIG+RtF g5IAhsgmYAdAz32r0DRJqP6tIWHsHIT7CgoRo2XSWLbcvADM+v28tXRtUGLQEcDl8q3rWDaGGStnRRiP FyJGAiRwIrmJsfnwOlJVOphvFB0tpk7KiUFHAMw1/msAuu9ZZZ1yCaCQ+9ZPODGhlDetqK7ibNyGliY6 71gMpl35kCHSUlStlAmDigCGSA3mmvuqZZvbaJ87JXorLyismCjBHML6Q6upa6wCmAQ8UWz9lAODigDA ncAiEdh9ZGWw4OOo/wQaIJtOdPXvR4zq+jr23b3MTvQOQ2RSMZVTDgwaAhgiTcAjgLahexItU8aT9IXO /OsJEMvGCH728u7ljB5XC9AKfK2oSioDBg0BgAeBmboO2w8v81SmVwAxiREXThoRhpgFiKFXVbH/6Eo7 5QOGyMKiaqnEGBQEMETagU8DsvOWaTS0tgRUriIRMRIh2hAzCjHmb13IxBmNAKMw/RuDBoOCAMDngYm1 dcKGQ0vw7cdDja4CxIjtDPKmF0f95xNDNI2erBbYbohsKbK+SoaKE8B6vepWgL23z6SmsTF65QcRw2sX xEUpjE9P/Bmr5zJ7yWiAWgaRi7jiBMBcQTOmeYzOyn0LylL5yRBDA0XKm2LfvbZfgzXAgYQZKykqSgBD ZDWwF6D7rg5StXWUzvJ3V348KCiNBvLkrX3edJZtGgvmOowvWkvdKoqKEcAQ0TCHRaPaJ1exaNucAsIM IkaEVhkbQekFGZ/R7YLdH5tlLyEYFO8SVFID7AKuA9j/ydmIXlUa9e9HjLhDQdsVXMjAi5M31Y9+8jna eI7V5uukGvAZa8lbxVARAlgu3y8DtTPn1zBzzSwKt6JiiJEAsVp4eN7k8kmq3vhn9A9/gwB79gsp80Wy GZjOr4qhUhrgZmAFQM+ROSDeDzl4W1oEu8BPOEkdQXnDy4TGp0qjf/AiqRP/hvSec1If3SJs3uEcHjFE JifIZEkw4AQwREYBjwGpJWvqmTB/ahGt3Kp88R4rMyTVAApySCcRSejKt1z5gNSb/+q0ei927BHqzb3G xgN/HD+TpUElNMDdwDwR2HPHbGvlTAQV674uHmF7hZ8nvLhQJqncRHJvO5uTV4+2yvSjn/oVqbeeRus9 G/iEujph1z6HGjcaIosTZLRoDCgBrJ217gO09TsaGTNtYnwVKwFE8COGfZx0JIAnL+KTtutYrp4m9dYP 0T98KXAFshsbtsCYsQA0A09VYqOJgdYAjwDTU1Ww46OzwXbTBql+X3XuQwS/42I0gPLe7yFZHknT6B/+ htQffoTWdzZ/1XoAUimh6wYn8nZgW0j0smDACGCIzAQOA2zrbqahbRx5Bp6favcjglcd+x3nECcuXEag V93ntPoM0neG1Ds/Rj/7krlZhXeNeQEsXwWTpwFQRwU2mhhIDfAFoL2uHjYd7CDPWs8TvsvAK9jnBxAn iQ/AvsOr7r1dj0qjnz1O6t0fo/WdMWtSCP4bABFh/01OhFXAodgZLgIDQgBDZDnWPjq7D42humm0v+CD DDzlQww/jeE91mzBxYTtCArIm/SfI3Xyp+jn/s+/1fuFECJ0zBXmLwLMdwkeN0Qa42c6GcpOAMuw+TLQ MnoMrO6aQaCBFyRMLcTA8yOG5mmxieBHtDTaxVdIvfefZqv3Ctf7Nyx40H2j2C7i+cCnEmY6NgZCA2yz AvtuG4deN4psv+3pWwuN58NaubiO8/rtuCRQ2WfZrT59gdQHvyDlbvWFBF3ougsTJonbRXzfQO1FXFYC WAbNF4HG9onCoq3T8G31YWNsv+OoIwMn7STIpqVdfI3UBz/LtvooLTyICH73WnC5iKcDjybMeCyUWwMc ANYC9NzRhlTVBgsvSJjid+yjMYJGAkm6AGsYKJlLpE4/Q+r8cfPVLz9BJlH/fmTAdBFvybqID1vfQCor ykYAy5B5DKiZOUejY/WUwkZc2Hjed3zvFb4teK8GiQ/t8pukTv0crf9M4RacRP0HhB17hAbTRdzGAHyX oJwa4HZgMUDPneNRehW5LdzTd/sRwxZkmDvWlwje69EhgFw6Teriy+ZXx8IEGrfVR4hXWy90djv9Qrch siZWAWKiLAQwRMZiflsntXiVzsT5EzHfoPV5xdoRXq7R5Xa25NkBeY4eDxHy7IRoJNAwl+pIui+a4KOc T6AJPC7iJ8u5frBcGuAoMFvToOtj40GzP+RgCk9Zv8UJHmJ4hed2xoRpjKCRQQEIpuBT1m8pVq0nVP92 ZlJVwr4DjhbYhLVsrhwoOQGsHbI+AWhrt6YYM70dr1GWrwVM4SnxIYZYcR0bwUdjuIXtozG0kFLard4d paqW4H6/FMZfhLBsNUyZDpgu4i+Ua/1gOTTAI8DUqirovKXdYraPdZ7Xon20gE2MMI3h3iw6xwaw00/D xZfyMult9W7U9P13sODjtP4iSCGa0HPQydlyrO3xS42SEsCa0z4IsHVfNQ1t1tc7g8bzXgPP63e3iZGn BXyIITY50oiYwXnGib+BS2/kFNrb6h2c+hna29/P5qUUxl+cuGR/d8wT5purBKow1w+WfBfSkm0TZ7l8 nwDG1zfClgPjrQLZwzC7dMp17O6frWOxftuaw+mUwenPc/b2U6DltmHl2fuPy8fhl7dAzST03pNo/ef9 C9F7Gq6cMH9rdvZUNqsi/vaktyglRM9B4fivFUoxF7gHc+OskqGU+wReB+wG2HWghqrmZsxWbAlTXIJ3

ugXrGO+xcl2S3Gs2qSTgXnEJ3rW3n/SdRj/3AqLS4aXw9gc58BLW594gfseBK432ycKajYpn/wsNuNsQ +etjSp1ImHIeStIFWC7fzwOjW1phbVcbvo4cP7++xw4Id/ykreD1ANrp+zxL9aJfeoXU5VcR0sn78Dyj L6SLKFWwsPsGx0U8lRK7iEtlA3QBGwG6PlKLVjeKyH79MAMxxxeQJoc4Ya5j67f0nyZ18TdoGcubZ4UL H8K7vxNee15445fCu78VzrxjeYBjG3J2fgvF8wlEize6RdjS6dT1zYbIouSiykXRBLA+kvBHQMPEqbB0 q7mPv/g5a4ImfLwzg44H0LLivYJ3z/yJD3FUL/qV10lded00Bq2K7L0Mrz8nvPG8xrnzs5CxO+hVszl1 IsXbv9b4/TPCpbMECz7M+NNcRCiDVtjRJTSYqwTaMF8rC+2soqIUNsAtWGv8u2+rh6o6sOxz/PpisYw0 t13guw+vbTzaxy4D0RtXcK5L/3n0q2+Z6t5F76sX4fUXqmlacS+Td/wRqVHZ2VaV7uPi73/KOz94kNee Pc7kZYrm9uxjA/tz3/P2DRERMXptvdDZA//0dwqgE9gM/CT6g/xR1F7Bhkgr8B/A4o75cPeTU0GvcTFX soXLEXz+9SwxlOseya0ct7Vvk8HhQxq97120/vxFmUrBay+MYcJtT1M3eUVgeTL9vZz84ZOc/slTdFyn bC67EnIdq4BzOb/F/3pYCImX7lN8/QnFqZOAuRfxnmNK9QUWKAKK7QKOYL7kSM/HGkDzTPh4DD5nrC75 O2yaOiOdd78EqX+XASmZ86SuvoKWPuurts+8W11Q+ABaqprxXU8yavEtvPOS+Ktzv24gUOUnsA1CoKeE fdn1g+spwefqEhPAEJmCSQB96RqYOKeFUAMvxPEjkrGcN8oiR1bwKiA92+mj9/6B1NUTOBa+j2DUhHsL Ct+NCTd9h6vpqVmjsKjg1mjFh6WrYeoMwHQRP2a9aZUYxWiA+4FZmgZ7P9qA0lPkGHzeCZsgYiif65aB 53j4bGJI1riUzEX0q6+ipc8VaJVC8/rHYxVMr2umedUnuHzek1Zi4y7hKMEniCZ0H3K0wBLMaffESEQA a6erWwBZv01onTwa32nY0GGdJXz35E2YL8Dx85t9vd77NoHjepegVM1U9PrW2GVsmLWJ/qs+aUdW/97g MiaK7BY65gkLlgCmi/ioITI+dgEtxCaANfx4BJhSXQOdNzegEPLe8PE7xnWcM3Z3aQzvzJ6LOGarfxMt cz5fAAGCkMa5iSqmbupaqhuD0y26O4gDn7S6DzmriOdgauNESKIB1mE6fti6V2gY05ijngWP8AImePwM vpxjd9cgGbS+k+h97wa3+qDWWZVsi9705TMmAWK39EKhNN1B+yRhzUawcnbYEJmTpJyxCGCIpDCdPm2N o2DL/gYrR7lGnt+0bXY2z3Lu+M7le7sKhajL6L1vo2UuBAs6jAgXnklSL6TPvYzmrBCJ8Vy7hZeSBH4Q 2HNAqMq6iBNtNBFXA3QCWwA6D2hUN9aT12pD3uwNJIavqziN1n8ave99fC18P6H4dQd9b6Cuxp87qUo/ X5zxR4J7QoTtF5pbhC3Zj9Jcn2T9YGQCWB89eBQY3doG63ZaXhK/CZ7QYaC3n3f5B7D8A+oKet97aJmL xalKS3DyzrFYlZK5ehr9/T8p7tlBwnQQ4ICLk57A9lwX8eNx1w/G0QA3Ye3j33VIQ6upJafV52zVEjTs S4cbiKSR/rPo/adIPHPn12rf/xacfTp6pbz9OcicCn9eSUKBrsALn+u1dcKuHifyVmJ+qCoSAayVKA8C 9ZOnw5L1lvDz1uW5fZeeYZ+fde86FnUVrf8UmroUXiFJKllT8NrtcO5HoeVUmV5482H44HtlFHpI2byI SIgN22CsObXRjOkcivyJmqga4DCm04HuWzQkVY2pqjNOyNvGJccucP318+qlz6Olz0Rr9VGC5iKmLcD0 +/C7XfD6x6H3zdzSZS7DuR8hx9fD+39ZuGUWTUr3w1VwGl4EXNdTQteNzonVmJtwRULBySDrIwdPAwvn LIK7P1cPelU2Q7p4MuY61jwTPJ7rQhpJX0C0TPKKzjnvqkz3X+9vAK0JaucCOlx8Hug3z9vV4fyVaBM6 QdcyIfc4QaLFL3Dtm1/J8OZrAPwP0HlMqVMUQBQNcA8wD6D7Zg1EJ8fgy+vHXS1cubVE7gSQlrmElj5n unajILC1k81LaBxPUOfg8nNw+RnQ+kPIVyDtMBUelu+c+5R//LC0fK71ZF3EizCX5hdEKAEMkXmYLl99 xTqYNLMa04XrEnzOQgwf9613fK/6kf7ziLqaTHX6CsjnfNAQTvM5Fxa/0HPiBi/Crke5z4VZc4UFSwHT RXzEEJnmc2cOCmmAB7C+4rHnoIYSe6msS7hhmzpamyXa10RdRctcDG71SYTvvS/MaPOOGqLGLYYEhcro wKcsfvcFpWeh+ybHRdxBBBdxIAEMkbVADyAbtkNrW8pU5S717uv48dMCpJH0RSTTm31AksqKK4wokzZx rHwKPNcPccoYdK3QOdf59ok5LuJDhsjSgJw5kfJgORMeBibX1MLO/VY0zxs85qtbwa96QQbJ9KFlriCo 6BURVqFAYJ8ZtTVHWeQRKuSYTpygOHn3q5IQYc/1OS7iz4StHwzSADsw961j216hsVkjUN2rrEbIIYbK IJkriOoPzWzBSiq25XvPaz6/Sx2SlNPvvF86QWm70NwibM2uIt6N5b73Qx4BrJcQDWDcqCbYvId8de91 9+bM6yvI9COqL/uWrV+GY7WMIkKh1p3Y3+8iYlh+g65FOV8EObbtzXERP2Lt0J4HPw3Qg7XKd/cNQm2N IN4Bp99O3c5xP+bMX+FMFixQ3rUQp8lAhkL5KViOAuUuwbnaWmFXdqOJ6zDlmoccAlgfL9gPtGoarFjn ya+4y2OO692reMwlXHZGfPppb2aTaAe/grvj+d3jZ/0XavFhKBS3KOGG2AExz23YDG3tgOki/rz1cc4c eDVAN+Z3brXJ082JhkIPy6mHcjC6kHbwCiJMqMUYf6Vq5XHO+ZU7BvSUcPNh56bZmBN6OfASYCnm/vV0 zCuQepTMJBW+r+AD+ty4gksa/PLs1XRRyxd0Lsl9BeLM7HBsgXpgv/WZPgcOASz1PwlTXTBlWkjrL0HG Yt8XiSQEC9Br/cftAuK2cr/7C50rJVFcsJaRA4zFowXcGsD+pu1FgDMfxshAFJSTNPa5OIRIKvCoeSqT MJPEqcna/xowx/pim3PChu03Pgfw6m/DZwljZygJknYXhVqrn/CLFbgfShUnCkLSyeRuiVALON8ocr8c etr6+z6Q/t8X0b/6aIbJM8iB8vmtlP95+5pzTpkZzYvvjeNJO+/YlY47Tk5ePNe8cWxvdt6x57dznz3K VZ60FShXJgPThsA49vXssQq9zy5eYBxP3blwxvpbbZ9wE+AP1t+zwM+BtadOUmO9iHgNQxtp4DimbHPg JsDLwO+BWcDbwA8wjQbv8iIvr8KOg34Xk06l4oYdlyqdcj8H4BLZxp67IsgQqcbc3rUDs1fxPrhUf8uR pjftQsflTDvJs5KmHfdZp44pdcG+oaj9Aa5h6KPoLWKuYWjjGgFGOK4RYITjGgFGOK4RYITjGgFGOK4R YITjGgFGOP4fYzLJoyapk+0AAAAASUVORK5CYII= ###PACKDATA,FILE_END,/importbuddy/images/alert.png,importbuddy/images/alert.png ###PACKDATA,FILE_START,/importbuddy/js/importbuddy.js,importbuddy/js/importbuddy .js alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsNCglqUXVlcnkod2luZG93KS5sb2FkKGZ1 bmN0aW9uKCl7DQoJCWlmICggalF1ZXJ5KCcjcGJfaW1wb3J0YnVkZHlfd29ya2luZycpLmlzKCc6dmlz aWJsZScpICkgew0KCQkJalF1ZXJ5KCcjcGJfaW1wb3J0YnVkZHlfd29ya2luZycpLnJlcGxhY2VXaXRo KA0KCQkJCWpRdWVyeSgnI3BiX2ltcG9ydGJ1ZGR5X2JsYW5rYWxlcnQnKS5odG1sKCkucmVwbGFjZSgg JyNUSVRMRSMnLCAnUEhQIFRpbWVvdXQgb3IgRmF0YWwgRXJyb3IgT2NjdXJyZWQnICkucmVwbGFjZSgg JyNNRVNTQUdFIycsICdUaGUgcGFnZSBkaWQgbm90IGZpbmlzaCBsb2FkaW5nIGFzIGV4cGVjdGVkLiAg VGhlIG1vc3QgY29tbW9uIGNhdXNlIGZvciB0aGlzIGlzIHRoZSBQSFAgcHJvY2VzcyB0YWtpbmcgbW9y ZSB0aW1lIHRoYW4gaXQgaGFzIGJlZW4gYWxsb3dlZCBieSB5b3VyIGhvc3QgKHBocC5pbmkgc2V0dGlu ZyA8aT5tYXhfZXhlY3V0aW9uX3RpbWU8L2k+KS4gSWYgYSBQSFAgZXJyb3IgaXMgZGlzcGxheWVkIGFi b3ZlIHRoaXMgY2FuIGFsc28gY2F1c2UgdGhpcyBlcnJvci4nICkNCgkJCSk7DQoJCX0NCgl9KTsNCn0p

Ow0KDQpqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgnLnBsdWdpbmJ1 ZGR5X3RpcCcpLnRvb2x0aXAoew0KCQl0cmFjazogdHJ1ZSwNCgkJZGVsYXk6IDAsDQoJCXNob3dVUkw6 IGZhbHNlLA0KCQlzaG93Qm9keTogIiAtICIsDQoJCWZhZGU6IDI1MA0KCX0pOw0KCQ0KCWpRdWVyeSgn LnRvZ2dsZScpLmNsaWNrKGZ1bmN0aW9uKGUpIHsNCgkJalF1ZXJ5KCAnI3RvZ2dsZS0nICsgalF1ZXJ5 KHRoaXMpLmF0dHIoJ2lkJykgKS5zbGlkZVRvZ2dsZSgpOw0KCX0pOw0KCQ0KCWpRdWVyeSgnLm9wdGlv bl90b2dnbGUnKS5jaGFuZ2UoZnVuY3Rpb24oZSkgew0KCQlpZiAoalF1ZXJ5KHRoaXMpLmF0dHIoJ2No ZWNrZWQnKSkgew0KCQkJalF1ZXJ5KCcuJyArIGpRdWVyeSh0aGlzKS5hdHRyKCdpZCcpICsgJ190b2dn bGUnICkuc2xpZGVUb2dnbGUoKTsNCgkJfSBlbHNlIHsNCgkJCWpRdWVyeSgnLicgKyBqUXVlcnkodGhp cykuYXR0cignaWQnKSArICdfdG9nZ2xlJyApLnNsaWRlVG9nZ2xlKCk7DQoJCX0NCgl9KTsNCgkNCglq UXVlcnkoJyNpdGhlbWVzX215c3FsX3Rlc3QnKS5jbGljayhmdW5jdGlvbihlKSB7DQoJCWpRdWVyeSgn I2l0aGVtZXNfbG9hZGluZycpLnNsaWRlRG93bigpOw0KCQlqUXVlcnkoJyNpdGhlbWVzX2xvYWRpbmcn KS5odG1sKCAnPGltZyBzcmM9Ij9lemltZz1sb2FkaW5nLmdpZiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjEx Ij4gTG9hZGluZyDigKYnICk7DQoJCS8qDQoJCWlmICggalF1ZXJ5KCd3aXBlX2RhdGFiYXNlJykuYXR0 cignY2hlY2tlZCcpICkgew0KCQkJd2lwZV9kYXRhYmFzZSA9ICcxJzsNCgkJfSBlbHNlIHsNCgkJCXdp cGVfZGF0YWJhc2UgPSAnMCc7DQoJCX0NCgkJKi8NCgkJalF1ZXJ5LnBvc3QoJ2ltcG9ydGJ1ZGR5LnBo cCcsIHsgYWN0aW9uOiAibXlzcWxfdGVzdCIsIHNlcnZlcjogalF1ZXJ5KCcjbXlzcWxfc2VydmVyJyku dmFsKCksIG5hbWU6IGpRdWVyeSgnI215c3FsX25hbWUnKS52YWwoKSwgdXNlcjogalF1ZXJ5KCcjbXlz cWxfdXNlcicpLnZhbCgpLCBwYXNzOiBqUXVlcnkoJyNteXNxbF9wYXNzd29yZCcpLnZhbCgpLCBwcmVm aXg6IGpRdWVyeSgnI215c3FsX3ByZWZpeCcpLnZhbCgpLCBvcHRpb25zOiBqUXVlcnkoJyNwYl9vcHRp b25zJykudmFsKCksICB9LCANCgkJCWZ1bmN0aW9uKGRhdGEpIHsNCgkJCQkvL2FsZXJ0KGRhdGEpOw0K CQkJCWpRdWVyeSgnI2l0aGVtZXNfbG9hZGluZycpLmh0bWwoIGRhdGEgKTsNCgkJCQkvKg0KCQkJCWlm IChkYXRhLnN0YXR1cyE9JzEnKSB7DQoJCQkJCWFsZXJ0KCdFcnJvciBTYXZpbmcgQ2hhbmdlczogJytk YXRhLm1zZyk7DQoJCQkJfQ0KCQkJCWpRdWVyeSgnI2l0aGVtZXNfbG9hZGluZycpLmh0bWwoIGRhdGEg KTsNCgkJCQkqLw0KCQkJfQ0KCQkpOyAvLywianNvbiIpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfSk7DQoJ DQoJalF1ZXJ5KCcjcGx1Z2luYnVkZHktdGFicycpLnRhYnMoKTsNCn0pOw== ###PACKDATA,FILE_END,/importbuddy/js/importbuddy.js,importbuddy/js/importbuddy.j s ###PACKDATA,FILE_START,/importbuddy/js/jquery.js,importbuddy/js/jquery.js LyohDQogKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYxLjYuMQ0KICogaHR0cDovL2pxdWVyeS5j b20vDQogKg0KICogQ29weXJpZ2h0IDIwMTEsIEpvaG4gUmVzaWcNCiAqIER1YWwgbGljZW5zZWQgdW5k ZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLg0KICogaHR0cDovL2pxdWVyeS5vcmcv bGljZW5zZQ0KICoNCiAqIEluY2x1ZGVzIFNpenpsZS5qcw0KICogaHR0cDovL3NpenpsZWpzLmNvbS8N CiAqIENvcHlyaWdodCAyMDExLCBUaGUgRG9qbyBGb3VuZGF0aW9uDQogKiBSZWxlYXNlZCB1bmRlciB0 aGUgTUlULCBCU0QsIGFuZCBHUEwgTGljZW5zZXMuDQogKg0KICogRGF0ZTogVGh1IE1heSAxMiAxNTow NDozNiAyMDExIC0wNDAwDQogKi8NCihmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGN5KGEpe3JldHVybiBm LmlzV2luZG93KGEpP2E6YS5ub2RlVHlwZT09PTk/YS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3c6 ITF9ZnVuY3Rpb24gY3YoYSl7aWYoIWNqW2FdKXt2YXIgYj1mKCI8IithKyI+IikuYXBwZW5kVG8oImJv ZHkiKSxkPWIuY3NzKCJkaXNwbGF5Iik7Yi5yZW1vdmUoKTtpZihkPT09Im5vbmUifHxkPT09IiIpe2Nr fHwoY2s9Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjay5mcmFtZUJvcmRlcj1jay53aWR0aD1jay5o ZWlnaHQ9MCksYy5ib2R5LmFwcGVuZENoaWxkKGNrKTtpZighY2x8fCFjay5jcmVhdGVFbGVtZW50KWNs PShjay5jb250ZW50V2luZG93fHxjay5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LGNsLndyaXRlKCI8 IWRvY3R5cGU+PGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4iKTtiPWNsLmNyZWF0ZUVsZW1lbnQoYSks Y2wuYm9keS5hcHBlbmRDaGlsZChiKSxkPWYuY3NzKGIsImRpc3BsYXkiKSxjLmJvZHkucmVtb3ZlQ2hp bGQoY2spfWNqW2FdPWR9cmV0dXJuIGNqW2FdfWZ1bmN0aW9uIGN1KGEsYil7dmFyIGM9e307Zi5lYWNo KGNwLmNvbmNhdC5hcHBseShbXSxjcC5zbGljZSgwLGIpKSxmdW5jdGlvbigpe2NbdGhpc109YX0pO3Jl dHVybiBjfWZ1bmN0aW9uIGN0KCl7Y3E9Yn1mdW5jdGlvbiBjcygpe3NldFRpbWVvdXQoY3QsMCk7cmV0 dXJuIGNxPWYubm93KCl9ZnVuY3Rpb24gY2koKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3Qo Ik1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1mdW5jdGlvbiBjaCgpe3RyeXtyZXR1cm4gbmV3 IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBjYihhLGMpe2EuZGF0YUZpbHRlciYm KGM9YS5kYXRhRmlsdGVyKGMsYS5kYXRhVHlwZSkpO3ZhciBkPWEuZGF0YVR5cGVzLGU9e30sZyxoLGk9 ZC5sZW5ndGgsaixrPWRbMF0sbCxtLG4sbyxwO2ZvcihnPTE7ZzxpO2crKyl7aWYoZz09PTEpZm9yKGgg aW4gYS5jb252ZXJ0ZXJzKXR5cGVvZiBoPT0ic3RyaW5nIiYmKGVbaC50b0xvd2VyQ2FzZSgpXT1hLmNv bnZlcnRlcnNbaF0pO2w9ayxrPWRbZ107aWYoaz09PSIqIilrPWw7ZWxzZSBpZihsIT09IioiJiZsIT09 ayl7bT1sKyIgIitrLG49ZVttXXx8ZVsiKiAiK2tdO2lmKCFuKXtwPWI7Zm9yKG8gaW4gZSl7aj1vLnNw bGl0KCIgIik7aWYoalswXT09PWx8fGpbMF09PT0iKiIpe3A9ZVtqWzFdKyIgIitrXTtpZihwKXtvPWVb b10sbz09PSEwP249cDpwPT09ITAmJihuPW8pO2JyZWFrfX19fSFuJiYhcCYmZi5lcnJvcigiTm8gY29u dmVyc2lvbiBmcm9tICIrbS5yZXBsYWNlKCIgIiwiIHRvICIpKSxuIT09ITAmJihjPW4/bihjKTpwKG8o YykpKX19cmV0dXJuIGN9ZnVuY3Rpb24gY2EoYSxjLGQpe3ZhciBlPWEuY29udGVudHMsZj1hLmRhdGFU eXBlcyxnPWEucmVzcG9uc2VGaWVsZHMsaCxpLGosaztmb3IoaSBpbiBnKWkgaW4gZCYmKGNbZ1tpXV09 ZFtpXSk7d2hpbGUoZlswXT09PSIqIilmLnNoaWZ0KCksaD09PWImJihoPWEubWltZVR5cGV8fGMuZ2V0

UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpKTtpZihoKWZvcihpIGluIGUpaWYoZVtpXSYmZVtp XS50ZXN0KGgpKXtmLnVuc2hpZnQoaSk7YnJlYWt9aWYoZlswXWluIGQpaj1mWzBdO2Vsc2V7Zm9yKGkg aW4gZCl7aWYoIWZbMF18fGEuY29udmVydGVyc1tpKyIgIitmWzBdXSl7aj1pO2JyZWFrfWt8fChrPWkp fWo9anx8a31pZihqKXtqIT09ZlswXSYmZi51bnNoaWZ0KGopO3JldHVybiBkW2pdfX1mdW5jdGlvbiBi XyhhLGIsYyxkKXtpZihmLmlzQXJyYXkoYikpZi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxiRi50ZXN0 KGEpP2QoYSxlKTpiXyhhKyJbIisodHlwZW9mIGU9PSJvYmplY3QifHxmLmlzQXJyYXkoZSk/YjoiIikr Il0iLGUsYyxkKX0pO2Vsc2UgaWYoIWMmJmIhPW51bGwmJnR5cGVvZiBiPT0ib2JqZWN0Iilmb3IodmFy IGUgaW4gYiliXyhhKyJbIitlKyJdIixiW2VdLGMsZCk7ZWxzZSBkKGEsYil9ZnVuY3Rpb24gYiQoYSxj LGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0w LGo9aD9oLmxlbmd0aDowLGs9YT09PWJVLGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQs ZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwp LGw9YiQoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9YiQoYSxjLGQsZSwiKiIsZykp O3JldHVybiBsfWZ1bmN0aW9uIGJaKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3Ry aW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCku c3BsaXQoYlEpLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50 ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQi OiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBiRChhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/Yng6YnksZT1i PT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0O2lmKGM9PT0iYm9yZGVyIilyZXR1 cm4gZTtmLmVhY2goZCxmdW5jdGlvbigpe2N8fChlLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmci K3RoaXMpKXx8MCksYz09PSJtYXJnaW4iP2UrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luIit0aGlz KSl8fDA6ZS09cGFyc2VGbG9hdChmLmNzcyhhLCJib3JkZXIiK3RoaXMrIldpZHRoIikpfHwwfSk7cmV0 dXJuIGV9ZnVuY3Rpb24gYm4oYSxiKXtiLnNyYz9mLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRh VHlwZToic2NyaXB0In0pOmYuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVy SFRNTHx8IiIpLnJlcGxhY2UoYmYsIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5y ZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBibShhKXtmLm5vZGVOYW1lKGEsImlucHV0Iik/YmwoYSk6YS5n ZXRFbGVtZW50c0J5VGFnTmFtZSYmZi5ncmVwKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iiks YmwpfWZ1bmN0aW9uIGJsKGEpe2lmKGEudHlwZT09PSJjaGVja2JveCJ8fGEudHlwZT09PSJyYWRpbyIp YS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWR9ZnVuY3Rpb24gYmsoYSl7cmV0dXJuImdldEVsZW1lbnRz QnlUYWdOYW1lImluIGE/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOiJxdWVyeVNlbGVjdG9yQWxs ImluIGE/YS5xdWVyeVNlbGVjdG9yQWxsKCIqIik6W119ZnVuY3Rpb24gYmooYSxiKXt2YXIgYztpZihi Lm5vZGVUeXBlPT09MSl7Yi5jbGVhckF0dHJpYnV0ZXMmJmIuY2xlYXJBdHRyaWJ1dGVzKCksYi5tZXJn ZUF0dHJpYnV0ZXMmJmIubWVyZ2VBdHRyaWJ1dGVzKGEpLGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp O2lmKGM9PT0ib2JqZWN0IiliLm91dGVySFRNTD1hLm91dGVySFRNTDtlbHNlIGlmKGMhPT0iaW5wdXQi fHxhLnR5cGUhPT0iY2hlY2tib3giJiZhLnR5cGUhPT0icmFkaW8iKXtpZihjPT09Im9wdGlvbiIpYi5z ZWxlY3RlZD1hLmRlZmF1bHRTZWxlY3RlZDtlbHNlIGlmKGM9PT0iaW5wdXQifHxjPT09InRleHRhcmVh IiliLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZX1lbHNlIGEuY2hlY2tlZCYmKGIuZGVmYXVsdENo ZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCksYi52YWx1ZSE9PWEudmFsdWUmJihiLnZhbHVlPWEudmFs dWUpO2IucmVtb3ZlQXR0cmlidXRlKGYuZXhwYW5kbyl9fWZ1bmN0aW9uIGJpKGEsYil7aWYoYi5ub2Rl VHlwZT09PTEmJiEhZi5oYXNEYXRhKGEpKXt2YXIgYz1mLmV4cGFuZG8sZD1mLmRhdGEoYSksZT1mLmRh dGEoYixkKTtpZihkPWRbY10pe3ZhciBnPWQuZXZlbnRzO2U9ZVtjXT1mLmV4dGVuZCh7fSxkKTtpZihn KXtkZWxldGUgZS5oYW5kbGUsZS5ldmVudHM9e307Zm9yKHZhciBoIGluIGcpZm9yKHZhciBpPTAsaj1n W2hdLmxlbmd0aDtpPGo7aSsrKWYuZXZlbnQuYWRkKGIsaCsoZ1toXVtpXS5uYW1lc3BhY2U/Ii4iOiIi KStnW2hdW2ldLm5hbWVzcGFjZSxnW2hdW2ldLGdbaF1baV0uZGF0YSl9fX19ZnVuY3Rpb24gYmgoYSxi KXtyZXR1cm4gZi5ub2RlTmFtZShhLCJ0YWJsZSIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5 IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5Iikp OmF9ZnVuY3Rpb24gWChhLGIsYyl7Yj1ifHwwO2lmKGYuaXNGdW5jdGlvbihiKSlyZXR1cm4gZi5ncmVw KGEsZnVuY3Rpb24oYSxkKXt2YXIgZT0hIWIuY2FsbChhLGQsYSk7cmV0dXJuIGU9PT1jfSk7aWYoYi5u b2RlVHlwZSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT09PWI9PT1jfSk7aWYo dHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgZD1mLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2Rl VHlwZT09PTF9KTtpZihTLnRlc3QoYikpcmV0dXJuIGYuZmlsdGVyKGIsZCwhYyk7Yj1mLmZpbHRlcihi LGQpfXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiBmLmluQXJyYXkoYSxiKT49MD09 PWN9KX1mdW5jdGlvbiBXKGEpe3JldHVybiFhfHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9k ZVR5cGU9PT0xMX1mdW5jdGlvbiBPKGEsYil7cmV0dXJuKGEmJmEhPT0iKiI/YSsiLiI6IiIpK2IucmVw bGFjZShBLCJgIikucmVwbGFjZShCLCImIil9ZnVuY3Rpb24gTihhKXt2YXIgYixjLGQsZSxnLGgsaSxq LGssbCxtLG4sbyxwPVtdLHE9W10scj1mLl9kYXRhKHRoaXMsImV2ZW50cyIpO2lmKCEoYS5saXZlRmly ZWQ9PT10aGlzfHwhcnx8IXIubGl2ZXx8YS50YXJnZXQuZGlzYWJsZWR8fGEuYnV0dG9uJiZhLnR5cGU9 PT0iY2xpY2siKSl7YS5uYW1lc3BhY2UmJihuPW5ldyBSZWdFeHAoIihefFxcLikiK2EubmFtZXNwYWNl LnNwbGl0KCIuIikuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIikpLGEubGl2ZUZpcmVkPXRo aXM7dmFyIHM9ci5saXZlLnNsaWNlKDApO2ZvcihpPTA7aTxzLmxlbmd0aDtpKyspZz1zW2ldLGcub3Jp Z1R5cGUucmVwbGFjZSh5LCIiKT09PWEudHlwZT9xLnB1c2goZy5zZWxlY3Rvcik6cy5zcGxpY2UoaS0t

LDEpO2U9ZihhLnRhcmdldCkuY2xvc2VzdChxLGEuY3VycmVudFRhcmdldCk7Zm9yKGo9MCxrPWUubGVu Z3RoO2o8aztqKyspe209ZVtqXTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXtnPXNbaV07aWYobS5zZWxl Y3Rvcj09PWcuc2VsZWN0b3ImJighbnx8bi50ZXN0KGcubmFtZXNwYWNlKSkmJiFtLmVsZW0uZGlzYWJs ZWQpe2g9bS5lbGVtLGQ9bnVsbDtpZihnLnByZVR5cGU9PT0ibW91c2VlbnRlciJ8fGcucHJlVHlwZT09 PSJtb3VzZWxlYXZlIilhLnR5cGU9Zy5wcmVUeXBlLGQ9ZihhLnJlbGF0ZWRUYXJnZXQpLmNsb3Nlc3Qo Zy5zZWxlY3RvcilbMF0sZCYmZi5jb250YWlucyhoLGQpJiYoZD1oKTsoIWR8fGQhPT1oKSYmcC5wdXNo KHtlbGVtOmgsaGFuZGxlT2JqOmcsbGV2ZWw6bS5sZXZlbH0pfX19Zm9yKGo9MCxrPXAubGVuZ3RoO2o8 aztqKyspe2U9cFtqXTtpZihjJiZlLmxldmVsPmMpYnJlYWs7YS5jdXJyZW50VGFyZ2V0PWUuZWxlbSxh LmRhdGE9ZS5oYW5kbGVPYmouZGF0YSxhLmhhbmRsZU9iaj1lLmhhbmRsZU9iaixvPWUuaGFuZGxlT2Jq Lm9yaWdIYW5kbGVyLmFwcGx5KGUuZWxlbSxhcmd1bWVudHMpO2lmKG89PT0hMXx8YS5pc1Byb3BhZ2F0 aW9uU3RvcHBlZCgpKXtjPWUubGV2ZWwsbz09PSExJiYoYj0hMSk7aWYoYS5pc0ltbWVkaWF0ZVByb3Bh Z2F0aW9uU3RvcHBlZCgpKWJyZWFrfX1yZXR1cm4gYn19ZnVuY3Rpb24gTChhLGMsZCl7dmFyIGU9Zi5l eHRlbmQoe30sZFswXSk7ZS50eXBlPWEsZS5vcmlnaW5hbEV2ZW50PXt9LGUubGl2ZUZpcmVkPWIsZi5l dmVudC5oYW5kbGUuY2FsbChjLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmRbMF0ucHJldmVudERl ZmF1bHQoKX1mdW5jdGlvbiBGKCl7cmV0dXJuITB9ZnVuY3Rpb24gRSgpe3JldHVybiExfWZ1bmN0aW9u IG0oYSxjLGQpe3ZhciBlPWMrImRlZmVyIixnPWMrInF1ZXVlIixoPWMrIm1hcmsiLGk9Zi5kYXRhKGEs ZSxiLCEwKTtpJiYoZD09PSJxdWV1ZSJ8fCFmLmRhdGEoYSxnLGIsITApKSYmKGQ9PT0ibWFyayJ8fCFm LmRhdGEoYSxoLGIsITApKSYmc2V0VGltZW91dChmdW5jdGlvbigpeyFmLmRhdGEoYSxnLGIsITApJiYh Zi5kYXRhKGEsaCxiLCEwKSYmKGYucmVtb3ZlRGF0YShhLGUsITApLGkucmVzb2x2ZSgpKX0sMCl9ZnVu Y3Rpb24gbChhKXtmb3IodmFyIGIgaW4gYSlpZihiIT09InRvSlNPTiIpcmV0dXJuITE7cmV0dXJuITB9 ZnVuY3Rpb24gayhhLGMsZCl7aWYoZD09PWImJmEubm9kZVR5cGU9PT0xKXt2YXIgZT0iZGF0YS0iK2Mu cmVwbGFjZShqLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7ZD1hLmdldEF0dHJpYnV0ZShlKTtpZih0eXBl b2YgZD09InN0cmluZyIpe3RyeXtkPWQ9PT0idHJ1ZSI/ITA6ZD09PSJmYWxzZSI/ITE6ZD09PSJudWxs Ij9udWxsOmYuaXNOYU4oZCk/aS50ZXN0KGQpP2YucGFyc2VKU09OKGQpOmQ6cGFyc2VGbG9hdChkKX1j YXRjaChnKXt9Zi5kYXRhKGEsYyxkKX1lbHNlIGQ9Yn1yZXR1cm4gZH12YXIgYz1hLmRvY3VtZW50LGQ9 YS5uYXZpZ2F0b3IsZT1hLmxvY2F0aW9uLGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBIKCl7aWYoIWUuaXNS ZWFkeSl7dHJ5e2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7c2V0VGlt ZW91dChILDEpO3JldHVybn1lLnJlYWR5KCl9fXZhciBlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBl LmZuLmluaXQoYSxiLGgpfSxmPWEualF1ZXJ5LGc9YS4kLGgsaT0vXig/OltePF0qKDxbXHdcV10rPilb Xj5dKiR8IyhbXHdcLV0qKSQpLyxqPS9cUy8saz0vXlxzKy8sbD0vXHMrJC8sbT0vXGQvLG49L148KFx3 KylccypcLz8+KD86PFwvXDE+KT8kLyxvPS9eW1xdLDp7fVxzXSokLyxwPS9cXCg/OlsiXFxcL2JmbnJ0 XXx1WzAtOWEtZkEtRl17NH0pL2cscT0vIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCso PzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2cscj0vKD86Xnw6fCwpKD86XHMqXFspKy9nLHM9Lyh3 ZWJraXQpWyBcL10oW1x3Ll0rKS8sdD0vKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8s dT0vKG1zaWUpIChbXHcuXSspLyx2PS8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKykpPy8sdz1kLnVz ZXJBZ2VudCx4LHkseixBPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsQj1PYmplY3QucHJvdG90eXBl Lmhhc093blByb3BlcnR5LEM9QXJyYXkucHJvdG90eXBlLnB1c2gsRD1BcnJheS5wcm90b3R5cGUuc2xp Y2UsRT1TdHJpbmcucHJvdG90eXBlLnRyaW0sRj1BcnJheS5wcm90b3R5cGUuaW5kZXhPZixHPXt9O2Uu Zm49ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaW5pdDpmdW5jdGlvbihhLGQsZil7dmFyIGcsaCxq LGs7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YSx0 aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFkJiZjLmJvZHkpe3RoaXMuY29u dGV4dD1jLHRoaXNbMF09Yy5ib2R5LHRoaXMuc2VsZWN0b3I9YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0 aGlzfWlmKHR5cGVvZiBhPT0ic3RyaW5nIil7YS5jaGFyQXQoMCkhPT0iPCJ8fGEuY2hhckF0KGEubGVu Z3RoLTEpIT09Ij4ifHxhLmxlbmd0aDwzP2c9aS5leGVjKGEpOmc9W251bGwsYSxudWxsXTtpZihnJiYo Z1sxXXx8IWQpKXtpZihnWzFdKXtkPWQgaW5zdGFuY2VvZiBlP2RbMF06ZCxrPWQ/ZC5vd25lckRvY3Vt ZW50fHxkOmMsaj1uLmV4ZWMoYSksaj9lLmlzUGxhaW5PYmplY3QoZCk/KGE9W2MuY3JlYXRlRWxlbWVu dChqWzFdKV0sZS5mbi5hdHRyLmNhbGwoYSxkLCEwKSk6YT1bay5jcmVhdGVFbGVtZW50KGpbMV0pXToo aj1lLmJ1aWxkRnJhZ21lbnQoW2dbMV1dLFtrXSksYT0oai5jYWNoZWFibGU/ZS5jbG9uZShqLmZyYWdt ZW50KTpqLmZyYWdtZW50KS5jaGlsZE5vZGVzKTtyZXR1cm4gZS5tZXJnZSh0aGlzLGEpfWg9Yy5nZXRF bGVtZW50QnlJZChnWzJdKTtpZihoJiZoLnBhcmVudE5vZGUpe2lmKGguaWQhPT1nWzJdKXJldHVybiBm LmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWh9dGhpcy5jb250ZXh0PWMsdGhpcy5zZWxlY3Rv cj1hO3JldHVybiB0aGlzfXJldHVybiFkfHxkLmpxdWVyeT8oZHx8ZikuZmluZChhKTp0aGlzLmNvbnN0 cnVjdG9yKGQpLmZpbmQoYSl9aWYoZS5pc0Z1bmN0aW9uKGEpKXJldHVybiBmLnJlYWR5KGEpO2Euc2Vs ZWN0b3IhPT1iJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQp O3JldHVybiBlLm1ha2VBcnJheShhLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuNi4xIixsZW5n dGg6MCxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx0b0FycmF5OmZ1bmN0aW9uKCl7 cmV0dXJuIEQuY2FsbCh0aGlzLDApfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/dGhpcy50 b0FycmF5KCk6YTwwP3RoaXNbdGhpcy5sZW5ndGgrYV06dGhpc1thXX0scHVzaFN0YWNrOmZ1bmN0aW9u KGEsYixjKXt2YXIgZD10aGlzLmNvbnN0cnVjdG9yKCk7ZS5pc0FycmF5KGEpP0MuYXBwbHkoZCxhKTpl Lm1lcmdlKGQsYSksZC5wcmV2T2JqZWN0PXRoaXMsZC5jb250ZXh0PXRoaXMuY29udGV4dCxiPT09ImZp

bmQiP2Quc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhpcy5zZWxlY3Rvcj8iICI6IiIpK2M6YiYmKGQu c2VsZWN0b3I9dGhpcy5zZWxlY3RvcisiLiIrYisiKCIrYysiKSIpO3JldHVybiBkfSxlYWNoOmZ1bmN0 aW9uKGEsYil7cmV0dXJuIGUuZWFjaCh0aGlzLGEsYil9LHJlYWR5OmZ1bmN0aW9uKGEpe2UuYmluZFJl YWR5KCkseS5kb25lKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXtyZXR1cm4gYT09PS0xP3Ro aXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLCthKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlz LmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigp e3JldHVybiB0aGlzLnB1c2hTdGFjayhELmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLEQuY2Fs bChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3Rh Y2soZS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxlbmQ6ZnVu Y3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNo OkMsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LGUuZm4uaW5pdC5wcm90b3R5cGU9ZS5mbixl LmV4dGVuZD1lLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGMsZCxmLGcsaCxpPWFyZ3VtZW50c1sw XXx8e30saj0xLGs9YXJndW1lbnRzLmxlbmd0aCxsPSExO3R5cGVvZiBpPT0iYm9vbGVhbiImJihsPWks aT1hcmd1bWVudHNbMV18fHt9LGo9MiksdHlwZW9mIGkhPSJvYmplY3QiJiYhZS5pc0Z1bmN0aW9uKGkp JiYoaT17fSksaz09PWomJihpPXRoaXMsLS1qKTtmb3IoO2o8aztqKyspaWYoKGE9YXJndW1lbnRzW2pd KSE9bnVsbClmb3IoYyBpbiBhKXtkPWlbY10sZj1hW2NdO2lmKGk9PT1mKWNvbnRpbnVlO2wmJmYmJihl LmlzUGxhaW5PYmplY3QoZil8fChnPWUuaXNBcnJheShmKSkpPyhnPyhnPSExLGg9ZCYmZS5pc0FycmF5 KGQpP2Q6W10pOmg9ZCYmZS5pc1BsYWluT2JqZWN0KGQpP2Q6e30saVtjXT1lLmV4dGVuZChsLGgsZikp OmYhPT1iJiYoaVtjXT1mKX1yZXR1cm4gaX0sZS5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYil7 YS4kPT09ZSYmKGEuJD1nKSxiJiZhLmpRdWVyeT09PWUmJihhLmpRdWVyeT1mKTtyZXR1cm4gZX0saXNS ZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9lLnJlYWR5V2FpdCsrOmUu cmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITAmJiEtLWUucmVhZHlXYWl0fHxhIT09 ITAmJiFlLmlzUmVhZHkpe2lmKCFjLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtlLmlz UmVhZHk9ITA7aWYoYSE9PSEwJiYtLWUucmVhZHlXYWl0PjApcmV0dXJuO3kucmVzb2x2ZVdpdGgoYyxb ZV0pLGUuZm4udHJpZ2dlciYmZShjKS50cmlnZ2VyKCJyZWFkeSIpLnVuYmluZCgicmVhZHkiKX19LGJp bmRSZWFkeTpmdW5jdGlvbigpe2lmKCF5KXt5PWUuX0RlZmVycmVkKCk7aWYoYy5yZWFkeVN0YXRlPT09 ImNvbXBsZXRlIilyZXR1cm4gc2V0VGltZW91dChlLnJlYWR5LDEpO2lmKGMuYWRkRXZlbnRMaXN0ZW5l ciljLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHosITEpLGEuYWRkRXZlbnRMaXN0 ZW5lcigibG9hZCIsZS5yZWFkeSwhMSk7ZWxzZSBpZihjLmF0dGFjaEV2ZW50KXtjLmF0dGFjaEV2ZW50 KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHopLGEuYXR0YWNoRXZlbnQoIm9ubG9hZCIsZS5yZWFkeSk7dmFy IGI9ITE7dHJ5e2I9YS5mcmFtZUVsZW1lbnQ9PW51bGx9Y2F0Y2goZCl7fWMuZG9jdW1lbnRFbGVtZW50 LmRvU2Nyb2xsJiZiJiZIKCl9fX0saXNGdW5jdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gZS50eXBlKGEp PT09ImZ1bmN0aW9uIn0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4gZS50 eXBlKGEpPT09ImFycmF5In0saXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJnR5cGVvZiBhPT0i b2JqZWN0IiYmInNldEludGVydmFsImluIGF9LGlzTmFOOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxs fHwhbS50ZXN0KGEpfHxpc05hTihhKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD9TdHJp bmcoYSk6R1tBLmNhbGwoYSldfHwib2JqZWN0In0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXtpZigh YXx8ZS50eXBlKGEpIT09Im9iamVjdCJ8fGEubm9kZVR5cGV8fGUuaXNXaW5kb3coYSkpcmV0dXJuITE7 aWYoYS5jb25zdHJ1Y3RvciYmIUIuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhQi5jYWxsKGEuY29uc3Ry dWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITE7dmFyIGM7Zm9yKGMgaW4gYSk7 cmV0dXJuIGM9PT1ifHxCLmNhbGwoYSxjKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFy IGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgYX0scGFyc2VK U09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nInx8IWIpcmV0dXJuIG51bGw7Yj1lLnRy aW0oYik7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKTtpZihvLnRl c3QoYi5yZXBsYWNlKHAsIkAiKS5yZXBsYWNlKHEsIl0iKS5yZXBsYWNlKHIsIiIpKSlyZXR1cm4obmV3 IEZ1bmN0aW9uKCJyZXR1cm4gIitiKSkoKTtlLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LHBhcnNl WE1MOmZ1bmN0aW9uKGIsYyxkKXthLkRPTVBhcnNlcj8oZD1uZXcgRE9NUGFyc2VyLGM9ZC5wYXJzZUZy b21TdHJpbmcoYiwidGV4dC94bWwiKSk6KGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxE T00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKSxkPWMuZG9jdW1lbnRFbGVtZW50LCghZHx8 IWQubm9kZU5hbWV8fGQubm9kZU5hbWU9PT0icGFyc2VyZXJyb3IiKSYmZS5lcnJvcigiSW52YWxpZCBY TUw6ICIrYik7cmV0dXJuIGN9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7 YiYmai50ZXN0KGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSko Yil9LG5vZGVOYW1lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9V cHBlckNhc2UoKT09PWIudG9VcHBlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZz0w LGg9YS5sZW5ndGgsaT1oPT09Ynx8ZS5pc0Z1bmN0aW9uKGEpO2lmKGQpe2lmKGkpe2ZvcihmIGluIGEp aWYoYy5hcHBseShhW2ZdLGQpPT09ITEpYnJlYWt9ZWxzZSBmb3IoO2c8aDspaWYoYy5hcHBseShhW2cr K10sZCk9PT0hMSlicmVha31lbHNlIGlmKGkpe2ZvcihmIGluIGEpaWYoYy5jYWxsKGFbZl0sZixhW2Zd KT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuY2FsbChhW2ddLGcsYVtnKytdKT09PSExKWJy ZWFrO3JldHVybiBhfSx0cmltOkU/ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6RS5jYWxsKGEp fTpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjooYSsiIikucmVwbGFjZShrLCIiKS5yZXBsYWNl

KGwsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxbXTtpZihhIT1udWxsKXt2YXIg ZD1lLnR5cGUoYSk7YS5sZW5ndGg9PW51bGx8fGQ9PT0ic3RyaW5nInx8ZD09PSJmdW5jdGlvbiJ8fGQ9 PT0icmVnZXhwInx8ZS5pc1dpbmRvdyhhKT9DLmNhbGwoYyxhKTplLm1lcmdlKGMsYSl9cmV0dXJuIGN9 LGluQXJyYXk6ZnVuY3Rpb24oYSxiKXtpZihGKXJldHVybiBGLmNhbGwoYixhKTtmb3IodmFyIGM9MCxk PWIubGVuZ3RoO2M8ZDtjKyspaWYoYltjXT09PWEpcmV0dXJuIGM7cmV0dXJuLTF9LG1lcmdlOmZ1bmN0 aW9uKGEsYyl7dmFyIGQ9YS5sZW5ndGgsZT0wO2lmKHR5cGVvZiBjLmxlbmd0aD09Im51bWJlciIpZm9y KHZhciBmPWMubGVuZ3RoO2U8ZjtlKyspYVtkKytdPWNbZV07ZWxzZSB3aGlsZShjW2VdIT09YilhW2Qr K109Y1tlKytdO2EubGVuZ3RoPWQ7cmV0dXJuIGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtd LGU7Yz0hIWM7Zm9yKHZhciBmPTAsZz1hLmxlbmd0aDtmPGc7ZisrKWU9ISFiKGFbZl0sZiksYyE9PWUm JmQucHVzaChhW2ZdKTtyZXR1cm4gZH0sbWFwOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZixnLGg9W10saT0w LGo9YS5sZW5ndGgsaz1hIGluc3RhbmNlb2YgZXx8aiE9PWImJnR5cGVvZiBqPT0ibnVtYmVyIiYmKGo+ MCYmYVswXSYmYVtqLTFdfHxqPT09MHx8ZS5pc0FycmF5KGEpKTtpZihrKWZvcig7aTxqO2krKylmPWMo YVtpXSxpLGQpLGYhPW51bGwmJihoW2gubGVuZ3RoXT1mKTtlbHNlIGZvcihnIGluIGEpZj1jKGFbZ10s ZyxkKSxmIT1udWxsJiYoaFtoLmxlbmd0aF09Zik7cmV0dXJuIGguY29uY2F0LmFwcGx5KFtdLGgpfSxn dWlkOjEscHJveHk6ZnVuY3Rpb24oYSxjKXtpZih0eXBlb2YgYz09InN0cmluZyIpe3ZhciBkPWFbY107 Yz1hLGE9ZH1pZighZS5pc0Z1bmN0aW9uKGEpKXJldHVybiBiO3ZhciBmPUQuY2FsbChhcmd1bWVudHMs MiksZz1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGMsZi5jb25jYXQoRC5jYWxsKGFyZ3VtZW50cykp KX07Zy5ndWlkPWEuZ3VpZD1hLmd1aWR8fGcuZ3VpZHx8ZS5ndWlkKys7cmV0dXJuIGd9LGFjY2Vzczpm dW5jdGlvbihhLGMsZCxmLGcsaCl7dmFyIGk9YS5sZW5ndGg7aWYodHlwZW9mIGM9PSJvYmplY3QiKXtm b3IodmFyIGogaW4gYyllLmFjY2VzcyhhLGosY1tqXSxmLGcsZCk7cmV0dXJuIGF9aWYoZCE9PWIpe2Y9 IWgmJmYmJmUuaXNGdW5jdGlvbihkKTtmb3IodmFyIGs9MDtrPGk7aysrKWcoYVtrXSxjLGY/ZC5jYWxs KGFba10sayxnKGFba10sYykpOmQsaCk7cmV0dXJuIGF9cmV0dXJuIGk/ZyhhWzBdLGMpOmJ9LG5vdzpm dW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfSx1YU1hdGNoOmZ1bmN0aW9uKGEpe2E9 YS50b0xvd2VyQ2FzZSgpO3ZhciBiPXMuZXhlYyhhKXx8dC5leGVjKGEpfHx1LmV4ZWMoYSl8fGEuaW5k ZXhPZigiY29tcGF0aWJsZSIpPDAmJnYuZXhlYyhhKXx8W107cmV0dXJue2Jyb3dzZXI6YlsxXXx8IiIs dmVyc2lvbjpiWzJdfHwiMCJ9fSxzdWI6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyl7cmV0dXJuIG5l dyBhLmZuLmluaXQoYixjKX1lLmV4dGVuZCghMCxhLHRoaXMpLGEuc3VwZXJjbGFzcz10aGlzLGEuZm49 YS5wcm90b3R5cGU9dGhpcygpLGEuZm4uY29uc3RydWN0b3I9YSxhLnN1Yj10aGlzLnN1YixhLmZuLmlu aXQ9ZnVuY3Rpb24oZCxmKXtmJiZmIGluc3RhbmNlb2YgZSYmIShmIGluc3RhbmNlb2YgYSkmJihmPWEo ZikpO3JldHVybiBlLmZuLmluaXQuY2FsbCh0aGlzLGQsZixiKX0sYS5mbi5pbml0LnByb3RvdHlwZT1h LmZuO3ZhciBiPWEoYyk7cmV0dXJuIGF9LGJyb3dzZXI6e319KSxlLmVhY2goIkJvb2xlYW4gTnVtYmVy IFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIiksZnVuY3Rp b24oYSxiKXtHWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pLHg9ZS51YU1hdGNoKHcp LHguYnJvd3NlciYmKGUuYnJvd3Nlclt4LmJyb3dzZXJdPSEwLGUuYnJvd3Nlci52ZXJzaW9uPXgudmVy c2lvbiksZS5icm93c2VyLndlYmtpdCYmKGUuYnJvd3Nlci5zYWZhcmk9ITApLGoudGVzdCgiwqAiKSYm KGs9L15bXHNceEEwXSsvLGw9L1tcc1x4QTBdKyQvKSxoPWUoYyksYy5hZGRFdmVudExpc3RlbmVyP3o9 ZnVuY3Rpb24oKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHosITEpLGUu cmVhZHkoKX06Yy5hdHRhY2hFdmVudCYmKHo9ZnVuY3Rpb24oKXtjLnJlYWR5U3RhdGU9PT0iY29tcGxl dGUiJiYoYy5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIix6KSxlLnJlYWR5KCkpfSk7cmV0 dXJuIGV9KCksZz0iZG9uZSBmYWlsIGlzUmVzb2x2ZWQgaXNSZWplY3RlZCBwcm9taXNlIHRoZW4gYWx3 YXlzIHBpcGUiLnNwbGl0KCIgIiksaD1bXS5zbGljZTtmLmV4dGVuZCh7X0RlZmVycmVkOmZ1bmN0aW9u KCl7dmFyIGE9W10sYixjLGQsZT17ZG9uZTpmdW5jdGlvbigpe2lmKCFkKXt2YXIgYz1hcmd1bWVudHMs ZyxoLGksaixrO2ImJihrPWIsYj0wKTtmb3IoZz0wLGg9Yy5sZW5ndGg7ZzxoO2crKylpPWNbZ10saj1m LnR5cGUoaSksaj09PSJhcnJheSI/ZS5kb25lLmFwcGx5KGUsaSk6aj09PSJmdW5jdGlvbiImJmEucHVz aChpKTtrJiZlLnJlc29sdmVXaXRoKGtbMF0sa1sxXSl9cmV0dXJuIHRoaXN9LHJlc29sdmVXaXRoOmZ1 bmN0aW9uKGUsZil7aWYoIWQmJiFiJiYhYyl7Zj1mfHxbXSxjPTE7dHJ5e3doaWxlKGFbMF0pYS5zaGlm dCgpLmFwcGx5KGUsZil9ZmluYWxseXtiPVtlLGZdLGM9MH19cmV0dXJuIHRoaXN9LHJlc29sdmU6ZnVu Y3Rpb24oKXtlLnJlc29sdmVXaXRoKHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30saXNSZXNvbHZl ZDpmdW5jdGlvbigpe3JldHVybiEhY3x8ISFifSxjYW5jZWw6ZnVuY3Rpb24oKXtkPTEsYT1bXTtyZXR1 cm4gdGhpc319O3JldHVybiBlfSxEZWZlcnJlZDpmdW5jdGlvbihhKXt2YXIgYj1mLl9EZWZlcnJlZCgp LGM9Zi5fRGVmZXJyZWQoKSxkO2YuZXh0ZW5kKGIse3RoZW46ZnVuY3Rpb24oYSxjKXtiLmRvbmUoYSku ZmFpbChjKTtyZXR1cm4gdGhpc30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGIuZG9uZS5hcHBseShi LGFyZ3VtZW50cykuZmFpbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGZhaWw6Yy5kb25lLHJlamVjdFdp dGg6Yy5yZXNvbHZlV2l0aCxyZWplY3Q6Yy5yZXNvbHZlLGlzUmVqZWN0ZWQ6Yy5pc1Jlc29sdmVkLHBp cGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZi5EZWZlcnJlZChmdW5jdGlvbihkKXtmLmVhY2goe2RvbmU6 W2EsInJlc29sdmUiXSxmYWlsOltjLCJyZWplY3QiXX0sZnVuY3Rpb24oYSxjKXt2YXIgZT1jWzBdLGc9 Y1sxXSxoO2YuaXNGdW5jdGlvbihlKT9iW2FdKGZ1bmN0aW9uKCl7aD1lLmFwcGx5KHRoaXMsYXJndW1l bnRzKSxoJiZmLmlzRnVuY3Rpb24oaC5wcm9taXNlKT9oLnByb21pc2UoKS50aGVuKGQucmVzb2x2ZSxk LnJlamVjdCk6ZFtnXShoKX0pOmJbYV0oZFtnXSl9KX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlv bihhKXtpZihhPT1udWxsKXtpZihkKXJldHVybiBkO2Q9YT17fX12YXIgYz1nLmxlbmd0aDt3aGlsZShj

LS0pYVtnW2NdXT1iW2dbY11dO3JldHVybiBhfX0pLGIuZG9uZShjLmNhbmNlbCkuZmFpbChiLmNhbmNl bCksZGVsZXRlIGIuY2FuY2VsLGEmJmEuY2FsbChiLGIpO3JldHVybiBifSx3aGVuOmZ1bmN0aW9uKGEp e2Z1bmN0aW9uIGkoYSl7cmV0dXJuIGZ1bmN0aW9uKGMpe2JbYV09YXJndW1lbnRzLmxlbmd0aD4xP2gu Y2FsbChhcmd1bWVudHMsMCk6YywtLWV8fGcucmVzb2x2ZVdpdGgoZyxoLmNhbGwoYiwwKSl9fXZhciBi PWFyZ3VtZW50cyxjPTAsZD1iLmxlbmd0aCxlPWQsZz1kPD0xJiZhJiZmLmlzRnVuY3Rpb24oYS5wcm9t aXNlKT9hOmYuRGVmZXJyZWQoKTtpZihkPjEpe2Zvcig7YzxkO2MrKyliW2NdJiZmLmlzRnVuY3Rpb24o YltjXS5wcm9taXNlKT9iW2NdLnByb21pc2UoKS50aGVuKGkoYyksZy5yZWplY3QpOi0tZTtlfHxnLnJl c29sdmVXaXRoKGcsYil9ZWxzZSBnIT09YSYmZy5yZXNvbHZlV2l0aChnLGQ/W2FdOltdKTtyZXR1cm4g Zy5wcm9taXNlKCl9fSksZi5zdXBwb3J0PWZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJk aXYiKSxiPWMuZG9jdW1lbnRFbGVtZW50LGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO2Euc2V0 QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0IiksYS5pbm5lckhUTUw9IiAgIDxsaW5rLz48dGFibGU+PC90 YWJsZT48YSBocmVmPScvYScgc3R5bGU9J3RvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41NTsnPmE8 L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxl PWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtpZighZHx8IWQubGVuZ3RofHwhZSlyZXR1cm57 fTtmPWMuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZz1mLmFwcGVuZENoaWxkKGMuY3JlYXRlRWxlbWVu dCgib3B0aW9uIikpLGg9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxqPXtsZWFkaW5n V2hpdGVzcGFjZTphLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFhLmdldEVsZW1lbnRzQnlU YWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhYS5nZXRFbGVtZW50c0J5VGFnTmFt ZSgibGluayIpLmxlbmd0aCxzdHlsZTovdG9wLy50ZXN0KGUuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxo cmVmTm9ybWFsaXplZDplLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41NSQv LnRlc3QoZS5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWUuc3R5bGUuY3NzRmxvYXQsY2hlY2tPbjpo LnZhbHVlPT09Im9uIixvcHRTZWxlY3RlZDpnLnNlbGVjdGVkLGdldFNldEF0dHJpYnV0ZTphLmNsYXNz TmFtZSE9PSJ0IixzdWJtaXRCdWJibGVzOiEwLGNoYW5nZUJ1YmJsZXM6ITAsZm9jdXNpbkJ1YmJsZXM6 ITEsZGVsZXRlRXhwYW5kbzohMCxub0Nsb25lRXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDoh MSxzaHJpbmtXcmFwQmxvY2tzOiExLHJlbGlhYmxlTWFyZ2luUmlnaHQ6ITB9LGguY2hlY2tlZD0hMCxq Lm5vQ2xvbmVDaGVja2VkPWguY2xvbmVOb2RlKCEwKS5jaGVja2VkLGYuZGlzYWJsZWQ9ITAsai5vcHRE aXNhYmxlZD0hZy5kaXNhYmxlZDt0cnl7ZGVsZXRlIGEudGVzdH1jYXRjaChzKXtqLmRlbGV0ZUV4cGFu ZG89ITF9IWEuYWRkRXZlbnRMaXN0ZW5lciYmYS5hdHRhY2hFdmVudCYmYS5maXJlRXZlbnQmJihhLmF0 dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbiBiKCl7ai5ub0Nsb25lRXZlbnQ9ITEsYS5kZXRhY2hF dmVudCgib25jbGljayIsYil9KSxhLmNsb25lTm9kZSghMCkuZmlyZUV2ZW50KCJvbmNsaWNrIikpLGg9 Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGgudmFsdWU9InQiLGguc2V0QXR0cmlidXRlKCJ0eXBlIiwi cmFkaW8iKSxqLnJhZGlvVmFsdWU9aC52YWx1ZT09PSJ0IixoLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIs ImNoZWNrZWQiKSxhLmFwcGVuZENoaWxkKGgpLGs9Yy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksay5h cHBlbmRDaGlsZChhLmZpcnN0Q2hpbGQpLGouY2hlY2tDbG9uZT1rLmNsb25lTm9kZSghMCkuY2xvbmVO b2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxhLmlubmVySFRNTD0iIixhLnN0eWxlLndpZHRoPWEuc3R5 bGUucGFkZGluZ0xlZnQ9IjFweCIsbD1jLmNyZWF0ZUVsZW1lbnQoImJvZHkiKSxtPXt2aXNpYmlsaXR5 OiJoaWRkZW4iLHdpZHRoOjAsaGVpZ2h0OjAsYm9yZGVyOjAsbWFyZ2luOjAsYmFja2dyb3VuZDoibm9u ZSJ9O2ZvcihxIGluIG0pbC5zdHlsZVtxXT1tW3FdO2wuYXBwZW5kQ2hpbGQoYSksYi5pbnNlcnRCZWZv cmUobCxiLmZpcnN0Q2hpbGQpLGouYXBwZW5kQ2hlY2tlZD1oLmNoZWNrZWQsai5ib3hNb2RlbD1hLm9m ZnNldFdpZHRoPT09Miwiem9vbSJpbiBhLnN0eWxlJiYoYS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUiLGEu c3R5bGUuem9vbT0xLGouaW5saW5lQmxvY2tOZWVkc0xheW91dD1hLm9mZnNldFdpZHRoPT09MixhLnN0 eWxlLmRpc3BsYXk9IiIsYS5pbm5lckhUTUw9IjxkaXYgc3R5bGU9J3dpZHRoOjRweDsnPjwvZGl2PiIs ai5zaHJpbmtXcmFwQmxvY2tzPWEub2Zmc2V0V2lkdGghPT0yKSxhLmlubmVySFRNTD0iPHRhYmxlPjx0 cj48dGQgc3R5bGU9J3BhZGRpbmc6MDtib3JkZXI6MDtkaXNwbGF5Om5vbmUnPjwvdGQ+PHRkPnQ8L3Rk PjwvdHI+PC90YWJsZT4iLG49YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKSxyPW5bMF0ub2Zmc2V0 SGVpZ2h0PT09MCxuWzBdLnN0eWxlLmRpc3BsYXk9IiIsblsxXS5zdHlsZS5kaXNwbGF5PSJub25lIixq LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1yJiZuWzBdLm9mZnNldEhlaWdodD09PTAsYS5pbm5lckhUTUw9 IiIsYy5kZWZhdWx0VmlldyYmYy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoaT1jLmNyZWF0 ZUVsZW1lbnQoImRpdiIpLGkuc3R5bGUud2lkdGg9IjAiLGkuc3R5bGUubWFyZ2luUmlnaHQ9IjAiLGEu YXBwZW5kQ2hpbGQoaSksai5yZWxpYWJsZU1hcmdpblJpZ2h0PShwYXJzZUludCgoYy5kZWZhdWx0Vmll dy5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHttYXJnaW5SaWdodDowfSkubWFyZ2luUmlnaHQsMTAp fHwwKT09PTApLGwuaW5uZXJIVE1MPSIiLGIucmVtb3ZlQ2hpbGQobCk7aWYoYS5hdHRhY2hFdmVudClm b3IocSBpbntzdWJtaXQ6MSxjaGFuZ2U6MSxmb2N1c2luOjF9KXA9Im9uIitxLHI9cCBpbiBhLHJ8fChh LnNldEF0dHJpYnV0ZShwLCJyZXR1cm47Iikscj10eXBlb2YgYVtwXT09ImZ1bmN0aW9uIiksaltxKyJC dWJibGVzIl09cjtyZXR1cm4gan0oKSxmLmJveE1vZGVsPWYuc3VwcG9ydC5ib3hNb2RlbDt2YXIgaT0v Xig/Olx7LipcfXxcWy4qXF0pJC8saj0vKFthLXpdKShbQS1aXSkvZztmLmV4dGVuZCh7Y2FjaGU6e30s dXVpZDowLGV4cGFuZG86ImpRdWVyeSIrKGYuZm4uanF1ZXJ5K01hdGgucmFuZG9tKCkpLnJlcGxhY2Uo L1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2Yt OTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDohMH0saGFzRGF0YTpmdW5jdGlvbihhKXthPWEubm9kZVR5 cGU/Zi5jYWNoZVthW2YuZXhwYW5kb11dOmFbZi5leHBhbmRvXTtyZXR1cm4hIWEmJiFsKGEpfSxkYXRh

OmZ1bmN0aW9uKGEsYyxkLGUpe2lmKCEhZi5hY2NlcHREYXRhKGEpKXt2YXIgZz1mLmV4cGFuZG8saD10 eXBlb2YgYz09InN0cmluZyIsaSxqPWEubm9kZVR5cGUsaz1qP2YuY2FjaGU6YSxsPWo/YVtmLmV4cGFu ZG9dOmFbZi5leHBhbmRvXSYmZi5leHBhbmRvO2lmKCghbHx8ZSYmbCYmIWtbbF1bZ10pJiZoJiZkPT09 YilyZXR1cm47bHx8KGo/YVtmLmV4cGFuZG9dPWw9KytmLnV1aWQ6bD1mLmV4cGFuZG8pLGtbbF18fChr W2xdPXt9LGp8fChrW2xdLnRvSlNPTj1mLm5vb3ApKTtpZih0eXBlb2YgYz09Im9iamVjdCJ8fHR5cGVv ZiBjPT0iZnVuY3Rpb24iKWU/a1tsXVtnXT1mLmV4dGVuZChrW2xdW2ddLGMpOmtbbF09Zi5leHRlbmQo a1tsXSxjKTtpPWtbbF0sZSYmKGlbZ118fChpW2ddPXt9KSxpPWlbZ10pLGQhPT1iJiYoaVtmLmNhbWVs Q2FzZShjKV09ZCk7aWYoYz09PSJldmVudHMiJiYhaVtjXSlyZXR1cm4gaVtnXSYmaVtnXS5ldmVudHM7 cmV0dXJuIGg/aVtmLmNhbWVsQ2FzZShjKV06aX19LHJlbW92ZURhdGE6ZnVuY3Rpb24oYixjLGQpe2lm KCEhZi5hY2NlcHREYXRhKGIpKXt2YXIgZT1mLmV4cGFuZG8sZz1iLm5vZGVUeXBlLGg9Zz9mLmNhY2hl OmIsaT1nP2JbZi5leHBhbmRvXTpmLmV4cGFuZG87aWYoIWhbaV0pcmV0dXJuO2lmKGMpe3ZhciBqPWQ/ aFtpXVtlXTpoW2ldO2lmKGope2RlbGV0ZSBqW2NdO2lmKCFsKGopKXJldHVybn19aWYoZCl7ZGVsZXRl IGhbaV1bZV07aWYoIWwoaFtpXSkpcmV0dXJufXZhciBrPWhbaV1bZV07Zi5zdXBwb3J0LmRlbGV0ZUV4 cGFuZG98fGghPWE/ZGVsZXRlIGhbaV06aFtpXT1udWxsLGs/KGhbaV09e30sZ3x8KGhbaV0udG9KU09O PWYubm9vcCksaFtpXVtlXT1rKTpnJiYoZi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8/ZGVsZXRlIGJbZi5l eHBhbmRvXTpiLnJlbW92ZUF0dHJpYnV0ZT9iLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pOmJbZi5l eHBhbmRvXT1udWxsKX19LF9kYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kYXRhKGEsYixjLCEw KX0sYWNjZXB0RGF0YTpmdW5jdGlvbihhKXtpZihhLm5vZGVOYW1lKXt2YXIgYj1mLm5vRGF0YVthLm5v ZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKGIpcmV0dXJuIGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNs YXNzaWQiKT09PWJ9cmV0dXJuITB9fSksZi5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxjKXt2YXIg ZD1udWxsO2lmKHR5cGVvZiBhPT0idW5kZWZpbmVkIil7aWYodGhpcy5sZW5ndGgpe2Q9Zi5kYXRhKHRo aXNbMF0pO2lmKHRoaXNbMF0ubm9kZVR5cGU9PT0xKXt2YXIgZT10aGlzWzBdLmF0dHJpYnV0ZXMsZztm b3IodmFyIGg9MCxpPWUubGVuZ3RoO2g8aTtoKyspZz1lW2hdLm5hbWUsZy5pbmRleE9mKCJkYXRhLSIp PT09MCYmKGc9Zi5jYW1lbENhc2UoZy5zdWJzdHJpbmcoNSkpLGsodGhpc1swXSxnLGRbZ10pKX19cmV0 dXJuIGR9aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRh dGEodGhpcyxhKX0pO3ZhciBqPWEuc3BsaXQoIi4iKTtqWzFdPWpbMV0/Ii4iK2pbMV06IiI7aWYoYz09 PWIpe2Q9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIralsxXSsiISIsW2pbMF1dKSxkPT09YiYm dGhpcy5sZW5ndGgmJihkPWYuZGF0YSh0aGlzWzBdLGEpLGQ9ayh0aGlzWzBdLGEsZCkpO3JldHVybiBk PT09YiYmalsxXT90aGlzLmRhdGEoalswXSk6ZH1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFy IGI9Zih0aGlzKSxkPVtqWzBdLGNdO2IudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2pbMV0rIiEiLGQp LGYuZGF0YSh0aGlzLGEsYyksYi50cmlnZ2VySGFuZGxlcigiY2hhbmdlRGF0YSIralsxXSsiISIsZCl9 KX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1v dmVEYXRhKHRoaXMsYSl9KX19KSxmLmV4dGVuZCh7X21hcms6ZnVuY3Rpb24oYSxjKXthJiYoYz0oY3x8 ImZ4IikrIm1hcmsiLGYuZGF0YShhLGMsKGYuZGF0YShhLGMsYiwhMCl8fDApKzEsITApKX0sX3VubWFy azpmdW5jdGlvbihhLGMsZCl7YSE9PSEwJiYoZD1jLGM9YSxhPSExKTtpZihjKXtkPWR8fCJmeCI7dmFy IGU9ZCsibWFyayIsZz1hPzA6KGYuZGF0YShjLGUsYiwhMCl8fDEpLTE7Zz9mLmRhdGEoYyxlLGcsITAp OihmLnJlbW92ZURhdGEoYyxlLCEwKSxtKGMsZCwibWFyayIpKX19LHF1ZXVlOmZ1bmN0aW9uKGEsYyxk KXtpZihhKXtjPShjfHwiZngiKSsicXVldWUiO3ZhciBlPWYuZGF0YShhLGMsYiwhMCk7ZCYmKCFlfHxm LmlzQXJyYXkoZCk/ZT1mLmRhdGEoYSxjLGYubWFrZUFycmF5KGQpLCEwKTplLnB1c2goZCkpO3JldHVy biBlfHxbXX19LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9Zi5xdWV1ZShhLGIp LGQ9Yy5zaGlmdCgpLGU7ZD09PSJpbnByb2dyZXNzIiYmKGQ9Yy5zaGlmdCgpKSxkJiYoYj09PSJmeCIm JmMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGQuY2FsbChhLGZ1bmN0aW9uKCl7Zi5kZXF1ZXVlKGEsYil9 KSksYy5sZW5ndGh8fChmLnJlbW92ZURhdGEoYSxiKyJxdWV1ZSIsITApLG0oYSxiLCJxdWV1ZSIpKX19 KSxmLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxjKXt0eXBlb2YgYSE9InN0cmluZyImJihjPWEs YT0iZngiKTtpZihjPT09YilyZXR1cm4gZi5xdWV1ZSh0aGlzWzBdLGEpO3JldHVybiB0aGlzLmVhY2go ZnVuY3Rpb24oKXt2YXIgYj1mLnF1ZXVlKHRoaXMsYSxjKTthPT09ImZ4IiYmYlswXSE9PSJpbnByb2dy ZXNzIiYmZi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5l YWNoKGZ1bmN0aW9uKCl7Zi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVsYXk6ZnVuY3Rpb24oYSxiKXthPWYu Zng/Zi5meC5zcGVlZHNbYV18fGE6YSxiPWJ8fCJmeCI7cmV0dXJuIHRoaXMucXVldWUoYixmdW5jdGlv bigpe3ZhciBjPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2YuZGVxdWV1ZShjLGIpfSxhKX0pfSxj bGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNl OmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gbSgpey0taHx8ZC5yZXNvbHZlV2l0aChlLFtlXSl9dHlwZW9m IGEhPSJzdHJpbmciJiYoYz1hLGE9YiksYT1hfHwiZngiO3ZhciBkPWYuRGVmZXJyZWQoKSxlPXRoaXMs Zz1lLmxlbmd0aCxoPTEsaT1hKyJkZWZlciIsaj1hKyJxdWV1ZSIsaz1hKyJtYXJrIixsO3doaWxlKGct LSlpZihsPWYuZGF0YShlW2ddLGksYiwhMCl8fChmLmRhdGEoZVtnXSxqLGIsITApfHxmLmRhdGEoZVtn XSxrLGIsITApKSYmZi5kYXRhKGVbZ10saSxmLl9EZWZlcnJlZCgpLCEwKSloKyssbC5kb25lKG0pO20o KTtyZXR1cm4gZC5wcm9taXNlKCl9fSk7dmFyIG49L1tcblx0XHJdL2csbz0vXHMrLyxwPS9cci9nLHE9 L14oPzpidXR0b258aW5wdXQpJC9pLHI9L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0 YXJlYSkkL2kscz0vXmEoPzpyZWEpPyQvaSx0PS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNo ZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFk

b25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLHU9L1w6Lyx2LHc7Zi5mbi5leHRlbmQoe2F0 dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGIsITAsZi5hdHRyKX0scmVtb3Zl QXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVBdHRyKHRo aXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLnBy b3ApfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe2E9Zi5wcm9wRml4W2FdfHxhO3JldHVybiB0aGlzLmVh Y2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT1iLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGMpe319KX0sYWRk Q2xhc3M6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rp b24oYil7dmFyIGM9Zih0aGlzKTtjLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsYy5hdHRyKCJjbGFzcyIp fHwiIikpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmciKXt2YXIgYj0oYXx8IiIpLnNwbGl0KG8pO2Zv cih2YXIgYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7dmFyIGU9dGhpc1tjXTtpZihlLm5vZGVUeXBl PT09MSlpZighZS5jbGFzc05hbWUpZS5jbGFzc05hbWU9YTtlbHNle3ZhciBnPSIgIitlLmNsYXNzTmFt ZSsiICIsaD1lLmNsYXNzTmFtZTtmb3IodmFyIGk9MCxqPWIubGVuZ3RoO2k8ajtpKyspZy5pbmRleE9m KCIgIitiW2ldKyIgIik8MCYmKGgrPSIgIitiW2ldKTtlLmNsYXNzTmFtZT1mLnRyaW0oaCl9fX1yZXR1 cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0 aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKTtjLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlz LGIsYy5hdHRyKCJjbGFzcyIpKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyJ8fGE9PT1iKXt2YXIg Yz0oYXx8IiIpLnNwbGl0KG8pO2Zvcih2YXIgZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7dmFyIGc9 dGhpc1tkXTtpZihnLm5vZGVUeXBlPT09MSYmZy5jbGFzc05hbWUpaWYoYSl7dmFyIGg9KCIgIitnLmNs YXNzTmFtZSsiICIpLnJlcGxhY2UobiwiICIpO2Zvcih2YXIgaT0wLGo9Yy5sZW5ndGg7aTxqO2krKylo PWgucmVwbGFjZSgiICIrY1tpXSsiICIsIiAiKTtnLmNsYXNzTmFtZT1mLnRyaW0oaCl9ZWxzZSBnLmNs YXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlw ZW9mIGEsZD10eXBlb2YgYj09ImJvb2xlYW4iO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5l YWNoKGZ1bmN0aW9uKGMpe3ZhciBkPWYodGhpcyk7ZC50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLGQu YXR0cigiY2xhc3MiKSxiKSxiKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0 cmluZyIpe3ZhciBlLGc9MCxoPWYodGhpcyksaT1iLGo9YS5zcGxpdChvKTt3aGlsZShlPWpbZysrXSlp PWQ/aTohaC5oYXNDbGFzcyhlKSxoW2k/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlm KGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmZi5fZGF0YSh0aGlz LCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05h bWV8fGE9PT0hMT8iIjpmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6 ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiO2Zvcih2YXIgYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2Mr KylpZigoIiAiK3RoaXNbY10uY2xhc3NOYW1lKyIgIikucmVwbGFjZShuLCIgIikuaW5kZXhPZihiKT4t MSlyZXR1cm4hMDtyZXR1cm4hMX0sdmFsOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZT10aGlzWzBdO2lmKCFh cmd1bWVudHMubGVuZ3RoKXtpZihlKXtjPWYudmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp XXx8Zi52YWxIb29rc1tlLnR5cGVdO2lmKGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZSwidmFsdWUiKSkh PT1iKXJldHVybiBkO3JldHVybihlLnZhbHVlfHwiIikucmVwbGFjZShwLCIiKX1yZXR1cm4gYn12YXIg Zz1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihkKXt2YXIgZT1mKHRoaXMp LGg7aWYodGhpcy5ub2RlVHlwZT09PTEpe2c/aD1hLmNhbGwodGhpcyxkLGUudmFsKCkpOmg9YSxoPT1u dWxsP2g9IiI6dHlwZW9mIGg9PSJudW1iZXIiP2grPSIiOmYuaXNBcnJheShoKSYmKGg9Zi5tYXAoaCxm dW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjphKyIifSkpLGM9Zi52YWxIb29rc1t0aGlzLm5vZGVO YW1lLnRvTG93ZXJDYXNlKCldfHxmLnZhbEhvb2tzW3RoaXMudHlwZV07aWYoIWN8fCEoInNldCJpbiBj KXx8Yy5zZXQodGhpcyxoLCJ2YWx1ZSIpPT09Yil0aGlzLnZhbHVlPWh9fSl9fSksZi5leHRlbmQoe3Zh bEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0 dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7 dmFyIGIsYz1hLnNlbGVjdGVkSW5kZXgsZD1bXSxlPWEub3B0aW9ucyxnPWEudHlwZT09PSJzZWxlY3Qt b25lIjtpZihjPDApcmV0dXJuIG51bGw7Zm9yKHZhciBoPWc/YzowLGk9Zz9jKzE6ZS5sZW5ndGg7aDxp O2grKyl7dmFyIGo9ZVtoXTtpZihqLnNlbGVjdGVkJiYoZi5zdXBwb3J0Lm9wdERpc2FibGVkPyFqLmRp c2FibGVkOmouZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09bnVsbCkmJighai5wYXJlbnROb2RlLmRp c2FibGVkfHwhZi5ub2RlTmFtZShqLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtiPWYoaikudmFsKCk7 aWYoZylyZXR1cm4gYjtkLnB1c2goYil9fWlmKGcmJiFkLmxlbmd0aCYmZS5sZW5ndGgpcmV0dXJuIGYo ZVtjXSkudmFsKCk7cmV0dXJuIGR9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWYubWFrZUFycmF5KGIp O2YoYSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9Zi5pbkFycmF5 KGYodGhpcykudmFsKCksYyk+PTB9KSxjLmxlbmd0aHx8KGEuc2VsZWN0ZWRJbmRleD0tMSk7cmV0dXJu IGN9fX0sYXR0ckZuOnt2YWw6ITAsY3NzOiEwLGh0bWw6ITAsdGV4dDohMCxkYXRhOiEwLHdpZHRoOiEw LGhlaWdodDohMCxvZmZzZXQ6ITB9LGF0dHJGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCJ9LGF0dHI6ZnVu Y3Rpb24oYSxjLGQsZSl7dmFyIGc9YS5ub2RlVHlwZTtpZighYXx8Zz09PTN8fGc9PT04fHxnPT09Mily ZXR1cm4gYjtpZihlJiZjIGluIGYuYXR0ckZuKXJldHVybiBmKGEpW2NdKGQpO2lmKCEoImdldEF0dHJp YnV0ZSJpbiBhKSlyZXR1cm4gZi5wcm9wKGEsYyxkKTt2YXIgaCxpLGo9ZyE9PTF8fCFmLmlzWE1MRG9j KGEpO2M9aiYmZi5hdHRyRml4W2NdfHxjLGk9Zi5hdHRySG9va3NbY10saXx8KCF0LnRlc3QoYyl8fHR5 cGVvZiBkIT0iYm9vbGVhbiImJmQhPT1iJiZkLnRvTG93ZXJDYXNlKCkhPT1jLnRvTG93ZXJDYXNlKCk/ diYmKGYubm9kZU5hbWUoYSwiZm9ybSIpfHx1LnRlc3QoYykpJiYoaT12KTppPXcpO2lmKGQhPT1iKXtp

ZihkPT09bnVsbCl7Zi5yZW1vdmVBdHRyKGEsYyk7cmV0dXJuIGJ9aWYoaSYmInNldCJpbiBpJiZqJiYo aD1pLnNldChhLGQsYykpIT09YilyZXR1cm4gaDthLnNldEF0dHJpYnV0ZShjLCIiK2QpO3JldHVybiBk fWlmKGkmJiJnZXQiaW4gaSYmailyZXR1cm4gaS5nZXQoYSxjKTtoPWEuZ2V0QXR0cmlidXRlKGMpO3Jl dHVybiBoPT09bnVsbD9iOmh9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYzthLm5vZGVUeXBl PT09MSYmKGI9Zi5hdHRyRml4W2JdfHxiLGYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGU/YS5yZW1vdmVB dHRyaWJ1dGUoYik6KGYuYXR0cihhLGIsIiIpLGEucmVtb3ZlQXR0cmlidXRlTm9kZShhLmdldEF0dHJp YnV0ZU5vZGUoYikpKSx0LnRlc3QoYikmJihjPWYucHJvcEZpeFtiXXx8YilpbiBhJiYoYVtjXT0hMSkp fSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKHEudGVzdChhLm5vZGVOYW1lKSYm YS5wYXJlbnROb2RlKWYuZXJyb3IoInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIpO2Vsc2Ug aWYoIWYuc3VwcG9ydC5yYWRpb1ZhbHVlJiZiPT09InJhZGlvIiYmZi5ub2RlTmFtZShhLCJpbnB1dCIp KXt2YXIgYz1hLnZhbHVlO2Euc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKTtyZXR1 cm4gYn19fSx0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBjPWEuZ2V0QXR0cmlidXRlTm9kZSgi dGFiSW5kZXgiKTtyZXR1cm4gYyYmYy5zcGVjaWZpZWQ/cGFyc2VJbnQoYy52YWx1ZSwxMCk6ci50ZXN0 KGEubm9kZU5hbWUpfHxzLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9fX0scHJvcEZpeDp7dGFi aW5kZXg6InRhYkluZGV4IixyZWFkb25seToicmVhZE9ubHkiLCJmb3IiOiJodG1sRm9yIiwiY2xhc3Mi OiJjbGFzc05hbWUiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmci LGNlbGxwYWRkaW5nOiJjZWxsUGFkZGluZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3Bh biIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciIsY29udGVudGVkaXRhYmxl OiJjb250ZW50RWRpdGFibGUifSxwcm9wOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1hLm5vZGVUeXBlO2lm KCFhfHxlPT09M3x8ZT09PTh8fGU9PT0yKXJldHVybiBiO3ZhciBnLGgsaT1lIT09MXx8IWYuaXNYTUxE b2MoYSk7Yz1pJiZmLnByb3BGaXhbY118fGMsaD1mLnByb3BIb29rc1tjXTtyZXR1cm4gZCE9PWI/aCYm InNldCJpbiBoJiYoZz1oLnNldChhLGQsYykpIT09Yj9nOmFbY109ZDpoJiYiZ2V0ImluIGgmJihnPWgu Z2V0KGEsYykpIT09Yj9nOmFbY119LHByb3BIb29rczp7fX0pLHc9e2dldDpmdW5jdGlvbihhLGMpe3Jl dHVybiBhW2YucHJvcEZpeFtjXXx8Y10/Yy50b0xvd2VyQ2FzZSgpOmJ9LHNldDpmdW5jdGlvbihhLGIs Yyl7dmFyIGQ7Yj09PSExP2YucmVtb3ZlQXR0cihhLGMpOihkPWYucHJvcEZpeFtjXXx8YyxkIGluIGEm JihhW2RdPWIpLGEuc2V0QXR0cmlidXRlKGMsYy50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIGN9fSxmLmF0 dHJIb29rcy52YWx1ZT17Z2V0OmZ1bmN0aW9uKGEsYil7aWYodiYmZi5ub2RlTmFtZShhLCJidXR0b24i KSlyZXR1cm4gdi5nZXQoYSxiKTtyZXR1cm4gYS52YWx1ZX0sc2V0OmZ1bmN0aW9uKGEsYixjKXtpZih2 JiZmLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiB2LnNldChhLGIsYyk7YS52YWx1ZT1ifX0sZi5z dXBwb3J0LmdldFNldEF0dHJpYnV0ZXx8KGYuYXR0ckZpeD1mLnByb3BGaXgsdj1mLmF0dHJIb29rcy5u YW1lPWYudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZDtkPWEuZ2V0QXR0cmli dXRlTm9kZShjKTtyZXR1cm4gZCYmZC5ub2RlVmFsdWUhPT0iIj9kLm5vZGVWYWx1ZTpifSxzZXQ6ZnVu Y3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0QXR0cmlidXRlTm9kZShjKTtpZihkKXtkLm5vZGVWYWx1ZT1i O3JldHVybiBifX19LGYuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmF0dHJI b29rc1tiXT1mLmV4dGVuZChmLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIi KXthLnNldEF0dHJpYnV0ZShiLCJhdXRvIik7cmV0dXJuIGN9fX0pfSkpLGYuc3VwcG9ydC5ocmVmTm9y bWFsaXplZHx8Zi5lYWNoKFsiaHJlZiIsInNyYyIsIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxj KXtmLmF0dHJIb29rc1tjXT1mLmV4dGVuZChmLmF0dHJIb29rc1tjXSx7Z2V0OmZ1bmN0aW9uKGEpe3Zh ciBkPWEuZ2V0QXR0cmlidXRlKGMsMik7cmV0dXJuIGQ9PT1udWxsP2I6ZH19KX0pLGYuc3VwcG9ydC5z dHlsZXx8KGYuYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3R5bGUuY3Nz VGV4dC50b0xvd2VyQ2FzZSgpfHxifSxzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdHlsZS5jc3NU ZXh0PSIiK2J9fSksZi5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoZi5wcm9wSG9va3Muc2VsZWN0ZWQ9Zi5l eHRlbmQoZi5wcm9wSG9va3Muc2VsZWN0ZWQse2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5v ZGU7YiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZElu ZGV4KX19KSksZi5zdXBwb3J0LmNoZWNrT258fGYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5j dGlvbigpe2YudmFsSG9va3NbdGhpc109e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1 dGUoInZhbHVlIik9PT1udWxsPyJvbiI6YS52YWx1ZX19fSksZi5lYWNoKFsicmFkaW8iLCJjaGVja2Jv eCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT1mLmV4dGVuZChmLnZhbEhvb2tzW3RoaXNdLHtz ZXQ6ZnVuY3Rpb24oYSxiKXtpZihmLmlzQXJyYXkoYikpcmV0dXJuIGEuY2hlY2tlZD1mLmluQXJyYXko ZihhKS52YWwoKSxiKT49MH19KX0pO3ZhciB4PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHks eT0vXC4oLiopJC8sej0vXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksQT0vXC4vZyxCPS8gL2cs Qz0vW15cd1xzLnxgXS9nLEQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShDLCJcXCQmIil9O2Yu ZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlKXtpZihhLm5vZGVUeXBlIT09MyYmYS5ub2RlVHlwZSE9 PTgpe2lmKGQ9PT0hMSlkPUU7ZWxzZSBpZighZClyZXR1cm47dmFyIGcsaDtkLmhhbmRsZXImJihnPWQs ZD1nLmhhbmRsZXIpLGQuZ3VpZHx8KGQuZ3VpZD1mLmd1aWQrKyk7dmFyIGk9Zi5fZGF0YShhKTtpZigh aSlyZXR1cm47dmFyIGo9aS5ldmVudHMsaz1pLmhhbmRsZTtqfHwoaS5ldmVudHM9aj17fSksa3x8KGku aGFuZGxlPWs9ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBmIT0idW5kZWZpbmVkIiYmKCFhfHxmLmV2 ZW50LnRyaWdnZXJlZCE9PWEudHlwZSk/Zi5ldmVudC5oYW5kbGUuYXBwbHkoay5lbGVtLGFyZ3VtZW50 cyk6Yn0pLGsuZWxlbT1hLGM9Yy5zcGxpdCgiICIpO3ZhciBsLG09MCxuO3doaWxlKGw9Y1ttKytdKXto PWc/Zi5leHRlbmQoe30sZyk6e2hhbmRsZXI6ZCxkYXRhOmV9LGwuaW5kZXhPZigiLiIpPi0xPyhuPWwu

c3BsaXQoIi4iKSxsPW4uc2hpZnQoKSxoLm5hbWVzcGFjZT1uLnNsaWNlKDApLnNvcnQoKS5qb2luKCIu IikpOihuPVtdLGgubmFtZXNwYWNlPSIiKSxoLnR5cGU9bCxoLmd1aWR8fChoLmd1aWQ9ZC5ndWlkKTt2 YXIgbz1qW2xdLHA9Zi5ldmVudC5zcGVjaWFsW2xdfHx7fTtpZighbyl7bz1qW2xdPVtdO2lmKCFwLnNl dHVwfHxwLnNldHVwLmNhbGwoYSxlLG4sayk9PT0hMSlhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVu dExpc3RlbmVyKGwsaywhMSk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib24iK2wsayl9cC5h ZGQmJihwLmFkZC5jYWxsKGEsaCksaC5oYW5kbGVyLmd1aWR8fChoLmhhbmRsZXIuZ3VpZD1kLmd1aWQp KSxvLnB1c2goaCksZi5ldmVudC5nbG9iYWxbbF09ITB9YT1udWxsfX0sZ2xvYmFsOnt9LHJlbW92ZTpm dW5jdGlvbihhLGMsZCxlKXtpZihhLm5vZGVUeXBlIT09MyYmYS5ub2RlVHlwZSE9PTgpe2Q9PT0hMSYm KGQ9RSk7dmFyIGcsaCxpLGosaz0wLGwsbSxuLG8scCxxLHIscz1mLmhhc0RhdGEoYSkmJmYuX2RhdGEo YSksdD1zJiZzLmV2ZW50cztpZighc3x8IXQpcmV0dXJuO2MmJmMudHlwZSYmKGQ9Yy5oYW5kbGVyLGM9 Yy50eXBlKTtpZighY3x8dHlwZW9mIGM9PSJzdHJpbmciJiZjLmNoYXJBdCgwKT09PSIuIil7Yz1jfHwi Ijtmb3IoaCBpbiB0KWYuZXZlbnQucmVtb3ZlKGEsaCtjKTtyZXR1cm59Yz1jLnNwbGl0KCIgIik7d2hp bGUoaD1jW2srK10pe3I9aCxxPW51bGwsbD1oLmluZGV4T2YoIi4iKTwwLG09W10sbHx8KG09aC5zcGxp dCgiLiIpLGg9bS5zaGlmdCgpLG49bmV3IFJlZ0V4cCgiKF58XFwuKSIrZi5tYXAobS5zbGljZSgwKS5z b3J0KCksRCkuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIikpLHA9dFtoXTtpZighcCljb250 aW51ZTtpZighZCl7Zm9yKGo9MDtqPHAubGVuZ3RoO2orKyl7cT1wW2pdO2lmKGx8fG4udGVzdChxLm5h bWVzcGFjZSkpZi5ldmVudC5yZW1vdmUoYSxyLHEuaGFuZGxlcixqKSxwLnNwbGljZShqLS0sMSl9Y29u dGludWV9bz1mLmV2ZW50LnNwZWNpYWxbaF18fHt9O2ZvcihqPWV8fDA7ajxwLmxlbmd0aDtqKyspe3E9 cFtqXTtpZihkLmd1aWQ9PT1xLmd1aWQpe2lmKGx8fG4udGVzdChxLm5hbWVzcGFjZSkpZT09bnVsbCYm cC5zcGxpY2Uoai0tLDEpLG8ucmVtb3ZlJiZvLnJlbW92ZS5jYWxsKGEscSk7aWYoZSE9bnVsbClicmVh a319aWYocC5sZW5ndGg9PT0wfHxlIT1udWxsJiZwLmxlbmd0aD09PTEpKCFvLnRlYXJkb3dufHxvLnRl YXJkb3duLmNhbGwoYSxtKT09PSExKSYmZi5yZW1vdmVFdmVudChhLGgscy5oYW5kbGUpLGc9bnVsbCxk ZWxldGUgdFtoXX1pZihmLmlzRW1wdHlPYmplY3QodCkpe3ZhciB1PXMuaGFuZGxlO3UmJih1LmVsZW09 bnVsbCksZGVsZXRlIHMuZXZlbnRzLGRlbGV0ZSBzLmhhbmRsZSxmLmlzRW1wdHlPYmplY3QocykmJmYu cmVtb3ZlRGF0YShhLGIsITApfX19LGN1c3RvbUV2ZW50OntnZXREYXRhOiEwLHNldERhdGE6ITAsY2hh bmdlRGF0YTohMH0sdHJpZ2dlcjpmdW5jdGlvbihjLGQsZSxnKXt2YXIgaD1jLnR5cGV8fGMsaT1bXSxq O2guaW5kZXhPZigiISIpPj0wJiYoaD1oLnNsaWNlKDAsLTEpLGo9ITApLGguaW5kZXhPZigiLiIpPj0w JiYoaT1oLnNwbGl0KCIuIiksaD1pLnNoaWZ0KCksaS5zb3J0KCkpO2lmKCEhZSYmIWYuZXZlbnQuY3Vz dG9tRXZlbnRbaF18fCEhZi5ldmVudC5nbG9iYWxbaF0pe2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbZi5l eHBhbmRvXT9jOm5ldyBmLkV2ZW50KGgsYyk6bmV3IGYuRXZlbnQoaCksYy50eXBlPWgsYy5leGNsdXNp dmU9aixjLm5hbWVzcGFjZT1pLmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1uZXcgUmVnRXhwKCIoXnxc XC4pIitpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpO2lmKGd8fCFlKWMucHJldmVudERl ZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpO2lmKCFlKXtmLmVhY2goZi5jYWNoZSxmdW5jdGlvbigp e3ZhciBhPWYuZXhwYW5kbyxiPXRoaXNbYV07YiYmYi5ldmVudHMmJmIuZXZlbnRzW2hdJiZmLmV2ZW50 LnRyaWdnZXIoYyxkLGIuaGFuZGxlLmVsZW0NCil9KTtyZXR1cm59aWYoZS5ub2RlVHlwZT09PTN8fGUu bm9kZVR5cGU9PT04KXJldHVybjtjLnJlc3VsdD1iLGMudGFyZ2V0PWUsZD1kP2YubWFrZUFycmF5KGQp OltdLGQudW5zaGlmdChjKTt2YXIgaz1lLGw9aC5pbmRleE9mKCI6Iik8MD8ib24iK2g6IiI7ZG97dmFy IG09Zi5fZGF0YShrLCJoYW5kbGUiKTtjLmN1cnJlbnRUYXJnZXQ9ayxtJiZtLmFwcGx5KGssZCksbCYm Zi5hY2NlcHREYXRhKGspJiZrW2xdJiZrW2xdLmFwcGx5KGssZCk9PT0hMSYmKGMucmVzdWx0PSExLGMu cHJldmVudERlZmF1bHQoKSksaz1rLnBhcmVudE5vZGV8fGsub3duZXJEb2N1bWVudHx8az09PWMudGFy Z2V0Lm93bmVyRG9jdW1lbnQmJmF9d2hpbGUoayYmIWMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSk7aWYo IWMuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBuLG89Zi5ldmVudC5zcGVjaWFsW2hdfHx7fTtpZigo IW8uX2RlZmF1bHR8fG8uX2RlZmF1bHQuY2FsbChlLm93bmVyRG9jdW1lbnQsYyk9PT0hMSkmJihoIT09 ImNsaWNrInx8IWYubm9kZU5hbWUoZSwiYSIpKSYmZi5hY2NlcHREYXRhKGUpKXt0cnl7bCYmZVtoXSYm KG49ZVtsXSxuJiYoZVtsXT1udWxsKSxmLmV2ZW50LnRyaWdnZXJlZD1oLGVbaF0oKSl9Y2F0Y2gocCl7 fW4mJihlW2xdPW4pLGYuZXZlbnQudHJpZ2dlcmVkPWJ9fXJldHVybiBjLnJlc3VsdH19LGhhbmRsZTpm dW5jdGlvbihjKXtjPWYuZXZlbnQuZml4KGN8fGEuZXZlbnQpO3ZhciBkPSgoZi5fZGF0YSh0aGlzLCJl dmVudHMiKXx8e30pW2MudHlwZV18fFtdKS5zbGljZSgwKSxlPSFjLmV4Y2x1c2l2ZSYmIWMubmFtZXNw YWNlLGc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO2dbMF09YyxjLmN1cnJl bnRUYXJnZXQ9dGhpcztmb3IodmFyIGg9MCxpPWQubGVuZ3RoO2g8aTtoKyspe3ZhciBqPWRbaF07aWYo ZXx8Yy5uYW1lc3BhY2VfcmUudGVzdChqLm5hbWVzcGFjZSkpe2MuaGFuZGxlcj1qLmhhbmRsZXIsYy5k YXRhPWouZGF0YSxjLmhhbmRsZU9iaj1qO3ZhciBrPWouaGFuZGxlci5hcHBseSh0aGlzLGcpO2shPT1i JiYoYy5yZXN1bHQ9ayxrPT09ITEmJihjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24o KSkpO2lmKGMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVha319cmV0dXJuIGMucmVz dWx0fSxwcm9wczoiYWx0S2V5IGF0dHJDaGFuZ2UgYXR0ck5hbWUgYnViYmxlcyBidXR0b24gY2FuY2Vs YWJsZSBjaGFyQ29kZSBjbGllbnRYIGNsaWVudFkgY3RybEtleSBjdXJyZW50VGFyZ2V0IGRhdGEgZGV0 YWlsIGV2ZW50UGhhc2UgZnJvbUVsZW1lbnQgaGFuZGxlciBrZXlDb2RlIGxheWVyWCBsYXllclkgbWV0 YUtleSBuZXdWYWx1ZSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgcHJldlZhbHVlIHJlbGF0ZWRO b2RlIHJlbGF0ZWRUYXJnZXQgc2NyZWVuWCBzY3JlZW5ZIHNoaWZ0S2V5IHNyY0VsZW1lbnQgdGFyZ2V0 IHRvRWxlbWVudCB2aWV3IHdoZWVsRGVsdGEgd2hpY2giLnNwbGl0KCIgIiksZml4OmZ1bmN0aW9uKGEp

e2lmKGFbZi5leHBhbmRvXSlyZXR1cm4gYTt2YXIgZD1hO2E9Zi5FdmVudChkKTtmb3IodmFyIGU9dGhp cy5wcm9wcy5sZW5ndGgsZztlOylnPXRoaXMucHJvcHNbLS1lXSxhW2ddPWRbZ107YS50YXJnZXR8fChh LnRhcmdldD1hLnNyY0VsZW1lbnR8fGMpLGEudGFyZ2V0Lm5vZGVUeXBlPT09MyYmKGEudGFyZ2V0PWEu dGFyZ2V0LnBhcmVudE5vZGUpLCFhLnJlbGF0ZWRUYXJnZXQmJmEuZnJvbUVsZW1lbnQmJihhLnJlbGF0 ZWRUYXJnZXQ9YS5mcm9tRWxlbWVudD09PWEudGFyZ2V0P2EudG9FbGVtZW50OmEuZnJvbUVsZW1lbnQp O2lmKGEucGFnZVg9PW51bGwmJmEuY2xpZW50WCE9bnVsbCl7dmFyIGg9YS50YXJnZXQub3duZXJEb2N1 bWVudHx8YyxpPWguZG9jdW1lbnRFbGVtZW50LGo9aC5ib2R5O2EucGFnZVg9YS5jbGllbnRYKyhpJiZp LnNjcm9sbExlZnR8fGomJmouc2Nyb2xsTGVmdHx8MCktKGkmJmkuY2xpZW50TGVmdHx8aiYmai5jbGll bnRMZWZ0fHwwKSxhLnBhZ2VZPWEuY2xpZW50WSsoaSYmaS5zY3JvbGxUb3B8fGomJmouc2Nyb2xsVG9w fHwwKS0oaSYmaS5jbGllbnRUb3B8fGomJmouY2xpZW50VG9wfHwwKX1hLndoaWNoPT1udWxsJiYoYS5j aGFyQ29kZSE9bnVsbHx8YS5rZXlDb2RlIT1udWxsKSYmKGEud2hpY2g9YS5jaGFyQ29kZSE9bnVsbD9h LmNoYXJDb2RlOmEua2V5Q29kZSksIWEubWV0YUtleSYmYS5jdHJsS2V5JiYoYS5tZXRhS2V5PWEuY3Ry bEtleSksIWEud2hpY2gmJmEuYnV0dG9uIT09YiYmKGEud2hpY2g9YS5idXR0b24mMT8xOmEuYnV0dG9u JjI/MzphLmJ1dHRvbiY0PzI6MCk7cmV0dXJuIGF9LGd1aWQ6MWU4LHByb3h5OmYucHJveHksc3BlY2lh bDp7cmVhZHk6e3NldHVwOmYuYmluZFJlYWR5LHRlYXJkb3duOmYubm9vcH0sbGl2ZTp7YWRkOmZ1bmN0 aW9uKGEpe2YuZXZlbnQuYWRkKHRoaXMsTyhhLm9yaWdUeXBlLGEuc2VsZWN0b3IpLGYuZXh0ZW5kKHt9 LGEse2hhbmRsZXI6TixndWlkOmEuaGFuZGxlci5ndWlkfSkpfSxyZW1vdmU6ZnVuY3Rpb24oYSl7Zi5l dmVudC5yZW1vdmUodGhpcyxPKGEub3JpZ1R5cGUsYS5zZWxlY3RvciksYSl9fSxiZWZvcmV1bmxvYWQ6 e3NldHVwOmZ1bmN0aW9uKGEsYixjKXtmLmlzV2luZG93KHRoaXMpJiYodGhpcy5vbmJlZm9yZXVubG9h ZD1jKX0sdGVhcmRvd246ZnVuY3Rpb24oYSxiKXt0aGlzLm9uYmVmb3JldW5sb2FkPT09YiYmKHRoaXMu b25iZWZvcmV1bmxvYWQ9bnVsbCl9fX19LGYucmVtb3ZlRXZlbnQ9Yy5yZW1vdmVFdmVudExpc3RlbmVy P2Z1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5l cihiLGMsITEpfTpmdW5jdGlvbihhLGIsYyl7YS5kZXRhY2hFdmVudCYmYS5kZXRhY2hFdmVudCgib24i K2IsYyl9LGYuRXZlbnQ9ZnVuY3Rpb24oYSxiKXtpZighdGhpcy5wcmV2ZW50RGVmYXVsdClyZXR1cm4g bmV3IGYuRXZlbnQoYSxiKTthJiZhLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1hLHRoaXMudHlwZT1h LnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJldmVudGVkfHxhLnJldHVyblZh bHVlPT09ITF8fGEuZ2V0UHJldmVudERlZmF1bHQmJmEuZ2V0UHJldmVudERlZmF1bHQoKT9GOkUpOnRo aXMudHlwZT1hLGImJmYuZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9Zi5ub3coKSx0aGlzW2Yu ZXhwYW5kb109ITB9LGYuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3Ro aXMuaXNEZWZhdWx0UHJldmVudGVkPUY7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5wcmV2 ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdh dGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9Rjt2YXIgYT10aGlzLm9yaWdp bmFsRXZlbnQ7IWF8fChhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNl bEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1l ZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Rix0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQ cmV2ZW50ZWQ6RSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpFLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9w cGVkOkV9O3ZhciBHPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVsYXRlZFRhcmdldDthLnR5cGU9YS5kYXRh O3RyeXtpZihiJiZiIT09YyYmIWIucGFyZW50Tm9kZSlyZXR1cm47d2hpbGUoYiYmYiE9PXRoaXMpYj1i LnBhcmVudE5vZGU7YiE9PXRoaXMmJmYuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1j YXRjaChkKXt9fSxIPWZ1bmN0aW9uKGEpe2EudHlwZT1hLmRhdGEsZi5ldmVudC5oYW5kbGUuYXBwbHko dGhpcyxhcmd1bWVudHMpfTtmLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToi bW91c2VvdXQifSxmdW5jdGlvbihhLGIpe2YuZXZlbnQuc3BlY2lhbFthXT17c2V0dXA6ZnVuY3Rpb24o Yyl7Zi5ldmVudC5hZGQodGhpcyxiLGMmJmMuc2VsZWN0b3I/SDpHLGEpfSx0ZWFyZG93bjpmdW5jdGlv bihhKXtmLmV2ZW50LnJlbW92ZSh0aGlzLGIsYSYmYS5zZWxlY3Rvcj9IOkcpfX19KSxmLnN1cHBvcnQu c3VibWl0QnViYmxlc3x8KGYuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKGEsYil7 aWYoIWYubm9kZU5hbWUodGhpcywiZm9ybSIpKWYuZXZlbnQuYWRkKHRoaXMsImNsaWNrLnNwZWNpYWxT dWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9Yi50eXBlOyhjPT09InN1Ym1pdCJ8fGM9 PT0iaW1hZ2UiKSYmZihiKS5jbG9zZXN0KCJmb3JtIikubGVuZ3RoJiZMKCJzdWJtaXQiLHRoaXMsYXJn dW1lbnRzKX0pLGYuZXZlbnQuYWRkKHRoaXMsImtleXByZXNzLnNwZWNpYWxTdWJtaXQiLGZ1bmN0aW9u KGEpe3ZhciBiPWEudGFyZ2V0LGM9Yi50eXBlOyhjPT09InRleHQifHxjPT09InBhc3N3b3JkIikmJmYo YikuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aCYmYS5rZXlDb2RlPT09MTMmJkwoInN1Ym1pdCIsdGhpcyxh cmd1bWVudHMpfSk7ZWxzZSByZXR1cm4hMX0sdGVhcmRvd246ZnVuY3Rpb24oYSl7Zi5ldmVudC5yZW1v dmUodGhpcywiLnNwZWNpYWxTdWJtaXQiKX19KTtpZighZi5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMpe3Zh ciBJLEo9ZnVuY3Rpb24oYSl7dmFyIGI9YS50eXBlLGM9YS52YWx1ZTtiPT09InJhZGlvInx8Yj09PSJj aGVja2JveCI/Yz1hLmNoZWNrZWQ6Yj09PSJzZWxlY3QtbXVsdGlwbGUiP2M9YS5zZWxlY3RlZEluZGV4 Pi0xP2YubWFwKGEub3B0aW9ucyxmdW5jdGlvbihhKXtyZXR1cm4gYS5zZWxlY3RlZH0pLmpvaW4oIi0i KToiIjpmLm5vZGVOYW1lKGEsInNlbGVjdCIpJiYoYz1hLnNlbGVjdGVkSW5kZXgpO3JldHVybiBjfSxL PWZ1bmN0aW9uKGMpe3ZhciBkPWMudGFyZ2V0LGUsZztpZighIXoudGVzdChkLm5vZGVOYW1lKSYmIWQu cmVhZE9ubHkpe2U9Zi5fZGF0YShkLCJfY2hhbmdlX2RhdGEiKSxnPUooZCksKGMudHlwZSE9PSJmb2N1 c291dCJ8fGQudHlwZSE9PSJyYWRpbyIpJiZmLl9kYXRhKGQsIl9jaGFuZ2VfZGF0YSIsZyk7aWYoZT09

PWJ8fGc9PT1lKXJldHVybjtpZihlIT1udWxsfHxnKWMudHlwZT0iY2hhbmdlIixjLmxpdmVGaXJlZD1i LGYuZXZlbnQudHJpZ2dlcihjLGFyZ3VtZW50c1sxXSxkKX19O2YuZXZlbnQuc3BlY2lhbC5jaGFuZ2U9 e2ZpbHRlcnM6e2ZvY3Vzb3V0OkssYmVmb3JlZGVhY3RpdmF0ZTpLLGNsaWNrOmZ1bmN0aW9uKGEpe3Zh ciBiPWEudGFyZ2V0LGM9Zi5ub2RlTmFtZShiLCJpbnB1dCIpP2IudHlwZToiIjsoYz09PSJyYWRpbyJ8 fGM9PT0iY2hlY2tib3gifHxmLm5vZGVOYW1lKGIsInNlbGVjdCIpKSYmSy5jYWxsKHRoaXMsYSl9LGtl eWRvd246ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1mLm5vZGVOYW1lKGIsImlucHV0Iik/Yi50 eXBlOiIiOyhhLmtleUNvZGU9PT0xMyYmIWYubm9kZU5hbWUoYiwidGV4dGFyZWEiKXx8YS5rZXlDb2Rl PT09MzImJihjPT09ImNoZWNrYm94Inx8Yz09PSJyYWRpbyIpfHxjPT09InNlbGVjdC1tdWx0aXBsZSIp JiZLLmNhbGwodGhpcyxhKX0sYmVmb3JlYWN0aXZhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7 Zi5fZGF0YShiLCJfY2hhbmdlX2RhdGEiLEooYikpfX0sc2V0dXA6ZnVuY3Rpb24oYSxiKXtpZih0aGlz LnR5cGU9PT0iZmlsZSIpcmV0dXJuITE7Zm9yKHZhciBjIGluIEkpZi5ldmVudC5hZGQodGhpcyxjKyIu c3BlY2lhbENoYW5nZSIsSVtjXSk7cmV0dXJuIHoudGVzdCh0aGlzLm5vZGVOYW1lKX0sdGVhcmRvd246 ZnVuY3Rpb24oYSl7Zi5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxDaGFuZ2UiKTtyZXR1cm4gei50 ZXN0KHRoaXMubm9kZU5hbWUpfX0sST1mLmV2ZW50LnNwZWNpYWwuY2hhbmdlLmZpbHRlcnMsSS5mb2N1 cz1JLmJlZm9yZWFjdGl2YXRlfWYuc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8Zi5lYWNoKHtmb2N1czoi Zm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGUoYSl7dmFyIGM9 Zi5ldmVudC5maXgoYSk7Yy50eXBlPWIsYy5vcmlnaW5hbEV2ZW50PXt9LGYuZXZlbnQudHJpZ2dlcihj LG51bGwsYy50YXJnZXQpLGMuaXNEZWZhdWx0UHJldmVudGVkKCkmJmEucHJldmVudERlZmF1bHQoKX12 YXIgZD0wO2YuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXtkKys9PT0wJiZjLmFkZEV2 ZW50TGlzdGVuZXIoYSxlLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLWQ9PT0wJiZjLnJlbW92ZUV2 ZW50TGlzdGVuZXIoYSxlLCEwKX19fSksZi5lYWNoKFsiYmluZCIsIm9uZSJdLGZ1bmN0aW9uKGEsYyl7 Zi5mbltjXT1mdW5jdGlvbihhLGQsZSl7dmFyIGc7aWYodHlwZW9mIGE9PSJvYmplY3QiKXtmb3IodmFy IGggaW4gYSl0aGlzW2NdKGgsZCxhW2hdLGUpO3JldHVybiB0aGlzfWlmKGFyZ3VtZW50cy5sZW5ndGg9 PT0yfHxkPT09ITEpZT1kLGQ9YjtjPT09Im9uZSI/KGc9ZnVuY3Rpb24oYSl7Zih0aGlzKS51bmJpbmQo YSxnKTtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGcuZ3VpZD1lLmd1aWR8fGYuZ3VpZCsr KTpnPWU7aWYoYT09PSJ1bmxvYWQiJiZjIT09Im9uZSIpdGhpcy5vbmUoYSxkLGUpO2Vsc2UgZm9yKHZh ciBpPTAsaj10aGlzLmxlbmd0aDtpPGo7aSsrKWYuZXZlbnQuYWRkKHRoaXNbaV0sYSxnLGQpO3JldHVy biB0aGlzfX0pLGYuZm4uZXh0ZW5kKHt1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYT09Im9i amVjdCImJiFhLnByZXZlbnREZWZhdWx0KWZvcih2YXIgYyBpbiBhKXRoaXMudW5iaW5kKGMsYVtjXSk7 ZWxzZSBmb3IodmFyIGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspZi5ldmVudC5yZW1vdmUodGhpc1tk XSxhLGIpO3JldHVybiB0aGlzfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5s aXZlKGIsYyxkLGEpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYXJndW1lbnRzLmxl bmd0aD09PTA/dGhpcy51bmJpbmQoImxpdmUiKTp0aGlzLmRpZShiLG51bGwsYyxhKX0sdHJpZ2dlcjpm dW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnRyaWdnZXIoYSxi LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYodGhpc1swXSlyZXR1cm4gZi5l dmVudC50cmlnZ2VyKGEsYix0aGlzWzBdLCEwKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3Vt ZW50cyxjPWEuZ3VpZHx8Zi5ndWlkKyssZD0wLGU9ZnVuY3Rpb24oYyl7dmFyIGU9KGYuZGF0YSh0aGlz LCJsYXN0VG9nZ2xlIithLmd1aWQpfHwwKSVkO2YuZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQs ZSsxKSxjLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGJbZV0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwh MX07ZS5ndWlkPWM7d2hpbGUoZDxiLmxlbmd0aCliW2QrK10uZ3VpZD1jO3JldHVybiB0aGlzLmNsaWNr KGUpfSxob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2 ZShifHxhKX19KTt2YXIgTT17Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0Iixtb3VzZWVudGVy OiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In07Zi5lYWNoKFsibGl2ZSIsImRpZSJdLGZ1 bmN0aW9uKGEsYyl7Zi5mbltjXT1mdW5jdGlvbihhLGQsZSxnKXt2YXIgaCxpPTAsaixrLGwsbT1nfHx0 aGlzLnNlbGVjdG9yLG49Zz90aGlzOmYodGhpcy5jb250ZXh0KTtpZih0eXBlb2YgYT09Im9iamVjdCIm JiFhLnByZXZlbnREZWZhdWx0KXtmb3IodmFyIG8gaW4gYSluW2NdKG8sZCxhW29dLG0pO3JldHVybiB0 aGlzfWlmKGM9PT0iZGllIiYmIWEmJmcmJmcuY2hhckF0KDApPT09Ii4iKXtuLnVuYmluZChnKTtyZXR1 cm4gdGhpc31pZihkPT09ITF8fGYuaXNGdW5jdGlvbihkKSllPWR8fEUsZD1iO2E9KGF8fCIiKS5zcGxp dCgiICIpO3doaWxlKChoPWFbaSsrXSkhPW51bGwpe2o9eS5leGVjKGgpLGs9IiIsaiYmKGs9alswXSxo PWgucmVwbGFjZSh5LCIiKSk7aWYoaD09PSJob3ZlciIpe2EucHVzaCgibW91c2VlbnRlciIraywibW91 c2VsZWF2ZSIrayk7Y29udGludWV9bD1oLE1baF0/KGEucHVzaChNW2hdK2spLGg9aCtrKTpoPShNW2hd fHxoKStrO2lmKGM9PT0ibGl2ZSIpZm9yKHZhciBwPTAscT1uLmxlbmd0aDtwPHE7cCsrKWYuZXZlbnQu YWRkKG5bcF0sImxpdmUuIitPKGgsbSkse2RhdGE6ZCxzZWxlY3RvcjptLGhhbmRsZXI6ZSxvcmlnVHlw ZTpoLG9yaWdIYW5kbGVyOmUscHJlVHlwZTpsfSk7ZWxzZSBuLnVuYmluZCgibGl2ZS4iK08oaCxtKSxl KX1yZXR1cm4gdGhpc319KSxmLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJl c2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92 ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3Vi bWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtm LmZuW2JdPWZ1bmN0aW9uKGEsYyl7Yz09bnVsbCYmKGM9YSxhPW51bGwpO3JldHVybiBhcmd1bWVudHMu bGVuZ3RoPjA/dGhpcy5iaW5kKGIsYSxjKTp0aGlzLnRyaWdnZXIoYil9LGYuYXR0ckZuJiYoZi5hdHRy

Rm5bYl09ITApfSksZnVuY3Rpb24oKXtmdW5jdGlvbiB1KGEsYixjLGQsZSxmKXtmb3IodmFyIGc9MCxo PWQubGVuZ3RoO2c8aDtnKyspe3ZhciBpPWRbZ107aWYoaSl7dmFyIGo9ITE7aT1pW2FdO3doaWxlKGkp e2lmKGkuc2l6Y2FjaGU9PT1jKXtqPWRbaS5zaXpzZXRdO2JyZWFrfWlmKGkubm9kZVR5cGU9PT0xKXtm fHwoaS5zaXpjYWNoZT1jLGkuc2l6c2V0PWcpO2lmKHR5cGVvZiBiIT0ic3RyaW5nIil7aWYoaT09PWIp e2o9ITA7YnJlYWt9fWVsc2UgaWYoay5maWx0ZXIoYixbaV0pLmxlbmd0aD4wKXtqPWk7YnJlYWt9fWk9 aVthXX1kW2ddPWp9fX1mdW5jdGlvbiB0KGEsYixjLGQsZSxmKXtmb3IodmFyIGc9MCxoPWQubGVuZ3Ro O2c8aDtnKyspe3ZhciBpPWRbZ107aWYoaSl7dmFyIGo9ITE7aT1pW2FdO3doaWxlKGkpe2lmKGkuc2l6 Y2FjaGU9PT1jKXtqPWRbaS5zaXpzZXRdO2JyZWFrfWkubm9kZVR5cGU9PT0xJiYhZiYmKGkuc2l6Y2Fj aGU9YyxpLnNpenNldD1nKTtpZihpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iKXtqPWk7YnJlYWt9 aT1pW2FdfWRbZ109an19fXZhciBhPS8oKD86XCgoPzpcKFteKCldK1wpfFteKCldKykrXCl8XFsoPzpc W1teXFtcXV0qXF18WyciXVteJyJdKlsnIl18W15cW1xdJyJdKykrXF18XFwufFteID4rfiwoXFtcXF0r KSt8Wz4rfl0pKFxzKixccyopPygoPzoufFxyfFxuKSopL2csZD0wLGU9T2JqZWN0LnByb3RvdHlwZS50 b1N0cmluZyxnPSExLGg9ITAsaT0vXFwvZyxqPS9cVy87WzAsMF0uc29ydChmdW5jdGlvbigpe2g9ITE7 cmV0dXJuIDB9KTt2YXIgaz1mdW5jdGlvbihiLGQsZixnKXtmPWZ8fFtdLGQ9ZHx8Yzt2YXIgaD1kO2lm KGQubm9kZVR5cGUhPT0xJiZkLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighYnx8dHlwZW9mIGIhPSJz dHJpbmciKXJldHVybiBmO3ZhciBpLGosbixvLHEscixzLHQsdT0hMCx3PWsuaXNYTUwoZCkseD1bXSx5 PWI7ZG97YS5leGVjKCIiKSxpPWEuZXhlYyh5KTtpZihpKXt5PWlbM10seC5wdXNoKGlbMV0pO2lmKGlb Ml0pe289aVszXTticmVha319fXdoaWxlKGkpO2lmKHgubGVuZ3RoPjEmJm0uZXhlYyhiKSlpZih4Lmxl bmd0aD09PTImJmwucmVsYXRpdmVbeFswXV0paj12KHhbMF0reFsxXSxkKTtlbHNle2o9bC5yZWxhdGl2 ZVt4WzBdXT9bZF06ayh4LnNoaWZ0KCksZCk7d2hpbGUoeC5sZW5ndGgpYj14LnNoaWZ0KCksbC5yZWxh dGl2ZVtiXSYmKGIrPXguc2hpZnQoKSksaj12KGIsail9ZWxzZXshZyYmeC5sZW5ndGg+MSYmZC5ub2Rl VHlwZT09PTkmJiF3JiZsLm1hdGNoLklELnRlc3QoeFswXSkmJiFsLm1hdGNoLklELnRlc3QoeFt4Lmxl bmd0aC0xXSkmJihxPWsuZmluZCh4LnNoaWZ0KCksZCx3KSxkPXEuZXhwcj9rLmZpbHRlcihxLmV4cHIs cS5zZXQpWzBdOnEuc2V0WzBdKTtpZihkKXtxPWc/e2V4cHI6eC5wb3AoKSxzZXQ6cChnKX06ay5maW5k KHgucG9wKCkseC5sZW5ndGg9PT0xJiYoeFswXT09PSJ+Inx8eFswXT09PSIrIikmJmQucGFyZW50Tm9k ZT9kLnBhcmVudE5vZGU6ZCx3KSxqPXEuZXhwcj9rLmZpbHRlcihxLmV4cHIscS5zZXQpOnEuc2V0LHgu bGVuZ3RoPjA/bj1wKGopOnU9ITE7d2hpbGUoeC5sZW5ndGgpcj14LnBvcCgpLHM9cixsLnJlbGF0aXZl W3JdP3M9eC5wb3AoKTpyPSIiLHM9PW51bGwmJihzPWQpLGwucmVsYXRpdmVbcl0obixzLHcpfWVsc2Ug bj14PVtdfW58fChuPWopLG58fGsuZXJyb3Iocnx8Yik7aWYoZS5jYWxsKG4pPT09IltvYmplY3QgQXJy YXldIilpZighdSlmLnB1c2guYXBwbHkoZixuKTtlbHNlIGlmKGQmJmQubm9kZVR5cGU9PT0xKWZvcih0 PTA7blt0XSE9bnVsbDt0Kyspblt0XSYmKG5bdF09PT0hMHx8blt0XS5ub2RlVHlwZT09PTEmJmsuY29u dGFpbnMoZCxuW3RdKSkmJmYucHVzaChqW3RdKTtlbHNlIGZvcih0PTA7blt0XSE9bnVsbDt0Kyspblt0 XSYmblt0XS5ub2RlVHlwZT09PTEmJmYucHVzaChqW3RdKTtlbHNlIHAobixmKTtvJiYoayhvLGgsZixn KSxrLnVuaXF1ZVNvcnQoZikpO3JldHVybiBmfTtrLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7aWYocil7 Zz1oLGEuc29ydChyKTtpZihnKWZvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWFbYl09PT1hW2ItMV0m JmEuc3BsaWNlKGItLSwxKX1yZXR1cm4gYX0say5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGso YSxudWxsLG51bGwsYil9LGsubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGsoYixu dWxsLG51bGwsW2FdKS5sZW5ndGg+MH0say5maW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZighYSly ZXR1cm5bXTtmb3IodmFyIGU9MCxmPWwub3JkZXIubGVuZ3RoO2U8ZjtlKyspe3ZhciBnLGg9bC5vcmRl cltlXTtpZihnPWwubGVmdE1hdGNoW2hdLmV4ZWMoYSkpe3ZhciBqPWdbMV07Zy5zcGxpY2UoMSwxKTtp ZihqLnN1YnN0cihqLmxlbmd0aC0xKSE9PSJcXCIpe2dbMV09KGdbMV18fCIiKS5yZXBsYWNlKGksIiIp LGQ9bC5maW5kW2hdKGcsYixjKTtpZihkIT1udWxsKXthPWEucmVwbGFjZShsLm1hdGNoW2hdLCIiKTti cmVha319fX1kfHwoZD10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/Yi5n ZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOltdKTtyZXR1cm57c2V0OmQsZXhwcjphfX0say5maWx0ZXI9 ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsZyxoPWEsaT1bXSxqPWMsbT1jJiZjWzBdJiZrLmlzWE1MKGNb MF0pO3doaWxlKGEmJmMubGVuZ3RoKXtmb3IodmFyIG4gaW4gbC5maWx0ZXIpaWYoKGY9bC5sZWZ0TWF0 Y2hbbl0uZXhlYyhhKSkhPW51bGwmJmZbMl0pe3ZhciBvLHAscT1sLmZpbHRlcltuXSxyPWZbMV07Zz0h MSxmLnNwbGljZSgxLDEpO2lmKHIuc3Vic3RyKHIubGVuZ3RoLTEpPT09IlxcIiljb250aW51ZTtqPT09 aSYmKGk9W10pO2lmKGwucHJlRmlsdGVyW25dKXtmPWwucHJlRmlsdGVyW25dKGYsaixkLGksZSxtKTtp ZighZilnPW89ITA7ZWxzZSBpZihmPT09ITApY29udGludWV9aWYoZilmb3IodmFyIHM9MDsocD1qW3Nd KSE9bnVsbDtzKyspaWYocCl7bz1xKHAsZixzLGopO3ZhciB0PWVeISFvO2QmJm8hPW51bGw/dD9nPSEw Ompbc109ITE6dCYmKGkucHVzaChwKSxnPSEwKX1pZihvIT09Yil7ZHx8KGo9aSksYT1hLnJlcGxhY2Uo bC5tYXRjaFtuXSwiIik7aWYoIWcpcmV0dXJuW107YnJlYWt9fWlmKGE9PT1oKWlmKGc9PW51bGwpay5l cnJvcihhKTtlbHNlIGJyZWFrO2g9YX1yZXR1cm4gan0say5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyJT eW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2F9O3ZhciBsPWsuc2VsZWN0b3Jz PXtvcmRlcjpbIklEIiwiTkFNRSIsIlRBRyJdLG1hdGNoOntJRDovIygoPzpbXHdcdTAwYzAtXHVGRkZG XC1dfFxcLikrKS8sQ0xBU1M6L1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLyxOQU1FOi9c W25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLyxBVFRSOi9cW1xz KigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVxzKig/OihcUz89KVxzKig/OihbJyJdKSguKj8p XDN8KCM/KD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKil8KXwpXHMqXF0vLFRBRzovXigoPzpbXHdc

dTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLyxDSElMRDovOihvbmx5fG50aHxsYXN0fGZpcnN0KS1jaGls ZCg/OlwoXHMqKGV2ZW58b2RkfCg/OlsrXC1dP1xkK3woPzpbK1wtXT9cZCopP25ccyooPzpbK1wtXVxz KlxkKyk/KSlccypcKSk/LyxQT1M6LzoobnRofGVxfGd0fGx0fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86 XCgoXGQqKVwpKT8oPz1bXlwtXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwu KSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vfSxsZWZ0TWF0Y2g6 e30sYXR0ck1hcDp7ImNsYXNzIjoiY2xhc3NOYW1lIiwiZm9yIjoiaHRtbEZvciJ9LGF0dHJIYW5kbGU6 e2hyZWY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIil9LHR5cGU6ZnVuY3Rp b24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJ0eXBlIil9fSxyZWxhdGl2ZTp7IisiOmZ1bmN0aW9u KGEsYil7dmFyIGM9dHlwZW9mIGI9PSJzdHJpbmciLGQ9YyYmIWoudGVzdChiKSxlPWMmJiFkO2QmJihi PWIudG9Mb3dlckNhc2UoKSk7Zm9yKHZhciBmPTAsZz1hLmxlbmd0aCxoO2Y8ZztmKyspaWYoaD1hW2Zd KXt3aGlsZSgoaD1oLnByZXZpb3VzU2libGluZykmJmgubm9kZVR5cGUhPT0xKTthW2ZdPWV8fGgmJmgu bm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/aHx8ITE6aD09PWJ9ZSYmay5maWx0ZXIoYixhLCEwKX0s Ij4iOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD10eXBlb2YgYj09InN0cmluZyIsZT0wLGY9YS5sZW5ndGg7 aWYoZCYmIWoudGVzdChiKSl7Yj1iLnRvTG93ZXJDYXNlKCk7Zm9yKDtlPGY7ZSsrKXtjPWFbZV07aWYo Yyl7dmFyIGc9Yy5wYXJlbnROb2RlO2FbZV09Zy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yj9nOiEx fX19ZWxzZXtmb3IoO2U8ZjtlKyspYz1hW2VdLGMmJihhW2VdPWQ/Yy5wYXJlbnROb2RlOmMucGFyZW50 Tm9kZT09PWIpO2QmJmsuZmlsdGVyKGIsYSwhMCl9fSwiIjpmdW5jdGlvbihhLGIsYyl7dmFyIGUsZj1k KyssZz11O3R5cGVvZiBiPT0ic3RyaW5nIiYmIWoudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgpLGU9 YixnPXQpLGcoInBhcmVudE5vZGUiLGIsZixhLGUsYyl9LCJ+IjpmdW5jdGlvbihhLGIsYyl7dmFyIGUs Zj1kKyssZz11O3R5cGVvZiBiPT0ic3RyaW5nIiYmIWoudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgp LGU9YixnPXQpLGcoInByZXZpb3VzU2libGluZyIsYixmLGEsZSxjKX19LGZpbmQ6e0lEOmZ1bmN0aW9u KGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFjKXt2YXIgZD1i LmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBkJiZkLnBhcmVudE5vZGU/W2RdOltdfX0sTkFNRTpm dW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlOYW1lIT0idW5kZWZpbmVkIil7dmFy IGM9W10sZD1iLmdldEVsZW1lbnRzQnlOYW1lKGFbMV0pO2Zvcih2YXIgZT0wLGY9ZC5sZW5ndGg7ZTxm O2UrKylkW2VdLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09YVsxXSYmYy5wdXNoKGRbZV0pO3JldHVybiBj Lmxlbmd0aD09PTA/bnVsbDpjfX0sVEFHOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGIuZ2V0RWxlbWVu dHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiKXJldHVybiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0p fX0scHJlRmlsdGVyOntDTEFTUzpmdW5jdGlvbihhLGIsYyxkLGUsZil7YT0iICIrYVsxXS5yZXBsYWNl KGksIiIpKyIgIjtpZihmKXJldHVybiBhO2Zvcih2YXIgZz0wLGg7KGg9YltnXSkhPW51bGw7ZysrKWgm JihlXihoLmNsYXNzTmFtZSYmKCIgIitoLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoL1tcdFxuXHJdL2cs IiAiKS5pbmRleE9mKGEpPj0wKT9jfHxkLnB1c2goaCk6YyYmKGJbZ109ITEpKTtyZXR1cm4hMX0sSUQ6 ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV0ucmVwbGFjZShpLCIiKX0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0 dXJuIGFbMV0ucmVwbGFjZShpLCIiKS50b0xvd2VyQ2FzZSgpfSxDSElMRDpmdW5jdGlvbihhKXtpZihh WzFdPT09Im50aCIpe2FbMl18fGsuZXJyb3IoYVswXSksYVsyXT1hWzJdLnJlcGxhY2UoL15cK3xccyov ZywiIik7dmFyIGI9LygtPykoXGQqKSg/Om4oWytcLV0/XGQqKSk/Ly5leGVjKGFbMl09PT0iZXZlbiIm JiIybiJ8fGFbMl09PT0ib2RkIiYmIjJuKzEifHwhL1xELy50ZXN0KGFbMl0pJiYiMG4rIithWzJdfHxh WzJdKTthWzJdPWJbMV0rKGJbMl18fDEpLTAsYVszXT1iWzNdLTB9ZWxzZSBhWzJdJiZrLmVycm9yKGFb MF0pO2FbMF09ZCsrO3JldHVybiBhfSxBVFRSOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hWzFd PWFbMV0ucmVwbGFjZShpLCIiKTshZiYmbC5hdHRyTWFwW2ddJiYoYVsxXT1sLmF0dHJNYXBbZ10pLGFb NF09KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGksIiIpLGFbMl09PT0ifj0iJiYoYVs0XT0iICIrYVs0 XSsiICIpO3JldHVybiBhfSxQU0VVRE86ZnVuY3Rpb24oYixjLGQsZSxmKXtpZihiWzFdPT09Im5vdCIp aWYoKGEuZXhlYyhiWzNdKXx8IiIpLmxlbmd0aD4xfHwvXlx3Ly50ZXN0KGJbM10pKWJbM109ayhiWzNd LG51bGwsbnVsbCxjKTtlbHNle3ZhciBnPWsuZmlsdGVyKGJbM10sYyxkLCEwXmYpO2R8fGUucHVzaC5h cHBseShlLGcpO3JldHVybiExfWVsc2UgaWYobC5tYXRjaC5QT1MudGVzdChiWzBdKXx8bC5tYXRjaC5D SElMRC50ZXN0KGJbMF0pKXJldHVybiEwO3JldHVybiBifSxQT1M6ZnVuY3Rpb24oYSl7YS51bnNoaWZ0 KCEwKTtyZXR1cm4gYX19LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJs ZWQ9PT0hMSYmYS50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRp c2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2hlY2tlZD09PSEwfSxzZWxl Y3RlZDpmdW5jdGlvbihhKXthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O3Jl dHVybiBhLnNlbGVjdGVkPT09ITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hIWEuZmlyc3RDaGls ZH0sZW1wdHk6ZnVuY3Rpb24oYSl7cmV0dXJuIWEuZmlyc3RDaGlsZH0saGFzOmZ1bmN0aW9uKGEsYixj KXtyZXR1cm4hIWsoY1szXSxhKS5sZW5ndGh9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4vaFxkL2ku dGVzdChhLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYj1hLmdldEF0dHJpYnV0ZSgidHlw ZSIpLGM9YS50eXBlO3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYidGV4 dCI9PT1jJiYoYj09PWN8fGI9PT1udWxsKX0scmFkaW86ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5h bWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJyYWRpbyI9PT1hLnR5cGV9LGNoZWNrYm94OmZ1bmN0 aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiY2hlY2tib3gi PT09YS50eXBlfSxmaWxlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9 PT0iaW5wdXQiJiYiZmlsZSI9PT1hLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5v

ZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicGFzc3dvcmQiPT09YS50eXBlfSxzdWJtaXQ6 ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0 Inx8Yj09PSJidXR0b24iKSYmInN1Ym1pdCI9PT1hLnR5cGV9LGltYWdlOmZ1bmN0aW9uKGEpe3JldHVy biBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiaW1hZ2UiPT09YS50eXBlfSxyZXNl dDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKGI9PT0iaW5w dXQifHxiPT09ImJ1dHRvbiIpJiYicmVzZXQiPT09YS50eXBlfSxidXR0b246ZnVuY3Rpb24oYSl7dmFy IGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBiPT09ImlucHV0IiYmImJ1dHRvbiI9PT1h LnR5cGV8fGI9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuL2lucHV0fHNlbGVjdHx0 ZXh0YXJlYXxidXR0b24vaS50ZXN0KGEubm9kZU5hbWUpfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4g YT09PWEub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50fX0sc2V0RmlsdGVyczp7Zmlyc3Q6ZnVuY3Rp b24oYSxiKXtyZXR1cm4gYj09PTB9LGxhc3Q6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGI9PT1kLmxl bmd0aC0xfSxldmVuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIlMj09PTB9LG9kZDpmdW5jdGlvbihhLGIp e3JldHVybiBiJTI9PT0xfSxsdDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI8Y1szXS0wfSxndDpmdW5j dGlvbihhLGIsYyl7cmV0dXJuIGI+Y1szXS0wfSxudGg6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNd LTA9PT1ifSxlcTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGNbM10tMD09PWJ9fSxmaWx0ZXI6e1BTRVVE TzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iWzFdLGY9bC5maWx0ZXJzW2VdO2lmKGYpcmV0dXJuIGYo YSxjLGIsZCk7aWYoZT09PSJjb250YWlucyIpcmV0dXJuKGEudGV4dENvbnRlbnR8fGEuaW5uZXJUZXh0 fHxrLmdldFRleHQoW2FdKXx8IiIpLmluZGV4T2YoYlszXSk+PTA7aWYoZT09PSJub3QiKXt2YXIgZz1i WzNdO2Zvcih2YXIgaD0wLGk9Zy5sZW5ndGg7aDxpO2grKylpZihnW2hdPT09YSlyZXR1cm4hMTtyZXR1 cm4hMH1rLmVycm9yKGUpfSxDSElMRDpmdW5jdGlvbihhLGIpe3ZhciBjPWJbMV0sZD1hO3N3aXRjaChj KXtjYXNlIm9ubHkiOmNhc2UiZmlyc3QiOndoaWxlKGQ9ZC5wcmV2aW91c1NpYmxpbmcpaWYoZC5ub2Rl VHlwZT09PTEpcmV0dXJuITE7aWYoYz09PSJmaXJzdCIpcmV0dXJuITA7ZD1hO2Nhc2UibGFzdCI6d2hp bGUoZD1kLm5leHRTaWJsaW5nKWlmKGQubm9kZVR5cGU9PT0xKXJldHVybiExO3JldHVybiEwO2Nhc2Ui bnRoIjp2YXIgZT1iWzJdLGY9YlszXTtpZihlPT09MSYmZj09PTApcmV0dXJuITA7dmFyIGc9YlswXSxo PWEucGFyZW50Tm9kZTtpZihoJiYoaC5zaXpjYWNoZSE9PWd8fCFhLm5vZGVJbmRleCkpe3ZhciBpPTA7 Zm9yKGQ9aC5maXJzdENoaWxkO2Q7ZD1kLm5leHRTaWJsaW5nKWQubm9kZVR5cGU9PT0xJiYoZC5ub2Rl SW5kZXg9KytpKTtoLnNpemNhY2hlPWd9dmFyIGo9YS5ub2RlSW5kZXgtZjtyZXR1cm4gZT09PTA/aj09 PTA6aiVlPT09MCYmai9lPj0wfX0sSUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlVHlwZT09PTEm JmEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0iKiIm JmEubm9kZVR5cGU9PT0xfHxhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifSxDTEFTUzpmdW5jdGlv bihhLGIpe3JldHVybigiICIrKGEuY2xhc3NOYW1lfHxhLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSkrIiAi KS5pbmRleE9mKGIpPi0xfSxBVFRSOmZ1bmN0aW9uKGEsYil7dmFyIGM9YlsxXSxkPWwuYXR0ckhhbmRs ZVtjXT9sLmF0dHJIYW5kbGVbY10oYSk6YVtjXSE9bnVsbD9hW2NdOmEuZ2V0QXR0cmlidXRlKGMpLGU9 ZCsiIixmPWJbMl0sZz1iWzRdO3JldHVybiBkPT1udWxsP2Y9PT0iIT0iOmY9PT0iPSI/ZT09PWc6Zj09 PSIqPSI/ZS5pbmRleE9mKGcpPj0wOmY9PT0ifj0iPygiICIrZSsiICIpLmluZGV4T2YoZyk+PTA6Zz9m PT09IiE9Ij9lIT09ZzpmPT09Il49Ij9lLmluZGV4T2YoZyk9PT0wOmY9PT0iJD0iP2Uuc3Vic3RyKGUu bGVuZ3RoLWcubGVuZ3RoKT09PWc6Zj09PSJ8PSI/ZT09PWd8fGUuc3Vic3RyKDAsZy5sZW5ndGgrMSk9 PT1nKyItIjohMTplJiZkIT09ITF9LFBPUzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iWzJdLGY9bC5z ZXRGaWx0ZXJzW2VdO2lmKGYpcmV0dXJuIGYoYSxjLGIsZCl9fX0sbT1sLm1hdGNoLlBPUyxuPWZ1bmN0 aW9uKGEsYil7cmV0dXJuIlxcIisoYi0wKzEpfTtmb3IodmFyIG8gaW4gbC5tYXRjaClsLm1hdGNoW29d PW5ldyBSZWdFeHAobC5tYXRjaFtvXS5zb3VyY2UrLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291 cmNlKSxsLmxlZnRNYXRjaFtvXT1uZXcgUmVnRXhwKC8oXig/Oi58XHJ8XG4pKj8pLy5zb3VyY2UrbC5t YXRjaFtvXS5zb3VyY2UucmVwbGFjZSgvXFwoXGQrKS9nLG4pKTt2YXIgcD1mdW5jdGlvbihhLGIpe2E9 QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSwwKTtpZihiKXtiLnB1c2guYXBwbHkoYixhKTtyZXR1 cm4gYn1yZXR1cm4gYX07dHJ5e0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuZG9jdW1lbnRFbGVt ZW50LmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2gocSl7cD1mdW5jdGlvbihhLGIpe3ZhciBj PTAsZD1ifHxbXTtpZihlLmNhbGwoYSk9PT0iW29iamVjdCBBcnJheV0iKUFycmF5LnByb3RvdHlwZS5w dXNoLmFwcGx5KGQsYSk7ZWxzZSBpZih0eXBlb2YgYS5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZj1h Lmxlbmd0aDtjPGY7YysrKWQucHVzaChhW2NdKTtlbHNlIGZvcig7YVtjXTtjKyspZC5wdXNoKGFbY10p O3JldHVybiBkfX12YXIgcixzO2MuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u P3I9ZnVuY3Rpb24oYSxiKXtpZihhPT09Yil7Zz0hMDtyZXR1cm4gMH1pZighYS5jb21wYXJlRG9jdW1l bnRQb3NpdGlvbnx8IWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pcmV0dXJuIGEuY29tcGFyZURvY3Vt ZW50UG9zaXRpb24/LTE6MTtyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSY0Py0xOjF9 OihyPWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2c9ITA7cmV0dXJuIDB9aWYoYS5zb3VyY2VJbmRleCYm Yi5zb3VyY2VJbmRleClyZXR1cm4gYS5zb3VyY2VJbmRleC1iLnNvdXJjZUluZGV4O3ZhciBjLGQsZT1b XSxmPVtdLGg9YS5wYXJlbnROb2RlLGk9Yi5wYXJlbnROb2RlLGo9aDtpZihoPT09aSlyZXR1cm4gcyhh LGIpO2lmKCFoKXJldHVybi0xO2lmKCFpKXJldHVybiAxO3doaWxlKGopZS51bnNoaWZ0KGopLGo9ai5w YXJlbnROb2RlO2o9aTt3aGlsZShqKWYudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtjPWUubGVuZ3Ro LGQ9Zi5sZW5ndGg7Zm9yKHZhciBrPTA7azxjJiZrPGQ7aysrKWlmKGVba10hPT1mW2tdKXJldHVybiBz KGVba10sZltrXSk7cmV0dXJuIGs9PT1jP3MoYSxmW2tdLC0xKTpzKGVba10sYiwxKX0scz1mdW5jdGlv

bihhLGIsYyl7aWYoYT09PWIpcmV0dXJuIGM7dmFyIGQ9YS5uZXh0U2libGluZzt3aGlsZShkKXtpZihk PT09YilyZXR1cm4tMTtkPWQubmV4dFNpYmxpbmd9cmV0dXJuIDF9KSxrLmdldFRleHQ9ZnVuY3Rpb24o YSl7dmFyIGI9IiIsYztmb3IodmFyIGQ9MDthW2RdO2QrKyljPWFbZF0sYy5ub2RlVHlwZT09PTN8fGMu bm9kZVR5cGU9PT00P2IrPWMubm9kZVZhbHVlOmMubm9kZVR5cGUhPT04JiYoYis9ay5nZXRUZXh0KGMu Y2hpbGROb2RlcykpO3JldHVybiBifSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2 IiksZD0ic2NyaXB0IisobmV3IERhdGUpLmdldFRpbWUoKSxlPWMuZG9jdW1lbnRFbGVtZW50O2EuaW5u ZXJIVE1MPSI8YSBuYW1lPSciK2QrIicvPiIsZS5pbnNlcnRCZWZvcmUoYSxlLmZpcnN0Q2hpbGQpLGMu Z2V0RWxlbWVudEJ5SWQoZCkmJihsLmZpbmQuSUQ9ZnVuY3Rpb24oYSxjLGQpe2lmKHR5cGVvZiBjLmdl dEVsZW1lbnRCeUlkIT0idW5kZWZpbmVkIiYmIWQpe3ZhciBlPWMuZ2V0RWxlbWVudEJ5SWQoYVsxXSk7 cmV0dXJuIGU/ZS5pZD09PWFbMV18fHR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQi JiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09YVsxXT9bZV06YjpbXX19LGwuZmls dGVyLklEPWZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSE9InVuZGVm aW5lZCImJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmMmJmMu bm9kZVZhbHVlPT09Yn0pLGUucmVtb3ZlQ2hpbGQoYSksZT1hPW51bGx9KCksZnVuY3Rpb24oKXt2YXIg YT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuYXBwZW5kQ2hpbGQoYy5jcmVhdGVDb21tZW50KCIiKSks YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aD4wJiYobC5maW5kLlRBRz1mdW5jdGlvbihh LGIpe3ZhciBjPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYVsxXSk7aWYoYVsxXT09PSIqIil7dmFyIGQ9 W107Zm9yKHZhciBlPTA7Y1tlXTtlKyspY1tlXS5ub2RlVHlwZT09PTEmJmQucHVzaChjW2VdKTtjPWR9 cmV0dXJuIGN9KSxhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsYS5maXJzdENoaWxkJiZ0eXBl b2YgYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9InVuZGVmaW5lZCImJmEuZmlyc3RDaGlsZC5nZXRB dHRyaWJ1dGUoImhyZWYiKSE9PSIjIiYmKGwuYXR0ckhhbmRsZS5ocmVmPWZ1bmN0aW9uKGEpe3JldHVy biBhLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9KSxhPW51bGx9KCksYy5xdWVyeVNlbGVjdG9yQWxsJiZm dW5jdGlvbigpe3ZhciBhPWssYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9Il9fc2l6emxlX18iO2Iu aW5uZXJIVE1MPSI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7aWYoIWIucXVlcnlTZWxlY3RvckFsbHx8Yi5x dWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aCE9PTApe2s9ZnVuY3Rpb24oYixlLGYsZyl7ZT1l fHxjO2lmKCFnJiYhay5pc1hNTChlKSl7dmFyIGg9L14oXHcrJCl8XlwuKFtcd1wtXSskKXxeIyhbXHdc LV0rJCkvLmV4ZWMoYik7aWYoaCYmKGUubm9kZVR5cGU9PT0xfHxlLm5vZGVUeXBlPT09OSkpe2lmKGhb MV0pcmV0dXJuIHAoZS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKSxmKTtpZihoWzJdJiZsLmZpbmQuQ0xB U1MmJmUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gcChlLmdldEVsZW1lbnRzQnlDbGFzc05h bWUoaFsyXSksZil9aWYoZS5ub2RlVHlwZT09PTkpe2lmKGI9PT0iYm9keSImJmUuYm9keSlyZXR1cm4g cChbZS5ib2R5XSxmKTtpZihoJiZoWzNdKXt2YXIgaT1lLmdldEVsZW1lbnRCeUlkKGhbM10pO2lmKCFp fHwhaS5wYXJlbnROb2RlKXJldHVybiBwKFtdLGYpO2lmKGkuaWQ9PT1oWzNdKXJldHVybiBwKFtpXSxm KX10cnl7cmV0dXJuIHAoZS5xdWVyeVNlbGVjdG9yQWxsKGIpLGYpfWNhdGNoKGope319ZWxzZSBpZihl Lm5vZGVUeXBlPT09MSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im9iamVjdCIpe3ZhciBtPWUs bj1lLmdldEF0dHJpYnV0ZSgiaWQiKSxvPW58fGQscT1lLnBhcmVudE5vZGUscj0vXlxzKlsrfl0vLnRl c3QoYik7bj9vPW8ucmVwbGFjZSgvJy9nLCJcXCQmIik6ZS5zZXRBdHRyaWJ1dGUoImlkIixvKSxyJiZx JiYoZT1lLnBhcmVudE5vZGUpO3RyeXtpZighcnx8cSlyZXR1cm4gcChlLnF1ZXJ5U2VsZWN0b3JBbGwo IltpZD0nIitvKyInXSAiK2IpLGYpfWNhdGNoKHMpe31maW5hbGx5e258fG0ucmVtb3ZlQXR0cmlidXRl KCJpZCIpfX19cmV0dXJuIGEoYixlLGYsZyl9O2Zvcih2YXIgZSBpbiBhKWtbZV09YVtlXTtiPW51bGx9 fSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5kb2N1bWVudEVsZW1lbnQsYj1hLm1hdGNoZXNTZWxlY3Rvcnx8 YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxhLm1zTWF0Y2hlc1Nl bGVjdG9yO2lmKGIpe3ZhciBkPSFiLmNhbGwoYy5jcmVhdGVFbGVtZW50KCJkaXYiKSwiZGl2IiksZT0h MTt0cnl7Yi5jYWxsKGMuZG9jdW1lbnRFbGVtZW50LCJbdGVzdCE9JyddOnNpenpsZSIpfWNhdGNoKGYp e2U9ITB9ay5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxjKXtjPWMucmVwbGFjZSgvXD1ccyooW14n IlxdXSopXHMqXF0vZywiPSckMSddIik7aWYoIWsuaXNYTUwoYSkpdHJ5e2lmKGV8fCFsLm1hdGNoLlBT RVVETy50ZXN0KGMpJiYhLyE9Ly50ZXN0KGMpKXt2YXIgZj1iLmNhbGwoYSxjKTtpZihmfHwhZHx8YS5k b2N1bWVudCYmYS5kb2N1bWVudC5ub2RlVHlwZSE9PTExKXJldHVybiBmfX1jYXRjaChnKXt9cmV0dXJu IGsoYyxudWxsLG51bGwsW2FdKS5sZW5ndGg+MH19fSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVF bGVtZW50KCJkaXYiKTthLmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNs YXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCEhYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZhLmdldEVsZW1l bnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGghPT0wKXthLmxhc3RDaGlsZC5jbGFzc05hbWU9ImUiO2lm KGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTEpcmV0dXJuO2wub3JkZXIuc3Bs aWNlKDEsMCwiQ0xBU1MiKSxsLmZpbmQuQ0xBU1M9ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdl dEVsZW1lbnRzQnlDbGFzc05hbWUhPSJ1bmRlZmluZWQiJiYhYylyZXR1cm4gYi5nZXRFbGVtZW50c0J5 Q2xhc3NOYW1lKGFbMV0pfSxhPW51bGx9fSgpLGMuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zP2suY29u dGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSE9PWImJihhLmNvbnRhaW5zP2EuY29udGFpbnMoYik6 ITApfTpjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9rLmNvbnRhaW5zPWZ1 bmN0aW9uKGEsYil7cmV0dXJuISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNil9OmsuY29u dGFpbnM9ZnVuY3Rpb24oKXtyZXR1cm4hMX0say5pc1hNTD1mdW5jdGlvbihhKXt2YXIgYj0oYT9hLm93 bmVyRG9jdW1lbnR8fGE6MCkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBiP2Iubm9kZU5hbWUhPT0iSFRN

TCI6ITF9O3ZhciB2PWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPSIiLGY9Yi5ub2RlVHlwZT9bYl06 Yjt3aGlsZShjPWwubWF0Y2guUFNFVURPLmV4ZWMoYSkpZSs9Y1swXSxhPWEucmVwbGFjZShsLm1hdGNo LlBTRVVETywiIik7YT1sLnJlbGF0aXZlW2FdP2ErIioiOmE7Zm9yKHZhciBnPTAsaD1mLmxlbmd0aDtn PGg7ZysrKWsoYSxmW2ddLGQpO3JldHVybiBrLmZpbHRlcihlLGQpfTtmLmZpbmQ9ayxmLmV4cHI9ay5z ZWxlY3RvcnMsZi5leHByWyI6Il09Zi5leHByLmZpbHRlcnMsZi51bmlxdWU9ay51bmlxdWVTb3J0LGYu dGV4dD1rLmdldFRleHQsZi5pc1hNTERvYz1rLmlzWE1MLGYuY29udGFpbnM9ay5jb250YWluc30oKTt2 YXIgUD0vVW50aWwkLyxRPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLFI9LywvLFM9L14u W146I1xbXC4sXSokLyxUPUFycmF5LnByb3RvdHlwZS5zbGljZSxVPWYuZXhwci5tYXRjaC5QT1MsVj17 Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmLmZuLmV4dGVuZCh7ZmluZDpm dW5jdGlvbihhKXt2YXIgYj10aGlzLGMsZDtpZih0eXBlb2YgYSE9InN0cmluZyIpcmV0dXJuIGYoYSku ZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspaWYoZi5jb250YWlucyhi W2NdLHRoaXMpKXJldHVybiEwfSk7dmFyIGU9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGcsaCxp O2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtnPWUubGVuZ3RoLGYuZmluZChhLHRoaXNbY10s ZSk7aWYoYz4wKWZvcihoPWc7aDxlLmxlbmd0aDtoKyspZm9yKGk9MDtpPGc7aSsrKWlmKGVbaV09PT1l W2hdKXtlLnNwbGljZShoLS0sMSk7YnJlYWt9fXJldHVybiBlfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9 ZihhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxjPWIubGVuZ3RoO2E8 YzthKyspaWYoZi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXty ZXR1cm4gdGhpcy5wdXNoU3RhY2soWCh0aGlzLGEsITEpLCJub3QiLGEpfSxmaWx0ZXI6ZnVuY3Rpb24o YSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFgodGhpcyxhLCEwKSwiZmlsdGVyIixhKX0saXM6ZnVuY3Rp b24oYSl7cmV0dXJuISFhJiYodHlwZW9mIGE9PSJzdHJpbmciP2YuZmlsdGVyKGEsdGhpcykubGVuZ3Ro PjA6dGhpcy5maWx0ZXIoYSkubGVuZ3RoPjApfSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGM9W10s ZCxlLGc9dGhpc1swXTtpZihmLmlzQXJyYXkoYSkpe3ZhciBoLGksaj17fSxrPTE7aWYoZyYmYS5sZW5n dGgpe2ZvcihkPTAsZT1hLmxlbmd0aDtkPGU7ZCsrKWk9YVtkXSxqW2ldfHwoaltpXT1VLnRlc3QoaSk/ ZihpLGJ8fHRoaXMuY29udGV4dCk6aSk7d2hpbGUoZyYmZy5vd25lckRvY3VtZW50JiZnIT09Yil7Zm9y KGkgaW4gailoPWpbaV0sKGguanF1ZXJ5P2guaW5kZXgoZyk+LTE6ZihnKS5pcyhoKSkmJmMucHVzaCh7 c2VsZWN0b3I6aSxlbGVtOmcsbGV2ZWw6a30pO2c9Zy5wYXJlbnROb2RlLGsrK319cmV0dXJuIGN9dmFy IGw9VS50ZXN0KGEpfHx0eXBlb2YgYSE9InN0cmluZyI/ZihhLGJ8fHRoaXMuY29udGV4dCk6MDtmb3Io ZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO3doaWxlKGcpe2lmKGw/bC5pbmRleChn KT4tMTpmLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGcsYSkpe2MucHVzaChnKTticmVha31nPWcucGFyZW50 Tm9kZTtpZighZ3x8IWcub3duZXJEb2N1bWVudHx8Zz09PWJ8fGcubm9kZVR5cGU9PT0xMSlicmVha319 Yz1jLmxlbmd0aD4xP2YudW5pcXVlKGMpOmM7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGMsImNsb3Nlc3Qi LGEpfSxpbmRleDpmdW5jdGlvbihhKXtpZighYXx8dHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBmLmlu QXJyYXkodGhpc1swXSxhP2YoYSk6dGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpKTtyZXR1cm4gZi5pbkFy cmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9 PSJzdHJpbmciP2YoYSxiKTpmLm1ha2VBcnJheShhJiZhLm5vZGVUeXBlP1thXTphKSxkPWYubWVyZ2Uo dGhpcy5nZXQoKSxjKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVyhjWzBdKXx8VyhkWzBdKT9kOmYudW5p cXVlKGQpKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3Qp fX0pLGYuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYm Yi5ub2RlVHlwZSE9PTExP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwi cGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJw YXJlbnROb2RlIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJuZXh0U2libGlu ZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsInByZXZpb3VzU2libGluZyIpfSxu ZXh0QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1 bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0 aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciLGMpfSxwcmV2VW50aWw6ZnVuY3Rp b24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5j dGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEucGFyZW50Tm9kZS5maXJzdENoaWxkLGEpfSxjaGlsZHJl bjpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0 aW9uKGEpe3JldHVybiBmLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNv bnRlbnRXaW5kb3cuZG9jdW1lbnQ6Zi5tYWtlQXJyYXkoYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEs Yil7Zi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPWYubWFwKHRoaXMsYixjKSxnPVQuY2FsbChhcmd1 bWVudHMpO1AudGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1mLmZpbHRlcihk LGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFWW2FdP2YudW5pcXVlKGUpOmUsKHRoaXMubGVuZ3RoPjF8fFIu dGVzdChkKSkmJlEudGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhl LGEsZy5qb2luKCIsIikpfX0pLGYuZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oYSxiLGMpe2MmJihhPSI6 bm90KCIrYSsiKSIpO3JldHVybiBiLmxlbmd0aD09PTE/Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihiWzBd LGEpP1tiWzBdXTpbXTpmLmZpbmQubWF0Y2hlcyhhLGIpfSxkaXI6ZnVuY3Rpb24oYSxjLGQpe3ZhciBl PVtdLGc9YVtjXTt3aGlsZShnJiZnLm5vZGVUeXBlIT09OSYmKGQ9PT1ifHxnLm5vZGVUeXBlIT09MXx8 IWYoZykuaXMoZCkpKWcubm9kZVR5cGU9PT0xJiZlLnB1c2goZyksZz1nW2NdO3JldHVybiBlfSxudGg6 ZnVuY3Rpb24oYSxiLGMsZCl7Yj1ifHwxO3ZhciBlPTA7Zm9yKDthO2E9YVtjXSlpZihhLm5vZGVUeXBl

PT09MSYmKytlPT09YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtd O2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7cmV0 dXJuIGN9fSk7dmFyIFk9LyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZyxaPS9eXHMrLywkPS88KD8h YXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5d KilcLz4vaWcsXz0vPChbXHc6XSspLyxiYT0vPHRib2R5L2ksYmI9Lzx8JiM/XHcrOy8sYmM9LzwoPzpz Y3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSxiZD0vY2hlY2tlZFxzKig/OltePV18PVxz Ki5jaGVja2VkLikvaSxiZT0vXC8oamF2YXxlY21hKXNjcmlwdC9pLGJmPS9eXHMqPCEoPzpcW0NEQVRB XFt8XC1cLSkvLGJnPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3Nl bGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLHRoZWFkOlsxLCI8dGFi bGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0s dGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLGNvbDpbMiwi PHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sYXJl YTpbMSwiPG1hcD4iLCI8L21hcD4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2JnLm9wdGdyb3VwPWJnLm9w dGlvbixiZy50Ym9keT1iZy50Zm9vdD1iZy5jb2xncm91cD1iZy5jYXB0aW9uPWJnLnRoZWFkLGJnLnRo PWJnLnRkLGYuc3VwcG9ydC5odG1sU2VyaWFsaXplfHwoYmcuX2RlZmF1bHQ9WzEsImRpdjxkaXY+Iiwi PC9kaXY+Il0pLGYuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSly ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Yy50ZXh0KGEuY2FsbCh0aGlz LGIsYy50ZXh0KCkpKX0pO2lmKHR5cGVvZiBhIT0ib2JqZWN0IiYmYSE9PWIpcmV0dXJuIHRoaXMuZW1w dHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8YykuY3JlYXRlVGV4dE5v ZGUoYSkpO3JldHVybiBmLnRleHQodGhpcyl9LHdyYXBBbGw6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0 aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwQWxsKGEuY2FsbCh0 aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPWYoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDAp LmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFw KGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJmEuZmlyc3RDaGlsZC5ub2Rl VHlwZT09PTEpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9 LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChm dW5jdGlvbihiKXtmKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9KTtyZXR1cm4gdGhpcy5l YWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zih0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBB bGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0 aW9uKCl7Zih0aGlzKS53cmFwQWxsKGEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBh cmVudCgpLmVhY2goZnVuY3Rpb24oKXtmLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8Zih0aGlzKS5yZXBs YWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0 aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhp cy5hcHBlbmRDaGlsZChhKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAo YXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmluc2VydEJlZm9y ZShhLHRoaXMuZmlyc3RDaGlsZCl9KX0sYmVmb3JlOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1sw XS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0 aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2 YXIgYT1mKGFyZ3VtZW50c1swXSk7YS5wdXNoLmFwcGx5KGEsdGhpcy50b0FycmF5KCkpO3JldHVybiB0 aGlzLnB1c2hTdGFjayhhLCJiZWZvcmUiLGFyZ3VtZW50cyl9fSxhZnRlcjpmdW5jdGlvbigpe2lmKHRo aXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEs ZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMubmV4dFNpYmxpbmcp fSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9dGhpcy5wdXNoU3RhY2sodGhpcywiYWZ0ZXIiLGFy Z3VtZW50cyk7YS5wdXNoLmFwcGx5KGEsZihhcmd1bWVudHNbMF0pLnRvQXJyYXkoKSk7cmV0dXJuIGF9 fSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkOyhkPXRoaXNbY10pIT1udWxsO2MrKylp ZighYXx8Zi5maWx0ZXIoYSxbZF0pLmxlbmd0aCkhYiYmZC5ub2RlVHlwZT09PTEmJihmLmNsZWFuRGF0 YShkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLGYuY2xlYW5EYXRhKFtkXSkpLGQucGFyZW50Tm9k ZSYmZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigp e2Zvcih2YXIgYT0wLGI7KGI9dGhpc1thXSkhPW51bGw7YSsrKXtiLm5vZGVUeXBlPT09MSYmZi5jbGVh bkRhdGEoYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTt3aGlsZShiLmZpcnN0Q2hpbGQpYi5yZW1v dmVDaGlsZChiLmZpcnN0Q2hpbGQpfXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe2E9YT09 bnVsbD8hMTphLGI9Yj09bnVsbD9hOmI7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGYu Y2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7aWYoYT09PWIpcmV0dXJuIHRoaXNbMF0m JnRoaXNbMF0ubm9kZVR5cGU9PT0xP3RoaXNbMF0uaW5uZXJIVE1MLnJlcGxhY2UoWSwiIik6bnVsbDtp Zih0eXBlb2YgYT09InN0cmluZyImJiFiYy50ZXN0KGEpJiYoZi5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNw YWNlfHwhWi50ZXN0KGEpKSYmIWJnWyhfLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCld KXthPWEucmVwbGFjZSgkLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtj PGQ7YysrKXRoaXNbY10ubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEodGhpc1tjXS5nZXRFbGVtZW50 c0J5VGFnTmFtZSgiKiIpKSx0aGlzW2NdLmlubmVySFRNTD1hKX1jYXRjaChlKXt0aGlzLmVtcHR5KCku YXBwZW5kKGEpfX1lbHNlIGYuaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9

Zih0aGlzKTtjLmh0bWwoYS5jYWxsKHRoaXMsYixjLmh0bWwoKSkpfSk6dGhpcy5lbXB0eSgpLmFwcGVu ZChhKTtyZXR1cm4gdGhpc30scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7aWYodGhpc1swXSYmdGhpc1sw XS5wYXJlbnROb2RlKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihi KXt2YXIgYz1mKHRoaXMpLGQ9Yy5odG1sKCk7Yy5yZXBsYWNlV2l0aChhLmNhbGwodGhpcyxiLGQpKX0p O3R5cGVvZiBhIT0ic3RyaW5nIiYmKGE9ZihhKS5kZXRhY2goKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5j dGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsYz10aGlzLnBhcmVudE5vZGU7Zih0aGlzKS5yZW1v dmUoKSxiP2YoYikuYmVmb3JlKGEpOmYoYykuYXBwZW5kKGEpfSl9cmV0dXJuIHRoaXMubGVuZ3RoP3Ro aXMucHVzaFN0YWNrKGYoZi5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpOnRoaXN9 LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0 aW9uKGEsYyxkKXt2YXIgZSxnLGgsaSxqPWFbMF0saz1bXTtpZighZi5zdXBwb3J0LmNoZWNrQ2xvbmUm JmFyZ3VtZW50cy5sZW5ndGg9PT0zJiZ0eXBlb2Ygaj09InN0cmluZyImJmJkLnRlc3QoaikpcmV0dXJu IHRoaXMuZWFjaChmdW5jdGlvbigpe2YodGhpcykuZG9tTWFuaXAoYSxjLGQsITApfSk7aWYoZi5pc0Z1 bmN0aW9uKGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGc9Zih0aGlzKTthWzBdPWou Y2FsbCh0aGlzLGUsYz9nLmh0bWwoKTpiKSxnLmRvbU1hbmlwKGEsYyxkKX0pO2lmKHRoaXNbMF0pe2k9 aiYmai5wYXJlbnROb2RlLGYuc3VwcG9ydC5wYXJlbnROb2RlJiZpJiZpLm5vZGVUeXBlPT09MTEmJmku Y2hpbGROb2Rlcy5sZW5ndGg9PT10aGlzLmxlbmd0aD9lPXtmcmFnbWVudDppfTplPWYuYnVpbGRGcmFn bWVudChhLHRoaXMsayksaD1lLmZyYWdtZW50LGguY2hpbGROb2Rlcy5sZW5ndGg9PT0xP2c9aD1oLmZp cnN0Q2hpbGQ6Zz1oLmZpcnN0Q2hpbGQ7aWYoZyl7Yz1jJiZmLm5vZGVOYW1lKGcsInRyIik7Zm9yKHZh ciBsPTAsbT10aGlzLmxlbmd0aCxuPW0tMTtsPG07bCsrKWQuY2FsbChjP2JoKHRoaXNbbF0sZyk6dGhp c1tsXSxlLmNhY2hlYWJsZXx8bT4xJiZsPG4/Zi5jbG9uZShoLCEwLCEwKTpoKX1rLmxlbmd0aCYmZi5l YWNoKGssYm4pfXJldHVybiB0aGlzfX0pLGYuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGIsZCl7dmFy IGUsZyxoLGk9YiYmYlswXT9iWzBdLm93bmVyRG9jdW1lbnR8fGJbMF06YzthLmxlbmd0aD09PTEmJnR5 cGVvZiBhWzBdPT0ic3RyaW5nIiYmYVswXS5sZW5ndGg8NTEyJiZpPT09YyYmYVswXS5jaGFyQXQoMCk9 PT0iPCImJiFiYy50ZXN0KGFbMF0pJiYoZi5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFiZC50ZXN0KGFbMF0p KSYmKGc9ITAsaD1mLmZyYWdtZW50c1thWzBdXSxoJiZoIT09MSYmKGU9aCkpLGV8fChlPWkuY3JlYXRl RG9jdW1lbnRGcmFnbWVudCgpLGYuY2xlYW4oYSxpLGUsZCkpLGcmJihmLmZyYWdtZW50c1thWzBdXT1o P2U6MSk7cmV0dXJue2ZyYWdtZW50OmUsY2FjaGVhYmxlOmd9fSxmLmZyYWdtZW50cz17fSxmLmVhY2go e2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUi LGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIp e2YuZm5bYV09ZnVuY3Rpb24oYyl7dmFyIGQ9W10sZT1mKGMpLGc9dGhpcy5sZW5ndGg9PT0xJiZ0aGlz WzBdLnBhcmVudE5vZGU7aWYoZyYmZy5ub2RlVHlwZT09PTExJiZnLmNoaWxkTm9kZXMubGVuZ3RoPT09 MSYmZS5sZW5ndGg9PT0xKXtlW2JdKHRoaXNbMF0pO3JldHVybiB0aGlzfWZvcih2YXIgaD0wLGk9ZS5s ZW5ndGg7aDxpO2grKyl7dmFyIGo9KGg+MD90aGlzLmNsb25lKCEwKTp0aGlzKS5nZXQoKTtmKGVbaF0p W2JdKGopLGQ9ZC5jb25jYXQoail9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQsYSxlLnNlbGVjdG9yKX19 KSxmLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuY2xvbmVOb2RlKCEwKSxlLGcs aDtpZigoIWYuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCFmLnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpJiYo YS5ub2RlVHlwZT09PTF8fGEubm9kZVR5cGU9PT0xMSkmJiFmLmlzWE1MRG9jKGEpKXtiaihhLGQpLGU9 YmsoYSksZz1iayhkKTtmb3IoaD0wO2VbaF07KytoKWJqKGVbaF0sZ1toXSl9aWYoYil7YmkoYSxkKTtp ZihjKXtlPWJrKGEpLGc9YmsoZCk7Zm9yKGg9MDtlW2hdOysraCliaShlW2hdLGdbaF0pfX1yZXR1cm4g ZH0sY2xlYW46ZnVuY3Rpb24oYSxiLGQsZSl7dmFyIGc7Yj1ifHxjLHR5cGVvZiBiLmNyZWF0ZUVsZW1l bnQ9PSJ1bmRlZmluZWQiJiYoYj1iLm93bmVyRG9jdW1lbnR8fA0KYlswXSYmYlswXS5vd25lckRvY3Vt ZW50fHxjKTt2YXIgaD1bXSxpO2Zvcih2YXIgaj0wLGs7KGs9YVtqXSkhPW51bGw7aisrKXt0eXBlb2Yg az09Im51bWJlciImJihrKz0iIik7aWYoIWspY29udGludWU7aWYodHlwZW9mIGs9PSJzdHJpbmciKWlm KCFiYi50ZXN0KGspKWs9Yi5jcmVhdGVUZXh0Tm9kZShrKTtlbHNle2s9ay5yZXBsYWNlKCQsIjwkMT48 LyQyPiIpO3ZhciBsPShfLmV4ZWMoayl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbT1iZ1tsXXx8 YmcuX2RlZmF1bHQsbj1tWzBdLG89Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLmlubmVySFRNTD1tWzFd K2srbVsyXTt3aGlsZShuLS0pbz1vLmxhc3RDaGlsZDtpZighZi5zdXBwb3J0LnRib2R5KXt2YXIgcD1i YS50ZXN0KGspLHE9bD09PSJ0YWJsZSImJiFwP28uZmlyc3RDaGlsZCYmby5maXJzdENoaWxkLmNoaWxk Tm9kZXM6bVsxXT09PSI8dGFibGU+IiYmIXA/by5jaGlsZE5vZGVzOltdO2ZvcihpPXEubGVuZ3RoLTE7 aT49MDstLWkpZi5ub2RlTmFtZShxW2ldLCJ0Ym9keSIpJiYhcVtpXS5jaGlsZE5vZGVzLmxlbmd0aCYm cVtpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHFbaV0pfSFmLnN1cHBvcnQubGVhZGluZ1doaXRlc3Bh Y2UmJloudGVzdChrKSYmby5pbnNlcnRCZWZvcmUoYi5jcmVhdGVUZXh0Tm9kZShaLmV4ZWMoaylbMF0p LG8uZmlyc3RDaGlsZCksaz1vLmNoaWxkTm9kZXN9dmFyIHI7aWYoIWYuc3VwcG9ydC5hcHBlbmRDaGVj a2VkKWlmKGtbMF0mJnR5cGVvZiAocj1rLmxlbmd0aCk9PSJudW1iZXIiKWZvcihpPTA7aTxyO2krKyli bShrW2ldKTtlbHNlIGJtKGspO2subm9kZVR5cGU/aC5wdXNoKGspOmg9Zi5tZXJnZShoLGspfWlmKGQp e2c9ZnVuY3Rpb24oYSl7cmV0dXJuIWEudHlwZXx8YmUudGVzdChhLnR5cGUpfTtmb3Ioaj0wO2hbal07 aisrKWlmKGUmJmYubm9kZU5hbWUoaFtqXSwic2NyaXB0IikmJighaFtqXS50eXBlfHxoW2pdLnR5cGUu dG9Mb3dlckNhc2UoKT09PSJ0ZXh0L2phdmFzY3JpcHQiKSllLnB1c2goaFtqXS5wYXJlbnROb2RlP2hb al0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoW2pdKTpoW2pdKTtlbHNle2lmKGhbal0ubm9kZVR5cGU9 PT0xKXt2YXIgcz1mLmdyZXAoaFtqXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZyk7aC5z

cGxpY2UuYXBwbHkoaCxbaisxLDBdLmNvbmNhdChzKSl9ZC5hcHBlbmRDaGlsZChoW2pdKX19cmV0dXJu IGh9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXt2YXIgYixjLGQ9Zi5jYWNoZSxlPWYuZXhwYW5kbyxnPWYu ZXZlbnQuc3BlY2lhbCxoPWYuc3VwcG9ydC5kZWxldGVFeHBhbmRvO2Zvcih2YXIgaT0wLGo7KGo9YVtp XSkhPW51bGw7aSsrKXtpZihqLm5vZGVOYW1lJiZmLm5vRGF0YVtqLm5vZGVOYW1lLnRvTG93ZXJDYXNl KCldKWNvbnRpbnVlO2M9altmLmV4cGFuZG9dO2lmKGMpe2I9ZFtjXSYmZFtjXVtlXTtpZihiJiZiLmV2 ZW50cyl7Zm9yKHZhciBrIGluIGIuZXZlbnRzKWdba10/Zi5ldmVudC5yZW1vdmUoaixrKTpmLnJlbW92 ZUV2ZW50KGosayxiLmhhbmRsZSk7Yi5oYW5kbGUmJihiLmhhbmRsZS5lbGVtPW51bGwpfWg/ZGVsZXRl IGpbZi5leHBhbmRvXTpqLnJlbW92ZUF0dHJpYnV0ZSYmai5yZW1vdmVBdHRyaWJ1dGUoZi5leHBhbmRv KSxkZWxldGUgZFtjXX19fX0pO3ZhciBibz0vYWxwaGFcKFteKV0qXCkvaSxicD0vb3BhY2l0eT0oW14p XSopLyxicT0vLShbYS16XSkvaWcsYnI9LyhbQS1aXXxebXMpL2csYnM9L14tP1xkKyg/OnB4KT8kL2ks YnQ9L14tP1xkLyxidT0vXlsrXC1dPS8sYnY9L1teK1wtXC5cZGVdKy9nLGJ3PXtwb3NpdGlvbjoiYWJz b2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxieD1bIkxlZnQiLCJSaWdo dCJdLGJ5PVsiVG9wIiwiQm90dG9tIl0sYnosYkEsYkIsYkM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50 b1VwcGVyQ2FzZSgpfTtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0y JiZjPT09YilyZXR1cm4gdGhpcztyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGMsITAsZnVuY3Rpb24oYSxj LGQpe3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSl9LGYuZXh0ZW5kKHtjc3NI b29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YnooYSwib3BhY2l0eSIs Im9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3Nz TnVtYmVyOnt6SW5kZXg6ITAsZm9udFdlaWdodDohMCxvcGFjaXR5OiEwLHpvb206ITAsbGluZUhlaWdo dDohMCx3aWRvd3M6ITAsb3JwaGFuczohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zs b2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEm JmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1l bENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09 PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBq W2NdfWg9dHlwZW9mIGQ7aWYoaD09PSJudW1iZXIiJiZpc05hTihkKXx8ZD09bnVsbClyZXR1cm47aD09 PSJzdHJpbmciJiZidS50ZXN0KGQpJiYoZD0rZC5yZXBsYWNlKGJ2LCIiKStwYXJzZUZsb2F0KGYuY3Nz KGEsYykpKSxoPT09Im51bWJlciImJiFmLmNzc051bWJlcltpXSYmKGQrPSJweCIpO2lmKCFrfHwhKCJz ZXQiaW4gayl8fChkPWsuc2V0KGEsZCkpIT09Yil0cnl7altjXT1kfWNhdGNoKGwpe319fSxjc3M6ZnVu Y3Rpb24oYSxjLGQpe3ZhciBlLGc7Yz1mLmNhbWVsQ2FzZShjKSxnPWYuY3NzSG9va3NbY10sYz1mLmNz c1Byb3BzW2NdfHxjLGM9PT0iY3NzRmxvYXQiJiYoYz0iZmxvYXQiKTtpZihnJiYiZ2V0ImluIGcmJihl PWcuZ2V0KGEsITAsZCkpIT09YilyZXR1cm4gZTtpZihieilyZXR1cm4gYnooYSxjKX0sc3dhcDpmdW5j dGlvbihhLGIsYyl7dmFyIGQ9e307Zm9yKHZhciBlIGluIGIpZFtlXT1hLnN0eWxlW2VdLGEuc3R5bGVb ZV09YltlXTtjLmNhbGwoYSk7Zm9yKGUgaW4gYilhLnN0eWxlW2VdPWRbZV19LGNhbWVsQ2FzZTpmdW5j dGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGJxLGJDKX19KSxmLmN1ckNTUz1mLmNzcyxmLmVhY2goWyJo ZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7Zi5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEs YyxkKXt2YXIgZTtpZihjKXthLm9mZnNldFdpZHRoIT09MD9lPWJEKGEsYixkKTpmLnN3YXAoYSxidyxm dW5jdGlvbigpe2U9YkQoYSxiLGQpfSk7aWYoZTw9MCl7ZT1ieihhLGIsYiksZT09PSIwcHgiJiZiQiYm KGU9YkIoYSxiLGIpKTtpZihlIT1udWxsKXJldHVybiBlPT09IiJ8fGU9PT0iYXV0byI/IjBweCI6ZX1p ZihlPDB8fGU9PW51bGwpe2U9YS5zdHlsZVtiXTtyZXR1cm4gZT09PSIifHxlPT09ImF1dG8iPyIwcHgi OmV9cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9lOmUrInB4In19LHNldDpmdW5jdGlvbihhLGIpe2lm KCFicy50ZXN0KGIpKXJldHVybiBiO2I9cGFyc2VGbG9hdChiKTtpZihiPj0wKXJldHVybiBiKyJweCJ9 fX0pLGYuc3VwcG9ydC5vcGFjaXR5fHwoZi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxi KXtyZXR1cm4gYnAudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEu c3R5bGUuZmlsdGVyKXx8IiIpP3BhcnNlRmxvYXQoUmVnRXhwLiQxKS8xMDArIiI6Yj8iMSI6IiJ9LHNl dDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZTtjLnpvb209MTt2YXIg ZT1mLmlzTmFOKGIpPyIiOiJhbHBoYShvcGFjaXR5PSIrYioxMDArIikiLGc9ZCYmZC5maWx0ZXJ8fGMu ZmlsdGVyfHwiIjtjLmZpbHRlcj1iby50ZXN0KGcpP2cucmVwbGFjZShibyxlKTpnKyIgIitlfX0pLGYo ZnVuY3Rpb24oKXtmLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KGYuY3NzSG9va3MubWFyZ2lu UmlnaHQ9e2dldDpmdW5jdGlvbihhLGIpe3ZhciBjO2Yuc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxv Y2sifSxmdW5jdGlvbigpe2I/Yz1ieihhLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW5SaWdodCIpOmM9YS5z dHlsZS5tYXJnaW5SaWdodH0pO3JldHVybiBjfX0pfSksYy5kZWZhdWx0VmlldyYmYy5kZWZhdWx0Vmll dy5nZXRDb21wdXRlZFN0eWxlJiYoYkE9ZnVuY3Rpb24oYSxjKXt2YXIgZCxlLGc7Yz1jLnJlcGxhY2Uo YnIsIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoIShlPWEub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldykp cmV0dXJuIGI7aWYoZz1lLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSlkPWcuZ2V0UHJvcGVydHlWYWx1 ZShjKSxkPT09IiImJiFmLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYSkm JihkPWYuc3R5bGUoYSxjKSk7cmV0dXJuIGR9KSxjLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUm JihiQj1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9YS5jdXJyZW50U3R5bGUmJmEuY3VycmVudFN0eWxlW2Jd LGU9YS5ydW50aW1lU3R5bGUmJmEucnVudGltZVN0eWxlW2JdLGY9YS5zdHlsZTshYnMudGVzdChkKSYm YnQudGVzdChkKSYmKGM9Zi5sZWZ0LGUmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWEuY3VycmVudFN0eWxl LmxlZnQpLGYubGVmdD1iPT09ImZvbnRTaXplIj8iMWVtIjpkfHwwLGQ9Zi5waXhlbExlZnQrInB4Iixm

LmxlZnQ9YyxlJiYoYS5ydW50aW1lU3R5bGUubGVmdD1lKSk7cmV0dXJuIGQ9PT0iIj8iYXV0byI6ZH0p LGJ6PWJBfHxiQixmLmV4cHImJmYuZXhwci5maWx0ZXJzJiYoZi5leHByLmZpbHRlcnMuaGlkZGVuPWZ1 bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0V2lkdGgsYz1hLm9mZnNldEhlaWdodDtyZXR1cm4gYj09PTAm JmM9PT0wfHwhZi5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmKGEuc3R5bGUuZGlzcGxheXx8 Zi5jc3MoYSwiZGlzcGxheSIpKT09PSJub25lIn0sZi5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlv bihhKXtyZXR1cm4hZi5leHByLmZpbHRlcnMuaGlkZGVuKGEpfSk7dmFyIGJFPS8lMjAvZyxiRj0vXFtc XSQvLGJHPS9ccj9cbi9nLGJIPS8jLiokLyxiST0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL21n LGJKPS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3 b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSxiSz0vXig/OmFib3V0fGFw cHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lvbnxmaWxlfHdpZGdldCk6JC8sYkw9L14oPzpHRVR8SEVB RCkkLyxiTT0vXlwvXC8vLGJOPS9cPy8sYk89LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8 W148XSopKjxcL3NjcmlwdD4vZ2ksYlA9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYlE9L1xzKy8sYlI9 LyhbPyZdKV89W14mXSovLGJTPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxk KykpPyk/LyxiVD1mLmZuLmxvYWQsYlU9e30sYlY9e30sYlcsYlg7dHJ5e2JXPWUuaHJlZn1jYXRjaChi WSl7Ylc9Yy5jcmVhdGVFbGVtZW50KCJhIiksYlcuaHJlZj0iIixiVz1iVy5ocmVmfWJYPWJTLmV4ZWMo YlcudG9Mb3dlckNhc2UoKSl8fFtdLGYuZm4uZXh0ZW5kKHtsb2FkOmZ1bmN0aW9uKGEsYyxkKXtpZih0 eXBlb2YgYSE9InN0cmluZyImJmJUKXJldHVybiBiVC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXRo aXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBlPWEuaW5kZXhPZigiICIpO2lmKGU+PTApe3ZhciBnPWEu c2xpY2UoZSxhLmxlbmd0aCk7YT1hLnNsaWNlKDAsZSl9dmFyIGg9IkdFVCI7YyYmKGYuaXNGdW5jdGlv bihjKT8oZD1jLGM9Yik6dHlwZW9mIGM9PSJvYmplY3QiJiYoYz1mLnBhcmFtKGMsZi5hamF4U2V0dGlu Z3MudHJhZGl0aW9uYWwpLGg9IlBPU1QiKSk7dmFyIGk9dGhpcztmLmFqYXgoe3VybDphLHR5cGU6aCxk YXRhVHlwZToiaHRtbCIsZGF0YTpjLGNvbXBsZXRlOmZ1bmN0aW9uKGEsYixjKXtjPWEucmVzcG9uc2VU ZXh0LGEuaXNSZXNvbHZlZCgpJiYoYS5kb25lKGZ1bmN0aW9uKGEpe2M9YX0pLGkuaHRtbChnP2YoIjxk aXY+IikuYXBwZW5kKGMucmVwbGFjZShiTywiIikpLmZpbmQoZyk6YykpLGQmJmkuZWFjaChkLFtjLGIs YV0pfX0pO3JldHVybiB0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5wYXJhbSh0aGlz LnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1h cChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzP2YubWFrZUFycmF5KHRoaXMuZWxlbWVudHMp OnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYhdGhpcy5kaXNhYmxlZCYm KHRoaXMuY2hlY2tlZHx8YlAudGVzdCh0aGlzLm5vZGVOYW1lKXx8YkoudGVzdCh0aGlzLnR5cGUpKX0p Lm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPWYodGhpcykudmFsKCk7cmV0dXJuIGM9PW51bGw/bnVsbDpm LmlzQXJyYXkoYyk/Zi5tYXAoYyxmdW5jdGlvbihhLGMpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTph LnJlcGxhY2UoYkcsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGJHLCJcclxu Iil9fSkuZ2V0KCl9fSksZi5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhF cnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09 ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYmluZChiLGEpfX0pLGYuZWFjaChbImdldCIsInBvc3QiXSxm dW5jdGlvbihhLGMpe2ZbY109ZnVuY3Rpb24oYSxkLGUsZyl7Zi5pc0Z1bmN0aW9uKGQpJiYoZz1nfHxl LGU9ZCxkPWIpO3JldHVybiBmLmFqYXgoe3R5cGU6Yyx1cmw6YSxkYXRhOmQsc3VjY2VzczplLGRhdGFU eXBlOmd9KX19KSxmLmV4dGVuZCh7Z2V0U2NyaXB0OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGYuZ2V0KGEs YixjLCJzY3JpcHQiKX0sZ2V0SlNPTjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZ2V0KGEsYixjLCJq c29uIil9LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe2I/Zi5leHRlbmQoITAsYSxmLmFqYXhTZXR0aW5n cyxiKTooYj1hLGE9Zi5leHRlbmQoITAsZi5hamF4U2V0dGluZ3MsYikpO2Zvcih2YXIgYyBpbntjb250 ZXh0OjEsdXJsOjF9KWMgaW4gYj9hW2NdPWJbY106YyBpbiBmLmFqYXhTZXR0aW5ncyYmKGFbY109Zi5h amF4U2V0dGluZ3NbY10pO3JldHVybiBhfSxhamF4U2V0dGluZ3M6e3VybDpiVyxpc0xvY2FsOmJLLnRl c3QoYlhbMV0pLGdsb2JhbDohMCx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3 dy1mb3JtLXVybGVuY29kZWQiLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGFjY2VwdHM6e3htbDoiYXBw bGljYXRpb24veG1sLCB0ZXh0L3htbCIsaHRtbDoidGV4dC9odG1sIix0ZXh0OiJ0ZXh0L3BsYWluIixq c29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLCIqIjoiKi8qIn0sY29udGVudHM6 e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVz cG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOmEuU3RyaW5n LCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOmYucGFyc2VKU09OLCJ0ZXh0IHhtbCI6Zi5wYXJzZVhN TH19LGFqYXhQcmVmaWx0ZXI6YlooYlUpLGFqYXhUcmFuc3BvcnQ6YlooYlYpLGFqYXg6ZnVuY3Rpb24o YSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9 YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPzQ6MDt2YXIgbyxyLHUsdz1sP2NhKGQsdixsKTpiLHgseTtp ZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHg9di5nZXRSZXNwb25z ZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXg7aWYoeT12LmdldFJlc3Bv bnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXl9aWYoYT09PTMwNCljPSJub3Rtb2RpZmllZCIsbz0h MDtlbHNlIHRyeXtyPWNiKGQsdyksYz0ic3VjY2VzcyIsbz0hMH1jYXRjaCh6KXtjPSJwYXJzZXJlcnJv ciIsdT16fX1lbHNle3U9YztpZighY3x8YSljPSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYu c3RhdHVzVGV4dD1jLG8/aC5yZXNvbHZlV2l0aChlLFtyLGMsdl0pOmgucmVqZWN0V2l0aChlLFt2LGMs dV0pLHYuc3RhdHVzQ29kZShqKSxqPWIsdCYmZy50cmlnZ2VyKCJhamF4Iisobz8iU3VjY2VzcyI6IkVy

cm9yIiksW3YsZCxvP3I6dV0pLGkucmVzb2x2ZVdpdGgoZSxbdixjXSksdCYmKGcudHJpZ2dlcigiYWph eENvbXBsZXRlIixbdixkXSksLS1mLmFjdGl2ZXx8Zi5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKX19 dHlwZW9mIGE9PSJvYmplY3QiJiYoYz1hLGE9YiksYz1jfHx7fTt2YXIgZD1mLmFqYXhTZXR1cCh7fSxj KSxlPWQuY29udGV4dHx8ZCxnPWUhPT1kJiYoZS5ub2RlVHlwZXx8ZSBpbnN0YW5jZW9mIGYpP2YoZSk6 Zi5ldmVudCxoPWYuRGVmZXJyZWQoKSxpPWYuX0RlZmVycmVkKCksaj1kLnN0YXR1c0NvZGV8fHt9LGss bD17fSxtPXt9LG4sbyxwLHEscixzPTAsdCx1LHY9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVy OmZ1bmN0aW9uKGEsYil7aWYoIXMpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPW1bY109bVtjXXx8YSxs W2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBz PT09Mj9uOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHM9PT0yKXtp Zighbyl7bz17fTt3aGlsZShjPWJJLmV4ZWMobikpb1tjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1v W2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5j dGlvbihhKXtzfHwoZC5taW1lVHlwZT1hKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7YT1h fHwiYWJvcnQiLHAmJnAuYWJvcnQoYSksdygwLGEpO3JldHVybiB0aGlzfX07aC5wcm9taXNlKHYpLHYu c3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsdi5jb21wbGV0ZT1pLmRvbmUsdi5zdGF0dXNDb2Rl PWZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiO2lmKHM8Milmb3IoYiBpbiBhKWpbYl09W2pbYl0sYVtiXV07 ZWxzZSBiPWFbdi5zdGF0dXNdLHYudGhlbihiLGIpfXJldHVybiB0aGlzfSxkLnVybD0oKGF8fGQudXJs KSsiIikucmVwbGFjZShiSCwiIikucmVwbGFjZShiTSxiWFsxXSsiLy8iKSxkLmRhdGFUeXBlcz1mLnRy aW0oZC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KGJRKSxkLmNyb3NzRG9tYWluPT1u dWxsJiYocj1iUy5leGVjKGQudXJsLnRvTG93ZXJDYXNlKCkpLGQuY3Jvc3NEb21haW49ISghcnx8clsx XT09YlhbMV0mJnJbMl09PWJYWzJdJiYoclszXXx8KHJbMV09PT0iaHR0cDoiPzgwOjQ0MykpPT0oYlhb M118fChiWFsxXT09PSJodHRwOiI/ODA6NDQzKSkpKSxkLmRhdGEmJmQucHJvY2Vzc0RhdGEmJnR5cGVv ZiBkLmRhdGEhPSJzdHJpbmciJiYoZC5kYXRhPWYucGFyYW0oZC5kYXRhLGQudHJhZGl0aW9uYWwpKSxi JChiVSxkLGMsdik7aWYocz09PTIpcmV0dXJuITE7dD1kLmdsb2JhbCxkLnR5cGU9ZC50eXBlLnRvVXBw ZXJDYXNlKCksZC5oYXNDb250ZW50PSFiTC50ZXN0KGQudHlwZSksdCYmZi5hY3RpdmUrKz09PTAmJmYu ZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7aWYoIWQuaGFzQ29udGVudCl7ZC5kYXRhJiYoZC51cmwr PShiTi50ZXN0KGQudXJsKT8iJiI6Ij8iKStkLmRhdGEpLGs9ZC51cmw7aWYoZC5jYWNoZT09PSExKXt2 YXIgeD1mLm5vdygpLHk9ZC51cmwucmVwbGFjZShiUiwiJDFfPSIreCk7ZC51cmw9eSsoeT09PWQudXJs PyhiTi50ZXN0KGQudXJsKT8iJiI6Ij8iKSsiXz0iK3g6IiIpfX0oZC5kYXRhJiZkLmhhc0NvbnRlbnQm JmQuY29udGVudFR5cGUhPT0hMXx8Yy5jb250ZW50VHlwZSkmJnYuc2V0UmVxdWVzdEhlYWRlcigiQ29u dGVudC1UeXBlIixkLmNvbnRlbnRUeXBlKSxkLmlmTW9kaWZpZWQmJihrPWt8fGQudXJsLGYubGFzdE1v ZGlmaWVkW2tdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixmLmxhc3RNb2Rp ZmllZFtrXSksZi5ldGFnW2tdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLGYuZXRh Z1trXSkpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixkLmRhdGFUeXBlc1swXSYmZC5hY2NlcHRz W2QuZGF0YVR5cGVzWzBdXT9kLmFjY2VwdHNbZC5kYXRhVHlwZXNbMF1dKyhkLmRhdGFUeXBlc1swXSE9 PSIqIj8iLCAqLyo7IHE9MC4wMSI6IiIpOmQuYWNjZXB0c1siKiJdKTtmb3IodSBpbiBkLmhlYWRlcnMp di5zZXRSZXF1ZXN0SGVhZGVyKHUsZC5oZWFkZXJzW3VdKTtpZihkLmJlZm9yZVNlbmQmJihkLmJlZm9y ZVNlbmQuY2FsbChlLHYsZCk9PT0hMXx8cz09PTIpKXt2LmFib3J0KCk7cmV0dXJuITF9Zm9yKHUgaW57 c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pdlt1XShkW3VdKTtwPWIkKGJWLGQsYyx2KTtpZigh cCl3KC0xLCJObyBUcmFuc3BvcnQiKTtlbHNle3YucmVhZHlTdGF0ZT0xLHQmJmcudHJpZ2dlcigiYWph eFNlbmQiLFt2LGRdKSxkLmFzeW5jJiZkLnRpbWVvdXQ+MCYmKHE9c2V0VGltZW91dChmdW5jdGlvbigp e3YuYWJvcnQoInRpbWVvdXQiKX0sZC50aW1lb3V0KSk7dHJ5e3M9MSxwLnNlbmQobCx3KX1jYXRjaCh6 KXtzdGF0dXM8Mj93KC0xLHopOmYuZXJyb3Ioeil9fXJldHVybiB2fSxwYXJhbTpmdW5jdGlvbihhLGMp e3ZhciBkPVtdLGU9ZnVuY3Rpb24oYSxiKXtiPWYuaXNGdW5jdGlvbihiKT9iKCk6YixkW2QubGVuZ3Ro XT1lbmNvZGVVUklDb21wb25lbnQoYSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChiKX07Yz09PWImJihj PWYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKTtpZihmLmlzQXJyYXkoYSl8fGEuanF1ZXJ5JiYhZi5p c1BsYWluT2JqZWN0KGEpKWYuZWFjaChhLGZ1bmN0aW9uKCl7ZSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9 KTtlbHNlIGZvcih2YXIgZyBpbiBhKWJfKGcsYVtnXSxjLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBs YWNlKGJFLCIrIil9fSksZi5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9fSk7 dmFyIGNjPWYubm93KCksY2Q9LyhcPSlcPygmfCQpfFw/XD8vaTtmLmFqYXhTZXR1cCh7anNvbnA6ImNh bGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZXhwYW5kbysiXyIrY2MrK319 KSxmLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1iLmNvbnRl bnRUeXBlPT09ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCImJnR5cGVvZiBiLmRhdGE9 PSJzdHJpbmciO2lmKGIuZGF0YVR5cGVzWzBdPT09Impzb25wInx8Yi5qc29ucCE9PSExJiYoY2QudGVz dChiLnVybCl8fGUmJmNkLnRlc3QoYi5kYXRhKSkpe3ZhciBnLGg9Yi5qc29ucENhbGxiYWNrPWYuaXNG dW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxp PWFbaF0saj1iLnVybCxrPWIuZGF0YSxsPSIkMSIraCsiJDIiO2IuanNvbnAhPT0hMSYmKGo9ai5yZXBs YWNlKGNkLGwpLGIudXJsPT09aiYmKGUmJihrPWsucmVwbGFjZShjZCxsKSksYi5kYXRhPT09ayYmKGor PSgvXD8vLnRlc3Qoaik/IiYiOiI/IikrYi5qc29ucCsiPSIraCkpKSxiLnVybD1qLGIuZGF0YT1rLGFb aF09ZnVuY3Rpb24oYSl7Zz1bYV19LGQuYWx3YXlzKGZ1bmN0aW9uKCl7YVtoXT1pLGcmJmYuaXNGdW5j dGlvbihpKSYmYVtoXShnWzBdKX0pLGIuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigp

e2d8fGYuZXJyb3IoaCsiIHdhcyBub3QgY2FsbGVkIik7cmV0dXJuIGdbMF19LGIuZGF0YVR5cGVzWzBd PSJqc29uIjtyZXR1cm4ic2NyaXB0In19KSxmLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0 L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQs IGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L2phdmFzY3JpcHR8ZWNt YXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oYSl7Zi5nbG9iYWxFdmFs KGEpO3JldHVybiBhfX19KSxmLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oYSl7YS5jYWNo ZT09PWImJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSEx KX0pLGYuYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2 YXIgZCxlPWMuaGVhZHx8Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHxjLmRvY3VtZW50 RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihmLGcpe2Q9Yy5jcmVhdGVFbGVtZW50KCJzY3JpcHQi KSxkLmFzeW5jPSJhc3luYyIsYS5zY3JpcHRDaGFyc2V0JiYoZC5jaGFyc2V0PWEuc2NyaXB0Q2hhcnNl dCksZC5zcmM9YS51cmwsZC5vbmxvYWQ9ZC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oYSxjKXtp ZihjfHwhZC5yZWFkeVN0YXRlfHwvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGQucmVhZHlTdGF0ZSkpZC5v bmxvYWQ9ZC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxlJiZkLnBhcmVudE5vZGUmJmUucmVtb3ZlQ2hp bGQoZCksZD1iLGN8fGcoMjAwLCJzdWNjZXNzIil9LGUuaW5zZXJ0QmVmb3JlKGQsZS5maXJzdENoaWxk KX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkLm9ubG9hZCgwLDEpfX19fSk7dmFyIGNlPWEuQWN0aXZlWE9i amVjdD9mdW5jdGlvbigpe2Zvcih2YXIgYSBpbiBjZyljZ1thXSgwLDEpfTohMSxjZj0wLGNnO2YuYWph eFNldHRpbmdzLnhocj1hLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0xvY2Fs JiZjaCgpfHxjaSgpfTpjaCxmdW5jdGlvbihhKXtmLmV4dGVuZChmLnN1cHBvcnQse2FqYXg6ISFhLGNv cnM6ISFhJiYid2l0aENyZWRlbnRpYWxzImluIGF9KX0oZi5hamF4U2V0dGluZ3MueGhyKCkpLGYuc3Vw cG9ydC5hamF4JiZmLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oYyl7aWYoIWMuY3Jvc3NEb21haW58fGYu c3VwcG9ydC5jb3JzKXt2YXIgZDtyZXR1cm57c2VuZDpmdW5jdGlvbihlLGcpe3ZhciBoPWMueGhyKCks aSxqO2MudXNlcm5hbWU/aC5vcGVuKGMudHlwZSxjLnVybCxjLmFzeW5jLGMudXNlcm5hbWUsYy5wYXNz d29yZCk6aC5vcGVuKGMudHlwZSxjLnVybCxjLmFzeW5jKTtpZihjLnhockZpZWxkcylmb3IoaiBpbiBj LnhockZpZWxkcyloW2pdPWMueGhyRmllbGRzW2pdO2MubWltZVR5cGUmJmgub3ZlcnJpZGVNaW1lVHlw ZSYmaC5vdmVycmlkZU1pbWVUeXBlKGMubWltZVR5cGUpLCFjLmNyb3NzRG9tYWluJiYhZVsiWC1SZXF1 ZXN0ZWQtV2l0aCJdJiYoZVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO3RyeXtm b3IoaiBpbiBlKWguc2V0UmVxdWVzdEhlYWRlcihqLGVbal0pfWNhdGNoKGspe31oLnNlbmQoYy5oYXND b250ZW50JiZjLmRhdGF8fG51bGwpLGQ9ZnVuY3Rpb24oYSxlKXt2YXIgaixrLGwsbSxuO3RyeXtpZihk JiYoZXx8aC5yZWFkeVN0YXRlPT09NCkpe2Q9YixpJiYoaC5vbnJlYWR5c3RhdGVjaGFuZ2U9Zi5ub29w LGNlJiZkZWxldGUgY2dbaV0pO2lmKGUpaC5yZWFkeVN0YXRlIT09NCYmaC5hYm9ydCgpO2Vsc2V7aj1o LnN0YXR1cyxsPWguZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCksbT17fSxuPWgucmVzcG9uc2VYTUwsbiYm bi5kb2N1bWVudEVsZW1lbnQmJihtLnhtbD1uKSxtLnRleHQ9aC5yZXNwb25zZVRleHQ7dHJ5e2s9aC5z dGF0dXNUZXh0fWNhdGNoKG8pe2s9IiJ9IWomJmMuaXNMb2NhbCYmIWMuY3Jvc3NEb21haW4/aj1tLnRl eHQ/MjAwOjQwNDpqPT09MTIyMyYmKGo9MjA0KX19fWNhdGNoKHApe2V8fGcoLTEscCl9bSYmZyhqLGss bSxsKX0sIWMuYXN5bmN8fGgucmVhZHlTdGF0ZT09PTQ/ZCgpOihpPSsrY2YsY2UmJihjZ3x8KGNnPXt9 LGYoYSkudW5sb2FkKGNlKSksY2dbaV09ZCksaC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZCl9LGFib3J0OmZ1 bmN0aW9uKCl7ZCYmZCgwLDEpfX19fSk7dmFyIGNqPXt9LGNrLGNsLGNtPS9eKD86dG9nZ2xlfHNob3d8 aGlkZSkkLyxjbj0vXihbK1wtXT0pPyhbXGQrLlwtXSspKFthLXolXSopJC9pLGNvLGNwPVtbImhlaWdo dCIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIl0s WyJ3aWR0aCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1Jp Z2h0Il0sWyJvcGFjaXR5Il1dLGNxLGNyPWEud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxhLm1v elJlcXVlc3RBbmltYXRpb25GcmFtZXx8YS5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lO2YuZm4uZXh0ZW5k KHtzaG93OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlO2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1h dGUoY3UoInNob3ciLDMpLGEsYixjKTtmb3IodmFyIGc9MCxoPXRoaXMubGVuZ3RoO2c8aDtnKyspZD10 aGlzW2ddLGQuc3R5bGUmJihlPWQuc3R5bGUuZGlzcGxheSwhZi5fZGF0YShkLCJvbGRkaXNwbGF5Iikm JmU9PT0ibm9uZSImJihlPWQuc3R5bGUuZGlzcGxheT0iIiksZT09PSIiJiZmLmNzcyhkLCJkaXNwbGF5 Iik9PT0ibm9uZSImJmYuX2RhdGEoZCwib2xkZGlzcGxheSIsY3YoZC5ub2RlTmFtZSkpKTtmb3IoZz0w O2c8aDtnKyspe2Q9dGhpc1tnXTtpZihkLnN0eWxlKXtlPWQuc3R5bGUuZGlzcGxheTtpZihlPT09IiJ8 fGU9PT0ibm9uZSIpZC5zdHlsZS5kaXNwbGF5PWYuX2RhdGEoZCwib2xkZGlzcGxheSIpfHwiIn19cmV0 dXJuIHRoaXN9LGhpZGU6ZnVuY3Rpb24oYSxiLGMpe2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1h dGUoY3UoImhpZGUiLDMpLGEsYixjKTtmb3IodmFyIGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspaWYo dGhpc1tkXS5zdHlsZSl7dmFyIGc9Zi5jc3ModGhpc1tkXSwiZGlzcGxheSIpO2chPT0ibm9uZSImJiFm Ll9kYXRhKHRoaXNbZF0sIm9sZGRpc3BsYXkiKSYmZi5fZGF0YSh0aGlzW2RdLCJvbGRkaXNwbGF5Iixn KX1mb3IoZD0wO2Q8ZTtkKyspdGhpc1tkXS5zdHlsZSYmKHRoaXNbZF0uc3R5bGUuZGlzcGxheT0ibm9u ZSIpO3JldHVybiB0aGlzfSxfdG9nZ2xlOmYuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIsYyl7 dmFyIGQ9dHlwZW9mIGE9PSJib29sZWFuIjtmLmlzRnVuY3Rpb24oYSkmJmYuaXNGdW5jdGlvbihiKT90 aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE9PW51bGx8fGQ/dGhpcy5lYWNoKGZ1bmN0 aW9uKCl7dmFyIGI9ZD9hOmYodGhpcykuaXMoIjpoaWRkZW4iKTtmKHRoaXMpW2I/InNob3ciOiJoaWRl Il0oKX0pOnRoaXMuYW5pbWF0ZShjdSgidG9nZ2xlIiwzKSxhLGIsYyk7cmV0dXJuIHRoaXN9LGZhZGVU

bzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNp dHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5j dGlvbihhLGIsYyxkKXt2YXIgZT1mLnNwZWVkKGIsYyxkKTtpZihmLmlzRW1wdHlPYmplY3QoYSkpcmV0 dXJuIHRoaXMuZWFjaChlLmNvbXBsZXRlLFshMV0pO2E9Zi5leHRlbmQoe30sYSk7cmV0dXJuIHRoaXNb ZS5xdWV1ZT09PSExPyJlYWNoIjoicXVldWUiXShmdW5jdGlvbigpe2UucXVldWU9PT0hMSYmZi5fbWFy ayh0aGlzKTt2YXIgYj1mLmV4dGVuZCh7fSxlKSxjPXRoaXMubm9kZVR5cGU9PT0xLGQ9YyYmZih0aGlz KS5pcygiOmhpZGRlbiIpLGcsaCxpLGosayxsLG0sbixvO2IuYW5pbWF0ZWRQcm9wZXJ0aWVzPXt9O2Zv cihpIGluIGEpe2c9Zi5jYW1lbENhc2UoaSksaSE9PWcmJihhW2ddPWFbaV0sZGVsZXRlIGFbaV0pLGg9 YVtnXSxmLmlzQXJyYXkoaCk/KGIuYW5pbWF0ZWRQcm9wZXJ0aWVzW2ddPWhbMV0saD1hW2ddPWhbMF0p OmIuYW5pbWF0ZWRQcm9wZXJ0aWVzW2ddPWIuc3BlY2lhbEVhc2luZyYmYi5zcGVjaWFsRWFzaW5nW2dd fHxiLmVhc2luZ3x8InN3aW5nIjtpZihoPT09ImhpZGUiJiZkfHxoPT09InNob3ciJiYhZClyZXR1cm4g Yi5jb21wbGV0ZS5jYWxsKHRoaXMpO2MmJihnPT09ImhlaWdodCJ8fGc9PT0id2lkdGgiKSYmKGIub3Zl cmZsb3c9W3RoaXMuc3R5bGUub3ZlcmZsb3csdGhpcy5zdHlsZS5vdmVyZmxvd1gsdGhpcy5zdHlsZS5v dmVyZmxvd1ldLGYuY3NzKHRoaXMsImRpc3BsYXkiKT09PSJpbmxpbmUiJiZmLmNzcyh0aGlzLCJmbG9h dCIpPT09Im5vbmUiJiYoZi5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQ/KGo9Y3YodGhpcy5u b2RlTmFtZSksaj09PSJpbmxpbmUiP3RoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIjoodGhp cy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUiLHRoaXMuc3R5bGUuem9vbT0xKSk6dGhpcy5zdHlsZS5kaXNw bGF5PSJpbmxpbmUtYmxvY2siKSl9Yi5vdmVyZmxvdyE9bnVsbCYmKHRoaXMuc3R5bGUub3ZlcmZsb3c9 ImhpZGRlbiIpO2ZvcihpIGluIGEpaz1uZXcgZi5meCh0aGlzLGIsaSksaD1hW2ldLGNtLnRlc3QoaCk/ a1toPT09InRvZ2dsZSI/ZD8ic2hvdyI6ImhpZGUiOmhdKCk6KGw9Y24uZXhlYyhoKSxtPWsuY3VyKCks bD8obj1wYXJzZUZsb2F0KGxbMl0pLG89bFszXXx8KGYuY3NzTnVtYmVyW2ldPyIiOiJweCIpLG8hPT0i cHgiJiYoZi5zdHlsZSh0aGlzLGksKG58fDEpK28pLG09KG58fDEpL2suY3VyKCkqbSxmLnN0eWxlKHRo aXMsaSxtK28pKSxsWzFdJiYobj0obFsxXT09PSItPSI/LTE6MSkqbittKSxrLmN1c3RvbShtLG4sbykp OmsuY3VzdG9tKG0saCwiIikpO3JldHVybiEwfSl9LHN0b3A6ZnVuY3Rpb24oYSxiKXthJiZ0aGlzLnF1 ZXVlKFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYT1mLnRpbWVycyxjPWEubGVuZ3RoO2J8fGYu X3VubWFyayghMCx0aGlzKTt3aGlsZShjLS0pYVtjXS5lbGVtPT09dGhpcyYmKGImJmFbY10oITApLGEu c3BsaWNlKGMsMSkpfSksYnx8dGhpcy5kZXF1ZXVlKCk7cmV0dXJuIHRoaXN9fSksZi5lYWNoKHtzbGlk ZURvd246Y3UoInNob3ciLDEpLHNsaWRlVXA6Y3UoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOmN1KCJ0b2dn bGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRl VG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGEs YyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLGYuZXh0ZW5kKHtzcGVlZDpmdW5jdGlv bihhLGIsYyl7dmFyIGQ9YSYmdHlwZW9mIGE9PSJvYmplY3QiP2YuZXh0ZW5kKHt9LGEpOntjb21wbGV0 ZTpjfHwhYyYmYnx8Zi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFm LmlzRnVuY3Rpb24oYikmJmJ9O2QuZHVyYXRpb249Zi5meC5vZmY/MDp0eXBlb2YgZC5kdXJhdGlvbj09 Im51bWJlciI/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIGYuZnguc3BlZWRzP2YuZnguc3BlZWRzW2Qu ZHVyYXRpb25dOmYuZnguc3BlZWRzLl9kZWZhdWx0LGQub2xkPWQuY29tcGxldGUsZC5jb21wbGV0ZT1m dW5jdGlvbihhKXtkLnF1ZXVlIT09ITE/Zi5kZXF1ZXVlKHRoaXMpOmEhPT0hMSYmZi5fdW5tYXJrKHRo aXMpLGYuaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyl9O3JldHVybiBkfSxlYXNpbmc6 e2xpbmVhcjpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYytkKmF9LHN3aW5nOmZ1bmN0aW9uKGEsYixj LGQpe3JldHVybigtTWF0aC5jb3MoYSpNYXRoLlBJKS8yKy41KSpkK2N9fSx0aW1lcnM6W10sZng6ZnVu Y3Rpb24oYSxiLGMpe3RoaXMub3B0aW9ucz1iLHRoaXMuZWxlbT1hLHRoaXMucHJvcD1jLGIub3JpZz1i Lm9yaWd8fHt9fX0pLGYuZngucHJvdG90eXBlPXt1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMu c3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksKGYuZngu c3RlcFt0aGlzLnByb3BdfHxmLmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpfSxjdXI6ZnVuY3Rpb24oKXtp Zih0aGlzLmVsZW1bdGhpcy5wcm9wXSE9bnVsbCYmKCF0aGlzLmVsZW0uc3R5bGV8fHRoaXMuZWxlbS5z dHlsZVt0aGlzLnByb3BdPT1udWxsKSlyZXR1cm4gdGhpcy5lbGVtW3RoaXMucHJvcF07dmFyIGEsYj1m LmNzcyh0aGlzLmVsZW0sdGhpcy5wcm9wKTtyZXR1cm4gaXNOYU4oYT1wYXJzZUZsb2F0KGIpKT8hYnx8 Yj09PSJhdXRvIj8wOmI6YX0sY3VzdG9tOmZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBoKGEpe3JldHVy biBkLnN0ZXAoYSl9dmFyIGQ9dGhpcyxlPWYuZngsZzt0aGlzLnN0YXJ0VGltZT1jcXx8Y3MoKSx0aGlz LnN0YXJ0PWEsdGhpcy5lbmQ9Yix0aGlzLnVuaXQ9Y3x8dGhpcy51bml0fHwoZi5jc3NOdW1iZXJbdGhp cy5wcm9wXT8iIjoicHgiKSx0aGlzLm5vdz10aGlzLnN0YXJ0LHRoaXMucG9zPXRoaXMuc3RhdGU9MCxo LmVsZW09dGhpcy5lbGVtLGgoKSYmZi50aW1lcnMucHVzaChoKSYmIWNvJiYoY3I/KGNvPTEsZz1mdW5j dGlvbigpe2NvJiYoY3IoZyksZS50aWNrKCkpfSxjcihnKSk6Y289c2V0SW50ZXJ2YWwoZS50aWNrLGUu aW50ZXJ2YWwpKX0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09Zi5z dHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCx0aGlzLmN1c3RvbSh0 aGlzLnByb3A9PT0id2lkdGgifHx0aGlzLnByb3A9PT0iaGVpZ2h0Ij8xOjAsdGhpcy5jdXIoKSksZih0 aGlzLmVsZW0pLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJv cF09Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuaGlkZT0hMCx0aGlzLmN1 c3RvbSh0aGlzLmN1cigpLDApfSxzdGVwOmZ1bmN0aW9uKGEpe3ZhciBiPWNxfHxjcygpLGM9ITAsZD10 aGlzLmVsZW0sZT10aGlzLm9wdGlvbnMsZyxoO2lmKGF8fGI+PWUuZHVyYXRpb24rdGhpcy5zdGFydFRp

bWUpe3RoaXMubm93PXRoaXMuZW5kLHRoaXMucG9zPXRoaXMuc3RhdGU9MSx0aGlzLnVwZGF0ZSgpLGUu YW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF09ITA7Zm9yKGcgaW4gZS5hbmltYXRlZFByb3BlcnRp ZXMpZS5hbmltYXRlZFByb3BlcnRpZXNbZ10hPT0hMCYmKGM9ITEpO2lmKGMpe2Uub3ZlcmZsb3chPW51 bGwmJiFmLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyYmZi5lYWNoKFsiIiwiWCIsIlkiXSxmdW5jdGlv bihhLGIpe2Quc3R5bGVbIm92ZXJmbG93IitiXT1lLm92ZXJmbG93W2FdfSksZS5oaWRlJiZmKGQpLmhp ZGUoKTtpZihlLmhpZGV8fGUuc2hvdylmb3IodmFyIGkgaW4gZS5hbmltYXRlZFByb3BlcnRpZXMpZi5z dHlsZShkLGksZS5vcmlnW2ldKTtlLmNvbXBsZXRlLmNhbGwoZCl9cmV0dXJuITF9ZS5kdXJhdGlvbj09 SW5maW5pdHk/dGhpcy5ub3c9YjooaD1iLXRoaXMuc3RhcnRUaW1lLHRoaXMuc3RhdGU9aC9lLmR1cmF0 aW9uLHRoaXMucG9zPWYuZWFzaW5nW2UuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF1dKHRoaXMu c3RhdGUsaCwwLDEsZS5kdXJhdGlvbiksdGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5z dGFydCkqdGhpcy5wb3MpLHRoaXMudXBkYXRlKCk7cmV0dXJuITB9fSxmLmV4dGVuZChmLmZ4LHt0aWNr OmZ1bmN0aW9uKCl7Zm9yKHZhciBhPWYudGltZXJzLGI9MDtiPGEubGVuZ3RoOysrYilhW2JdKCl8fGEu c3BsaWNlKGItLSwxKTthLmxlbmd0aHx8Zi5meC5zdG9wKCl9LGludGVydmFsOjEzLHN0b3A6ZnVuY3Rp b24oKXtjbGVhckludGVydmFsKGNvKSxjbz1udWxsfSxzcGVlZHM6e3Nsb3c6NjAwLGZhc3Q6MjAwLF9k ZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlvbihhKXtmLnN0eWxlKGEuZWxlbSwib3BhY2l0 eSIsYS5ub3cpfSxfZGVmYXVsdDpmdW5jdGlvbihhKXthLmVsZW0uc3R5bGUmJmEuZWxlbS5zdHlsZVth LnByb3BdIT1udWxsP2EuZWxlbS5zdHlsZVthLnByb3BdPShhLnByb3A9PT0id2lkdGgifHxhLnByb3A9 PT0iaGVpZ2h0Ij9NYXRoLm1heCgwLGEubm93KTphLm5vdykrYS51bml0OmEuZWxlbVthLnByb3BdPWEu bm93fX19KSxmLmV4cHImJmYuZXhwci5maWx0ZXJzJiYoZi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVu Y3Rpb24oYSl7cmV0dXJuIGYuZ3JlcChmLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxl bX0pLmxlbmd0aH0pO3ZhciBjdz0vXnQoPzphYmxlfGR8aCkkL2ksY3g9L14oPzpib2R5fGh0bWwpJC9p OyJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gYy5kb2N1bWVudEVsZW1lbnQ/Zi5mbi5vZmZzZXQ9ZnVu Y3Rpb24oYSl7dmFyIGI9dGhpc1swXSxjO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtm Lm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJu IG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBmLm9mZnNldC5ib2R5T2Zmc2V0 KGIpO3RyeXtjPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2goZCl7fXZhciBlPWIub3duZXJE b2N1bWVudCxnPWUuZG9jdW1lbnRFbGVtZW50O2lmKCFjfHwhZi5jb250YWlucyhnLGIpKXJldHVybiBj P3t0b3A6Yy50b3AsbGVmdDpjLmxlZnR9Ont0b3A6MCxsZWZ0OjB9O3ZhciBoPWUuYm9keSxpPWN5KGUp LGo9Zy5jbGllbnRUb3B8fGguY2xpZW50VG9wfHwwLGs9Zy5jbGllbnRMZWZ0fHxoLmNsaWVudExlZnR8 fDAsbD1pLnBhZ2VZT2Zmc2V0fHxmLnN1cHBvcnQuYm94TW9kZWwmJmcuc2Nyb2xsVG9wfHxoLnNjcm9s bFRvcCxtPWkucGFnZVhPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxMZWZ0fHxoLnNj cm9sbExlZnQsbj1jLnRvcCtsLWosbz1jLmxlZnQrbS1rO3JldHVybnt0b3A6bixsZWZ0Om99fTpmLmZu Lm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5j dGlvbihiKXtmLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1l bnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBmLm9mZnNldC5i b2R5T2Zmc2V0KGIpO2Yub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgYyxkPWIub2Zmc2V0UGFyZW50LGU9 YixnPWIub3duZXJEb2N1bWVudCxoPWcuZG9jdW1lbnRFbGVtZW50LGk9Zy5ib2R5LGo9Zy5kZWZhdWx0 VmlldyxrPWo/ai5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6Yi5jdXJyZW50U3R5bGUsbD1iLm9mZnNl dFRvcCxtPWIub2Zmc2V0TGVmdDt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiZiIT09aSYmYiE9PWgpe2lm KGYub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7 Yz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGwtPWIuc2Nyb2xsVG9w LG0tPWIuc2Nyb2xsTGVmdCxiPT09ZCYmKGwrPWIub2Zmc2V0VG9wLG0rPWIub2Zmc2V0TGVmdCxmLm9m ZnNldC5kb2VzTm90QWRkQm9yZGVyJiYoIWYub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENl bGxzfHwhY3cudGVzdChiLm5vZGVOYW1lKSkmJihsKz1wYXJzZUZsb2F0KGMuYm9yZGVyVG9wV2lkdGgp fHwwLG0rPXBhcnNlRmxvYXQoYy5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxlPWQsZD1iLm9mZnNldFBhcmVu dCksZi5vZmZzZXQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZjLm92ZXJmbG93 IT09InZpc2libGUiJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZs b2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksaz1jfWlmKGsucG9zaXRpb249PT0icmVsYXRpdmUifHxr LnBvc2l0aW9uPT09InN0YXRpYyIpbCs9aS5vZmZzZXRUb3AsbSs9aS5vZmZzZXRMZWZ0O2Yub2Zmc2V0 LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCImJihsKz1NYXRoLm1heCho LnNjcm9sbFRvcCxpLnNjcm9sbFRvcCksbSs9TWF0aC5tYXgoaC5zY3JvbGxMZWZ0LGkuc2Nyb2xsTGVm dCkpO3JldHVybnt0b3A6bCxsZWZ0Om19fSxmLm9mZnNldD17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3Zh ciBhPWMuYm9keSxiPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZCxlLGcsaCxpPXBhcnNlRmxvYXQoZi5j c3MoYSwibWFyZ2luVG9wIikpfHwwLGo9IjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDow O2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDto ZWlnaHQ6MXB4Oyc+PGRpdj48L2Rpdj48L2Rpdj48dGFibGUgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRl O3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRo OjFweDtoZWlnaHQ6MXB4OycgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz48dHI+PHRkPjwv dGQ+PC90cj48L3RhYmxlPiI7Zi5leHRlbmQoYi5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6 MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsaGVpZ2h0OiIxcHgiLHZpc2liaWxp

dHk6ImhpZGRlbiJ9KSxiLmlubmVySFRNTD1qLGEuaW5zZXJ0QmVmb3JlKGIsYS5maXJzdENoaWxkKSxk PWIuZmlyc3RDaGlsZCxlPWQuZmlyc3RDaGlsZCxoPWQubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJz dENoaWxkLHRoaXMuZG9lc05vdEFkZEJvcmRlcj1lLm9mZnNldFRvcCE9PTUsdGhpcy5kb2VzQWRkQm9y ZGVyRm9yVGFibGVBbmRDZWxscz1oLm9mZnNldFRvcD09PTUsZS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQi LGUuc3R5bGUudG9wPSIyMHB4Iix0aGlzLnN1cHBvcnRzRml4ZWRQb3NpdGlvbj1lLm9mZnNldFRvcD09 PTIwfHxlLm9mZnNldFRvcD09PTE1LGUuc3R5bGUucG9zaXRpb249ZS5zdHlsZS50b3A9IiIsZC5zdHls ZS5vdmVyZmxvdz0iaGlkZGVuIixkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy5zdWJ0cmFj dHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9ZS5vZmZzZXRUb3A9PT0tNSx0aGlzLmRvZXNOb3RJ bmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PWEub2Zmc2V0VG9wIT09aSxhLnJlbW92ZUNoaWxkKGIpLGYu b2Zmc2V0LmluaXRpYWxpemU9Zi5ub29wfSxib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zm c2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yub2Zmc2V0LmluaXRpYWxpemUoKSxmLm9mZnNldC5kb2VzTm90 SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9w IikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpi LGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24i KTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1l Lm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0 ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtq PyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFy c2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVs bCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0 K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bv c2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRo aXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3gudGVzdChiWzBdLm5vZGVOYW1lKT97 dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRv cCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9 cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxv YXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3As bGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFw KGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3gudGVz dChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJl bnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD0i c2Nyb2xsIitjO2YuZm5bZF09ZnVuY3Rpb24oYyl7dmFyIGUsZztpZihjPT09Yil7ZT10aGlzWzBdO2lm KCFlKXJldHVybiBudWxsO2c9Y3koZSk7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdl WU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Zi5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3Vt ZW50RWxlbWVudFtkXXx8Zy5kb2N1bWVudC5ib2R5W2RdOmVbZF19cmV0dXJuIHRoaXMuZWFjaChmdW5j dGlvbigpe2c9Y3kodGhpcyksZz9nLnNjcm9sbFRvKGE/ZihnKS5zY3JvbGxMZWZ0KCk6YyxhP2M6Zihn KS5zY3JvbGxUb3AoKSk6dGhpc1tkXT1jfSl9fSksZi5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5j dGlvbihhLGMpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtmLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXty ZXR1cm4gdGhpc1swXT9wYXJzZUZsb2F0KGYuY3NzKHRoaXNbMF0sZCwicGFkZGluZyIpKTpudWxsfSxm LmZuWyJvdXRlciIrY109ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXNbMF0/cGFyc2VGbG9hdChmLmNzcyh0 aGlzWzBdLGQsYT8ibWFyZ2luIjoiYm9yZGVyIikpOm51bGx9LGYuZm5bZF09ZnVuY3Rpb24oYSl7dmFy IGU9dGhpc1swXTtpZighZSlyZXR1cm4gYT09bnVsbD9udWxsOnRoaXM7aWYoZi5pc0Z1bmN0aW9uKGEp KXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKTtjW2RdKGEuY2FsbCh0aGlz LGIsY1tkXSgpKSl9KTtpZihmLmlzV2luZG93KGUpKXt2YXIgZz1lLmRvY3VtZW50LmRvY3VtZW50RWxl bWVudFsiY2xpZW50IitjXTtyZXR1cm4gZS5kb2N1bWVudC5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQi JiZnfHxlLmRvY3VtZW50LmJvZHlbImNsaWVudCIrY118fGd9aWYoZS5ub2RlVHlwZT09PTkpcmV0dXJu IE1hdGgubWF4KGUuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2NdLGUuYm9keVsic2Nyb2xsIitjXSxl LmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIitjXSxlLmJvZHlbIm9mZnNldCIrY10sZS5kb2N1bWVudEVs ZW1lbnRbIm9mZnNldCIrY10pO2lmKGE9PT1iKXt2YXIgaD1mLmNzcyhlLGQpLGk9cGFyc2VGbG9hdCho KTtyZXR1cm4gZi5pc05hTihpKT9oOml9cmV0dXJuIHRoaXMuY3NzKGQsdHlwZW9mIGE9PSJzdHJpbmci P2E6YSsicHgiKX19KSxhLmpRdWVyeT1hLiQ9Zn0pKHdpbmRvdyk7alF1ZXJ5Lm5vQ29uZmxpY3QoKTs= ###PACKDATA,FILE_END,/importbuddy/js/jquery.js,importbuddy/js/jquery.js ###PACKDATA,FILE_START,/importbuddy/js/tooltip.js,importbuddy/js/tooltip.js LyoNCiAqIGpRdWVyeSBUb29sdGlwIHBsdWdpbiAxLjMNCiAqDQogKiBodHRwOi8vYmFzc2lzdGFuY2Uu ZGUvanF1ZXJ5LXBsdWdpbnMvanF1ZXJ5LXBsdWdpbi10b29sdGlwLw0KICogaHR0cDovL2RvY3MuanF1 ZXJ5LmNvbS9QbHVnaW5zL1Rvb2x0aXANCiAqDQogKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IErD tnJuIFphZWZmZXJlcg0KICoNCiAqICRJZDoganF1ZXJ5LnRvb2x0aXAuanMgNTc0MSAyMDA4LTA2LTIx IDE1OjIyOjE2WiBqb2Vybi56YWVmZmVyZXIgJA0KICogDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRo ZSBNSVQgYW5kIEdQTCBsaWNlbnNlczoNCiAqICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNl bnNlcy9taXQtbGljZW5zZS5waHANCiAqICAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5o

dG1sDQogKi87KGZ1bmN0aW9uKCQpe3ZhciBoZWxwZXI9e30sY3VycmVudCx0aXRsZSx0SUQsSUU9JC5i cm93c2VyLm1zaWUmJi9NU0lFXHMoNVwuNXw2XC4pLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRy YWNrPWZhbHNlOyQudG9vbHRpcD17YmxvY2tlZDpmYWxzZSxkZWZhdWx0czp7ZGVsYXk6MjAwLGZhZGU6 ZmFsc2Usc2hvd1VSTDp0cnVlLGV4dHJhQ2xhc3M6IiIsdG9wOjE1LGxlZnQ6MTUsaWQ6InRvb2x0aXAi fSxibG9jazpmdW5jdGlvbigpeyQudG9vbHRpcC5ibG9ja2VkPSEkLnRvb2x0aXAuYmxvY2tlZDt9fTsk LmZuLmV4dGVuZCh7dG9vbHRpcDpmdW5jdGlvbihzZXR0aW5ncyl7c2V0dGluZ3M9JC5leHRlbmQoe30s JC50b29sdGlwLmRlZmF1bHRzLHNldHRpbmdzKTtjcmVhdGVIZWxwZXIoc2V0dGluZ3MpO3JldHVybiB0 aGlzLmVhY2goZnVuY3Rpb24oKXskLmRhdGEodGhpcywidG9vbHRpcCIsc2V0dGluZ3MpO3RoaXMudE9w YWNpdHk9aGVscGVyLnBhcmVudC5jc3MoIm9wYWNpdHkiKTt0aGlzLnRvb2x0aXBUZXh0PXRoaXMudGl0 bGU7JCh0aGlzKS5yZW1vdmVBdHRyKCJ0aXRsZSIpO3RoaXMuYWx0PSIiO30pLm1vdXNlb3ZlcihzYXZl KS5tb3VzZW91dChoaWRlKS5jbGljayhoaWRlKTt9LGZpeFBORzpJRT9mdW5jdGlvbigpe3JldHVybiB0 aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaW1hZ2U9JCh0aGlzKS5jc3MoJ2JhY2tncm91bmRJbWFnZScp O2lmKGltYWdlLm1hdGNoKC9edXJsXChbIiddPyguKlwucG5nKVsiJ10/XCkkL2kpKXtpbWFnZT1SZWdF eHAuJDE7JCh0aGlzKS5jc3MoeydiYWNrZ3JvdW5kSW1hZ2UnOidub25lJywnZmlsdGVyJzoicHJvZ2lk OkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhSW1hZ2VMb2FkZXIoZW5hYmxlZD10cnVlLCBz aXppbmdNZXRob2Q9Y3JvcCwgc3JjPSciK2ltYWdlKyInKSJ9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHBv c2l0aW9uPSQodGhpcykuY3NzKCdwb3NpdGlvbicpO2lmKHBvc2l0aW9uIT0nYWJzb2x1dGUnJiZwb3Np dGlvbiE9J3JlbGF0aXZlJykkKHRoaXMpLmNzcygncG9zaXRpb24nLCdyZWxhdGl2ZScpO30pO319KTt9 OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fSx1bmZpeFBORzpJRT9mdW5jdGlvbigpe3JldHVybiB0aGlz LmVhY2goZnVuY3Rpb24oKXskKHRoaXMpLmNzcyh7J2ZpbHRlcic6JycsYmFja2dyb3VuZEltYWdlOicn fSk7fSk7fTpmdW5jdGlvbigpe3JldHVybiB0aGlzO30saGlkZVdoZW5FbXB0eTpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXskKHRoaXMpWyQodGhpcykuaHRtbCgpPyJzaG93IjoiaGlk ZSJdKCk7fSk7fSx1cmw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdHRyKCdocmVmJyl8fHRoaXMuYXR0 cignc3JjJyk7fX0pO2Z1bmN0aW9uIGNyZWF0ZUhlbHBlcihzZXR0aW5ncyl7aWYoaGVscGVyLnBhcmVu dClyZXR1cm47aGVscGVyLnBhcmVudD0kKCc8ZGl2IGlkPSInK3NldHRpbmdzLmlkKyciPjxoMz48L2gz PjxkaXYgY2xhc3M9ImJvZHkiPjwvZGl2PjxkaXYgY2xhc3M9InVybCI+PC9kaXY+PC9kaXY+JykuYXBw ZW5kVG8oZG9jdW1lbnQuYm9keSkuaGlkZSgpO2lmKCQuZm4uYmdpZnJhbWUpaGVscGVyLnBhcmVudC5i Z2lmcmFtZSgpO2hlbHBlci50aXRsZT0kKCdoMycsaGVscGVyLnBhcmVudCk7aGVscGVyLmJvZHk9JCgn ZGl2LmJvZHknLGhlbHBlci5wYXJlbnQpO2hlbHBlci51cmw9JCgnZGl2LnVybCcsaGVscGVyLnBhcmVu dCk7fWZ1bmN0aW9uIHNldHRpbmdzKGVsZW1lbnQpe3JldHVybiAkLmRhdGEoZWxlbWVudCwidG9vbHRp cCIpO31mdW5jdGlvbiBoYW5kbGUoZXZlbnQpe2lmKHNldHRpbmdzKHRoaXMpLmRlbGF5KXRJRD1zZXRU aW1lb3V0KHNob3csc2V0dGluZ3ModGhpcykuZGVsYXkpO2Vsc2UNCnNob3coKTt0cmFjaz0hIXNldHRp bmdzKHRoaXMpLnRyYWNrOyQoZG9jdW1lbnQuYm9keSkuYmluZCgnbW91c2Vtb3ZlJyx1cGRhdGUpO3Vw ZGF0ZShldmVudCk7fWZ1bmN0aW9uIHNhdmUoKXtpZigkLnRvb2x0aXAuYmxvY2tlZHx8dGhpcz09Y3Vy cmVudHx8KCF0aGlzLnRvb2x0aXBUZXh0JiYhc2V0dGluZ3ModGhpcykuYm9keUhhbmRsZXIpKXJldHVy bjtjdXJyZW50PXRoaXM7dGl0bGU9dGhpcy50b29sdGlwVGV4dDtpZihzZXR0aW5ncyh0aGlzKS5ib2R5 SGFuZGxlcil7aGVscGVyLnRpdGxlLmhpZGUoKTt2YXIgYm9keUNvbnRlbnQ9c2V0dGluZ3ModGhpcyku Ym9keUhhbmRsZXIuY2FsbCh0aGlzKTtpZihib2R5Q29udGVudC5ub2RlVHlwZXx8Ym9keUNvbnRlbnQu anF1ZXJ5KXtoZWxwZXIuYm9keS5lbXB0eSgpLmFwcGVuZChib2R5Q29udGVudCl9ZWxzZXtoZWxwZXIu Ym9keS5odG1sKGJvZHlDb250ZW50KTt9aGVscGVyLmJvZHkuc2hvdygpO31lbHNlIGlmKHNldHRpbmdz KHRoaXMpLnNob3dCb2R5KXt2YXIgcGFydHM9dGl0bGUuc3BsaXQoc2V0dGluZ3ModGhpcykuc2hvd0Jv ZHkpO2hlbHBlci50aXRsZS5odG1sKHBhcnRzLnNoaWZ0KCkpLnNob3coKTtoZWxwZXIuYm9keS5lbXB0 eSgpO2Zvcih2YXIgaT0wLHBhcnQ7KHBhcnQ9cGFydHNbaV0pO2krKyl7aWYoaT4wKWhlbHBlci5ib2R5 LmFwcGVuZCgiPGJyLz4iKTtoZWxwZXIuYm9keS5hcHBlbmQocGFydCk7fWhlbHBlci5ib2R5LmhpZGVX aGVuRW1wdHkoKTt9ZWxzZXtoZWxwZXIudGl0bGUuaHRtbCh0aXRsZSkuc2hvdygpO2hlbHBlci5ib2R5 LmhpZGUoKTt9aWYoc2V0dGluZ3ModGhpcykuc2hvd1VSTCYmJCh0aGlzKS51cmwoKSloZWxwZXIudXJs Lmh0bWwoJCh0aGlzKS51cmwoKS5yZXBsYWNlKCdodHRwOi8vJywnJykpLnNob3coKTtlbHNlDQpoZWxw ZXIudXJsLmhpZGUoKTtoZWxwZXIucGFyZW50LmFkZENsYXNzKHNldHRpbmdzKHRoaXMpLmV4dHJhQ2xh c3MpO2lmKHNldHRpbmdzKHRoaXMpLmZpeFBORyloZWxwZXIucGFyZW50LmZpeFBORygpO2hhbmRsZS5h cHBseSh0aGlzLGFyZ3VtZW50cyk7fWZ1bmN0aW9uIHNob3coKXt0SUQ9bnVsbDtpZigoIUlFfHwhJC5m bi5iZ2lmcmFtZSkmJnNldHRpbmdzKGN1cnJlbnQpLmZhZGUpe2lmKGhlbHBlci5wYXJlbnQuaXMoIjph bmltYXRlZCIpKWhlbHBlci5wYXJlbnQuc3RvcCgpLnNob3coKS5mYWRlVG8oc2V0dGluZ3MoY3VycmVu dCkuZmFkZSxjdXJyZW50LnRPcGFjaXR5KTtlbHNlDQpoZWxwZXIucGFyZW50LmlzKCc6dmlzaWJsZScp P2hlbHBlci5wYXJlbnQuZmFkZVRvKHNldHRpbmdzKGN1cnJlbnQpLmZhZGUsY3VycmVudC50T3BhY2l0 eSk6aGVscGVyLnBhcmVudC5mYWRlSW4oc2V0dGluZ3MoY3VycmVudCkuZmFkZSk7fWVsc2V7aGVscGVy LnBhcmVudC5zaG93KCk7fXVwZGF0ZSgpO31mdW5jdGlvbiB1cGRhdGUoZXZlbnQpe2lmKCQudG9vbHRp cC5ibG9ja2VkKXJldHVybjtpZihldmVudCYmZXZlbnQudGFyZ2V0LnRhZ05hbWU9PSJPUFRJT04iKXty ZXR1cm47fWlmKCF0cmFjayYmaGVscGVyLnBhcmVudC5pcygiOnZpc2libGUiKSl7JChkb2N1bWVudC5i b2R5KS51bmJpbmQoJ21vdXNlbW92ZScsdXBkYXRlKX1pZihjdXJyZW50PT1udWxsKXskKGRvY3VtZW50 LmJvZHkpLnVuYmluZCgnbW91c2Vtb3ZlJyx1cGRhdGUpO3JldHVybjt9aGVscGVyLnBhcmVudC5yZW1v

dmVDbGFzcygidmlld3BvcnQtcmlnaHQiKS5yZW1vdmVDbGFzcygidmlld3BvcnQtYm90dG9tIik7dmFy IGxlZnQ9aGVscGVyLnBhcmVudFswXS5vZmZzZXRMZWZ0O3ZhciB0b3A9aGVscGVyLnBhcmVudFswXS5v ZmZzZXRUb3A7aWYoZXZlbnQpe2xlZnQ9ZXZlbnQucGFnZVgrc2V0dGluZ3MoY3VycmVudCkubGVmdDt0 b3A9ZXZlbnQucGFnZVkrc2V0dGluZ3MoY3VycmVudCkudG9wO3ZhciByaWdodD0nYXV0byc7aWYoc2V0 dGluZ3MoY3VycmVudCkucG9zaXRpb25MZWZ0KXtyaWdodD0kKHdpbmRvdykud2lkdGgoKS1sZWZ0O2xl ZnQ9J2F1dG8nO31oZWxwZXIucGFyZW50LmNzcyh7bGVmdDpsZWZ0LHJpZ2h0OnJpZ2h0LHRvcDp0b3B9 KTt9dmFyIHY9dmlld3BvcnQoKSxoPWhlbHBlci5wYXJlbnRbMF07aWYodi54K3YuY3g8aC5vZmZzZXRM ZWZ0K2gub2Zmc2V0V2lkdGgpe2xlZnQtPWgub2Zmc2V0V2lkdGgrMjArc2V0dGluZ3MoY3VycmVudCku bGVmdDtoZWxwZXIucGFyZW50LmNzcyh7bGVmdDpsZWZ0KydweCd9KS5hZGRDbGFzcygidmlld3BvcnQt cmlnaHQiKTt9aWYodi55K3YuY3k8aC5vZmZzZXRUb3AraC5vZmZzZXRIZWlnaHQpe3RvcC09aC5vZmZz ZXRIZWlnaHQrMjArc2V0dGluZ3MoY3VycmVudCkudG9wO2hlbHBlci5wYXJlbnQuY3NzKHt0b3A6dG9w KydweCd9KS5hZGRDbGFzcygidmlld3BvcnQtYm90dG9tIik7fX1mdW5jdGlvbiB2aWV3cG9ydCgpe3Jl dHVybnt4OiQod2luZG93KS5zY3JvbGxMZWZ0KCkseTokKHdpbmRvdykuc2Nyb2xsVG9wKCksY3g6JCh3 aW5kb3cpLndpZHRoKCksY3k6JCh3aW5kb3cpLmhlaWdodCgpfTt9ZnVuY3Rpb24gaGlkZShldmVudCl7 aWYoJC50b29sdGlwLmJsb2NrZWQpcmV0dXJuO2lmKHRJRCljbGVhclRpbWVvdXQodElEKTtjdXJyZW50 PW51bGw7dmFyIHRzZXR0aW5ncz1zZXR0aW5ncyh0aGlzKTtmdW5jdGlvbiBjb21wbGV0ZSgpe2hlbHBl ci5wYXJlbnQucmVtb3ZlQ2xhc3ModHNldHRpbmdzLmV4dHJhQ2xhc3MpLmhpZGUoKS5jc3MoIm9wYWNp dHkiLCIiKTt9aWYoKCFJRXx8ISQuZm4uYmdpZnJhbWUpJiZ0c2V0dGluZ3MuZmFkZSl7aWYoaGVscGVy LnBhcmVudC5pcygnOmFuaW1hdGVkJykpaGVscGVyLnBhcmVudC5zdG9wKCkuZmFkZVRvKHRzZXR0aW5n cy5mYWRlLDAsY29tcGxldGUpO2Vsc2UNCmhlbHBlci5wYXJlbnQuc3RvcCgpLmZhZGVPdXQodHNldHRp bmdzLmZhZGUsY29tcGxldGUpO31lbHNlDQpjb21wbGV0ZSgpO2lmKHNldHRpbmdzKHRoaXMpLmZpeFBO RyloZWxwZXIucGFyZW50LnVuZml4UE5HKCk7fX0pKGpRdWVyeSk7 ###PACKDATA,FILE_END,/importbuddy/js/tooltip.js,importbuddy/js/tooltip.js ###PACKDATA,FILE_START,/importbuddy/js/ui.core.js,importbuddy/js/ui.core.js LyohDQogKiBqUXVlcnkgVUkgMS44LjEyDQogKg0KICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0 IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlU IG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQog Kg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSQ0KICovDQooZnVuY3Rpb24oYyxqKXtmdW5jdGlv biBrKGEpe3JldHVybiFjKGEpLnBhcmVudHMoKS5hbmRTZWxmKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0 dXJuIGMuY3VyQ1NTKHRoaXMsInZpc2liaWxpdHkiKT09PSJoaWRkZW4ifHxjLmV4cHIuZmlsdGVycy5o aWRkZW4odGhpcyl9KS5sZW5ndGh9Yy51aT1jLnVpfHx7fTtpZighYy51aS52ZXJzaW9uKXtjLmV4dGVu ZChjLnVpLHt2ZXJzaW9uOiIxLjguMTIiLGtleUNvZGU6e0FMVDoxOCxCQUNLU1BBQ0U6OCxDQVBTX0xP Q0s6MjAsQ09NTUE6MTg4LENPTU1BTkQ6OTEsQ09NTUFORF9MRUZUOjkxLENPTU1BTkRfUklHSFQ6OTMs Q09OVFJPTDoxNyxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6 MzYsSU5TRVJUOjQ1LExFRlQ6MzcsTUVOVTo5MyxOVU1QQURfQUREOjEwNyxOVU1QQURfREVDSU1BTDox MTAsTlVNUEFEX0RJVklERToxMTEsTlVNUEFEX0VOVEVSOjEwOCxOVU1QQURfTVVMVElQTFk6MTA2LA0K TlVNUEFEX1NVQlRSQUNUOjEwOSxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hU OjM5LFNISUZUOjE2LFNQQUNFOjMyLFRBQjo5LFVQOjM4LFdJTkRPV1M6OTF9fSk7Yy5mbi5leHRlbmQo e19mb2N1czpjLmZuLmZvY3VzLGZvY3VzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHR5cGVvZiBhPT09Im51 bWJlciI/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7 YyhkKS5mb2N1cygpO2ImJmIuY2FsbChkKX0sYSl9KTp0aGlzLl9mb2N1cy5hcHBseSh0aGlzLGFyZ3Vt ZW50cyl9LHNjcm9sbFBhcmVudDpmdW5jdGlvbigpe3ZhciBhO2E9Yy5icm93c2VyLm1zaWUmJi8oc3Rh dGljfHJlbGF0aXZlKS8udGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSl8fC9hYnNvbHV0ZS8udGVzdCh0 aGlzLmNzcygicG9zaXRpb24iKSk/dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJu LyhyZWxhdGl2ZXxhYnNvbHV0ZXxmaXhlZCkvLnRlc3QoYy5jdXJDU1ModGhpcywNCiJwb3NpdGlvbiIs MSkpJiYvKGF1dG98c2Nyb2xsKS8udGVzdChjLmN1ckNTUyh0aGlzLCJvdmVyZmxvdyIsMSkrYy5jdXJD U1ModGhpcywib3ZlcmZsb3cteSIsMSkrYy5jdXJDU1ModGhpcywib3ZlcmZsb3cteCIsMSkpfSkuZXEo MCk6dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuLyhhdXRvfHNjcm9sbCkvLnRl c3QoYy5jdXJDU1ModGhpcywib3ZlcmZsb3ciLDEpK2MuY3VyQ1NTKHRoaXMsIm92ZXJmbG93LXkiLDEp K2MuY3VyQ1NTKHRoaXMsIm92ZXJmbG93LXgiLDEpKX0pLmVxKDApO3JldHVybi9maXhlZC8udGVzdCh0 aGlzLmNzcygicG9zaXRpb24iKSl8fCFhLmxlbmd0aD9jKGRvY3VtZW50KTphfSx6SW5kZXg6ZnVuY3Rp b24oYSl7aWYoYSE9PWopcmV0dXJuIHRoaXMuY3NzKCJ6SW5kZXgiLGEpO2lmKHRoaXMubGVuZ3RoKXth PWModGhpc1swXSk7Zm9yKHZhciBiO2EubGVuZ3RoJiZhWzBdIT09ZG9jdW1lbnQ7KXtiPWEuY3NzKCJw b3NpdGlvbiIpOw0KaWYoYj09PSJhYnNvbHV0ZSJ8fGI9PT0icmVsYXRpdmUifHxiPT09ImZpeGVkIil7 Yj1wYXJzZUludChhLmNzcygiekluZGV4IiksMTApO2lmKCFpc05hTihiKSYmYiE9PTApcmV0dXJuIGJ9 YT1hLnBhcmVudCgpfX1yZXR1cm4gMH0sZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0 aGlzLmJpbmQoKGMuc3VwcG9ydC5zZWxlY3RzdGFydD8ic2VsZWN0c3RhcnQiOiJtb3VzZWRvd24iKSsi LnVpLWRpc2FibGVTZWxlY3Rpb24iLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKX0pfSxlbmFi bGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoIi51aS1kaXNhYmxlU2VsZWN0 aW9uIil9fSk7Yy5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQo

ZixnLGwsbSl7Yy5lYWNoKGUsZnVuY3Rpb24oKXtnLT1wYXJzZUZsb2F0KGMuY3VyQ1NTKGYsInBhZGRp bmciK3RoaXMsdHJ1ZSkpfHwwO2lmKGwpZy09cGFyc2VGbG9hdChjLmN1ckNTUyhmLA0KImJvcmRlciIr dGhpcysiV2lkdGgiLHRydWUpKXx8MDtpZihtKWctPXBhcnNlRmxvYXQoYy5jdXJDU1MoZiwibWFyZ2lu Iit0aGlzLHRydWUpKXx8MH0pO3JldHVybiBnfXZhciBlPWI9PT0iV2lkdGgiP1siTGVmdCIsIlJpZ2h0 Il06WyJUb3AiLCJCb3R0b20iXSxoPWIudG9Mb3dlckNhc2UoKSxpPXtpbm5lcldpZHRoOmMuZm4uaW5u ZXJXaWR0aCxpbm5lckhlaWdodDpjLmZuLmlubmVySGVpZ2h0LG91dGVyV2lkdGg6Yy5mbi5vdXRlcldp ZHRoLG91dGVySGVpZ2h0OmMuZm4ub3V0ZXJIZWlnaHR9O2MuZm5bImlubmVyIitiXT1mdW5jdGlvbihm KXtpZihmPT09ailyZXR1cm4gaVsiaW5uZXIiK2JdLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMuZWFjaChm dW5jdGlvbigpe2ModGhpcykuY3NzKGgsZCh0aGlzLGYpKyJweCIpfSl9O2MuZm5bIm91dGVyIitiXT1m dW5jdGlvbihmLGcpe2lmKHR5cGVvZiBmIT09Im51bWJlciIpcmV0dXJuIGlbIm91dGVyIitiXS5jYWxs KHRoaXMsZik7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2ModGhpcykuY3NzKGgsDQpkKHRoaXMs Zix0cnVlLGcpKyJweCIpfSl9fSk7Yy5leHRlbmQoYy5leHByWyI6Il0se2RhdGE6ZnVuY3Rpb24oYSxi LGQpe3JldHVybiEhYy5kYXRhKGEsZFszXSl9LGZvY3VzYWJsZTpmdW5jdGlvbihhKXt2YXIgYj1hLm5v ZGVOYW1lLnRvTG93ZXJDYXNlKCksZD1jLmF0dHIoYSwidGFiaW5kZXgiKTtpZigiYXJlYSI9PT1iKXti PWEucGFyZW50Tm9kZTtkPWIubmFtZTtpZighYS5ocmVmfHwhZHx8Yi5ub2RlTmFtZS50b0xvd2VyQ2Fz ZSgpIT09Im1hcCIpcmV0dXJuIGZhbHNlO2E9YygiaW1nW3VzZW1hcD0jIitkKyJdIilbMF07cmV0dXJu ISFhJiZrKGEpfXJldHVybigvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvLnRlc3Qo Yik/IWEuZGlzYWJsZWQ6ImEiPT1iP2EuaHJlZnx8IWlzTmFOKGQpOiFpc05hTihkKSkmJmsoYSl9LHRh YmJhYmxlOmZ1bmN0aW9uKGEpe3ZhciBiPWMuYXR0cihhLCJ0YWJpbmRleCIpO3JldHVybihpc05hTihi KXx8Yj49MCkmJmMoYSkuaXMoIjpmb2N1c2FibGUiKX19KTsNCmMoZnVuY3Rpb24oKXt2YXIgYT1kb2N1 bWVudC5ib2R5LGI9YS5hcHBlbmRDaGlsZChiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtj LmV4dGVuZChiLnN0eWxlLHttaW5IZWlnaHQ6IjEwMHB4IixoZWlnaHQ6ImF1dG8iLHBhZGRpbmc6MCxi b3JkZXJXaWR0aDowfSk7Yy5zdXBwb3J0Lm1pbkhlaWdodD1iLm9mZnNldEhlaWdodD09PTEwMDtjLnN1 cHBvcnQuc2VsZWN0c3RhcnQ9Im9uc2VsZWN0c3RhcnQiaW4gYjthLnJlbW92ZUNoaWxkKGIpLnN0eWxl LmRpc3BsYXk9Im5vbmUifSk7Yy5leHRlbmQoYy51aSx7cGx1Z2luOnthZGQ6ZnVuY3Rpb24oYSxiLGQp e2E9Yy51aVthXS5wcm90b3R5cGU7Zm9yKHZhciBlIGluIGQpe2EucGx1Z2luc1tlXT1hLnBsdWdpbnNb ZV18fFtdO2EucGx1Z2luc1tlXS5wdXNoKFtiLGRbZV1dKX19LGNhbGw6ZnVuY3Rpb24oYSxiLGQpe2lm KChiPWEucGx1Z2luc1tiXSkmJmEuZWxlbWVudFswXS5wYXJlbnROb2RlKWZvcih2YXIgZT0wO2U8Yi5s ZW5ndGg7ZSsrKWEub3B0aW9uc1tiW2VdWzBdXSYmDQpiW2VdWzFdLmFwcGx5KGEuZWxlbWVudCxkKX19 LGNvbnRhaW5zOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGRvY3VtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0 aW9uP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTY6YSE9PWImJmEuY29udGFpbnMoYil9LGhh c1Njcm9sbDpmdW5jdGlvbihhLGIpe2lmKGMoYSkuY3NzKCJvdmVyZmxvdyIpPT09ImhpZGRlbiIpcmV0 dXJuIGZhbHNlO2I9YiYmYj09PSJsZWZ0Ij8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCI7dmFyIGQ9ZmFs c2U7aWYoYVtiXT4wKXJldHVybiB0cnVlO2FbYl09MTtkPWFbYl0+MDthW2JdPTA7cmV0dXJuIGR9LGlz T3ZlckF4aXM6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBhPmImJmE8YitkfSxpc092ZXI6ZnVuY3Rpb24o YSxiLGQsZSxoLGkpe3JldHVybiBjLnVpLmlzT3ZlckF4aXMoYSxkLGgpJiZjLnVpLmlzT3ZlckF4aXMo YixlLGkpfX0pfX0pKGpRdWVyeSk7 ###PACKDATA,FILE_END,/importbuddy/js/ui.core.js,importbuddy/js/ui.core.js ###PACKDATA,FILE_START,/importbuddy/js/ui.tabs.js,importbuddy/js/ui.tabs.js LyoNCiAqIGpRdWVyeSBVSSBUYWJzIDEuOC4xMg0KICoNCiAqIENvcHlyaWdodCAyMDExLCBBVVRIT1JT LnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkNCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhl IE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLg0KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5z ZQ0KICoNCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvVGFicw0KICoNCiAqIERlcGVuZHM6DQog KglqcXVlcnkudWkuY29yZS5qcw0KICoJanF1ZXJ5LnVpLndpZGdldC5qcw0KICovDQooZnVuY3Rpb24o ZCxwKXtmdW5jdGlvbiB1KCl7cmV0dXJuKyt2fWZ1bmN0aW9uIHcoKXtyZXR1cm4rK3h9dmFyIHY9MCx4 PTA7ZC53aWRnZXQoInVpLnRhYnMiLHtvcHRpb25zOnthZGQ6bnVsbCxhamF4T3B0aW9uczpudWxsLGNh Y2hlOmZhbHNlLGNvb2tpZTpudWxsLGNvbGxhcHNpYmxlOmZhbHNlLGRpc2FibGU6bnVsbCxkaXNhYmxl ZDpbXSxlbmFibGU6bnVsbCxldmVudDoiY2xpY2siLGZ4Om51bGwsaWRQcmVmaXg6InVpLXRhYnMtIixs b2FkOm51bGwscGFuZWxUZW1wbGF0ZToiPGRpdj48L2Rpdj4iLHJlbW92ZTpudWxsLHNlbGVjdDpudWxs LHNob3c6bnVsbCxzcGlubmVyOiI8ZW0+TG9hZGluZyYjODIzMDs8L2VtPiIsdGFiVGVtcGxhdGU6Ijxs aT48YSBocmVmPScje2hyZWZ9Jz48c3Bhbj4je2xhYmVsfTwvc3Bhbj48L2E+PC9saT4ifSxfY3JlYXRl OmZ1bmN0aW9uKCl7dGhpcy5fdGFiaWZ5KHRydWUpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGIsZSl7aWYo Yj09InNlbGVjdGVkIil0aGlzLm9wdGlvbnMuY29sbGFwc2libGUmJg0KZT09dGhpcy5vcHRpb25zLnNl bGVjdGVkfHx0aGlzLnNlbGVjdChlKTtlbHNle3RoaXMub3B0aW9uc1tiXT1lO3RoaXMuX3RhYmlmeSgp fX0sX3RhYklkOmZ1bmN0aW9uKGIpe3JldHVybiBiLnRpdGxlJiZiLnRpdGxlLnJlcGxhY2UoL1xzL2cs Il8iKS5yZXBsYWNlKC9bXlx3XHUwMGMwLVx1RkZGRi1dL2csIiIpfHx0aGlzLm9wdGlvbnMuaWRQcmVm aXgrdSgpfSxfc2FuaXRpemVTZWxlY3RvcjpmdW5jdGlvbihiKXtyZXR1cm4gYi5yZXBsYWNlKC86L2cs IlxcOiIpfSxfY29va2llOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5jb29raWV8fCh0aGlzLmNvb2tpZT10 aGlzLm9wdGlvbnMuY29va2llLm5hbWV8fCJ1aS10YWJzLSIrdygpKTtyZXR1cm4gZC5jb29raWUuYXBw bHkobnVsbCxbYl0uY29uY2F0KGQubWFrZUFycmF5KGFyZ3VtZW50cykpKX0sX3VpOmZ1bmN0aW9uKGIs

ZSl7cmV0dXJue3RhYjpiLHBhbmVsOmUsaW5kZXg6dGhpcy5hbmNob3JzLmluZGV4KGIpfX0sX2NsZWFu dXA6ZnVuY3Rpb24oKXt0aGlzLmxpcy5maWx0ZXIoIi51aS1zdGF0ZS1wcm9jZXNzaW5nIikucmVtb3Zl Q2xhc3MoInVpLXN0YXRlLXByb2Nlc3NpbmciKS5maW5kKCJzcGFuOmRhdGEobGFiZWwudGFicykiKS5l YWNoKGZ1bmN0aW9uKCl7dmFyIGI9DQpkKHRoaXMpO2IuaHRtbChiLmRhdGEoImxhYmVsLnRhYnMiKSku cmVtb3ZlRGF0YSgibGFiZWwudGFicyIpfSl9LF90YWJpZnk6ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZShn LGYpe2cuY3NzKCJkaXNwbGF5IiwiIik7IWQuc3VwcG9ydC5vcGFjaXR5JiZmLm9wYWNpdHkmJmdbMF0u c3R5bGUucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKX12YXIgYT10aGlzLGM9dGhpcy5vcHRpb25zLGg9 L14jLisvO3RoaXMubGlzdD10aGlzLmVsZW1lbnQuZmluZCgib2wsdWwiKS5lcSgwKTt0aGlzLmxpcz1k KCIgPiBsaTpoYXMoYVtocmVmXSkiLHRoaXMubGlzdCk7dGhpcy5hbmNob3JzPXRoaXMubGlzLm1hcChm dW5jdGlvbigpe3JldHVybiBkKCJhIix0aGlzKVswXX0pO3RoaXMucGFuZWxzPWQoW10pO3RoaXMuYW5j aG9ycy5lYWNoKGZ1bmN0aW9uKGcsZil7dmFyIGk9ZChmKS5hdHRyKCJocmVmIiksbD1pLnNwbGl0KCIj IilbMF0scTtpZihsJiYobD09PWxvY2F0aW9uLnRvU3RyaW5nKCkuc3BsaXQoIiMiKVswXXx8DQoocT1k KCJiYXNlIilbMF0pJiZsPT09cS5ocmVmKSl7aT1mLmhhc2g7Zi5ocmVmPWl9aWYoaC50ZXN0KGkpKWEu cGFuZWxzPWEucGFuZWxzLmFkZChhLmVsZW1lbnQuZmluZChhLl9zYW5pdGl6ZVNlbGVjdG9yKGkpKSk7 ZWxzZSBpZihpJiZpIT09IiMiKXtkLmRhdGEoZiwiaHJlZi50YWJzIixpKTtkLmRhdGEoZiwibG9hZC50 YWJzIixpLnJlcGxhY2UoLyMuKiQvLCIiKSk7aT1hLl90YWJJZChmKTtmLmhyZWY9IiMiK2k7Zj1hLmVs ZW1lbnQuZmluZCgiIyIraSk7aWYoIWYubGVuZ3RoKXtmPWQoYy5wYW5lbFRlbXBsYXRlKS5hdHRyKCJp ZCIsaSkuYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJv dHRvbSIpLmluc2VydEFmdGVyKGEucGFuZWxzW2ctMV18fGEubGlzdCk7Zi5kYXRhKCJkZXN0cm95LnRh YnMiLHRydWUpfWEucGFuZWxzPWEucGFuZWxzLmFkZChmKX1lbHNlIGMuZGlzYWJsZWQucHVzaChnKX0p O2lmKGIpe3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktdGFicyB1aS13aWRnZXQgdWktd2lkZ2V0LWNv bnRlbnQgdWktY29ybmVyLWFsbCIpOw0KdGhpcy5saXN0LmFkZENsYXNzKCJ1aS10YWJzLW5hdiB1aS1o ZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFs bCIpO3RoaXMubGlzLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AiKTt0aGlz LnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXIt Ym90dG9tIik7aWYoYy5zZWxlY3RlZD09PXApe2xvY2F0aW9uLmhhc2gmJnRoaXMuYW5jaG9ycy5lYWNo KGZ1bmN0aW9uKGcsZil7aWYoZi5oYXNoPT1sb2NhdGlvbi5oYXNoKXtjLnNlbGVjdGVkPWc7cmV0dXJu IGZhbHNlfX0pO2lmKHR5cGVvZiBjLnNlbGVjdGVkIT09Im51bWJlciImJmMuY29va2llKWMuc2VsZWN0 ZWQ9cGFyc2VJbnQoYS5fY29va2llKCksMTApO2lmKHR5cGVvZiBjLnNlbGVjdGVkIT09Im51bWJlciIm JnRoaXMubGlzLmZpbHRlcigiLnVpLXRhYnMtc2VsZWN0ZWQiKS5sZW5ndGgpYy5zZWxlY3RlZD0NCnRo aXMubGlzLmluZGV4KHRoaXMubGlzLmZpbHRlcigiLnVpLXRhYnMtc2VsZWN0ZWQiKSk7Yy5zZWxlY3Rl ZD1jLnNlbGVjdGVkfHwodGhpcy5saXMubGVuZ3RoPzA6LTEpfWVsc2UgaWYoYy5zZWxlY3RlZD09PW51 bGwpYy5zZWxlY3RlZD0tMTtjLnNlbGVjdGVkPWMuc2VsZWN0ZWQ+PTAmJnRoaXMuYW5jaG9yc1tjLnNl bGVjdGVkXXx8Yy5zZWxlY3RlZDwwP2Muc2VsZWN0ZWQ6MDtjLmRpc2FibGVkPWQudW5pcXVlKGMuZGlz YWJsZWQuY29uY2F0KGQubWFwKHRoaXMubGlzLmZpbHRlcigiLnVpLXN0YXRlLWRpc2FibGVkIiksZnVu Y3Rpb24oZyl7cmV0dXJuIGEubGlzLmluZGV4KGcpfSkpKS5zb3J0KCk7ZC5pbkFycmF5KGMuc2VsZWN0 ZWQsYy5kaXNhYmxlZCkhPS0xJiZjLmRpc2FibGVkLnNwbGljZShkLmluQXJyYXkoYy5zZWxlY3RlZCxj LmRpc2FibGVkKSwxKTt0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1oaWRlIik7dGhpcy5saXMu cmVtb3ZlQ2xhc3MoInVpLXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlIik7DQppZihjLnNlbGVj dGVkPj0wJiZ0aGlzLmFuY2hvcnMubGVuZ3RoKXthLmVsZW1lbnQuZmluZChhLl9zYW5pdGl6ZVNlbGVj dG9yKGEuYW5jaG9yc1tjLnNlbGVjdGVkXS5oYXNoKSkucmVtb3ZlQ2xhc3MoInVpLXRhYnMtaGlkZSIp O3RoaXMubGlzLmVxKGMuc2VsZWN0ZWQpLmFkZENsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIHVpLXN0YXRl LWFjdGl2ZSIpO2EuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXthLl90cmlnZ2VyKCJzaG93 IixudWxsLGEuX3VpKGEuYW5jaG9yc1tjLnNlbGVjdGVkXSxhLmVsZW1lbnQuZmluZChhLl9zYW5pdGl6 ZVNlbGVjdG9yKGEuYW5jaG9yc1tjLnNlbGVjdGVkXS5oYXNoKSlbMF0pKX0pO3RoaXMubG9hZChjLnNl bGVjdGVkKX1kKHdpbmRvdykuYmluZCgidW5sb2FkIixmdW5jdGlvbigpe2EubGlzLmFkZChhLmFuY2hv cnMpLnVuYmluZCgiLnRhYnMiKTthLmxpcz1hLmFuY2hvcnM9YS5wYW5lbHM9bnVsbH0pfWVsc2UgYy5z ZWxlY3RlZD10aGlzLmxpcy5pbmRleCh0aGlzLmxpcy5maWx0ZXIoIi51aS10YWJzLXNlbGVjdGVkIikp Ow0KdGhpcy5lbGVtZW50W2MuY29sbGFwc2libGU/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgidWkt dGFicy1jb2xsYXBzaWJsZSIpO2MuY29va2llJiZ0aGlzLl9jb29raWUoYy5zZWxlY3RlZCxjLmNvb2tp ZSk7Yj0wO2Zvcih2YXIgajtqPXRoaXMubGlzW2JdO2IrKylkKGopW2QuaW5BcnJheShiLGMuZGlzYWJs ZWQpIT0tMSYmIWQoaikuaGFzQ2xhc3MoInVpLXRhYnMtc2VsZWN0ZWQiKT8iYWRkQ2xhc3MiOiJyZW1v dmVDbGFzcyJdKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpO2MuY2FjaGU9PT1mYWxzZSYmdGhpcy5hbmNob3Jz LnJlbW92ZURhdGEoImNhY2hlLnRhYnMiKTt0aGlzLmxpcy5hZGQodGhpcy5hbmNob3JzKS51bmJpbmQo Ii50YWJzIik7aWYoYy5ldmVudCE9PSJtb3VzZW92ZXIiKXt2YXIgaz1mdW5jdGlvbihnLGYpe2YuaXMo Ijpub3QoLnVpLXN0YXRlLWRpc2FibGVkKSIpJiZmLmFkZENsYXNzKCJ1aS1zdGF0ZS0iK2cpfSxuPWZ1 bmN0aW9uKGcsZil7Zi5yZW1vdmVDbGFzcygidWktc3RhdGUtIisNCmcpfTt0aGlzLmxpcy5iaW5kKCJt b3VzZW92ZXIudGFicyIsZnVuY3Rpb24oKXtrKCJob3ZlciIsZCh0aGlzKSl9KTt0aGlzLmxpcy5iaW5k KCJtb3VzZW91dC50YWJzIixmdW5jdGlvbigpe24oImhvdmVyIixkKHRoaXMpKX0pO3RoaXMuYW5jaG9y cy5iaW5kKCJmb2N1cy50YWJzIixmdW5jdGlvbigpe2soImZvY3VzIixkKHRoaXMpLmNsb3Nlc3QoImxp

IikpfSk7dGhpcy5hbmNob3JzLmJpbmQoImJsdXIudGFicyIsZnVuY3Rpb24oKXtuKCJmb2N1cyIsZCh0 aGlzKS5jbG9zZXN0KCJsaSIpKX0pfXZhciBtLG87aWYoYy5meClpZihkLmlzQXJyYXkoYy5meCkpe209 Yy5meFswXTtvPWMuZnhbMV19ZWxzZSBtPW89Yy5meDt2YXIgcj1vP2Z1bmN0aW9uKGcsZil7ZChnKS5j bG9zZXN0KCJsaSIpLmFkZENsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIHVpLXN0YXRlLWFjdGl2ZSIpO2Yu aGlkZSgpLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWhpZGUiKS5hbmltYXRlKG8sby5kdXJhdGlvbnx8Im5v cm1hbCIsDQpmdW5jdGlvbigpe2UoZixvKTthLl90cmlnZ2VyKCJzaG93IixudWxsLGEuX3VpKGcsZlsw XSkpfSl9OmZ1bmN0aW9uKGcsZil7ZChnKS5jbG9zZXN0KCJsaSIpLmFkZENsYXNzKCJ1aS10YWJzLXNl bGVjdGVkIHVpLXN0YXRlLWFjdGl2ZSIpO2YucmVtb3ZlQ2xhc3MoInVpLXRhYnMtaGlkZSIpO2EuX3Ry aWdnZXIoInNob3ciLG51bGwsYS5fdWkoZyxmWzBdKSl9LHM9bT9mdW5jdGlvbihnLGYpe2YuYW5pbWF0 ZShtLG0uZHVyYXRpb258fCJub3JtYWwiLGZ1bmN0aW9uKCl7YS5saXMucmVtb3ZlQ2xhc3MoInVpLXRh YnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlIik7Zi5hZGRDbGFzcygidWktdGFicy1oaWRlIik7ZShm LG0pO2EuZWxlbWVudC5kZXF1ZXVlKCJ0YWJzIil9KX06ZnVuY3Rpb24oZyxmKXthLmxpcy5yZW1vdmVD bGFzcygidWktdGFicy1zZWxlY3RlZCB1aS1zdGF0ZS1hY3RpdmUiKTtmLmFkZENsYXNzKCJ1aS10YWJz LWhpZGUiKTthLmVsZW1lbnQuZGVxdWV1ZSgidGFicyIpfTsNCnRoaXMuYW5jaG9ycy5iaW5kKGMuZXZl bnQrIi50YWJzIixmdW5jdGlvbigpe3ZhciBnPXRoaXMsZj1kKGcpLmNsb3Nlc3QoImxpIiksaT1hLnBh bmVscy5maWx0ZXIoIjpub3QoLnVpLXRhYnMtaGlkZSkiKSxsPWEuZWxlbWVudC5maW5kKGEuX3Nhbml0 aXplU2VsZWN0b3IoZy5oYXNoKSk7aWYoZi5oYXNDbGFzcygidWktdGFicy1zZWxlY3RlZCIpJiYhYy5j b2xsYXBzaWJsZXx8Zi5oYXNDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKXx8Zi5oYXNDbGFzcygidWkt c3RhdGUtcHJvY2Vzc2luZyIpfHxhLnBhbmVscy5maWx0ZXIoIjphbmltYXRlZCIpLmxlbmd0aHx8YS5f dHJpZ2dlcigic2VsZWN0IixudWxsLGEuX3VpKHRoaXMsbFswXSkpPT09ZmFsc2Upe3RoaXMuYmx1cigp O3JldHVybiBmYWxzZX1jLnNlbGVjdGVkPWEuYW5jaG9ycy5pbmRleCh0aGlzKTthLmFib3J0KCk7aWYo Yy5jb2xsYXBzaWJsZSlpZihmLmhhc0NsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIikpe2Muc2VsZWN0ZWQ9 DQotMTtjLmNvb2tpZSYmYS5fY29va2llKGMuc2VsZWN0ZWQsYy5jb29raWUpO2EuZWxlbWVudC5xdWV1 ZSgidGFicyIsZnVuY3Rpb24oKXtzKGcsaSl9KS5kZXF1ZXVlKCJ0YWJzIik7dGhpcy5ibHVyKCk7cmV0 dXJuIGZhbHNlfWVsc2UgaWYoIWkubGVuZ3RoKXtjLmNvb2tpZSYmYS5fY29va2llKGMuc2VsZWN0ZWQs Yy5jb29raWUpO2EuZWxlbWVudC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtyKGcsbCl9KTthLmxvYWQo YS5hbmNob3JzLmluZGV4KHRoaXMpKTt0aGlzLmJsdXIoKTtyZXR1cm4gZmFsc2V9Yy5jb29raWUmJmEu X2Nvb2tpZShjLnNlbGVjdGVkLGMuY29va2llKTtpZihsLmxlbmd0aCl7aS5sZW5ndGgmJmEuZWxlbWVu dC5xdWV1ZSgidGFicyIsZnVuY3Rpb24oKXtzKGcsaSl9KTthLmVsZW1lbnQucXVldWUoInRhYnMiLGZ1 bmN0aW9uKCl7cihnLGwpfSk7YS5sb2FkKGEuYW5jaG9ycy5pbmRleCh0aGlzKSl9ZWxzZSB0aHJvdyJq UXVlcnkgVUkgVGFiczogTWlzbWF0Y2hpbmcgZnJhZ21lbnQgaWRlbnRpZmllci4iOw0KZC5icm93c2Vy Lm1zaWUmJnRoaXMuYmx1cigpfSk7dGhpcy5hbmNob3JzLmJpbmQoImNsaWNrLnRhYnMiLGZ1bmN0aW9u KCl7cmV0dXJuIGZhbHNlfSl9LF9nZXRJbmRleDpmdW5jdGlvbihiKXtpZih0eXBlb2YgYj09InN0cmlu ZyIpYj10aGlzLmFuY2hvcnMuaW5kZXgodGhpcy5hbmNob3JzLmZpbHRlcigiW2hyZWYkPSIrYisiXSIp KTtyZXR1cm4gYn0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9uczt0aGlzLmFib3J0 KCk7dGhpcy5lbGVtZW50LnVuYmluZCgiLnRhYnMiKS5yZW1vdmVDbGFzcygidWktdGFicyB1aS13aWRn ZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS10YWJzLWNvbGxhcHNpYmxlIikucmVt b3ZlRGF0YSgidGFicyIpO3RoaXMubGlzdC5yZW1vdmVDbGFzcygidWktdGFicy1uYXYgdWktaGVscGVy LXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKTt0 aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlvbigpe3ZhciBlPQ0KZC5kYXRhKHRoaXMsImhyZWYudGFicyIp O2lmKGUpdGhpcy5ocmVmPWU7dmFyIGE9ZCh0aGlzKS51bmJpbmQoIi50YWJzIik7ZC5lYWNoKFsiaHJl ZiIsImxvYWQiLCJjYWNoZSJdLGZ1bmN0aW9uKGMsaCl7YS5yZW1vdmVEYXRhKGgrIi50YWJzIil9KX0p O3RoaXMubGlzLnVuYmluZCgiLnRhYnMiKS5hZGQodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtk LmRhdGEodGhpcywiZGVzdHJveS50YWJzIik/ZCh0aGlzKS5yZW1vdmUoKTpkKHRoaXMpLnJlbW92ZUNs YXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AgdWktdGFicy1zZWxlY3RlZCB1aS1zdGF0 ZS1hY3RpdmUgdWktc3RhdGUtaG92ZXIgdWktc3RhdGUtZm9jdXMgdWktc3RhdGUtZGlzYWJsZWQgdWkt dGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIHVpLXRhYnMtaGlkZSIp fSk7Yi5jb29raWUmJnRoaXMuX2Nvb2tpZShudWxsLGIuY29va2llKTtyZXR1cm4gdGhpc30sYWRkOmZ1 bmN0aW9uKGIsDQplLGEpe2lmKGE9PT1wKWE9dGhpcy5hbmNob3JzLmxlbmd0aDt2YXIgYz10aGlzLGg9 dGhpcy5vcHRpb25zO2U9ZChoLnRhYlRlbXBsYXRlLnJlcGxhY2UoLyNce2hyZWZcfS9nLGIpLnJlcGxh Y2UoLyNce2xhYmVsXH0vZyxlKSk7Yj0hYi5pbmRleE9mKCIjIik/Yi5yZXBsYWNlKCIjIiwiIik6dGhp cy5fdGFiSWQoZCgiYSIsZSlbMF0pO2UuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVy LXRvcCIpLmRhdGEoImRlc3Ryb3kudGFicyIsdHJ1ZSk7dmFyIGo9Yy5lbGVtZW50LmZpbmQoIiMiK2Ip O2oubGVuZ3RofHwoaj1kKGgucGFuZWxUZW1wbGF0ZSkuYXR0cigiaWQiLGIpLmRhdGEoImRlc3Ryb3ku dGFicyIsdHJ1ZSkpO2ouYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWkt Y29ybmVyLWJvdHRvbSB1aS10YWJzLWhpZGUiKTtpZihhPj10aGlzLmxpcy5sZW5ndGgpe2UuYXBwZW5k VG8odGhpcy5saXN0KTtqLmFwcGVuZFRvKHRoaXMubGlzdFswXS5wYXJlbnROb2RlKX1lbHNle2UuaW5z ZXJ0QmVmb3JlKHRoaXMubGlzW2FdKTsNCmouaW5zZXJ0QmVmb3JlKHRoaXMucGFuZWxzW2FdKX1oLmRp c2FibGVkPWQubWFwKGguZGlzYWJsZWQsZnVuY3Rpb24oayl7cmV0dXJuIGs+PWE/KytrOmt9KTt0aGlz Ll90YWJpZnkoKTtpZih0aGlzLmFuY2hvcnMubGVuZ3RoPT0xKXtoLnNlbGVjdGVkPTA7ZS5hZGRDbGFz

cygidWktdGFicy1zZWxlY3RlZCB1aS1zdGF0ZS1hY3RpdmUiKTtqLnJlbW92ZUNsYXNzKCJ1aS10YWJz LWhpZGUiKTt0aGlzLmVsZW1lbnQucXVldWUoInRhYnMiLGZ1bmN0aW9uKCl7Yy5fdHJpZ2dlcigic2hv dyIsbnVsbCxjLl91aShjLmFuY2hvcnNbMF0sYy5wYW5lbHNbMF0pKX0pO3RoaXMubG9hZCgwKX10aGlz Ll90cmlnZ2VyKCJhZGQiLG51bGwsdGhpcy5fdWkodGhpcy5hbmNob3JzW2FdLHRoaXMucGFuZWxzW2Fd KSk7cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbihiKXtiPXRoaXMuX2dldEluZGV4KGIpO3ZhciBl PXRoaXMub3B0aW9ucyxhPXRoaXMubGlzLmVxKGIpLnJlbW92ZSgpLGM9dGhpcy5wYW5lbHMuZXEoYiku cmVtb3ZlKCk7DQppZihhLmhhc0NsYXNzKCJ1aS10YWJzLXNlbGVjdGVkIikmJnRoaXMuYW5jaG9ycy5s ZW5ndGg+MSl0aGlzLnNlbGVjdChiKyhiKzE8dGhpcy5hbmNob3JzLmxlbmd0aD8xOi0xKSk7ZS5kaXNh YmxlZD1kLm1hcChkLmdyZXAoZS5kaXNhYmxlZCxmdW5jdGlvbihoKXtyZXR1cm4gaCE9Yn0pLGZ1bmN0 aW9uKGgpe3JldHVybiBoPj1iPy0taDpofSk7dGhpcy5fdGFiaWZ5KCk7dGhpcy5fdHJpZ2dlcigicmVt b3ZlIixudWxsLHRoaXMuX3VpKGEuZmluZCgiYSIpWzBdLGNbMF0pKTtyZXR1cm4gdGhpc30sZW5hYmxl OmZ1bmN0aW9uKGIpe2I9dGhpcy5fZ2V0SW5kZXgoYik7dmFyIGU9dGhpcy5vcHRpb25zO2lmKGQuaW5B cnJheShiLGUuZGlzYWJsZWQpIT0tMSl7dGhpcy5saXMuZXEoYikucmVtb3ZlQ2xhc3MoInVpLXN0YXRl LWRpc2FibGVkIik7ZS5kaXNhYmxlZD1kLmdyZXAoZS5kaXNhYmxlZCxmdW5jdGlvbihhKXtyZXR1cm4g YSE9Yn0pO3RoaXMuX3RyaWdnZXIoImVuYWJsZSIsbnVsbCwNCnRoaXMuX3VpKHRoaXMuYW5jaG9yc1ti XSx0aGlzLnBhbmVsc1tiXSkpO3JldHVybiB0aGlzfX0sZGlzYWJsZTpmdW5jdGlvbihiKXtiPXRoaXMu X2dldEluZGV4KGIpO3ZhciBlPXRoaXMub3B0aW9ucztpZihiIT1lLnNlbGVjdGVkKXt0aGlzLmxpcy5l cShiKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKTtlLmRpc2FibGVkLnB1c2goYik7ZS5kaXNh YmxlZC5zb3J0KCk7dGhpcy5fdHJpZ2dlcigiZGlzYWJsZSIsbnVsbCx0aGlzLl91aSh0aGlzLmFuY2hv cnNbYl0sdGhpcy5wYW5lbHNbYl0pKX1yZXR1cm4gdGhpc30sc2VsZWN0OmZ1bmN0aW9uKGIpe2I9dGhp cy5fZ2V0SW5kZXgoYik7aWYoYj09LTEpaWYodGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlJiZ0aGlzLm9w dGlvbnMuc2VsZWN0ZWQhPS0xKWI9dGhpcy5vcHRpb25zLnNlbGVjdGVkO2Vsc2UgcmV0dXJuIHRoaXM7 dGhpcy5hbmNob3JzLmVxKGIpLnRyaWdnZXIodGhpcy5vcHRpb25zLmV2ZW50KyIudGFicyIpO3JldHVy biB0aGlzfSwNCmxvYWQ6ZnVuY3Rpb24oYil7Yj10aGlzLl9nZXRJbmRleChiKTt2YXIgZT10aGlzLGE9 dGhpcy5vcHRpb25zLGM9dGhpcy5hbmNob3JzLmVxKGIpWzBdLGg9ZC5kYXRhKGMsImxvYWQudGFicyIp O3RoaXMuYWJvcnQoKTtpZighaHx8dGhpcy5lbGVtZW50LnF1ZXVlKCJ0YWJzIikubGVuZ3RoIT09MCYm ZC5kYXRhKGMsImNhY2hlLnRhYnMiKSl0aGlzLmVsZW1lbnQuZGVxdWV1ZSgidGFicyIpO2Vsc2V7dGhp cy5saXMuZXEoYikuYWRkQ2xhc3MoInVpLXN0YXRlLXByb2Nlc3NpbmciKTtpZihhLnNwaW5uZXIpe3Zh ciBqPWQoInNwYW4iLGMpO2ouZGF0YSgibGFiZWwudGFicyIsai5odG1sKCkpLmh0bWwoYS5zcGlubmVy KX10aGlzLnhocj1kLmFqYXgoZC5leHRlbmQoe30sYS5hamF4T3B0aW9ucyx7dXJsOmgsc3VjY2Vzczpm dW5jdGlvbihrLG4pe2UuZWxlbWVudC5maW5kKGUuX3Nhbml0aXplU2VsZWN0b3IoYy5oYXNoKSkuaHRt bChrKTtlLl9jbGVhbnVwKCk7YS5jYWNoZSYmZC5kYXRhKGMsDQoiY2FjaGUudGFicyIsdHJ1ZSk7ZS5f dHJpZ2dlcigibG9hZCIsbnVsbCxlLl91aShlLmFuY2hvcnNbYl0sZS5wYW5lbHNbYl0pKTt0cnl7YS5h amF4T3B0aW9ucy5zdWNjZXNzKGssbil9Y2F0Y2gobSl7fX0sZXJyb3I6ZnVuY3Rpb24oayxuKXtlLl9j bGVhbnVwKCk7ZS5fdHJpZ2dlcigibG9hZCIsbnVsbCxlLl91aShlLmFuY2hvcnNbYl0sZS5wYW5lbHNb Yl0pKTt0cnl7YS5hamF4T3B0aW9ucy5lcnJvcihrLG4sYixjKX1jYXRjaChtKXt9fX0pKTtlLmVsZW1l bnQuZGVxdWV1ZSgidGFicyIpO3JldHVybiB0aGlzfX0sYWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1l bnQucXVldWUoW10pO3RoaXMucGFuZWxzLnN0b3AoZmFsc2UsdHJ1ZSk7dGhpcy5lbGVtZW50LnF1ZXVl KCJ0YWJzIix0aGlzLmVsZW1lbnQucXVldWUoInRhYnMiKS5zcGxpY2UoLTIsMikpO2lmKHRoaXMueGhy KXt0aGlzLnhoci5hYm9ydCgpO2RlbGV0ZSB0aGlzLnhocn10aGlzLl9jbGVhbnVwKCk7cmV0dXJuIHRo aXN9LA0KdXJsOmZ1bmN0aW9uKGIsZSl7dGhpcy5hbmNob3JzLmVxKGIpLnJlbW92ZURhdGEoImNhY2hl LnRhYnMiKS5kYXRhKCJsb2FkLnRhYnMiLGUpO3JldHVybiB0aGlzfSxsZW5ndGg6ZnVuY3Rpb24oKXty ZXR1cm4gdGhpcy5hbmNob3JzLmxlbmd0aH19KTtkLmV4dGVuZChkLnVpLnRhYnMse3ZlcnNpb246IjEu OC4xMiJ9KTtkLmV4dGVuZChkLnVpLnRhYnMucHJvdG90eXBlLHtyb3RhdGlvbjpudWxsLHJvdGF0ZTpm dW5jdGlvbihiLGUpe3ZhciBhPXRoaXMsYz10aGlzLm9wdGlvbnMsaD1hLl9yb3RhdGV8fChhLl9yb3Rh dGU9ZnVuY3Rpb24oail7Y2xlYXJUaW1lb3V0KGEucm90YXRpb24pO2Eucm90YXRpb249c2V0VGltZW91 dChmdW5jdGlvbigpe3ZhciBrPWMuc2VsZWN0ZWQ7YS5zZWxlY3QoKytrPGEuYW5jaG9ycy5sZW5ndGg/ azowKX0sYik7aiYmai5zdG9wUHJvcGFnYXRpb24oKX0pO2U9YS5fdW5yb3RhdGV8fChhLl91bnJvdGF0 ZT0hZT9mdW5jdGlvbihqKXtqLmNsaWVudFgmJg0KYS5yb3RhdGUobnVsbCl9OmZ1bmN0aW9uKCl7dD1j LnNlbGVjdGVkO2goKX0pO2lmKGIpe3RoaXMuZWxlbWVudC5iaW5kKCJ0YWJzc2hvdyIsaCk7dGhpcy5h bmNob3JzLmJpbmQoYy5ldmVudCsiLnRhYnMiLGUpO2goKX1lbHNle2NsZWFyVGltZW91dChhLnJvdGF0 aW9uKTt0aGlzLmVsZW1lbnQudW5iaW5kKCJ0YWJzc2hvdyIsaCk7dGhpcy5hbmNob3JzLnVuYmluZChj LmV2ZW50KyIudGFicyIsZSk7ZGVsZXRlIHRoaXMuX3JvdGF0ZTtkZWxldGUgdGhpcy5fdW5yb3RhdGV9 cmV0dXJuIHRoaXN9fSl9KShqUXVlcnkpOw== ###PACKDATA,FILE_END,/importbuddy/js/ui.tabs.js,importbuddy/js/ui.tabs.js ###PACKDATA,FILE_START,/importbuddy/js/ui.widget.js,importbuddy/js/ui.widget.js LyohDQogKiBqUXVlcnkgVUkgV2lkZ2V0IDEuOC4xMg0KICoNCiAqIENvcHlyaWdodCAyMDExLCBBVVRI T1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkNCiAqIER1YWwgbGljZW5zZWQgdW5kZXIg dGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLg0KICogaHR0cDovL2pxdWVyeS5vcmcvbGlj ZW5zZQ0KICoNCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvV2lkZ2V0DQogKi8NCihmdW5jdGlv

bihiLGope2lmKGIuY2xlYW5EYXRhKXt2YXIgaz1iLmNsZWFuRGF0YTtiLmNsZWFuRGF0YT1mdW5jdGlv bihhKXtmb3IodmFyIGM9MCxkOyhkPWFbY10pIT1udWxsO2MrKyliKGQpLnRyaWdnZXJIYW5kbGVyKCJy ZW1vdmUiKTtrKGEpfX1lbHNle3ZhciBsPWIuZm4ucmVtb3ZlO2IuZm4ucmVtb3ZlPWZ1bmN0aW9uKGEs Yyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCFjKWlmKCFhfHxiLmZpbHRlcihhLFt0aGlz XSkubGVuZ3RoKWIoIioiLHRoaXMpLmFkZChbdGhpc10pLmVhY2goZnVuY3Rpb24oKXtiKHRoaXMpLnRy aWdnZXJIYW5kbGVyKCJyZW1vdmUiKX0pO3JldHVybiBsLmNhbGwoYih0aGlzKSxhLGMpfSl9fWIud2lk Z2V0PWZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1hLnNwbGl0KCIuIilbMF0sZjthPWEuc3BsaXQoIi4iKVsx XTtmPWUrIi0iK2E7aWYoIWQpe2Q9YztjPWIuV2lkZ2V0fWIuZXhwclsiOiJdW2ZdPWZ1bmN0aW9uKGgp e3JldHVybiEhYi5kYXRhKGgsDQphKX07YltlXT1iW2VdfHx7fTtiW2VdW2FdPWZ1bmN0aW9uKGgsZyl7 YXJndW1lbnRzLmxlbmd0aCYmdGhpcy5fY3JlYXRlV2lkZ2V0KGgsZyl9O2M9bmV3IGM7Yy5vcHRpb25z PWIuZXh0ZW5kKHRydWUse30sYy5vcHRpb25zKTtiW2VdW2FdLnByb3RvdHlwZT1iLmV4dGVuZCh0cnVl LGMse25hbWVzcGFjZTplLHdpZGdldE5hbWU6YSx3aWRnZXRFdmVudFByZWZpeDpiW2VdW2FdLnByb3Rv dHlwZS53aWRnZXRFdmVudFByZWZpeHx8YSx3aWRnZXRCYXNlQ2xhc3M6Zn0sZCk7Yi53aWRnZXQuYnJp ZGdlKGEsYltlXVthXSl9O2Iud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbihhLGMpe2IuZm5bYV09ZnVuY3Rp b24oZCl7dmFyIGU9dHlwZW9mIGQ9PT0ic3RyaW5nIixmPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs KGFyZ3VtZW50cywxKSxoPXRoaXM7ZD0hZSYmZi5sZW5ndGg/Yi5leHRlbmQuYXBwbHkobnVsbCxbdHJ1 ZSxkXS5jb25jYXQoZikpOmQ7aWYoZSYmZC5jaGFyQXQoMCk9PT0iXyIpcmV0dXJuIGg7DQplP3RoaXMu ZWFjaChmdW5jdGlvbigpe3ZhciBnPWIuZGF0YSh0aGlzLGEpLGk9ZyYmYi5pc0Z1bmN0aW9uKGdbZF0p P2dbZF0uYXBwbHkoZyxmKTpnO2lmKGkhPT1nJiZpIT09ail7aD1pO3JldHVybiBmYWxzZX19KTp0aGlz LmVhY2goZnVuY3Rpb24oKXt2YXIgZz1iLmRhdGEodGhpcyxhKTtnP2cub3B0aW9uKGR8fHt9KS5faW5p dCgpOmIuZGF0YSh0aGlzLGEsbmV3IGMoZCx0aGlzKSl9KTtyZXR1cm4gaH19O2IuV2lkZ2V0PWZ1bmN0 aW9uKGEsYyl7YXJndW1lbnRzLmxlbmd0aCYmdGhpcy5fY3JlYXRlV2lkZ2V0KGEsYyl9O2IuV2lkZ2V0 LnByb3RvdHlwZT17d2lkZ2V0TmFtZToid2lkZ2V0Iix3aWRnZXRFdmVudFByZWZpeDoiIixvcHRpb25z OntkaXNhYmxlZDpmYWxzZX0sX2NyZWF0ZVdpZGdldDpmdW5jdGlvbihhLGMpe2IuZGF0YShjLHRoaXMu d2lkZ2V0TmFtZSx0aGlzKTt0aGlzLmVsZW1lbnQ9YihjKTt0aGlzLm9wdGlvbnM9Yi5leHRlbmQodHJ1 ZSx7fSx0aGlzLm9wdGlvbnMsDQp0aGlzLl9nZXRDcmVhdGVPcHRpb25zKCksYSk7dmFyIGQ9dGhpczt0 aGlzLmVsZW1lbnQuYmluZCgicmVtb3ZlLiIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKCl7ZC5kZXN0 cm95KCl9KTt0aGlzLl9jcmVhdGUoKTt0aGlzLl90cmlnZ2VyKCJjcmVhdGUiKTt0aGlzLl9pbml0KCl9 LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGIubWV0YWRhdGEmJmIubWV0YWRhdGEu Z2V0KHRoaXMuZWxlbWVudFswXSlbdGhpcy53aWRnZXROYW1lXX0sX2NyZWF0ZTpmdW5jdGlvbigpe30s X2luaXQ6ZnVuY3Rpb24oKXt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQudW5iaW5kKCIu Iit0aGlzLndpZGdldE5hbWUpLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lKTt0aGlzLndpZGdldCgp LnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikucmVt b3ZlQ2xhc3ModGhpcy53aWRnZXRCYXNlQ2xhc3MrIi1kaXNhYmxlZCB1aS1zdGF0ZS1kaXNhYmxlZCIp fSwNCndpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9LG9wdGlvbjpmdW5jdGlvbihh LGMpe3ZhciBkPWE7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIGIuZXh0ZW5kKHt9LHRoaXMu b3B0aW9ucyk7aWYodHlwZW9mIGE9PT0ic3RyaW5nIil7aWYoYz09PWopcmV0dXJuIHRoaXMub3B0aW9u c1thXTtkPXt9O2RbYV09Y310aGlzLl9zZXRPcHRpb25zKGQpO3JldHVybiB0aGlzfSxfc2V0T3B0aW9u czpmdW5jdGlvbihhKXt2YXIgYz10aGlzO2IuZWFjaChhLGZ1bmN0aW9uKGQsZSl7Yy5fc2V0T3B0aW9u KGQsZSl9KTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbihhLGMpe3RoaXMub3B0aW9uc1th XT1jO2lmKGE9PT0iZGlzYWJsZWQiKXRoaXMud2lkZ2V0KClbYz8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFz cyJdKHRoaXMud2lkZ2V0QmFzZUNsYXNzKyItZGlzYWJsZWQgdWktc3RhdGUtZGlzYWJsZWQiKS5hdHRy KCJhcmlhLWRpc2FibGVkIixjKTtyZXR1cm4gdGhpc30sDQplbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsZmFsc2UpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJu IHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLHRydWUpfSxfdHJpZ2dlcjpmdW5jdGlvbihhLGMsZCl7 dmFyIGU9dGhpcy5vcHRpb25zW2FdO2M9Yi5FdmVudChjKTtjLnR5cGU9KGE9PT10aGlzLndpZGdldEV2 ZW50UHJlZml4P2E6dGhpcy53aWRnZXRFdmVudFByZWZpeCthKS50b0xvd2VyQ2FzZSgpO2Q9ZHx8e307 aWYoYy5vcmlnaW5hbEV2ZW50KXthPWIuZXZlbnQucHJvcHMubGVuZ3RoO2Zvcih2YXIgZjthOyl7Zj1i LmV2ZW50LnByb3BzWy0tYV07Y1tmXT1jLm9yaWdpbmFsRXZlbnRbZl19fXRoaXMuZWxlbWVudC50cmln Z2VyKGMsZCk7cmV0dXJuIShiLmlzRnVuY3Rpb24oZSkmJmUuY2FsbCh0aGlzLmVsZW1lbnRbMF0sYyxk KT09PWZhbHNlfHxjLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19fSkoalF1ZXJ5KTs= ###PACKDATA,FILE_END,/importbuddy/js/ui.widget.js,importbuddy/js/ui.widget.js ###PACKDATA,FILE_START,/importbuddy/lib/pclzip/pclzip.php,importbuddy/lib/pclzip /pclzip.php PD9waHANCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQaHBDb25jZXB0IExpYnJhcnkgLSBaaXAg TW9kdWxlIDIuOC4yDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gTGljZW5zZSBHTlUvTEdQTCAt IFZpbmNlbnQgQmxhdmV0IC0gQXVndXN0IDIwMDkNCi8vIGh0dHA6Ly93d3cucGhwY29uY2VwdC5uZXQN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLw0KLy8gUHJlc2VudGF0aW9uIDoNCi8vICAgUGNsWmlw IGlzIGEgUEhQIGxpYnJhcnkgdGhhdCBtYW5hZ2UgWklQIGFyY2hpdmVzLg0KLy8gICBTbyBmYXIgdGVz dHMgc2hvdyB0aGF0IGFyY2hpdmVzIGdlbmVyYXRlZCBieSBQY2xaaXAgYXJlIHJlYWRhYmxlIGJ5DQov LyAgIFdpblppcCBhcHBsaWNhdGlvbiBhbmQgb3RoZXIgdG9vbHMuDQovLw0KLy8gRGVzY3JpcHRpb24g Og0KLy8gICBTZWUgcmVhZG1lLnR4dCBhbmQgaHR0cDovL3d3dy5waHBjb25jZXB0Lm5ldA0KLy8NCi8v IFdhcm5pbmcgOg0KLy8gICBUaGlzIGxpYnJhcnkgYW5kIHRoZSBhc3NvY2lhdGVkIGZpbGVzIGFyZSBu b24gY29tbWVyY2lhbCwgbm9uIHByb2Zlc3Npb25hbA0KLy8gICB3b3JrLg0KLy8gICBJdCBzaG91bGQg bm90IGhhdmUgdW5leHBlY3RlZCByZXN1bHRzLiBIb3dldmVyIGlmIGFueSBkYW1hZ2UgaXMgY2F1c2Vk IGJ5DQovLyAgIHRoaXMgc29mdHdhcmUgdGhlIGF1dGhvciBjYW4gbm90IGJlIHJlc3BvbnNpYmxlLg0K Ly8gICBUaGUgdXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgYXQgdGhlIHJpc2sgb2YgdGhlIHVzZXIuDQov Lw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vICRJZDogcGNsemlwLmxpYi5waHAsdiAxLjYwIDIw MDkvMDkvMzAgMjE6MDE6MDQgdmJsYXZldCBFeHAgJA0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0K ICAvLyAtLS0tLSBDb25zdGFudHMNCiAgaWYgKCFkZWZpbmVkKCdQQ0xaSVBfUkVBRF9CTE9DS19TSVpF JykpIHsNCiAgICBkZWZpbmUoICdQQ0xaSVBfUkVBRF9CTE9DS19TSVpFJywgMjA0OCApOw0KICB9DQoN CiAgLy8gLS0tLS0gRmlsZSBsaXN0IHNlcGFyYXRvcg0KICAvLyBJbiB2ZXJzaW9uIDEueCBvZiBQY2xa aXAsIHRoZSBzZXBhcmF0b3IgZm9yIGZpbGUgbGlzdCBpcyBhIHNwYWNlDQogIC8vICh3aGljaCBpcyBu b3QgYSB2ZXJ5IHNtYXJ0IGNob2ljZSwgc3BlY2lmaWNhbGx5IGZvciB3aW5kb3dzIHBhdGhzICEpLg0K ICAvLyBBIGJldHRlciBzZXBhcmF0b3Igc2hvdWxkIGJlIGEgY29tbWEgKCwpLiBUaGlzIGNvbnN0YW50 IGdpdmVzIHlvdSB0aGUNCiAgLy8gYWJpbHR5IHRvIGNoYW5nZSB0aGF0Lg0KICAvLyBIb3dldmVyIG5v dGljZSB0aGF0IGNoYW5naW5nIHRoaXMgdmFsdWUsIG1heSBoYXZlIGltcGFjdCBvbiBleGlzdGluZw0K ICAvLyBzY3JpcHRzLCB1c2luZyBzcGFjZSBzZXBhcmF0ZWQgZmlsZW5hbWVzLg0KICAvLyBSZWNvbW1h bmRlZCB2YWx1ZXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyA6DQogIC8vZGVm aW5lKCAnUENMWklQX1NFUEFSQVRPUicsICcgJyApOw0KICAvLyBSZWNvbW1hbmRlZCB2YWx1ZXMgZm9y IHNtYXJ0IHNlcGFyYXRpb24gb2YgZmlsZW5hbWVzLg0KICBpZiAoIWRlZmluZWQoJ1BDTFpJUF9TRVBB UkFUT1InKSkgew0KICAgIGRlZmluZSggJ1BDTFpJUF9TRVBBUkFUT1InLCAnLCcgKTsNCiAgfQ0KDQog IC8vIC0tLS0tIEVycm9yIGNvbmZpZ3VyYXRpb24NCiAgLy8gMCA6IFBjbFppcCBDbGFzcyBpbnRlZ3Jh dGVkIGVycm9yIGhhbmRsaW5nDQogIC8vIDEgOiBQY2xFcnJvciBleHRlcm5hbCBsaWJyYXJ5IGVycm9y IGhhbmRsaW5nLiBCeSBlbmFibGluZyB0aGlzDQogIC8vICAgICB5b3UgbXVzdCBlbnN1cmUgdGhhdCB5 b3UgaGF2ZSBpbmNsdWRlZCBQY2xFcnJvciBsaWJyYXJ5Lg0KICAvLyBbMiwuLi5dIDogcmVzZXJ2ZWQg Zm9yIGZ1dHVyIHVzZQ0KICBpZiAoIWRlZmluZWQoJ1BDTFpJUF9FUlJPUl9FWFRFUk5BTCcpKSB7DQog ICAgZGVmaW5lKCAnUENMWklQX0VSUk9SX0VYVEVSTkFMJywgMCApOw0KICB9DQoNCiAgLy8gLS0tLS0g T3B0aW9uYWwgc3RhdGljIHRlbXBvcmFyeSBkaXJlY3RvcnkNCiAgLy8gICAgICAgQnkgZGVmYXVsdCB0 ZW1wb3JhcnkgZmlsZXMgYXJlIGdlbmVyYXRlZCBpbiB0aGUgc2NyaXB0IGN1cnJlbnQNCiAgLy8gICAg ICAgcGF0aC4NCiAgLy8gICAgICAgSWYgZGVmaW5lZCA6DQogIC8vICAgICAgIC0gTVVTVCBCRSB0ZXJt aW5hdGVkIGJ5IGEgJy8nLg0KICAvLyAgICAgICAtIE1VU1QgYmUgYSB2YWxpZCwgYWxyZWFkeSBjcmVh dGVkIGRpcmVjdG9yeQ0KICAvLyAgICAgICBTYW1wbGVzIDoNCiAgLy8gZGVmaW5lKCAnUENMWklQX1RF TVBPUkFSWV9ESVInLCAnL3RlbXAvJyApOw0KICAvLyBkZWZpbmUoICdQQ0xaSVBfVEVNUE9SQVJZX0RJ UicsICdDOi9UZW1wLycgKTsNCiAgaWYgKCFkZWZpbmVkKCdQQ0xaSVBfVEVNUE9SQVJZX0RJUicpKSB7 DQogICAgZGVmaW5lKCAnUENMWklQX1RFTVBPUkFSWV9ESVInLCAnJyApOw0KICB9DQoNCiAgLy8gLS0t LS0gT3B0aW9uYWwgdGhyZXNob2xkIHJhdGlvIGZvciB1c2Ugb2YgdGVtcG9yYXJ5IGZpbGVzDQogIC8v ICAgICAgIFBjbHppcCBzZW5zZSB0aGUgc2l6ZSBvZiB0aGUgZmlsZSB0byBhZGQvZXh0cmFjdCBhbmQg ZGVjaWRlIHRvDQogIC8vICAgICAgIHVzZSBvciBub3QgdGVtcG9yYXJ5IGZpbGUuIFRoZSBhbGdvcnl0 aG0gaXMgbG9va2luZyBmb3INCiAgLy8gICAgICAgbWVtb3J5X2xpbWl0IG9mIFBIUCBhbmQgYXBwbHkg YSByYXRpby4NCiAgLy8gICAgICAgdGhyZXNob2xkID0gbWVtb3J5X2xpbWl0ICogcmF0aW8uDQogIC8v ICAgICAgIFJlY29tbWVuZGVkIHZhbHVlcyBhcmUgdW5kZXIgMC41LiBEZWZhdWx0IDAuNDcuDQogIC8v ICAgICAgIFNhbXBsZXMgOg0KICAvLyBkZWZpbmUoICdQQ0xaSVBfVEVNUE9SQVJZX0ZJTEVfUkFUSU8n LCAwLjUgKTsNCiAgaWYgKCFkZWZpbmVkKCdQQ0xaSVBfVEVNUE9SQVJZX0ZJTEVfUkFUSU8nKSkgew0K ICAgIGRlZmluZSggJ1BDTFpJUF9URU1QT1JBUllfRklMRV9SQVRJTycsIDAuNDcgKTsNCiAgfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gKioqKiogVU5ERVIgVEhJUyBMSU5FIE5PVEhJTkcgTkVF RFMgVE8gQkUgTU9ESUZJRUQgKioqKioNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0t LS0gR2xvYmFsIHZhcmlhYmxlcw0KICAkZ19wY2x6aXBfdmVyc2lvbiA9ICIyLjguMiI7DQoNCiAgLy8g LS0tLS0gRXJyb3IgY29kZXMNCiAgLy8gICAtMSA6IFVuYWJsZSB0byBvcGVuIGZpbGUgaW4gYmluYXJ5 IHdyaXRlIG1vZGUNCiAgLy8gICAtMiA6IFVuYWJsZSB0byBvcGVuIGZpbGUgaW4gYmluYXJ5IHJlYWQg bW9kZQ0KICAvLyAgIC0zIDogSW52YWxpZCBwYXJhbWV0ZXJzDQogIC8vICAgLTQgOiBGaWxlIGRvZXMg bm90IGV4aXN0DQogIC8vICAgLTUgOiBGaWxlbmFtZSBpcyB0b28gbG9uZyAobWF4LiAyNTUpDQogIC8v ICAgLTYgOiBOb3QgYSB2YWxpZCB6aXAgZmlsZQ0KICAvLyAgIC03IDogSW52YWxpZCBleHRyYWN0ZWQg

ZmlsZSBzaXplDQogIC8vICAgLTggOiBVbmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeQ0KICAvLyAgIC05 IDogSW52YWxpZCBhcmNoaXZlIGV4dGVuc2lvbg0KICAvLyAgLTEwIDogSW52YWxpZCBhcmNoaXZlIGZv cm1hdA0KICAvLyAgLTExIDogVW5hYmxlIHRvIGRlbGV0ZSBmaWxlICh1bmxpbmspDQogIC8vICAtMTIg OiBVbmFibGUgdG8gcmVuYW1lIGZpbGUgKHJlbmFtZSkNCiAgLy8gIC0xMyA6IEludmFsaWQgaGVhZGVy IGNoZWNrc3VtDQogIC8vICAtMTQgOiBJbnZhbGlkIGFyY2hpdmUgc2l6ZQ0KICBkZWZpbmUoICdQQ0xa SVBfRVJSX1VTRVJfQUJPUlRFRCcsIDIgKTsNCiAgZGVmaW5lKCAnUENMWklQX0VSUl9OT19FUlJPUics IDAgKTsNCiAgZGVmaW5lKCAnUENMWklQX0VSUl9XUklURV9PUEVOX0ZBSUwnLCAtMSApOw0KICBkZWZp bmUoICdQQ0xaSVBfRVJSX1JFQURfT1BFTl9GQUlMJywgLTIgKTsNCiAgZGVmaW5lKCAnUENMWklQX0VS Ul9JTlZBTElEX1BBUkFNRVRFUicsIC0zICk7DQogIGRlZmluZSggJ1BDTFpJUF9FUlJfTUlTU0lOR19G SUxFJywgLTQgKTsNCiAgZGVmaW5lKCAnUENMWklQX0VSUl9GSUxFTkFNRV9UT09fTE9ORycsIC01ICk7 DQogIGRlZmluZSggJ1BDTFpJUF9FUlJfSU5WQUxJRF9aSVAnLCAtNiApOw0KICBkZWZpbmUoICdQQ0xa SVBfRVJSX0JBRF9FWFRSQUNURURfRklMRScsIC03ICk7DQogIGRlZmluZSggJ1BDTFpJUF9FUlJfRElS X0NSRUFURV9GQUlMJywgLTggKTsNCiAgZGVmaW5lKCAnUENMWklQX0VSUl9CQURfRVhURU5TSU9OJywg LTkgKTsNCiAgZGVmaW5lKCAnUENMWklQX0VSUl9CQURfRk9STUFUJywgLTEwICk7DQogIGRlZmluZSgg J1BDTFpJUF9FUlJfREVMRVRFX0ZJTEVfRkFJTCcsIC0xMSApOw0KICBkZWZpbmUoICdQQ0xaSVBfRVJS X1JFTkFNRV9GSUxFX0ZBSUwnLCAtMTIgKTsNCiAgZGVmaW5lKCAnUENMWklQX0VSUl9CQURfQ0hFQ0tT VU0nLCAtMTMgKTsNCiAgZGVmaW5lKCAnUENMWklQX0VSUl9JTlZBTElEX0FSQ0hJVkVfWklQJywgLTE0 ICk7DQogIGRlZmluZSggJ1BDTFpJUF9FUlJfTUlTU0lOR19PUFRJT05fVkFMVUUnLCAtMTUgKTsNCiAg ZGVmaW5lKCAnUENMWklQX0VSUl9JTlZBTElEX09QVElPTl9WQUxVRScsIC0xNiApOw0KICBkZWZpbmUo ICdQQ0xaSVBfRVJSX0FMUkVBRFlfQV9ESVJFQ1RPUlknLCAtMTcgKTsNCiAgZGVmaW5lKCAnUENMWklQ X0VSUl9VTlNVUFBPUlRFRF9DT01QUkVTU0lPTicsIC0xOCApOw0KICBkZWZpbmUoICdQQ0xaSVBfRVJS X1VOU1VQUE9SVEVEX0VOQ1JZUFRJT04nLCAtMTkgKTsNCiAgZGVmaW5lKCAnUENMWklQX0VSUl9JTlZB TElEX0FUVFJJQlVURV9WQUxVRScsIC0yMCApOw0KICBkZWZpbmUoICdQQ0xaSVBfRVJSX0RJUkVDVE9S WV9SRVNUUklDVElPTicsIC0yMSApOw0KDQogIC8vIC0tLS0tIE9wdGlvbnMgdmFsdWVzDQogIGRlZmlu ZSggJ1BDTFpJUF9PUFRfUEFUSCcsIDc3MDAxICk7DQogIGRlZmluZSggJ1BDTFpJUF9PUFRfQUREX1BB VEgnLCA3NzAwMiApOw0KICBkZWZpbmUoICdQQ0xaSVBfT1BUX1JFTU9WRV9QQVRIJywgNzcwMDMgKTsN CiAgZGVmaW5lKCAnUENMWklQX09QVF9SRU1PVkVfQUxMX1BBVEgnLCA3NzAwNCApOw0KICBkZWZpbmUo ICdQQ0xaSVBfT1BUX1NFVF9DSE1PRCcsIDc3MDA1ICk7DQogIGRlZmluZSggJ1BDTFpJUF9PUFRfRVhU UkFDVF9BU19TVFJJTkcnLCA3NzAwNiApOw0KICBkZWZpbmUoICdQQ0xaSVBfT1BUX05PX0NPTVBSRVNT SU9OJywgNzcwMDcgKTsNCiAgZGVmaW5lKCAnUENMWklQX09QVF9CWV9OQU1FJywgNzcwMDggKTsNCiAg ZGVmaW5lKCAnUENMWklQX09QVF9CWV9JTkRFWCcsIDc3MDA5ICk7DQogIGRlZmluZSggJ1BDTFpJUF9P UFRfQllfRVJFRycsIDc3MDEwICk7DQogIGRlZmluZSggJ1BDTFpJUF9PUFRfQllfUFJFRycsIDc3MDEx ICk7DQogIGRlZmluZSggJ1BDTFpJUF9PUFRfQ09NTUVOVCcsIDc3MDEyICk7DQogIGRlZmluZSggJ1BD TFpJUF9PUFRfQUREX0NPTU1FTlQnLCA3NzAxMyApOw0KICBkZWZpbmUoICdQQ0xaSVBfT1BUX1BSRVBF TkRfQ09NTUVOVCcsIDc3MDE0ICk7DQogIGRlZmluZSggJ1BDTFpJUF9PUFRfRVhUUkFDVF9JTl9PVVRQ VVQnLCA3NzAxNSApOw0KICBkZWZpbmUoICdQQ0xaSVBfT1BUX1JFUExBQ0VfTkVXRVInLCA3NzAxNiAp Ow0KICBkZWZpbmUoICdQQ0xaSVBfT1BUX1NUT1BfT05fRVJST1InLCA3NzAxNyApOw0KICAvLyBIYXZp bmcgYmlnIHRyb3VibGUgd2l0aCBjcnlwdC4gTmVlZCB0byBtdWx0aXBseSAyIGxvbmcgaW50DQogIC8v IHdoaWNoIGlzIG5vdCBjb3JyZWN0bHkgc3VwcG9ydGVkIGJ5IFBIUCAuLi4NCiAgLy9kZWZpbmUoICdQ Q0xaSVBfT1BUX0NSWVBUJywgNzcwMTggKTsNCiAgZGVmaW5lKCAnUENMWklQX09QVF9FWFRSQUNUX0RJ Ul9SRVNUUklDVElPTicsIDc3MDE5ICk7DQogIGRlZmluZSggJ1BDTFpJUF9PUFRfVEVNUF9GSUxFX1RI UkVTSE9MRCcsIDc3MDIwICk7DQogIGRlZmluZSggJ1BDTFpJUF9PUFRfQUREX1RFTVBfRklMRV9USFJF U0hPTEQnLCA3NzAyMCApOyAvLyBhbGlhcw0KICBkZWZpbmUoICdQQ0xaSVBfT1BUX1RFTVBfRklMRV9P TicsIDc3MDIxICk7DQogIGRlZmluZSggJ1BDTFpJUF9PUFRfQUREX1RFTVBfRklMRV9PTicsIDc3MDIx ICk7IC8vIGFsaWFzDQogIGRlZmluZSggJ1BDTFpJUF9PUFRfVEVNUF9GSUxFX09GRicsIDc3MDIyICk7 DQogIGRlZmluZSggJ1BDTFpJUF9PUFRfQUREX1RFTVBfRklMRV9PRkYnLCA3NzAyMiApOyAvLyBhbGlh cw0KDQogIC8vIC0tLS0tIEZpbGUgZGVzY3JpcHRpb24gYXR0cmlidXRlcw0KICBkZWZpbmUoICdQQ0xa SVBfQVRUX0ZJTEVfTkFNRScsIDc5MDAxICk7DQogIGRlZmluZSggJ1BDTFpJUF9BVFRfRklMRV9ORVdf U0hPUlRfTkFNRScsIDc5MDAyICk7DQogIGRlZmluZSggJ1BDTFpJUF9BVFRfRklMRV9ORVdfRlVMTF9O QU1FJywgNzkwMDMgKTsNCiAgZGVmaW5lKCAnUENMWklQX0FUVF9GSUxFX01USU1FJywgNzkwMDQgKTsN CiAgZGVmaW5lKCAnUENMWklQX0FUVF9GSUxFX0NPTlRFTlQnLCA3OTAwNSApOw0KICBkZWZpbmUoICdQ Q0xaSVBfQVRUX0ZJTEVfQ09NTUVOVCcsIDc5MDA2ICk7DQoNCiAgLy8gLS0tLS0gQ2FsbCBiYWNrcyB2 YWx1ZXMNCiAgZGVmaW5lKCAnUENMWklQX0NCX1BSRV9FWFRSQUNUJywgNzgwMDEgKTsNCiAgZGVmaW5l KCAnUENMWklQX0NCX1BPU1RfRVhUUkFDVCcsIDc4MDAyICk7DQogIGRlZmluZSggJ1BDTFpJUF9DQl9Q UkVfQUREJywgNzgwMDMgKTsNCiAgZGVmaW5lKCAnUENMWklQX0NCX1BPU1RfQUREJywgNzgwMDQgKTsN CiAgLyogRm9yIGZ1dHVyIHVzZQ0KICBkZWZpbmUoICdQQ0xaSVBfQ0JfUFJFX0xJU1QnLCA3ODAwNSAp Ow0KICBkZWZpbmUoICdQQ0xaSVBfQ0JfUE9TVF9MSVNUJywgNzgwMDYgKTsNCiAgZGVmaW5lKCAnUENM WklQX0NCX1BSRV9ERUxFVEUnLCA3ODAwNyApOw0KICBkZWZpbmUoICdQQ0xaSVBfQ0JfUE9TVF9ERUxF VEUnLCA3ODAwOCApOw0KICAqLw0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIENsYXNz

IDogUGNsWmlwDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gICBQY2xaaXAgaXMgdGhlIGNsYXNzIHRo YXQgcmVwcmVzZW50IGEgWmlwIGFyY2hpdmUuDQogIC8vICAgVGhlIHB1YmxpYyBtZXRob2RzIGFsbG93 IHRoZSBtYW5pcHVsYXRpb24gb2YgdGhlIGFyY2hpdmUuDQogIC8vIEF0dHJpYnV0ZXMgOg0KICAvLyAg IEF0dHJpYnV0ZXMgbXVzdCBub3QgYmUgYWNjZXNzZWQgZGlyZWN0bHkuDQogIC8vIE1ldGhvZHMgOg0K ICAvLyAgIFBjbFppcCgpIDogT2JqZWN0IGNyZWF0b3INCiAgLy8gICBjcmVhdGUoKSA6IENyZWF0ZXMg dGhlIFppcCBhcmNoaXZlDQogIC8vICAgbGlzdENvbnRlbnQoKSA6IExpc3QgdGhlIGNvbnRlbnQgb2Yg dGhlIFppcCBhcmNoaXZlDQogIC8vICAgZXh0cmFjdCgpIDogRXh0cmFjdCB0aGUgY29udGVudCBvZiB0 aGUgYXJjaGl2ZQ0KICAvLyAgIHByb3BlcnRpZXMoKSA6IExpc3QgdGhlIHByb3BlcnRpZXMgb2YgdGhl IGFyY2hpdmUNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgY2xhc3MgUGNsWmlwDQogIHsNCiAg ICAvLyAtLS0tLSBGaWxlbmFtZSBvZiB0aGUgemlwIGZpbGUNCiAgICB2YXIgJHppcG5hbWUgPSAnJzsN Cg0KICAgIC8vIC0tLS0tIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgemlwIGZpbGUNCiAgICB2YXIgJHpp cF9mZCA9IDA7DQoNCiAgICAvLyAtLS0tLSBJbnRlcm5hbCBlcnJvciBoYW5kbGluZw0KICAgIHZhciAk ZXJyb3JfY29kZSA9IDE7DQogICAgdmFyICRlcnJvcl9zdHJpbmcgPSAnJzsNCg0KICAgIC8vIC0tLS0t IEN1cnJlbnQgc3RhdHVzIG9mIHRoZSBtYWdpY19xdW90ZXNfcnVudGltZQ0KICAgIC8vIFRoaXMgdmFs dWUgc3RvcmUgdGhlIHBocCBjb25maWd1cmF0aW9uIGZvciBtYWdpY19xdW90ZXMNCiAgICAvLyBUaGUg Y2xhc3MgY2FuIHRoZW4gZGlzYWJsZSB0aGUgbWFnaWNfcXVvdGVzIGFuZCByZXNldCBpdCBhZnRlcg0K ICAgIHZhciAkbWFnaWNfcXVvdGVzX3N0YXR1czsNCg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ICAvLyBGdW5jdGlvbiA6IFBjbFppcCgpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gICBDcmVhdGVz IGEgUGNsWmlwIG9iamVjdCBhbmQgc2V0IHRoZSBuYW1lIG9mIHRoZSBhc3NvY2lhdGVkIFppcCBhcmNo aXZlDQogIC8vICAgZmlsZW5hbWUuDQogIC8vICAgTm90ZSB0aGF0IG5vIHJlYWwgYWN0aW9uIGlzIHRh a2VuLCBpZiB0aGUgYXJjaGl2ZSBkb2VzIG5vdCBleGlzdCBpdCBpcyBub3QNCiAgLy8gICBjcmVhdGVk LiBVc2UgY3JlYXRlKCkgZm9yIHRoYXQuDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIGZ1bmN0 aW9uIFBjbFppcCgkcF96aXBuYW1lKQ0KICB7DQoNCiAgICAvLyAtLS0tLSBUZXN0cyB0aGUgemxpYg0K ICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdnem9wZW4nKSkNCiAgICB7DQogICAgICBkaWUoJ0Fib3J0 ICcuYmFzZW5hbWUoX19GSUxFX18pLicgOiBNaXNzaW5nIHpsaWIgZXh0ZW5zaW9ucycpOw0KICAgIH0N Cg0KICAgIC8vIC0tLS0tIFNldCB0aGUgYXR0cmlidXRlcw0KICAgICR0aGlzLT56aXBuYW1lID0gJHBf emlwbmFtZTsNCiAgICAkdGhpcy0+emlwX2ZkID0gMDsNCiAgICAkdGhpcy0+bWFnaWNfcXVvdGVzX3N0 YXR1cyA9IC0xOw0KDQogICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJuOw0KICB9DQogIC8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rp b24gOg0KICAvLyAgIGNyZWF0ZSgkcF9maWxlbGlzdCwgJHBfYWRkX2Rpcj0iIiwgJHBfcmVtb3ZlX2Rp cj0iIikNCiAgLy8gICBjcmVhdGUoJHBfZmlsZWxpc3QsICRwX29wdGlvbiwgJHBfb3B0aW9uX3ZhbHVl LCAuLi4pDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gICBUaGlzIG1ldGhvZCBzdXBwb3J0cyB0d28g ZGlmZmVyZW50IHN5bm9wc2lzLiBUaGUgZmlyc3Qgb25lIGlzIGhpc3RvcmljYWwuDQogIC8vICAgVGhp cyBtZXRob2QgY3JlYXRlcyBhIFppcCBBcmNoaXZlLiBUaGUgWmlwIGZpbGUgaXMgY3JlYXRlZCBpbiB0 aGUNCiAgLy8gICBmaWxlc3lzdGVtLiBUaGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluZGljYXRlZCBp biAkcF9maWxlbGlzdA0KICAvLyAgIGFyZSBhZGRlZCBpbiB0aGUgYXJjaGl2ZS4gU2VlIHRoZSBwYXJh bWV0ZXJzIGRlc2NyaXB0aW9uIGZvciB0aGUNCiAgLy8gICBzdXBwb3J0ZWQgZm9ybWF0IG9mICRwX2Zp bGVsaXN0Lg0KICAvLyAgIFdoZW4gYSBkaXJlY3RvcnkgaXMgaW4gdGhlIGxpc3QsIHRoZSBkaXJlY3Rv cnkgYW5kIGl0cyBjb250ZW50IGlzIGFkZGVkDQogIC8vICAgaW4gdGhlIGFyY2hpdmUuDQogIC8vICAg SW4gdGhpcyBzeW5vcHNpcywgdGhlIGZ1bmN0aW9uIHRha2VzIGFuIG9wdGlvbmFsIHZhcmlhYmxlIGxp c3Qgb2YNCiAgLy8gICBvcHRpb25zLiBTZWUgYmVsbG93IHRoZSBzdXBwb3J0ZWQgb3B0aW9ucy4NCiAg Ly8gUGFyYW1ldGVycyA6DQogIC8vICAgJHBfZmlsZWxpc3QgOiBBbiBhcnJheSBjb250YWluaW5nIGZp bGUgb3IgZGlyZWN0b3J5IG5hbWVzLCBvcg0KICAvLyAgICAgICAgICAgICAgICAgYSBzdHJpbmcgY29u dGFpbmluZyBvbmUgZmlsZW5hbWUgb3Igb25lIGRpcmVjdG9yeSBuYW1lLCBvcg0KICAvLyAgICAgICAg ICAgICAgICAgYSBzdHJpbmcgY29udGFpbmluZyBhIGxpc3Qgb2YgZmlsZW5hbWVzIGFuZC9vciBkaXJl Y3RvcnkNCiAgLy8gICAgICAgICAgICAgICAgIG5hbWVzIHNlcGFyYXRlZCBieSBzcGFjZXMuDQogIC8v ICAgJHBfYWRkX2RpciA6IEEgcGF0aCB0byBhZGQgYmVmb3JlIHRoZSByZWFsIHBhdGggb2YgdGhlIGFy Y2hpdmVkIGZpbGUsDQogIC8vICAgICAgICAgICAgICAgIGluIG9yZGVyIHRvIGhhdmUgaXQgbWVtb3Jp emVkIGluIHRoZSBhcmNoaXZlLg0KICAvLyAgICRwX3JlbW92ZV9kaXIgOiBBIHBhdGggdG8gcmVtb3Zl IGZyb20gdGhlIHJlYWwgcGF0aCBvZiB0aGUgZmlsZSB0byBhcmNoaXZlLA0KICAvLyAgICAgICAgICAg ICAgICAgICBpbiBvcmRlciB0byBoYXZlIGEgc2hvcnRlciBwYXRoIG1lbW9yaXplZCBpbiB0aGUgYXJj aGl2ZS4NCiAgLy8gICAgICAgICAgICAgICAgICAgV2hlbiAkcF9hZGRfZGlyIGFuZCAkcF9yZW1vdmVf ZGlyIGFyZSBzZXQsICRwX3JlbW92ZV9kaXINCiAgLy8gICAgICAgICAgICAgICAgICAgaXMgcmVtb3Zl ZCBmaXJzdCwgYmVmb3JlICRwX2FkZF9kaXIgaXMgYWRkZWQuDQogIC8vIE9wdGlvbnMgOg0KICAvLyAg IFBDTFpJUF9PUFRfQUREX1BBVEggOg0KICAvLyAgIFBDTFpJUF9PUFRfUkVNT1ZFX1BBVEggOg0KICAv

LyAgIFBDTFpJUF9PUFRfUkVNT1ZFX0FMTF9QQVRIIDoNCiAgLy8gICBQQ0xaSVBfT1BUX0NPTU1FTlQg Og0KICAvLyAgIFBDTFpJUF9DQl9QUkVfQUREIDoNCiAgLy8gICBQQ0xaSVBfQ0JfUE9TVF9BREQgOg0K ICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAgLy8gICAwIG9uIGZhaWx1cmUsDQogIC8vICAgVGhlIGxpc3Qg b2YgdGhlIGFkZGVkIGZpbGVzLCB3aXRoIGEgc3RhdHVzIG9mIHRoZSBhZGQgYWN0aW9uLg0KICAvLyAg IChzZWUgUGNsWmlwOjpsaXN0Q29udGVudCgpIGZvciBsaXN0IGVudHJ5IGZvcm1hdCkNCiAgLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gY3JlYXRlKCRwX2ZpbGVsaXN0KQ0KICB7DQogICAg JHZfcmVzdWx0PTE7DQoNCiAgICAvLyAtLS0tLSBSZXNldCB0aGUgZXJyb3IgaGFuZGxlcg0KICAgICR0 aGlzLT5wcml2RXJyb3JSZXNldCgpOw0KDQogICAgLy8gLS0tLS0gU2V0IGRlZmF1bHQgdmFsdWVzDQog ICAgJHZfb3B0aW9ucyA9IGFycmF5KCk7DQogICAgJHZfb3B0aW9uc1tQQ0xaSVBfT1BUX05PX0NPTVBS RVNTSU9OXSA9IEZBTFNFOw0KDQogICAgLy8gLS0tLS0gTG9vayBmb3IgdmFyaWFibGUgb3B0aW9ucyBh cmd1bWVudHMNCiAgICAkdl9zaXplID0gZnVuY19udW1fYXJncygpOw0KDQogICAgLy8gLS0tLS0gTG9v ayBmb3IgYXJndW1lbnRzDQogICAgaWYgKCR2X3NpemUgPiAxKSB7DQogICAgICAvLyAtLS0tLSBHZXQg dGhlIGFyZ3VtZW50cw0KICAgICAgJHZfYXJnX2xpc3QgPSBmdW5jX2dldF9hcmdzKCk7DQoNCiAgICAg IC8vIC0tLS0tIFJlbW92ZSBmcm9tIHRoZSBvcHRpb25zIGxpc3QgdGhlIGZpcnN0IGFyZ3VtZW50DQog ICAgICBhcnJheV9zaGlmdCgkdl9hcmdfbGlzdCk7DQogICAgICAkdl9zaXplLS07DQoNCiAgICAgIC8v IC0tLS0tIExvb2sgZm9yIGZpcnN0IGFyZw0KICAgICAgaWYgKChpc19pbnRlZ2VyKCR2X2FyZ19saXN0 WzBdKSkgJiYgKCR2X2FyZ19saXN0WzBdID4gNzcwMDApKSB7DQoNCiAgICAgICAgLy8gLS0tLS0gUGFy c2UgdGhlIG9wdGlvbnMNCiAgICAgICAgJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZQYXJzZU9wdGlvbnMo JHZfYXJnX2xpc3QsICR2X3NpemUsICR2X29wdGlvbnMsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFycmF5IChQQ0xaSVBfT1BUX1JFTU9WRV9QQVRIID0+ICdvcHRpb25h bCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0xa SVBfT1BUX1JFTU9WRV9BTExfUEFUSCA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENMWklQX09QVF9BRERfUEFUSCA9PiAnb3B0aW9u YWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENM WklQX0NCX1BSRV9BREQgPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9DQl9QT1NUX0FERCA9PiAnb3B0aW9uYWwnLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENMWklQX09QVF9O T19DT01QUkVTU0lPTiA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUENMWklQX09QVF9DT01NRU5UID0+ICdvcHRpb25hbCcsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfT1BUX1RF TVBfRklMRV9USFJFU0hPTEQgPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9PUFRfVEVNUF9GSUxFX09OID0+ICdvcHRpb25h bCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0xa SVBfT1BUX1RFTVBfRklMRV9PRkYgPT4gJ29wdGlvbmFsJw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8sIFBDTFpJUF9PUFRfQ1JZUFQgPT4gJ29wdGlvbmFs Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7DQogICAgICAg IGlmICgkdl9yZXN1bHQgIT0gMSkgew0KICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAg ICB9DQoNCiAgICAgIC8vIC0tLS0tIExvb2sgZm9yIDIgYXJncw0KICAgICAgLy8gSGVyZSB3ZSBuZWVk IHRvIHN1cHBvcnQgdGhlIGZpcnN0IGhpc3RvcmljIHN5bm9wc2lzIG9mIHRoZQ0KICAgICAgLy8gbWV0 aG9kLg0KICAgICAgZWxzZSB7DQoNCiAgICAgICAgLy8gLS0tLS0gR2V0IHRoZSBmaXJzdCBhcmd1bWVu dA0KICAgICAgICAkdl9vcHRpb25zW1BDTFpJUF9PUFRfQUREX1BBVEhdID0gJHZfYXJnX2xpc3RbMF07 DQoNCiAgICAgICAgLy8gLS0tLS0gTG9vayBmb3IgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudA0K ICAgICAgICBpZiAoJHZfc2l6ZSA9PSAyKSB7DQogICAgICAgICAgJHZfb3B0aW9uc1tQQ0xaSVBfT1BU X1JFTU9WRV9QQVRIXSA9ICR2X2FyZ19saXN0WzFdOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYg KCR2X3NpemUgPiAyKSB7DQogICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9J TlZBTElEX1BBUkFNRVRFUiwNCgkJICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBudW1iZXIg LyB0eXBlIG9mIGFyZ3VtZW50cyIpOw0KICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAg ICB9DQogICAgfQ0KDQogICAgLy8gLS0tLS0gTG9vayBmb3IgZGVmYXVsdCBvcHRpb24gdmFsdWVzDQog ICAgJHRoaXMtPnByaXZPcHRpb25EZWZhdWx0VGhyZXNob2xkKCR2X29wdGlvbnMpOw0KDQogICAgLy8g LS0tLS0gSW5pdA0KICAgICR2X3N0cmluZ19saXN0ID0gYXJyYXkoKTsNCiAgICAkdl9hdHRfbGlzdCA9 IGFycmF5KCk7DQogICAgJHZfZmlsZWRlc2NyX2xpc3QgPSBhcnJheSgpOw0KICAgICRwX3Jlc3VsdF9s aXN0ID0gYXJyYXkoKTsNCg0KICAgIC8vIC0tLS0tIExvb2sgaWYgdGhlICRwX2ZpbGVsaXN0IGlzIHJl YWxseSBhbiBhcnJheQ0KICAgIGlmIChpc19hcnJheSgkcF9maWxlbGlzdCkpIHsNCg0KICAgICAgLy8g LS0tLS0gTG9vayBpZiB0aGUgZmlyc3QgZWxlbWVudCBpcyBhbHNvIGFuIGFycmF5DQogICAgICAvLyAg ICAgICBUaGlzIHdpbGwgbWVhbiB0aGF0IHRoaXMgaXMgYSBmaWxlIGRlc2NyaXB0aW9uIGVudHJ5DQog ICAgICBpZiAoaXNzZXQoJHBfZmlsZWxpc3RbMF0pICYmIGlzX2FycmF5KCRwX2ZpbGVsaXN0WzBdKSkg ew0KICAgICAgICAkdl9hdHRfbGlzdCA9ICRwX2ZpbGVsaXN0Ow0KICAgICAgfQ0KDQogICAgICAvLyAt LS0tLSBUaGUgbGlzdCBpcyBhIGxpc3Qgb2Ygc3RyaW5nIG5hbWVzDQogICAgICBlbHNlIHsNCiAgICAg ICAgJHZfc3RyaW5nX2xpc3QgPSAkcF9maWxlbGlzdDsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAvLyAt

LS0tLSBMb29rIGlmIHRoZSAkcF9maWxlbGlzdCBpcyBhIHN0cmluZw0KICAgIGVsc2UgaWYgKGlzX3N0 cmluZygkcF9maWxlbGlzdCkpIHsNCiAgICAgIC8vIC0tLS0tIENyZWF0ZSBhIGxpc3QgZnJvbSB0aGUg c3RyaW5nDQogICAgICAkdl9zdHJpbmdfbGlzdCA9IGV4cGxvZGUoUENMWklQX1NFUEFSQVRPUiwgJHBf ZmlsZWxpc3QpOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIEludmFsaWQgdmFyaWFibGUgdHlwZSBmb3Ig JHBfZmlsZWxpc3QNCiAgICBlbHNlIHsNCiAgICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9F UlJfSU5WQUxJRF9QQVJBTUVURVIsICJJbnZhbGlkIHZhcmlhYmxlIHR5cGUgcF9maWxlbGlzdCIpOw0K ICAgICAgcmV0dXJuIDA7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gUmVmb3JtYXQgdGhlIHN0cmluZyBs aXN0DQogICAgaWYgKHNpemVvZigkdl9zdHJpbmdfbGlzdCkgIT0gMCkgew0KICAgICAgZm9yZWFjaCAo JHZfc3RyaW5nX2xpc3QgYXMgJHZfc3RyaW5nKSB7DQogICAgICAgIGlmICgkdl9zdHJpbmcgIT0gJycp IHsNCiAgICAgICAgICAkdl9hdHRfbGlzdFtdW1BDTFpJUF9BVFRfRklMRV9OQU1FXSA9ICR2X3N0cmlu ZzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCg0K ICAgIC8vIC0tLS0tIEZvciBlYWNoIGZpbGUgaW4gdGhlIGxpc3QgY2hlY2sgdGhlIGF0dHJpYnV0ZXMN CiAgICAkdl9zdXBwb3J0ZWRfYXR0cmlidXRlcw0KICAgID0gYXJyYXkgKCBQQ0xaSVBfQVRUX0ZJTEVf TkFNRSA9PiAnbWFuZGF0b3J5Jw0KICAgICAgICAgICAgICxQQ0xaSVBfQVRUX0ZJTEVfTkVXX1NIT1JU X05BTUUgPT4gJ29wdGlvbmFsJw0KICAgICAgICAgICAgICxQQ0xaSVBfQVRUX0ZJTEVfTkVXX0ZVTExf TkFNRSA9PiAnb3B0aW9uYWwnDQogICAgICAgICAgICAgLFBDTFpJUF9BVFRfRklMRV9NVElNRSA9PiAn b3B0aW9uYWwnDQogICAgICAgICAgICAgLFBDTFpJUF9BVFRfRklMRV9DT05URU5UID0+ICdvcHRpb25h bCcNCiAgICAgICAgICAgICAsUENMWklQX0FUVF9GSUxFX0NPTU1FTlQgPT4gJ29wdGlvbmFsJw0KCQkJ CQkJKTsNCiAgICBmb3JlYWNoICgkdl9hdHRfbGlzdCBhcyAkdl9lbnRyeSkgew0KICAgICAgJHZfcmVz dWx0ID0gJHRoaXMtPnByaXZGaWxlRGVzY3JQYXJzZUF0dCgkdl9lbnRyeSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZfZmlsZWRlc2NyX2xpc3RbXSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZfb3B0aW9ucywNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZfc3VwcG9ydGVkX2F0dHJp YnV0ZXMpOw0KICAgICAgaWYgKCR2X3Jlc3VsdCAhPSAxKSB7DQogICAgICAgIHJldHVybiAwOw0KICAg ICAgfQ0KICAgIH0NCg0KICAgIC8vIC0tLS0tIEV4cGFuZCB0aGUgZmlsZWxpc3QgKGV4cGFuZCBkaXJl Y3RvcmllcykNCiAgICAkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdkZpbGVEZXNjckV4cGFuZCgkdl9maWxl ZGVzY3JfbGlzdCwgJHZfb3B0aW9ucyk7DQogICAgaWYgKCR2X3Jlc3VsdCAhPSAxKSB7DQogICAgICBy ZXR1cm4gMDsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBDYWxsIHRoZSBjcmVhdGUgZmN0DQogICAgJHZf cmVzdWx0ID0gJHRoaXMtPnByaXZDcmVhdGUoJHZfZmlsZWRlc2NyX2xpc3QsICRwX3Jlc3VsdF9saXN0 LCAkdl9vcHRpb25zKTsNCiAgICBpZiAoJHZfcmVzdWx0ICE9IDEpIHsNCiAgICAgIHJldHVybiAwOw0K ICAgIH0NCg0KICAgIC8vIC0tLS0tIFJldHVybg0KICAgIHJldHVybiAkcF9yZXN1bHRfbGlzdDsNCiAg fQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQog IC8vIEZ1bmN0aW9uIDoNCiAgLy8gICBhZGQoJHBfZmlsZWxpc3QsICRwX2FkZF9kaXI9IiIsICRwX3Jl bW92ZV9kaXI9IiIpDQogIC8vICAgYWRkKCRwX2ZpbGVsaXN0LCAkcF9vcHRpb24sICRwX29wdGlvbl92 YWx1ZSwgLi4uKQ0KICAvLyBEZXNjcmlwdGlvbiA6DQogIC8vICAgVGhpcyBtZXRob2Qgc3VwcG9ydHMg dHdvIHN5bm9wc2lzLiBUaGUgZmlyc3Qgb25lIGlzIGhpc3RvcmljYWwuDQogIC8vICAgVGhpcyBtZXRo b2RzIGFkZCB0aGUgbGlzdCBvZiBmaWxlcyBpbiBhbiBleGlzdGluZyBhcmNoaXZlLg0KICAvLyAgIElm IGEgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IGlzIGFkZGVkIGF0IHRo ZSBlbmQgb2YgdGhlDQogIC8vICAgYXJjaGl2ZSwgdGhlIGZpcnN0IG9uZSBpcyBzdGlsbCBwcmVzZW50 Lg0KICAvLyAgIElmIHRoZSBhcmNoaXZlIGRvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkLg0KICAv LyBQYXJhbWV0ZXJzIDoNCiAgLy8gICAkcF9maWxlbGlzdCA6IEFuIGFycmF5IGNvbnRhaW5pbmcgZmls ZSBvciBkaXJlY3RvcnkgbmFtZXMsIG9yDQogIC8vICAgICAgICAgICAgICAgICBhIHN0cmluZyBjb250 YWluaW5nIG9uZSBmaWxlbmFtZSBvciBvbmUgZGlyZWN0b3J5IG5hbWUsIG9yDQogIC8vICAgICAgICAg ICAgICAgICBhIHN0cmluZyBjb250YWluaW5nIGEgbGlzdCBvZiBmaWxlbmFtZXMgYW5kL29yIGRpcmVj dG9yeQ0KICAvLyAgICAgICAgICAgICAgICAgbmFtZXMgc2VwYXJhdGVkIGJ5IHNwYWNlcy4NCiAgLy8g ICAkcF9hZGRfZGlyIDogQSBwYXRoIHRvIGFkZCBiZWZvcmUgdGhlIHJlYWwgcGF0aCBvZiB0aGUgYXJj aGl2ZWQgZmlsZSwNCiAgLy8gICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gaGF2ZSBpdCBtZW1vcml6 ZWQgaW4gdGhlIGFyY2hpdmUuDQogIC8vICAgJHBfcmVtb3ZlX2RpciA6IEEgcGF0aCB0byByZW1vdmUg ZnJvbSB0aGUgcmVhbCBwYXRoIG9mIHRoZSBmaWxlIHRvIGFyY2hpdmUsDQogIC8vICAgICAgICAgICAg ICAgICAgIGluIG9yZGVyIHRvIGhhdmUgYSBzaG9ydGVyIHBhdGggbWVtb3JpemVkIGluIHRoZSBhcmNo aXZlLg0KICAvLyAgICAgICAgICAgICAgICAgICBXaGVuICRwX2FkZF9kaXIgYW5kICRwX3JlbW92ZV9k aXIgYXJlIHNldCwgJHBfcmVtb3ZlX2Rpcg0KICAvLyAgICAgICAgICAgICAgICAgICBpcyByZW1vdmVk IGZpcnN0LCBiZWZvcmUgJHBfYWRkX2RpciBpcyBhZGRlZC4NCiAgLy8gT3B0aW9ucyA6DQogIC8vICAg UENMWklQX09QVF9BRERfUEFUSCA6DQogIC8vICAgUENMWklQX09QVF9SRU1PVkVfUEFUSCA6DQogIC8v ICAgUENMWklQX09QVF9SRU1PVkVfQUxMX1BBVEggOg0KICAvLyAgIFBDTFpJUF9PUFRfQ09NTUVOVCA6 DQogIC8vICAgUENMWklQX09QVF9BRERfQ09NTUVOVCA6DQogIC8vICAgUENMWklQX09QVF9QUkVQRU5E X0NPTU1FTlQgOg0KICAvLyAgIFBDTFpJUF9DQl9QUkVfQUREIDoNCiAgLy8gICBQQ0xaSVBfQ0JfUE9T VF9BREQgOg0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAgLy8gICAwIG9uIGZhaWx1cmUsDQogIC8vICAg

VGhlIGxpc3Qgb2YgdGhlIGFkZGVkIGZpbGVzLCB3aXRoIGEgc3RhdHVzIG9mIHRoZSBhZGQgYWN0aW9u Lg0KICAvLyAgIChzZWUgUGNsWmlwOjpsaXN0Q29udGVudCgpIGZvciBsaXN0IGVudHJ5IGZvcm1hdCkN CiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gYWRkKCRwX2ZpbGVsaXN0KQ0KICB7 DQogICAgJHZfcmVzdWx0PTE7DQoNCiAgICAvLyAtLS0tLSBSZXNldCB0aGUgZXJyb3IgaGFuZGxlcg0K ICAgICR0aGlzLT5wcml2RXJyb3JSZXNldCgpOw0KDQogICAgLy8gLS0tLS0gU2V0IGRlZmF1bHQgdmFs dWVzDQogICAgJHZfb3B0aW9ucyA9IGFycmF5KCk7DQogICAgJHZfb3B0aW9uc1tQQ0xaSVBfT1BUX05P X0NPTVBSRVNTSU9OXSA9IEZBTFNFOw0KDQogICAgLy8gLS0tLS0gTG9vayBmb3IgdmFyaWFibGUgb3B0 aW9ucyBhcmd1bWVudHMNCiAgICAkdl9zaXplID0gZnVuY19udW1fYXJncygpOw0KDQogICAgLy8gLS0t LS0gTG9vayBmb3IgYXJndW1lbnRzDQogICAgaWYgKCR2X3NpemUgPiAxKSB7DQogICAgICAvLyAtLS0t LSBHZXQgdGhlIGFyZ3VtZW50cw0KICAgICAgJHZfYXJnX2xpc3QgPSBmdW5jX2dldF9hcmdzKCk7DQoN CiAgICAgIC8vIC0tLS0tIFJlbW92ZSBmb3JtIHRoZSBvcHRpb25zIGxpc3QgdGhlIGZpcnN0IGFyZ3Vt ZW50DQogICAgICBhcnJheV9zaGlmdCgkdl9hcmdfbGlzdCk7DQogICAgICAkdl9zaXplLS07DQoNCiAg ICAgIC8vIC0tLS0tIExvb2sgZm9yIGZpcnN0IGFyZw0KICAgICAgaWYgKChpc19pbnRlZ2VyKCR2X2Fy Z19saXN0WzBdKSkgJiYgKCR2X2FyZ19saXN0WzBdID4gNzcwMDApKSB7DQoNCiAgICAgICAgLy8gLS0t LS0gUGFyc2UgdGhlIG9wdGlvbnMNCiAgICAgICAgJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZQYXJzZU9w dGlvbnMoJHZfYXJnX2xpc3QsICR2X3NpemUsICR2X29wdGlvbnMsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IChQQ0xaSVBfT1BUX1JFTU9WRV9QQVRIID0+ICdv cHRpb25hbCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQQ0xaSVBfT1BUX1JFTU9WRV9BTExfUEFUSCA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENMWklQX09QVF9BRERfUEFUSCA9PiAn b3B0aW9uYWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUENMWklQX0NCX1BSRV9BREQgPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9DQl9QT1NUX0FERCA9PiAnb3B0aW9uYWwn LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENMWklQ X09QVF9OT19DT01QUkVTU0lPTiA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUENMWklQX09QVF9DT01NRU5UID0+ICdvcHRpb25hbCcs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBf T1BUX0FERF9DT01NRU5UID0+ICdvcHRpb25hbCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfT1BUX1BSRVBFTkRfQ09NTUVOVCA9PiAnb3B0aW9u YWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENM WklQX09QVF9URU1QX0ZJTEVfVEhSRVNIT0xEID0+ICdvcHRpb25hbCcsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfT1BUX1RFTVBfRklMRV9PTiA9 PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUENMWklQX09QVF9URU1QX0ZJTEVfT0ZGID0+ICdvcHRpb25hbCcNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLCBQQ0xaSVBfT1BUX0NSWVBUID0+ ICdvcHRpb25hbCcNCgkJCQkJCQkJCQkJCSAgICkpOw0KICAgICAgICBpZiAoJHZfcmVzdWx0ICE9IDEp IHsNCiAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KICAgICAgfQ0KDQogICAgICAvLyAtLS0t LSBMb29rIGZvciAyIGFyZ3MNCiAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBzdXBwb3J0IHRoZSBmaXJz dCBoaXN0b3JpYyBzeW5vcHNpcyBvZiB0aGUNCiAgICAgIC8vIG1ldGhvZC4NCiAgICAgIGVsc2Ugew0K DQogICAgICAgIC8vIC0tLS0tIEdldCB0aGUgZmlyc3QgYXJndW1lbnQNCiAgICAgICAgJHZfb3B0aW9u c1tQQ0xaSVBfT1BUX0FERF9QQVRIXSA9ICR2X2FkZF9wYXRoID0gJHZfYXJnX2xpc3RbMF07DQoNCiAg ICAgICAgLy8gLS0tLS0gTG9vayBmb3IgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudA0KICAgICAg ICBpZiAoJHZfc2l6ZSA9PSAyKSB7DQogICAgICAgICAgJHZfb3B0aW9uc1tQQ0xaSVBfT1BUX1JFTU9W RV9QQVRIXSA9ICR2X2FyZ19saXN0WzFdOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKCR2X3Np emUgPiAyKSB7DQogICAgICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAgICAgICAgUGNsWmlwOjpw cml2RXJyb3JMb2coUENMWklQX0VSUl9JTlZBTElEX1BBUkFNRVRFUiwgIkludmFsaWQgbnVtYmVyIC8g dHlwZSBvZiBhcmd1bWVudHMiKTsNCg0KICAgICAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgICAg IHJldHVybiAwOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KDQogICAgLy8gLS0tLS0gTG9vayBm b3IgZGVmYXVsdCBvcHRpb24gdmFsdWVzDQogICAgJHRoaXMtPnByaXZPcHRpb25EZWZhdWx0VGhyZXNo b2xkKCR2X29wdGlvbnMpOw0KDQogICAgLy8gLS0tLS0gSW5pdA0KICAgICR2X3N0cmluZ19saXN0ID0g YXJyYXkoKTsNCiAgICAkdl9hdHRfbGlzdCA9IGFycmF5KCk7DQogICAgJHZfZmlsZWRlc2NyX2xpc3Qg PSBhcnJheSgpOw0KICAgICRwX3Jlc3VsdF9saXN0ID0gYXJyYXkoKTsNCg0KICAgIC8vIC0tLS0tIExv b2sgaWYgdGhlICRwX2ZpbGVsaXN0IGlzIHJlYWxseSBhbiBhcnJheQ0KICAgIGlmIChpc19hcnJheSgk cF9maWxlbGlzdCkpIHsNCg0KICAgICAgLy8gLS0tLS0gTG9vayBpZiB0aGUgZmlyc3QgZWxlbWVudCBp cyBhbHNvIGFuIGFycmF5DQogICAgICAvLyAgICAgICBUaGlzIHdpbGwgbWVhbiB0aGF0IHRoaXMgaXMg YSBmaWxlIGRlc2NyaXB0aW9uIGVudHJ5DQogICAgICBpZiAoaXNzZXQoJHBfZmlsZWxpc3RbMF0pICYm IGlzX2FycmF5KCRwX2ZpbGVsaXN0WzBdKSkgew0KICAgICAgICAkdl9hdHRfbGlzdCA9ICRwX2ZpbGVs aXN0Ow0KICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBUaGUgbGlzdCBpcyBhIGxpc3Qgb2Ygc3RyaW5n IG5hbWVzDQogICAgICBlbHNlIHsNCiAgICAgICAgJHZfc3RyaW5nX2xpc3QgPSAkcF9maWxlbGlzdDsN

CiAgICAgIH0NCiAgICB9DQoNCiAgICAvLyAtLS0tLSBMb29rIGlmIHRoZSAkcF9maWxlbGlzdCBpcyBh IHN0cmluZw0KICAgIGVsc2UgaWYgKGlzX3N0cmluZygkcF9maWxlbGlzdCkpIHsNCiAgICAgIC8vIC0t LS0tIENyZWF0ZSBhIGxpc3QgZnJvbSB0aGUgc3RyaW5nDQogICAgICAkdl9zdHJpbmdfbGlzdCA9IGV4 cGxvZGUoUENMWklQX1NFUEFSQVRPUiwgJHBfZmlsZWxpc3QpOw0KICAgIH0NCg0KICAgIC8vIC0tLS0t IEludmFsaWQgdmFyaWFibGUgdHlwZSBmb3IgJHBfZmlsZWxpc3QNCiAgICBlbHNlIHsNCiAgICAgIFBj bFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9QQVJBTUVURVIsICJJbnZhbGlkIHZh cmlhYmxlIHR5cGUgJyIuZ2V0dHlwZSgkcF9maWxlbGlzdCkuIicgZm9yIHBfZmlsZWxpc3QiKTsNCiAg ICAgIHJldHVybiAwOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFJlZm9ybWF0IHRoZSBzdHJpbmcgbGlz dA0KICAgIGlmIChzaXplb2YoJHZfc3RyaW5nX2xpc3QpICE9IDApIHsNCiAgICAgIGZvcmVhY2ggKCR2 X3N0cmluZ19saXN0IGFzICR2X3N0cmluZykgew0KICAgICAgICAkdl9hdHRfbGlzdFtdW1BDTFpJUF9B VFRfRklMRV9OQU1FXSA9ICR2X3N0cmluZzsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAvLyAtLS0tLSBG b3IgZWFjaCBmaWxlIGluIHRoZSBsaXN0IGNoZWNrIHRoZSBhdHRyaWJ1dGVzDQogICAgJHZfc3VwcG9y dGVkX2F0dHJpYnV0ZXMNCiAgICA9IGFycmF5ICggUENMWklQX0FUVF9GSUxFX05BTUUgPT4gJ21hbmRh dG9yeScNCiAgICAgICAgICAgICAsUENMWklQX0FUVF9GSUxFX05FV19TSE9SVF9OQU1FID0+ICdvcHRp b25hbCcNCiAgICAgICAgICAgICAsUENMWklQX0FUVF9GSUxFX05FV19GVUxMX05BTUUgPT4gJ29wdGlv bmFsJw0KICAgICAgICAgICAgICxQQ0xaSVBfQVRUX0ZJTEVfTVRJTUUgPT4gJ29wdGlvbmFsJw0KICAg ICAgICAgICAgICxQQ0xaSVBfQVRUX0ZJTEVfQ09OVEVOVCA9PiAnb3B0aW9uYWwnDQogICAgICAgICAg ICAgLFBDTFpJUF9BVFRfRklMRV9DT01NRU5UID0+ICdvcHRpb25hbCcNCgkJCQkJCSk7DQogICAgZm9y ZWFjaCAoJHZfYXR0X2xpc3QgYXMgJHZfZW50cnkpIHsNCiAgICAgICR2X3Jlc3VsdCA9ICR0aGlzLT5w cml2RmlsZURlc2NyUGFyc2VBdHQoJHZfZW50cnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICR2X2ZpbGVkZXNjcl9saXN0W10sDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2X29wdGlvbnMsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2X3N1cHBvcnRlZF9hdHRyaWJ1dGVzKTsNCiAgICAg IGlmICgkdl9yZXN1bHQgIT0gMSkgew0KICAgICAgICByZXR1cm4gMDsNCiAgICAgIH0NCiAgICB9DQoN CiAgICAvLyAtLS0tLSBFeHBhbmQgdGhlIGZpbGVsaXN0IChleHBhbmQgZGlyZWN0b3JpZXMpDQogICAg JHZfcmVzdWx0ID0gJHRoaXMtPnByaXZGaWxlRGVzY3JFeHBhbmQoJHZfZmlsZWRlc2NyX2xpc3QsICR2 X29wdGlvbnMpOw0KICAgIGlmICgkdl9yZXN1bHQgIT0gMSkgew0KICAgICAgcmV0dXJuIDA7DQogICAg fQ0KDQogICAgLy8gLS0tLS0gQ2FsbCB0aGUgY3JlYXRlIGZjdA0KICAgICR2X3Jlc3VsdCA9ICR0aGlz LT5wcml2QWRkKCR2X2ZpbGVkZXNjcl9saXN0LCAkcF9yZXN1bHRfbGlzdCwgJHZfb3B0aW9ucyk7DQog ICAgaWYgKCR2X3Jlc3VsdCAhPSAxKSB7DQogICAgICByZXR1cm4gMDsNCiAgICB9DQoNCiAgICAvLyAt LS0tLSBSZXR1cm4NCiAgICByZXR1cm4gJHBfcmVzdWx0X2xpc3Q7DQogIH0NCiAgLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAvLyBGdW5jdGlvbiA6IGxp c3RDb250ZW50KCkNCiAgLy8gRGVzY3JpcHRpb24gOg0KICAvLyAgIFRoaXMgcHVibGljIG1ldGhvZCwg Z2l2ZXMgdGhlIGxpc3Qgb2YgdGhlIGZpbGVzIGFuZCBkaXJlY3Rvcmllcywgd2l0aCB0aGVpcg0KICAv LyAgIHByb3BlcnRpZXMuDQogIC8vICAgVGhlIHByb3BlcnRpZXMgb2YgZWFjaCBlbnRyaWVzIGluIHRo ZSBsaXN0IGFyZSAodXNlZCBhbHNvIGluIG90aGVyIGZ1bmN0aW9ucykgOg0KICAvLyAgICAgZmlsZW5h bWUgOiBOYW1lIG9mIHRoZSBmaWxlLiBGb3IgYSBjcmVhdGUgb3IgYWRkIGFjdGlvbiBpdCBpcyB0aGUg ZmlsZW5hbWUNCiAgLy8gICAgICAgICAgICAgICAgZ2l2ZW4gYnkgdGhlIHVzZXIuIEZvciBhbiBleHRy YWN0IGZ1bmN0aW9uIGl0IGlzIHRoZSBmaWxlbmFtZQ0KICAvLyAgICAgICAgICAgICAgICBvZiB0aGUg ZXh0cmFjdGVkIGZpbGUuDQogIC8vICAgICBzdG9yZWRfZmlsZW5hbWUgOiBOYW1lIG9mIHRoZSBmaWxl IC8gZGlyZWN0b3J5IHN0b3JlZCBpbiB0aGUgYXJjaGl2ZS4NCiAgLy8gICAgIHNpemUgOiBTaXplIG9m IHRoZSBzdG9yZWQgZmlsZS4NCiAgLy8gICAgIGNvbXByZXNzZWRfc2l6ZSA6IFNpemUgb2YgdGhlIGZp bGUncyBkYXRhIGNvbXByZXNzZWQgaW4gdGhlIGFyY2hpdmUNCiAgLy8gICAgICAgICAgICAgICAgICAg ICAgICh3aXRob3V0IHRoZSBoZWFkZXJzIG92ZXJoZWFkKQ0KICAvLyAgICAgbXRpbWUgOiBMYXN0IGtu b3duIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBmaWxlIChVTklYIHRpbWVzdGFtcCkNCiAgLy8gICAg IGNvbW1lbnQgOiBDb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZQ0KICAvLyAgICAgZm9sZGVy IDogdHJ1ZSB8IGZhbHNlDQogIC8vICAgICBpbmRleCA6IGluZGV4IG9mIHRoZSBmaWxlIGluIHRoZSBh cmNoaXZlDQogIC8vICAgICBzdGF0dXMgOiBzdGF0dXMgb2YgdGhlIGFjdGlvbiAoZGVwZW5kaW5nIG9m IHRoZSBhY3Rpb24pIDoNCiAgLy8gICAgICAgICAgICAgIFZhbHVlcyBhcmUgOg0KICAvLyAgICAgICAg ICAgICAgICBvayA6IE9LICENCiAgLy8gICAgICAgICAgICAgICAgZmlsdGVyZWQgOiB0aGUgZmlsZSAv IGRpciBpcyBub3QgZXh0cmFjdGVkIChmaWx0ZXJlZCBieSB1c2VyKQ0KICAvLyAgICAgICAgICAgICAg ICBhbHJlYWR5X2FfZGlyZWN0b3J5IDogdGhlIGZpbGUgY2FuIG5vdCBiZSBleHRyYWN0ZWQgYmVjYXVz ZSBhDQogIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2l0 aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzDQogIC8vICAgICAgICAgICAgICAgIHdyaXRlX3By b3RlY3RlZCA6IHRoZSBmaWxlIGNhbiBub3QgYmUgZXh0cmFjdGVkIGJlY2F1c2UgYSBmaWxlDQogIC8v ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5 IGV4aXN0cyBhbmQgaXMNCiAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUg cHJvdGVjdGVkDQogIC8vICAgICAgICAgICAgICAgIG5ld2VyX2V4aXN0IDogdGhlIGZpbGUgd2FzIG5v

dCBleHRyYWN0ZWQgYmVjYXVzZSBhIG5ld2VyIGZpbGUgZXhpc3RzDQogIC8vICAgICAgICAgICAgICAg IHBhdGhfY3JlYXRpb25fZmFpbCA6IHRoZSBmaWxlIGlzIG5vdCBleHRyYWN0ZWQgYmVjYXVzZSB0aGUg Zm9sZGVyDQogIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IGV4 aXN0IGFuZCBjYW4gbm90IGJlIGNyZWF0ZWQNCiAgLy8gICAgICAgICAgICAgICAgd3JpdGVfZXJyb3Ig OiB0aGUgZmlsZSB3YXMgbm90IGV4dHJhY3RlZCBiZWNhdXNlIHRoZXJlIHdhcyBhDQogIC8vICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Igd2hpbGUgd3JpdGluZyB0aGUgZmlsZQ0KICAvLyAg ICAgICAgICAgICAgICByZWFkX2Vycm9yIDogdGhlIGZpbGUgd2FzIG5vdCBleHRyYWN0ZWQgYmVjYXVz ZSB0aGVyZSB3YXMgYSBlcnJvcg0KICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUg cmVhZGluZyB0aGUgZmlsZQ0KICAvLyAgICAgICAgICAgICAgICBpbnZhbGlkX2hlYWRlciA6IHRoZSBm aWxlIHdhcyBub3QgZXh0cmFjdGVkIGJlY2F1c2Ugb2YgYW4gYXJjaGl2ZQ0KICAvLyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBlcnJvciAoYmFkIGZpbGUgaGVhZGVyKQ0KICAvLyAg IE5vdGUgdGhhdCBlYWNoIHRpbWUgYSBtZXRob2QgY2FuIGNvbnRpbnVlIG9wZXJhdGluZyB3aGVuIHRo ZXJlDQogIC8vICAgaXMgYW4gYWN0aW9uIGVycm9yIG9uIGEgZmlsZSwgdGhlIGVycm9yIGlzIG9ubHkg bG9nZ2VkIGluIHRoZSBmaWxlIHN0YXR1cy4NCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vICAgMCBv biBhbiB1bnJlY292ZXJhYmxlIGZhaWx1cmUsDQogIC8vICAgVGhlIGxpc3Qgb2YgdGhlIGZpbGVzIGlu IHRoZSBhcmNoaXZlLg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBsaXN0Q29u dGVudCgpDQogIHsNCiAgICAkdl9yZXN1bHQ9MTsNCg0KICAgIC8vIC0tLS0tIFJlc2V0IHRoZSBlcnJv ciBoYW5kbGVyDQogICAgJHRoaXMtPnByaXZFcnJvclJlc2V0KCk7DQoNCiAgICAvLyAtLS0tLSBDaGVj ayBhcmNoaXZlDQogICAgaWYgKCEkdGhpcy0+cHJpdkNoZWNrRm9ybWF0KCkpIHsNCiAgICAgIHJldHVy bigwKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBDYWxsIHRoZSBleHRyYWN0aW5nIGZjdA0KICAgICRw X2xpc3QgPSBhcnJheSgpOw0KICAgIGlmICgoJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZMaXN0KCRwX2xp c3QpKSAhPSAxKQ0KICAgIHsNCiAgICAgIHVuc2V0KCRwX2xpc3QpOw0KICAgICAgcmV0dXJuKDApOw0K ICAgIH0NCg0KICAgIC8vIC0tLS0tIFJldHVybg0KICAgIHJldHVybiAkcF9saXN0Ow0KICB9DQogIC8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVu Y3Rpb24gOg0KICAvLyAgIGV4dHJhY3QoJHBfcGF0aD0iLi8iLCAkcF9yZW1vdmVfcGF0aD0iIikNCiAg Ly8gICBleHRyYWN0KFskcF9vcHRpb24sICRwX29wdGlvbl92YWx1ZSwgLi4uXSkNCiAgLy8gRGVzY3Jp cHRpb24gOg0KICAvLyAgIFRoaXMgbWV0aG9kIHN1cHBvcnRzIHR3byBzeW5vcHNpcy4gVGhlIGZpcnN0 IG9uZSBpcyBoaXN0b3JpY2FsLg0KICAvLyAgIFRoaXMgbWV0aG9kIGV4dHJhY3QgYWxsIHRoZSBmaWxl cyAvIGRpcmVjdG9yaWVzIGZyb20gdGhlIGFyY2hpdmUgdG8gdGhlDQogIC8vICAgZm9sZGVyIGluZGlj YXRlZCBpbiAkcF9wYXRoLg0KICAvLyAgIElmIHlvdSB3YW50IHRvIGlnbm9yZSB0aGUgJ3Jvb3QnIHBh cnQgb2YgcGF0aCBvZiB0aGUgbWVtb3JpemVkIGZpbGVzDQogIC8vICAgeW91IGNhbiBpbmRpY2F0ZSB0 aGlzIGluIHRoZSBvcHRpb25hbCAkcF9yZW1vdmVfcGF0aCBwYXJhbWV0ZXIuDQogIC8vICAgQnkgZGVm YXVsdCwgaWYgYSBuZXdlciBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywgdGhl DQogIC8vICAgZmlsZSBpcyBub3QgZXh0cmFjdGVkLg0KICAvLw0KICAvLyAgIElmIGJvdGggUENMWklQ X09QVF9QQVRIIGFuZCBQQ0xaSVBfT1BUX0FERF9QQVRIIGFvcHRpb25zDQogIC8vICAgYXJlIHVzZWQs IHRoZSBwYXRoIGluZGljYXRlZCBpbiBQQ0xaSVBfT1BUX0FERF9QQVRIIGlzIGFwcGVuZA0KICAvLyAg IGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggdmFsdWUgb2YgUENMWklQX09QVF9QQVRILg0KICAvLyBQYXJh bWV0ZXJzIDoNCiAgLy8gICAkcF9wYXRoIDogUGF0aCB3aGVyZSB0aGUgZmlsZXMgYW5kIGRpcmVjdG9y aWVzIGFyZSB0byBiZSBleHRyYWN0ZWQNCiAgLy8gICAkcF9yZW1vdmVfcGF0aCA6IEZpcnN0IHBhcnQg KCdyb290JyBwYXJ0KSBvZiB0aGUgbWVtb3JpemVkIHBhdGgNCiAgLy8gICAgICAgICAgICAgICAgICAg IChpZiBhbnkgc2ltaWxhcikgdG8gcmVtb3ZlIHdoaWxlIGV4dHJhY3RpbmcuDQogIC8vIE9wdGlvbnMg Og0KICAvLyAgIFBDTFpJUF9PUFRfUEFUSCA6DQogIC8vICAgUENMWklQX09QVF9BRERfUEFUSCA6DQog IC8vICAgUENMWklQX09QVF9SRU1PVkVfUEFUSCA6DQogIC8vICAgUENMWklQX09QVF9SRU1PVkVfQUxM X1BBVEggOg0KICAvLyAgIFBDTFpJUF9DQl9QUkVfRVhUUkFDVCA6DQogIC8vICAgUENMWklQX0NCX1BP U1RfRVhUUkFDVCA6DQogIC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAgIDAgb3IgYSBuZWdhdGl2ZSB2 YWx1ZSBvbiBmYWlsdXJlLA0KICAvLyAgIFRoZSBsaXN0IG9mIHRoZSBleHRyYWN0ZWQgZmlsZXMsIHdp dGggYSBzdGF0dXMgb2YgdGhlIGFjdGlvbi4NCiAgLy8gICAoc2VlIFBjbFppcDo6bGlzdENvbnRlbnQo KSBmb3IgbGlzdCBlbnRyeSBmb3JtYXQpDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIGZ1bmN0 aW9uIGV4dHJhY3QoKQ0KICB7DQogICAgJHZfcmVzdWx0PTE7DQoNCiAgICAvLyAtLS0tLSBSZXNldCB0 aGUgZXJyb3IgaGFuZGxlcg0KICAgICR0aGlzLT5wcml2RXJyb3JSZXNldCgpOw0KDQogICAgLy8gLS0t LS0gQ2hlY2sgYXJjaGl2ZQ0KICAgIGlmICghJHRoaXMtPnByaXZDaGVja0Zvcm1hdCgpKSB7DQogICAg ICByZXR1cm4oMCk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gU2V0IGRlZmF1bHQgdmFsdWVzDQogICAg JHZfb3B0aW9ucyA9IGFycmF5KCk7DQovLyAgICAkdl9wYXRoID0gIi4vIjsNCiAgICAkdl9wYXRoID0g Jyc7DQogICAgJHZfcmVtb3ZlX3BhdGggPSAiIjsNCiAgICAkdl9yZW1vdmVfYWxsX3BhdGggPSBmYWxz ZTsNCg0KICAgIC8vIC0tLS0tIExvb2sgZm9yIHZhcmlhYmxlIG9wdGlvbnMgYXJndW1lbnRzDQogICAg JHZfc2l6ZSA9IGZ1bmNfbnVtX2FyZ3MoKTsNCg0KICAgIC8vIC0tLS0tIERlZmF1bHQgdmFsdWVzIGZv

ciBvcHRpb24NCiAgICAkdl9vcHRpb25zW1BDTFpJUF9PUFRfRVhUUkFDVF9BU19TVFJJTkddID0gRkFM U0U7DQoNCiAgICAvLyAtLS0tLSBMb29rIGZvciBhcmd1bWVudHMNCiAgICBpZiAoJHZfc2l6ZSA+IDAp IHsNCiAgICAgIC8vIC0tLS0tIEdldCB0aGUgYXJndW1lbnRzDQogICAgICAkdl9hcmdfbGlzdCA9IGZ1 bmNfZ2V0X2FyZ3MoKTsNCg0KICAgICAgLy8gLS0tLS0gTG9vayBmb3IgZmlyc3QgYXJnDQogICAgICBp ZiAoKGlzX2ludGVnZXIoJHZfYXJnX2xpc3RbMF0pKSAmJiAoJHZfYXJnX2xpc3RbMF0gPiA3NzAwMCkp IHsNCg0KICAgICAgICAvLyAtLS0tLSBQYXJzZSB0aGUgb3B0aW9ucw0KICAgICAgICAkdl9yZXN1bHQg PSAkdGhpcy0+cHJpdlBhcnNlT3B0aW9ucygkdl9hcmdfbGlzdCwgJHZfc2l6ZSwgJHZfb3B0aW9ucywN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgKFBDTFpJUF9P UFRfUEFUSCA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUENMWklQX09QVF9SRU1PVkVfUEFUSCA9PiAnb3B0aW9uYWwnLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENMWklQX09QVF9SRU1P VkVfQUxMX1BBVEggPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBDTFpJUF9PUFRfQUREX1BBVEggPT4gJ29wdGlvbmFsJywNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9DQl9QUkVf RVhUUkFDVCA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUENMWklQX0NCX1BPU1RfRVhUUkFDVCA9PiAnb3B0aW9uYWwnLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENMWklQX09QVF9TRVRf Q0hNT0QgPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBDTFpJUF9PUFRfQllfTkFNRSA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENMWklQX09QVF9CWV9FUkVHID0+ ICdvcHRpb25hbCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQQ0xaSVBfT1BUX0JZX1BSRUcgPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9PUFRfQllfSU5ERVggPT4gJ29wdGlv bmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBD TFpJUF9PUFRfRVhUUkFDVF9BU19TVFJJTkcgPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9PUFRfRVhUUkFDVF9JTl9PVVRQ VVQgPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBDTFpJUF9PUFRfUkVQTEFDRV9ORVdFUiA9PiAnb3B0aW9uYWwnDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsUENMWklQX09QVF9TVE9QX09O X0VSUk9SID0+ICdvcHRpb25hbCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICxQQ0xaSVBfT1BUX0VYVFJBQ1RfRElSX1JFU1RSSUNUSU9OID0+ICdvcHRpb25h bCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0xa SVBfT1BUX1RFTVBfRklMRV9USFJFU0hPTEQgPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9PUFRfVEVNUF9GSUxFX09OID0+ ICdvcHRpb25hbCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQQ0xaSVBfT1BUX1RFTVBfRklMRV9PRkYgPT4gJ29wdGlvbmFsJw0KCQkJCQkJCQkJCQkJICAg ICkpOw0KICAgICAgICBpZiAoJHZfcmVzdWx0ICE9IDEpIHsNCiAgICAgICAgICByZXR1cm4gMDsNCiAg ICAgICAgfQ0KDQogICAgICAgIC8vIC0tLS0tIFNldCB0aGUgYXJndW1lbnRzDQogICAgICAgIGlmIChp c3NldCgkdl9vcHRpb25zW1BDTFpJUF9PUFRfUEFUSF0pKSB7DQogICAgICAgICAgJHZfcGF0aCA9ICR2 X29wdGlvbnNbUENMWklQX09QVF9QQVRIXTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoaXNzZXQoJHZf b3B0aW9uc1tQQ0xaSVBfT1BUX1JFTU9WRV9QQVRIXSkpIHsNCiAgICAgICAgICAkdl9yZW1vdmVfcGF0 aCA9ICR2X29wdGlvbnNbUENMWklQX09QVF9SRU1PVkVfUEFUSF07DQogICAgICAgIH0NCiAgICAgICAg aWYgKGlzc2V0KCR2X29wdGlvbnNbUENMWklQX09QVF9SRU1PVkVfQUxMX1BBVEhdKSkgew0KICAgICAg ICAgICR2X3JlbW92ZV9hbGxfcGF0aCA9ICR2X29wdGlvbnNbUENMWklQX09QVF9SRU1PVkVfQUxMX1BB VEhdOw0KICAgICAgICB9DQogICAgICAgIGlmIChpc3NldCgkdl9vcHRpb25zW1BDTFpJUF9PUFRfQURE X1BBVEhdKSkgew0KICAgICAgICAgIC8vIC0tLS0tIENoZWNrIGZvciAnLycgaW4gbGFzdCBwYXRoIGNo YXINCiAgICAgICAgICBpZiAoKHN0cmxlbigkdl9wYXRoKSA+IDApICYmIChzdWJzdHIoJHZfcGF0aCwg LTEpICE9ICcvJykpIHsNCiAgICAgICAgICAgICR2X3BhdGggLj0gJy8nOw0KICAgICAgICAgIH0NCiAg ICAgICAgICAkdl9wYXRoIC49ICR2X29wdGlvbnNbUENMWklQX09QVF9BRERfUEFUSF07DQogICAgICAg IH0NCiAgICAgIH0NCg0KICAgICAgLy8gLS0tLS0gTG9vayBmb3IgMiBhcmdzDQogICAgICAvLyBIZXJl IHdlIG5lZWQgdG8gc3VwcG9ydCB0aGUgZmlyc3QgaGlzdG9yaWMgc3lub3BzaXMgb2YgdGhlDQogICAg ICAvLyBtZXRob2QuDQogICAgICBlbHNlIHsNCg0KICAgICAgICAvLyAtLS0tLSBHZXQgdGhlIGZpcnN0 IGFyZ3VtZW50DQogICAgICAgICR2X3BhdGggPSAkdl9hcmdfbGlzdFswXTsNCg0KICAgICAgICAvLyAt LS0tLSBMb29rIGZvciB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50DQogICAgICAgIGlmICgkdl9z aXplID09IDIpIHsNCiAgICAgICAgICAkdl9yZW1vdmVfcGF0aCA9ICR2X2FyZ19saXN0WzFdOw0KICAg ICAgICB9DQogICAgICAgIGVsc2UgaWYgKCR2X3NpemUgPiAyKSB7DQogICAgICAgICAgLy8gLS0tLS0g RXJyb3IgbG9nDQogICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9JTlZBTElE X1BBUkFNRVRFUiwgIkludmFsaWQgbnVtYmVyIC8gdHlwZSBvZiBhcmd1bWVudHMiKTsNCg0KICAgICAg ICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAgICB9 DQogICAgfQ0KDQogICAgLy8gLS0tLS0gTG9vayBmb3IgZGVmYXVsdCBvcHRpb24gdmFsdWVzDQogICAg

JHRoaXMtPnByaXZPcHRpb25EZWZhdWx0VGhyZXNob2xkKCR2X29wdGlvbnMpOw0KDQogICAgLy8gLS0t LS0gVHJhY2UNCg0KICAgIC8vIC0tLS0tIENhbGwgdGhlIGV4dHJhY3RpbmcgZmN0DQogICAgJHBfbGlz dCA9IGFycmF5KCk7DQogICAgJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZFeHRyYWN0QnlSdWxlKCRwX2xp c3QsICR2X3BhdGgsICR2X3JlbW92ZV9wYXRoLA0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAkdl9yZW1vdmVfYWxsX3BhdGgsICR2X29wdGlvbnMpOw0KICAgIGlmICgkdl9yZXN1bHQg PCAxKSB7DQogICAgICB1bnNldCgkcF9saXN0KTsNCiAgICAgIHJldHVybigwKTsNCiAgICB9DQoNCiAg ICAvLyAtLS0tLSBSZXR1cm4NCiAgICByZXR1cm4gJHBfbGlzdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOg0K ICAvLyAgIGV4dHJhY3RCeUluZGV4KCRwX2luZGV4LCAkcF9wYXRoPSIuLyIsICRwX3JlbW92ZV9wYXRo PSIiKQ0KICAvLyAgIGV4dHJhY3RCeUluZGV4KCRwX2luZGV4LCBbJHBfb3B0aW9uLCAkcF9vcHRpb25f dmFsdWUsIC4uLl0pDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gICBUaGlzIG1ldGhvZCBzdXBwb3J0 cyB0d28gc3lub3BzaXMuIFRoZSBmaXJzdCBvbmUgaXMgaGlzdG9yaWNhbC4NCiAgLy8gICBUaGlzIG1l dGhvZCBpcyBkb2luZyBhIHBhcnRpYWwgZXh0cmFjdCBvZiB0aGUgYXJjaGl2ZS4NCiAgLy8gICBUaGUg ZXh0cmFjdGVkIGZpbGVzIG9yIGZvbGRlcnMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIgaW5kZXggaW4g dGhlDQogIC8vICAgYXJjaGl2ZSAoZnJvbSAwIHRvIG4pLg0KICAvLyAgIE5vdGUgdGhhdCBpZiB0aGUg aW5kZXggaWRlbnRpZnkgYSBmb2xkZXIsIG9ubHkgdGhlIGZvbGRlciBlbnRyeSBpcw0KICAvLyAgIGV4 dHJhY3RlZCwgbm90IGFsbCB0aGUgZmlsZXMgaW5jbHVkZWQgaW4gdGhlIGFyY2hpdmUuDQogIC8vIFBh cmFtZXRlcnMgOg0KICAvLyAgICRwX2luZGV4IDogQSBzaW5nbGUgaW5kZXggKGludGVnZXIpIG9yIGEg c3RyaW5nIG9mIGluZGV4ZXMgb2YgZmlsZXMgdG8NCiAgLy8gICAgICAgICAgICAgIGV4dHJhY3QuIFRo ZSBmb3JtIG9mIHRoZSBzdHJpbmcgaXMgIjAsNC02LDgtMTIiIHdpdGggb25seSBudW1iZXJzDQogIC8v ICAgICAgICAgICAgICBhbmQgJy0nIGZvciByYW5nZSBvciAnLCcgdG8gc2VwYXJhdGUgcmFuZ2VzLiBO byBzcGFjZXMgb3IgJzsnDQogIC8vICAgICAgICAgICAgICBhcmUgYWxsb3dlZC4NCiAgLy8gICAkcF9w YXRoIDogUGF0aCB3aGVyZSB0aGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGFyZSB0byBiZSBleHRyYWN0 ZWQNCiAgLy8gICAkcF9yZW1vdmVfcGF0aCA6IEZpcnN0IHBhcnQgKCdyb290JyBwYXJ0KSBvZiB0aGUg bWVtb3JpemVkIHBhdGgNCiAgLy8gICAgICAgICAgICAgICAgICAgIChpZiBhbnkgc2ltaWxhcikgdG8g cmVtb3ZlIHdoaWxlIGV4dHJhY3RpbmcuDQogIC8vIE9wdGlvbnMgOg0KICAvLyAgIFBDTFpJUF9PUFRf UEFUSCA6DQogIC8vICAgUENMWklQX09QVF9BRERfUEFUSCA6DQogIC8vICAgUENMWklQX09QVF9SRU1P VkVfUEFUSCA6DQogIC8vICAgUENMWklQX09QVF9SRU1PVkVfQUxMX1BBVEggOg0KICAvLyAgIFBDTFpJ UF9PUFRfRVhUUkFDVF9BU19TVFJJTkcgOiBUaGUgZmlsZXMgYXJlIGV4dHJhY3RlZCBhcyBzdHJpbmdz IGFuZA0KICAvLyAgICAgbm90IGFzIGZpbGVzLg0KICAvLyAgICAgVGhlIHJlc3VsdGluZyBjb250ZW50 IGlzIGluIGEgbmV3IGZpZWxkICdjb250ZW50JyBpbiB0aGUgZmlsZQ0KICAvLyAgICAgc3RydWN0dXJl Lg0KICAvLyAgICAgVGhpcyBvcHRpb24gbXVzdCBiZSB1c2VkIGFsb25lIChhbnkgb3RoZXIgb3B0aW9u cyBhcmUgaWdub3JlZCkuDQogIC8vICAgUENMWklQX0NCX1BSRV9FWFRSQUNUIDoNCiAgLy8gICBQQ0xa SVBfQ0JfUE9TVF9FWFRSQUNUIDoNCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vICAgMCBvbiBmYWls dXJlLA0KICAvLyAgIFRoZSBsaXN0IG9mIHRoZSBleHRyYWN0ZWQgZmlsZXMsIHdpdGggYSBzdGF0dXMg b2YgdGhlIGFjdGlvbi4NCiAgLy8gICAoc2VlIFBjbFppcDo6bGlzdENvbnRlbnQoKSBmb3IgbGlzdCBl bnRyeSBmb3JtYXQpDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vZnVuY3Rpb24gZXh0cmFj dEJ5SW5kZXgoJHBfaW5kZXgsIG9wdGlvbnMuLi4pDQogIGZ1bmN0aW9uIGV4dHJhY3RCeUluZGV4KCRw X2luZGV4KQ0KICB7DQogICAgJHZfcmVzdWx0PTE7DQoNCiAgICAvLyAtLS0tLSBSZXNldCB0aGUgZXJy b3IgaGFuZGxlcg0KICAgICR0aGlzLT5wcml2RXJyb3JSZXNldCgpOw0KDQogICAgLy8gLS0tLS0gQ2hl Y2sgYXJjaGl2ZQ0KICAgIGlmICghJHRoaXMtPnByaXZDaGVja0Zvcm1hdCgpKSB7DQogICAgICByZXR1 cm4oMCk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gU2V0IGRlZmF1bHQgdmFsdWVzDQogICAgJHZfb3B0 aW9ucyA9IGFycmF5KCk7DQovLyAgICAkdl9wYXRoID0gIi4vIjsNCiAgICAkdl9wYXRoID0gJyc7DQog ICAgJHZfcmVtb3ZlX3BhdGggPSAiIjsNCiAgICAkdl9yZW1vdmVfYWxsX3BhdGggPSBmYWxzZTsNCg0K ICAgIC8vIC0tLS0tIExvb2sgZm9yIHZhcmlhYmxlIG9wdGlvbnMgYXJndW1lbnRzDQogICAgJHZfc2l6 ZSA9IGZ1bmNfbnVtX2FyZ3MoKTsNCg0KICAgIC8vIC0tLS0tIERlZmF1bHQgdmFsdWVzIGZvciBvcHRp b24NCiAgICAkdl9vcHRpb25zW1BDTFpJUF9PUFRfRVhUUkFDVF9BU19TVFJJTkddID0gRkFMU0U7DQoN CiAgICAvLyAtLS0tLSBMb29rIGZvciBhcmd1bWVudHMNCiAgICBpZiAoJHZfc2l6ZSA+IDEpIHsNCiAg ICAgIC8vIC0tLS0tIEdldCB0aGUgYXJndW1lbnRzDQogICAgICAkdl9hcmdfbGlzdCA9IGZ1bmNfZ2V0 X2FyZ3MoKTsNCg0KICAgICAgLy8gLS0tLS0gUmVtb3ZlIGZvcm0gdGhlIG9wdGlvbnMgbGlzdCB0aGUg Zmlyc3QgYXJndW1lbnQNCiAgICAgIGFycmF5X3NoaWZ0KCR2X2FyZ19saXN0KTsNCiAgICAgICR2X3Np emUtLTsNCg0KICAgICAgLy8gLS0tLS0gTG9vayBmb3IgZmlyc3QgYXJnDQogICAgICBpZiAoKGlzX2lu dGVnZXIoJHZfYXJnX2xpc3RbMF0pKSAmJiAoJHZfYXJnX2xpc3RbMF0gPiA3NzAwMCkpIHsNCg0KICAg ICAgICAvLyAtLS0tLSBQYXJzZSB0aGUgb3B0aW9ucw0KICAgICAgICAkdl9yZXN1bHQgPSAkdGhpcy0+ cHJpdlBhcnNlT3B0aW9ucygkdl9hcmdfbGlzdCwgJHZfc2l6ZSwgJHZfb3B0aW9ucywNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgKFBDTFpJUF9PUFRfUEFUSCA9 PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg

ICAgICAgUENMWklQX09QVF9SRU1PVkVfUEFUSCA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENMWklQX09QVF9SRU1PVkVfQUxMX1BB VEggPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBDTFpJUF9PUFRfRVhUUkFDVF9BU19TVFJJTkcgPT4gJ29wdGlvbmFsJywNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9PUFRfQURE X1BBVEggPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBDTFpJUF9DQl9QUkVfRVhUUkFDVCA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENMWklQX0NCX1BPU1RfRVhU UkFDVCA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUENMWklQX09QVF9TRVRfQ0hNT0QgPT4gJ29wdGlvbmFsJywNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9PUFRfUkVQTEFDRV9O RVdFUiA9PiAnb3B0aW9uYWwnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAsUENMWklQX09QVF9TVE9QX09OX0VSUk9SID0+ICdvcHRpb25hbCcNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxQQ0xaSVBfT1BUX0VYVFJB Q1RfRElSX1JFU1RSSUNUSU9OID0+ICdvcHRpb25hbCcsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfT1BUX1RFTVBfRklMRV9USFJFU0hPTEQgPT4g J29wdGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBDTFpJUF9PUFRfVEVNUF9GSUxFX09OID0+ICdvcHRpb25hbCcsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfT1BUX1RFTVBfRklMRV9PRkYg PT4gJ29wdGlvbmFsJw0KCQkJCQkJCQkJCQkJICAgKSk7DQogICAgICAgIGlmICgkdl9yZXN1bHQgIT0g MSkgew0KICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gLS0tLS0gU2V0 IHRoZSBhcmd1bWVudHMNCiAgICAgICAgaWYgKGlzc2V0KCR2X29wdGlvbnNbUENMWklQX09QVF9QQVRI XSkpIHsNCiAgICAgICAgICAkdl9wYXRoID0gJHZfb3B0aW9uc1tQQ0xaSVBfT1BUX1BBVEhdOw0KICAg ICAgICB9DQogICAgICAgIGlmIChpc3NldCgkdl9vcHRpb25zW1BDTFpJUF9PUFRfUkVNT1ZFX1BBVEhd KSkgew0KICAgICAgICAgICR2X3JlbW92ZV9wYXRoID0gJHZfb3B0aW9uc1tQQ0xaSVBfT1BUX1JFTU9W RV9QQVRIXTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoaXNzZXQoJHZfb3B0aW9uc1tQQ0xaSVBfT1BU X1JFTU9WRV9BTExfUEFUSF0pKSB7DQogICAgICAgICAgJHZfcmVtb3ZlX2FsbF9wYXRoID0gJHZfb3B0 aW9uc1tQQ0xaSVBfT1BUX1JFTU9WRV9BTExfUEFUSF07DQogICAgICAgIH0NCiAgICAgICAgaWYgKGlz c2V0KCR2X29wdGlvbnNbUENMWklQX09QVF9BRERfUEFUSF0pKSB7DQogICAgICAgICAgLy8gLS0tLS0g Q2hlY2sgZm9yICcvJyBpbiBsYXN0IHBhdGggY2hhcg0KICAgICAgICAgIGlmICgoc3RybGVuKCR2X3Bh dGgpID4gMCkgJiYgKHN1YnN0cigkdl9wYXRoLCAtMSkgIT0gJy8nKSkgew0KICAgICAgICAgICAgJHZf cGF0aCAuPSAnLyc7DQogICAgICAgICAgfQ0KICAgICAgICAgICR2X3BhdGggLj0gJHZfb3B0aW9uc1tQ Q0xaSVBfT1BUX0FERF9QQVRIXTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWlzc2V0KCR2X29wdGlv bnNbUENMWklQX09QVF9FWFRSQUNUX0FTX1NUUklOR10pKSB7DQogICAgICAgICAgJHZfb3B0aW9uc1tQ Q0xaSVBfT1BUX0VYVFJBQ1RfQVNfU1RSSU5HXSA9IEZBTFNFOw0KICAgICAgICB9DQogICAgICAgIGVs c2Ugew0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIC8vIC0tLS0tIExvb2sgZm9yIDIgYXJncw0K ICAgICAgLy8gSGVyZSB3ZSBuZWVkIHRvIHN1cHBvcnQgdGhlIGZpcnN0IGhpc3RvcmljIHN5bm9wc2lz IG9mIHRoZQ0KICAgICAgLy8gbWV0aG9kLg0KICAgICAgZWxzZSB7DQoNCiAgICAgICAgLy8gLS0tLS0g R2V0IHRoZSBmaXJzdCBhcmd1bWVudA0KICAgICAgICAkdl9wYXRoID0gJHZfYXJnX2xpc3RbMF07DQoN CiAgICAgICAgLy8gLS0tLS0gTG9vayBmb3IgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudA0KICAg ICAgICBpZiAoJHZfc2l6ZSA9PSAyKSB7DQogICAgICAgICAgJHZfcmVtb3ZlX3BhdGggPSAkdl9hcmdf bGlzdFsxXTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmICgkdl9zaXplID4gMikgew0KICAgICAg ICAgIC8vIC0tLS0tIEVycm9yIGxvZw0KICAgICAgICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJ UF9FUlJfSU5WQUxJRF9QQVJBTUVURVIsICJJbnZhbGlkIG51bWJlciAvIHR5cGUgb2YgYXJndW1lbnRz Iik7DQoNCiAgICAgICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAgICByZXR1cm4gMDsNCiAgICAg ICAgfQ0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFRyYWNlDQoNCiAgICAvLyAtLS0tLSBU cmljaw0KICAgIC8vIEhlcmUgSSB3YW50IHRvIHJldXNlIGV4dHJhY3RCeVJ1bGUoKSwgc28gSSBuZWVk IHRvIHBhcnNlIHRoZSAkcF9pbmRleA0KICAgIC8vIHdpdGggcHJpdlBhcnNlT3B0aW9ucygpDQogICAg JHZfYXJnX3RyaWNrID0gYXJyYXkgKFBDTFpJUF9PUFRfQllfSU5ERVgsICRwX2luZGV4KTsNCiAgICAk dl9vcHRpb25zX3RyaWNrID0gYXJyYXkoKTsNCiAgICAkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdlBhcnNl T3B0aW9ucygkdl9hcmdfdHJpY2ssIHNpemVvZigkdl9hcmdfdHJpY2spLCAkdl9vcHRpb25zX3RyaWNr LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IChQQ0xaSVBfT1BU X0JZX0lOREVYID0+ICdvcHRpb25hbCcgKSk7DQogICAgaWYgKCR2X3Jlc3VsdCAhPSAxKSB7DQogICAg ICAgIHJldHVybiAwOw0KICAgIH0NCiAgICAkdl9vcHRpb25zW1BDTFpJUF9PUFRfQllfSU5ERVhdID0g JHZfb3B0aW9uc190cmlja1tQQ0xaSVBfT1BUX0JZX0lOREVYXTsNCg0KICAgIC8vIC0tLS0tIExvb2sg Zm9yIGRlZmF1bHQgb3B0aW9uIHZhbHVlcw0KICAgICR0aGlzLT5wcml2T3B0aW9uRGVmYXVsdFRocmVz aG9sZCgkdl9vcHRpb25zKTsNCg0KICAgIC8vIC0tLS0tIENhbGwgdGhlIGV4dHJhY3RpbmcgZmN0DQog ICAgaWYgKCgkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdkV4dHJhY3RCeVJ1bGUoJHBfbGlzdCwgJHZfcGF0 aCwgJHZfcmVtb3ZlX3BhdGgsICR2X3JlbW92ZV9hbGxfcGF0aCwgJHZfb3B0aW9ucykpIDwgMSkgew0K ICAgICAgICByZXR1cm4oMCk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJu

ICRwX2xpc3Q7DQogIH0NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KICAvLyBGdW5jdGlvbiA6DQogIC8vICAgZGVsZXRlKFskcF9vcHRpb24sICRwX29w dGlvbl92YWx1ZSwgLi4uXSkNCiAgLy8gRGVzY3JpcHRpb24gOg0KICAvLyAgIFRoaXMgbWV0aG9kIHJl bW92ZXMgZmlsZXMgZnJvbSB0aGUgYXJjaGl2ZS4NCiAgLy8gICBJZiBubyBwYXJhbWV0ZXJzIGFyZSBn aXZlbiwgdGhlbiBhbGwgdGhlIGFyY2hpdmUgaXMgZW1wdGllZC4NCiAgLy8gUGFyYW1ldGVycyA6DQog IC8vICAgTm9uZSBvciBvcHRpb25hbCBhcmd1bWVudHMuDQogIC8vIE9wdGlvbnMgOg0KICAvLyAgIFBD TFpJUF9PUFRfQllfSU5ERVggOg0KICAvLyAgIFBDTFpJUF9PUFRfQllfTkFNRSA6DQogIC8vICAgUENM WklQX09QVF9CWV9FUkVHIDoNCiAgLy8gICBQQ0xaSVBfT1BUX0JZX1BSRUcgOg0KICAvLyBSZXR1cm4g VmFsdWVzIDoNCiAgLy8gICAwIG9uIGZhaWx1cmUsDQogIC8vICAgVGhlIGxpc3Qgb2YgdGhlIGZpbGVz IHdoaWNoIGFyZSBzdGlsbCBwcmVzZW50IGluIHRoZSBhcmNoaXZlLg0KICAvLyAgIChzZWUgUGNsWmlw OjpsaXN0Q29udGVudCgpIGZvciBsaXN0IGVudHJ5IGZvcm1hdCkNCiAgLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCiAgZnVuY3Rpb24gZGVsZXRlKCkNCiAgew0KICAgICR2X3Jlc3VsdD0xOw0KDQogICAgLy8g LS0tLS0gUmVzZXQgdGhlIGVycm9yIGhhbmRsZXINCiAgICAkdGhpcy0+cHJpdkVycm9yUmVzZXQoKTsN Cg0KICAgIC8vIC0tLS0tIENoZWNrIGFyY2hpdmUNCiAgICBpZiAoISR0aGlzLT5wcml2Q2hlY2tGb3Jt YXQoKSkgew0KICAgICAgcmV0dXJuKDApOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFNldCBkZWZhdWx0 IHZhbHVlcw0KICAgICR2X29wdGlvbnMgPSBhcnJheSgpOw0KDQogICAgLy8gLS0tLS0gTG9vayBmb3Ig dmFyaWFibGUgb3B0aW9ucyBhcmd1bWVudHMNCiAgICAkdl9zaXplID0gZnVuY19udW1fYXJncygpOw0K DQogICAgLy8gLS0tLS0gTG9vayBmb3IgYXJndW1lbnRzDQogICAgaWYgKCR2X3NpemUgPiAwKSB7DQog ICAgICAvLyAtLS0tLSBHZXQgdGhlIGFyZ3VtZW50cw0KICAgICAgJHZfYXJnX2xpc3QgPSBmdW5jX2dl dF9hcmdzKCk7DQoNCiAgICAgIC8vIC0tLS0tIFBhcnNlIHRoZSBvcHRpb25zDQogICAgICAkdl9yZXN1 bHQgPSAkdGhpcy0+cHJpdlBhcnNlT3B0aW9ucygkdl9hcmdfbGlzdCwgJHZfc2l6ZSwgJHZfb3B0aW9u cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSAoUENMWklQX09Q VF9CWV9OQU1FID0+ICdvcHRpb25hbCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBDTFpJUF9PUFRfQllfRVJFRyA9PiAnb3B0aW9uYWwnLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfT1BUX0JZX1BSRUcgPT4gJ29w dGlvbmFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENM WklQX09QVF9CWV9JTkRFWCA9PiAnb3B0aW9uYWwnICkpOw0KICAgICAgaWYgKCR2X3Jlc3VsdCAhPSAx KSB7DQogICAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQogICAgfQ0KDQogICAgLy8gLS0tLS0gTWFn aWMgcXVvdGVzIHRyaWNrDQogICAgJHRoaXMtPnByaXZEaXNhYmxlTWFnaWNRdW90ZXMoKTsNCg0KICAg IC8vIC0tLS0tIENhbGwgdGhlIGRlbGV0ZSBmY3QNCiAgICAkdl9saXN0ID0gYXJyYXkoKTsNCiAgICBp ZiAoKCR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2RGVsZXRlQnlSdWxlKCR2X2xpc3QsICR2X29wdGlvbnMp KSAhPSAxKSB7DQogICAgICAkdGhpcy0+cHJpdlN3YXBCYWNrTWFnaWNRdW90ZXMoKTsNCiAgICAgIHVu c2V0KCR2X2xpc3QpOw0KICAgICAgcmV0dXJuKDApOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIE1hZ2lj IHF1b3RlcyB0cmljaw0KICAgICR0aGlzLT5wcml2U3dhcEJhY2tNYWdpY1F1b3RlcygpOw0KDQogICAg Ly8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJuICR2X2xpc3Q7DQogIH0NCiAgLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAvLyBGdW5jdGlvbiA6IGRlbGV0 ZUJ5SW5kZXgoKQ0KICAvLyBEZXNjcmlwdGlvbiA6DQogIC8vICAgKioqKiogRGVwcmVjYXRlZCAqKioq Kg0KICAvLyAgIGRlbGV0ZShQQ0xaSVBfT1BUX0JZX0lOREVYLCAkcF9pbmRleCkgc2hvdWxkIGJlIHBy ZWZlcmVkLg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBkZWxldGVCeUluZGV4 KCRwX2luZGV4KQ0KICB7DQoNCiAgICAkcF9saXN0ID0gJHRoaXMtPmRlbGV0ZShQQ0xaSVBfT1BUX0JZ X0lOREVYLCAkcF9pbmRleCk7DQoNCiAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICByZXR1cm4gJHBfbGlz dDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQogIC8vIEZ1bmN0aW9uIDogcHJvcGVydGllcygpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8g ICBUaGlzIG1ldGhvZCBnaXZlcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgYXJjaGl2ZS4NCiAgLy8gICBU aGUgcHJvcGVydGllcyBhcmUgOg0KICAvLyAgICAgbmIgOiBOdW1iZXIgb2YgZmlsZXMgaW4gdGhlIGFy Y2hpdmUNCiAgLy8gICAgIGNvbW1lbnQgOiBDb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXJjaGl2 ZSBmaWxlDQogIC8vICAgICBzdGF0dXMgOiBub3RfZXhpc3QsIG9rDQogIC8vIFBhcmFtZXRlcnMgOg0K ICAvLyAgIE5vbmUNCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vICAgMCBvbiBmYWlsdXJlLA0KICAv LyAgIEFuIGFycmF5IHdpdGggdGhlIGFyY2hpdmUgcHJvcGVydGllcy4NCiAgLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCiAgZnVuY3Rpb24gcHJvcGVydGllcygpDQogIHsNCg0KICAgIC8vIC0tLS0tIFJlc2V0 IHRoZSBlcnJvciBoYW5kbGVyDQogICAgJHRoaXMtPnByaXZFcnJvclJlc2V0KCk7DQoNCiAgICAvLyAt

LS0tLSBNYWdpYyBxdW90ZXMgdHJpY2sNCiAgICAkdGhpcy0+cHJpdkRpc2FibGVNYWdpY1F1b3Rlcygp Ow0KDQogICAgLy8gLS0tLS0gQ2hlY2sgYXJjaGl2ZQ0KICAgIGlmICghJHRoaXMtPnByaXZDaGVja0Zv cm1hdCgpKSB7DQogICAgICAkdGhpcy0+cHJpdlN3YXBCYWNrTWFnaWNRdW90ZXMoKTsNCiAgICAgIHJl dHVybigwKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBEZWZhdWx0IHByb3BlcnRpZXMNCiAgICAkdl9w cm9wID0gYXJyYXkoKTsNCiAgICAkdl9wcm9wWydjb21tZW50J10gPSAnJzsNCiAgICAkdl9wcm9wWydu YiddID0gMDsNCiAgICAkdl9wcm9wWydzdGF0dXMnXSA9ICdub3RfZXhpc3QnOw0KDQogICAgLy8gLS0t LS0gTG9vayBpZiBmaWxlIGV4aXN0cw0KICAgIGlmIChAaXNfZmlsZSgkdGhpcy0+emlwbmFtZSkpDQog ICAgew0KICAgICAgLy8gLS0tLS0gT3BlbiB0aGUgemlwIGZpbGUNCiAgICAgIGlmICgoJHRoaXMtPnpp cF9mZCA9IEBmb3BlbigkdGhpcy0+emlwbmFtZSwgJ3JiJykpID09IDApDQogICAgICB7DQogICAgICAg ICR0aGlzLT5wcml2U3dhcEJhY2tNYWdpY1F1b3RlcygpOw0KDQogICAgICAgIC8vIC0tLS0tIEVycm9y IGxvZw0KICAgICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX1JFQURfT1BFTl9GQUlM LCAnVW5hYmxlIHRvIG9wZW4gYXJjaGl2ZSBcJycuJHRoaXMtPnppcG5hbWUuJ1wnIGluIGJpbmFyeSBy ZWFkIG1vZGUnKTsNCg0KICAgICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAgcmV0dXJuIDA7DQog ICAgICB9DQoNCiAgICAgIC8vIC0tLS0tIFJlYWQgdGhlIGNlbnRyYWwgZGlyZWN0b3J5IGluZm9ybWF0 aW9ucw0KICAgICAgJHZfY2VudHJhbF9kaXIgPSBhcnJheSgpOw0KICAgICAgaWYgKCgkdl9yZXN1bHQg PSAkdGhpcy0+cHJpdlJlYWRFbmRDZW50cmFsRGlyKCR2X2NlbnRyYWxfZGlyKSkgIT0gMSkNCiAgICAg IHsNCiAgICAgICAgJHRoaXMtPnByaXZTd2FwQmFja01hZ2ljUXVvdGVzKCk7DQogICAgICAgIHJldHVy biAwOw0KICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBDbG9zZSB0aGUgemlwIGZpbGUNCiAgICAgICR0 aGlzLT5wcml2Q2xvc2VGZCgpOw0KDQogICAgICAvLyAtLS0tLSBTZXQgdGhlIHVzZXIgYXR0cmlidXRl cw0KICAgICAgJHZfcHJvcFsnY29tbWVudCddID0gJHZfY2VudHJhbF9kaXJbJ2NvbW1lbnQnXTsNCiAg ICAgICR2X3Byb3BbJ25iJ10gPSAkdl9jZW50cmFsX2RpclsnZW50cmllcyddOw0KICAgICAgJHZfcHJv cFsnc3RhdHVzJ10gPSAnb2snOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIE1hZ2ljIHF1b3RlcyB0cmlj aw0KICAgICR0aGlzLT5wcml2U3dhcEJhY2tNYWdpY1F1b3RlcygpOw0KDQogICAgLy8gLS0tLS0gUmV0 dXJuDQogICAgcmV0dXJuICR2X3Byb3A7DQogIH0NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0K ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAvLyBGdW5jdGlvbiA6IGR1cGxpY2F0ZSgpDQogIC8v IERlc2NyaXB0aW9uIDoNCiAgLy8gICBUaGlzIG1ldGhvZCBjcmVhdGVzIGFuIGFyY2hpdmUgYnkgY29w eWluZyB0aGUgY29udGVudCBvZiBhbiBvdGhlciBvbmUuIElmDQogIC8vICAgdGhlIGFyY2hpdmUgYWxy ZWFkeSBleGlzdCwgaXQgaXMgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUgd2l0aG91dCBhbnkgd2Fybmlu Zy4NCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vICAgJHBfYXJjaGl2ZSA6IFRoZSBmaWxlbmFtZSBvZiBh IHZhbGlkIGFyY2hpdmUsIG9yDQogIC8vICAgICAgICAgICAgICAgIGEgdmFsaWQgUGNsWmlwIG9iamVj dC4NCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vICAgMSBvbiBzdWNjZXNzLg0KICAvLyAgIDAgb3Ig YSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciAoZXJyb3IgY29kZSkuDQogIC8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQogIGZ1bmN0aW9uIGR1cGxpY2F0ZSgkcF9hcmNoaXZlKQ0KICB7DQogICAgJHZfcmVzdWx0 ID0gMTsNCg0KICAgIC8vIC0tLS0tIFJlc2V0IHRoZSBlcnJvciBoYW5kbGVyDQogICAgJHRoaXMtPnBy aXZFcnJvclJlc2V0KCk7DQoNCiAgICAvLyAtLS0tLSBMb29rIGlmIHRoZSAkcF9hcmNoaXZlIGlzIGEg UGNsWmlwIG9iamVjdA0KICAgIGlmICgoaXNfb2JqZWN0KCRwX2FyY2hpdmUpKSAmJiAoZ2V0X2NsYXNz KCRwX2FyY2hpdmUpID09ICdwY2x6aXAnKSkNCiAgICB7DQoNCiAgICAgIC8vIC0tLS0tIER1cGxpY2F0 ZSB0aGUgYXJjaGl2ZQ0KICAgICAgJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZEdXBsaWNhdGUoJHBfYXJj aGl2ZS0+emlwbmFtZSk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gTG9vayBpZiB0aGUgJHBfYXJjaGl2 ZSBpcyBhIHN0cmluZyAoc28gYSBmaWxlbmFtZSkNCiAgICBlbHNlIGlmIChpc19zdHJpbmcoJHBfYXJj aGl2ZSkpDQogICAgew0KDQogICAgICAvLyAtLS0tLSBDaGVjayB0aGF0ICRwX2FyY2hpdmUgaXMgYSB2 YWxpZCB6aXAgZmlsZQ0KICAgICAgLy8gVEJDIDogU2hvdWxkIGFsc28gY2hlY2sgdGhlIGFyY2hpdmUg Zm9ybWF0DQogICAgICBpZiAoIWlzX2ZpbGUoJHBfYXJjaGl2ZSkpIHsNCiAgICAgICAgLy8gLS0tLS0g RXJyb3IgbG9nDQogICAgICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfTUlTU0lOR19G SUxFLCAiTm8gZmlsZSB3aXRoIGZpbGVuYW1lICciLiRwX2FyY2hpdmUuIiciKTsNCiAgICAgICAgJHZf cmVzdWx0ID0gUENMWklQX0VSUl9NSVNTSU5HX0ZJTEU7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAg ICAgICAgLy8gLS0tLS0gRHVwbGljYXRlIHRoZSBhcmNoaXZlDQogICAgICAgICR2X3Jlc3VsdCA9ICR0 aGlzLT5wcml2RHVwbGljYXRlKCRwX2FyY2hpdmUpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIC0t LS0tIEludmFsaWQgdmFyaWFibGUNCiAgICBlbHNlDQogICAgew0KICAgICAgLy8gLS0tLS0gRXJyb3Ig bG9nDQogICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX0lOVkFMSURfUEFSQU1FVEVS LCAiSW52YWxpZCB2YXJpYWJsZSB0eXBlIHBfYXJjaGl2ZV90b19hZGQiKTsNCiAgICAgICR2X3Jlc3Vs dCA9IFBDTFpJUF9FUlJfSU5WQUxJRF9QQVJBTUVURVI7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gUmV0 dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogbWVyZ2UoKQ0KICAvLyBE ZXNjcmlwdGlvbiA6DQogIC8vICAgVGhpcyBtZXRob2QgbWVyZ2UgdGhlICRwX2FyY2hpdmVfdG9fYWRk

IGFyY2hpdmUgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudA0KICAvLyAgIG9uZSAoJHRoaXMpLg0KICAv LyAgIElmIHRoZSBhcmNoaXZlICgkdGhpcykgZG9lcyBub3QgZXhpc3QsIHRoZSBtZXJnZSBiZWNvbWVz IGEgZHVwbGljYXRlLg0KICAvLyAgIElmIHRoZSAkcF9hcmNoaXZlX3RvX2FkZCBhcmNoaXZlIGRvZXMg bm90IGV4aXN0LCB0aGUgbWVyZ2UgaXMgYSBzdWNjZXNzLg0KICAvLyBQYXJhbWV0ZXJzIDoNCiAgLy8g ICAkcF9hcmNoaXZlX3RvX2FkZCA6IEl0IGNhbiBiZSBkaXJlY3RseSB0aGUgZmlsZW5hbWUgb2YgYSB2 YWxpZCB6aXAgYXJjaGl2ZSwNCiAgLy8gICAgICAgICAgICAgICAgICAgICAgIG9yIGEgUGNsWmlwIG9i amVjdCBhcmNoaXZlLg0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAgLy8gICAxIG9uIHN1Y2Nlc3MsDQog IC8vICAgMCBvciBuZWdhdGl2ZSB2YWx1ZXMgb24gZXJyb3IgKHNlZSBiZWxvdykuDQogIC8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQogIGZ1bmN0aW9uIG1lcmdlKCRwX2FyY2hpdmVfdG9fYWRkKQ0KICB7DQog ICAgJHZfcmVzdWx0ID0gMTsNCg0KICAgIC8vIC0tLS0tIFJlc2V0IHRoZSBlcnJvciBoYW5kbGVyDQog ICAgJHRoaXMtPnByaXZFcnJvclJlc2V0KCk7DQoNCiAgICAvLyAtLS0tLSBDaGVjayBhcmNoaXZlDQog ICAgaWYgKCEkdGhpcy0+cHJpdkNoZWNrRm9ybWF0KCkpIHsNCiAgICAgIHJldHVybigwKTsNCiAgICB9 DQoNCiAgICAvLyAtLS0tLSBMb29rIGlmIHRoZSAkcF9hcmNoaXZlX3RvX2FkZCBpcyBhIFBjbFppcCBv YmplY3QNCiAgICBpZiAoKGlzX29iamVjdCgkcF9hcmNoaXZlX3RvX2FkZCkpICYmIChnZXRfY2xhc3Mo JHBfYXJjaGl2ZV90b19hZGQpID09ICdwY2x6aXAnKSkNCiAgICB7DQoNCiAgICAgIC8vIC0tLS0tIE1l cmdlIHRoZSBhcmNoaXZlDQogICAgICAkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdk1lcmdlKCRwX2FyY2hp dmVfdG9fYWRkKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBMb29rIGlmIHRoZSAkcF9hcmNoaXZlX3Rv X2FkZCBpcyBhIHN0cmluZyAoc28gYSBmaWxlbmFtZSkNCiAgICBlbHNlIGlmIChpc19zdHJpbmcoJHBf YXJjaGl2ZV90b19hZGQpKQ0KICAgIHsNCg0KICAgICAgLy8gLS0tLS0gQ3JlYXRlIGEgdGVtcG9yYXJ5 IGFyY2hpdmUNCiAgICAgICR2X29iamVjdF9hcmNoaXZlID0gbmV3IFBjbFppcCgkcF9hcmNoaXZlX3Rv X2FkZCk7DQoNCiAgICAgIC8vIC0tLS0tIE1lcmdlIHRoZSBhcmNoaXZlDQogICAgICAkdl9yZXN1bHQg PSAkdGhpcy0+cHJpdk1lcmdlKCR2X29iamVjdF9hcmNoaXZlKTsNCiAgICB9DQoNCiAgICAvLyAtLS0t LSBJbnZhbGlkIHZhcmlhYmxlDQogICAgZWxzZQ0KICAgIHsNCiAgICAgIC8vIC0tLS0tIEVycm9yIGxv Zw0KICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9JTlZBTElEX1BBUkFNRVRFUiwg IkludmFsaWQgdmFyaWFibGUgdHlwZSBwX2FyY2hpdmVfdG9fYWRkIik7DQogICAgICAkdl9yZXN1bHQg PSBQQ0xaSVBfRVJSX0lOVkFMSURfUEFSQU1FVEVSOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFJldHVy bg0KICAgIHJldHVybiAkdl9yZXN1bHQ7DQogIH0NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0K DQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBlcnJvckNvZGUoKQ0K ICAvLyBEZXNjcmlwdGlvbiA6DQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KICBmdW5jdGlvbiBlcnJvckNvZGUoKQ0KICB7DQogICAgaWYgKFBDTFpJUF9FUlJPUl9FWFRF Uk5BTCA9PSAxKSB7DQogICAgICByZXR1cm4oUGNsRXJyb3JDb2RlKCkpOw0KICAgIH0NCiAgICBlbHNl IHsNCiAgICAgIHJldHVybigkdGhpcy0+ZXJyb3JfY29kZSk7DQogICAgfQ0KICB9DQogIC8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24g OiBlcnJvck5hbWUoKQ0KICAvLyBEZXNjcmlwdGlvbiA6DQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBlcnJvck5hbWUoJHBfd2l0aF9jb2RlPWZhbHNl KQ0KICB7DQogICAgJHZfbmFtZSA9IGFycmF5ICggUENMWklQX0VSUl9OT19FUlJPUiA9PiAnUENMWklQ X0VSUl9OT19FUlJPUicsDQogICAgICAgICAgICAgICAgICAgICAgUENMWklQX0VSUl9XUklURV9PUEVO X0ZBSUwgPT4gJ1BDTFpJUF9FUlJfV1JJVEVfT1BFTl9GQUlMJywNCiAgICAgICAgICAgICAgICAgICAg ICBQQ0xaSVBfRVJSX1JFQURfT1BFTl9GQUlMID0+ICdQQ0xaSVBfRVJSX1JFQURfT1BFTl9GQUlMJywN CiAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfRVJSX0lOVkFMSURfUEFSQU1FVEVSID0+ICdQQ0xa SVBfRVJSX0lOVkFMSURfUEFSQU1FVEVSJywNCiAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfRVJS X01JU1NJTkdfRklMRSA9PiAnUENMWklQX0VSUl9NSVNTSU5HX0ZJTEUnLA0KICAgICAgICAgICAgICAg ICAgICAgIFBDTFpJUF9FUlJfRklMRU5BTUVfVE9PX0xPTkcgPT4gJ1BDTFpJUF9FUlJfRklMRU5BTUVf VE9PX0xPTkcnLA0KICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9FUlJfSU5WQUxJRF9aSVAgPT4g J1BDTFpJUF9FUlJfSU5WQUxJRF9aSVAnLA0KICAgICAgICAgICAgICAgICAgICAgIFBDTFpJUF9FUlJf QkFEX0VYVFJBQ1RFRF9GSUxFID0+ICdQQ0xaSVBfRVJSX0JBRF9FWFRSQUNURURfRklMRScsDQogICAg ICAgICAgICAgICAgICAgICAgUENMWklQX0VSUl9ESVJfQ1JFQVRFX0ZBSUwgPT4gJ1BDTFpJUF9FUlJf RElSX0NSRUFURV9GQUlMJywNCiAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfRVJSX0JBRF9FWFRF TlNJT04gPT4gJ1BDTFpJUF9FUlJfQkFEX0VYVEVOU0lPTicsDQogICAgICAgICAgICAgICAgICAgICAg UENMWklQX0VSUl9CQURfRk9STUFUID0+ICdQQ0xaSVBfRVJSX0JBRF9GT1JNQVQnLA0KICAgICAgICAg ICAgICAgICAgICAgIFBDTFpJUF9FUlJfREVMRVRFX0ZJTEVfRkFJTCA9PiAnUENMWklQX0VSUl9ERUxF VEVfRklMRV9GQUlMJywNCiAgICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfRVJSX1JFTkFNRV9GSUxF X0ZBSUwgPT4gJ1BDTFpJUF9FUlJfUkVOQU1FX0ZJTEVfRkFJTCcsDQogICAgICAgICAgICAgICAgICAg

ICAgUENMWklQX0VSUl9CQURfQ0hFQ0tTVU0gPT4gJ1BDTFpJUF9FUlJfQkFEX0NIRUNLU1VNJywNCiAg ICAgICAgICAgICAgICAgICAgICBQQ0xaSVBfRVJSX0lOVkFMSURfQVJDSElWRV9aSVAgPT4gJ1BDTFpJ UF9FUlJfSU5WQUxJRF9BUkNISVZFX1pJUCcsDQogICAgICAgICAgICAgICAgICAgICAgUENMWklQX0VS Ul9NSVNTSU5HX09QVElPTl9WQUxVRSA9PiAnUENMWklQX0VSUl9NSVNTSU5HX09QVElPTl9WQUxVRScs DQogICAgICAgICAgICAgICAgICAgICAgUENMWklQX0VSUl9JTlZBTElEX09QVElPTl9WQUxVRSA9PiAn UENMWklQX0VSUl9JTlZBTElEX09QVElPTl9WQUxVRScsDQogICAgICAgICAgICAgICAgICAgICAgUENM WklQX0VSUl9VTlNVUFBPUlRFRF9DT01QUkVTU0lPTiA9PiAnUENMWklQX0VSUl9VTlNVUFBPUlRFRF9D T01QUkVTU0lPTicsDQogICAgICAgICAgICAgICAgICAgICAgUENMWklQX0VSUl9VTlNVUFBPUlRFRF9F TkNSWVBUSU9OID0+ICdQQ0xaSVBfRVJSX1VOU1VQUE9SVEVEX0VOQ1JZUFRJT04nDQogICAgICAgICAg ICAgICAgICAgICAgLFBDTFpJUF9FUlJfSU5WQUxJRF9BVFRSSUJVVEVfVkFMVUUgPT4gJ1BDTFpJUF9F UlJfSU5WQUxJRF9BVFRSSUJVVEVfVkFMVUUnDQogICAgICAgICAgICAgICAgICAgICAgLFBDTFpJUF9F UlJfRElSRUNUT1JZX1JFU1RSSUNUSU9OID0+ICdQQ0xaSVBfRVJSX0RJUkVDVE9SWV9SRVNUUklDVElP TicNCiAgICAgICAgICAgICAgICAgICAgKTsNCg0KICAgIGlmIChpc3NldCgkdl9uYW1lWyR0aGlzLT5l cnJvcl9jb2RlXSkpIHsNCiAgICAgICR2X3ZhbHVlID0gJHZfbmFtZVskdGhpcy0+ZXJyb3JfY29kZV07 DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgJHZfdmFsdWUgPSAnTm9OYW1lJzsNCiAgICB9DQoNCiAg ICBpZiAoJHBfd2l0aF9jb2RlKSB7DQogICAgICByZXR1cm4oJHZfdmFsdWUuJyAoJy4kdGhpcy0+ZXJy b3JfY29kZS4nKScpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIHJldHVybigkdl92YWx1ZSk7DQog ICAgfQ0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBlcnJvckluZm8oKQ0KICAvLyBEZXNjcmlwdGlvbiA6DQogIC8v IFBhcmFtZXRlcnMgOg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBlcnJvcklu Zm8oJHBfZnVsbD1mYWxzZSkNCiAgew0KICAgIGlmIChQQ0xaSVBfRVJST1JfRVhURVJOQUwgPT0gMSkg ew0KICAgICAgcmV0dXJuKFBjbEVycm9yU3RyaW5nKCkpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAg IGlmICgkcF9mdWxsKSB7DQogICAgICAgIHJldHVybigkdGhpcy0+ZXJyb3JOYW1lKHRydWUpLiIgOiAi LiR0aGlzLT5lcnJvcl9zdHJpbmcpOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQogICAgICAgIHJldHVy bigkdGhpcy0+ZXJyb3Jfc3RyaW5nLiIgW2NvZGUgIi4kdGhpcy0+ZXJyb3JfY29kZS4iXSIpOw0KICAg ICAgfQ0KICAgIH0NCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQovLyAqKioqKiBVTkRFUiBUSElTIExJTkUgQVJFIERFRklORUQgUFJJVkFURSBJ TlRFUk5BTCBGVU5DVElPTlMgKioqKioNCi8vICoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKg0KLy8gKioqKiogICAgICAgVEhFU0VTIEZV TkNUSU9OUyBNVVNUIE5PVCBCRSBVU0VEIERJUkVDVExZICAgICAgICoqKioqDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KDQoNCg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAvLyBGdW5jdGlvbiA6 IHByaXZDaGVja0Zvcm1hdCgpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gICBUaGlzIG1ldGhvZCBj aGVjayB0aGF0IHRoZSBhcmNoaXZlIGV4aXN0cyBhbmQgaXMgYSB2YWxpZCB6aXAgYXJjaGl2ZS4NCiAg Ly8gICBTZXZlcmFsIGxldmVsIG9mIGNoZWNrIGV4aXN0cy4gKGZ1dHVyKQ0KICAvLyBQYXJhbWV0ZXJz IDoNCiAgLy8gICAkcF9sZXZlbCA6IExldmVsIG9mIGNoZWNrLiBEZWZhdWx0IDAuDQogIC8vICAgICAg ICAgICAgICAwIDogQ2hlY2sgdGhlIGZpcnN0IGJ5dGVzIChtYWdpYyBjb2RlcykgKGRlZmF1bHQgdmFs dWUpKQ0KICAvLyAgICAgICAgICAgICAgMSA6IDAgKyBDaGVjayB0aGUgY2VudHJhbCBkaXJlY3Rvcnkg KGZ1dHVyKQ0KICAvLyAgICAgICAgICAgICAgMiA6IDEgKyBDaGVjayBlYWNoIGZpbGUgaGVhZGVyIChm dXR1cikNCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vICAgdHJ1ZSBvbiBzdWNjZXNzLA0KICAvLyAg IGZhbHNlIG9uIGVycm9yLCB0aGUgZXJyb3IgY29kZSBpcyBzZXQuDQogIC8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQogIGZ1bmN0aW9uIHByaXZDaGVja0Zvcm1hdCgkcF9sZXZlbD0wKQ0KICB7DQogICAgJHZf cmVzdWx0ID0gdHJ1ZTsNCg0KCS8vIC0tLS0tIFJlc2V0IHRoZSBmaWxlIHN5c3RlbSBjYWNoZQ0KICAg IGNsZWFyc3RhdGNhY2hlKCk7DQoNCiAgICAvLyAtLS0tLSBSZXNldCB0aGUgZXJyb3IgaGFuZGxlcg0K ICAgICR0aGlzLT5wcml2RXJyb3JSZXNldCgpOw0KDQogICAgLy8gLS0tLS0gTG9vayBpZiB0aGUgZmls ZSBleGl0cw0KICAgIGlmICghaXNfZmlsZSgkdGhpcy0+emlwbmFtZSkpIHsNCiAgICAgIC8vIC0tLS0t IEVycm9yIGxvZw0KICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9NSVNTSU5HX0ZJ TEUsICJNaXNzaW5nIGFyY2hpdmUgZmlsZSAnIi4kdGhpcy0+emlwbmFtZS4iJyIpOw0KICAgICAgcmV0 dXJuKGZhbHNlKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBDaGVjayB0aGF0IHRoZSBmaWxlIGlzIHJl YWRlYWJsZQ0KICAgIGlmICghaXNfcmVhZGFibGUoJHRoaXMtPnppcG5hbWUpKSB7DQogICAgICAvLyAt LS0tLSBFcnJvciBsb2cNCiAgICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfUkVBRF9P UEVOX0ZBSUwsICJVbmFibGUgdG8gcmVhZCBhcmNoaXZlICciLiR0aGlzLT56aXBuYW1lLiInIik7DQog ICAgICByZXR1cm4oZmFsc2UpOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIENoZWNrIHRoZSBtYWdpYyBj

b2RlDQogICAgLy8gVEJDDQoNCiAgICAvLyAtLS0tLSBDaGVjayB0aGUgY2VudHJhbCBoZWFkZXINCiAg ICAvLyBUQkMNCg0KICAgIC8vIC0tLS0tIENoZWNrIGVhY2ggZmlsZSBoZWFkZXINCiAgICAvLyBUQkMN Cg0KICAgIC8vIC0tLS0tIFJldHVybg0KICAgIHJldHVybiAkdl9yZXN1bHQ7DQogIH0NCiAgLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAvLyBGdW5jdGlv biA6IHByaXZQYXJzZU9wdGlvbnMoKQ0KICAvLyBEZXNjcmlwdGlvbiA6DQogIC8vICAgVGhpcyBpbnRl cm5hbCBtZXRob2RzIHJlYWRzIHRoZSB2YXJpYWJsZSBsaXN0IG9mIGFyZ3VtZW50cyAoJHBfb3B0aW9u c19saXN0LA0KICAvLyAgICRwX3NpemUpIGFuZCBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIHRoZSBvcHRp b25zIGFuZCB2YWx1ZXMgKCR2X3Jlc3VsdF9saXN0KS4NCiAgLy8gICAkdl9yZXF1ZXN0ZWRfb3B0aW9u cyBjb250YWlucyB0aGUgb3B0aW9ucyB0aGF0IGNhbiBiZSBwcmVzZW50IGFuZCB0aG9zZSB0aGF0DQog IC8vICAgbXVzdCBiZSBwcmVzZW50Lg0KICAvLyAgICR2X3JlcXVlc3RlZF9vcHRpb25zIGlzIGFuIGFy cmF5LCB3aXRoIHRoZSBvcHRpb24gdmFsdWUgYXMga2V5LCBhbmQgJ29wdGlvbmFsJywNCiAgLy8gICBv ciAnbWFuZGF0b3J5JyBhcyB2YWx1ZS4NCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vICAgU2VlIGFib3Zl Lg0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAgLy8gICAxIG9uIHN1Y2Nlc3MuDQogIC8vICAgMCBvbiBm YWlsdXJlLg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBwcml2UGFyc2VPcHRp b25zKCYkcF9vcHRpb25zX2xpc3QsICRwX3NpemUsICYkdl9yZXN1bHRfbGlzdCwgJHZfcmVxdWVzdGVk X29wdGlvbnM9ZmFsc2UpDQogIHsNCiAgICAkdl9yZXN1bHQ9MTsNCg0KICAgIC8vIC0tLS0tIFJlYWQg dGhlIG9wdGlvbnMNCiAgICAkaT0wOw0KICAgIHdoaWxlICgkaTwkcF9zaXplKSB7DQoNCiAgICAgIC8v IC0tLS0tIENoZWNrIGlmIHRoZSBvcHRpb24gaXMgc3VwcG9ydGVkDQogICAgICBpZiAoIWlzc2V0KCR2 X3JlcXVlc3RlZF9vcHRpb25zWyRwX29wdGlvbnNfbGlzdFskaV1dKSkgew0KICAgICAgICAvLyAtLS0t LSBFcnJvciBsb2cNCiAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9JTlZBTElE X1BBUkFNRVRFUiwgIkludmFsaWQgb3B0aW9uYWwgcGFyYW1ldGVyICciLiRwX29wdGlvbnNfbGlzdFsk aV0uIicgZm9yIHRoaXMgbWV0aG9kIik7DQoNCiAgICAgICAgLy8gLS0tLS0gUmV0dXJuDQogICAgICAg IHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBMb29r IGZvciBuZXh0IG9wdGlvbg0KICAgICAgc3dpdGNoICgkcF9vcHRpb25zX2xpc3RbJGldKSB7DQogICAg ICAgIC8vIC0tLS0tIExvb2sgZm9yIG9wdGlvbnMgdGhhdCByZXF1ZXN0IGEgcGF0aCB2YWx1ZQ0KICAg ICAgICBjYXNlIFBDTFpJUF9PUFRfUEFUSCA6DQogICAgICAgIGNhc2UgUENMWklQX09QVF9SRU1PVkVf UEFUSCA6DQogICAgICAgIGNhc2UgUENMWklQX09QVF9BRERfUEFUSCA6DQogICAgICAgICAgLy8gLS0t LS0gQ2hlY2sgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzDQogICAgICAgICAgaWYgKCgkaSsxKSA+PSAk cF9zaXplKSB7DQogICAgICAgICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgICAgICAgIFBjbFpp cDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfTUlTU0lOR19PUFRJT05fVkFMVUUsICJNaXNzaW5nIHBh cmFtZXRlciB2YWx1ZSBmb3Igb3B0aW9uICciLlBjbFppcFV0aWxPcHRpb25UZXh0KCRwX29wdGlvbnNf bGlzdFskaV0pLiInIik7DQoNCiAgICAgICAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgICAgICAg cmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgLy8gLS0t LS0gR2V0IHRoZSB2YWx1ZQ0KICAgICAgICAgICR2X3Jlc3VsdF9saXN0WyRwX29wdGlvbnNfbGlzdFsk aV1dID0gUGNsWmlwVXRpbFRyYW5zbGF0ZVdpblBhdGgoJHBfb3B0aW9uc19saXN0WyRpKzFdLCBGQUxT RSk7DQogICAgICAgICAgJGkrKzsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgY2FzZSBQQ0xaSVBf T1BUX1RFTVBfRklMRV9USFJFU0hPTEQgOg0KICAgICAgICAgIC8vIC0tLS0tIENoZWNrIHRoZSBudW1i ZXIgb2YgcGFyYW1ldGVycw0KICAgICAgICAgIGlmICgoJGkrMSkgPj0gJHBfc2l6ZSkgew0KICAgICAg ICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9NSVNTSU5HX09QVElPTl9WQUxVRSwg Ik1pc3NpbmcgcGFyYW1ldGVyIHZhbHVlIGZvciBvcHRpb24gJyIuUGNsWmlwVXRpbE9wdGlvblRleHQo JHBfb3B0aW9uc19saXN0WyRpXSkuIiciKTsNCiAgICAgICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9y Q29kZSgpOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIC8vIC0tLS0tIENoZWNrIGZvciBpbmNvbXBh dGlibGUgb3B0aW9ucw0KICAgICAgICAgIGlmIChpc3NldCgkdl9yZXN1bHRfbGlzdFtQQ0xaSVBfT1BU X1RFTVBfRklMRV9PRkZdKSkgew0KICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQ X0VSUl9JTlZBTElEX1BBUkFNRVRFUiwgIk9wdGlvbiAnIi5QY2xaaXBVdGlsT3B0aW9uVGV4dCgkcF9v cHRpb25zX2xpc3RbJGldKS4iJyBjYW4gbm90IGJlIHVzZWQgd2l0aCBvcHRpb24gJ1BDTFpJUF9PUFRf VEVNUF9GSUxFX09GRiciKTsNCiAgICAgICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0K ICAgICAgICAgIH0NCg0KICAgICAgICAgIC8vIC0tLS0tIENoZWNrIHRoZSB2YWx1ZQ0KICAgICAgICAg ICR2X3ZhbHVlID0gJHBfb3B0aW9uc19saXN0WyRpKzFdOw0KICAgICAgICAgIGlmICgoIWlzX2ludGVn ZXIoJHZfdmFsdWUpKSB8fCAoJHZfdmFsdWU8MCkpIHsNCiAgICAgICAgICAgIFBjbFppcDo6cHJpdkVy cm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9PUFRJT05fVkFMVUUsICJJbnRlZ2VyIGV4cGVjdGVkIGZv ciBvcHRpb24gJyIuUGNsWmlwVXRpbE9wdGlvblRleHQoJHBfb3B0aW9uc19saXN0WyRpXSkuIiciKTsN CiAgICAgICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgICAgIH0NCg0KICAg ICAgICAgIC8vIC0tLS0tIEdldCB0aGUgdmFsdWUgKGFuZCBjb252ZXJ0IGl0IGluIGJ5dGVzKQ0KICAg ICAgICAgICR2X3Jlc3VsdF9saXN0WyRwX29wdGlvbnNfbGlzdFskaV1dID0gJHZfdmFsdWUqMTA0ODU3 NjsNCiAgICAgICAgICAkaSsrOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlIFBDTFpJUF9P UFRfVEVNUF9GSUxFX09OIDoNCiAgICAgICAgICAvLyAtLS0tLSBDaGVjayBmb3IgaW5jb21wYXRpYmxl

IG9wdGlvbnMNCiAgICAgICAgICBpZiAoaXNzZXQoJHZfcmVzdWx0X2xpc3RbUENMWklQX09QVF9URU1Q X0ZJTEVfT0ZGXSkpIHsNCiAgICAgICAgICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJf SU5WQUxJRF9QQVJBTUVURVIsICJPcHRpb24gJyIuUGNsWmlwVXRpbE9wdGlvblRleHQoJHBfb3B0aW9u c19saXN0WyRpXSkuIicgY2FuIG5vdCBiZSB1c2VkIHdpdGggb3B0aW9uICdQQ0xaSVBfT1BUX1RFTVBf RklMRV9PRkYnIik7DQogICAgICAgICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICAg ICAgICB9DQoNCiAgICAgICAgICAkdl9yZXN1bHRfbGlzdFskcF9vcHRpb25zX2xpc3RbJGldXSA9IHRy dWU7DQogICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgUENMWklQX09QVF9URU1QX0ZJTEVfT0ZG IDoNCiAgICAgICAgICAvLyAtLS0tLSBDaGVjayBmb3IgaW5jb21wYXRpYmxlIG9wdGlvbnMNCiAgICAg ICAgICBpZiAoaXNzZXQoJHZfcmVzdWx0X2xpc3RbUENMWklQX09QVF9URU1QX0ZJTEVfT05dKSkgew0K ICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9JTlZBTElEX1BBUkFNRVRF UiwgIk9wdGlvbiAnIi5QY2xaaXBVdGlsT3B0aW9uVGV4dCgkcF9vcHRpb25zX2xpc3RbJGldKS4iJyBj YW4gbm90IGJlIHVzZWQgd2l0aCBvcHRpb24gJ1BDTFpJUF9PUFRfVEVNUF9GSUxFX09OJyIpOw0KICAg ICAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgICAgICAgfQ0KICAgICAgICAg IC8vIC0tLS0tIENoZWNrIGZvciBpbmNvbXBhdGlibGUgb3B0aW9ucw0KICAgICAgICAgIGlmIChpc3Nl dCgkdl9yZXN1bHRfbGlzdFtQQ0xaSVBfT1BUX1RFTVBfRklMRV9USFJFU0hPTERdKSkgew0KICAgICAg ICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9JTlZBTElEX1BBUkFNRVRFUiwgIk9w dGlvbiAnIi5QY2xaaXBVdGlsT3B0aW9uVGV4dCgkcF9vcHRpb25zX2xpc3RbJGldKS4iJyBjYW4gbm90 IGJlIHVzZWQgd2l0aCBvcHRpb24gJ1BDTFpJUF9PUFRfVEVNUF9GSUxFX1RIUkVTSE9MRCciKTsNCiAg ICAgICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgICAgIH0NCg0KICAgICAg ICAgICR2X3Jlc3VsdF9saXN0WyRwX29wdGlvbnNfbGlzdFskaV1dID0gdHJ1ZTsNCiAgICAgICAgYnJl YWs7DQoNCiAgICAgICAgY2FzZSBQQ0xaSVBfT1BUX0VYVFJBQ1RfRElSX1JFU1RSSUNUSU9OIDoNCiAg ICAgICAgICAvLyAtLS0tLSBDaGVjayB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMNCiAgICAgICAgICBp ZiAoKCRpKzEpID49ICRwX3NpemUpIHsNCiAgICAgICAgICAgIC8vIC0tLS0tIEVycm9yIGxvZw0KICAg ICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9NSVNTSU5HX09QVElPTl9WQUxV RSwgIk1pc3NpbmcgcGFyYW1ldGVyIHZhbHVlIGZvciBvcHRpb24gJyIuUGNsWmlwVXRpbE9wdGlvblRl eHQoJHBfb3B0aW9uc19saXN0WyRpXSkuIiciKTsNCg0KICAgICAgICAgICAgLy8gLS0tLS0gUmV0dXJu DQogICAgICAgICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICAgICAgICB9DQoNCiAg ICAgICAgICAvLyAtLS0tLSBHZXQgdGhlIHZhbHVlDQogICAgICAgICAgaWYgKCAgIGlzX3N0cmluZygk cF9vcHRpb25zX2xpc3RbJGkrMV0pDQogICAgICAgICAgICAgICYmICgkcF9vcHRpb25zX2xpc3RbJGkr MV0gIT0gJycpKSB7DQogICAgICAgICAgICAkdl9yZXN1bHRfbGlzdFskcF9vcHRpb25zX2xpc3RbJGld XSA9IFBjbFppcFV0aWxUcmFuc2xhdGVXaW5QYXRoKCRwX29wdGlvbnNfbGlzdFskaSsxXSwgRkFMU0Up Ow0KICAgICAgICAgICAgJGkrKzsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSB7DQogICAgICAg ICAgfQ0KICAgICAgICBicmVhazsNCg0KICAgICAgICAvLyAtLS0tLSBMb29rIGZvciBvcHRpb25zIHRo YXQgcmVxdWVzdCBhbiBhcnJheSBvZiBzdHJpbmcgZm9yIHZhbHVlDQogICAgICAgIGNhc2UgUENMWklQ X09QVF9CWV9OQU1FIDoNCiAgICAgICAgICAvLyAtLS0tLSBDaGVjayB0aGUgbnVtYmVyIG9mIHBhcmFt ZXRlcnMNCiAgICAgICAgICBpZiAoKCRpKzEpID49ICRwX3NpemUpIHsNCiAgICAgICAgICAgIC8vIC0t LS0tIEVycm9yIGxvZw0KICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9N SVNTSU5HX09QVElPTl9WQUxVRSwgIk1pc3NpbmcgcGFyYW1ldGVyIHZhbHVlIGZvciBvcHRpb24gJyIu UGNsWmlwVXRpbE9wdGlvblRleHQoJHBfb3B0aW9uc19saXN0WyRpXSkuIiciKTsNCg0KICAgICAgICAg ICAgLy8gLS0tLS0gUmV0dXJuDQogICAgICAgICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsN CiAgICAgICAgICB9DQoNCiAgICAgICAgICAvLyAtLS0tLSBHZXQgdGhlIHZhbHVlDQogICAgICAgICAg aWYgKGlzX3N0cmluZygkcF9vcHRpb25zX2xpc3RbJGkrMV0pKSB7DQogICAgICAgICAgICAgICR2X3Jl c3VsdF9saXN0WyRwX29wdGlvbnNfbGlzdFskaV1dWzBdID0gJHBfb3B0aW9uc19saXN0WyRpKzFdOw0K ICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIGlmIChpc19hcnJheSgkcF9vcHRpb25zX2xpc3RbJGkr MV0pKSB7DQogICAgICAgICAgICAgICR2X3Jlc3VsdF9saXN0WyRwX29wdGlvbnNfbGlzdFskaV1dID0g JHBfb3B0aW9uc19saXN0WyRpKzFdOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHsNCiAgICAg ICAgICAgIC8vIC0tLS0tIEVycm9yIGxvZw0KICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2co UENMWklQX0VSUl9JTlZBTElEX09QVElPTl9WQUxVRSwgIldyb25nIHBhcmFtZXRlciB2YWx1ZSBmb3Ig b3B0aW9uICciLlBjbFppcFV0aWxPcHRpb25UZXh0KCRwX29wdGlvbnNfbGlzdFskaV0pLiInIik7DQoN CiAgICAgICAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJy b3JDb2RlKCk7DQogICAgICAgICAgfQ0KICAgICAgICAgICRpKys7DQogICAgICAgIGJyZWFrOw0KDQog ICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIG9wdGlvbnMgdGhhdCByZXF1ZXN0IGFuIEVSRUcgb3IgUFJF RyBleHByZXNzaW9uDQogICAgICAgIGNhc2UgUENMWklQX09QVF9CWV9FUkVHIDoNCiAgICAgICAgICAv LyBlcmVnKCkgaXMgZGVwcmVjYXRlZCBzdGFydGluZyB3aXRoIFBIUCA1LjMuIE1vdmUgUENMWklQX09Q VF9CWV9FUkVHDQogICAgICAgICAgLy8gdG8gUENMWklQX09QVF9CWV9QUkVHDQogICAgICAgICAgJHBf b3B0aW9uc19saXN0WyRpXSA9IFBDTFpJUF9PUFRfQllfUFJFRzsNCiAgICAgICAgY2FzZSBQQ0xaSVBf T1BUX0JZX1BSRUcgOg0KICAgICAgICAvL2Nhc2UgUENMWklQX09QVF9DUllQVCA6DQogICAgICAgICAg Ly8gLS0tLS0gQ2hlY2sgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzDQogICAgICAgICAgaWYgKCgkaSsx KSA+PSAkcF9zaXplKSB7DQogICAgICAgICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgICAgICAg IFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfTUlTU0lOR19PUFRJT05fVkFMVUUsICJNaXNz

aW5nIHBhcmFtZXRlciB2YWx1ZSBmb3Igb3B0aW9uICciLlBjbFppcFV0aWxPcHRpb25UZXh0KCRwX29w dGlvbnNfbGlzdFskaV0pLiInIik7DQoNCiAgICAgICAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAg ICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgICAgICAgfQ0KDQogICAgICAgICAg Ly8gLS0tLS0gR2V0IHRoZSB2YWx1ZQ0KICAgICAgICAgIGlmIChpc19zdHJpbmcoJHBfb3B0aW9uc19s aXN0WyRpKzFdKSkgew0KICAgICAgICAgICAgICAkdl9yZXN1bHRfbGlzdFskcF9vcHRpb25zX2xpc3Rb JGldXSA9ICRwX29wdGlvbnNfbGlzdFskaSsxXTsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSB7 DQogICAgICAgICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgICAgICAgIFBjbFppcDo6cHJpdkVy cm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9PUFRJT05fVkFMVUUsICJXcm9uZyBwYXJhbWV0ZXIgdmFs dWUgZm9yIG9wdGlvbiAnIi5QY2xaaXBVdGlsT3B0aW9uVGV4dCgkcF9vcHRpb25zX2xpc3RbJGldKS4i JyIpOw0KDQogICAgICAgICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAgICAgIHJldHVybiBQY2xa aXA6OmVycm9yQ29kZSgpOw0KICAgICAgICAgIH0NCiAgICAgICAgICAkaSsrOw0KICAgICAgICBicmVh azsNCg0KICAgICAgICAvLyAtLS0tLSBMb29rIGZvciBvcHRpb25zIHRoYXQgdGFrZXMgYSBzdHJpbmcN CiAgICAgICAgY2FzZSBQQ0xaSVBfT1BUX0NPTU1FTlQgOg0KICAgICAgICBjYXNlIFBDTFpJUF9PUFRf QUREX0NPTU1FTlQgOg0KICAgICAgICBjYXNlIFBDTFpJUF9PUFRfUFJFUEVORF9DT01NRU5UIDoNCiAg ICAgICAgICAvLyAtLS0tLSBDaGVjayB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMNCiAgICAgICAgICBp ZiAoKCRpKzEpID49ICRwX3NpemUpIHsNCiAgICAgICAgICAgIC8vIC0tLS0tIEVycm9yIGxvZw0KICAg ICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9NSVNTSU5HX09QVElPTl9WQUxV RSwNCgkJCSAgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHBhcmFtZXRlciB2YWx1ZSBmb3Igb3B0 aW9uICciDQoJCQkJCQkJCSAuUGNsWmlwVXRpbE9wdGlvblRleHQoJHBfb3B0aW9uc19saXN0WyRpXSkN CgkJCQkJCQkJIC4iJyIpOw0KDQogICAgICAgICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAgICAg IHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIC8vIC0t LS0tIEdldCB0aGUgdmFsdWUNCiAgICAgICAgICBpZiAoaXNfc3RyaW5nKCRwX29wdGlvbnNfbGlzdFsk aSsxXSkpIHsNCiAgICAgICAgICAgICAgJHZfcmVzdWx0X2xpc3RbJHBfb3B0aW9uc19saXN0WyRpXV0g PSAkcF9vcHRpb25zX2xpc3RbJGkrMV07DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2Ugew0KICAg ICAgICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAgICAgICAgICBQY2xaaXA6OnByaXZFcnJvckxv ZyhQQ0xaSVBfRVJSX0lOVkFMSURfT1BUSU9OX1ZBTFVFLA0KCQkJICAgICAgICAgICAgICAgICAgICAg Ildyb25nIHBhcmFtZXRlciB2YWx1ZSBmb3Igb3B0aW9uICciDQoJCQkJCQkJCSAuUGNsWmlwVXRpbE9w dGlvblRleHQoJHBfb3B0aW9uc19saXN0WyRpXSkNCgkJCQkJCQkJIC4iJyIpOw0KDQogICAgICAgICAg ICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0K ICAgICAgICAgIH0NCiAgICAgICAgICAkaSsrOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICAvLyAt LS0tLSBMb29rIGZvciBvcHRpb25zIHRoYXQgcmVxdWVzdCBhbiBhcnJheSBvZiBpbmRleA0KICAgICAg ICBjYXNlIFBDTFpJUF9PUFRfQllfSU5ERVggOg0KICAgICAgICAgIC8vIC0tLS0tIENoZWNrIHRoZSBu dW1iZXIgb2YgcGFyYW1ldGVycw0KICAgICAgICAgIGlmICgoJGkrMSkgPj0gJHBfc2l6ZSkgew0KICAg ICAgICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAgICAgICAgICBQY2xaaXA6OnByaXZFcnJvckxv ZyhQQ0xaSVBfRVJSX01JU1NJTkdfT1BUSU9OX1ZBTFVFLCAiTWlzc2luZyBwYXJhbWV0ZXIgdmFsdWUg Zm9yIG9wdGlvbiAnIi5QY2xaaXBVdGlsT3B0aW9uVGV4dCgkcF9vcHRpb25zX2xpc3RbJGldKS4iJyIp Ow0KDQogICAgICAgICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAgICAgIHJldHVybiBQY2xaaXA6 OmVycm9yQ29kZSgpOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIC8vIC0tLS0tIEdldCB0aGUgdmFs dWUNCiAgICAgICAgICAkdl93b3JrX2xpc3QgPSBhcnJheSgpOw0KICAgICAgICAgIGlmIChpc19zdHJp bmcoJHBfb3B0aW9uc19saXN0WyRpKzFdKSkgew0KDQogICAgICAgICAgICAgIC8vIC0tLS0tIFJlbW92 ZSBzcGFjZXMNCiAgICAgICAgICAgICAgJHBfb3B0aW9uc19saXN0WyRpKzFdID0gc3RydHIoJHBfb3B0 aW9uc19saXN0WyRpKzFdLCAnICcsICcnKTsNCg0KICAgICAgICAgICAgICAvLyAtLS0tLSBQYXJzZSBp dGVtcw0KICAgICAgICAgICAgICAkdl93b3JrX2xpc3QgPSBleHBsb2RlKCIsIiwgJHBfb3B0aW9uc19s aXN0WyRpKzFdKTsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSBpZiAoaXNfaW50ZWdlcigkcF9v cHRpb25zX2xpc3RbJGkrMV0pKSB7DQogICAgICAgICAgICAgICR2X3dvcmtfbGlzdFswXSA9ICRwX29w dGlvbnNfbGlzdFskaSsxXS4nLScuJHBfb3B0aW9uc19saXN0WyRpKzFdOw0KICAgICAgICAgIH0NCiAg ICAgICAgICBlbHNlIGlmIChpc19hcnJheSgkcF9vcHRpb25zX2xpc3RbJGkrMV0pKSB7DQogICAgICAg ICAgICAgICR2X3dvcmtfbGlzdCA9ICRwX29wdGlvbnNfbGlzdFskaSsxXTsNCiAgICAgICAgICB9DQog ICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgICAgICAg IFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9PUFRJT05fVkFMVUUsICJWYWx1 ZSBtdXN0IGJlIGludGVnZXIsIHN0cmluZyBvciBhcnJheSBmb3Igb3B0aW9uICciLlBjbFppcFV0aWxP cHRpb25UZXh0KCRwX29wdGlvbnNfbGlzdFskaV0pLiInIik7DQoNCiAgICAgICAgICAgIC8vIC0tLS0t IFJldHVybg0KICAgICAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgICAgICAg fQ0KDQogICAgICAgICAgLy8gLS0tLS0gUmVkdWNlIHRoZSBpbmRleCBsaXN0DQogICAgICAgICAgLy8g ZWFjaCBpbmRleCBpdGVtIGluIHRoZSBsaXN0IG11c3QgYmUgYSBjb3VwbGUgd2l0aCBhIHN0YXJ0IGFu ZA0KICAgICAgICAgIC8vIGFuIGVuZCB2YWx1ZSA6IFswLDNdLCBbNS01XSwgWzgtMTBdLCAuLi4NCiAg ICAgICAgICAvLyAtLS0tLSBDaGVjayB0aGUgZm9ybWF0IG9mIGVhY2ggaXRlbQ0KICAgICAgICAgICR2 X3NvcnRfZmxhZz1mYWxzZTsNCiAgICAgICAgICAkdl9zb3J0X3ZhbHVlPTA7DQogICAgICAgICAgZm9y ICgkaj0wOyAkajxzaXplb2YoJHZfd29ya19saXN0KTsgJGorKykgew0KICAgICAgICAgICAgICAvLyAt LS0tLSBFeHBsb2RlIHRoZSBpdGVtDQogICAgICAgICAgICAgICR2X2l0ZW1fbGlzdCA9IGV4cGxvZGUo

Ii0iLCAkdl93b3JrX2xpc3RbJGpdKTsNCiAgICAgICAgICAgICAgJHZfc2l6ZV9pdGVtX2xpc3QgPSBz aXplb2YoJHZfaXRlbV9saXN0KTsNCg0KICAgICAgICAgICAgICAvLyAtLS0tLSBUQkMgOiBIZXJlIHdl IG1pZ2h0IGNoZWNrIHRoYXQgZWFjaCBpdGVtIGlzIGENCiAgICAgICAgICAgICAgLy8gcmVhbCBpbnRl Z2VyIC4uLg0KDQogICAgICAgICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIHNpbmdsZSB2YWx1ZQ0KICAg ICAgICAgICAgICBpZiAoJHZfc2l6ZV9pdGVtX2xpc3QgPT0gMSkgew0KICAgICAgICAgICAgICAgICAg Ly8gLS0tLS0gU2V0IHRoZSBvcHRpb24gdmFsdWUNCiAgICAgICAgICAgICAgICAgICR2X3Jlc3VsdF9s aXN0WyRwX29wdGlvbnNfbGlzdFskaV1dWyRqXVsnc3RhcnQnXSA9ICR2X2l0ZW1fbGlzdFswXTsNCiAg ICAgICAgICAgICAgICAgICR2X3Jlc3VsdF9saXN0WyRwX29wdGlvbnNfbGlzdFskaV1dWyRqXVsnZW5k J10gPSAkdl9pdGVtX2xpc3RbMF07DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZWlm ICgkdl9zaXplX2l0ZW1fbGlzdCA9PSAyKSB7DQogICAgICAgICAgICAgICAgICAvLyAtLS0tLSBTZXQg dGhlIG9wdGlvbiB2YWx1ZQ0KICAgICAgICAgICAgICAgICAgJHZfcmVzdWx0X2xpc3RbJHBfb3B0aW9u c19saXN0WyRpXV1bJGpdWydzdGFydCddID0gJHZfaXRlbV9saXN0WzBdOw0KICAgICAgICAgICAgICAg ICAgJHZfcmVzdWx0X2xpc3RbJHBfb3B0aW9uc19saXN0WyRpXV1bJGpdWydlbmQnXSA9ICR2X2l0ZW1f bGlzdFsxXTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAg ICAgICAgIC8vIC0tLS0tIEVycm9yIGxvZw0KICAgICAgICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJy b3JMb2coUENMWklQX0VSUl9JTlZBTElEX09QVElPTl9WQUxVRSwgIlRvbyBtYW55IHZhbHVlcyBpbiBp bmRleCByYW5nZSBmb3Igb3B0aW9uICciLlBjbFppcFV0aWxPcHRpb25UZXh0KCRwX29wdGlvbnNfbGlz dFskaV0pLiInIik7DQoNCiAgICAgICAgICAgICAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgICAg ICAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgICAgICAgICAgIH0NCg0KDQog ICAgICAgICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGxpc3Qgc29ydA0KICAgICAgICAgICAgICBpZiAo JHZfcmVzdWx0X2xpc3RbJHBfb3B0aW9uc19saXN0WyRpXV1bJGpdWydzdGFydCddIDwgJHZfc29ydF92 YWx1ZSkgew0KICAgICAgICAgICAgICAgICAgJHZfc29ydF9mbGFnPXRydWU7DQoNCiAgICAgICAgICAg ICAgICAgIC8vIC0tLS0tIFRCQyA6IEFuIGF1dG9tYXRpYyBzb3J0IHNob3VsZCBiZSB3cml0ZW4gLi4u DQogICAgICAgICAgICAgICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgICAgICAgICAgICAgIFBj bFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9PUFRJT05fVkFMVUUsICJJbnZhbGlk IG9yZGVyIG9mIGluZGV4IHJhbmdlIGZvciBvcHRpb24gJyIuUGNsWmlwVXRpbE9wdGlvblRleHQoJHBf b3B0aW9uc19saXN0WyRpXSkuIiciKTsNCg0KICAgICAgICAgICAgICAgICAgLy8gLS0tLS0gUmV0dXJu DQogICAgICAgICAgICAgICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgICAkdl9zb3J0X3ZhbHVlID0gJHZfcmVzdWx0X2xpc3RbJHBfb3B0aW9u c19saXN0WyRpXV1bJGpdWydzdGFydCddOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIC8vIC0tLS0t IFNvcnQgdGhlIGl0ZW1zDQogICAgICAgICAgaWYgKCR2X3NvcnRfZmxhZykgew0KICAgICAgICAgICAg ICAvLyBUQkMgOiBUbyBCZSBDb21wbGV0ZWQNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAvLyAtLS0t LSBOZXh0IG9wdGlvbg0KICAgICAgICAgICRpKys7DQogICAgICAgIGJyZWFrOw0KDQogICAgICAgIC8v IC0tLS0tIExvb2sgZm9yIG9wdGlvbnMgdGhhdCByZXF1ZXN0IG5vIHZhbHVlDQogICAgICAgIGNhc2Ug UENMWklQX09QVF9SRU1PVkVfQUxMX1BBVEggOg0KICAgICAgICBjYXNlIFBDTFpJUF9PUFRfRVhUUkFD VF9BU19TVFJJTkcgOg0KICAgICAgICBjYXNlIFBDTFpJUF9PUFRfTk9fQ09NUFJFU1NJT04gOg0KICAg ICAgICBjYXNlIFBDTFpJUF9PUFRfRVhUUkFDVF9JTl9PVVRQVVQgOg0KICAgICAgICBjYXNlIFBDTFpJ UF9PUFRfUkVQTEFDRV9ORVdFUiA6DQogICAgICAgIGNhc2UgUENMWklQX09QVF9TVE9QX09OX0VSUk9S IDoNCiAgICAgICAgICAkdl9yZXN1bHRfbGlzdFskcF9vcHRpb25zX2xpc3RbJGldXSA9IHRydWU7DQog ICAgICAgIGJyZWFrOw0KDQogICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIG9wdGlvbnMgdGhhdCByZXF1 ZXN0IGFuIG9jdGFsIHZhbHVlDQogICAgICAgIGNhc2UgUENMWklQX09QVF9TRVRfQ0hNT0QgOg0KICAg ICAgICAgIC8vIC0tLS0tIENoZWNrIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycw0KICAgICAgICAgIGlm ICgoJGkrMSkgPj0gJHBfc2l6ZSkgew0KICAgICAgICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAg ICAgICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX01JU1NJTkdfT1BUSU9OX1ZBTFVF LCAiTWlzc2luZyBwYXJhbWV0ZXIgdmFsdWUgZm9yIG9wdGlvbiAnIi5QY2xaaXBVdGlsT3B0aW9uVGV4 dCgkcF9vcHRpb25zX2xpc3RbJGldKS4iJyIpOw0KDQogICAgICAgICAgICAvLyAtLS0tLSBSZXR1cm4N CiAgICAgICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgICAgIH0NCg0KICAg ICAgICAgIC8vIC0tLS0tIEdldCB0aGUgdmFsdWUNCiAgICAgICAgICAkdl9yZXN1bHRfbGlzdFskcF9v cHRpb25zX2xpc3RbJGldXSA9ICRwX29wdGlvbnNfbGlzdFskaSsxXTsNCiAgICAgICAgICAkaSsrOw0K ICAgICAgICBicmVhazsNCg0KICAgICAgICAvLyAtLS0tLSBMb29rIGZvciBvcHRpb25zIHRoYXQgcmVx dWVzdCBhIGNhbGwtYmFjaw0KICAgICAgICBjYXNlIFBDTFpJUF9DQl9QUkVfRVhUUkFDVCA6DQogICAg ICAgIGNhc2UgUENMWklQX0NCX1BPU1RfRVhUUkFDVCA6DQogICAgICAgIGNhc2UgUENMWklQX0NCX1BS RV9BREQgOg0KICAgICAgICBjYXNlIFBDTFpJUF9DQl9QT1NUX0FERCA6DQogICAgICAgIC8qIGZvciBm dXR1ciB1c2UNCiAgICAgICAgY2FzZSBQQ0xaSVBfQ0JfUFJFX0RFTEVURSA6DQogICAgICAgIGNhc2Ug UENMWklQX0NCX1BPU1RfREVMRVRFIDoNCiAgICAgICAgY2FzZSBQQ0xaSVBfQ0JfUFJFX0xJU1QgOg0K ICAgICAgICBjYXNlIFBDTFpJUF9DQl9QT1NUX0xJU1QgOg0KICAgICAgICAqLw0KICAgICAgICAgIC8v IC0tLS0tIENoZWNrIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycw0KICAgICAgICAgIGlmICgoJGkrMSkg Pj0gJHBfc2l6ZSkgew0KICAgICAgICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAgICAgICAgICBQ Y2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX01JU1NJTkdfT1BUSU9OX1ZBTFVFLCAiTWlzc2lu ZyBwYXJhbWV0ZXIgdmFsdWUgZm9yIG9wdGlvbiAnIi5QY2xaaXBVdGlsT3B0aW9uVGV4dCgkcF9vcHRp

b25zX2xpc3RbJGldKS4iJyIpOw0KDQogICAgICAgICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAg ICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIC8v IC0tLS0tIEdldCB0aGUgdmFsdWUNCiAgICAgICAgICAkdl9mdW5jdGlvbl9uYW1lID0gJHBfb3B0aW9u c19saXN0WyRpKzFdOw0KDQogICAgICAgICAgLy8gLS0tLS0gQ2hlY2sgdGhhdCB0aGUgdmFsdWUgaXMg YSB2YWxpZCBleGlzdGluZyBmdW5jdGlvbg0KICAgICAgICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCR2 X2Z1bmN0aW9uX25hbWUpKSB7DQogICAgICAgICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgICAg ICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9PUFRJT05fVkFMVUUsICJG dW5jdGlvbiAnIi4kdl9mdW5jdGlvbl9uYW1lLiIoKScgaXMgbm90IGFuIGV4aXN0aW5nIGZ1bmN0aW9u IGZvciBvcHRpb24gJyIuUGNsWmlwVXRpbE9wdGlvblRleHQoJHBfb3B0aW9uc19saXN0WyRpXSkuIici KTsNCg0KICAgICAgICAgICAgLy8gLS0tLS0gUmV0dXJuDQogICAgICAgICAgICByZXR1cm4gUGNsWmlw OjplcnJvckNvZGUoKTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAvLyAtLS0tLSBTZXQgdGhlIGF0 dHJpYnV0ZQ0KICAgICAgICAgICR2X3Jlc3VsdF9saXN0WyRwX29wdGlvbnNfbGlzdFskaV1dID0gJHZf ZnVuY3Rpb25fbmFtZTsNCiAgICAgICAgICAkaSsrOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICBk ZWZhdWx0IDoNCiAgICAgICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgICAgICBQY2xaaXA6OnBy aXZFcnJvckxvZyhQQ0xaSVBfRVJSX0lOVkFMSURfUEFSQU1FVEVSLA0KCQkgICAgICAgICAgICAgICAg ICAgICAgICJVbmtub3duIHBhcmFtZXRlciAnIg0KCQkJCQkJCSAgIC4kcF9vcHRpb25zX2xpc3RbJGld LiInIik7DQoNCiAgICAgICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAgICByZXR1cm4gUGNsWmlw OjplcnJvckNvZGUoKTsNCiAgICAgIH0NCg0KICAgICAgLy8gLS0tLS0gTmV4dCBvcHRpb25zDQogICAg ICAkaSsrOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIExvb2sgZm9yIG1hbmRhdG9yeSBvcHRpb25zDQog ICAgaWYgKCR2X3JlcXVlc3RlZF9vcHRpb25zICE9PSBmYWxzZSkgew0KICAgICAgZm9yICgka2V5PXJl c2V0KCR2X3JlcXVlc3RlZF9vcHRpb25zKTsgJGtleT1rZXkoJHZfcmVxdWVzdGVkX29wdGlvbnMpOyAk a2V5PW5leHQoJHZfcmVxdWVzdGVkX29wdGlvbnMpKSB7DQogICAgICAgIC8vIC0tLS0tIExvb2sgZm9y IG1hbmRhdG9yeSBvcHRpb24NCiAgICAgICAgaWYgKCR2X3JlcXVlc3RlZF9vcHRpb25zWyRrZXldID09 ICdtYW5kYXRvcnknKSB7DQogICAgICAgICAgLy8gLS0tLS0gTG9vayBpZiBwcmVzZW50DQogICAgICAg ICAgaWYgKCFpc3NldCgkdl9yZXN1bHRfbGlzdFska2V5XSkpIHsNCiAgICAgICAgICAgIC8vIC0tLS0t IEVycm9yIGxvZw0KICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9JTlZB TElEX1BBUkFNRVRFUiwgIk1pc3NpbmcgbWFuZGF0b3J5IHBhcmFtZXRlciAiLlBjbFppcFV0aWxPcHRp b25UZXh0KCRrZXkpLiIoIi4ka2V5LiIpIik7DQoNCiAgICAgICAgICAgIC8vIC0tLS0tIFJldHVybg0K ICAgICAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgICAgICAgfQ0KICAgICAg ICB9DQogICAgICB9DQogICAgfQ0KDQogICAgLy8gLS0tLS0gTG9vayBmb3IgZGVmYXVsdCB2YWx1ZXMN CiAgICBpZiAoIWlzc2V0KCR2X3Jlc3VsdF9saXN0W1BDTFpJUF9PUFRfVEVNUF9GSUxFX1RIUkVTSE9M RF0pKSB7DQoNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICByZXR1cm4gJHZfcmVzdWx0 Ow0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCiAgLy8gRnVuY3Rpb24gOiBwcml2T3B0aW9uRGVmYXVsdFRocmVzaG9sZCgpDQogIC8vIERlc2Ny aXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBwcml2T3B0aW9uRGVmYXVsdFRocmVzaG9sZCgmJHBf b3B0aW9ucykNCiAgew0KICAgICR2X3Jlc3VsdD0xOw0KDQogICAgaWYgKGlzc2V0KCRwX29wdGlvbnNb UENMWklQX09QVF9URU1QX0ZJTEVfVEhSRVNIT0xEXSkNCiAgICAgICAgfHwgaXNzZXQoJHBfb3B0aW9u c1tQQ0xaSVBfT1BUX1RFTVBfRklMRV9PRkZdKSkgew0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAg ICB9DQoNCiAgICAvLyAtLS0tLSBHZXQgJ21lbW9yeV9saW1pdCcgY29uZmlndXJhdGlvbiB2YWx1ZQ0K ICAgICR2X21lbW9yeV9saW1pdCA9IGluaV9nZXQoJ21lbW9yeV9saW1pdCcpOw0KICAgICR2X21lbW9y eV9saW1pdCA9IHRyaW0oJHZfbWVtb3J5X2xpbWl0KTsNCiAgICAkbGFzdCA9IHN0cnRvbG93ZXIoc3Vi c3RyKCR2X21lbW9yeV9saW1pdCwgLTEpKTsNCg0KICAgIGlmKCRsYXN0ID09ICdnJykNCiAgICAgICAg Ly8kdl9tZW1vcnlfbGltaXQgPSAkdl9tZW1vcnlfbGltaXQqMTAyNCoxMDI0KjEwMjQ7DQogICAgICAg ICR2X21lbW9yeV9saW1pdCA9ICR2X21lbW9yeV9saW1pdCoxMDczNzQxODI0Ow0KICAgIGlmKCRsYXN0 ID09ICdtJykNCiAgICAgICAgLy8kdl9tZW1vcnlfbGltaXQgPSAkdl9tZW1vcnlfbGltaXQqMTAyNCox MDI0Ow0KICAgICAgICAkdl9tZW1vcnlfbGltaXQgPSAkdl9tZW1vcnlfbGltaXQqMTA0ODU3NjsNCiAg ICBpZigkbGFzdCA9PSAnaycpDQogICAgICAgICR2X21lbW9yeV9saW1pdCA9ICR2X21lbW9yeV9saW1p dCoxMDI0Ow0KDQogICAgJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX1RFTVBfRklMRV9USFJFU0hPTERdID0g Zmxvb3IoJHZfbWVtb3J5X2xpbWl0KlBDTFpJUF9URU1QT1JBUllfRklMRV9SQVRJTyk7DQoNCg0KICAg IC8vIC0tLS0tIFNhbml0eSBjaGVjayA6IE5vIHRocmVzaG9sZCBpZiB2YWx1ZSBsb3dlciB0aGFuIDFN DQogICAgaWYgKCRwX29wdGlvbnNbUENMWklQX09QVF9URU1QX0ZJTEVfVEhSRVNIT0xEXSA8IDEwNDg1 NzYpIHsNCiAgICAgIHVuc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9URU1QX0ZJTEVfVEhSRVNIT0xE XSk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAg fQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQog

IC8vIEZ1bmN0aW9uIDogcHJpdkZpbGVEZXNjclBhcnNlQXR0KCkNCiAgLy8gRGVzY3JpcHRpb24gOg0K ICAvLyBQYXJhbWV0ZXJzIDoNCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vICAgMSBvbiBzdWNjZXNz Lg0KICAvLyAgIDAgb24gZmFpbHVyZS4NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rp b24gcHJpdkZpbGVEZXNjclBhcnNlQXR0KCYkcF9maWxlX2xpc3QsICYkcF9maWxlZGVzY3IsICR2X29w dGlvbnMsICR2X3JlcXVlc3RlZF9vcHRpb25zPWZhbHNlKQ0KICB7DQogICAgJHZfcmVzdWx0PTE7DQoN CiAgICAvLyAtLS0tLSBGb3IgZWFjaCBmaWxlIGluIHRoZSBsaXN0IGNoZWNrIHRoZSBhdHRyaWJ1dGVz DQogICAgZm9yZWFjaCAoJHBfZmlsZV9saXN0IGFzICR2X2tleSA9PiAkdl92YWx1ZSkgew0KDQogICAg ICAvLyAtLS0tLSBDaGVjayBpZiB0aGUgb3B0aW9uIGlzIHN1cHBvcnRlZA0KICAgICAgaWYgKCFpc3Nl dCgkdl9yZXF1ZXN0ZWRfb3B0aW9uc1skdl9rZXldKSkgew0KICAgICAgICAvLyAtLS0tLSBFcnJvciBs b2cNCiAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9JTlZBTElEX1BBUkFNRVRF UiwgIkludmFsaWQgZmlsZSBhdHRyaWJ1dGUgJyIuJHZfa2V5LiInIGZvciB0aGlzIGZpbGUiKTsNCg0K ICAgICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7 DQogICAgICB9DQoNCiAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGF0dHJpYnV0ZQ0KICAgICAgc3dpdGNo ICgkdl9rZXkpIHsNCiAgICAgICAgY2FzZSBQQ0xaSVBfQVRUX0ZJTEVfTkFNRSA6DQogICAgICAgICAg aWYgKCFpc19zdHJpbmcoJHZfdmFsdWUpKSB7DQogICAgICAgICAgICBQY2xaaXA6OnByaXZFcnJvckxv ZyhQQ0xaSVBfRVJSX0lOVkFMSURfQVRUUklCVVRFX1ZBTFVFLCAiSW52YWxpZCB0eXBlICIuZ2V0dHlw ZSgkdl92YWx1ZSkuIi4gU3RyaW5nIGV4cGVjdGVkIGZvciBhdHRyaWJ1dGUgJyIuUGNsWmlwVXRpbE9w dGlvblRleHQoJHZfa2V5KS4iJyIpOw0KICAgICAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2Rl KCk7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgJHBfZmlsZWRlc2NyWydmaWxlbmFtZSddID0gUGNs WmlwVXRpbFBhdGhSZWR1Y3Rpb24oJHZfdmFsdWUpOw0KDQogICAgICAgICAgaWYgKCRwX2ZpbGVkZXNj clsnZmlsZW5hbWUnXSA9PSAnJykgew0KICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENM WklQX0VSUl9JTlZBTElEX0FUVFJJQlVURV9WQUxVRSwgIkludmFsaWQgZW1wdHkgZmlsZW5hbWUgZm9y IGF0dHJpYnV0ZSAnIi5QY2xaaXBVdGlsT3B0aW9uVGV4dCgkdl9rZXkpLiInIik7DQogICAgICAgICAg ICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgYnJlYWs7 DQoNCiAgICAgICAgY2FzZSBQQ0xaSVBfQVRUX0ZJTEVfTkVXX1NIT1JUX05BTUUgOg0KICAgICAgICAg IGlmICghaXNfc3RyaW5nKCR2X3ZhbHVlKSkgew0KICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JM b2coUENMWklQX0VSUl9JTlZBTElEX0FUVFJJQlVURV9WQUxVRSwgIkludmFsaWQgdHlwZSAiLmdldHR5 cGUoJHZfdmFsdWUpLiIuIFN0cmluZyBleHBlY3RlZCBmb3IgYXR0cmlidXRlICciLlBjbFppcFV0aWxP cHRpb25UZXh0KCR2X2tleSkuIiciKTsNCiAgICAgICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29k ZSgpOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgICRwX2ZpbGVkZXNjclsnbmV3X3Nob3J0X25hbWUn XSA9IFBjbFppcFV0aWxQYXRoUmVkdWN0aW9uKCR2X3ZhbHVlKTsNCg0KICAgICAgICAgIGlmICgkcF9m aWxlZGVzY3JbJ25ld19zaG9ydF9uYW1lJ10gPT0gJycpIHsNCiAgICAgICAgICAgIFBjbFppcDo6cHJp dkVycm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9BVFRSSUJVVEVfVkFMVUUsICJJbnZhbGlkIGVtcHR5 IHNob3J0IGZpbGVuYW1lIGZvciBhdHRyaWJ1dGUgJyIuUGNsWmlwVXRpbE9wdGlvblRleHQoJHZfa2V5 KS4iJyIpOw0KICAgICAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgICAgICAg fQ0KICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlIFBDTFpJUF9BVFRfRklMRV9ORVdfRlVMTF9O QU1FIDoNCiAgICAgICAgICBpZiAoIWlzX3N0cmluZygkdl92YWx1ZSkpIHsNCiAgICAgICAgICAgIFBj bFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9BVFRSSUJVVEVfVkFMVUUsICJJbnZh bGlkIHR5cGUgIi5nZXR0eXBlKCR2X3ZhbHVlKS4iLiBTdHJpbmcgZXhwZWN0ZWQgZm9yIGF0dHJpYnV0 ZSAnIi5QY2xaaXBVdGlsT3B0aW9uVGV4dCgkdl9rZXkpLiInIik7DQogICAgICAgICAgICByZXR1cm4g UGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAkcF9maWxlZGVzY3Jb J25ld19mdWxsX25hbWUnXSA9IFBjbFppcFV0aWxQYXRoUmVkdWN0aW9uKCR2X3ZhbHVlKTsNCg0KICAg ICAgICAgIGlmICgkcF9maWxlZGVzY3JbJ25ld19mdWxsX25hbWUnXSA9PSAnJykgew0KICAgICAgICAg ICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9JTlZBTElEX0FUVFJJQlVURV9WQUxVRSwg IkludmFsaWQgZW1wdHkgZnVsbCBmaWxlbmFtZSBmb3IgYXR0cmlidXRlICciLlBjbFppcFV0aWxPcHRp b25UZXh0KCR2X2tleSkuIiciKTsNCiAgICAgICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgp Ow0KICAgICAgICAgIH0NCiAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgLy8gLS0tLS0gTG9vayBmb3Ig b3B0aW9ucyB0aGF0IHRha2VzIGEgc3RyaW5nDQogICAgICAgIGNhc2UgUENMWklQX0FUVF9GSUxFX0NP TU1FTlQgOg0KICAgICAgICAgIGlmICghaXNfc3RyaW5nKCR2X3ZhbHVlKSkgew0KICAgICAgICAgICAg UGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9JTlZBTElEX0FUVFJJQlVURV9WQUxVRSwgIklu dmFsaWQgdHlwZSAiLmdldHR5cGUoJHZfdmFsdWUpLiIuIFN0cmluZyBleHBlY3RlZCBmb3IgYXR0cmli dXRlICciLlBjbFppcFV0aWxPcHRpb25UZXh0KCR2X2tleSkuIiciKTsNCiAgICAgICAgICAgIHJldHVy biBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgICRwX2ZpbGVkZXNj clsnY29tbWVudCddID0gJHZfdmFsdWU7DQogICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgUENM WklQX0FUVF9GSUxFX01USU1FIDoNCiAgICAgICAgICBpZiAoIWlzX2ludGVnZXIoJHZfdmFsdWUpKSB7 DQogICAgICAgICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX0lOVkFMSURfQVRUUklC VVRFX1ZBTFVFLCAiSW52YWxpZCB0eXBlICIuZ2V0dHlwZSgkdl92YWx1ZSkuIi4gSW50ZWdlciBleHBl Y3RlZCBmb3IgYXR0cmlidXRlICciLlBjbFppcFV0aWxPcHRpb25UZXh0KCR2X2tleSkuIiciKTsNCiAg ICAgICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgICAgIH0NCg0KICAgICAg

ICAgICRwX2ZpbGVkZXNjclsnbXRpbWUnXSA9ICR2X3ZhbHVlOw0KICAgICAgICBicmVhazsNCg0KICAg ICAgICBjYXNlIFBDTFpJUF9BVFRfRklMRV9DT05URU5UIDoNCiAgICAgICAgICAkcF9maWxlZGVzY3Jb J2NvbnRlbnQnXSA9ICR2X3ZhbHVlOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICBkZWZhdWx0IDoN CiAgICAgICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgICAgICBQY2xaaXA6OnByaXZFcnJvckxv ZyhQQ0xaSVBfRVJSX0lOVkFMSURfUEFSQU1FVEVSLA0KCQkgICAgICAgICAgICAgICAgICAgICAgICAg ICAiVW5rbm93biBwYXJhbWV0ZXIgJyIuJHZfa2V5LiInIik7DQoNCiAgICAgICAgICAvLyAtLS0tLSBS ZXR1cm4NCiAgICAgICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICAgIH0NCg0KICAg ICAgLy8gLS0tLS0gTG9vayBmb3IgbWFuZGF0b3J5IG9wdGlvbnMNCiAgICAgIGlmICgkdl9yZXF1ZXN0 ZWRfb3B0aW9ucyAhPT0gZmFsc2UpIHsNCiAgICAgICAgZm9yICgka2V5PXJlc2V0KCR2X3JlcXVlc3Rl ZF9vcHRpb25zKTsgJGtleT1rZXkoJHZfcmVxdWVzdGVkX29wdGlvbnMpOyAka2V5PW5leHQoJHZfcmVx dWVzdGVkX29wdGlvbnMpKSB7DQogICAgICAgICAgLy8gLS0tLS0gTG9vayBmb3IgbWFuZGF0b3J5IG9w dGlvbg0KICAgICAgICAgIGlmICgkdl9yZXF1ZXN0ZWRfb3B0aW9uc1ska2V5XSA9PSAnbWFuZGF0b3J5 Jykgew0KICAgICAgICAgICAgLy8gLS0tLS0gTG9vayBpZiBwcmVzZW50DQogICAgICAgICAgICBpZiAo IWlzc2V0KCRwX2ZpbGVfbGlzdFska2V5XSkpIHsNCiAgICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJy b3JMb2coUENMWklQX0VSUl9JTlZBTElEX1BBUkFNRVRFUiwgIk1pc3NpbmcgbWFuZGF0b3J5IHBhcmFt ZXRlciAiLlBjbFppcFV0aWxPcHRpb25UZXh0KCRrZXkpLiIoIi4ka2V5LiIpIik7DQogICAgICAgICAg ICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0N CiAgICAgICAgfQ0KICAgICAgfQ0KDQogICAgLy8gZW5kIGZvcmVhY2gNCiAgICB9DQoNCiAgICAvLyAt LS0tLSBSZXR1cm4NCiAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBwcml2Rmls ZURlc2NyRXhwYW5kKCkNCiAgLy8gRGVzY3JpcHRpb24gOg0KICAvLyAgIFRoaXMgbWV0aG9kIGxvb2sg Zm9yIGVhY2ggaXRlbSBvZiB0aGUgbGlzdCB0byBzZWUgaWYgaXRzIGEgZmlsZSwgYSBmb2xkZXINCiAg Ly8gICBvciBhIHN0cmluZyB0byBiZSBhZGRlZCBhcyBmaWxlLiBGb3IgYW55IG90aGVyIHR5cGUgb2Yg ZmlsZXMgKGxpbmssIG90aGVyKQ0KICAvLyAgIGp1c3QgaWdub3JlIHRoZSBpdGVtLg0KICAvLyAgIFRo ZW4gcHJlcGFyZSB0aGUgaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIHN0b3JlZCBmb3IgdGhhdCBmaWxl Lg0KICAvLyAgIFdoZW4gaXRzIGEgZm9sZGVyLCBleHBhbmQgdGhlIGZvbGRlciB3aXRoIGFsbCB0aGUg ZmlsZXMgdGhhdCBhcmUgaW4gdGhhdA0KICAvLyAgIGZvbGRlciAocmVjdXJzaXZlbHkpLg0KICAvLyBQ YXJhbWV0ZXJzIDoNCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vICAgMSBvbiBzdWNjZXNzLg0KICAv LyAgIDAgb24gZmFpbHVyZS4NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gcHJp dkZpbGVEZXNjckV4cGFuZCgmJHBfZmlsZWRlc2NyX2xpc3QsICYkcF9vcHRpb25zKQ0KICB7DQogICAg JHZfcmVzdWx0PTE7DQoNCiAgICAvLyAtLS0tLSBDcmVhdGUgYSByZXN1bHQgbGlzdA0KICAgICR2X3Jl c3VsdF9saXN0ID0gYXJyYXkoKTsNCg0KICAgIC8vIC0tLS0tIExvb2sgZWFjaCBlbnRyeQ0KICAgIGZv ciAoJGk9MDsgJGk8c2l6ZW9mKCRwX2ZpbGVkZXNjcl9saXN0KTsgJGkrKykgew0KDQogICAgICAvLyAt LS0tLSBHZXQgZmlsZWRlc2NyDQogICAgICAkdl9kZXNjciA9ICRwX2ZpbGVkZXNjcl9saXN0WyRpXTsN Cg0KICAgICAgLy8gLS0tLS0gUmVkdWNlIHRoZSBmaWxlbmFtZQ0KICAgICAgJHZfZGVzY3JbJ2ZpbGVu YW1lJ10gPSBQY2xaaXBVdGlsVHJhbnNsYXRlV2luUGF0aCgkdl9kZXNjclsnZmlsZW5hbWUnXSwgZmFs c2UpOw0KICAgICAgJHZfZGVzY3JbJ2ZpbGVuYW1lJ10gPSBQY2xaaXBVdGlsUGF0aFJlZHVjdGlvbigk dl9kZXNjclsnZmlsZW5hbWUnXSk7DQoNCiAgICAgIC8vIC0tLS0tIExvb2sgZm9yIHJlYWwgZmlsZSBv ciBmb2xkZXINCiAgICAgIGlmIChmaWxlX2V4aXN0cygkdl9kZXNjclsnZmlsZW5hbWUnXSkpIHsNCiAg ICAgICAgaWYgKEBpc19maWxlKCR2X2Rlc2NyWydmaWxlbmFtZSddKSkgew0KICAgICAgICAgICR2X2Rl c2NyWyd0eXBlJ10gPSAnZmlsZSc7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoQGlzX2Rpcigk dl9kZXNjclsnZmlsZW5hbWUnXSkpIHsNCiAgICAgICAgICAkdl9kZXNjclsndHlwZSddID0gJ2ZvbGRl cic7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoQGlzX2xpbmsoJHZfZGVzY3JbJ2ZpbGVuYW1l J10pKSB7DQogICAgICAgICAgLy8gc2tpcA0KICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQog ICAgICAgIGVsc2Ugew0KICAgICAgICAgIC8vIHNraXANCiAgICAgICAgICBjb250aW51ZTsNCiAgICAg ICAgfQ0KICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBMb29rIGZvciBzdHJpbmcgYWRkZWQgYXMgZmls ZQ0KICAgICAgZWxzZSBpZiAoaXNzZXQoJHZfZGVzY3JbJ2NvbnRlbnQnXSkpIHsNCiAgICAgICAgJHZf ZGVzY3JbJ3R5cGUnXSA9ICd2aXJ0dWFsX2ZpbGUnOw0KICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBN aXNzaW5nIGZpbGUNCiAgICAgIGVsc2Ugew0KICAgICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAg ICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9NSVNTSU5HX0ZJTEUsICJGaWxlICciLiR2 X2Rlc2NyWydmaWxlbmFtZSddLiInIGRvZXMgbm90IGV4aXN0Iik7DQoNCiAgICAgICAgLy8gLS0tLS0g UmV0dXJuDQogICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgfQ0KDQogICAg ICAvLyAtLS0tLSBDYWxjdWxhdGUgdGhlIHN0b3JlZCBmaWxlbmFtZQ0KICAgICAgJHRoaXMtPnByaXZD YWxjdWxhdGVTdG9yZWRGaWxlbmFtZSgkdl9kZXNjciwgJHBfb3B0aW9ucyk7DQoNCiAgICAgIC8vIC0t LS0tIEFkZCB0aGUgZGVzY3JpcHRvciBpbiByZXN1bHQgbGlzdA0KICAgICAgJHZfcmVzdWx0X2xpc3Rb c2l6ZW9mKCR2X3Jlc3VsdF9saXN0KV0gPSAkdl9kZXNjcjsNCg0KICAgICAgLy8gLS0tLS0gTG9vayBm b3IgZm9sZGVyDQogICAgICBpZiAoJHZfZGVzY3JbJ3R5cGUnXSA9PSAnZm9sZGVyJykgew0KICAgICAg

ICAvLyAtLS0tLSBMaXN0IG9mIGl0ZW1zIGluIGZvbGRlcg0KICAgICAgICAkdl9kaXJsaXN0X2Rlc2Ny ID0gYXJyYXkoKTsNCiAgICAgICAgJHZfZGlybGlzdF9uYiA9IDA7DQogICAgICAgIGlmICgkdl9mb2xk ZXJfaGFuZGxlciA9IEBvcGVuZGlyKCR2X2Rlc2NyWydmaWxlbmFtZSddKSkgew0KICAgICAgICAgIHdo aWxlICgoJHZfaXRlbV9oYW5kbGVyID0gQHJlYWRkaXIoJHZfZm9sZGVyX2hhbmRsZXIpKSAhPT0gZmFs c2UpIHsNCg0KICAgICAgICAgICAgLy8gLS0tLS0gU2tpcCAnLicgYW5kICcuLicNCiAgICAgICAgICAg IGlmICgoJHZfaXRlbV9oYW5kbGVyID09ICcuJykgfHwgKCR2X2l0ZW1faGFuZGxlciA9PSAnLi4nKSkg ew0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAv LyAtLS0tLSBDb21wb3NlIHRoZSBmdWxsIGZpbGVuYW1lDQogICAgICAgICAgICAkdl9kaXJsaXN0X2Rl c2NyWyR2X2Rpcmxpc3RfbmJdWydmaWxlbmFtZSddID0gJHZfZGVzY3JbJ2ZpbGVuYW1lJ10uJy8nLiR2 X2l0ZW1faGFuZGxlcjsNCg0KICAgICAgICAgICAgLy8gLS0tLS0gTG9vayBmb3IgZGlmZmVyZW50IHN0 b3JlZCBmaWxlbmFtZQ0KICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgbmFtZSBvZiB0aGUgZm9sZGVy IHdhcyBjaGFuZ2VkLCB0aGUgbmFtZSBvZiB0aGUNCiAgICAgICAgICAgIC8vIGZpbGVzL3N1Yi1mb2xk ZXJzIGFsc28gY2hhbmdlDQogICAgICAgICAgICBpZiAoKCR2X2Rlc2NyWydzdG9yZWRfZmlsZW5hbWUn XSAhPSAkdl9kZXNjclsnZmlsZW5hbWUnXSkNCiAgICAgICAgICAgICAgICAgJiYgKCFpc3NldCgkcF9v cHRpb25zW1BDTFpJUF9PUFRfUkVNT1ZFX0FMTF9QQVRIXSkpKSB7DQogICAgICAgICAgICAgIGlmICgk dl9kZXNjclsnc3RvcmVkX2ZpbGVuYW1lJ10gIT0gJycpIHsNCiAgICAgICAgICAgICAgICAkdl9kaXJs aXN0X2Rlc2NyWyR2X2Rpcmxpc3RfbmJdWyduZXdfZnVsbF9uYW1lJ10gPSAkdl9kZXNjclsnc3RvcmVk X2ZpbGVuYW1lJ10uJy8nLiR2X2l0ZW1faGFuZGxlcjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAkdl9kaXJsaXN0X2Rlc2NyWyR2X2Rpcmxpc3RfbmJd WyduZXdfZnVsbF9uYW1lJ10gPSAkdl9pdGVtX2hhbmRsZXI7DQogICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgIH0NCg0KICAgICAgICAgICAgJHZfZGlybGlzdF9uYisrOw0KICAgICAgICAgIH0NCg0KICAg ICAgICAgIEBjbG9zZWRpcigkdl9mb2xkZXJfaGFuZGxlcik7DQogICAgICAgIH0NCiAgICAgICAgZWxz ZSB7DQogICAgICAgICAgLy8gVEJDIDogdW5hYmxlIHRvIG9wZW4gZm9sZGVyIGluIHJlYWQgbW9kZQ0K ICAgICAgICB9DQoNCiAgICAgICAgLy8gLS0tLS0gRXhwYW5kIGVhY2ggZWxlbWVudCBvZiB0aGUgbGlz dA0KICAgICAgICBpZiAoJHZfZGlybGlzdF9uYiAhPSAwKSB7DQogICAgICAgICAgLy8gLS0tLS0gRXhw YW5kDQogICAgICAgICAgaWYgKCgkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdkZpbGVEZXNjckV4cGFuZCgk dl9kaXJsaXN0X2Rlc2NyLCAkcF9vcHRpb25zKSkgIT0gMSkgew0KICAgICAgICAgICAgcmV0dXJuICR2 X3Jlc3VsdDsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAvLyAtLS0tLSBDb25jYXQgdGhlIHJlc3Vs dGluZyBsaXN0DQogICAgICAgICAgJHZfcmVzdWx0X2xpc3QgPSBhcnJheV9tZXJnZSgkdl9yZXN1bHRf bGlzdCwgJHZfZGlybGlzdF9kZXNjcik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAg IH0NCg0KICAgICAgICAvLyAtLS0tLSBGcmVlIGxvY2FsIGFycmF5DQogICAgICAgIHVuc2V0KCR2X2Rp cmxpc3RfZGVzY3IpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIC0tLS0tIEdldCB0aGUgcmVzdWx0 IGxpc3QNCiAgICAkcF9maWxlZGVzY3JfbGlzdCA9ICR2X3Jlc3VsdF9saXN0Ow0KDQogICAgLy8gLS0t LS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdkNyZWF0 ZSgpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vIFJldHVybiBWYWx1 ZXMgOg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBwcml2Q3JlYXRlKCRwX2Zp bGVkZXNjcl9saXN0LCAmJHBfcmVzdWx0X2xpc3QsICYkcF9vcHRpb25zKQ0KICB7DQogICAgJHZfcmVz dWx0PTE7DQogICAgJHZfbGlzdF9kZXRhaWwgPSBhcnJheSgpOw0KDQogICAgLy8gLS0tLS0gTWFnaWMg cXVvdGVzIHRyaWNrDQogICAgJHRoaXMtPnByaXZEaXNhYmxlTWFnaWNRdW90ZXMoKTsNCg0KICAgIC8v IC0tLS0tIE9wZW4gdGhlIGZpbGUgaW4gd3JpdGUgbW9kZQ0KICAgIGlmICgoJHZfcmVzdWx0ID0gJHRo aXMtPnByaXZPcGVuRmQoJ3diJykpICE9IDEpDQogICAgew0KICAgICAgLy8gLS0tLS0gUmV0dXJuDQog ICAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICAgIH0NCg0KICAgIC8vIC0tLS0tIEFkZCB0aGUgbGlzdCBv ZiBmaWxlcw0KICAgICR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2QWRkTGlzdCgkcF9maWxlZGVzY3JfbGlz dCwgJHBfcmVzdWx0X2xpc3QsICRwX29wdGlvbnMpOw0KDQogICAgLy8gLS0tLS0gQ2xvc2UNCiAgICAk dGhpcy0+cHJpdkNsb3NlRmQoKTsNCg0KICAgIC8vIC0tLS0tIE1hZ2ljIHF1b3RlcyB0cmljaw0KICAg ICR0aGlzLT5wcml2U3dhcEJhY2tNYWdpY1F1b3RlcygpOw0KDQogICAgLy8gLS0tLS0gUmV0dXJuDQog ICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdkFkZCgpDQogIC8vIERlc2Ny aXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBwcml2QWRkKCRwX2ZpbGVkZXNjcl9saXN0LCAmJHBf cmVzdWx0X2xpc3QsICYkcF9vcHRpb25zKQ0KICB7DQogICAgJHZfcmVzdWx0PTE7DQogICAgJHZfbGlz dF9kZXRhaWwgPSBhcnJheSgpOw0KDQogICAgLy8gLS0tLS0gTG9vayBpZiB0aGUgYXJjaGl2ZSBleGlz dHMgb3IgaXMgZW1wdHkNCiAgICBpZiAoKCFpc19maWxlKCR0aGlzLT56aXBuYW1lKSkgfHwgKGZpbGVz

aXplKCR0aGlzLT56aXBuYW1lKSA9PSAwKSkNCiAgICB7DQoNCiAgICAgIC8vIC0tLS0tIERvIGEgY3Jl YXRlDQogICAgICAkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdkNyZWF0ZSgkcF9maWxlZGVzY3JfbGlzdCwg JHBfcmVzdWx0X2xpc3QsICRwX29wdGlvbnMpOw0KDQogICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAg IHJldHVybiAkdl9yZXN1bHQ7DQogICAgfQ0KICAgIC8vIC0tLS0tIE1hZ2ljIHF1b3RlcyB0cmljaw0K ICAgICR0aGlzLT5wcml2RGlzYWJsZU1hZ2ljUXVvdGVzKCk7DQoNCiAgICAvLyAtLS0tLSBPcGVuIHRo ZSB6aXAgZmlsZQ0KICAgIGlmICgoJHZfcmVzdWx0PSR0aGlzLT5wcml2T3BlbkZkKCdyYicpKSAhPSAx KQ0KICAgIHsNCiAgICAgIC8vIC0tLS0tIE1hZ2ljIHF1b3RlcyB0cmljaw0KICAgICAgJHRoaXMtPnBy aXZTd2FwQmFja01hZ2ljUXVvdGVzKCk7DQoNCiAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgcmV0 dXJuICR2X3Jlc3VsdDsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBSZWFkIHRoZSBjZW50cmFsIGRpcmVj dG9yeSBpbmZvcm1hdGlvbnMNCiAgICAkdl9jZW50cmFsX2RpciA9IGFycmF5KCk7DQogICAgaWYgKCgk dl9yZXN1bHQgPSAkdGhpcy0+cHJpdlJlYWRFbmRDZW50cmFsRGlyKCR2X2NlbnRyYWxfZGlyKSkgIT0g MSkNCiAgICB7DQogICAgICAkdGhpcy0+cHJpdkNsb3NlRmQoKTsNCiAgICAgICR0aGlzLT5wcml2U3dh cEJhY2tNYWdpY1F1b3RlcygpOw0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICB9DQoNCiAgICAv LyAtLS0tLSBHbyB0byBiZWdpbm5pbmcgb2YgRmlsZQ0KICAgIEByZXdpbmQoJHRoaXMtPnppcF9mZCk7 DQoNCiAgICAvLyAtLS0tLSBDcmVhdGVzIGEgdGVtcG9yYXkgZmlsZQ0KICAgICR2X3ppcF90ZW1wX25h bWUgPSBQQ0xaSVBfVEVNUE9SQVJZX0RJUi51bmlxaWQoJ3BjbHppcC0nKS4nLnRtcCc7DQoNCiAgICAv LyAtLS0tLSBPcGVuIHRoZSB0ZW1wb3JhcnkgZmlsZSBpbiB3cml0ZSBtb2RlDQogICAgaWYgKCgkdl96 aXBfdGVtcF9mZCA9IEBmb3Blbigkdl96aXBfdGVtcF9uYW1lLCAnd2InKSkgPT0gMCkNCiAgICB7DQog ICAgICAkdGhpcy0+cHJpdkNsb3NlRmQoKTsNCiAgICAgICR0aGlzLT5wcml2U3dhcEJhY2tNYWdpY1F1 b3RlcygpOw0KDQogICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX1JFQURfT1BFTl9G QUlMLCAnVW5hYmxlIHRvIG9wZW4gdGVtcG9yYXJ5IGZpbGUgXCcnLiR2X3ppcF90ZW1wX25hbWUuJ1wn IGluIGJpbmFyeSB3cml0ZSBtb2RlJyk7DQoNCiAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgcmV0 dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gQ29weSB0aGUgZmls ZXMgZnJvbSB0aGUgYXJjaGl2ZSB0byB0aGUgdGVtcG9yYXJ5IGZpbGUNCiAgICAvLyBUQkMgOiBIZXJl IEkgc2hvdWxkIGJldHRlciBhcHBlbmQgdGhlIGZpbGUgYW5kIGdvIGJhY2sgdG8gZXJhc2UgdGhlIGNl bnRyYWwgZGlyDQogICAgJHZfc2l6ZSA9ICR2X2NlbnRyYWxfZGlyWydvZmZzZXQnXTsNCiAgICB3aGls ZSAoJHZfc2l6ZSAhPSAwKQ0KICAgIHsNCiAgICAgICR2X3JlYWRfc2l6ZSA9ICgkdl9zaXplIDwgUENM WklQX1JFQURfQkxPQ0tfU0laRSA/ICR2X3NpemUgOiBQQ0xaSVBfUkVBRF9CTE9DS19TSVpFKTsNCiAg ICAgICR2X2J1ZmZlciA9IGZyZWFkKCR0aGlzLT56aXBfZmQsICR2X3JlYWRfc2l6ZSk7DQogICAgICBA ZndyaXRlKCR2X3ppcF90ZW1wX2ZkLCAkdl9idWZmZXIsICR2X3JlYWRfc2l6ZSk7DQogICAgICAkdl9z aXplIC09ICR2X3JlYWRfc2l6ZTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBTd2FwIHRoZSBmaWxlIGRl c2NyaXB0b3INCiAgICAvLyBIZXJlIGlzIGEgdHJpY2sgOiBJIHN3YXAgdGhlIHRlbXBvcmFyeSBmZCB3 aXRoIHRoZSB6aXAgZmQsIGluIG9yZGVyIHRvIHVzZQ0KICAgIC8vIHRoZSBmb2xsb3dpbmcgbWV0aG9k cyBvbiB0aGUgdGVtcG9yYXJ5IGZpbCBhbmQgbm90IHRoZSByZWFsIGFyY2hpdmUNCiAgICAkdl9zd2Fw ID0gJHRoaXMtPnppcF9mZDsNCiAgICAkdGhpcy0+emlwX2ZkID0gJHZfemlwX3RlbXBfZmQ7DQogICAg JHZfemlwX3RlbXBfZmQgPSAkdl9zd2FwOw0KDQogICAgLy8gLS0tLS0gQWRkIHRoZSBmaWxlcw0KICAg ICR2X2hlYWRlcl9saXN0ID0gYXJyYXkoKTsNCiAgICBpZiAoKCR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2 QWRkRmlsZUxpc3QoJHBfZmlsZWRlc2NyX2xpc3QsICR2X2hlYWRlcl9saXN0LCAkcF9vcHRpb25zKSkg IT0gMSkNCiAgICB7DQogICAgICBmY2xvc2UoJHZfemlwX3RlbXBfZmQpOw0KICAgICAgJHRoaXMtPnBy aXZDbG9zZUZkKCk7DQogICAgICBAdW5saW5rKCR2X3ppcF90ZW1wX25hbWUpOw0KICAgICAgJHRoaXMt PnByaXZTd2FwQmFja01hZ2ljUXVvdGVzKCk7DQoNCiAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAg cmV0dXJuICR2X3Jlc3VsdDsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBTdG9yZSB0aGUgb2Zmc2V0IG9m IHRoZSBjZW50cmFsIGRpcg0KICAgICR2X29mZnNldCA9IEBmdGVsbCgkdGhpcy0+emlwX2ZkKTsNCg0K ICAgIC8vIC0tLS0tIENvcHkgdGhlIGJsb2NrIG9mIGZpbGUgaGVhZGVycyBmcm9tIHRoZSBvbGQgYXJj aGl2ZQ0KICAgICR2X3NpemUgPSAkdl9jZW50cmFsX2Rpclsnc2l6ZSddOw0KICAgIHdoaWxlICgkdl9z aXplICE9IDApDQogICAgew0KICAgICAgJHZfcmVhZF9zaXplID0gKCR2X3NpemUgPCBQQ0xaSVBfUkVB RF9CTE9DS19TSVpFID8gJHZfc2l6ZSA6IFBDTFpJUF9SRUFEX0JMT0NLX1NJWkUpOw0KICAgICAgJHZf YnVmZmVyID0gQGZyZWFkKCR2X3ppcF90ZW1wX2ZkLCAkdl9yZWFkX3NpemUpOw0KICAgICAgQGZ3cml0 ZSgkdGhpcy0+emlwX2ZkLCAkdl9idWZmZXIsICR2X3JlYWRfc2l6ZSk7DQogICAgICAkdl9zaXplIC09 ICR2X3JlYWRfc2l6ZTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBDcmVhdGUgdGhlIENlbnRyYWwgRGly IGZpbGVzIGhlYWRlcg0KICAgIGZvciAoJGk9MCwgJHZfY291bnQ9MDsgJGk8c2l6ZW9mKCR2X2hlYWRl cl9saXN0KTsgJGkrKykNCiAgICB7DQogICAgICAvLyAtLS0tLSBDcmVhdGUgdGhlIGZpbGUgaGVhZGVy DQogICAgICBpZiAoJHZfaGVhZGVyX2xpc3RbJGldWydzdGF0dXMnXSA9PSAnb2snKSB7DQogICAgICAg IGlmICgoJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZXcml0ZUNlbnRyYWxGaWxlSGVhZGVyKCR2X2hlYWRl cl9saXN0WyRpXSkpICE9IDEpIHsNCiAgICAgICAgICBmY2xvc2UoJHZfemlwX3RlbXBfZmQpOw0KICAg ICAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgpOw0KICAgICAgICAgIEB1bmxpbmsoJHZfemlwX3RlbXBf bmFtZSk7DQogICAgICAgICAgJHRoaXMtPnByaXZTd2FwQmFja01hZ2ljUXVvdGVzKCk7DQoNCiAgICAg ICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICAgICAgICB9 DQogICAgICAgICR2X2NvdW50Kys7DQogICAgICB9DQoNCiAgICAgIC8vIC0tLS0tIFRyYW5zZm9ybSB0 aGUgaGVhZGVyIHRvIGEgJ3VzYWJsZScgaW5mbw0KICAgICAgJHRoaXMtPnByaXZDb252ZXJ0SGVhZGVy

MkZpbGVJbmZvKCR2X2hlYWRlcl9saXN0WyRpXSwgJHBfcmVzdWx0X2xpc3RbJGldKTsNCiAgICB9DQoN CiAgICAvLyAtLS0tLSBaaXAgZmlsZSBjb21tZW50DQogICAgJHZfY29tbWVudCA9ICR2X2NlbnRyYWxf ZGlyWydjb21tZW50J107DQogICAgaWYgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9DT01NRU5U XSkpIHsNCiAgICAgICR2X2NvbW1lbnQgPSAkcF9vcHRpb25zW1BDTFpJUF9PUFRfQ09NTUVOVF07DQog ICAgfQ0KICAgIGlmIChpc3NldCgkcF9vcHRpb25zW1BDTFpJUF9PUFRfQUREX0NPTU1FTlRdKSkgew0K ICAgICAgJHZfY29tbWVudCA9ICR2X2NvbW1lbnQuJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX0FERF9DT01N RU5UXTsNCiAgICB9DQogICAgaWYgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9QUkVQRU5EX0NP TU1FTlRdKSkgew0KICAgICAgJHZfY29tbWVudCA9ICRwX29wdGlvbnNbUENMWklQX09QVF9QUkVQRU5E X0NPTU1FTlRdLiR2X2NvbW1lbnQ7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gQ2FsY3VsYXRlIHRoZSBz aXplIG9mIHRoZSBjZW50cmFsIGhlYWRlcg0KICAgICR2X3NpemUgPSBAZnRlbGwoJHRoaXMtPnppcF9m ZCktJHZfb2Zmc2V0Ow0KDQogICAgLy8gLS0tLS0gQ3JlYXRlIHRoZSBjZW50cmFsIGRpciBmb290ZXIN CiAgICBpZiAoKCR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2V3JpdGVDZW50cmFsSGVhZGVyKCR2X2NvdW50 KyR2X2NlbnRyYWxfZGlyWydlbnRyaWVzJ10sICR2X3NpemUsICR2X29mZnNldCwgJHZfY29tbWVudCkp ICE9IDEpDQogICAgew0KICAgICAgLy8gLS0tLS0gUmVzZXQgdGhlIGZpbGUgbGlzdA0KICAgICAgdW5z ZXQoJHZfaGVhZGVyX2xpc3QpOw0KICAgICAgJHRoaXMtPnByaXZTd2FwQmFja01hZ2ljUXVvdGVzKCk7 DQoNCiAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICB9DQoN CiAgICAvLyAtLS0tLSBTd2FwIGJhY2sgdGhlIGZpbGUgZGVzY3JpcHRvcg0KICAgICR2X3N3YXAgPSAk dGhpcy0+emlwX2ZkOw0KICAgICR0aGlzLT56aXBfZmQgPSAkdl96aXBfdGVtcF9mZDsNCiAgICAkdl96 aXBfdGVtcF9mZCA9ICR2X3N3YXA7DQoNCiAgICAvLyAtLS0tLSBDbG9zZQ0KICAgICR0aGlzLT5wcml2 Q2xvc2VGZCgpOw0KDQogICAgLy8gLS0tLS0gQ2xvc2UgdGhlIHRlbXBvcmFyeSBmaWxlDQogICAgQGZj bG9zZSgkdl96aXBfdGVtcF9mZCk7DQoNCiAgICAvLyAtLS0tLSBNYWdpYyBxdW90ZXMgdHJpY2sNCiAg ICAkdGhpcy0+cHJpdlN3YXBCYWNrTWFnaWNRdW90ZXMoKTsNCg0KICAgIC8vIC0tLS0tIERlbGV0ZSB0 aGUgemlwIGZpbGUNCiAgICAvLyBUQkMgOiBJIHNob3VsZCB0ZXN0IHRoZSByZXN1bHQgLi4uDQogICAg QHVubGluaygkdGhpcy0+emlwbmFtZSk7DQoNCiAgICAvLyAtLS0tLSBSZW5hbWUgdGhlIHRlbXBvcmFy eSBmaWxlDQogICAgLy8gVEJDIDogSSBzaG91bGQgdGVzdCB0aGUgcmVzdWx0IC4uLg0KICAgIC8vQHJl bmFtZSgkdl96aXBfdGVtcF9uYW1lLCAkdGhpcy0+emlwbmFtZSk7DQogICAgUGNsWmlwVXRpbFJlbmFt ZSgkdl96aXBfdGVtcF9uYW1lLCAkdGhpcy0+emlwbmFtZSk7DQoNCiAgICAvLyAtLS0tLSBSZXR1cm4N CiAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAg Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBwcml2T3BlbkZkKCkNCiAgLy8g RGVzY3JpcHRpb24gOg0KICAvLyBQYXJhbWV0ZXJzIDoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CiAgZnVuY3Rpb24gcHJpdk9wZW5GZCgkcF9tb2RlKQ0KICB7DQogICAgJHZfcmVzdWx0PTE7DQoNCiAg ICAvLyAtLS0tLSBMb29rIGlmIGFscmVhZHkgb3Blbg0KICAgIGlmICgkdGhpcy0+emlwX2ZkICE9IDAp DQogICAgew0KICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAgICBQY2xaaXA6OnByaXZFcnJvckxv ZyhQQ0xaSVBfRVJSX1JFQURfT1BFTl9GQUlMLCAnWmlwIGZpbGUgXCcnLiR0aGlzLT56aXBuYW1lLidc JyBhbHJlYWR5IG9wZW4nKTsNCg0KICAgICAgLy8gLS0tLS0gUmV0dXJuDQogICAgICByZXR1cm4gUGNs WmlwOjplcnJvckNvZGUoKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBPcGVuIHRoZSB6aXAgZmlsZQ0K ICAgIGlmICgoJHRoaXMtPnppcF9mZCA9IEBmb3BlbigkdGhpcy0+emlwbmFtZSwgJHBfbW9kZSkpID09 IDApDQogICAgew0KICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAgICBQY2xaaXA6OnByaXZFcnJv ckxvZyhQQ0xaSVBfRVJSX1JFQURfT1BFTl9GQUlMLCAnVW5hYmxlIHRvIG9wZW4gYXJjaGl2ZSBcJycu JHRoaXMtPnppcG5hbWUuJ1wnIGluICcuJHBfbW9kZS4nIG1vZGUnKTsNCg0KICAgICAgLy8gLS0tLS0g UmV0dXJuDQogICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICB9DQoNCiAgICAvLyAt LS0tLSBSZXR1cm4NCiAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBwcml2Q2xv c2VGZCgpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQogIGZ1bmN0aW9uIHByaXZDbG9zZUZkKCkNCiAgew0KICAgICR2X3Jlc3VsdD0x Ow0KDQogICAgaWYgKCR0aGlzLT56aXBfZmQgIT0gMCkNCiAgICAgIEBmY2xvc2UoJHRoaXMtPnppcF9m ZCk7DQogICAgJHRoaXMtPnppcF9mZCA9IDA7DQoNCiAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICByZXR1 cm4gJHZfcmVzdWx0Ow0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBwcml2QWRkTGlzdCgpDQogIC8vIERlc2NyaXB0 aW9uIDoNCiAgLy8gICAkcF9hZGRfZGlyIGFuZCAkcF9yZW1vdmVfZGlyIHdpbGwgZ2l2ZSB0aGUgYWJp bGl0eSB0byBtZW1vcml6ZSBhIHBhdGggd2hpY2ggaXMNCiAgLy8gICBkaWZmZXJlbnQgZnJvbSB0aGUg cmVhbCBwYXRoIG9mIHRoZSBmaWxlLiBUaGlzIGlzIHVzZWZ1bGwgaWYgeW91IHdhbnQgdG8gaGF2ZSBQ

Y2xUYXINCiAgLy8gICBydW5uaW5nIGluIGFueSBkaXJlY3RvcnksIGFuZCBtZW1vcml6ZSByZWxhdGl2 ZSBwYXRoIGZyb20gYW4gb3RoZXIgZGlyZWN0b3J5Lg0KICAvLyBQYXJhbWV0ZXJzIDoNCiAgLy8gICAk cF9saXN0IDogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMgdG8g YWRkIGluIHRoZSB0YXINCiAgLy8gICAkcF9yZXN1bHRfbGlzdCA6IGxpc3Qgb2YgYWRkZWQgZmlsZXMg d2l0aCB0aGVpciBwcm9wZXJ0aWVzIChzcGVjaWFsbHkgdGhlIHN0YXR1cyBmaWVsZCkNCiAgLy8gICAk cF9hZGRfZGlyIDogUGF0aCB0byBhZGQgaW4gdGhlIGZpbGVuYW1lIHBhdGggYXJjaGl2ZWQNCiAgLy8g ICAkcF9yZW1vdmVfZGlyIDogUGF0aCB0byByZW1vdmUgaW4gdGhlIGZpbGVuYW1lIHBhdGggYXJjaGl2 ZWQNCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyAgZnVu Y3Rpb24gcHJpdkFkZExpc3QoJHBfbGlzdCwgJiRwX3Jlc3VsdF9saXN0LCAkcF9hZGRfZGlyLCAkcF9y ZW1vdmVfZGlyLCAkcF9yZW1vdmVfYWxsX2RpciwgJiRwX29wdGlvbnMpDQogIGZ1bmN0aW9uIHByaXZB ZGRMaXN0KCRwX2ZpbGVkZXNjcl9saXN0LCAmJHBfcmVzdWx0X2xpc3QsICYkcF9vcHRpb25zKQ0KICB7 DQogICAgJHZfcmVzdWx0PTE7DQoNCiAgICAvLyAtLS0tLSBBZGQgdGhlIGZpbGVzDQogICAgJHZfaGVh ZGVyX2xpc3QgPSBhcnJheSgpOw0KICAgIGlmICgoJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZBZGRGaWxl TGlzdCgkcF9maWxlZGVzY3JfbGlzdCwgJHZfaGVhZGVyX2xpc3QsICRwX29wdGlvbnMpKSAhPSAxKQ0K ICAgIHsNCiAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICB9 DQoNCiAgICAvLyAtLS0tLSBTdG9yZSB0aGUgb2Zmc2V0IG9mIHRoZSBjZW50cmFsIGRpcg0KICAgICR2 X29mZnNldCA9IEBmdGVsbCgkdGhpcy0+emlwX2ZkKTsNCg0KICAgIC8vIC0tLS0tIENyZWF0ZSB0aGUg Q2VudHJhbCBEaXIgZmlsZXMgaGVhZGVyDQogICAgZm9yICgkaT0wLCR2X2NvdW50PTA7ICRpPHNpemVv Zigkdl9oZWFkZXJfbGlzdCk7ICRpKyspDQogICAgew0KICAgICAgLy8gLS0tLS0gQ3JlYXRlIHRoZSBm aWxlIGhlYWRlcg0KICAgICAgaWYgKCR2X2hlYWRlcl9saXN0WyRpXVsnc3RhdHVzJ10gPT0gJ29rJykg ew0KICAgICAgICBpZiAoKCR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2V3JpdGVDZW50cmFsRmlsZUhlYWRl cigkdl9oZWFkZXJfbGlzdFskaV0pKSAhPSAxKSB7DQogICAgICAgICAgLy8gLS0tLS0gUmV0dXJuDQog ICAgICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICAgICAgfQ0KICAgICAgICAkdl9jb3VudCsrOw0K ICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBUcmFuc2Zvcm0gdGhlIGhlYWRlciB0byBhICd1c2FibGUn IGluZm8NCiAgICAgICR0aGlzLT5wcml2Q29udmVydEhlYWRlcjJGaWxlSW5mbygkdl9oZWFkZXJfbGlz dFskaV0sICRwX3Jlc3VsdF9saXN0WyRpXSk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gWmlwIGZpbGUg Y29tbWVudA0KICAgICR2X2NvbW1lbnQgPSAnJzsNCiAgICBpZiAoaXNzZXQoJHBfb3B0aW9uc1tQQ0xa SVBfT1BUX0NPTU1FTlRdKSkgew0KICAgICAgJHZfY29tbWVudCA9ICRwX29wdGlvbnNbUENMWklQX09Q VF9DT01NRU5UXTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhl IGNlbnRyYWwgaGVhZGVyDQogICAgJHZfc2l6ZSA9IEBmdGVsbCgkdGhpcy0+emlwX2ZkKS0kdl9vZmZz ZXQ7DQoNCiAgICAvLyAtLS0tLSBDcmVhdGUgdGhlIGNlbnRyYWwgZGlyIGZvb3Rlcg0KICAgIGlmICgo JHZfcmVzdWx0ID0gJHRoaXMtPnByaXZXcml0ZUNlbnRyYWxIZWFkZXIoJHZfY291bnQsICR2X3NpemUs ICR2X29mZnNldCwgJHZfY29tbWVudCkpICE9IDEpDQogICAgew0KICAgICAgLy8gLS0tLS0gUmVzZXQg dGhlIGZpbGUgbGlzdA0KICAgICAgdW5zZXQoJHZfaGVhZGVyX2xpc3QpOw0KDQogICAgICAvLyAtLS0t LSBSZXR1cm4NCiAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gUmV0 dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdkFkZEZpbGVMaXN0 KCkNCiAgLy8gRGVzY3JpcHRpb24gOg0KICAvLyBQYXJhbWV0ZXJzIDoNCiAgLy8gICAkcF9maWxlZGVz Y3JfbGlzdCA6IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGZpbGUgZGVzY3JpcHRpb24NCiAgLy8gICAg ICAgICAgICAgICAgICAgICAgb3IgZGlyZWN0b3J5IG5hbWVzIHRvIGFkZCBpbiB0aGUgemlwDQogIC8v ICAgJHBfcmVzdWx0X2xpc3QgOiBsaXN0IG9mIGFkZGVkIGZpbGVzIHdpdGggdGhlaXIgcHJvcGVydGll cyAoc3BlY2lhbGx5IHRoZSBzdGF0dXMgZmllbGQpDQogIC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBwcml2QWRkRmlsZUxpc3QoJHBfZmlsZWRlc2Ny X2xpc3QsICYkcF9yZXN1bHRfbGlzdCwgJiRwX29wdGlvbnMpDQogIHsNCiAgICAkdl9yZXN1bHQ9MTsN CiAgICAkdl9oZWFkZXIgPSBhcnJheSgpOw0KDQogICAgLy8gLS0tLS0gUmVjdXBlcmF0ZSB0aGUgY3Vy cmVudCBudW1iZXIgb2YgZWx0IGluIGxpc3QNCiAgICAkdl9uYiA9IHNpemVvZigkcF9yZXN1bHRfbGlz dCk7DQoNCiAgICAvLyAtLS0tLSBMb29wIG9uIHRoZSBmaWxlcw0KICAgIGZvciAoJGo9MDsgKCRqPHNp emVvZigkcF9maWxlZGVzY3JfbGlzdCkpICYmICgkdl9yZXN1bHQ9PTEpOyAkaisrKSB7DQogICAgICAv LyAtLS0tLSBGb3JtYXQgdGhlIGZpbGVuYW1lDQogICAgICAkcF9maWxlZGVzY3JfbGlzdFskal1bJ2Zp bGVuYW1lJ10NCiAgICAgID0gUGNsWmlwVXRpbFRyYW5zbGF0ZVdpblBhdGgoJHBfZmlsZWRlc2NyX2xp c3RbJGpdWydmaWxlbmFtZSddLCBmYWxzZSk7DQoNCg0KICAgICAgLy8gLS0tLS0gU2tpcCBlbXB0eSBm aWxlIG5hbWVzDQogICAgICAvLyBUQkMgOiBDYW4gdGhpcyBiZSBwb3NzaWJsZSA/IG5vdCBjaGVja2Vk IGluIERlc2NyUGFyc2VBdHQgPw0KICAgICAgaWYgKCRwX2ZpbGVkZXNjcl9saXN0WyRqXVsnZmlsZW5h bWUnXSA9PSAiIikgew0KICAgICAgICBjb250aW51ZTsNCiAgICAgIH0NCg0KICAgICAgLy8gLS0tLS0g Q2hlY2sgdGhlIGZpbGVuYW1lDQogICAgICBpZiAoICAgKCRwX2ZpbGVkZXNjcl9saXN0WyRqXVsndHlw ZSddICE9ICd2aXJ0dWFsX2ZpbGUnKQ0KICAgICAgICAgICYmICghZmlsZV9leGlzdHMoJHBfZmlsZWRl

c2NyX2xpc3RbJGpdWydmaWxlbmFtZSddKSkpIHsNCiAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2co UENMWklQX0VSUl9NSVNTSU5HX0ZJTEUsICJGaWxlICciLiRwX2ZpbGVkZXNjcl9saXN0WyRqXVsnZmls ZW5hbWUnXS4iJyBkb2VzIG5vdCBleGlzdCIpOw0KICAgICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNv ZGUoKTsNCiAgICAgIH0NCg0KICAgICAgLy8gLS0tLS0gTG9vayBpZiBpdCBpcyBhIGZpbGUgb3IgYSBk aXIgd2l0aCBubyBhbGwgcGF0aCByZW1vdmUgb3B0aW9uDQogICAgICAvLyBvciBhIGRpciB3aXRoIGFs bCBpdHMgcGF0aCByZW1vdmVkDQovLyAgICAgIGlmICggICAoaXNfZmlsZSgkcF9maWxlZGVzY3JfbGlz dFskal1bJ2ZpbGVuYW1lJ10pKQ0KLy8gICAgICAgICAgfHwgKCAgIGlzX2RpcigkcF9maWxlZGVzY3Jf bGlzdFskal1bJ2ZpbGVuYW1lJ10pDQogICAgICBpZiAoICAgKCRwX2ZpbGVkZXNjcl9saXN0WyRqXVsn dHlwZSddID09ICdmaWxlJykNCiAgICAgICAgICB8fCAoJHBfZmlsZWRlc2NyX2xpc3RbJGpdWyd0eXBl J10gPT0gJ3ZpcnR1YWxfZmlsZScpDQogICAgICAgICAgfHwgKCAgICgkcF9maWxlZGVzY3JfbGlzdFsk al1bJ3R5cGUnXSA9PSAnZm9sZGVyJykNCiAgICAgICAgICAgICAgJiYgKCAgICFpc3NldCgkcF9vcHRp b25zW1BDTFpJUF9PUFRfUkVNT1ZFX0FMTF9QQVRIXSkNCiAgICAgICAgICAgICAgICAgIHx8ICEkcF9v cHRpb25zW1BDTFpJUF9PUFRfUkVNT1ZFX0FMTF9QQVRIXSkpDQogICAgICAgICAgKSB7DQoNCiAgICAg ICAgLy8gLS0tLS0gQWRkIHRoZSBmaWxlDQogICAgICAgICR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2QWRk RmlsZSgkcF9maWxlZGVzY3JfbGlzdFskal0sICR2X2hlYWRlciwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICRwX29wdGlvbnMpOw0KICAgICAgICBpZiAoJHZfcmVzdWx0ICE9IDEp IHsNCiAgICAgICAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICAgICAgICB9DQoNCiAgICAgICAgLy8gLS0t LS0gU3RvcmUgdGhlIGZpbGUgaW5mb3MNCiAgICAgICAgJHBfcmVzdWx0X2xpc3RbJHZfbmIrK10gPSAk dl9oZWFkZXI7DQogICAgICB9DQogICAgfQ0KDQogICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJu ICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdkFkZEZpbGUoKQ0KICAvLyBEZXNjcmlwdGlv biA6DQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAgLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gcHJpdkFkZEZpbGUoJHBfZmlsZWRlc2NyLCAmJHBfaGVhZGVy LCAmJHBfb3B0aW9ucykNCiAgew0KICAgICR2X3Jlc3VsdD0xOw0KDQogICAgLy8gLS0tLS0gV29ya2lu ZyB2YXJpYWJsZQ0KICAgICRwX2ZpbGVuYW1lID0gJHBfZmlsZWRlc2NyWydmaWxlbmFtZSddOw0KDQog ICAgLy8gVEJDIDogQWxyZWFkeSBkb25lIGluIHRoZSBmaWxlQXR0IGNoZWNrIC4uLiA/DQogICAgaWYg KCRwX2ZpbGVuYW1lID09ICIiKSB7DQogICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgIFBjbFpp cDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9QQVJBTUVURVIsICJJbnZhbGlkIGZpbGUg bGlzdCBwYXJhbWV0ZXIgKGludmFsaWQgb3IgZW1wdHkgbGlzdCkiKTsNCg0KICAgICAgLy8gLS0tLS0g UmV0dXJuDQogICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICB9DQoNCiAgICAvLyAt LS0tLSBMb29rIGZvciBhIHN0b3JlZCBkaWZmZXJlbnQgZmlsZW5hbWUNCiAgICAvKiBUQkMgOiBSZW1v dmVkDQogICAgaWYgKGlzc2V0KCRwX2ZpbGVkZXNjclsnc3RvcmVkX2ZpbGVuYW1lJ10pKSB7DQogICAg ICAkdl9zdG9yZWRfZmlsZW5hbWUgPSAkcF9maWxlZGVzY3JbJ3N0b3JlZF9maWxlbmFtZSddOw0KICAg IH0NCiAgICBlbHNlIHsNCiAgICAgICR2X3N0b3JlZF9maWxlbmFtZSA9ICRwX2ZpbGVkZXNjclsnc3Rv cmVkX2ZpbGVuYW1lJ107DQogICAgfQ0KICAgICovDQoNCiAgICAvLyAtLS0tLSBTZXQgdGhlIGZpbGUg cHJvcGVydGllcw0KICAgIGNsZWFyc3RhdGNhY2hlKCk7DQogICAgJHBfaGVhZGVyWyd2ZXJzaW9uJ10g PSAyMDsNCiAgICAkcF9oZWFkZXJbJ3ZlcnNpb25fZXh0cmFjdGVkJ10gPSAxMDsNCiAgICAkcF9oZWFk ZXJbJ2ZsYWcnXSA9IDA7DQogICAgJHBfaGVhZGVyWydjb21wcmVzc2lvbiddID0gMDsNCiAgICAkcF9o ZWFkZXJbJ2NyYyddID0gMDsNCiAgICAkcF9oZWFkZXJbJ2NvbXByZXNzZWRfc2l6ZSddID0gMDsNCiAg ICAkcF9oZWFkZXJbJ2ZpbGVuYW1lX2xlbiddID0gc3RybGVuKCRwX2ZpbGVuYW1lKTsNCiAgICAkcF9o ZWFkZXJbJ2V4dHJhX2xlbiddID0gMDsNCiAgICAkcF9oZWFkZXJbJ2Rpc2snXSA9IDA7DQogICAgJHBf aGVhZGVyWydpbnRlcm5hbCddID0gMDsNCiAgICAkcF9oZWFkZXJbJ29mZnNldCddID0gMDsNCiAgICAk cF9oZWFkZXJbJ2ZpbGVuYW1lJ10gPSAkcF9maWxlbmFtZTsNCi8vIFRCQyA6IFJlbW92ZWQgICAgJHBf aGVhZGVyWydzdG9yZWRfZmlsZW5hbWUnXSA9ICR2X3N0b3JlZF9maWxlbmFtZTsNCiAgICAkcF9oZWFk ZXJbJ3N0b3JlZF9maWxlbmFtZSddID0gJHBfZmlsZWRlc2NyWydzdG9yZWRfZmlsZW5hbWUnXTsNCiAg ICAkcF9oZWFkZXJbJ2V4dHJhJ10gPSAnJzsNCiAgICAkcF9oZWFkZXJbJ3N0YXR1cyddID0gJ29rJzsN CiAgICAkcF9oZWFkZXJbJ2luZGV4J10gPSAtMTsNCg0KICAgIC8vIC0tLS0tIExvb2sgZm9yIHJlZ3Vs YXIgZmlsZQ0KICAgIGlmICgkcF9maWxlZGVzY3JbJ3R5cGUnXT09J2ZpbGUnKSB7DQogICAgICAkcF9o ZWFkZXJbJ2V4dGVybmFsJ10gPSAweDAwMDAwMDAwOw0KICAgICAgJHBfaGVhZGVyWydzaXplJ10gPSBm aWxlc2l6ZSgkcF9maWxlbmFtZSk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gTG9vayBmb3IgcmVndWxh ciBmb2xkZXINCiAgICBlbHNlIGlmICgkcF9maWxlZGVzY3JbJ3R5cGUnXT09J2ZvbGRlcicpIHsNCiAg ICAgICRwX2hlYWRlclsnZXh0ZXJuYWwnXSA9IDB4MDAwMDAwMTA7DQogICAgICAkcF9oZWFkZXJbJ210 aW1lJ10gPSBmaWxlbXRpbWUoJHBfZmlsZW5hbWUpOw0KICAgICAgJHBfaGVhZGVyWydzaXplJ10gPSBm aWxlc2l6ZSgkcF9maWxlbmFtZSk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gTG9vayBmb3IgdmlydHVh bCBmaWxlDQogICAgZWxzZSBpZiAoJHBfZmlsZWRlc2NyWyd0eXBlJ10gPT0gJ3ZpcnR1YWxfZmlsZScp IHsNCiAgICAgICRwX2hlYWRlclsnZXh0ZXJuYWwnXSA9IDB4MDAwMDAwMDA7DQogICAgICAkcF9oZWFk ZXJbJ3NpemUnXSA9IHN0cmxlbigkcF9maWxlZGVzY3JbJ2NvbnRlbnQnXSk7DQogICAgfQ0KDQoNCiAg

ICAvLyAtLS0tLSBMb29rIGZvciBmaWxldGltZQ0KICAgIGlmIChpc3NldCgkcF9maWxlZGVzY3JbJ210 aW1lJ10pKSB7DQogICAgICAkcF9oZWFkZXJbJ210aW1lJ10gPSAkcF9maWxlZGVzY3JbJ210aW1lJ107 DQogICAgfQ0KICAgIGVsc2UgaWYgKCRwX2ZpbGVkZXNjclsndHlwZSddID09ICd2aXJ0dWFsX2ZpbGUn KSB7DQogICAgICAkcF9oZWFkZXJbJ210aW1lJ10gPSB0aW1lKCk7DQogICAgfQ0KICAgIGVsc2Ugew0K ICAgICAgJHBfaGVhZGVyWydtdGltZSddID0gZmlsZW10aW1lKCRwX2ZpbGVuYW1lKTsNCiAgICB9DQoN CiAgICAvLyAtLS0tLS0gTG9vayBmb3IgZmlsZSBjb21tZW50DQogICAgaWYgKGlzc2V0KCRwX2ZpbGVk ZXNjclsnY29tbWVudCddKSkgew0KICAgICAgJHBfaGVhZGVyWydjb21tZW50X2xlbiddID0gc3RybGVu KCRwX2ZpbGVkZXNjclsnY29tbWVudCddKTsNCiAgICAgICRwX2hlYWRlclsnY29tbWVudCddID0gJHBf ZmlsZWRlc2NyWydjb21tZW50J107DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgJHBfaGVhZGVyWydj b21tZW50X2xlbiddID0gMDsNCiAgICAgICRwX2hlYWRlclsnY29tbWVudCddID0gJyc7DQogICAgfQ0K DQogICAgLy8gLS0tLS0gTG9vayBmb3IgcHJlLWFkZCBjYWxsYmFjaw0KICAgIGlmIChpc3NldCgkcF9v cHRpb25zW1BDTFpJUF9DQl9QUkVfQUREXSkpIHsNCg0KICAgICAgLy8gLS0tLS0gR2VuZXJhdGUgYSBs b2NhbCBpbmZvcm1hdGlvbg0KICAgICAgJHZfbG9jYWxfaGVhZGVyID0gYXJyYXkoKTsNCiAgICAgICR0 aGlzLT5wcml2Q29udmVydEhlYWRlcjJGaWxlSW5mbygkcF9oZWFkZXIsICR2X2xvY2FsX2hlYWRlcik7 DQoNCiAgICAgIC8vIC0tLS0tIENhbGwgdGhlIGNhbGxiYWNrDQogICAgICAvLyBIZXJlIEkgZG8gbm90 IHVzZSBjYWxsX3VzZXJfZnVuYygpIGJlY2F1c2UgSSBuZWVkIHRvIHNlbmQgYSByZWZlcmVuY2UgdG8g dGhlDQogICAgICAvLyBoZWFkZXIuDQogICAgICAkdl9yZXN1bHQgPSAkcF9vcHRpb25zW1BDTFpJUF9D Ql9QUkVfQUREXShQQ0xaSVBfQ0JfUFJFX0FERCwgJHZfbG9jYWxfaGVhZGVyKTsNCiAgICAgIGlmICgk dl9yZXN1bHQgPT0gMCkgew0KICAgICAgICAvLyAtLS0tLSBDaGFuZ2UgdGhlIGZpbGUgc3RhdHVzDQog ICAgICAgICRwX2hlYWRlclsnc3RhdHVzJ10gPSAic2tpcHBlZCI7DQogICAgICAgICR2X3Jlc3VsdCA9 IDE7DQogICAgICB9DQoNCiAgICAgIC8vIC0tLS0tIFVwZGF0ZSB0aGUgaW5mb3JtYXRpb25zDQogICAg ICAvLyBPbmx5IHNvbWUgZmllbGRzIGNhbiBiZSBtb2RpZmllZA0KICAgICAgaWYgKCRwX2hlYWRlclsn c3RvcmVkX2ZpbGVuYW1lJ10gIT0gJHZfbG9jYWxfaGVhZGVyWydzdG9yZWRfZmlsZW5hbWUnXSkgew0K ICAgICAgICAkcF9oZWFkZXJbJ3N0b3JlZF9maWxlbmFtZSddID0gUGNsWmlwVXRpbFBhdGhSZWR1Y3Rp b24oJHZfbG9jYWxfaGVhZGVyWydzdG9yZWRfZmlsZW5hbWUnXSk7DQogICAgICB9DQogICAgfQ0KDQog ICAgLy8gLS0tLS0gTG9vayBmb3IgZW1wdHkgc3RvcmVkIGZpbGVuYW1lDQogICAgaWYgKCRwX2hlYWRl clsnc3RvcmVkX2ZpbGVuYW1lJ10gPT0gIiIpIHsNCiAgICAgICRwX2hlYWRlclsnc3RhdHVzJ10gPSAi ZmlsdGVyZWQiOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIENoZWNrIHRoZSBwYXRoIGxlbmd0aA0KICAg IGlmIChzdHJsZW4oJHBfaGVhZGVyWydzdG9yZWRfZmlsZW5hbWUnXSkgPiAweEZGKSB7DQogICAgICAk cF9oZWFkZXJbJ3N0YXR1cyddID0gJ2ZpbGVuYW1lX3Rvb19sb25nJzsNCiAgICB9DQoNCiAgICAvLyAt LS0tLSBMb29rIGlmIG5vIGVycm9yLCBvciBmaWxlIG5vdCBza2lwcGVkDQogICAgaWYgKCRwX2hlYWRl clsnc3RhdHVzJ10gPT0gJ29rJykgew0KDQogICAgICAvLyAtLS0tLSBMb29rIGZvciBhIGZpbGUNCiAg ICAgIGlmICgkcF9maWxlZGVzY3JbJ3R5cGUnXSA9PSAnZmlsZScpIHsNCiAgICAgICAgLy8gLS0tLS0g TG9vayBmb3IgdXNpbmcgdGVtcG9yYXJ5IGZpbGUgdG8gemlwDQogICAgICAgIGlmICggKCFpc3NldCgk cF9vcHRpb25zW1BDTFpJUF9PUFRfVEVNUF9GSUxFX09GRl0pKQ0KICAgICAgICAgICAgJiYgKGlzc2V0 KCRwX29wdGlvbnNbUENMWklQX09QVF9URU1QX0ZJTEVfT05dKQ0KICAgICAgICAgICAgICAgIHx8IChp c3NldCgkcF9vcHRpb25zW1BDTFpJUF9PUFRfVEVNUF9GSUxFX1RIUkVTSE9MRF0pDQogICAgICAgICAg ICAgICAgICAgICYmICgkcF9vcHRpb25zW1BDTFpJUF9PUFRfVEVNUF9GSUxFX1RIUkVTSE9MRF0gPD0g JHBfaGVhZGVyWydzaXplJ10pKSApICkgew0KICAgICAgICAgICR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2 QWRkRmlsZVVzaW5nVGVtcEZpbGUoJHBfZmlsZWRlc2NyLCAkcF9oZWFkZXIsICRwX29wdGlvbnMpOw0K ICAgICAgICAgIGlmICgkdl9yZXN1bHQgPCBQQ0xaSVBfRVJSX05PX0VSUk9SKSB7DQogICAgICAgICAg ICByZXR1cm4gJHZfcmVzdWx0Ow0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIC0t LS0tIFVzZSAiaW4gbWVtb3J5IiB6aXAgYWxnbw0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICAvLyAt LS0tLSBPcGVuIHRoZSBzb3VyY2UgZmlsZQ0KICAgICAgICBpZiAoKCR2X2ZpbGUgPSBAZm9wZW4oJHBf ZmlsZW5hbWUsICJyYiIpKSA9PSAwKSB7DQogICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENM WklQX0VSUl9SRUFEX09QRU5fRkFJTCwgIlVuYWJsZSB0byBvcGVuIGZpbGUgJyRwX2ZpbGVuYW1lJyBp biBiaW5hcnkgcmVhZCBtb2RlIik7DQogICAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7 DQogICAgICAgIH0NCg0KICAgICAgICAvLyAtLS0tLSBSZWFkIHRoZSBmaWxlIGNvbnRlbnQNCiAgICAg ICAgJHZfY29udGVudCA9IEBmcmVhZCgkdl9maWxlLCAkcF9oZWFkZXJbJ3NpemUnXSk7DQoNCiAgICAg ICAgLy8gLS0tLS0gQ2xvc2UgdGhlIGZpbGUNCiAgICAgICAgQGZjbG9zZSgkdl9maWxlKTsNCg0KICAg ICAgICAvLyAtLS0tLSBDYWxjdWxhdGUgdGhlIENSQw0KICAgICAgICAkcF9oZWFkZXJbJ2NyYyddID0g QGNyYzMyKCR2X2NvbnRlbnQpOw0KDQogICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIG5vIGNvbXByZXNz aW9uDQogICAgICAgIGlmICgkcF9vcHRpb25zW1BDTFpJUF9PUFRfTk9fQ09NUFJFU1NJT05dKSB7DQog ICAgICAgICAgLy8gLS0tLS0gU2V0IGhlYWRlciBwYXJhbWV0ZXJzDQogICAgICAgICAgJHBfaGVhZGVy Wydjb21wcmVzc2VkX3NpemUnXSA9ICRwX2hlYWRlclsnc2l6ZSddOw0KICAgICAgICAgICRwX2hlYWRl clsnY29tcHJlc3Npb24nXSA9IDA7DQogICAgICAgIH0NCg0KICAgICAgICAvLyAtLS0tLSBMb29rIGZv ciBub3JtYWwgY29tcHJlc3Npb24NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgLy8gLS0tLS0gQ29t cHJlc3MgdGhlIGNvbnRlbnQNCiAgICAgICAgICAkdl9jb250ZW50ID0gQGd6ZGVmbGF0ZSgkdl9jb250 ZW50KTsNCg0KICAgICAgICAgIC8vIC0tLS0tIFNldCBoZWFkZXIgcGFyYW1ldGVycw0KICAgICAgICAg ICRwX2hlYWRlclsnY29tcHJlc3NlZF9zaXplJ10gPSBzdHJsZW4oJHZfY29udGVudCk7DQogICAgICAg

ICAgJHBfaGVhZGVyWydjb21wcmVzc2lvbiddID0gODsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIC0t LS0tIENhbGwgdGhlIGhlYWRlciBnZW5lcmF0aW9uDQogICAgICAgIGlmICgoJHZfcmVzdWx0ID0gJHRo aXMtPnByaXZXcml0ZUZpbGVIZWFkZXIoJHBfaGVhZGVyKSkgIT0gMSkgew0KICAgICAgICAgIEBmY2xv c2UoJHZfZmlsZSk7DQogICAgICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICAgICAgfQ0KDQogICAg ICAgIC8vIC0tLS0tIFdyaXRlIHRoZSBjb21wcmVzc2VkIChvciBub3QpIGNvbnRlbnQNCiAgICAgICAg QGZ3cml0ZSgkdGhpcy0+emlwX2ZkLCAkdl9jb250ZW50LCAkcF9oZWFkZXJbJ2NvbXByZXNzZWRfc2l6 ZSddKTsNCg0KICAgICAgICB9DQoNCiAgICAgIH0NCg0KICAgICAgLy8gLS0tLS0gTG9vayBmb3IgYSB2 aXJ0dWFsIGZpbGUgKGEgZmlsZSBmcm9tIHN0cmluZykNCiAgICAgIGVsc2UgaWYgKCRwX2ZpbGVkZXNj clsndHlwZSddID09ICd2aXJ0dWFsX2ZpbGUnKSB7DQoNCiAgICAgICAgJHZfY29udGVudCA9ICRwX2Zp bGVkZXNjclsnY29udGVudCddOw0KDQogICAgICAgIC8vIC0tLS0tIENhbGN1bGF0ZSB0aGUgQ1JDDQog ICAgICAgICRwX2hlYWRlclsnY3JjJ10gPSBAY3JjMzIoJHZfY29udGVudCk7DQoNCiAgICAgICAgLy8g LS0tLS0gTG9vayBmb3Igbm8gY29tcHJlc3Npb24NCiAgICAgICAgaWYgKCRwX29wdGlvbnNbUENMWklQ X09QVF9OT19DT01QUkVTU0lPTl0pIHsNCiAgICAgICAgICAvLyAtLS0tLSBTZXQgaGVhZGVyIHBhcmFt ZXRlcnMNCiAgICAgICAgICAkcF9oZWFkZXJbJ2NvbXByZXNzZWRfc2l6ZSddID0gJHBfaGVhZGVyWydz aXplJ107DQogICAgICAgICAgJHBfaGVhZGVyWydjb21wcmVzc2lvbiddID0gMDsNCiAgICAgICAgfQ0K DQogICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIG5vcm1hbCBjb21wcmVzc2lvbg0KICAgICAgICBlbHNl IHsNCiAgICAgICAgICAvLyAtLS0tLSBDb21wcmVzcyB0aGUgY29udGVudA0KICAgICAgICAgICR2X2Nv bnRlbnQgPSBAZ3pkZWZsYXRlKCR2X2NvbnRlbnQpOw0KDQogICAgICAgICAgLy8gLS0tLS0gU2V0IGhl YWRlciBwYXJhbWV0ZXJzDQogICAgICAgICAgJHBfaGVhZGVyWydjb21wcmVzc2VkX3NpemUnXSA9IHN0 cmxlbigkdl9jb250ZW50KTsNCiAgICAgICAgICAkcF9oZWFkZXJbJ2NvbXByZXNzaW9uJ10gPSA4Ow0K ICAgICAgICB9DQoNCiAgICAgICAgLy8gLS0tLS0gQ2FsbCB0aGUgaGVhZGVyIGdlbmVyYXRpb24NCiAg ICAgICAgaWYgKCgkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdldyaXRlRmlsZUhlYWRlcigkcF9oZWFkZXIp KSAhPSAxKSB7DQogICAgICAgICAgQGZjbG9zZSgkdl9maWxlKTsNCiAgICAgICAgICByZXR1cm4gJHZf cmVzdWx0Ow0KICAgICAgICB9DQoNCiAgICAgICAgLy8gLS0tLS0gV3JpdGUgdGhlIGNvbXByZXNzZWQg KG9yIG5vdCkgY29udGVudA0KICAgICAgICBAZndyaXRlKCR0aGlzLT56aXBfZmQsICR2X2NvbnRlbnQs ICRwX2hlYWRlclsnY29tcHJlc3NlZF9zaXplJ10pOw0KICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBM b29rIGZvciBhIGRpcmVjdG9yeQ0KICAgICAgZWxzZSBpZiAoJHBfZmlsZWRlc2NyWyd0eXBlJ10gPT0g J2ZvbGRlcicpIHsNCiAgICAgICAgLy8gLS0tLS0gTG9vayBmb3IgZGlyZWN0b3J5IGxhc3QgJy8nDQog ICAgICAgIGlmIChAc3Vic3RyKCRwX2hlYWRlclsnc3RvcmVkX2ZpbGVuYW1lJ10sIC0xKSAhPSAnLycp IHsNCiAgICAgICAgICAkcF9oZWFkZXJbJ3N0b3JlZF9maWxlbmFtZSddIC49ICcvJzsNCiAgICAgICAg fQ0KDQogICAgICAgIC8vIC0tLS0tIFNldCB0aGUgZmlsZSBwcm9wZXJ0aWVzDQogICAgICAgICRwX2hl YWRlclsnc2l6ZSddID0gMDsNCiAgICAgICAgLy8kcF9oZWFkZXJbJ2V4dGVybmFsJ10gPSAweDQxRkYw MDEwOyAgIC8vIFZhbHVlIGZvciBhIGZvbGRlciA6IHRvIGJlIGNoZWNrZWQNCiAgICAgICAgJHBfaGVh ZGVyWydleHRlcm5hbCddID0gMHgwMDAwMDAxMDsgICAvLyBWYWx1ZSBmb3IgYSBmb2xkZXIgOiB0byBi ZSBjaGVja2VkDQoNCiAgICAgICAgLy8gLS0tLS0gQ2FsbCB0aGUgaGVhZGVyIGdlbmVyYXRpb24NCiAg ICAgICAgaWYgKCgkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdldyaXRlRmlsZUhlYWRlcigkcF9oZWFkZXIp KSAhPSAxKQ0KICAgICAgICB7DQogICAgICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICAgICAgfQ0K ICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIC0tLS0tIExvb2sgZm9yIHBvc3QtYWRkIGNhbGxiYWNrDQog ICAgaWYgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX0NCX1BPU1RfQUREXSkpIHsNCg0KICAgICAgLy8g LS0tLS0gR2VuZXJhdGUgYSBsb2NhbCBpbmZvcm1hdGlvbg0KICAgICAgJHZfbG9jYWxfaGVhZGVyID0g YXJyYXkoKTsNCiAgICAgICR0aGlzLT5wcml2Q29udmVydEhlYWRlcjJGaWxlSW5mbygkcF9oZWFkZXIs ICR2X2xvY2FsX2hlYWRlcik7DQoNCiAgICAgIC8vIC0tLS0tIENhbGwgdGhlIGNhbGxiYWNrDQogICAg ICAvLyBIZXJlIEkgZG8gbm90IHVzZSBjYWxsX3VzZXJfZnVuYygpIGJlY2F1c2UgSSBuZWVkIHRvIHNl bmQgYSByZWZlcmVuY2UgdG8gdGhlDQogICAgICAvLyBoZWFkZXIuDQogICAgICAkdl9yZXN1bHQgPSAk cF9vcHRpb25zW1BDTFpJUF9DQl9QT1NUX0FERF0oUENMWklQX0NCX1BPU1RfQURELCAkdl9sb2NhbF9o ZWFkZXIpOw0KICAgICAgaWYgKCR2X3Jlc3VsdCA9PSAwKSB7DQogICAgICAgIC8vIC0tLS0tIElnbm9y ZWQNCiAgICAgICAgJHZfcmVzdWx0ID0gMTsNCiAgICAgIH0NCg0KICAgICAgLy8gLS0tLS0gVXBkYXRl IHRoZSBpbmZvcm1hdGlvbnMNCiAgICAgIC8vIE5vdGhpbmcgY2FuIGJlIG1vZGlmaWVkDQogICAgfQ0K DQogICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9u IDogcHJpdkFkZEZpbGVVc2luZ1RlbXBGaWxlKCkNCiAgLy8gRGVzY3JpcHRpb24gOg0KICAvLyBQYXJh bWV0ZXJzIDoNCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQog IGZ1bmN0aW9uIHByaXZBZGRGaWxlVXNpbmdUZW1wRmlsZSgkcF9maWxlZGVzY3IsICYkcF9oZWFkZXIs ICYkcF9vcHRpb25zKQ0KICB7DQogICAgJHZfcmVzdWx0PVBDTFpJUF9FUlJfTk9fRVJST1I7DQoNCiAg ICAvLyAtLS0tLSBXb3JraW5nIHZhcmlhYmxlDQogICAgJHBfZmlsZW5hbWUgPSAkcF9maWxlZGVzY3Jb J2ZpbGVuYW1lJ107DQoNCg0KICAgIC8vIC0tLS0tIE9wZW4gdGhlIHNvdXJjZSBmaWxlDQogICAgaWYg KCgkdl9maWxlID0gQGZvcGVuKCRwX2ZpbGVuYW1lLCAicmIiKSkgPT0gMCkgew0KICAgICAgUGNsWmlw

Ojpwcml2RXJyb3JMb2coUENMWklQX0VSUl9SRUFEX09QRU5fRkFJTCwgIlVuYWJsZSB0byBvcGVuIGZp bGUgJyRwX2ZpbGVuYW1lJyBpbiBiaW5hcnkgcmVhZCBtb2RlIik7DQogICAgICByZXR1cm4gUGNsWmlw OjplcnJvckNvZGUoKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBDcmVhdGVzIGEgY29tcHJlc3NlZCB0 ZW1wb3JhcnkgZmlsZQ0KICAgICR2X2d6aXBfdGVtcF9uYW1lID0gUENMWklQX1RFTVBPUkFSWV9ESVIu dW5pcWlkKCdwY2x6aXAtJykuJy5neic7DQogICAgaWYgKCgkdl9maWxlX2NvbXByZXNzZWQgPSBAZ3pv cGVuKCR2X2d6aXBfdGVtcF9uYW1lLCAid2IiKSkgPT0gMCkgew0KICAgICAgZmNsb3NlKCR2X2ZpbGUp Ow0KICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9XUklURV9PUEVOX0ZBSUwsICdV bmFibGUgdG8gb3BlbiB0ZW1wb3JhcnkgZmlsZSBcJycuJHZfZ3ppcF90ZW1wX25hbWUuJ1wnIGluIGJp bmFyeSB3cml0ZSBtb2RlJyk7DQogICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICB9 DQoNCiAgICAvLyAtLS0tLSBSZWFkIHRoZSBmaWxlIGJ5IFBDTFpJUF9SRUFEX0JMT0NLX1NJWkUgb2N0 ZXRzIGJsb2Nrcw0KICAgICR2X3NpemUgPSBmaWxlc2l6ZSgkcF9maWxlbmFtZSk7DQogICAgd2hpbGUg KCR2X3NpemUgIT0gMCkgew0KICAgICAgJHZfcmVhZF9zaXplID0gKCR2X3NpemUgPCBQQ0xaSVBfUkVB RF9CTE9DS19TSVpFID8gJHZfc2l6ZSA6IFBDTFpJUF9SRUFEX0JMT0NLX1NJWkUpOw0KICAgICAgJHZf YnVmZmVyID0gQGZyZWFkKCR2X2ZpbGUsICR2X3JlYWRfc2l6ZSk7DQogICAgICAvLyR2X2JpbmFyeV9k YXRhID0gcGFjaygnYScuJHZfcmVhZF9zaXplLCAkdl9idWZmZXIpOw0KICAgICAgQGd6cHV0cygkdl9m aWxlX2NvbXByZXNzZWQsICR2X2J1ZmZlciwgJHZfcmVhZF9zaXplKTsNCiAgICAgICR2X3NpemUgLT0g JHZfcmVhZF9zaXplOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIENsb3NlIHRoZSBmaWxlDQogICAgQGZj bG9zZSgkdl9maWxlKTsNCiAgICBAZ3pjbG9zZSgkdl9maWxlX2NvbXByZXNzZWQpOw0KDQogICAgLy8g LS0tLS0gQ2hlY2sgdGhlIG1pbmltdW0gZmlsZSBzaXplDQogICAgaWYgKGZpbGVzaXplKCR2X2d6aXBf dGVtcF9uYW1lKSA8IDE4KSB7DQogICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX0JB RF9GT1JNQVQsICdnemlwIHRlbXBvcmFyeSBmaWxlIFwnJy4kdl9nemlwX3RlbXBfbmFtZS4nXCcgaGFz IGludmFsaWQgZmlsZXNpemUgLSBzaG91bGQgYmUgbWluaW11bSAxOCBieXRlcycpOw0KICAgICAgcmV0 dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gRXh0cmFjdCB0aGUg Y29tcHJlc3NlZCBhdHRyaWJ1dGVzDQogICAgaWYgKCgkdl9maWxlX2NvbXByZXNzZWQgPSBAZm9wZW4o JHZfZ3ppcF90ZW1wX25hbWUsICJyYiIpKSA9PSAwKSB7DQogICAgICBQY2xaaXA6OnByaXZFcnJvckxv ZyhQQ0xaSVBfRVJSX1JFQURfT1BFTl9GQUlMLCAnVW5hYmxlIHRvIG9wZW4gdGVtcG9yYXJ5IGZpbGUg XCcnLiR2X2d6aXBfdGVtcF9uYW1lLidcJyBpbiBiaW5hcnkgcmVhZCBtb2RlJyk7DQogICAgICByZXR1 cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBSZWFkIHRoZSBnemlw IGZpbGUgaGVhZGVyDQogICAgJHZfYmluYXJ5X2RhdGEgPSBAZnJlYWQoJHZfZmlsZV9jb21wcmVzc2Vk LCAxMCk7DQogICAgJHZfZGF0YV9oZWFkZXIgPSB1bnBhY2soJ2ExaWQxL2ExaWQyL2ExY20vYTFmbGFn L1ZtdGltZS9hMXhmbC9hMW9zJywgJHZfYmluYXJ5X2RhdGEpOw0KDQogICAgLy8gLS0tLS0gQ2hlY2sg c29tZSBwYXJhbWV0ZXJzDQogICAgJHZfZGF0YV9oZWFkZXJbJ29zJ10gPSBiaW4yaGV4KCR2X2RhdGFf aGVhZGVyWydvcyddKTsNCg0KICAgIC8vIC0tLS0tIFJlYWQgdGhlIGd6aXAgZmlsZSBmb290ZXINCiAg ICBAZnNlZWsoJHZfZmlsZV9jb21wcmVzc2VkLCBmaWxlc2l6ZSgkdl9nemlwX3RlbXBfbmFtZSktOCk7 DQogICAgJHZfYmluYXJ5X2RhdGEgPSBAZnJlYWQoJHZfZmlsZV9jb21wcmVzc2VkLCA4KTsNCiAgICAk dl9kYXRhX2Zvb3RlciA9IHVucGFjaygnVmNyYy9WY29tcHJlc3NlZF9zaXplJywgJHZfYmluYXJ5X2Rh dGEpOw0KDQogICAgLy8gLS0tLS0gU2V0IHRoZSBhdHRyaWJ1dGVzDQogICAgJHBfaGVhZGVyWydjb21w cmVzc2lvbiddID0gb3JkKCR2X2RhdGFfaGVhZGVyWydjbSddKTsNCiAgICAvLyRwX2hlYWRlclsnbXRp bWUnXSA9ICR2X2RhdGFfaGVhZGVyWydtdGltZSddOw0KICAgICRwX2hlYWRlclsnY3JjJ10gPSAkdl9k YXRhX2Zvb3RlclsnY3JjJ107DQogICAgJHBfaGVhZGVyWydjb21wcmVzc2VkX3NpemUnXSA9IGZpbGVz aXplKCR2X2d6aXBfdGVtcF9uYW1lKS0xODsNCg0KICAgIC8vIC0tLS0tIENsb3NlIHRoZSBmaWxlDQog ICAgQGZjbG9zZSgkdl9maWxlX2NvbXByZXNzZWQpOw0KDQogICAgLy8gLS0tLS0gQ2FsbCB0aGUgaGVh ZGVyIGdlbmVyYXRpb24NCiAgICBpZiAoKCR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2V3JpdGVGaWxlSGVh ZGVyKCRwX2hlYWRlcikpICE9IDEpIHsNCiAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgfQ0KDQog ICAgLy8gLS0tLS0gQWRkIHRoZSBjb21wcmVzc2VkIGRhdGENCiAgICBpZiAoKCR2X2ZpbGVfY29tcHJl c3NlZCA9IEBmb3Blbigkdl9nemlwX3RlbXBfbmFtZSwgInJiIikpID09IDApDQogICAgew0KICAgICAg UGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9SRUFEX09QRU5fRkFJTCwgJ1VuYWJsZSB0byBv cGVuIHRlbXBvcmFyeSBmaWxlIFwnJy4kdl9nemlwX3RlbXBfbmFtZS4nXCcgaW4gYmluYXJ5IHJlYWQg bW9kZScpOw0KICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgfQ0KDQogICAgLy8g LS0tLS0gUmVhZCB0aGUgZmlsZSBieSBQQ0xaSVBfUkVBRF9CTE9DS19TSVpFIG9jdGV0cyBibG9ja3MN CiAgICBmc2Vlaygkdl9maWxlX2NvbXByZXNzZWQsIDEwKTsNCiAgICAkdl9zaXplID0gJHBfaGVhZGVy Wydjb21wcmVzc2VkX3NpemUnXTsNCiAgICB3aGlsZSAoJHZfc2l6ZSAhPSAwKQ0KICAgIHsNCiAgICAg ICR2X3JlYWRfc2l6ZSA9ICgkdl9zaXplIDwgUENMWklQX1JFQURfQkxPQ0tfU0laRSA/ICR2X3NpemUg OiBQQ0xaSVBfUkVBRF9CTE9DS19TSVpFKTsNCiAgICAgICR2X2J1ZmZlciA9IEBmcmVhZCgkdl9maWxl X2NvbXByZXNzZWQsICR2X3JlYWRfc2l6ZSk7DQogICAgICAvLyR2X2JpbmFyeV9kYXRhID0gcGFjaygn YScuJHZfcmVhZF9zaXplLCAkdl9idWZmZXIpOw0KICAgICAgQGZ3cml0ZSgkdGhpcy0+emlwX2ZkLCAk dl9idWZmZXIsICR2X3JlYWRfc2l6ZSk7DQogICAgICAkdl9zaXplIC09ICR2X3JlYWRfc2l6ZTsNCiAg ICB9DQoNCiAgICAvLyAtLS0tLSBDbG9zZSB0aGUgZmlsZQ0KICAgIEBmY2xvc2UoJHZfZmlsZV9jb21w cmVzc2VkKTsNCg0KICAgIC8vIC0tLS0tIFVubGluayB0aGUgdGVtcG9yYXJ5IGZpbGUNCiAgICBAdW5s aW5rKCR2X2d6aXBfdGVtcF9uYW1lKTsNCg0KICAgIC8vIC0tLS0tIFJldHVybg0KICAgIHJldHVybiAk

dl9yZXN1bHQ7DQogIH0NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KICAvLyBGdW5jdGlvbiA6IHByaXZDYWxjdWxhdGVTdG9yZWRGaWxlbmFtZSgpDQog IC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gICBCYXNlZCBvbiBmaWxlIGRlc2NyaXB0b3IgcHJvcGVydGll cyBhbmQgZ2xvYmFsIG9wdGlvbnMsIHRoaXMgbWV0aG9kDQogIC8vICAgY2FsY3VsYXRlIHRoZSBmaWxl bmFtZSB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBhcmNoaXZlLg0KICAvLyBQYXJhbWV0ZXJzIDoN CiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIGZ1bmN0aW9u IHByaXZDYWxjdWxhdGVTdG9yZWRGaWxlbmFtZSgmJHBfZmlsZWRlc2NyLCAmJHBfb3B0aW9ucykNCiAg ew0KICAgICR2X3Jlc3VsdD0xOw0KDQogICAgLy8gLS0tLS0gV29ya2luZyB2YXJpYWJsZXMNCiAgICAk cF9maWxlbmFtZSA9ICRwX2ZpbGVkZXNjclsnZmlsZW5hbWUnXTsNCiAgICBpZiAoaXNzZXQoJHBfb3B0 aW9uc1tQQ0xaSVBfT1BUX0FERF9QQVRIXSkpIHsNCiAgICAgICRwX2FkZF9kaXIgPSAkcF9vcHRpb25z W1BDTFpJUF9PUFRfQUREX1BBVEhdOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICRwX2FkZF9kaXIg PSAnJzsNCiAgICB9DQogICAgaWYgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9SRU1PVkVfUEFU SF0pKSB7DQogICAgICAkcF9yZW1vdmVfZGlyID0gJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX1JFTU9WRV9Q QVRIXTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAkcF9yZW1vdmVfZGlyID0gJyc7DQogICAgfQ0K ICAgIGlmIChpc3NldCgkcF9vcHRpb25zW1BDTFpJUF9PUFRfUkVNT1ZFX0FMTF9QQVRIXSkpIHsNCiAg ICAgICRwX3JlbW92ZV9hbGxfZGlyID0gJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX1JFTU9WRV9BTExfUEFU SF07DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgJHBfcmVtb3ZlX2FsbF9kaXIgPSAwOw0KICAgIH0N Cg0KDQogICAgLy8gLS0tLS0gTG9vayBmb3IgZnVsbCBuYW1lIGNoYW5nZQ0KICAgIGlmIChpc3NldCgk cF9maWxlZGVzY3JbJ25ld19mdWxsX25hbWUnXSkpIHsNCiAgICAgIC8vIC0tLS0tIFJlbW92ZSBkcml2 ZSBsZXR0ZXIgaWYgYW55DQogICAgICAkdl9zdG9yZWRfZmlsZW5hbWUgPSBQY2xaaXBVdGlsVHJhbnNs YXRlV2luUGF0aCgkcF9maWxlZGVzY3JbJ25ld19mdWxsX25hbWUnXSk7DQogICAgfQ0KDQogICAgLy8g LS0tLS0gTG9vayBmb3IgcGF0aCBhbmQvb3Igc2hvcnQgbmFtZSBjaGFuZ2UNCiAgICBlbHNlIHsNCg0K ICAgICAgLy8gLS0tLS0gTG9vayBmb3Igc2hvcnQgbmFtZSBjaGFuZ2UNCiAgICAgIC8vIEl0cyB3aGVu IHdlIGNhaG5nZSBqdXN0IHRoZSBmaWxlbmFtZSBidXQgbm90IHRoZSBwYXRoDQogICAgICBpZiAoaXNz ZXQoJHBfZmlsZWRlc2NyWyduZXdfc2hvcnRfbmFtZSddKSkgew0KICAgICAgICAkdl9wYXRoX2luZm8g PSBwYXRoaW5mbygkcF9maWxlbmFtZSk7DQogICAgICAgICR2X2RpciA9ICcnOw0KICAgICAgICBpZiAo JHZfcGF0aF9pbmZvWydkaXJuYW1lJ10gIT0gJycpIHsNCiAgICAgICAgICAkdl9kaXIgPSAkdl9wYXRo X2luZm9bJ2Rpcm5hbWUnXS4nLyc7DQogICAgICAgIH0NCiAgICAgICAgJHZfc3RvcmVkX2ZpbGVuYW1l ID0gJHZfZGlyLiRwX2ZpbGVkZXNjclsnbmV3X3Nob3J0X25hbWUnXTsNCiAgICAgIH0NCiAgICAgIGVs c2Ugew0KICAgICAgICAvLyAtLS0tLSBDYWxjdWxhdGUgdGhlIHN0b3JlZCBmaWxlbmFtZQ0KICAgICAg ICAkdl9zdG9yZWRfZmlsZW5hbWUgPSAkcF9maWxlbmFtZTsNCiAgICAgIH0NCg0KICAgICAgLy8gLS0t LS0gTG9vayBmb3IgYWxsIHBhdGggdG8gcmVtb3ZlDQogICAgICBpZiAoJHBfcmVtb3ZlX2FsbF9kaXIp IHsNCiAgICAgICAgJHZfc3RvcmVkX2ZpbGVuYW1lID0gYmFzZW5hbWUoJHBfZmlsZW5hbWUpOw0KICAg ICAgfQ0KICAgICAgLy8gLS0tLS0gTG9vayBmb3IgcGFydGlhbCBwYXRoIHJlbW92ZQ0KICAgICAgZWxz ZSBpZiAoJHBfcmVtb3ZlX2RpciAhPSAiIikgew0KICAgICAgICBpZiAoc3Vic3RyKCRwX3JlbW92ZV9k aXIsIC0xKSAhPSAnLycpDQogICAgICAgICAgJHBfcmVtb3ZlX2RpciAuPSAiLyI7DQoNCiAgICAgICAg aWYgKCAgIChzdWJzdHIoJHBfZmlsZW5hbWUsIDAsIDIpID09ICIuLyIpDQogICAgICAgICAgICB8fCAo c3Vic3RyKCRwX3JlbW92ZV9kaXIsIDAsIDIpID09ICIuLyIpKSB7DQoNCiAgICAgICAgICBpZiAoICAg KHN1YnN0cigkcF9maWxlbmFtZSwgMCwgMikgPT0gIi4vIikNCiAgICAgICAgICAgICAgJiYgKHN1YnN0 cigkcF9yZW1vdmVfZGlyLCAwLCAyKSAhPSAiLi8iKSkgew0KICAgICAgICAgICAgJHBfcmVtb3ZlX2Rp ciA9ICIuLyIuJHBfcmVtb3ZlX2RpcjsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKCAgIChzdWJz dHIoJHBfZmlsZW5hbWUsIDAsIDIpICE9ICIuLyIpDQogICAgICAgICAgICAgICYmIChzdWJzdHIoJHBf cmVtb3ZlX2RpciwgMCwgMikgPT0gIi4vIikpIHsNCiAgICAgICAgICAgICRwX3JlbW92ZV9kaXIgPSBz dWJzdHIoJHBfcmVtb3ZlX2RpciwgMik7DQogICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAg JHZfY29tcGFyZSA9IFBjbFppcFV0aWxQYXRoSW5jbHVzaW9uKCRwX3JlbW92ZV9kaXIsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdl9zdG9yZWRfZmlsZW5hbWUpOw0K ICAgICAgICBpZiAoJHZfY29tcGFyZSA+IDApIHsNCiAgICAgICAgICBpZiAoJHZfY29tcGFyZSA9PSAy KSB7DQogICAgICAgICAgICAkdl9zdG9yZWRfZmlsZW5hbWUgPSAiIjsNCiAgICAgICAgICB9DQogICAg ICAgICAgZWxzZSB7DQogICAgICAgICAgICAkdl9zdG9yZWRfZmlsZW5hbWUgPSBzdWJzdHIoJHZfc3Rv cmVkX2ZpbGVuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxl bigkcF9yZW1vdmVfZGlyKSk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAg IC8vIC0tLS0tIFJlbW92ZSBkcml2ZSBsZXR0ZXIgaWYgYW55DQogICAgICAkdl9zdG9yZWRfZmlsZW5h bWUgPSBQY2xaaXBVdGlsVHJhbnNsYXRlV2luUGF0aCgkdl9zdG9yZWRfZmlsZW5hbWUpOw0KDQogICAg ICAvLyAtLS0tLSBMb29rIGZvciBwYXRoIHRvIGFkZA0KICAgICAgaWYgKCRwX2FkZF9kaXIgIT0gIiIp IHsNCiAgICAgICAgaWYgKHN1YnN0cigkcF9hZGRfZGlyLCAtMSkgPT0gIi8iKQ0KICAgICAgICAgICR2 X3N0b3JlZF9maWxlbmFtZSA9ICRwX2FkZF9kaXIuJHZfc3RvcmVkX2ZpbGVuYW1lOw0KICAgICAgICBl bHNlDQogICAgICAgICAgJHZfc3RvcmVkX2ZpbGVuYW1lID0gJHBfYWRkX2Rpci4iLyIuJHZfc3RvcmVk

X2ZpbGVuYW1lOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIC0tLS0tIEZpbGVuYW1lIChyZWR1Y2Ug dGhlIHBhdGggb2Ygc3RvcmVkIG5hbWUpDQogICAgJHZfc3RvcmVkX2ZpbGVuYW1lID0gUGNsWmlwVXRp bFBhdGhSZWR1Y3Rpb24oJHZfc3RvcmVkX2ZpbGVuYW1lKTsNCiAgICAkcF9maWxlZGVzY3JbJ3N0b3Jl ZF9maWxlbmFtZSddID0gJHZfc3RvcmVkX2ZpbGVuYW1lOw0KDQogICAgLy8gLS0tLS0gUmV0dXJuDQog ICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdldyaXRlRmlsZUhlYWRlcigp DQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vIFJldHVybiBWYWx1ZXMg Og0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBwcml2V3JpdGVGaWxlSGVhZGVy KCYkcF9oZWFkZXIpDQogIHsNCiAgICAkdl9yZXN1bHQ9MTsNCg0KICAgIC8vIC0tLS0tIFN0b3JlIHRo ZSBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGZpbGUNCiAgICAkcF9oZWFkZXJbJ29mZnNldCddID0gZnRl bGwoJHRoaXMtPnppcF9mZCk7DQoNCiAgICAvLyAtLS0tLSBUcmFuc2Zvcm0gVU5JWCBtdGltZSB0byBE T1MgZm9ybWF0IG1kYXRlL210aW1lDQogICAgJHZfZGF0ZSA9IGdldGRhdGUoJHBfaGVhZGVyWydtdGlt ZSddKTsNCiAgICAkdl9tdGltZSA9ICgkdl9kYXRlWydob3VycyddPDwxMSkgKyAoJHZfZGF0ZVsnbWlu dXRlcyddPDw1KSArICR2X2RhdGVbJ3NlY29uZHMnXS8yOw0KICAgICR2X21kYXRlID0gKCgkdl9kYXRl Wyd5ZWFyJ10tMTk4MCk8PDkpICsgKCR2X2RhdGVbJ21vbiddPDw1KSArICR2X2RhdGVbJ21kYXknXTsN Cg0KICAgIC8vIC0tLS0tIFBhY2tlZCBkYXRhDQogICAgJHZfYmluYXJ5X2RhdGEgPSBwYWNrKCJWdnZ2 dnZWVlZ2diIsIDB4MDQwMzRiNTAsDQoJICAgICAgICAgICAgICAgICAgICAgICRwX2hlYWRlclsndmVy c2lvbl9leHRyYWN0ZWQnXSwgJHBfaGVhZGVyWydmbGFnJ10sDQogICAgICAgICAgICAgICAgICAgICAg ICAgICRwX2hlYWRlclsnY29tcHJlc3Npb24nXSwgJHZfbXRpbWUsICR2X21kYXRlLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAkcF9oZWFkZXJbJ2NyYyddLCAkcF9oZWFkZXJbJ2NvbXByZXNzZWRfc2l6 ZSddLA0KCQkJCQkJICAkcF9oZWFkZXJbJ3NpemUnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg c3RybGVuKCRwX2hlYWRlclsnc3RvcmVkX2ZpbGVuYW1lJ10pLA0KCQkJCQkJICAkcF9oZWFkZXJbJ2V4 dHJhX2xlbiddKTsNCg0KICAgIC8vIC0tLS0tIFdyaXRlIHRoZSBmaXJzdCAxNDggYnl0ZXMgb2YgdGhl IGhlYWRlciBpbiB0aGUgYXJjaGl2ZQ0KICAgIGZwdXRzKCR0aGlzLT56aXBfZmQsICR2X2JpbmFyeV9k YXRhLCAzMCk7DQoNCiAgICAvLyAtLS0tLSBXcml0ZSB0aGUgdmFyaWFibGUgZmllbGRzDQogICAgaWYg KHN0cmxlbigkcF9oZWFkZXJbJ3N0b3JlZF9maWxlbmFtZSddKSAhPSAwKQ0KICAgIHsNCiAgICAgIGZw dXRzKCR0aGlzLT56aXBfZmQsICRwX2hlYWRlclsnc3RvcmVkX2ZpbGVuYW1lJ10sIHN0cmxlbigkcF9o ZWFkZXJbJ3N0b3JlZF9maWxlbmFtZSddKSk7DQogICAgfQ0KICAgIGlmICgkcF9oZWFkZXJbJ2V4dHJh X2xlbiddICE9IDApDQogICAgew0KICAgICAgZnB1dHMoJHRoaXMtPnppcF9mZCwgJHBfaGVhZGVyWydl eHRyYSddLCAkcF9oZWFkZXJbJ2V4dHJhX2xlbiddKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBSZXR1 cm4NCiAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoN CiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBwcml2V3JpdGVDZW50cmFs RmlsZUhlYWRlcigpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vIFJl dHVybiBWYWx1ZXMgOg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBwcml2V3Jp dGVDZW50cmFsRmlsZUhlYWRlcigmJHBfaGVhZGVyKQ0KICB7DQogICAgJHZfcmVzdWx0PTE7DQoNCiAg ICAvLyBUQkMNCiAgICAvL2ZvcihyZXNldCgkcF9oZWFkZXIpOyAka2V5ID0ga2V5KCRwX2hlYWRlcik7 IG5leHQoJHBfaGVhZGVyKSkgew0KICAgIC8vfQ0KDQogICAgLy8gLS0tLS0gVHJhbnNmb3JtIFVOSVgg bXRpbWUgdG8gRE9TIGZvcm1hdCBtZGF0ZS9tdGltZQ0KICAgICR2X2RhdGUgPSBnZXRkYXRlKCRwX2hl YWRlclsnbXRpbWUnXSk7DQogICAgJHZfbXRpbWUgPSAoJHZfZGF0ZVsnaG91cnMnXTw8MTEpICsgKCR2 X2RhdGVbJ21pbnV0ZXMnXTw8NSkgKyAkdl9kYXRlWydzZWNvbmRzJ10vMjsNCiAgICAkdl9tZGF0ZSA9 ICgoJHZfZGF0ZVsneWVhciddLTE5ODApPDw5KSArICgkdl9kYXRlWydtb24nXTw8NSkgKyAkdl9kYXRl WydtZGF5J107DQoNCg0KICAgIC8vIC0tLS0tIFBhY2tlZCBkYXRhDQogICAgJHZfYmluYXJ5X2RhdGEg PSBwYWNrKCJWdnZ2dnZ2VlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAsDQoJICAgICAgICAgICAgICAgICAg ICAgICRwX2hlYWRlclsndmVyc2lvbiddLCAkcF9oZWFkZXJbJ3ZlcnNpb25fZXh0cmFjdGVkJ10sDQog ICAgICAgICAgICAgICAgICAgICAgICAgICRwX2hlYWRlclsnZmxhZyddLCAkcF9oZWFkZXJbJ2NvbXBy ZXNzaW9uJ10sDQoJCQkJCQkgICR2X210aW1lLCAkdl9tZGF0ZSwgJHBfaGVhZGVyWydjcmMnXSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgJHBfaGVhZGVyWydjb21wcmVzc2VkX3NpemUnXSwgJHBfaGVh ZGVyWydzaXplJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigkcF9oZWFkZXJbJ3N0 b3JlZF9maWxlbmFtZSddKSwNCgkJCQkJCSAgJHBfaGVhZGVyWydleHRyYV9sZW4nXSwgJHBfaGVhZGVy Wydjb21tZW50X2xlbiddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAkcF9oZWFkZXJbJ2Rpc2sn XSwgJHBfaGVhZGVyWydpbnRlcm5hbCddLA0KCQkJCQkJICAkcF9oZWFkZXJbJ2V4dGVybmFsJ10sICRw X2hlYWRlclsnb2Zmc2V0J10pOw0KDQogICAgLy8gLS0tLS0gV3JpdGUgdGhlIDQyIGJ5dGVzIG9mIHRo ZSBoZWFkZXIgaW4gdGhlIHppcCBmaWxlDQogICAgZnB1dHMoJHRoaXMtPnppcF9mZCwgJHZfYmluYXJ5 X2RhdGEsIDQ2KTsNCg0KICAgIC8vIC0tLS0tIFdyaXRlIHRoZSB2YXJpYWJsZSBmaWVsZHMNCiAgICBp

ZiAoc3RybGVuKCRwX2hlYWRlclsnc3RvcmVkX2ZpbGVuYW1lJ10pICE9IDApDQogICAgew0KICAgICAg ZnB1dHMoJHRoaXMtPnppcF9mZCwgJHBfaGVhZGVyWydzdG9yZWRfZmlsZW5hbWUnXSwgc3RybGVuKCRw X2hlYWRlclsnc3RvcmVkX2ZpbGVuYW1lJ10pKTsNCiAgICB9DQogICAgaWYgKCRwX2hlYWRlclsnZXh0 cmFfbGVuJ10gIT0gMCkNCiAgICB7DQogICAgICBmcHV0cygkdGhpcy0+emlwX2ZkLCAkcF9oZWFkZXJb J2V4dHJhJ10sICRwX2hlYWRlclsnZXh0cmFfbGVuJ10pOw0KICAgIH0NCiAgICBpZiAoJHBfaGVhZGVy Wydjb21tZW50X2xlbiddICE9IDApDQogICAgew0KICAgICAgZnB1dHMoJHRoaXMtPnppcF9mZCwgJHBf aGVhZGVyWydjb21tZW50J10sICRwX2hlYWRlclsnY29tbWVudF9sZW4nXSk7DQogICAgfQ0KDQogICAg Ly8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJp dldyaXRlQ2VudHJhbEhlYWRlcigpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6 DQogIC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlv biBwcml2V3JpdGVDZW50cmFsSGVhZGVyKCRwX25iX2VudHJpZXMsICRwX3NpemUsICRwX29mZnNldCwg JHBfY29tbWVudCkNCiAgew0KICAgICR2X3Jlc3VsdD0xOw0KDQogICAgLy8gLS0tLS0gUGFja2VkIGRh dGENCiAgICAkdl9iaW5hcnlfZGF0YSA9IHBhY2soIlZ2dnZ2VlZ2IiwgMHgwNjA1NGI1MCwgMCwgMCwg JHBfbmJfZW50cmllcywNCgkgICAgICAgICAgICAgICAgICAgICAgJHBfbmJfZW50cmllcywgJHBfc2l6 ZSwNCgkJCQkJCSAgJHBfb2Zmc2V0LCBzdHJsZW4oJHBfY29tbWVudCkpOw0KDQogICAgLy8gLS0tLS0g V3JpdGUgdGhlIDIyIGJ5dGVzIG9mIHRoZSBoZWFkZXIgaW4gdGhlIHppcCBmaWxlDQogICAgZnB1dHMo JHRoaXMtPnppcF9mZCwgJHZfYmluYXJ5X2RhdGEsIDIyKTsNCg0KICAgIC8vIC0tLS0tIFdyaXRlIHRo ZSB2YXJpYWJsZSBmaWVsZHMNCiAgICBpZiAoc3RybGVuKCRwX2NvbW1lbnQpICE9IDApDQogICAgew0K ICAgICAgZnB1dHMoJHRoaXMtPnppcF9mZCwgJHBfY29tbWVudCwgc3RybGVuKCRwX2NvbW1lbnQpKTsN CiAgICB9DQoNCiAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9DQog IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8g RnVuY3Rpb24gOiBwcml2TGlzdCgpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6 DQogIC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlv biBwcml2TGlzdCgmJHBfbGlzdCkNCiAgew0KICAgICR2X3Jlc3VsdD0xOw0KDQogICAgLy8gLS0tLS0g TWFnaWMgcXVvdGVzIHRyaWNrDQogICAgJHRoaXMtPnByaXZEaXNhYmxlTWFnaWNRdW90ZXMoKTsNCg0K ICAgIC8vIC0tLS0tIE9wZW4gdGhlIHppcCBmaWxlDQogICAgaWYgKCgkdGhpcy0+emlwX2ZkID0gQGZv cGVuKCR0aGlzLT56aXBuYW1lLCAncmInKSkgPT0gMCkNCiAgICB7DQogICAgICAvLyAtLS0tLSBNYWdp YyBxdW90ZXMgdHJpY2sNCiAgICAgICR0aGlzLT5wcml2U3dhcEJhY2tNYWdpY1F1b3RlcygpOw0KDQog ICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9F UlJfUkVBRF9PUEVOX0ZBSUwsICdVbmFibGUgdG8gb3BlbiBhcmNoaXZlIFwnJy4kdGhpcy0+emlwbmFt ZS4nXCcgaW4gYmluYXJ5IHJlYWQgbW9kZScpOw0KDQogICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAg IHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFJlYWQgdGhl IGNlbnRyYWwgZGlyZWN0b3J5IGluZm9ybWF0aW9ucw0KICAgICR2X2NlbnRyYWxfZGlyID0gYXJyYXko KTsNCiAgICBpZiAoKCR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2UmVhZEVuZENlbnRyYWxEaXIoJHZfY2Vu dHJhbF9kaXIpKSAhPSAxKQ0KICAgIHsNCiAgICAgICR0aGlzLT5wcml2U3dhcEJhY2tNYWdpY1F1b3Rl cygpOw0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBHbyB0byBi ZWdpbm5pbmcgb2YgQ2VudHJhbCBEaXINCiAgICBAcmV3aW5kKCR0aGlzLT56aXBfZmQpOw0KICAgIGlm IChAZnNlZWsoJHRoaXMtPnppcF9mZCwgJHZfY2VudHJhbF9kaXJbJ29mZnNldCddKSkNCiAgICB7DQog ICAgICAkdGhpcy0+cHJpdlN3YXBCYWNrTWFnaWNRdW90ZXMoKTsNCg0KICAgICAgLy8gLS0tLS0gRXJy b3IgbG9nDQogICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX0lOVkFMSURfQVJDSElW RV9aSVAsICdJbnZhbGlkIGFyY2hpdmUgc2l6ZScpOw0KDQogICAgICAvLyAtLS0tLSBSZXR1cm4NCiAg ICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFJlYWQg ZWFjaCBlbnRyeQ0KICAgIGZvciAoJGk9MDsgJGk8JHZfY2VudHJhbF9kaXJbJ2VudHJpZXMnXTsgJGkr KykNCiAgICB7DQogICAgICAvLyAtLS0tLSBSZWFkIHRoZSBmaWxlIGhlYWRlcg0KICAgICAgaWYgKCgk dl9yZXN1bHQgPSAkdGhpcy0+cHJpdlJlYWRDZW50cmFsRmlsZUhlYWRlcigkdl9oZWFkZXIpKSAhPSAx KQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+cHJpdlN3YXBCYWNrTWFnaWNRdW90ZXMoKTsNCiAgICAg ICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICAgIH0NCiAgICAgICR2X2hlYWRlclsnaW5kZXgnXSA9ICRp Ow0KDQogICAgICAvLyAtLS0tLSBHZXQgdGhlIG9ubHkgaW50ZXJlc3RpbmcgYXR0cmlidXRlcw0KICAg ICAgJHRoaXMtPnByaXZDb252ZXJ0SGVhZGVyMkZpbGVJbmZvKCR2X2hlYWRlciwgJHBfbGlzdFskaV0p Ow0KICAgICAgdW5zZXQoJHZfaGVhZGVyKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBDbG9zZSB0aGUg emlwIGZpbGUNCiAgICAkdGhpcy0+cHJpdkNsb3NlRmQoKTsNCg0KICAgIC8vIC0tLS0tIE1hZ2ljIHF1 b3RlcyB0cmljaw0KICAgICR0aGlzLT5wcml2U3dhcEJhY2tNYWdpY1F1b3RlcygpOw0KDQogICAgLy8g LS0tLS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0t

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdkNv bnZlcnRIZWFkZXIyRmlsZUluZm8oKQ0KICAvLyBEZXNjcmlwdGlvbiA6DQogIC8vICAgVGhpcyBmdW5j dGlvbiB0YWtlcyB0aGUgZmlsZSBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnkN CiAgLy8gICBlbnRyaWVzIGFuZCBleHRyYWN0IHRoZSBpbnRlcmVzdGluZyBwYXJhbWV0ZXJzIHRoYXQg d2lsbCBiZSBnaXZlbiBiYWNrLg0KICAvLyAgIFRoZSByZXN1bHRpbmcgZmlsZSBpbmZvcyBhcmUgc2V0 IGluIHRoZSBhcnJheSAkcF9pbmZvDQogIC8vICAgICAkcF9pbmZvWydmaWxlbmFtZSddIDogRmlsZW5h bWUgd2l0aCBmdWxsIHBhdGguIEdpdmVuIGJ5IHVzZXIgKGFkZCksDQogIC8vICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXh0cmFjdGVkIGluIHRoZSBmaWxlc3lzdGVtIChleHRyYWN0KS4NCiAgLy8gICAg ICRwX2luZm9bJ3N0b3JlZF9maWxlbmFtZSddIDogU3RvcmVkIGZpbGVuYW1lIGluIHRoZSBhcmNoaXZl Lg0KICAvLyAgICAgJHBfaW5mb1snc2l6ZSddID0gU2l6ZSBvZiB0aGUgZmlsZS4NCiAgLy8gICAgICRw X2luZm9bJ2NvbXByZXNzZWRfc2l6ZSddID0gQ29tcHJlc3NlZCBzaXplIG9mIHRoZSBmaWxlLg0KICAv LyAgICAgJHBfaW5mb1snbXRpbWUnXSA9IExhc3QgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGZpbGUu DQogIC8vICAgICAkcF9pbmZvWydjb21tZW50J10gPSBDb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUg ZmlsZS4NCiAgLy8gICAgICRwX2luZm9bJ2ZvbGRlciddID0gdHJ1ZS9mYWxzZSA6IGluZGljYXRlcyBp ZiB0aGUgZW50cnkgaXMgYSBmb2xkZXIgb3Igbm90Lg0KICAvLyAgICAgJHBfaW5mb1snc3RhdHVzJ10g PSBzdGF0dXMgb2YgdGhlIGFjdGlvbiBvbiB0aGUgZmlsZS4NCiAgLy8gICAgICRwX2luZm9bJ2NyYydd ID0gQ1JDIG9mIHRoZSBmaWxlIGNvbnRlbnQuDQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyBSZXR1cm4g VmFsdWVzIDoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gcHJpdkNvbnZlcnRI ZWFkZXIyRmlsZUluZm8oJHBfaGVhZGVyLCAmJHBfaW5mbykNCiAgew0KICAgICR2X3Jlc3VsdD0xOw0K DQogICAgLy8gLS0tLS0gR2V0IHRoZSBpbnRlcmVzdGluZyBhdHRyaWJ1dGVzDQogICAgJHZfdGVtcF9w YXRoID0gUGNsWmlwVXRpbFBhdGhSZWR1Y3Rpb24oJHBfaGVhZGVyWydmaWxlbmFtZSddKTsNCiAgICAk cF9pbmZvWydmaWxlbmFtZSddID0gJHZfdGVtcF9wYXRoOw0KICAgICR2X3RlbXBfcGF0aCA9IFBjbFpp cFV0aWxQYXRoUmVkdWN0aW9uKCRwX2hlYWRlclsnc3RvcmVkX2ZpbGVuYW1lJ10pOw0KICAgICRwX2lu Zm9bJ3N0b3JlZF9maWxlbmFtZSddID0gJHZfdGVtcF9wYXRoOw0KICAgICRwX2luZm9bJ3NpemUnXSA9 ICRwX2hlYWRlclsnc2l6ZSddOw0KICAgICRwX2luZm9bJ2NvbXByZXNzZWRfc2l6ZSddID0gJHBfaGVh ZGVyWydjb21wcmVzc2VkX3NpemUnXTsNCiAgICAkcF9pbmZvWydtdGltZSddID0gJHBfaGVhZGVyWydt dGltZSddOw0KICAgICRwX2luZm9bJ2NvbW1lbnQnXSA9ICRwX2hlYWRlclsnY29tbWVudCddOw0KICAg ICRwX2luZm9bJ2ZvbGRlciddID0gKCgkcF9oZWFkZXJbJ2V4dGVybmFsJ10mMHgwMDAwMDAxMCk9PTB4 MDAwMDAwMTApOw0KICAgICRwX2luZm9bJ2luZGV4J10gPSAkcF9oZWFkZXJbJ2luZGV4J107DQogICAg JHBfaW5mb1snc3RhdHVzJ10gPSAkcF9oZWFkZXJbJ3N0YXR1cyddOw0KICAgICRwX2luZm9bJ2NyYydd ID0gJHBfaGVhZGVyWydjcmMnXTsNCg0KICAgIC8vIC0tLS0tIFJldHVybg0KICAgIHJldHVybiAkdl9y ZXN1bHQ7DQogIH0NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAvLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KICAvLyBGdW5jdGlvbiA6IHByaXZFeHRyYWN0QnlSdWxlKCkNCiAgLy8gRGVzY3JpcHRp b24gOg0KICAvLyAgIEV4dHJhY3QgYSBmaWxlIG9yIGRpcmVjdG9yeSBkZXBlbmRpbmcgb2YgcnVsZXMg KGJ5IGluZGV4LCBieSBuYW1lLCAuLi4pDQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyAgICRwX2ZpbGVf bGlzdCA6IEFuIGFycmF5IHdoZXJlIHdpbGwgYmUgcGxhY2VkIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2gN CiAgLy8gICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgZmlsZQ0KICAvLyAgICRwX3BhdGggOiBQYXRo IHRvIGFkZCB3aGlsZSB3cml0aW5nIHRoZSBleHRyYWN0ZWQgZmlsZXMNCiAgLy8gICAkcF9yZW1vdmVf cGF0aCA6IFBhdGggdG8gcmVtb3ZlIChmcm9tIHRoZSBmaWxlIG1lbW9yaXplZCBwYXRoKSB3aGlsZSB3 cml0aW5nIHRoZQ0KICAvLyAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkIGZpbGVzLiBJZiB0aGUg cGF0aCBkb2VzIG5vdCBtYXRjaCB0aGUgZmlsZSBwYXRoLA0KICAvLyAgICAgICAgICAgICAgICAgICAg dGhlIGZpbGUgaXMgZXh0cmFjdGVkIHdpdGggaXRzIG1lbW9yaXplZCBwYXRoLg0KICAvLyAgICAgICAg ICAgICAgICAgICAgJHBfcmVtb3ZlX3BhdGggZG9lcyBub3QgYXBwbHkgdG8gJ2xpc3QnIG1vZGUuDQog IC8vICAgICAgICAgICAgICAgICAgICAkcF9wYXRoIGFuZCAkcF9yZW1vdmVfcGF0aCBhcmUgY29tbXVs YXRpdmUuDQogIC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAgIDEgb24gc3VjY2VzcywwIG9yIGxlc3Mg b24gZXJyb3IgKHNlZSBlcnJvciBjb2RlIGxpc3QpDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQog IGZ1bmN0aW9uIHByaXZFeHRyYWN0QnlSdWxlKCYkcF9maWxlX2xpc3QsICRwX3BhdGgsICRwX3JlbW92 ZV9wYXRoLCAkcF9yZW1vdmVfYWxsX3BhdGgsICYkcF9vcHRpb25zKQ0KICB7DQogICAgJHZfcmVzdWx0 PTE7DQoNCiAgICAvLyAtLS0tLSBNYWdpYyBxdW90ZXMgdHJpY2sNCiAgICAkdGhpcy0+cHJpdkRpc2Fi bGVNYWdpY1F1b3RlcygpOw0KDQogICAgLy8gLS0tLS0gQ2hlY2sgdGhlIHBhdGgNCiAgICBpZiAoICAg KCRwX3BhdGggPT0gIiIpDQoJICAgIHx8ICggICAoc3Vic3RyKCRwX3BhdGgsIDAsIDEpICE9ICIvIikN CgkJICAgICYmIChzdWJzdHIoJHBfcGF0aCwgMCwgMykgIT0gIi4uLyIpDQoJCQkmJiAoc3Vic3RyKCRw X3BhdGgsMSwyKSE9IjovIikpKQ0KICAgICAgJHBfcGF0aCA9ICIuLyIuJHBfcGF0aDsNCg0KICAgIC8v IC0tLS0tIFJlZHVjZSB0aGUgcGF0aCBsYXN0IChhbmQgZHVwbGljYXRlZCkgJy8nDQogICAgaWYgKCgk

cF9wYXRoICE9ICIuLyIpICYmICgkcF9wYXRoICE9ICIvIikpDQogICAgew0KICAgICAgLy8gLS0tLS0g TG9vayBmb3IgdGhlIHBhdGggZW5kICcvJw0KICAgICAgd2hpbGUgKHN1YnN0cigkcF9wYXRoLCAtMSkg PT0gIi8iKQ0KICAgICAgew0KICAgICAgICAkcF9wYXRoID0gc3Vic3RyKCRwX3BhdGgsIDAsIHN0cmxl bigkcF9wYXRoKS0xKTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAvLyAtLS0tLSBMb29rIGZvciBwYXRo IHRvIHJlbW92ZSBmb3JtYXQgKHNob3VsZCBlbmQgYnkgLykNCiAgICBpZiAoKCRwX3JlbW92ZV9wYXRo ICE9ICIiKSAmJiAoc3Vic3RyKCRwX3JlbW92ZV9wYXRoLCAtMSkgIT0gJy8nKSkNCiAgICB7DQogICAg ICAkcF9yZW1vdmVfcGF0aCAuPSAnLyc7DQogICAgfQ0KICAgICRwX3JlbW92ZV9wYXRoX3NpemUgPSBz dHJsZW4oJHBfcmVtb3ZlX3BhdGgpOw0KDQogICAgLy8gLS0tLS0gT3BlbiB0aGUgemlwIGZpbGUNCiAg ICBpZiAoKCR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2T3BlbkZkKCdyYicpKSAhPSAxKQ0KICAgIHsNCiAg ICAgICR0aGlzLT5wcml2U3dhcEJhY2tNYWdpY1F1b3RlcygpOw0KICAgICAgcmV0dXJuICR2X3Jlc3Vs dDsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBSZWFkIHRoZSBjZW50cmFsIGRpcmVjdG9yeSBpbmZvcm1h dGlvbnMNCiAgICAkdl9jZW50cmFsX2RpciA9IGFycmF5KCk7DQogICAgaWYgKCgkdl9yZXN1bHQgPSAk dGhpcy0+cHJpdlJlYWRFbmRDZW50cmFsRGlyKCR2X2NlbnRyYWxfZGlyKSkgIT0gMSkNCiAgICB7DQog ICAgICAvLyAtLS0tLSBDbG9zZSB0aGUgemlwIGZpbGUNCiAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgp Ow0KICAgICAgJHRoaXMtPnByaXZTd2FwQmFja01hZ2ljUXVvdGVzKCk7DQoNCiAgICAgIHJldHVybiAk dl9yZXN1bHQ7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gU3RhcnQgYXQgYmVnaW5uaW5nIG9mIENlbnRy YWwgRGlyDQogICAgJHZfcG9zX2VudHJ5ID0gJHZfY2VudHJhbF9kaXJbJ29mZnNldCddOw0KDQogICAg Ly8gLS0tLS0gUmVhZCBlYWNoIGVudHJ5DQogICAgJGpfc3RhcnQgPSAwOw0KICAgIGZvciAoJGk9MCwg JHZfbmJfZXh0cmFjdGVkPTA7ICRpPCR2X2NlbnRyYWxfZGlyWydlbnRyaWVzJ107ICRpKyspDQogICAg ew0KDQogICAgICAvLyAtLS0tLSBSZWFkIG5leHQgQ2VudHJhbCBkaXIgZW50cnkNCiAgICAgIEByZXdp bmQoJHRoaXMtPnppcF9mZCk7DQogICAgICBpZiAoQGZzZWVrKCR0aGlzLT56aXBfZmQsICR2X3Bvc19l bnRyeSkpDQogICAgICB7DQogICAgICAgIC8vIC0tLS0tIENsb3NlIHRoZSB6aXAgZmlsZQ0KICAgICAg ICAkdGhpcy0+cHJpdkNsb3NlRmQoKTsNCiAgICAgICAgJHRoaXMtPnByaXZTd2FwQmFja01hZ2ljUXVv dGVzKCk7DQoNCiAgICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAgICAgIFBjbFppcDo6cHJpdkVy cm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9BUkNISVZFX1pJUCwgJ0ludmFsaWQgYXJjaGl2ZSBzaXpl Jyk7DQoNCiAgICAgICAgLy8gLS0tLS0gUmV0dXJuDQogICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9y Q29kZSgpOw0KICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBSZWFkIHRoZSBmaWxlIGhlYWRlcg0KICAg ICAgJHZfaGVhZGVyID0gYXJyYXkoKTsNCiAgICAgIGlmICgoJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZS ZWFkQ2VudHJhbEZpbGVIZWFkZXIoJHZfaGVhZGVyKSkgIT0gMSkNCiAgICAgIHsNCiAgICAgICAgLy8g LS0tLS0gQ2xvc2UgdGhlIHppcCBmaWxlDQogICAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgpOw0KICAg ICAgICAkdGhpcy0+cHJpdlN3YXBCYWNrTWFnaWNRdW90ZXMoKTsNCg0KICAgICAgICByZXR1cm4gJHZf cmVzdWx0Ow0KICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBTdG9yZSB0aGUgaW5kZXgNCiAgICAgICR2 X2hlYWRlclsnaW5kZXgnXSA9ICRpOw0KDQogICAgICAvLyAtLS0tLSBTdG9yZSB0aGUgZmlsZSBwb3Np dGlvbg0KICAgICAgJHZfcG9zX2VudHJ5ID0gZnRlbGwoJHRoaXMtPnppcF9mZCk7DQoNCiAgICAgIC8v IC0tLS0tIExvb2sgZm9yIHRoZSBzcGVjaWZpYyBleHRyYWN0IHJ1bGVzDQogICAgICAkdl9leHRyYWN0 ID0gZmFsc2U7DQoNCiAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGV4dHJhY3QgYnkgbmFtZSBydWxlDQog ICAgICBpZiAoICAgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9CWV9OQU1FXSkpDQogICAgICAg ICAgJiYgKCRwX29wdGlvbnNbUENMWklQX09QVF9CWV9OQU1FXSAhPSAwKSkgew0KDQogICAgICAgICAg Ly8gLS0tLS0gTG9vayBpZiB0aGUgZmlsZW5hbWUgaXMgaW4gdGhlIGxpc3QNCiAgICAgICAgICBmb3Ig KCRqPTA7ICgkajxzaXplb2YoJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX0JZX05BTUVdKSkgJiYgKCEkdl9l eHRyYWN0KTsgJGorKykgew0KDQogICAgICAgICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGEgZGlyZWN0 b3J5DQogICAgICAgICAgICAgIGlmIChzdWJzdHIoJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX0JZX05BTUVd WyRqXSwgLTEpID09ICIvIikgew0KDQogICAgICAgICAgICAgICAgICAvLyAtLS0tLSBMb29rIGlmIHRo ZSBkaXJlY3RvcnkgaXMgaW4gdGhlIGZpbGVuYW1lIHBhdGgNCiAgICAgICAgICAgICAgICAgIGlmICgg ICAoc3RybGVuKCR2X2hlYWRlclsnc3RvcmVkX2ZpbGVuYW1lJ10pID4gc3RybGVuKCRwX29wdGlvbnNb UENMWklQX09QVF9CWV9OQU1FXVskal0pKQ0KICAgICAgICAgICAgICAgICAgICAgICYmIChzdWJzdHIo JHZfaGVhZGVyWydzdG9yZWRfZmlsZW5hbWUnXSwgMCwgc3RybGVuKCRwX29wdGlvbnNbUENMWklQX09Q VF9CWV9OQU1FXVskal0pKSA9PSAkcF9vcHRpb25zW1BDTFpJUF9PUFRfQllfTkFNRV1bJGpdKSkgew0K ICAgICAgICAgICAgICAgICAgICAgICR2X2V4dHJhY3QgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAg fQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGEgZmlsZW5h bWUNCiAgICAgICAgICAgICAgZWxzZWlmICgkdl9oZWFkZXJbJ3N0b3JlZF9maWxlbmFtZSddID09ICRw X29wdGlvbnNbUENMWklQX09QVF9CWV9OQU1FXVskal0pIHsNCiAgICAgICAgICAgICAgICAgICR2X2V4 dHJhY3QgPSB0cnVlOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgfQ0KDQogICAg ICAvLyAtLS0tLSBMb29rIGZvciBleHRyYWN0IGJ5IGVyZWcgcnVsZQ0KICAgICAgLy8gZXJlZygpIGlz IGRlcHJlY2F0ZWQgd2l0aCBQSFAgNS4zDQogICAgICAvKg0KICAgICAgZWxzZSBpZiAoICAgKGlzc2V0 KCRwX29wdGlvbnNbUENMWklQX09QVF9CWV9FUkVHXSkpDQogICAgICAgICAgICAgICAmJiAoJHBfb3B0 aW9uc1tQQ0xaSVBfT1BUX0JZX0VSRUddICE9ICIiKSkgew0KDQogICAgICAgICAgaWYgKGVyZWcoJHBf b3B0aW9uc1tQQ0xaSVBfT1BUX0JZX0VSRUddLCAkdl9oZWFkZXJbJ3N0b3JlZF9maWxlbmFtZSddKSkg ew0KICAgICAgICAgICAgICAkdl9leHRyYWN0ID0gdHJ1ZTsNCiAgICAgICAgICB9DQogICAgICB9DQog ICAgICAqLw0KDQogICAgICAvLyAtLS0tLSBMb29rIGZvciBleHRyYWN0IGJ5IHByZWcgcnVsZQ0KICAg

ICAgZWxzZSBpZiAoICAgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9CWV9QUkVHXSkpDQogICAg ICAgICAgICAgICAmJiAoJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX0JZX1BSRUddICE9ICIiKSkgew0KDQog ICAgICAgICAgaWYgKHByZWdfbWF0Y2goJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX0JZX1BSRUddLCAkdl9o ZWFkZXJbJ3N0b3JlZF9maWxlbmFtZSddKSkgew0KICAgICAgICAgICAgICAkdl9leHRyYWN0ID0gdHJ1 ZTsNCiAgICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGV4dHJhY3Qg YnkgaW5kZXggcnVsZQ0KICAgICAgZWxzZSBpZiAoICAgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09Q VF9CWV9JTkRFWF0pKQ0KICAgICAgICAgICAgICAgJiYgKCRwX29wdGlvbnNbUENMWklQX09QVF9CWV9J TkRFWF0gIT0gMCkpIHsNCg0KICAgICAgICAgIC8vIC0tLS0tIExvb2sgaWYgdGhlIGluZGV4IGlzIGlu IHRoZSBsaXN0DQogICAgICAgICAgZm9yICgkaj0kal9zdGFydDsgKCRqPHNpemVvZigkcF9vcHRpb25z W1BDTFpJUF9PUFRfQllfSU5ERVhdKSkgJiYgKCEkdl9leHRyYWN0KTsgJGorKykgew0KDQogICAgICAg ICAgICAgIGlmICgoJGk+PSRwX29wdGlvbnNbUENMWklQX09QVF9CWV9JTkRFWF1bJGpdWydzdGFydCdd KSAmJiAoJGk8PSRwX29wdGlvbnNbUENMWklQX09QVF9CWV9JTkRFWF1bJGpdWydlbmQnXSkpIHsNCiAg ICAgICAgICAgICAgICAgICR2X2V4dHJhY3QgPSB0cnVlOw0KICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgIGlmICgkaT49JHBfb3B0aW9uc1tQQ0xaSVBfT1BUX0JZX0lOREVYXVskal1bJ2VuZCddKSB7 DQogICAgICAgICAgICAgICAgICAkal9zdGFydCA9ICRqKzE7DQogICAgICAgICAgICAgIH0NCg0KICAg ICAgICAgICAgICBpZiAoJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX0JZX0lOREVYXVskal1bJ3N0YXJ0J10+ JGkpIHsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAg fQ0KICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBMb29rIGZvciBubyBydWxlLCB3aGljaCBtZWFucyBl eHRyYWN0IGFsbCB0aGUgYXJjaGl2ZQ0KICAgICAgZWxzZSB7DQogICAgICAgICAgJHZfZXh0cmFjdCA9 IHRydWU7DQogICAgICB9DQoNCgkgIC8vIC0tLS0tIENoZWNrIGNvbXByZXNzaW9uIG1ldGhvZA0KCSAg aWYgKCAgICgkdl9leHRyYWN0KQ0KCSAgICAgICYmICggICAoJHZfaGVhZGVyWydjb21wcmVzc2lvbidd ICE9IDgpDQoJCSAgICAgICYmICgkdl9oZWFkZXJbJ2NvbXByZXNzaW9uJ10gIT0gMCkpKSB7DQogICAg ICAgICAgJHZfaGVhZGVyWydzdGF0dXMnXSA9ICd1bnN1cHBvcnRlZF9jb21wcmVzc2lvbic7DQoNCiAg ICAgICAgICAvLyAtLS0tLSBMb29rIGZvciBQQ0xaSVBfT1BUX1NUT1BfT05fRVJST1INCiAgICAgICAg ICBpZiAoICAgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9TVE9QX09OX0VSUk9SXSkpDQoJCSAg ICAgICYmICgkcF9vcHRpb25zW1BDTFpJUF9PUFRfU1RPUF9PTl9FUlJPUl09PT10cnVlKSkgew0KDQog ICAgICAgICAgICAgICR0aGlzLT5wcml2U3dhcEJhY2tNYWdpY1F1b3RlcygpOw0KDQogICAgICAgICAg ICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfVU5TVVBQT1JURURfQ09NUFJFU1NJT04s DQoJCQkgICAgICAgICAgICAgICAgICAgICAgICJGaWxlbmFtZSAnIi4kdl9oZWFkZXJbJ3N0b3JlZF9m aWxlbmFtZSddLiInIGlzICINCgkJCQkgIAkgICAgCSAgCSAgIC4iY29tcHJlc3NlZCBieSBhbiB1bnN1 cHBvcnRlZCBjb21wcmVzc2lvbiAiDQoJCQkJICAJICAgIAkgIAkgICAuIm1ldGhvZCAoIi4kdl9oZWFk ZXJbJ2NvbXByZXNzaW9uJ10uIikgIik7DQoNCiAgICAgICAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJy b3JDb2RlKCk7DQoJCSAgfQ0KCSAgfQ0KDQoJICAvLyAtLS0tLSBDaGVjayBlbmNyeXB0ZWQgZmlsZXMN CgkgIGlmICgoJHZfZXh0cmFjdCkgJiYgKCgkdl9oZWFkZXJbJ2ZsYWcnXSAmIDEpID09IDEpKSB7DQog ICAgICAgICAgJHZfaGVhZGVyWydzdGF0dXMnXSA9ICd1bnN1cHBvcnRlZF9lbmNyeXB0aW9uJzsNCg0K ICAgICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIFBDTFpJUF9PUFRfU1RPUF9PTl9FUlJPUg0KICAgICAg ICAgIGlmICggICAoaXNzZXQoJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX1NUT1BfT05fRVJST1JdKSkNCgkJ ICAgICAgJiYgKCRwX29wdGlvbnNbUENMWklQX09QVF9TVE9QX09OX0VSUk9SXT09PXRydWUpKSB7DQoN CiAgICAgICAgICAgICAgJHRoaXMtPnByaXZTd2FwQmFja01hZ2ljUXVvdGVzKCk7DQoNCiAgICAgICAg ICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9VTlNVUFBPUlRFRF9FTkNSWVBUSU9O LA0KCQkJICAgICAgICAgICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBmb3IgIg0K CQkJCSAgCSAgICAJICAJICAgLiIgZmlsZW5hbWUgJyIuJHZfaGVhZGVyWydzdG9yZWRfZmlsZW5hbWUn XQ0KCQkJCQkJCQkgICAuIiciKTsNCg0KICAgICAgICAgICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNv ZGUoKTsNCgkJICB9DQogICAgfQ0KDQogICAgICAvLyAtLS0tLSBMb29rIGZvciByZWFsIGV4dHJhY3Rp b24NCiAgICAgIGlmICgoJHZfZXh0cmFjdCkgJiYgKCR2X2hlYWRlclsnc3RhdHVzJ10gIT0gJ29rJykp IHsNCiAgICAgICAgICAkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdkNvbnZlcnRIZWFkZXIyRmlsZUluZm8o JHZfaGVhZGVyLA0KCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBfZmls ZV9saXN0WyR2X25iX2V4dHJhY3RlZCsrXSk7DQogICAgICAgICAgaWYgKCR2X3Jlc3VsdCAhPSAxKSB7 DQogICAgICAgICAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgpOw0KICAgICAgICAgICAgICAkdGhpcy0+ cHJpdlN3YXBCYWNrTWFnaWNRdW90ZXMoKTsNCiAgICAgICAgICAgICAgcmV0dXJuICR2X3Jlc3VsdDsN CiAgICAgICAgICB9DQoNCiAgICAgICAgICAkdl9leHRyYWN0ID0gZmFsc2U7DQogICAgICB9DQoNCiAg ICAgIC8vIC0tLS0tIExvb2sgZm9yIHJlYWwgZXh0cmFjdGlvbg0KICAgICAgaWYgKCR2X2V4dHJhY3Qp DQogICAgICB7DQoNCiAgICAgICAgLy8gLS0tLS0gR28gdG8gdGhlIGZpbGUgcG9zaXRpb24NCiAgICAg ICAgQHJld2luZCgkdGhpcy0+emlwX2ZkKTsNCiAgICAgICAgaWYgKEBmc2VlaygkdGhpcy0+emlwX2Zk LCAkdl9oZWFkZXJbJ29mZnNldCddKSkNCiAgICAgICAgew0KICAgICAgICAgIC8vIC0tLS0tIENsb3Nl IHRoZSB6aXAgZmlsZQ0KICAgICAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgpOw0KDQogICAgICAgICAg JHRoaXMtPnByaXZTd2FwQmFja01hZ2ljUXVvdGVzKCk7DQoNCiAgICAgICAgICAvLyAtLS0tLSBFcnJv ciBsb2cNCiAgICAgICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX0lOVkFMSURfQVJD SElWRV9aSVAsICdJbnZhbGlkIGFyY2hpdmUgc2l6ZScpOw0KDQogICAgICAgICAgLy8gLS0tLS0gUmV0 dXJuDQogICAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgICAgIH0NCg0KICAg

ICAgICAvLyAtLS0tLSBMb29rIGZvciBleHRyYWN0aW9uIGFzIHN0cmluZw0KICAgICAgICBpZiAoJHBf b3B0aW9uc1tQQ0xaSVBfT1BUX0VYVFJBQ1RfQVNfU1RSSU5HXSkgew0KDQogICAgICAgICAgJHZfc3Ry aW5nID0gJyc7DQoNCiAgICAgICAgICAvLyAtLS0tLSBFeHRyYWN0aW5nIHRoZSBmaWxlDQogICAgICAg ICAgJHZfcmVzdWx0MSA9ICR0aGlzLT5wcml2RXh0cmFjdEZpbGVBc1N0cmluZygkdl9oZWFkZXIsICR2 X3N0cmluZywgJHBfb3B0aW9ucyk7DQogICAgICAgICAgaWYgKCR2X3Jlc3VsdDEgPCAxKSB7DQogICAg ICAgICAgICAkdGhpcy0+cHJpdkNsb3NlRmQoKTsNCiAgICAgICAgICAgICR0aGlzLT5wcml2U3dhcEJh Y2tNYWdpY1F1b3RlcygpOw0KICAgICAgICAgICAgcmV0dXJuICR2X3Jlc3VsdDE7DQogICAgICAgICAg fQ0KDQogICAgICAgICAgLy8gLS0tLS0gR2V0IHRoZSBvbmx5IGludGVyZXN0aW5nIGF0dHJpYnV0ZXMN CiAgICAgICAgICBpZiAoKCR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2Q29udmVydEhlYWRlcjJGaWxlSW5m bygkdl9oZWFkZXIsICRwX2ZpbGVfbGlzdFskdl9uYl9leHRyYWN0ZWRdKSkgIT0gMSkNCiAgICAgICAg ICB7DQogICAgICAgICAgICAvLyAtLS0tLSBDbG9zZSB0aGUgemlwIGZpbGUNCiAgICAgICAgICAgICR0 aGlzLT5wcml2Q2xvc2VGZCgpOw0KICAgICAgICAgICAgJHRoaXMtPnByaXZTd2FwQmFja01hZ2ljUXVv dGVzKCk7DQoNCiAgICAgICAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgICAgICAgfQ0KDQogICAg ICAgICAgLy8gLS0tLS0gU2V0IHRoZSBmaWxlIGNvbnRlbnQNCiAgICAgICAgICAkcF9maWxlX2xpc3Rb JHZfbmJfZXh0cmFjdGVkXVsnY29udGVudCddID0gJHZfc3RyaW5nOw0KDQogICAgICAgICAgLy8gLS0t LS0gTmV4dCBleHRyYWN0ZWQgZmlsZQ0KICAgICAgICAgICR2X25iX2V4dHJhY3RlZCsrOw0KDQogICAg ICAgICAgLy8gLS0tLS0gTG9vayBmb3IgdXNlciBjYWxsYmFjayBhYm9ydA0KICAgICAgICAgIGlmICgk dl9yZXN1bHQxID09IDIpIHsNCiAgICAgICAgICAJYnJlYWs7DQogICAgICAgICAgfQ0KICAgICAgICB9 DQogICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGV4dHJhY3Rpb24gaW4gc3RhbmRhcmQgb3V0cHV0DQog ICAgICAgIGVsc2VpZiAoICAgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9FWFRSQUNUX0lOX09V VFBVVF0pKQ0KCQkgICAgICAgICYmICgkcF9vcHRpb25zW1BDTFpJUF9PUFRfRVhUUkFDVF9JTl9PVVRQ VVRdKSkgew0KICAgICAgICAgIC8vIC0tLS0tIEV4dHJhY3RpbmcgdGhlIGZpbGUgaW4gc3RhbmRhcmQg b3V0cHV0DQogICAgICAgICAgJHZfcmVzdWx0MSA9ICR0aGlzLT5wcml2RXh0cmFjdEZpbGVJbk91dHB1 dCgkdl9oZWFkZXIsICRwX29wdGlvbnMpOw0KICAgICAgICAgIGlmICgkdl9yZXN1bHQxIDwgMSkgew0K ICAgICAgICAgICAgJHRoaXMtPnByaXZDbG9zZUZkKCk7DQogICAgICAgICAgICAkdGhpcy0+cHJpdlN3 YXBCYWNrTWFnaWNRdW90ZXMoKTsNCiAgICAgICAgICAgIHJldHVybiAkdl9yZXN1bHQxOw0KICAgICAg ICAgIH0NCg0KICAgICAgICAgIC8vIC0tLS0tIEdldCB0aGUgb25seSBpbnRlcmVzdGluZyBhdHRyaWJ1 dGVzDQogICAgICAgICAgaWYgKCgkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdkNvbnZlcnRIZWFkZXIyRmls ZUluZm8oJHZfaGVhZGVyLCAkcF9maWxlX2xpc3RbJHZfbmJfZXh0cmFjdGVkKytdKSkgIT0gMSkgew0K ICAgICAgICAgICAgJHRoaXMtPnByaXZDbG9zZUZkKCk7DQogICAgICAgICAgICAkdGhpcy0+cHJpdlN3 YXBCYWNrTWFnaWNRdW90ZXMoKTsNCiAgICAgICAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgICAg ICAgfQ0KDQogICAgICAgICAgLy8gLS0tLS0gTG9vayBmb3IgdXNlciBjYWxsYmFjayBhYm9ydA0KICAg ICAgICAgIGlmICgkdl9yZXN1bHQxID09IDIpIHsNCiAgICAgICAgICAJYnJlYWs7DQogICAgICAgICAg fQ0KICAgICAgICB9DQogICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIG5vcm1hbCBleHRyYWN0aW9uDQog ICAgICAgIGVsc2Ugew0KICAgICAgICAgIC8vIC0tLS0tIEV4dHJhY3RpbmcgdGhlIGZpbGUNCiAgICAg ICAgICAkdl9yZXN1bHQxID0gJHRoaXMtPnByaXZFeHRyYWN0RmlsZSgkdl9oZWFkZXIsDQoJCSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBfcGF0aCwgJHBfcmVtb3ZlX3BhdGgsDQoJ CQkJCQkJCQkJCSAgJHBfcmVtb3ZlX2FsbF9wYXRoLA0KCQkJCQkJCQkJCQkgICRwX29wdGlvbnMpOw0K ICAgICAgICAgIGlmICgkdl9yZXN1bHQxIDwgMSkgew0KICAgICAgICAgICAgJHRoaXMtPnByaXZDbG9z ZUZkKCk7DQogICAgICAgICAgICAkdGhpcy0+cHJpdlN3YXBCYWNrTWFnaWNRdW90ZXMoKTsNCiAgICAg ICAgICAgIHJldHVybiAkdl9yZXN1bHQxOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIC8vIC0tLS0t IEdldCB0aGUgb25seSBpbnRlcmVzdGluZyBhdHRyaWJ1dGVzDQogICAgICAgICAgaWYgKCgkdl9yZXN1 bHQgPSAkdGhpcy0+cHJpdkNvbnZlcnRIZWFkZXIyRmlsZUluZm8oJHZfaGVhZGVyLCAkcF9maWxlX2xp c3RbJHZfbmJfZXh0cmFjdGVkKytdKSkgIT0gMSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAvLyAt LS0tLSBDbG9zZSB0aGUgemlwIGZpbGUNCiAgICAgICAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgpOw0K ICAgICAgICAgICAgJHRoaXMtPnByaXZTd2FwQmFja01hZ2ljUXVvdGVzKCk7DQoNCiAgICAgICAgICAg IHJldHVybiAkdl9yZXN1bHQ7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgLy8gLS0tLS0gTG9vayBm b3IgdXNlciBjYWxsYmFjayBhYm9ydA0KICAgICAgICAgIGlmICgkdl9yZXN1bHQxID09IDIpIHsNCiAg ICAgICAgICAJYnJlYWs7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KDQog ICAgLy8gLS0tLS0gQ2xvc2UgdGhlIHppcCBmaWxlDQogICAgJHRoaXMtPnByaXZDbG9zZUZkKCk7DQog ICAgJHRoaXMtPnByaXZTd2FwQmFja01hZ2ljUXVvdGVzKCk7DQoNCiAgICAvLyAtLS0tLSBSZXR1cm4N CiAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAg Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBwcml2RXh0cmFjdEZpbGUoKQ0K ICAvLyBEZXNjcmlwdGlvbiA6DQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyBSZXR1cm4gVmFsdWVzIDoN CiAgLy8NCiAgLy8gMSA6IC4uLiA/DQogIC8vIFBDTFpJUF9FUlJfVVNFUl9BQk9SVEVEKDIpIDogVXNl ciBhc2sgZm9yIGV4dHJhY3Rpb24gc3RvcCBpbiBjYWxsYmFjaw0KICAvLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KICBmdW5jdGlvbiBwcml2RXh0cmFjdEZpbGUoJiRwX2VudHJ5LCAkcF9wYXRoLCAkcF9yZW1v

dmVfcGF0aCwgJHBfcmVtb3ZlX2FsbF9wYXRoLCAmJHBfb3B0aW9ucykNCiAgew0KICAgICR2X3Jlc3Vs dD0xOw0KDQogICAgLy8gLS0tLS0gUmVhZCB0aGUgZmlsZSBoZWFkZXINCiAgICBpZiAoKCR2X3Jlc3Vs dCA9ICR0aGlzLT5wcml2UmVhZEZpbGVIZWFkZXIoJHZfaGVhZGVyKSkgIT0gMSkNCiAgICB7DQogICAg ICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgfQ0KDQoNCiAgICAv LyAtLS0tLSBDaGVjayB0aGF0IHRoZSBmaWxlIGhlYWRlciBpcyBjb2hlcmVudCB3aXRoICRwX2VudHJ5 IGluZm8NCiAgICBpZiAoJHRoaXMtPnByaXZDaGVja0ZpbGVIZWFkZXJzKCR2X2hlYWRlciwgJHBfZW50 cnkpICE9IDEpIHsNCiAgICAgICAgLy8gVEJDDQogICAgfQ0KDQogICAgLy8gLS0tLS0gTG9vayBmb3Ig YWxsIHBhdGggdG8gcmVtb3ZlDQogICAgaWYgKCRwX3JlbW92ZV9hbGxfcGF0aCA9PSB0cnVlKSB7DQog ICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGZvbGRlciBlbnRyeSB0aGF0IG5vdCBuZWVkIHRvIGJlIGV4 dHJhY3RlZA0KICAgICAgICBpZiAoKCRwX2VudHJ5WydleHRlcm5hbCddJjB4MDAwMDAwMTApPT0weDAw MDAwMDEwKSB7DQoNCiAgICAgICAgICAgICRwX2VudHJ5WydzdGF0dXMnXSA9ICJmaWx0ZXJlZCI7DQoN CiAgICAgICAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgICAgIH0NCg0KICAgICAgICAvLyAtLS0t LSBHZXQgdGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoDQogICAgICAgICRwX2VudHJ5WydmaWxlbmFtZSdd ID0gYmFzZW5hbWUoJHBfZW50cnlbJ2ZpbGVuYW1lJ10pOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIExv b2sgZm9yIHBhdGggdG8gcmVtb3ZlDQogICAgZWxzZSBpZiAoJHBfcmVtb3ZlX3BhdGggIT0gIiIpDQog ICAgew0KICAgICAgaWYgKFBjbFppcFV0aWxQYXRoSW5jbHVzaW9uKCRwX3JlbW92ZV9wYXRoLCAkcF9l bnRyeVsnZmlsZW5hbWUnXSkgPT0gMikNCiAgICAgIHsNCg0KICAgICAgICAvLyAtLS0tLSBDaGFuZ2Ug dGhlIGZpbGUgc3RhdHVzDQogICAgICAgICRwX2VudHJ5WydzdGF0dXMnXSA9ICJmaWx0ZXJlZCI7DQoN CiAgICAgICAgLy8gLS0tLS0gUmV0dXJuDQogICAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgICB9 DQoNCiAgICAgICRwX3JlbW92ZV9wYXRoX3NpemUgPSBzdHJsZW4oJHBfcmVtb3ZlX3BhdGgpOw0KICAg ICAgaWYgKHN1YnN0cigkcF9lbnRyeVsnZmlsZW5hbWUnXSwgMCwgJHBfcmVtb3ZlX3BhdGhfc2l6ZSkg PT0gJHBfcmVtb3ZlX3BhdGgpDQogICAgICB7DQoNCiAgICAgICAgLy8gLS0tLS0gUmVtb3ZlIHRoZSBw YXRoDQogICAgICAgICRwX2VudHJ5WydmaWxlbmFtZSddID0gc3Vic3RyKCRwX2VudHJ5WydmaWxlbmFt ZSddLCAkcF9yZW1vdmVfcGF0aF9zaXplKTsNCg0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIC0tLS0t IEFkZCB0aGUgcGF0aA0KICAgIGlmICgkcF9wYXRoICE9ICcnKSB7DQogICAgICAkcF9lbnRyeVsnZmls ZW5hbWUnXSA9ICRwX3BhdGguIi8iLiRwX2VudHJ5WydmaWxlbmFtZSddOw0KICAgIH0NCg0KICAgIC8v IC0tLS0tIENoZWNrIGEgYmFzZV9kaXJfcmVzdHJpY3Rpb24NCiAgICBpZiAoaXNzZXQoJHBfb3B0aW9u c1tQQ0xaSVBfT1BUX0VYVFJBQ1RfRElSX1JFU1RSSUNUSU9OXSkpIHsNCiAgICAgICR2X2luY2x1c2lv bg0KICAgICAgPSBQY2xaaXBVdGlsUGF0aEluY2x1c2lvbigkcF9vcHRpb25zW1BDTFpJUF9PUFRfRVhU UkFDVF9ESVJfUkVTVFJJQ1RJT05dLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcF9l bnRyeVsnZmlsZW5hbWUnXSk7DQogICAgICBpZiAoJHZfaW5jbHVzaW9uID09IDApIHsNCg0KICAgICAg ICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX0RJUkVDVE9SWV9SRVNUUklDVElPTiwNCgkJ CSAgICAgICAgICAgICAgICAgICAgICJGaWxlbmFtZSAnIi4kcF9lbnRyeVsnZmlsZW5hbWUnXS4iJyBp cyAiDQoJCQkJCQkJCSAuIm91dHNpZGUgUENMWklQX09QVF9FWFRSQUNUX0RJUl9SRVNUUklDVElPTiIp Ow0KDQogICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgfQ0KICAgIH0NCg0K ICAgIC8vIC0tLS0tIExvb2sgZm9yIHByZS1leHRyYWN0IGNhbGxiYWNrDQogICAgaWYgKGlzc2V0KCRw X29wdGlvbnNbUENMWklQX0NCX1BSRV9FWFRSQUNUXSkpIHsNCg0KICAgICAgLy8gLS0tLS0gR2VuZXJh dGUgYSBsb2NhbCBpbmZvcm1hdGlvbg0KICAgICAgJHZfbG9jYWxfaGVhZGVyID0gYXJyYXkoKTsNCiAg ICAgICR0aGlzLT5wcml2Q29udmVydEhlYWRlcjJGaWxlSW5mbygkcF9lbnRyeSwgJHZfbG9jYWxfaGVh ZGVyKTsNCg0KICAgICAgLy8gLS0tLS0gQ2FsbCB0aGUgY2FsbGJhY2sNCiAgICAgIC8vIEhlcmUgSSBk byBub3QgdXNlIGNhbGxfdXNlcl9mdW5jKCkgYmVjYXVzZSBJIG5lZWQgdG8gc2VuZCBhIHJlZmVyZW5j ZSB0byB0aGUNCiAgICAgIC8vIGhlYWRlci4NCiAgICAgICR2X3Jlc3VsdCA9ICRwX29wdGlvbnNbUENM WklQX0NCX1BSRV9FWFRSQUNUXShQQ0xaSVBfQ0JfUFJFX0VYVFJBQ1QsICR2X2xvY2FsX2hlYWRlcik7 DQogICAgICBpZiAoJHZfcmVzdWx0ID09IDApIHsNCiAgICAgICAgLy8gLS0tLS0gQ2hhbmdlIHRoZSBm aWxlIHN0YXR1cw0KICAgICAgICAkcF9lbnRyeVsnc3RhdHVzJ10gPSAic2tpcHBlZCI7DQogICAgICAg ICR2X3Jlc3VsdCA9IDE7DQogICAgICB9DQoNCiAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGFib3J0IHJl c3VsdA0KICAgICAgaWYgKCR2X3Jlc3VsdCA9PSAyKSB7DQogICAgICAgIC8vIC0tLS0tIFRoaXMgc3Rh dHVzIGlzIGludGVybmFsIGFuZCB3aWxsIGJlIGNoYW5nZWQgaW4gJ3NraXBwZWQnDQogICAgICAgICRw X2VudHJ5WydzdGF0dXMnXSA9ICJhYm9ydGVkIjsNCiAgICAgIAkkdl9yZXN1bHQgPSBQQ0xaSVBfRVJS X1VTRVJfQUJPUlRFRDsNCiAgICAgIH0NCg0KICAgICAgLy8gLS0tLS0gVXBkYXRlIHRoZSBpbmZvcm1h dGlvbnMNCiAgICAgIC8vIE9ubHkgc29tZSBmaWVsZHMgY2FuIGJlIG1vZGlmaWVkDQogICAgICAkcF9l bnRyeVsnZmlsZW5hbWUnXSA9ICR2X2xvY2FsX2hlYWRlclsnZmlsZW5hbWUnXTsNCiAgICB9DQoNCg0K ICAgIC8vIC0tLS0tIExvb2sgaWYgZXh0cmFjdGlvbiBzaG91bGQgYmUgZG9uZQ0KICAgIGlmICgkcF9l bnRyeVsnc3RhdHVzJ10gPT0gJ29rJykgew0KDQogICAgLy8gLS0tLS0gTG9vayBmb3Igc3BlY2lmaWMg YWN0aW9ucyB3aGlsZSB0aGUgZmlsZSBleGlzdA0KICAgIGlmIChmaWxlX2V4aXN0cygkcF9lbnRyeVsn ZmlsZW5hbWUnXSkpDQogICAgew0KDQogICAgICAvLyAtLS0tLSBMb29rIGlmIGZpbGUgaXMgYSBkaXJl Y3RvcnkNCiAgICAgIGlmIChpc19kaXIoJHBfZW50cnlbJ2ZpbGVuYW1lJ10pKQ0KICAgICAgew0KDQog ICAgICAgIC8vIC0tLS0tIENoYW5nZSB0aGUgZmlsZSBzdGF0dXMNCiAgICAgICAgJHBfZW50cnlbJ3N0 YXR1cyddID0gImFscmVhZHlfYV9kaXJlY3RvcnkiOw0KDQogICAgICAgIC8vIC0tLS0tIExvb2sgZm9y IFBDTFpJUF9PUFRfU1RPUF9PTl9FUlJPUg0KICAgICAgICAvLyBGb3IgaGlzdG9yaWNhbCByZWFzb24g

Zmlyc3QgUGNsWmlwIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN0b3ANCiAgICAgICAgLy8gd2hlbiB0 aGlzIGtpbmQgb2YgZXJyb3Igb2NjdXJzLg0KICAgICAgICBpZiAoICAgKGlzc2V0KCRwX29wdGlvbnNb UENMWklQX09QVF9TVE9QX09OX0VSUk9SXSkpDQoJCSAgICAmJiAoJHBfb3B0aW9uc1tQQ0xaSVBfT1BU X1NUT1BfT05fRVJST1JdPT09dHJ1ZSkpIHsNCg0KICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JM b2coUENMWklQX0VSUl9BTFJFQURZX0FfRElSRUNUT1JZLA0KCQkJICAgICAgICAgICAgICAgICAgICAg IkZpbGVuYW1lICciLiRwX2VudHJ5WydmaWxlbmFtZSddLiInIGlzICINCgkJCQkJCQkJIC4iYWxyZWFk eSB1c2VkIGJ5IGFuIGV4aXN0aW5nIGRpcmVjdG9yeSIpOw0KDQogICAgICAgICAgICByZXR1cm4gUGNs WmlwOjplcnJvckNvZGUoKTsNCgkJICAgIH0NCiAgICAgIH0NCiAgICAgIC8vIC0tLS0tIExvb2sgaWYg ZmlsZSBpcyB3cml0ZSBwcm90ZWN0ZWQNCiAgICAgIGVsc2UgaWYgKCFpc193cml0ZWFibGUoJHBfZW50 cnlbJ2ZpbGVuYW1lJ10pKQ0KICAgICAgew0KDQogICAgICAgIC8vIC0tLS0tIENoYW5nZSB0aGUgZmls ZSBzdGF0dXMNCiAgICAgICAgJHBfZW50cnlbJ3N0YXR1cyddID0gIndyaXRlX3Byb3RlY3RlZCI7DQoN CiAgICAgICAgLy8gLS0tLS0gTG9vayBmb3IgUENMWklQX09QVF9TVE9QX09OX0VSUk9SDQogICAgICAg IC8vIEZvciBoaXN0b3JpY2FsIHJlYXNvbiBmaXJzdCBQY2xaaXAgaW1wbGVtZW50YXRpb24gZG9lcyBu b3Qgc3RvcA0KICAgICAgICAvLyB3aGVuIHRoaXMga2luZCBvZiBlcnJvciBvY2N1cnMuDQogICAgICAg IGlmICggICAoaXNzZXQoJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX1NUT1BfT05fRVJST1JdKSkNCgkJICAg ICYmICgkcF9vcHRpb25zW1BDTFpJUF9PUFRfU1RPUF9PTl9FUlJPUl09PT10cnVlKSkgew0KDQogICAg ICAgICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX1dSSVRFX09QRU5fRkFJTCwNCgkJ CSAgICAgICAgICAgICAgICAgICAgICJGaWxlbmFtZSAnIi4kcF9lbnRyeVsnZmlsZW5hbWUnXS4iJyBl eGlzdHMgIg0KCQkJCQkJCQkgLiJhbmQgaXMgd3JpdGUgcHJvdGVjdGVkIik7DQoNCiAgICAgICAgICAg IHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KCQkgICAgfQ0KICAgICAgfQ0KDQogICAgICAvLyAt LS0tLSBMb29rIGlmIHRoZSBleHRyYWN0ZWQgZmlsZSBpcyBvbGRlcg0KICAgICAgZWxzZSBpZiAoZmls ZW10aW1lKCRwX2VudHJ5WydmaWxlbmFtZSddKSA+ICRwX2VudHJ5WydtdGltZSddKQ0KICAgICAgew0K ICAgICAgICAvLyAtLS0tLSBDaGFuZ2UgdGhlIGZpbGUgc3RhdHVzDQogICAgICAgIGlmICggICAoaXNz ZXQoJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX1JFUExBQ0VfTkVXRVJdKSkNCgkJICAgICYmICgkcF9vcHRp b25zW1BDTFpJUF9PUFRfUkVQTEFDRV9ORVdFUl09PT10cnVlKSkgew0KCSAgCSAgfQ0KCQkgICAgZWxz ZSB7DQogICAgICAgICAgICAkcF9lbnRyeVsnc3RhdHVzJ10gPSAibmV3ZXJfZXhpc3QiOw0KDQogICAg ICAgICAgICAvLyAtLS0tLSBMb29rIGZvciBQQ0xaSVBfT1BUX1NUT1BfT05fRVJST1INCiAgICAgICAg ICAgIC8vIEZvciBoaXN0b3JpY2FsIHJlYXNvbiBmaXJzdCBQY2xaaXAgaW1wbGVtZW50YXRpb24gZG9l cyBub3Qgc3RvcA0KICAgICAgICAgICAgLy8gd2hlbiB0aGlzIGtpbmQgb2YgZXJyb3Igb2NjdXJzLg0K ICAgICAgICAgICAgaWYgKCAgIChpc3NldCgkcF9vcHRpb25zW1BDTFpJUF9PUFRfU1RPUF9PTl9FUlJP Ul0pKQ0KCQkgICAgICAgICYmICgkcF9vcHRpb25zW1BDTFpJUF9PUFRfU1RPUF9PTl9FUlJPUl09PT10 cnVlKSkgew0KDQogICAgICAgICAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9X UklURV9PUEVOX0ZBSUwsDQoJCQkgICAgICAgICAgICAgIk5ld2VyIHZlcnNpb24gb2YgJyIuJHBfZW50 cnlbJ2ZpbGVuYW1lJ10uIicgZXhpc3RzICINCgkJCQkJICAgIC4iYW5kIG9wdGlvbiBQQ0xaSVBfT1BU X1JFUExBQ0VfTkVXRVIgaXMgbm90IHNlbGVjdGVkIik7DQoNCiAgICAgICAgICAgICAgICByZXR1cm4g UGNsWmlwOjplcnJvckNvZGUoKTsNCgkJICAgICAgfQ0KCQkgICAgfQ0KICAgICAgfQ0KICAgICAgZWxz ZSB7DQogICAgICB9DQogICAgfQ0KDQogICAgLy8gLS0tLS0gQ2hlY2sgdGhlIGRpcmVjdG9yeSBhdmFp bGFiaWxpdHkgYW5kIGNyZWF0ZSBpdCBpZiBuZWNlc3NhcnkNCiAgICBlbHNlIHsNCiAgICAgIGlmICgo KCRwX2VudHJ5WydleHRlcm5hbCddJjB4MDAwMDAwMTApPT0weDAwMDAwMDEwKSB8fCAoc3Vic3RyKCRw X2VudHJ5WydmaWxlbmFtZSddLCAtMSkgPT0gJy8nKSkNCiAgICAgICAgJHZfZGlyX3RvX2NoZWNrID0g JHBfZW50cnlbJ2ZpbGVuYW1lJ107DQogICAgICBlbHNlIGlmICghc3Ryc3RyKCRwX2VudHJ5WydmaWxl bmFtZSddLCAiLyIpKQ0KICAgICAgICAkdl9kaXJfdG9fY2hlY2sgPSAiIjsNCiAgICAgIGVsc2UNCiAg ICAgICAgJHZfZGlyX3RvX2NoZWNrID0gZGlybmFtZSgkcF9lbnRyeVsnZmlsZW5hbWUnXSk7DQoNCiAg ICAgICAgaWYgKCgkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdkRpckNoZWNrKCR2X2Rpcl90b19jaGVjaywg KCgkcF9lbnRyeVsnZXh0ZXJuYWwnXSYweDAwMDAwMDEwKT09MHgwMDAwMDAxMCkpKSAhPSAxKSB7DQoN CiAgICAgICAgICAvLyAtLS0tLSBDaGFuZ2UgdGhlIGZpbGUgc3RhdHVzDQogICAgICAgICAgJHBfZW50 cnlbJ3N0YXR1cyddID0gInBhdGhfY3JlYXRpb25fZmFpbCI7DQoNCiAgICAgICAgICAvLyAtLS0tLSBS ZXR1cm4NCiAgICAgICAgICAvL3JldHVybiAkdl9yZXN1bHQ7DQogICAgICAgICAgJHZfcmVzdWx0ID0g MTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIC0tLS0tIExvb2sgaWYgZXh0cmFj dGlvbiBzaG91bGQgYmUgZG9uZQ0KICAgIGlmICgkcF9lbnRyeVsnc3RhdHVzJ10gPT0gJ29rJykgew0K DQogICAgICAvLyAtLS0tLSBEbyB0aGUgZXh0cmFjdGlvbiAoaWYgbm90IGEgZm9sZGVyKQ0KICAgICAg aWYgKCEoKCRwX2VudHJ5WydleHRlcm5hbCddJjB4MDAwMDAwMTApPT0weDAwMDAwMDEwKSkNCiAgICAg IHsNCiAgICAgICAgLy8gLS0tLS0gTG9vayBmb3Igbm90IGNvbXByZXNzZWQgZmlsZQ0KICAgICAgICBp ZiAoJHBfZW50cnlbJ2NvbXByZXNzaW9uJ10gPT0gMCkgew0KDQogICAgCQkgIC8vIC0tLS0tIE9wZW5p bmcgZGVzdGluYXRpb24gZmlsZQ0KICAgICAgICAgIGlmICgoJHZfZGVzdF9maWxlID0gQGZvcGVuKCRw X2VudHJ5WydmaWxlbmFtZSddLCAnd2InKSkgPT0gMCkNCiAgICAgICAgICB7DQoNCiAgICAgICAgICAg IC8vIC0tLS0tIENoYW5nZSB0aGUgZmlsZSBzdGF0dXMNCiAgICAgICAgICAgICRwX2VudHJ5WydzdGF0 dXMnXSA9ICJ3cml0ZV9lcnJvciI7DQoNCiAgICAgICAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAg ICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICAgICAgICB9DQoNCg0KICAgICAgICAgIC8vIC0tLS0t IFJlYWQgdGhlIGZpbGUgYnkgUENMWklQX1JFQURfQkxPQ0tfU0laRSBvY3RldHMgYmxvY2tzDQogICAg

ICAgICAgJHZfc2l6ZSA9ICRwX2VudHJ5Wydjb21wcmVzc2VkX3NpemUnXTsNCiAgICAgICAgICB3aGls ZSAoJHZfc2l6ZSAhPSAwKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICR2X3JlYWRfc2l6ZSA9ICgk dl9zaXplIDwgUENMWklQX1JFQURfQkxPQ0tfU0laRSA/ICR2X3NpemUgOiBQQ0xaSVBfUkVBRF9CTE9D S19TSVpFKTsNCiAgICAgICAgICAgICR2X2J1ZmZlciA9IEBmcmVhZCgkdGhpcy0+emlwX2ZkLCAkdl9y ZWFkX3NpemUpOw0KICAgICAgICAgICAgLyogVHJ5IHRvIHNwZWVkIHVwIHRoZSBjb2RlDQogICAgICAg ICAgICAkdl9iaW5hcnlfZGF0YSA9IHBhY2soJ2EnLiR2X3JlYWRfc2l6ZSwgJHZfYnVmZmVyKTsNCiAg ICAgICAgICAgIEBmd3JpdGUoJHZfZGVzdF9maWxlLCAkdl9iaW5hcnlfZGF0YSwgJHZfcmVhZF9zaXpl KTsNCiAgICAgICAgICAgICovDQogICAgICAgICAgICBAZndyaXRlKCR2X2Rlc3RfZmlsZSwgJHZfYnVm ZmVyLCAkdl9yZWFkX3NpemUpOw0KICAgICAgICAgICAgJHZfc2l6ZSAtPSAkdl9yZWFkX3NpemU7DQog ICAgICAgICAgfQ0KDQogICAgICAgICAgLy8gLS0tLS0gQ2xvc2luZyB0aGUgZGVzdGluYXRpb24gZmls ZQ0KICAgICAgICAgIGZjbG9zZSgkdl9kZXN0X2ZpbGUpOw0KDQogICAgICAgICAgLy8gLS0tLS0gQ2hh bmdlIHRoZSBmaWxlIG10aW1lDQogICAgICAgICAgdG91Y2goJHBfZW50cnlbJ2ZpbGVuYW1lJ10sICRw X2VudHJ5WydtdGltZSddKTsNCg0KDQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAg Ly8gLS0tLS0gVEJDDQogICAgICAgICAgLy8gTmVlZCB0byBiZSBmaW5pc2hlZA0KICAgICAgICAgIGlm ICgoJHBfZW50cnlbJ2ZsYWcnXSAmIDEpID09IDEpIHsNCiAgICAgICAgICAgIFBjbFppcDo6cHJpdkVy cm9yTG9nKFBDTFpJUF9FUlJfVU5TVVBQT1JURURfRU5DUllQVElPTiwgJ0ZpbGUgXCcnLiRwX2VudHJ5 WydmaWxlbmFtZSddLidcJyBpcyBlbmNyeXB0ZWQuIEVuY3J5cHRlZCBmaWxlcyBhcmUgbm90IHN1cHBv cnRlZC4nKTsNCiAgICAgICAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgICAgICAg IH0NCg0KDQogICAgICAgICAgLy8gLS0tLS0gTG9vayBmb3IgdXNpbmcgdGVtcG9yYXJ5IGZpbGUgdG8g dW56aXANCiAgICAgICAgICBpZiAoICghaXNzZXQoJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX1RFTVBfRklM RV9PRkZdKSkNCiAgICAgICAgICAgICAgJiYgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9URU1Q X0ZJTEVfT05dKQ0KICAgICAgICAgICAgICAgICAgfHwgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09Q VF9URU1QX0ZJTEVfVEhSRVNIT0xEXSkNCiAgICAgICAgICAgICAgICAgICAgICAmJiAoJHBfb3B0aW9u c1tQQ0xaSVBfT1BUX1RFTVBfRklMRV9USFJFU0hPTERdIDw9ICRwX2VudHJ5WydzaXplJ10pKSApICkg ew0KICAgICAgICAgICAgJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZFeHRyYWN0RmlsZVVzaW5nVGVtcEZp bGUoJHBfZW50cnksICRwX29wdGlvbnMpOw0KICAgICAgICAgICAgaWYgKCR2X3Jlc3VsdCA8IFBDTFpJ UF9FUlJfTk9fRVJST1IpIHsNCiAgICAgICAgICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgICB9DQoNCiAgICAgICAgICAvLyAtLS0tLSBMb29rIGZvciBleHRyYWN0IGlu IG1lbW9yeQ0KICAgICAgICAgIGVsc2Ugew0KDQoNCiAgICAgICAgICAgIC8vIC0tLS0tIFJlYWQgdGhl IGNvbXByZXNzZWQgZmlsZSBpbiBhIGJ1ZmZlciAob25lIHNob3QpDQogICAgICAgICAgICAkdl9idWZm ZXIgPSBAZnJlYWQoJHRoaXMtPnppcF9mZCwgJHBfZW50cnlbJ2NvbXByZXNzZWRfc2l6ZSddKTsNCg0K ICAgICAgICAgICAgLy8gLS0tLS0gRGVjb21wcmVzcyB0aGUgZmlsZQ0KICAgICAgICAgICAgJHZfZmls ZV9jb250ZW50ID0gQGd6aW5mbGF0ZSgkdl9idWZmZXIpOw0KICAgICAgICAgICAgdW5zZXQoJHZfYnVm ZmVyKTsNCiAgICAgICAgICAgIGlmICgkdl9maWxlX2NvbnRlbnQgPT09IEZBTFNFKSB7DQoNCiAgICAg ICAgICAgICAgLy8gLS0tLS0gQ2hhbmdlIHRoZSBmaWxlIHN0YXR1cw0KICAgICAgICAgICAgICAvLyBU QkMNCiAgICAgICAgICAgICAgJHBfZW50cnlbJ3N0YXR1cyddID0gImVycm9yIjsNCg0KICAgICAgICAg ICAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyAtLS0t LSBPcGVuaW5nIGRlc3RpbmF0aW9uIGZpbGUNCiAgICAgICAgICAgIGlmICgoJHZfZGVzdF9maWxlID0g QGZvcGVuKCRwX2VudHJ5WydmaWxlbmFtZSddLCAnd2InKSkgPT0gMCkgew0KDQogICAgICAgICAgICAg IC8vIC0tLS0tIENoYW5nZSB0aGUgZmlsZSBzdGF0dXMNCiAgICAgICAgICAgICAgJHBfZW50cnlbJ3N0 YXR1cyddID0gIndyaXRlX2Vycm9yIjsNCg0KICAgICAgICAgICAgICByZXR1cm4gJHZfcmVzdWx0Ow0K ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyAtLS0tLSBXcml0ZSB0aGUgdW5jb21wcmVzc2Vk IGRhdGENCiAgICAgICAgICAgIEBmd3JpdGUoJHZfZGVzdF9maWxlLCAkdl9maWxlX2NvbnRlbnQsICRw X2VudHJ5WydzaXplJ10pOw0KICAgICAgICAgICAgdW5zZXQoJHZfZmlsZV9jb250ZW50KTsNCg0KICAg ICAgICAgICAgLy8gLS0tLS0gQ2xvc2luZyB0aGUgZGVzdGluYXRpb24gZmlsZQ0KICAgICAgICAgICAg QGZjbG9zZSgkdl9kZXN0X2ZpbGUpOw0KDQogICAgICAgICAgfQ0KDQogICAgICAgICAgLy8gLS0tLS0g Q2hhbmdlIHRoZSBmaWxlIG10aW1lDQogICAgICAgICAgQHRvdWNoKCRwX2VudHJ5WydmaWxlbmFtZSdd LCAkcF9lbnRyeVsnbXRpbWUnXSk7DQogICAgICAgIH0NCg0KICAgICAgICAvLyAtLS0tLSBMb29rIGZv ciBjaG1vZCBvcHRpb24NCiAgICAgICAgaWYgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9TRVRf Q0hNT0RdKSkgew0KDQogICAgICAgICAgLy8gLS0tLS0gQ2hhbmdlIHRoZSBtb2RlIG9mIHRoZSBmaWxl DQogICAgICAgICAgQGNobW9kKCRwX2VudHJ5WydmaWxlbmFtZSddLCAkcF9vcHRpb25zW1BDTFpJUF9P UFRfU0VUX0NITU9EXSk7DQogICAgICAgIH0NCg0KICAgICAgfQ0KICAgIH0NCg0KICAJLy8gLS0tLS0g Q2hhbmdlIGFib3J0IHN0YXR1cw0KICAJaWYgKCRwX2VudHJ5WydzdGF0dXMnXSA9PSAiYWJvcnRlZCIp IHsNCiAgICAgICAgJHBfZW50cnlbJ3N0YXR1cyddID0gInNraXBwZWQiOw0KICAJfQ0KDQogICAgLy8g LS0tLS0gTG9vayBmb3IgcG9zdC1leHRyYWN0IGNhbGxiYWNrDQogICAgZWxzZWlmIChpc3NldCgkcF9v cHRpb25zW1BDTFpJUF9DQl9QT1NUX0VYVFJBQ1RdKSkgew0KDQogICAgICAvLyAtLS0tLSBHZW5lcmF0 ZSBhIGxvY2FsIGluZm9ybWF0aW9uDQogICAgICAkdl9sb2NhbF9oZWFkZXIgPSBhcnJheSgpOw0KICAg ICAgJHRoaXMtPnByaXZDb252ZXJ0SGVhZGVyMkZpbGVJbmZvKCRwX2VudHJ5LCAkdl9sb2NhbF9oZWFk ZXIpOw0KDQogICAgICAvLyAtLS0tLSBDYWxsIHRoZSBjYWxsYmFjaw0KICAgICAgLy8gSGVyZSBJIGRv IG5vdCB1c2UgY2FsbF91c2VyX2Z1bmMoKSBiZWNhdXNlIEkgbmVlZCB0byBzZW5kIGEgcmVmZXJlbmNl

IHRvIHRoZQ0KICAgICAgLy8gaGVhZGVyLg0KICAgICAgJHZfcmVzdWx0ID0gJHBfb3B0aW9uc1tQQ0xa SVBfQ0JfUE9TVF9FWFRSQUNUXShQQ0xaSVBfQ0JfUE9TVF9FWFRSQUNULCAkdl9sb2NhbF9oZWFkZXIp Ow0KDQogICAgICAvLyAtLS0tLSBMb29rIGZvciBhYm9ydCByZXN1bHQNCiAgICAgIGlmICgkdl9yZXN1 bHQgPT0gMikgew0KICAgICAgCSR2X3Jlc3VsdCA9IFBDTFpJUF9FUlJfVVNFUl9BQk9SVEVEOw0KICAg ICAgfQ0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFJldHVybg0KICAgIHJldHVybiAkdl9yZXN1bHQ7DQog IH0NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ICAvLyBGdW5jdGlvbiA6IHByaXZFeHRyYWN0RmlsZVVzaW5nVGVtcEZpbGUoKQ0KICAvLyBEZXNjcmlw dGlvbiA6DQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAgLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gcHJpdkV4dHJhY3RGaWxlVXNpbmdUZW1wRmlsZSgmJHBf ZW50cnksICYkcF9vcHRpb25zKQ0KICB7DQogICAgJHZfcmVzdWx0PTE7DQoNCiAgICAvLyAtLS0tLSBD cmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUNCiAgICAkdl9nemlwX3RlbXBfbmFtZSA9IFBDTFpJUF9URU1Q T1JBUllfRElSLnVuaXFpZCgncGNsemlwLScpLicuZ3onOw0KICAgIGlmICgoJHZfZGVzdF9maWxlID0g QGZvcGVuKCR2X2d6aXBfdGVtcF9uYW1lLCAid2IiKSkgPT0gMCkgew0KICAgICAgZmNsb3NlKCR2X2Zp bGUpOw0KICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9XUklURV9PUEVOX0ZBSUws ICdVbmFibGUgdG8gb3BlbiB0ZW1wb3JhcnkgZmlsZSBcJycuJHZfZ3ppcF90ZW1wX25hbWUuJ1wnIGlu IGJpbmFyeSB3cml0ZSBtb2RlJyk7DQogICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAg ICB9DQoNCg0KICAgIC8vIC0tLS0tIFdyaXRlIGd6IGZpbGUgZm9ybWF0IGhlYWRlcg0KICAgICR2X2Jp bmFyeV9kYXRhID0gcGFjaygndmExYTFWYTFhMScsIDB4OGIxZiwgQ2hyKCRwX2VudHJ5Wydjb21wcmVz c2lvbiddKSwgQ2hyKDB4MDApLCB0aW1lKCksIENocigweDAwKSwgQ2hyKDMpKTsNCiAgICBAZndyaXRl KCR2X2Rlc3RfZmlsZSwgJHZfYmluYXJ5X2RhdGEsIDEwKTsNCg0KICAgIC8vIC0tLS0tIFJlYWQgdGhl IGZpbGUgYnkgUENMWklQX1JFQURfQkxPQ0tfU0laRSBvY3RldHMgYmxvY2tzDQogICAgJHZfc2l6ZSA9 ICRwX2VudHJ5Wydjb21wcmVzc2VkX3NpemUnXTsNCiAgICB3aGlsZSAoJHZfc2l6ZSAhPSAwKQ0KICAg IHsNCiAgICAgICR2X3JlYWRfc2l6ZSA9ICgkdl9zaXplIDwgUENMWklQX1JFQURfQkxPQ0tfU0laRSA/ ICR2X3NpemUgOiBQQ0xaSVBfUkVBRF9CTE9DS19TSVpFKTsNCiAgICAgICR2X2J1ZmZlciA9IEBmcmVh ZCgkdGhpcy0+emlwX2ZkLCAkdl9yZWFkX3NpemUpOw0KICAgICAgLy8kdl9iaW5hcnlfZGF0YSA9IHBh Y2soJ2EnLiR2X3JlYWRfc2l6ZSwgJHZfYnVmZmVyKTsNCiAgICAgIEBmd3JpdGUoJHZfZGVzdF9maWxl LCAkdl9idWZmZXIsICR2X3JlYWRfc2l6ZSk7DQogICAgICAkdl9zaXplIC09ICR2X3JlYWRfc2l6ZTsN CiAgICB9DQoNCiAgICAvLyAtLS0tLSBXcml0ZSBneiBmaWxlIGZvcm1hdCBmb290ZXINCiAgICAkdl9i aW5hcnlfZGF0YSA9IHBhY2soJ1ZWJywgJHBfZW50cnlbJ2NyYyddLCAkcF9lbnRyeVsnc2l6ZSddKTsN CiAgICBAZndyaXRlKCR2X2Rlc3RfZmlsZSwgJHZfYmluYXJ5X2RhdGEsIDgpOw0KDQogICAgLy8gLS0t LS0gQ2xvc2UgdGhlIHRlbXBvcmFyeSBmaWxlDQogICAgQGZjbG9zZSgkdl9kZXN0X2ZpbGUpOw0KDQog ICAgLy8gLS0tLS0gT3BlbmluZyBkZXN0aW5hdGlvbiBmaWxlDQogICAgaWYgKCgkdl9kZXN0X2ZpbGUg PSBAZm9wZW4oJHBfZW50cnlbJ2ZpbGVuYW1lJ10sICd3YicpKSA9PSAwKSB7DQogICAgICAkcF9lbnRy eVsnc3RhdHVzJ10gPSAid3JpdGVfZXJyb3IiOw0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICB9 DQoNCiAgICAvLyAtLS0tLSBPcGVuIHRoZSB0ZW1wb3JhcnkgZ3ogZmlsZQ0KICAgIGlmICgoJHZfc3Jj X2ZpbGUgPSBAZ3pvcGVuKCR2X2d6aXBfdGVtcF9uYW1lLCAncmInKSkgPT0gMCkgew0KICAgICAgQGZj bG9zZSgkdl9kZXN0X2ZpbGUpOw0KICAgICAgJHBfZW50cnlbJ3N0YXR1cyddID0gInJlYWRfZXJyb3Ii Ow0KICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9SRUFEX09QRU5fRkFJTCwgJ1Vu YWJsZSB0byBvcGVuIHRlbXBvcmFyeSBmaWxlIFwnJy4kdl9nemlwX3RlbXBfbmFtZS4nXCcgaW4gYmlu YXJ5IHJlYWQgbW9kZScpOw0KICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgfQ0K DQoNCiAgICAvLyAtLS0tLSBSZWFkIHRoZSBmaWxlIGJ5IFBDTFpJUF9SRUFEX0JMT0NLX1NJWkUgb2N0 ZXRzIGJsb2Nrcw0KICAgICR2X3NpemUgPSAkcF9lbnRyeVsnc2l6ZSddOw0KICAgIHdoaWxlICgkdl9z aXplICE9IDApIHsNCiAgICAgICR2X3JlYWRfc2l6ZSA9ICgkdl9zaXplIDwgUENMWklQX1JFQURfQkxP Q0tfU0laRSA/ICR2X3NpemUgOiBQQ0xaSVBfUkVBRF9CTE9DS19TSVpFKTsNCiAgICAgICR2X2J1ZmZl ciA9IEBnenJlYWQoJHZfc3JjX2ZpbGUsICR2X3JlYWRfc2l6ZSk7DQogICAgICAvLyR2X2JpbmFyeV9k YXRhID0gcGFjaygnYScuJHZfcmVhZF9zaXplLCAkdl9idWZmZXIpOw0KICAgICAgQGZ3cml0ZSgkdl9k ZXN0X2ZpbGUsICR2X2J1ZmZlciwgJHZfcmVhZF9zaXplKTsNCiAgICAgICR2X3NpemUgLT0gJHZfcmVh ZF9zaXplOw0KICAgIH0NCiAgICBAZmNsb3NlKCR2X2Rlc3RfZmlsZSk7DQogICAgQGd6Y2xvc2UoJHZf c3JjX2ZpbGUpOw0KDQogICAgLy8gLS0tLS0gRGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZQ0KICAgIEB1 bmxpbmsoJHZfZ3ppcF90ZW1wX25hbWUpOw0KDQogICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJu ICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdkV4dHJhY3RGaWxlSW5PdXRwdXQoKQ0KICAv LyBEZXNjcmlwdGlvbiA6DQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAg Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gcHJpdkV4dHJhY3RGaWxlSW5PdXRwdXQo

JiRwX2VudHJ5LCAmJHBfb3B0aW9ucykNCiAgew0KICAgICR2X3Jlc3VsdD0xOw0KDQogICAgLy8gLS0t LS0gUmVhZCB0aGUgZmlsZSBoZWFkZXINCiAgICBpZiAoKCR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2UmVh ZEZpbGVIZWFkZXIoJHZfaGVhZGVyKSkgIT0gMSkgew0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAg ICB9DQoNCg0KICAgIC8vIC0tLS0tIENoZWNrIHRoYXQgdGhlIGZpbGUgaGVhZGVyIGlzIGNvaGVyZW50 IHdpdGggJHBfZW50cnkgaW5mbw0KICAgIGlmICgkdGhpcy0+cHJpdkNoZWNrRmlsZUhlYWRlcnMoJHZf aGVhZGVyLCAkcF9lbnRyeSkgIT0gMSkgew0KICAgICAgICAvLyBUQkMNCiAgICB9DQoNCiAgICAvLyAt LS0tLSBMb29rIGZvciBwcmUtZXh0cmFjdCBjYWxsYmFjaw0KICAgIGlmIChpc3NldCgkcF9vcHRpb25z W1BDTFpJUF9DQl9QUkVfRVhUUkFDVF0pKSB7DQoNCiAgICAgIC8vIC0tLS0tIEdlbmVyYXRlIGEgbG9j YWwgaW5mb3JtYXRpb24NCiAgICAgICR2X2xvY2FsX2hlYWRlciA9IGFycmF5KCk7DQogICAgICAkdGhp cy0+cHJpdkNvbnZlcnRIZWFkZXIyRmlsZUluZm8oJHBfZW50cnksICR2X2xvY2FsX2hlYWRlcik7DQoN CiAgICAgIC8vIC0tLS0tIENhbGwgdGhlIGNhbGxiYWNrDQogICAgICAvLyBIZXJlIEkgZG8gbm90IHVz ZSBjYWxsX3VzZXJfZnVuYygpIGJlY2F1c2UgSSBuZWVkIHRvIHNlbmQgYSByZWZlcmVuY2UgdG8gdGhl DQogICAgICAvLyBoZWFkZXIuDQovLyAgICAgIGV2YWwoJyR2X3Jlc3VsdCA9ICcuJHBfb3B0aW9uc1tQ Q0xaSVBfQ0JfUFJFX0VYVFJBQ1RdLicoUENMWklQX0NCX1BSRV9FWFRSQUNULCAkdl9sb2NhbF9oZWFk ZXIpOycpOw0KICAgICAgJHZfcmVzdWx0ID0gJHBfb3B0aW9uc1tQQ0xaSVBfQ0JfUFJFX0VYVFJBQ1Rd KFBDTFpJUF9DQl9QUkVfRVhUUkFDVCwgJHZfbG9jYWxfaGVhZGVyKTsNCiAgICAgIGlmICgkdl9yZXN1 bHQgPT0gMCkgew0KICAgICAgICAvLyAtLS0tLSBDaGFuZ2UgdGhlIGZpbGUgc3RhdHVzDQogICAgICAg ICRwX2VudHJ5WydzdGF0dXMnXSA9ICJza2lwcGVkIjsNCiAgICAgICAgJHZfcmVzdWx0ID0gMTsNCiAg ICAgIH0NCg0KICAgICAgLy8gLS0tLS0gTG9vayBmb3IgYWJvcnQgcmVzdWx0DQogICAgICBpZiAoJHZf cmVzdWx0ID09IDIpIHsNCiAgICAgICAgLy8gLS0tLS0gVGhpcyBzdGF0dXMgaXMgaW50ZXJuYWwgYW5k IHdpbGwgYmUgY2hhbmdlZCBpbiAnc2tpcHBlZCcNCiAgICAgICAgJHBfZW50cnlbJ3N0YXR1cyddID0g ImFib3J0ZWQiOw0KICAgICAgCSR2X3Jlc3VsdCA9IFBDTFpJUF9FUlJfVVNFUl9BQk9SVEVEOw0KICAg ICAgfQ0KDQogICAgICAvLyAtLS0tLSBVcGRhdGUgdGhlIGluZm9ybWF0aW9ucw0KICAgICAgLy8gT25s eSBzb21lIGZpZWxkcyBjYW4gYmUgbW9kaWZpZWQNCiAgICAgICRwX2VudHJ5WydmaWxlbmFtZSddID0g JHZfbG9jYWxfaGVhZGVyWydmaWxlbmFtZSddOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFRyYWNlDQoN CiAgICAvLyAtLS0tLSBMb29rIGlmIGV4dHJhY3Rpb24gc2hvdWxkIGJlIGRvbmUNCiAgICBpZiAoJHBf ZW50cnlbJ3N0YXR1cyddID09ICdvaycpIHsNCg0KICAgICAgLy8gLS0tLS0gRG8gdGhlIGV4dHJhY3Rp b24gKGlmIG5vdCBhIGZvbGRlcikNCiAgICAgIGlmICghKCgkcF9lbnRyeVsnZXh0ZXJuYWwnXSYweDAw MDAwMDEwKT09MHgwMDAwMDAxMCkpIHsNCiAgICAgICAgLy8gLS0tLS0gTG9vayBmb3Igbm90IGNvbXBy ZXNzZWQgZmlsZQ0KICAgICAgICBpZiAoJHBfZW50cnlbJ2NvbXByZXNzZWRfc2l6ZSddID09ICRwX2Vu dHJ5WydzaXplJ10pIHsNCg0KICAgICAgICAgIC8vIC0tLS0tIFJlYWQgdGhlIGZpbGUgaW4gYSBidWZm ZXIgKG9uZSBzaG90KQ0KICAgICAgICAgICR2X2J1ZmZlciA9IEBmcmVhZCgkdGhpcy0+emlwX2ZkLCAk cF9lbnRyeVsnY29tcHJlc3NlZF9zaXplJ10pOw0KDQogICAgICAgICAgLy8gLS0tLS0gU2VuZCB0aGUg ZmlsZSB0byB0aGUgb3V0cHV0DQogICAgICAgICAgZWNobyAkdl9idWZmZXI7DQogICAgICAgICAgdW5z ZXQoJHZfYnVmZmVyKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICAgIC8vIC0t LS0tIFJlYWQgdGhlIGNvbXByZXNzZWQgZmlsZSBpbiBhIGJ1ZmZlciAob25lIHNob3QpDQogICAgICAg ICAgJHZfYnVmZmVyID0gQGZyZWFkKCR0aGlzLT56aXBfZmQsICRwX2VudHJ5Wydjb21wcmVzc2VkX3Np emUnXSk7DQoNCiAgICAgICAgICAvLyAtLS0tLSBEZWNvbXByZXNzIHRoZSBmaWxlDQogICAgICAgICAg JHZfZmlsZV9jb250ZW50ID0gZ3ppbmZsYXRlKCR2X2J1ZmZlcik7DQogICAgICAgICAgdW5zZXQoJHZf YnVmZmVyKTsNCg0KICAgICAgICAgIC8vIC0tLS0tIFNlbmQgdGhlIGZpbGUgdG8gdGhlIG91dHB1dA0K ICAgICAgICAgIGVjaG8gJHZfZmlsZV9jb250ZW50Ow0KICAgICAgICAgIHVuc2V0KCR2X2ZpbGVfY29u dGVudCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCgkvLyAtLS0tLSBDaGFuZ2UgYWJvcnQg c3RhdHVzDQoJaWYgKCRwX2VudHJ5WydzdGF0dXMnXSA9PSAiYWJvcnRlZCIpIHsNCiAgICAgICRwX2Vu dHJ5WydzdGF0dXMnXSA9ICJza2lwcGVkIjsNCgl9DQoNCiAgICAvLyAtLS0tLSBMb29rIGZvciBwb3N0 LWV4dHJhY3QgY2FsbGJhY2sNCiAgICBlbHNlaWYgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX0NCX1BP U1RfRVhUUkFDVF0pKSB7DQoNCiAgICAgIC8vIC0tLS0tIEdlbmVyYXRlIGEgbG9jYWwgaW5mb3JtYXRp b24NCiAgICAgICR2X2xvY2FsX2hlYWRlciA9IGFycmF5KCk7DQogICAgICAkdGhpcy0+cHJpdkNvbnZl cnRIZWFkZXIyRmlsZUluZm8oJHBfZW50cnksICR2X2xvY2FsX2hlYWRlcik7DQoNCiAgICAgIC8vIC0t LS0tIENhbGwgdGhlIGNhbGxiYWNrDQogICAgICAvLyBIZXJlIEkgZG8gbm90IHVzZSBjYWxsX3VzZXJf ZnVuYygpIGJlY2F1c2UgSSBuZWVkIHRvIHNlbmQgYSByZWZlcmVuY2UgdG8gdGhlDQogICAgICAvLyBo ZWFkZXIuDQogICAgICAkdl9yZXN1bHQgPSAkcF9vcHRpb25zW1BDTFpJUF9DQl9QT1NUX0VYVFJBQ1Rd KFBDTFpJUF9DQl9QT1NUX0VYVFJBQ1QsICR2X2xvY2FsX2hlYWRlcik7DQoNCiAgICAgIC8vIC0tLS0t IExvb2sgZm9yIGFib3J0IHJlc3VsdA0KICAgICAgaWYgKCR2X3Jlc3VsdCA9PSAyKSB7DQogICAgICAJ JHZfcmVzdWx0ID0gUENMWklQX0VSUl9VU0VSX0FCT1JURUQ7DQogICAgICB9DQogICAgfQ0KDQogICAg cmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdkV4dHJhY3RGaWxlQXNTdHJpbmco KQ0KICAvLyBEZXNjcmlwdGlvbiA6DQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyBSZXR1cm4gVmFsdWVz IDoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gcHJpdkV4dHJhY3RGaWxlQXNT dHJpbmcoJiRwX2VudHJ5LCAmJHBfc3RyaW5nLCAmJHBfb3B0aW9ucykNCiAgew0KICAgICR2X3Jlc3Vs dD0xOw0KDQogICAgLy8gLS0tLS0gUmVhZCB0aGUgZmlsZSBoZWFkZXINCiAgICAkdl9oZWFkZXIgPSBh cnJheSgpOw0KICAgIGlmICgoJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZSZWFkRmlsZUhlYWRlcigkdl9o ZWFkZXIpKSAhPSAxKQ0KICAgIHsNCiAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgcmV0dXJuICR2 X3Jlc3VsdDsNCiAgICB9DQoNCg0KICAgIC8vIC0tLS0tIENoZWNrIHRoYXQgdGhlIGZpbGUgaGVhZGVy IGlzIGNvaGVyZW50IHdpdGggJHBfZW50cnkgaW5mbw0KICAgIGlmICgkdGhpcy0+cHJpdkNoZWNrRmls ZUhlYWRlcnMoJHZfaGVhZGVyLCAkcF9lbnRyeSkgIT0gMSkgew0KICAgICAgICAvLyBUQkMNCiAgICB9 DQoNCiAgICAvLyAtLS0tLSBMb29rIGZvciBwcmUtZXh0cmFjdCBjYWxsYmFjaw0KICAgIGlmIChpc3Nl dCgkcF9vcHRpb25zW1BDTFpJUF9DQl9QUkVfRVhUUkFDVF0pKSB7DQoNCiAgICAgIC8vIC0tLS0tIEdl bmVyYXRlIGEgbG9jYWwgaW5mb3JtYXRpb24NCiAgICAgICR2X2xvY2FsX2hlYWRlciA9IGFycmF5KCk7 DQogICAgICAkdGhpcy0+cHJpdkNvbnZlcnRIZWFkZXIyRmlsZUluZm8oJHBfZW50cnksICR2X2xvY2Fs X2hlYWRlcik7DQoNCiAgICAgIC8vIC0tLS0tIENhbGwgdGhlIGNhbGxiYWNrDQogICAgICAvLyBIZXJl IEkgZG8gbm90IHVzZSBjYWxsX3VzZXJfZnVuYygpIGJlY2F1c2UgSSBuZWVkIHRvIHNlbmQgYSByZWZl cmVuY2UgdG8gdGhlDQogICAgICAvLyBoZWFkZXIuDQogICAgICAkdl9yZXN1bHQgPSAkcF9vcHRpb25z W1BDTFpJUF9DQl9QUkVfRVhUUkFDVF0oUENMWklQX0NCX1BSRV9FWFRSQUNULCAkdl9sb2NhbF9oZWFk ZXIpOw0KICAgICAgaWYgKCR2X3Jlc3VsdCA9PSAwKSB7DQogICAgICAgIC8vIC0tLS0tIENoYW5nZSB0 aGUgZmlsZSBzdGF0dXMNCiAgICAgICAgJHBfZW50cnlbJ3N0YXR1cyddID0gInNraXBwZWQiOw0KICAg ICAgICAkdl9yZXN1bHQgPSAxOw0KICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBMb29rIGZvciBhYm9y dCByZXN1bHQNCiAgICAgIGlmICgkdl9yZXN1bHQgPT0gMikgew0KICAgICAgICAvLyAtLS0tLSBUaGlz IHN0YXR1cyBpcyBpbnRlcm5hbCBhbmQgd2lsbCBiZSBjaGFuZ2VkIGluICdza2lwcGVkJw0KICAgICAg ICAkcF9lbnRyeVsnc3RhdHVzJ10gPSAiYWJvcnRlZCI7DQogICAgICAJJHZfcmVzdWx0ID0gUENMWklQ X0VSUl9VU0VSX0FCT1JURUQ7DQogICAgICB9DQoNCiAgICAgIC8vIC0tLS0tIFVwZGF0ZSB0aGUgaW5m b3JtYXRpb25zDQogICAgICAvLyBPbmx5IHNvbWUgZmllbGRzIGNhbiBiZSBtb2RpZmllZA0KICAgICAg JHBfZW50cnlbJ2ZpbGVuYW1lJ10gPSAkdl9sb2NhbF9oZWFkZXJbJ2ZpbGVuYW1lJ107DQogICAgfQ0K DQoNCiAgICAvLyAtLS0tLSBMb29rIGlmIGV4dHJhY3Rpb24gc2hvdWxkIGJlIGRvbmUNCiAgICBpZiAo JHBfZW50cnlbJ3N0YXR1cyddID09ICdvaycpIHsNCg0KICAgICAgLy8gLS0tLS0gRG8gdGhlIGV4dHJh Y3Rpb24gKGlmIG5vdCBhIGZvbGRlcikNCiAgICAgIGlmICghKCgkcF9lbnRyeVsnZXh0ZXJuYWwnXSYw eDAwMDAwMDEwKT09MHgwMDAwMDAxMCkpIHsNCiAgICAgICAgLy8gLS0tLS0gTG9vayBmb3Igbm90IGNv bXByZXNzZWQgZmlsZQ0KICAvLyAgICAgIGlmICgkcF9lbnRyeVsnY29tcHJlc3NlZF9zaXplJ10gPT0g JHBfZW50cnlbJ3NpemUnXSkNCiAgICAgICAgaWYgKCRwX2VudHJ5Wydjb21wcmVzc2lvbiddID09IDAp IHsNCg0KICAgICAgICAgIC8vIC0tLS0tIFJlYWRpbmcgdGhlIGZpbGUNCiAgICAgICAgICAkcF9zdHJp bmcgPSBAZnJlYWQoJHRoaXMtPnppcF9mZCwgJHBfZW50cnlbJ2NvbXByZXNzZWRfc2l6ZSddKTsNCiAg ICAgICAgfQ0KICAgICAgICBlbHNlIHsNCg0KICAgICAgICAgIC8vIC0tLS0tIFJlYWRpbmcgdGhlIGZp bGUNCiAgICAgICAgICAkdl9kYXRhID0gQGZyZWFkKCR0aGlzLT56aXBfZmQsICRwX2VudHJ5Wydjb21w cmVzc2VkX3NpemUnXSk7DQoNCiAgICAgICAgICAvLyAtLS0tLSBEZWNvbXByZXNzIHRoZSBmaWxlDQog ICAgICAgICAgaWYgKCgkcF9zdHJpbmcgPSBAZ3ppbmZsYXRlKCR2X2RhdGEpKSA9PT0gRkFMU0UpIHsN CiAgICAgICAgICAgICAgLy8gVEJDDQogICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8g LS0tLS0gVHJhY2UNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICAgIC8vIFRCQyA6IGVycm9y IDogY2FuIG5vdCBleHRyYWN0IGEgZm9sZGVyIGluIGEgc3RyaW5nDQogICAgICB9DQoNCiAgICB9DQoN CiAgCS8vIC0tLS0tIENoYW5nZSBhYm9ydCBzdGF0dXMNCiAgCWlmICgkcF9lbnRyeVsnc3RhdHVzJ10g PT0gImFib3J0ZWQiKSB7DQogICAgICAgICRwX2VudHJ5WydzdGF0dXMnXSA9ICJza2lwcGVkIjsNCiAg CX0NCg0KICAgIC8vIC0tLS0tIExvb2sgZm9yIHBvc3QtZXh0cmFjdCBjYWxsYmFjaw0KICAgIGVsc2Vp ZiAoaXNzZXQoJHBfb3B0aW9uc1tQQ0xaSVBfQ0JfUE9TVF9FWFRSQUNUXSkpIHsNCg0KICAgICAgLy8g LS0tLS0gR2VuZXJhdGUgYSBsb2NhbCBpbmZvcm1hdGlvbg0KICAgICAgJHZfbG9jYWxfaGVhZGVyID0g YXJyYXkoKTsNCiAgICAgICR0aGlzLT5wcml2Q29udmVydEhlYWRlcjJGaWxlSW5mbygkcF9lbnRyeSwg JHZfbG9jYWxfaGVhZGVyKTsNCg0KICAgICAgLy8gLS0tLS0gU3dhcCB0aGUgY29udGVudCB0byBoZWFk ZXINCiAgICAgICR2X2xvY2FsX2hlYWRlclsnY29udGVudCddID0gJHBfc3RyaW5nOw0KICAgICAgJHBf c3RyaW5nID0gJyc7DQoNCiAgICAgIC8vIC0tLS0tIENhbGwgdGhlIGNhbGxiYWNrDQogICAgICAvLyBI ZXJlIEkgZG8gbm90IHVzZSBjYWxsX3VzZXJfZnVuYygpIGJlY2F1c2UgSSBuZWVkIHRvIHNlbmQgYSBy ZWZlcmVuY2UgdG8gdGhlDQogICAgICAvLyBoZWFkZXIuDQogICAgICAkdl9yZXN1bHQgPSAkcF9vcHRp b25zW1BDTFpJUF9DQl9QT1NUX0VYVFJBQ1RdKFBDTFpJUF9DQl9QT1NUX0VYVFJBQ1QsICR2X2xvY2Fs X2hlYWRlcik7DQoNCiAgICAgIC8vIC0tLS0tIFN3YXAgYmFjayB0aGUgY29udGVudCB0byBoZWFkZXIN CiAgICAgICRwX3N0cmluZyA9ICR2X2xvY2FsX2hlYWRlclsnY29udGVudCddOw0KICAgICAgdW5zZXQo JHZfbG9jYWxfaGVhZGVyWydjb250ZW50J10pOw0KDQogICAgICAvLyAtLS0tLSBMb29rIGZvciBhYm9y dCByZXN1bHQNCiAgICAgIGlmICgkdl9yZXN1bHQgPT0gMikgew0KICAgICAgCSR2X3Jlc3VsdCA9IFBD TFpJUF9FUlJfVVNFUl9BQk9SVEVEOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFJldHVy bg0KICAgIHJldHVybiAkdl9yZXN1bHQ7DQogIH0NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0K ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAvLyBGdW5jdGlvbiA6IHByaXZSZWFkRmlsZUhlYWRl cigpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vIFJldHVybiBWYWx1 ZXMgOg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBwcml2UmVhZEZpbGVIZWFk ZXIoJiRwX2hlYWRlcikNCiAgew0KICAgICR2X3Jlc3VsdD0xOw0KDQogICAgLy8gLS0tLS0gUmVhZCB0 aGUgNCBieXRlcyBzaWduYXR1cmUNCiAgICAkdl9iaW5hcnlfZGF0YSA9IEBmcmVhZCgkdGhpcy0+emlw X2ZkLCA0KTsNCiAgICAkdl9kYXRhID0gdW5wYWNrKCdWaWQnLCAkdl9iaW5hcnlfZGF0YSk7DQoNCiAg ICAvLyAtLS0tLSBDaGVjayBzaWduYXR1cmUNCiAgICBpZiAoJHZfZGF0YVsnaWQnXSAhPSAweDA0MDM0 YjUwKQ0KICAgIHsNCg0KICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAgICBQY2xaaXA6OnByaXZF cnJvckxvZyhQQ0xaSVBfRVJSX0JBRF9GT1JNQVQsICdJbnZhbGlkIGFyY2hpdmUgc3RydWN0dXJlJyk7 DQoNCiAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7 DQogICAgfQ0KDQogICAgLy8gLS0tLS0gUmVhZCB0aGUgZmlyc3QgNDIgYnl0ZXMgb2YgdGhlIGhlYWRl cg0KICAgICR2X2JpbmFyeV9kYXRhID0gZnJlYWQoJHRoaXMtPnppcF9mZCwgMjYpOw0KDQogICAgLy8g LS0tLS0gTG9vayBmb3IgaW52YWxpZCBibG9jayBzaXplDQogICAgaWYgKHN0cmxlbigkdl9iaW5hcnlf ZGF0YSkgIT0gMjYpDQogICAgew0KICAgICAgJHBfaGVhZGVyWydmaWxlbmFtZSddID0gIiI7DQogICAg ICAkcF9oZWFkZXJbJ3N0YXR1cyddID0gImludmFsaWRfaGVhZGVyIjsNCg0KICAgICAgLy8gLS0tLS0g RXJyb3IgbG9nDQogICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX0JBRF9GT1JNQVQs ICJJbnZhbGlkIGJsb2NrIHNpemUgOiAiLnN0cmxlbigkdl9iaW5hcnlfZGF0YSkpOw0KDQogICAgICAv LyAtLS0tLSBSZXR1cm4NCiAgICAgIHJldHVybiBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgIH0NCg0K ICAgIC8vIC0tLS0tIEV4dHJhY3QgdGhlIHZhbHVlcw0KICAgICR2X2RhdGEgPSB1bnBhY2soJ3Z2ZXJz aW9uL3ZmbGFnL3Zjb21wcmVzc2lvbi92bXRpbWUvdm1kYXRlL1ZjcmMvVmNvbXByZXNzZWRfc2l6ZS9W c2l6ZS92ZmlsZW5hbWVfbGVuL3ZleHRyYV9sZW4nLCAkdl9iaW5hcnlfZGF0YSk7DQoNCiAgICAvLyAt LS0tLSBHZXQgZmlsZW5hbWUNCiAgICAkcF9oZWFkZXJbJ2ZpbGVuYW1lJ10gPSBmcmVhZCgkdGhpcy0+ emlwX2ZkLCAkdl9kYXRhWydmaWxlbmFtZV9sZW4nXSk7DQoNCiAgICAvLyAtLS0tLSBHZXQgZXh0cmFf ZmllbGRzDQogICAgaWYgKCR2X2RhdGFbJ2V4dHJhX2xlbiddICE9IDApIHsNCiAgICAgICRwX2hlYWRl clsnZXh0cmEnXSA9IGZyZWFkKCR0aGlzLT56aXBfZmQsICR2X2RhdGFbJ2V4dHJhX2xlbiddKTsNCiAg ICB9DQogICAgZWxzZSB7DQogICAgICAkcF9oZWFkZXJbJ2V4dHJhJ10gPSAnJzsNCiAgICB9DQoNCiAg ICAvLyAtLS0tLSBFeHRyYWN0IHByb3BlcnRpZXMNCiAgICAkcF9oZWFkZXJbJ3ZlcnNpb25fZXh0cmFj dGVkJ10gPSAkdl9kYXRhWyd2ZXJzaW9uJ107DQogICAgJHBfaGVhZGVyWydjb21wcmVzc2lvbiddID0g JHZfZGF0YVsnY29tcHJlc3Npb24nXTsNCiAgICAkcF9oZWFkZXJbJ3NpemUnXSA9ICR2X2RhdGFbJ3Np emUnXTsNCiAgICAkcF9oZWFkZXJbJ2NvbXByZXNzZWRfc2l6ZSddID0gJHZfZGF0YVsnY29tcHJlc3Nl ZF9zaXplJ107DQogICAgJHBfaGVhZGVyWydjcmMnXSA9ICR2X2RhdGFbJ2NyYyddOw0KICAgICRwX2hl YWRlclsnZmxhZyddID0gJHZfZGF0YVsnZmxhZyddOw0KICAgICRwX2hlYWRlclsnZmlsZW5hbWVfbGVu J10gPSAkdl9kYXRhWydmaWxlbmFtZV9sZW4nXTsNCg0KICAgIC8vIC0tLS0tIFJlY3VwZXJhdGUgZGF0 ZSBpbiBVTklYIGZvcm1hdA0KICAgICRwX2hlYWRlclsnbWRhdGUnXSA9ICR2X2RhdGFbJ21kYXRlJ107 DQogICAgJHBfaGVhZGVyWydtdGltZSddID0gJHZfZGF0YVsnbXRpbWUnXTsNCiAgICBpZiAoJHBfaGVh ZGVyWydtZGF0ZSddICYmICRwX2hlYWRlclsnbXRpbWUnXSkNCiAgICB7DQogICAgICAvLyAtLS0tLSBF eHRyYWN0IHRpbWUNCiAgICAgICR2X2hvdXIgPSAoJHBfaGVhZGVyWydtdGltZSddICYgMHhGODAwKSA+ PiAxMTsNCiAgICAgICR2X21pbnV0ZSA9ICgkcF9oZWFkZXJbJ210aW1lJ10gJiAweDA3RTApID4+IDU7 DQogICAgICAkdl9zZWNvbmRlID0gKCRwX2hlYWRlclsnbXRpbWUnXSAmIDB4MDAxRikqMjsNCg0KICAg ICAgLy8gLS0tLS0gRXh0cmFjdCBkYXRlDQogICAgICAkdl95ZWFyID0gKCgkcF9oZWFkZXJbJ21kYXRl J10gJiAweEZFMDApID4+IDkpICsgMTk4MDsNCiAgICAgICR2X21vbnRoID0gKCRwX2hlYWRlclsnbWRh dGUnXSAmIDB4MDFFMCkgPj4gNTsNCiAgICAgICR2X2RheSA9ICRwX2hlYWRlclsnbWRhdGUnXSAmIDB4 MDAxRjsNCg0KICAgICAgLy8gLS0tLS0gR2V0IFVOSVggZGF0ZSBmb3JtYXQNCiAgICAgICRwX2hlYWRl clsnbXRpbWUnXSA9IEBta3RpbWUoJHZfaG91ciwgJHZfbWludXRlLCAkdl9zZWNvbmRlLCAkdl9tb250 aCwgJHZfZGF5LCAkdl95ZWFyKTsNCg0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHBfaGVh ZGVyWydtdGltZSddID0gdGltZSgpOw0KICAgIH0NCg0KICAgIC8vIFRCQw0KICAgIC8vZm9yKHJlc2V0 KCR2X2RhdGEpOyAka2V5ID0ga2V5KCR2X2RhdGEpOyBuZXh0KCR2X2RhdGEpKSB7DQogICAgLy99DQoN CiAgICAvLyAtLS0tLSBTZXQgdGhlIHN0b3JlZCBmaWxlbmFtZQ0KICAgICRwX2hlYWRlclsnc3RvcmVk X2ZpbGVuYW1lJ10gPSAkcF9oZWFkZXJbJ2ZpbGVuYW1lJ107DQoNCiAgICAvLyAtLS0tLSBTZXQgdGhl IHN0YXR1cyBmaWVsZA0KICAgICRwX2hlYWRlclsnc3RhdHVzJ10gPSAib2siOw0KDQogICAgLy8gLS0t LS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdlJlYWRD ZW50cmFsRmlsZUhlYWRlcigpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6DQog IC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBw cml2UmVhZENlbnRyYWxGaWxlSGVhZGVyKCYkcF9oZWFkZXIpDQogIHsNCiAgICAkdl9yZXN1bHQ9MTsN Cg0KICAgIC8vIC0tLS0tIFJlYWQgdGhlIDQgYnl0ZXMgc2lnbmF0dXJlDQogICAgJHZfYmluYXJ5X2Rh

dGEgPSBAZnJlYWQoJHRoaXMtPnppcF9mZCwgNCk7DQogICAgJHZfZGF0YSA9IHVucGFjaygnVmlkJywg JHZfYmluYXJ5X2RhdGEpOw0KDQogICAgLy8gLS0tLS0gQ2hlY2sgc2lnbmF0dXJlDQogICAgaWYgKCR2 X2RhdGFbJ2lkJ10gIT0gMHgwMjAxNGI1MCkNCiAgICB7DQoNCiAgICAgIC8vIC0tLS0tIEVycm9yIGxv Zw0KICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9CQURfRk9STUFULCAnSW52YWxp ZCBhcmNoaXZlIHN0cnVjdHVyZScpOw0KDQogICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgIHJldHVy biBQY2xaaXA6OmVycm9yQ29kZSgpOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFJlYWQgdGhlIGZpcnN0 IDQyIGJ5dGVzIG9mIHRoZSBoZWFkZXINCiAgICAkdl9iaW5hcnlfZGF0YSA9IGZyZWFkKCR0aGlzLT56 aXBfZmQsIDQyKTsNCg0KICAgIC8vIC0tLS0tIExvb2sgZm9yIGludmFsaWQgYmxvY2sgc2l6ZQ0KICAg IGlmIChzdHJsZW4oJHZfYmluYXJ5X2RhdGEpICE9IDQyKQ0KICAgIHsNCiAgICAgICRwX2hlYWRlclsn ZmlsZW5hbWUnXSA9ICIiOw0KICAgICAgJHBfaGVhZGVyWydzdGF0dXMnXSA9ICJpbnZhbGlkX2hlYWRl ciI7DQoNCiAgICAgIC8vIC0tLS0tIEVycm9yIGxvZw0KICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2co UENMWklQX0VSUl9CQURfRk9STUFULCAiSW52YWxpZCBibG9jayBzaXplIDogIi5zdHJsZW4oJHZfYmlu YXJ5X2RhdGEpKTsNCg0KICAgICAgLy8gLS0tLS0gUmV0dXJuDQogICAgICByZXR1cm4gUGNsWmlwOjpl cnJvckNvZGUoKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBFeHRyYWN0IHRoZSB2YWx1ZXMNCiAgICAk cF9oZWFkZXIgPSB1bnBhY2soJ3Z2ZXJzaW9uL3Z2ZXJzaW9uX2V4dHJhY3RlZC92ZmxhZy92Y29tcHJl c3Npb24vdm10aW1lL3ZtZGF0ZS9WY3JjL1Zjb21wcmVzc2VkX3NpemUvVnNpemUvdmZpbGVuYW1lX2xl bi92ZXh0cmFfbGVuL3Zjb21tZW50X2xlbi92ZGlzay92aW50ZXJuYWwvVmV4dGVybmFsL1ZvZmZzZXQn LCAkdl9iaW5hcnlfZGF0YSk7DQoNCiAgICAvLyAtLS0tLSBHZXQgZmlsZW5hbWUNCiAgICBpZiAoJHBf aGVhZGVyWydmaWxlbmFtZV9sZW4nXSAhPSAwKQ0KICAgICAgJHBfaGVhZGVyWydmaWxlbmFtZSddID0g ZnJlYWQoJHRoaXMtPnppcF9mZCwgJHBfaGVhZGVyWydmaWxlbmFtZV9sZW4nXSk7DQogICAgZWxzZQ0K ICAgICAgJHBfaGVhZGVyWydmaWxlbmFtZSddID0gJyc7DQoNCiAgICAvLyAtLS0tLSBHZXQgZXh0cmEN CiAgICBpZiAoJHBfaGVhZGVyWydleHRyYV9sZW4nXSAhPSAwKQ0KICAgICAgJHBfaGVhZGVyWydleHRy YSddID0gZnJlYWQoJHRoaXMtPnppcF9mZCwgJHBfaGVhZGVyWydleHRyYV9sZW4nXSk7DQogICAgZWxz ZQ0KICAgICAgJHBfaGVhZGVyWydleHRyYSddID0gJyc7DQoNCiAgICAvLyAtLS0tLSBHZXQgY29tbWVu dA0KICAgIGlmICgkcF9oZWFkZXJbJ2NvbW1lbnRfbGVuJ10gIT0gMCkNCiAgICAgICRwX2hlYWRlclsn Y29tbWVudCddID0gZnJlYWQoJHRoaXMtPnppcF9mZCwgJHBfaGVhZGVyWydjb21tZW50X2xlbiddKTsN CiAgICBlbHNlDQogICAgICAkcF9oZWFkZXJbJ2NvbW1lbnQnXSA9ICcnOw0KDQogICAgLy8gLS0tLS0g RXh0cmFjdCBwcm9wZXJ0aWVzDQoNCiAgICAvLyAtLS0tLSBSZWN1cGVyYXRlIGRhdGUgaW4gVU5JWCBm b3JtYXQNCiAgICAvL2lmICgkcF9oZWFkZXJbJ21kYXRlJ10gJiYgJHBfaGVhZGVyWydtdGltZSddKQ0K ICAgIC8vIFRCQyA6IGJ1ZyA6IHRoaXMgd2FzIGlnbm9yaW5nIHRpbWUgd2l0aCAwLzAvMA0KICAgIGlm ICgxKQ0KICAgIHsNCiAgICAgIC8vIC0tLS0tIEV4dHJhY3QgdGltZQ0KICAgICAgJHZfaG91ciA9ICgk cF9oZWFkZXJbJ210aW1lJ10gJiAweEY4MDApID4+IDExOw0KICAgICAgJHZfbWludXRlID0gKCRwX2hl YWRlclsnbXRpbWUnXSAmIDB4MDdFMCkgPj4gNTsNCiAgICAgICR2X3NlY29uZGUgPSAoJHBfaGVhZGVy WydtdGltZSddICYgMHgwMDFGKSoyOw0KDQogICAgICAvLyAtLS0tLSBFeHRyYWN0IGRhdGUNCiAgICAg ICR2X3llYXIgPSAoKCRwX2hlYWRlclsnbWRhdGUnXSAmIDB4RkUwMCkgPj4gOSkgKyAxOTgwOw0KICAg ICAgJHZfbW9udGggPSAoJHBfaGVhZGVyWydtZGF0ZSddICYgMHgwMUUwKSA+PiA1Ow0KICAgICAgJHZf ZGF5ID0gJHBfaGVhZGVyWydtZGF0ZSddICYgMHgwMDFGOw0KDQogICAgICAvLyAtLS0tLSBHZXQgVU5J WCBkYXRlIGZvcm1hdA0KICAgICAgJHBfaGVhZGVyWydtdGltZSddID0gQG1rdGltZSgkdl9ob3VyLCAk dl9taW51dGUsICR2X3NlY29uZGUsICR2X21vbnRoLCAkdl9kYXksICR2X3llYXIpOw0KDQogICAgfQ0K ICAgIGVsc2UNCiAgICB7DQogICAgICAkcF9oZWFkZXJbJ210aW1lJ10gPSB0aW1lKCk7DQogICAgfQ0K DQogICAgLy8gLS0tLS0gU2V0IHRoZSBzdG9yZWQgZmlsZW5hbWUNCiAgICAkcF9oZWFkZXJbJ3N0b3Jl ZF9maWxlbmFtZSddID0gJHBfaGVhZGVyWydmaWxlbmFtZSddOw0KDQogICAgLy8gLS0tLS0gU2V0IGRl ZmF1bHQgc3RhdHVzIHRvIG9rDQogICAgJHBfaGVhZGVyWydzdGF0dXMnXSA9ICdvayc7DQoNCiAgICAv LyAtLS0tLSBMb29rIGlmIGl0IGlzIGEgZGlyZWN0b3J5DQogICAgaWYgKHN1YnN0cigkcF9oZWFkZXJb J2ZpbGVuYW1lJ10sIC0xKSA9PSAnLycpIHsNCiAgICAgIC8vJHBfaGVhZGVyWydleHRlcm5hbCddID0g MHg0MUZGMDAxMDsNCiAgICAgICRwX2hlYWRlclsnZXh0ZXJuYWwnXSA9IDB4MDAwMDAwMTA7DQogICAg fQ0KDQoNCiAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9DQogIC8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVu Y3Rpb24gOiBwcml2Q2hlY2tGaWxlSGVhZGVycygpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gUGFy YW1ldGVycyA6DQogIC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAgIDEgb24gc3VjY2VzcywNCiAgLy8g ICAwIG9uIGVycm9yOw0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBwcml2Q2hl Y2tGaWxlSGVhZGVycygmJHBfbG9jYWxfaGVhZGVyLCAmJHBfY2VudHJhbF9oZWFkZXIpDQogIHsNCiAg ICAkdl9yZXN1bHQ9MTsNCg0KICAJLy8gLS0tLS0gQ2hlY2sgdGhlIHN0YXRpYyB2YWx1ZXMNCiAgCS8v IFRCQw0KICAJaWYgKCRwX2xvY2FsX2hlYWRlclsnZmlsZW5hbWUnXSAhPSAkcF9jZW50cmFsX2hlYWRl clsnZmlsZW5hbWUnXSkgew0KICAJfQ0KICAJaWYgKCRwX2xvY2FsX2hlYWRlclsndmVyc2lvbl9leHRy YWN0ZWQnXSAhPSAkcF9jZW50cmFsX2hlYWRlclsndmVyc2lvbl9leHRyYWN0ZWQnXSkgew0KICAJfQ0K ICAJaWYgKCRwX2xvY2FsX2hlYWRlclsnZmxhZyddICE9ICRwX2NlbnRyYWxfaGVhZGVyWydmbGFnJ10p

IHsNCiAgCX0NCiAgCWlmICgkcF9sb2NhbF9oZWFkZXJbJ2NvbXByZXNzaW9uJ10gIT0gJHBfY2VudHJh bF9oZWFkZXJbJ2NvbXByZXNzaW9uJ10pIHsNCiAgCX0NCiAgCWlmICgkcF9sb2NhbF9oZWFkZXJbJ210 aW1lJ10gIT0gJHBfY2VudHJhbF9oZWFkZXJbJ210aW1lJ10pIHsNCiAgCX0NCiAgCWlmICgkcF9sb2Nh bF9oZWFkZXJbJ2ZpbGVuYW1lX2xlbiddICE9ICRwX2NlbnRyYWxfaGVhZGVyWydmaWxlbmFtZV9sZW4n XSkgew0KICAJfQ0KDQogIAkvLyAtLS0tLSBMb29rIGZvciBmbGFnIGJpdCAzDQogIAlpZiAoKCRwX2xv Y2FsX2hlYWRlclsnZmxhZyddICYgOCkgPT0gOCkgew0KICAgICAgICAgICRwX2xvY2FsX2hlYWRlclsn c2l6ZSddID0gJHBfY2VudHJhbF9oZWFkZXJbJ3NpemUnXTsNCiAgICAgICAgICAkcF9sb2NhbF9oZWFk ZXJbJ2NvbXByZXNzZWRfc2l6ZSddID0gJHBfY2VudHJhbF9oZWFkZXJbJ2NvbXByZXNzZWRfc2l6ZSdd Ow0KICAgICAgICAgICRwX2xvY2FsX2hlYWRlclsnY3JjJ10gPSAkcF9jZW50cmFsX2hlYWRlclsnY3Jj J107DQogIAl9DQoNCiAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9 DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAg Ly8gRnVuY3Rpb24gOiBwcml2UmVhZEVuZENlbnRyYWxEaXIoKQ0KICAvLyBEZXNjcmlwdGlvbiA6DQog IC8vIFBhcmFtZXRlcnMgOg0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAgLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCiAgZnVuY3Rpb24gcHJpdlJlYWRFbmRDZW50cmFsRGlyKCYkcF9jZW50cmFsX2RpcikNCiAg ew0KICAgICR2X3Jlc3VsdD0xOw0KDQogICAgLy8gLS0tLS0gR28gdG8gdGhlIGVuZCBvZiB0aGUgemlw IGZpbGUNCiAgICAkdl9zaXplID0gZmlsZXNpemUoJHRoaXMtPnppcG5hbWUpOw0KICAgIEBmc2Vlaygk dGhpcy0+emlwX2ZkLCAkdl9zaXplKTsNCiAgICBpZiAoQGZ0ZWxsKCR0aGlzLT56aXBfZmQpICE9ICR2 X3NpemUpDQogICAgew0KICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAgICBQY2xaaXA6OnByaXZF cnJvckxvZyhQQ0xaSVBfRVJSX0JBRF9GT1JNQVQsICdVbmFibGUgdG8gZ28gdG8gdGhlIGVuZCBvZiB0 aGUgYXJjaGl2ZSBcJycuJHRoaXMtPnppcG5hbWUuJ1wnJyk7DQoNCiAgICAgIC8vIC0tLS0tIFJldHVy bg0KICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0g Rmlyc3QgdHJ5IDogbG9vayBpZiB0aGlzIGlzIGFuIGFyY2hpdmUgd2l0aCBubyBjb21tZW50YXJpZXMg KG1vc3Qgb2YgdGhlIHRpbWUpDQogICAgLy8gaW4gdGhpcyBjYXNlIHRoZSBlbmQgb2YgY2VudHJhbCBk aXIgaXMgYXQgMjIgYnl0ZXMgb2YgdGhlIGZpbGUgZW5kDQogICAgJHZfZm91bmQgPSAwOw0KICAgIGlm ICgkdl9zaXplID4gMjYpIHsNCiAgICAgIEBmc2VlaygkdGhpcy0+emlwX2ZkLCAkdl9zaXplLTIyKTsN CiAgICAgIGlmICgoJHZfcG9zID0gQGZ0ZWxsKCR0aGlzLT56aXBfZmQpKSAhPSAoJHZfc2l6ZS0yMikp DQogICAgICB7DQogICAgICAgIC8vIC0tLS0tIEVycm9yIGxvZw0KICAgICAgICBQY2xaaXA6OnByaXZF cnJvckxvZyhQQ0xaSVBfRVJSX0JBRF9GT1JNQVQsICdVbmFibGUgdG8gc2VlayBiYWNrIHRvIHRoZSBt aWRkbGUgb2YgdGhlIGFyY2hpdmUgXCcnLiR0aGlzLT56aXBuYW1lLidcJycpOw0KDQogICAgICAgIC8v IC0tLS0tIFJldHVybg0KICAgICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICAgIH0N Cg0KICAgICAgLy8gLS0tLS0gUmVhZCBmb3IgYnl0ZXMNCiAgICAgICR2X2JpbmFyeV9kYXRhID0gQGZy ZWFkKCR0aGlzLT56aXBfZmQsIDQpOw0KICAgICAgJHZfZGF0YSA9IEB1bnBhY2soJ1ZpZCcsICR2X2Jp bmFyeV9kYXRhKTsNCg0KICAgICAgLy8gLS0tLS0gQ2hlY2sgc2lnbmF0dXJlDQogICAgICBpZiAoJHZf ZGF0YVsnaWQnXSA9PSAweDA2MDU0YjUwKSB7DQogICAgICAgICR2X2ZvdW5kID0gMTsNCiAgICAgIH0N Cg0KICAgICAgJHZfcG9zID0gZnRlbGwoJHRoaXMtPnppcF9mZCk7DQogICAgfQ0KDQogICAgLy8gLS0t LS0gR28gYmFjayB0byB0aGUgbWF4aW11bSBwb3NzaWJsZSBzaXplIG9mIHRoZSBDZW50cmFsIERpciBF bmQgUmVjb3JkDQogICAgaWYgKCEkdl9mb3VuZCkgew0KICAgICAgJHZfbWF4aW11bV9zaXplID0gNjU1 NTc7IC8vIDB4RkZGRiArIDIyOw0KICAgICAgaWYgKCR2X21heGltdW1fc2l6ZSA+ICR2X3NpemUpDQog ICAgICAgICR2X21heGltdW1fc2l6ZSA9ICR2X3NpemU7DQogICAgICBAZnNlZWsoJHRoaXMtPnppcF9m ZCwgJHZfc2l6ZS0kdl9tYXhpbXVtX3NpemUpOw0KICAgICAgaWYgKEBmdGVsbCgkdGhpcy0+emlwX2Zk KSAhPSAoJHZfc2l6ZS0kdl9tYXhpbXVtX3NpemUpKQ0KICAgICAgew0KICAgICAgICAvLyAtLS0tLSBF cnJvciBsb2cNCiAgICAgICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9CQURfRk9STUFU LCAnVW5hYmxlIHRvIHNlZWsgYmFjayB0byB0aGUgbWlkZGxlIG9mIHRoZSBhcmNoaXZlIFwnJy4kdGhp cy0+emlwbmFtZS4nXCcnKTsNCg0KICAgICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgICAgcmV0dXJu IFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgICB9DQoNCiAgICAgIC8vIC0tLS0tIFJlYWQgYnl0ZSBw ZXIgYnl0ZSBpbiBvcmRlciB0byBmaW5kIHRoZSBzaWduYXR1cmUNCiAgICAgICR2X3BvcyA9IGZ0ZWxs KCR0aGlzLT56aXBfZmQpOw0KICAgICAgJHZfYnl0ZXMgPSAweDAwMDAwMDAwOw0KICAgICAgd2hpbGUg KCR2X3BvcyA8ICR2X3NpemUpDQogICAgICB7DQogICAgICAgIC8vIC0tLS0tIFJlYWQgYSBieXRlDQog ICAgICAgICR2X2J5dGUgPSBAZnJlYWQoJHRoaXMtPnppcF9mZCwgMSk7DQoNCiAgICAgICAgLy8gLS0t LS0gIEFkZCB0aGUgYnl0ZQ0KICAgICAgICAvLyR2X2J5dGVzID0gKCR2X2J5dGVzIDw8IDgpIHwgT3Jk KCR2X2J5dGUpOw0KICAgICAgICAvLyBOb3RlIHdlIG1hc2sgdGhlIG9sZCB2YWx1ZSBkb3duIHN1Y2gg dGhhdCBvbmNlIHNoaWZ0ZWQgd2UgY2FuIG5ldmVyIGVuZCB1cCB3aXRoIG1vcmUgdGhhbiBhIDMyYml0 IG51bWJlcg0KICAgICAgICAvLyBPdGhlcndpc2Ugb24gc3lzdGVtcyB3aGVyZSB3ZSBoYXZlIDY0Yml0 IGludGVnZXJzIHRoZSBjaGVjayBiZWxvdyBmb3IgdGhlIG1hZ2ljIG51bWJlciB3aWxsIGZhaWwuDQog ICAgICAgICR2X2J5dGVzID0gKCAoJHZfYnl0ZXMgJiAweEZGRkZGRikgPDwgOCkgfCBPcmQoJHZfYnl0 ZSk7DQoNCiAgICAgICAgLy8gLS0tLS0gQ29tcGFyZSB0aGUgYnl0ZXMNCiAgICAgICAgaWYgKCR2X2J5 dGVzID09IDB4NTA0YjA1MDYpDQogICAgICAgIHsNCiAgICAgICAgICAkdl9wb3MrKzsNCiAgICAgICAg

ICBicmVhazsNCiAgICAgICAgfQ0KDQogICAgICAgICR2X3BvcysrOw0KICAgICAgfQ0KDQogICAgICAv LyAtLS0tLSBMb29rIGlmIG5vdCBmb3VuZCBlbmQgb2YgY2VudHJhbCBkaXINCiAgICAgIGlmICgkdl9w b3MgPT0gJHZfc2l6ZSkNCiAgICAgIHsNCg0KICAgICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAg ICAgUGNsWmlwOjpwcml2RXJyb3JMb2coUENMWklQX0VSUl9CQURfRk9STUFULCAiVW5hYmxlIHRvIGZp bmQgRW5kIG9mIENlbnRyYWwgRGlyIFJlY29yZCBzaWduYXR1cmUiKTsNCg0KICAgICAgICAvLyAtLS0t LSBSZXR1cm4NCiAgICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgICB9DQogICAg fQ0KDQogICAgLy8gLS0tLS0gUmVhZCB0aGUgZmlyc3QgMTggYnl0ZXMgb2YgdGhlIGhlYWRlcg0KICAg ICR2X2JpbmFyeV9kYXRhID0gZnJlYWQoJHRoaXMtPnppcF9mZCwgMTgpOw0KDQogICAgLy8gLS0tLS0g TG9vayBmb3IgaW52YWxpZCBibG9jayBzaXplDQogICAgaWYgKHN0cmxlbigkdl9iaW5hcnlfZGF0YSkg IT0gMTgpDQogICAgew0KDQogICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgIFBjbFppcDo6cHJp dkVycm9yTG9nKFBDTFpJUF9FUlJfQkFEX0ZPUk1BVCwgIkludmFsaWQgRW5kIG9mIENlbnRyYWwgRGly IFJlY29yZCBzaXplIDogIi5zdHJsZW4oJHZfYmluYXJ5X2RhdGEpKTsNCg0KICAgICAgLy8gLS0tLS0g UmV0dXJuDQogICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICB9DQoNCiAgICAvLyAt LS0tLSBFeHRyYWN0IHRoZSB2YWx1ZXMNCiAgICAkdl9kYXRhID0gdW5wYWNrKCd2ZGlzay92ZGlza19z dGFydC92ZGlza19lbnRyaWVzL3ZlbnRyaWVzL1ZzaXplL1ZvZmZzZXQvdmNvbW1lbnRfc2l6ZScsICR2 X2JpbmFyeV9kYXRhKTsNCg0KICAgIC8vIC0tLS0tIENoZWNrIHRoZSBnbG9iYWwgc2l6ZQ0KICAgIGlm ICgoJHZfcG9zICsgJHZfZGF0YVsnY29tbWVudF9zaXplJ10gKyAxOCkgIT0gJHZfc2l6ZSkgew0KDQoJ ICAvLyAtLS0tLSBSZW1vdmVkIGluIHJlbGVhc2UgMi4yIHNlZSByZWFkbWUgZmlsZQ0KCSAgLy8gVGhl IGNoZWNrIG9mIHRoZSBmaWxlIHNpemUgaXMgYSBsaXR0bGUgdG9vIHN0cmljdC4NCgkgIC8vIFNvbWUg YnVncyB3aGVyZSBmb3VuZCB3aGVuIGEgemlwIGlzIGVuY3J5cHRlZC9kZWNyeXB0ZWQgd2l0aCAnY3J5 cHQnLg0KCSAgLy8gV2hpbGUgZGVjcnlwdGVkLCB6aXAgaGFzIHRyYWluaW5nIDAgYnl0ZXMNCgkgIGlm ICgwKSB7DQogICAgICAvLyAtLS0tLSBFcnJvciBsb2cNCiAgICAgIFBjbFppcDo6cHJpdkVycm9yTG9n KFBDTFpJUF9FUlJfQkFEX0ZPUk1BVCwNCgkgICAgICAgICAgICAgICAgICAgICAgICdUaGUgY2VudHJh bCBkaXIgaXMgbm90IGF0IHRoZSBlbmQgb2YgdGhlIGFyY2hpdmUuJw0KCQkJCQkJICAgLicgU29tZSB0 cmFpbGluZyBieXRlcyBleGlzdHMgYWZ0ZXIgdGhlIGFyY2hpdmUuJyk7DQoNCiAgICAgIC8vIC0tLS0t IFJldHVybg0KICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQoJICB9DQogICAgfQ0KDQog ICAgLy8gLS0tLS0gR2V0IGNvbW1lbnQNCiAgICBpZiAoJHZfZGF0YVsnY29tbWVudF9zaXplJ10gIT0g MCkgew0KICAgICAgJHBfY2VudHJhbF9kaXJbJ2NvbW1lbnQnXSA9IGZyZWFkKCR0aGlzLT56aXBfZmQs ICR2X2RhdGFbJ2NvbW1lbnRfc2l6ZSddKTsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgJHBfY2VudHJh bF9kaXJbJ2NvbW1lbnQnXSA9ICcnOw0KDQogICAgJHBfY2VudHJhbF9kaXJbJ2VudHJpZXMnXSA9ICR2 X2RhdGFbJ2VudHJpZXMnXTsNCiAgICAkcF9jZW50cmFsX2RpclsnZGlza19lbnRyaWVzJ10gPSAkdl9k YXRhWydkaXNrX2VudHJpZXMnXTsNCiAgICAkcF9jZW50cmFsX2Rpclsnb2Zmc2V0J10gPSAkdl9kYXRh WydvZmZzZXQnXTsNCiAgICAkcF9jZW50cmFsX2Rpclsnc2l6ZSddID0gJHZfZGF0YVsnc2l6ZSddOw0K ICAgICRwX2NlbnRyYWxfZGlyWydkaXNrJ10gPSAkdl9kYXRhWydkaXNrJ107DQogICAgJHBfY2VudHJh bF9kaXJbJ2Rpc2tfc3RhcnQnXSA9ICR2X2RhdGFbJ2Rpc2tfc3RhcnQnXTsNCg0KICAgIC8vIFRCQw0K ICAgIC8vZm9yKHJlc2V0KCRwX2NlbnRyYWxfZGlyKTsgJGtleSA9IGtleSgkcF9jZW50cmFsX2Rpcik7 IG5leHQoJHBfY2VudHJhbF9kaXIpKSB7DQogICAgLy99DQoNCiAgICAvLyAtLS0tLSBSZXR1cm4NCiAg ICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBwcml2RGVsZXRlQnlSdWxlKCkNCiAg Ly8gRGVzY3JpcHRpb24gOg0KICAvLyBQYXJhbWV0ZXJzIDoNCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQog IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIGZ1bmN0aW9uIHByaXZEZWxldGVCeVJ1bGUoJiRwX3Jl c3VsdF9saXN0LCAmJHBfb3B0aW9ucykNCiAgew0KICAgICR2X3Jlc3VsdD0xOw0KICAgICR2X2xpc3Rf ZGV0YWlsID0gYXJyYXkoKTsNCg0KICAgIC8vIC0tLS0tIE9wZW4gdGhlIHppcCBmaWxlDQogICAgaWYg KCgkdl9yZXN1bHQ9JHRoaXMtPnByaXZPcGVuRmQoJ3JiJykpICE9IDEpDQogICAgew0KICAgICAgLy8g LS0tLS0gUmV0dXJuDQogICAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICAgIH0NCg0KICAgIC8vIC0tLS0t IFJlYWQgdGhlIGNlbnRyYWwgZGlyZWN0b3J5IGluZm9ybWF0aW9ucw0KICAgICR2X2NlbnRyYWxfZGly ID0gYXJyYXkoKTsNCiAgICBpZiAoKCR2X3Jlc3VsdCA9ICR0aGlzLT5wcml2UmVhZEVuZENlbnRyYWxE aXIoJHZfY2VudHJhbF9kaXIpKSAhPSAxKQ0KICAgIHsNCiAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgp Ow0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBHbyB0byBiZWdp bm5pbmcgb2YgRmlsZQ0KICAgIEByZXdpbmQoJHRoaXMtPnppcF9mZCk7DQoNCiAgICAvLyAtLS0tLSBT Y2FuIGFsbCB0aGUgZmlsZXMNCiAgICAvLyAtLS0tLSBTdGFydCBhdCBiZWdpbm5pbmcgb2YgQ2VudHJh bCBEaXINCiAgICAkdl9wb3NfZW50cnkgPSAkdl9jZW50cmFsX2Rpclsnb2Zmc2V0J107DQogICAgQHJl d2luZCgkdGhpcy0+emlwX2ZkKTsNCiAgICBpZiAoQGZzZWVrKCR0aGlzLT56aXBfZmQsICR2X3Bvc19l bnRyeSkpDQogICAgew0KICAgICAgLy8gLS0tLS0gQ2xvc2UgdGhlIHppcCBmaWxlDQogICAgICAkdGhp cy0+cHJpdkNsb3NlRmQoKTsNCg0KICAgICAgLy8gLS0tLS0gRXJyb3IgbG9nDQogICAgICBQY2xaaXA6 OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX0lOVkFMSURfQVJDSElWRV9aSVAsICdJbnZhbGlkIGFyY2hp dmUgc2l6ZScpOw0KDQogICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgIHJldHVybiBQY2xaaXA6OmVy

cm9yQ29kZSgpOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFJlYWQgZWFjaCBlbnRyeQ0KICAgICR2X2hl YWRlcl9saXN0ID0gYXJyYXkoKTsNCiAgICAkal9zdGFydCA9IDA7DQogICAgZm9yICgkaT0wLCAkdl9u Yl9leHRyYWN0ZWQ9MDsgJGk8JHZfY2VudHJhbF9kaXJbJ2VudHJpZXMnXTsgJGkrKykNCiAgICB7DQoN CiAgICAgIC8vIC0tLS0tIFJlYWQgdGhlIGZpbGUgaGVhZGVyDQogICAgICAkdl9oZWFkZXJfbGlzdFsk dl9uYl9leHRyYWN0ZWRdID0gYXJyYXkoKTsNCiAgICAgIGlmICgoJHZfcmVzdWx0ID0gJHRoaXMtPnBy aXZSZWFkQ2VudHJhbEZpbGVIZWFkZXIoJHZfaGVhZGVyX2xpc3RbJHZfbmJfZXh0cmFjdGVkXSkpICE9 IDEpDQogICAgICB7DQogICAgICAgIC8vIC0tLS0tIENsb3NlIHRoZSB6aXAgZmlsZQ0KICAgICAgICAk dGhpcy0+cHJpdkNsb3NlRmQoKTsNCg0KICAgICAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICAgICAgfQ0K DQoNCiAgICAgIC8vIC0tLS0tIFN0b3JlIHRoZSBpbmRleA0KICAgICAgJHZfaGVhZGVyX2xpc3RbJHZf bmJfZXh0cmFjdGVkXVsnaW5kZXgnXSA9ICRpOw0KDQogICAgICAvLyAtLS0tLSBMb29rIGZvciB0aGUg c3BlY2lmaWMgZXh0cmFjdCBydWxlcw0KICAgICAgJHZfZm91bmQgPSBmYWxzZTsNCg0KICAgICAgLy8g LS0tLS0gTG9vayBmb3IgZXh0cmFjdCBieSBuYW1lIHJ1bGUNCiAgICAgIGlmICggICAoaXNzZXQoJHBf b3B0aW9uc1tQQ0xaSVBfT1BUX0JZX05BTUVdKSkNCiAgICAgICAgICAmJiAoJHBfb3B0aW9uc1tQQ0xa SVBfT1BUX0JZX05BTUVdICE9IDApKSB7DQoNCiAgICAgICAgICAvLyAtLS0tLSBMb29rIGlmIHRoZSBm aWxlbmFtZSBpcyBpbiB0aGUgbGlzdA0KICAgICAgICAgIGZvciAoJGo9MDsgKCRqPHNpemVvZigkcF9v cHRpb25zW1BDTFpJUF9PUFRfQllfTkFNRV0pKSAmJiAoISR2X2ZvdW5kKTsgJGorKykgew0KDQogICAg ICAgICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGEgZGlyZWN0b3J5DQogICAgICAgICAgICAgIGlmIChz dWJzdHIoJHBfb3B0aW9uc1tQQ0xaSVBfT1BUX0JZX05BTUVdWyRqXSwgLTEpID09ICIvIikgew0KDQog ICAgICAgICAgICAgICAgICAvLyAtLS0tLSBMb29rIGlmIHRoZSBkaXJlY3RvcnkgaXMgaW4gdGhlIGZp bGVuYW1lIHBhdGgNCiAgICAgICAgICAgICAgICAgIGlmICggICAoc3RybGVuKCR2X2hlYWRlcl9saXN0 WyR2X25iX2V4dHJhY3RlZF1bJ3N0b3JlZF9maWxlbmFtZSddKSA+IHN0cmxlbigkcF9vcHRpb25zW1BD TFpJUF9PUFRfQllfTkFNRV1bJGpdKSkNCiAgICAgICAgICAgICAgICAgICAgICAmJiAoc3Vic3RyKCR2 X2hlYWRlcl9saXN0WyR2X25iX2V4dHJhY3RlZF1bJ3N0b3JlZF9maWxlbmFtZSddLCAwLCBzdHJsZW4o JHBfb3B0aW9uc1tQQ0xaSVBfT1BUX0JZX05BTUVdWyRqXSkpID09ICRwX29wdGlvbnNbUENMWklQX09Q VF9CWV9OQU1FXVskal0pKSB7DQogICAgICAgICAgICAgICAgICAgICAgJHZfZm91bmQgPSB0cnVlOw0K ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZWlmICggICAoKCR2X2hlYWRl cl9saXN0WyR2X25iX2V4dHJhY3RlZF1bJ2V4dGVybmFsJ10mMHgwMDAwMDAxMCk9PTB4MDAwMDAwMTAp IC8qIEluZGljYXRlcyBhIGZvbGRlciAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJHZf aGVhZGVyX2xpc3RbJHZfbmJfZXh0cmFjdGVkXVsnc3RvcmVkX2ZpbGVuYW1lJ10uJy8nID09ICRwX29w dGlvbnNbUENMWklQX09QVF9CWV9OQU1FXVskal0pKSB7DQogICAgICAgICAgICAgICAgICAgICAgJHZf Zm91bmQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGEgZmlsZW5hbWUNCiAgICAgICAgICAgICAgZWxzZWlmICgk dl9oZWFkZXJfbGlzdFskdl9uYl9leHRyYWN0ZWRdWydzdG9yZWRfZmlsZW5hbWUnXSA9PSAkcF9vcHRp b25zW1BDTFpJUF9PUFRfQllfTkFNRV1bJGpdKSB7DQogICAgICAgICAgICAgICAgICAkdl9mb3VuZCA9 IHRydWU7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIC8vIC0t LS0tIExvb2sgZm9yIGV4dHJhY3QgYnkgZXJlZyBydWxlDQogICAgICAvLyBlcmVnKCkgaXMgZGVwcmVj YXRlZCB3aXRoIFBIUCA1LjMNCiAgICAgIC8qDQogICAgICBlbHNlIGlmICggICAoaXNzZXQoJHBfb3B0 aW9uc1tQQ0xaSVBfT1BUX0JZX0VSRUddKSkNCiAgICAgICAgICAgICAgICYmICgkcF9vcHRpb25zW1BD TFpJUF9PUFRfQllfRVJFR10gIT0gIiIpKSB7DQoNCiAgICAgICAgICBpZiAoZXJlZygkcF9vcHRpb25z W1BDTFpJUF9PUFRfQllfRVJFR10sICR2X2hlYWRlcl9saXN0WyR2X25iX2V4dHJhY3RlZF1bJ3N0b3Jl ZF9maWxlbmFtZSddKSkgew0KICAgICAgICAgICAgICAkdl9mb3VuZCA9IHRydWU7DQogICAgICAgICAg fQ0KICAgICAgfQ0KICAgICAgKi8NCg0KICAgICAgLy8gLS0tLS0gTG9vayBmb3IgZXh0cmFjdCBieSBw cmVnIHJ1bGUNCiAgICAgIGVsc2UgaWYgKCAgIChpc3NldCgkcF9vcHRpb25zW1BDTFpJUF9PUFRfQllf UFJFR10pKQ0KICAgICAgICAgICAgICAgJiYgKCRwX29wdGlvbnNbUENMWklQX09QVF9CWV9QUkVHXSAh PSAiIikpIHsNCg0KICAgICAgICAgIGlmIChwcmVnX21hdGNoKCRwX29wdGlvbnNbUENMWklQX09QVF9C WV9QUkVHXSwgJHZfaGVhZGVyX2xpc3RbJHZfbmJfZXh0cmFjdGVkXVsnc3RvcmVkX2ZpbGVuYW1lJ10p KSB7DQogICAgICAgICAgICAgICR2X2ZvdW5kID0gdHJ1ZTsNCiAgICAgICAgICB9DQogICAgICB9DQoN CiAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGV4dHJhY3QgYnkgaW5kZXggcnVsZQ0KICAgICAgZWxzZSBp ZiAoICAgKGlzc2V0KCRwX29wdGlvbnNbUENMWklQX09QVF9CWV9JTkRFWF0pKQ0KICAgICAgICAgICAg ICAgJiYgKCRwX29wdGlvbnNbUENMWklQX09QVF9CWV9JTkRFWF0gIT0gMCkpIHsNCg0KICAgICAgICAg IC8vIC0tLS0tIExvb2sgaWYgdGhlIGluZGV4IGlzIGluIHRoZSBsaXN0DQogICAgICAgICAgZm9yICgk aj0kal9zdGFydDsgKCRqPHNpemVvZigkcF9vcHRpb25zW1BDTFpJUF9PUFRfQllfSU5ERVhdKSkgJiYg KCEkdl9mb3VuZCk7ICRqKyspIHsNCg0KICAgICAgICAgICAgICBpZiAoKCRpPj0kcF9vcHRpb25zW1BD TFpJUF9PUFRfQllfSU5ERVhdWyRqXVsnc3RhcnQnXSkgJiYgKCRpPD0kcF9vcHRpb25zW1BDTFpJUF9P UFRfQllfSU5ERVhdWyRqXVsnZW5kJ10pKSB7DQogICAgICAgICAgICAgICAgICAkdl9mb3VuZCA9IHRy dWU7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKCRpPj0kcF9vcHRpb25zW1BDTFpJ UF9PUFRfQllfSU5ERVhdWyRqXVsnZW5kJ10pIHsNCiAgICAgICAgICAgICAgICAgICRqX3N0YXJ0ID0g JGorMTsNCiAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgIGlmICgkcF9vcHRpb25zW1BDTFpJ UF9PUFRfQllfSU5ERVhdWyRqXVsnc3RhcnQnXT4kaSkgew0KICAgICAgICAgICAgICAgICAgYnJlYWs7 DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAg

IAkkdl9mb3VuZCA9IHRydWU7DQogICAgICB9DQoNCiAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGRlbGV0 aW9uDQogICAgICBpZiAoJHZfZm91bmQpDQogICAgICB7DQogICAgICAgIHVuc2V0KCR2X2hlYWRlcl9s aXN0WyR2X25iX2V4dHJhY3RlZF0pOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAg ICAkdl9uYl9leHRyYWN0ZWQrKzsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAvLyAtLS0tLSBMb29rIGlm IHNvbWV0aGluZyBuZWVkIHRvIGJlIGRlbGV0ZWQNCiAgICBpZiAoJHZfbmJfZXh0cmFjdGVkID4gMCkg ew0KDQogICAgICAgIC8vIC0tLS0tIENyZWF0ZXMgYSB0ZW1wb3JheSBmaWxlDQogICAgICAgICR2X3pp cF90ZW1wX25hbWUgPSBQQ0xaSVBfVEVNUE9SQVJZX0RJUi51bmlxaWQoJ3BjbHppcC0nKS4nLnRtcCc7 DQoNCiAgICAgICAgLy8gLS0tLS0gQ3JlYXRlcyBhIHRlbXBvcmFyeSB6aXAgYXJjaGl2ZQ0KICAgICAg ICAkdl90ZW1wX3ppcCA9IG5ldyBQY2xaaXAoJHZfemlwX3RlbXBfbmFtZSk7DQoNCiAgICAgICAgLy8g LS0tLS0gT3BlbiB0aGUgdGVtcG9yYXJ5IHppcCBmaWxlIGluIHdyaXRlIG1vZGUNCiAgICAgICAgaWYg KCgkdl9yZXN1bHQgPSAkdl90ZW1wX3ppcC0+cHJpdk9wZW5GZCgnd2InKSkgIT0gMSkgew0KICAgICAg ICAgICAgJHRoaXMtPnByaXZDbG9zZUZkKCk7DQoNCiAgICAgICAgICAgIC8vIC0tLS0tIFJldHVybg0K ICAgICAgICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIC0tLS0t IExvb2sgd2hpY2ggZmlsZSBuZWVkIHRvIGJlIGtlcHQNCiAgICAgICAgZm9yICgkaT0wOyAkaTxzaXpl b2YoJHZfaGVhZGVyX2xpc3QpOyAkaSsrKSB7DQoNCiAgICAgICAgICAgIC8vIC0tLS0tIENhbGN1bGF0 ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGhlYWRlcg0KICAgICAgICAgICAgQHJld2luZCgkdGhpcy0+emlw X2ZkKTsNCiAgICAgICAgICAgIGlmIChAZnNlZWsoJHRoaXMtPnppcF9mZCwgICR2X2hlYWRlcl9saXN0 WyRpXVsnb2Zmc2V0J10pKSB7DQogICAgICAgICAgICAgICAgLy8gLS0tLS0gQ2xvc2UgdGhlIHppcCBm aWxlDQogICAgICAgICAgICAgICAgJHRoaXMtPnByaXZDbG9zZUZkKCk7DQogICAgICAgICAgICAgICAg JHZfdGVtcF96aXAtPnByaXZDbG9zZUZkKCk7DQogICAgICAgICAgICAgICAgQHVubGluaygkdl96aXBf dGVtcF9uYW1lKTsNCg0KICAgICAgICAgICAgICAgIC8vIC0tLS0tIEVycm9yIGxvZw0KICAgICAgICAg ICAgICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfSU5WQUxJRF9BUkNISVZFX1pJUCwg J0ludmFsaWQgYXJjaGl2ZSBzaXplJyk7DQoNCiAgICAgICAgICAgICAgICAvLyAtLS0tLSBSZXR1cm4N CiAgICAgICAgICAgICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICAgICAgICAgIH0N Cg0KICAgICAgICAgICAgLy8gLS0tLS0gUmVhZCB0aGUgZmlsZSBoZWFkZXINCiAgICAgICAgICAgICR2 X2xvY2FsX2hlYWRlciA9IGFycmF5KCk7DQogICAgICAgICAgICBpZiAoKCR2X3Jlc3VsdCA9ICR0aGlz LT5wcml2UmVhZEZpbGVIZWFkZXIoJHZfbG9jYWxfaGVhZGVyKSkgIT0gMSkgew0KICAgICAgICAgICAg ICAgIC8vIC0tLS0tIENsb3NlIHRoZSB6aXAgZmlsZQ0KICAgICAgICAgICAgICAgICR0aGlzLT5wcml2 Q2xvc2VGZCgpOw0KICAgICAgICAgICAgICAgICR2X3RlbXBfemlwLT5wcml2Q2xvc2VGZCgpOw0KICAg ICAgICAgICAgICAgIEB1bmxpbmsoJHZfemlwX3RlbXBfbmFtZSk7DQoNCiAgICAgICAgICAgICAgICAv LyAtLS0tLSBSZXR1cm4NCiAgICAgICAgICAgICAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICAgICAgICAg ICAgfQ0KDQogICAgICAgICAgICAvLyAtLS0tLSBDaGVjayB0aGF0IGxvY2FsIGZpbGUgaGVhZGVyIGlz IHNhbWUgYXMgY2VudHJhbCBmaWxlIGhlYWRlcg0KICAgICAgICAgICAgaWYgKCR0aGlzLT5wcml2Q2hl Y2tGaWxlSGVhZGVycygkdl9sb2NhbF9oZWFkZXIsDQoJCQkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICR2X2hlYWRlcl9saXN0WyRpXSkgIT0gMSkgew0KICAgICAgICAgICAgICAgIC8vIFRCQw0K ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdW5zZXQoJHZfbG9jYWxfaGVhZGVyKTsNCg0KICAgICAg ICAgICAgLy8gLS0tLS0gV3JpdGUgdGhlIGZpbGUgaGVhZGVyDQogICAgICAgICAgICBpZiAoKCR2X3Jl c3VsdCA9ICR2X3RlbXBfemlwLT5wcml2V3JpdGVGaWxlSGVhZGVyKCR2X2hlYWRlcl9saXN0WyRpXSkp ICE9IDEpIHsNCiAgICAgICAgICAgICAgICAvLyAtLS0tLSBDbG9zZSB0aGUgemlwIGZpbGUNCiAgICAg ICAgICAgICAgICAkdGhpcy0+cHJpdkNsb3NlRmQoKTsNCiAgICAgICAgICAgICAgICAkdl90ZW1wX3pp cC0+cHJpdkNsb3NlRmQoKTsNCiAgICAgICAgICAgICAgICBAdW5saW5rKCR2X3ppcF90ZW1wX25hbWUp Ow0KDQogICAgICAgICAgICAgICAgLy8gLS0tLS0gUmV0dXJuDQogICAgICAgICAgICAgICAgcmV0dXJu ICR2X3Jlc3VsdDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gLS0tLS0gUmVhZC93cml0 ZSB0aGUgZGF0YSBibG9jaw0KICAgICAgICAgICAgaWYgKCgkdl9yZXN1bHQgPSBQY2xaaXBVdGlsQ29w eUJsb2NrKCR0aGlzLT56aXBfZmQsICR2X3RlbXBfemlwLT56aXBfZmQsICR2X2hlYWRlcl9saXN0WyRp XVsnY29tcHJlc3NlZF9zaXplJ10pKSAhPSAxKSB7DQogICAgICAgICAgICAgICAgLy8gLS0tLS0gQ2xv c2UgdGhlIHppcCBmaWxlDQogICAgICAgICAgICAgICAgJHRoaXMtPnByaXZDbG9zZUZkKCk7DQogICAg ICAgICAgICAgICAgJHZfdGVtcF96aXAtPnByaXZDbG9zZUZkKCk7DQogICAgICAgICAgICAgICAgQHVu bGluaygkdl96aXBfdGVtcF9uYW1lKTsNCg0KICAgICAgICAgICAgICAgIC8vIC0tLS0tIFJldHVybg0K ICAgICAgICAgICAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0N Cg0KICAgICAgICAvLyAtLS0tLSBTdG9yZSB0aGUgb2Zmc2V0IG9mIHRoZSBjZW50cmFsIGRpcg0KICAg ICAgICAkdl9vZmZzZXQgPSBAZnRlbGwoJHZfdGVtcF96aXAtPnppcF9mZCk7DQoNCiAgICAgICAgLy8g LS0tLS0gUmUtQ3JlYXRlIHRoZSBDZW50cmFsIERpciBmaWxlcyBoZWFkZXINCiAgICAgICAgZm9yICgk aT0wOyAkaTxzaXplb2YoJHZfaGVhZGVyX2xpc3QpOyAkaSsrKSB7DQogICAgICAgICAgICAvLyAtLS0t LSBDcmVhdGUgdGhlIGZpbGUgaGVhZGVyDQogICAgICAgICAgICBpZiAoKCR2X3Jlc3VsdCA9ICR2X3Rl bXBfemlwLT5wcml2V3JpdGVDZW50cmFsRmlsZUhlYWRlcigkdl9oZWFkZXJfbGlzdFskaV0pKSAhPSAx KSB7DQogICAgICAgICAgICAgICAgJHZfdGVtcF96aXAtPnByaXZDbG9zZUZkKCk7DQogICAgICAgICAg ICAgICAgJHRoaXMtPnByaXZDbG9zZUZkKCk7DQogICAgICAgICAgICAgICAgQHVubGluaygkdl96aXBf dGVtcF9uYW1lKTsNCg0KICAgICAgICAgICAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgICAgICAg ICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIC0tLS0t

IFRyYW5zZm9ybSB0aGUgaGVhZGVyIHRvIGEgJ3VzYWJsZScgaW5mbw0KICAgICAgICAgICAgJHZfdGVt cF96aXAtPnByaXZDb252ZXJ0SGVhZGVyMkZpbGVJbmZvKCR2X2hlYWRlcl9saXN0WyRpXSwgJHBfcmVz dWx0X2xpc3RbJGldKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgLy8gLS0tLS0gWmlwIGZpbGUgY29t bWVudA0KICAgICAgICAkdl9jb21tZW50ID0gJyc7DQogICAgICAgIGlmIChpc3NldCgkcF9vcHRpb25z W1BDTFpJUF9PUFRfQ09NTUVOVF0pKSB7DQogICAgICAgICAgJHZfY29tbWVudCA9ICRwX29wdGlvbnNb UENMWklQX09QVF9DT01NRU5UXTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIC0tLS0tIENhbGN1bGF0 ZSB0aGUgc2l6ZSBvZiB0aGUgY2VudHJhbCBoZWFkZXINCiAgICAgICAgJHZfc2l6ZSA9IEBmdGVsbCgk dl90ZW1wX3ppcC0+emlwX2ZkKS0kdl9vZmZzZXQ7DQoNCiAgICAgICAgLy8gLS0tLS0gQ3JlYXRlIHRo ZSBjZW50cmFsIGRpciBmb290ZXINCiAgICAgICAgaWYgKCgkdl9yZXN1bHQgPSAkdl90ZW1wX3ppcC0+ cHJpdldyaXRlQ2VudHJhbEhlYWRlcihzaXplb2YoJHZfaGVhZGVyX2xpc3QpLCAkdl9zaXplLCAkdl9v ZmZzZXQsICR2X2NvbW1lbnQpKSAhPSAxKSB7DQogICAgICAgICAgICAvLyAtLS0tLSBSZXNldCB0aGUg ZmlsZSBsaXN0DQogICAgICAgICAgICB1bnNldCgkdl9oZWFkZXJfbGlzdCk7DQogICAgICAgICAgICAk dl90ZW1wX3ppcC0+cHJpdkNsb3NlRmQoKTsNCiAgICAgICAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgp Ow0KICAgICAgICAgICAgQHVubGluaygkdl96aXBfdGVtcF9uYW1lKTsNCg0KICAgICAgICAgICAgLy8g LS0tLS0gUmV0dXJuDQogICAgICAgICAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICAgICAgICB9DQoNCiAg ICAgICAgLy8gLS0tLS0gQ2xvc2UNCiAgICAgICAgJHZfdGVtcF96aXAtPnByaXZDbG9zZUZkKCk7DQog ICAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgpOw0KDQogICAgICAgIC8vIC0tLS0tIERlbGV0ZSB0aGUg emlwIGZpbGUNCiAgICAgICAgLy8gVEJDIDogSSBzaG91bGQgdGVzdCB0aGUgcmVzdWx0IC4uLg0KICAg ICAgICBAdW5saW5rKCR0aGlzLT56aXBuYW1lKTsNCg0KICAgICAgICAvLyAtLS0tLSBSZW5hbWUgdGhl IHRlbXBvcmFyeSBmaWxlDQogICAgICAgIC8vIFRCQyA6IEkgc2hvdWxkIHRlc3QgdGhlIHJlc3VsdCAu Li4NCiAgICAgICAgLy9AcmVuYW1lKCR2X3ppcF90ZW1wX25hbWUsICR0aGlzLT56aXBuYW1lKTsNCiAg ICAgICAgUGNsWmlwVXRpbFJlbmFtZSgkdl96aXBfdGVtcF9uYW1lLCAkdGhpcy0+emlwbmFtZSk7DQoN CiAgICAgICAgLy8gLS0tLS0gRGVzdHJveSB0aGUgdGVtcG9yYXJ5IGFyY2hpdmUNCiAgICAgICAgdW5z ZXQoJHZfdGVtcF96aXApOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIFJlbW92ZSBldmVyeSBmaWxlcyA6 IHJlc2V0IHRoZSBmaWxlDQogICAgZWxzZSBpZiAoJHZfY2VudHJhbF9kaXJbJ2VudHJpZXMnXSAhPSAw KSB7DQogICAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgpOw0KDQogICAgICAgIGlmICgoJHZfcmVzdWx0 ID0gJHRoaXMtPnByaXZPcGVuRmQoJ3diJykpICE9IDEpIHsNCiAgICAgICAgICByZXR1cm4gJHZfcmVz dWx0Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCgkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdldyaXRl Q2VudHJhbEhlYWRlcigwLCAwLCAwLCAnJykpICE9IDEpIHsNCiAgICAgICAgICByZXR1cm4gJHZfcmVz dWx0Ow0KICAgICAgICB9DQoNCiAgICAgICAgJHRoaXMtPnByaXZDbG9zZUZkKCk7DQogICAgfQ0KDQog ICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDog cHJpdkRpckNoZWNrKCkNCiAgLy8gRGVzY3JpcHRpb24gOg0KICAvLyAgIENoZWNrIGlmIGEgZGlyZWN0 b3J5IGV4aXN0cywgaWYgbm90IGl0IGNyZWF0ZXMgaXQgYW5kIGFsbCB0aGUgcGFyZW50cyBkaXJlY3Rv cnkNCiAgLy8gICB3aGljaCBtYXkgYmUgdXNlZnVsLg0KICAvLyBQYXJhbWV0ZXJzIDoNCiAgLy8gICAk cF9kaXIgOiBEaXJlY3RvcnkgcGF0aCB0byBjaGVjay4NCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8v ICAgIDEgOiBPSw0KICAvLyAgIC0xIDogVW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkNCiAgLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gcHJpdkRpckNoZWNrKCRwX2RpciwgJHBfaXNfZGly PWZhbHNlKQ0KICB7DQogICAgJHZfcmVzdWx0ID0gMTsNCg0KDQogICAgLy8gLS0tLS0gUmVtb3ZlIHRo ZSBmaW5hbCAnLycNCiAgICBpZiAoKCRwX2lzX2RpcikgJiYgKHN1YnN0cigkcF9kaXIsIC0xKT09Jy8n KSkNCiAgICB7DQogICAgICAkcF9kaXIgPSBzdWJzdHIoJHBfZGlyLCAwLCBzdHJsZW4oJHBfZGlyKS0x KTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBDaGVjayB0aGUgZGlyZWN0b3J5IGF2YWlsYWJpbGl0eQ0K ICAgIGlmICgoaXNfZGlyKCRwX2RpcikpIHx8ICgkcF9kaXIgPT0gIiIpKQ0KICAgIHsNCiAgICAgIHJl dHVybiAxOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIEV4dHJhY3QgcGFyZW50IGRpcmVjdG9yeQ0KICAg ICRwX3BhcmVudF9kaXIgPSBkaXJuYW1lKCRwX2Rpcik7DQoNCiAgICAvLyAtLS0tLSBKdXN0IGEgY2hl Y2sNCiAgICBpZiAoJHBfcGFyZW50X2RpciAhPSAkcF9kaXIpDQogICAgew0KICAgICAgLy8gLS0tLS0g TG9vayBmb3IgcGFyZW50IGRpcmVjdG9yeQ0KICAgICAgaWYgKCRwX3BhcmVudF9kaXIgIT0gIiIpDQog ICAgICB7DQogICAgICAgIGlmICgoJHZfcmVzdWx0ID0gJHRoaXMtPnByaXZEaXJDaGVjaygkcF9wYXJl bnRfZGlyKSkgIT0gMSkNCiAgICAgICAgew0KICAgICAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAg ICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCiAgICAvLyAtLS0tLSBDcmVhdGUgdGhlIGRpcmVjdG9yeQ0K ICAgIGlmICghQG1rZGlyKCRwX2RpciwgMDc3NykpDQogICAgew0KICAgICAgLy8gLS0tLS0gRXJyb3Ig bG9nDQogICAgICBQY2xaaXA6OnByaXZFcnJvckxvZyhQQ0xaSVBfRVJSX0RJUl9DUkVBVEVfRkFJTCwg IlVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5ICckcF9kaXInIik7DQoNCiAgICAgIC8vIC0tLS0tIFJl dHVybg0KICAgICAgcmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgfQ0KDQogICAgLy8gLS0t LS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdk1lcmdl KCkNCiAgLy8gRGVzY3JpcHRpb24gOg0KICAvLyAgIElmICRwX2FyY2hpdmVfdG9fYWRkIGRvZXMgbm90 IGV4aXN0LCB0aGUgZnVuY3Rpb24gZXhpdCB3aXRoIGEgc3VjY2VzcyByZXN1bHQuDQogIC8vIFBhcmFt ZXRlcnMgOg0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAg ZnVuY3Rpb24gcHJpdk1lcmdlKCYkcF9hcmNoaXZlX3RvX2FkZCkNCiAgew0KICAgICR2X3Jlc3VsdD0x Ow0KDQogICAgLy8gLS0tLS0gTG9vayBpZiB0aGUgYXJjaGl2ZV90b19hZGQgZXhpc3RzDQogICAgaWYg KCFpc19maWxlKCRwX2FyY2hpdmVfdG9fYWRkLT56aXBuYW1lKSkNCiAgICB7DQoNCiAgICAgIC8vIC0t LS0tIE5vdGhpbmcgdG8gbWVyZ2UsIHNvIG1lcmdlIGlzIGEgc3VjY2Vzcw0KICAgICAgJHZfcmVzdWx0 ID0gMTsNCg0KICAgICAgLy8gLS0tLS0gUmV0dXJuDQogICAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICAg IH0NCg0KICAgIC8vIC0tLS0tIExvb2sgaWYgdGhlIGFyY2hpdmUgZXhpc3RzDQogICAgaWYgKCFpc19m aWxlKCR0aGlzLT56aXBuYW1lKSkNCiAgICB7DQoNCiAgICAgIC8vIC0tLS0tIERvIGEgZHVwbGljYXRl DQogICAgICAkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdkR1cGxpY2F0ZSgkcF9hcmNoaXZlX3RvX2FkZC0+ emlwbmFtZSk7DQoNCiAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsN CiAgICB9DQoNCiAgICAvLyAtLS0tLSBPcGVuIHRoZSB6aXAgZmlsZQ0KICAgIGlmICgoJHZfcmVzdWx0 PSR0aGlzLT5wcml2T3BlbkZkKCdyYicpKSAhPSAxKQ0KICAgIHsNCiAgICAgIC8vIC0tLS0tIFJldHVy bg0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBSZWFkIHRoZSBj ZW50cmFsIGRpcmVjdG9yeSBpbmZvcm1hdGlvbnMNCiAgICAkdl9jZW50cmFsX2RpciA9IGFycmF5KCk7 DQogICAgaWYgKCgkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdlJlYWRFbmRDZW50cmFsRGlyKCR2X2NlbnRy YWxfZGlyKSkgIT0gMSkNCiAgICB7DQogICAgICAkdGhpcy0+cHJpdkNsb3NlRmQoKTsNCiAgICAgIHJl dHVybiAkdl9yZXN1bHQ7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gR28gdG8gYmVnaW5uaW5nIG9mIEZp bGUNCiAgICBAcmV3aW5kKCR0aGlzLT56aXBfZmQpOw0KDQogICAgLy8gLS0tLS0gT3BlbiB0aGUgYXJj aGl2ZV90b19hZGQgZmlsZQ0KICAgIGlmICgoJHZfcmVzdWx0PSRwX2FyY2hpdmVfdG9fYWRkLT5wcml2 T3BlbkZkKCdyYicpKSAhPSAxKQ0KICAgIHsNCiAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgpOw0KDQog ICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgfQ0KDQogICAg Ly8gLS0tLS0gUmVhZCB0aGUgY2VudHJhbCBkaXJlY3RvcnkgaW5mb3JtYXRpb25zDQogICAgJHZfY2Vu dHJhbF9kaXJfdG9fYWRkID0gYXJyYXkoKTsNCiAgICBpZiAoKCR2X3Jlc3VsdCA9ICRwX2FyY2hpdmVf dG9fYWRkLT5wcml2UmVhZEVuZENlbnRyYWxEaXIoJHZfY2VudHJhbF9kaXJfdG9fYWRkKSkgIT0gMSkN CiAgICB7DQogICAgICAkdGhpcy0+cHJpdkNsb3NlRmQoKTsNCiAgICAgICRwX2FyY2hpdmVfdG9fYWRk LT5wcml2Q2xvc2VGZCgpOw0KDQogICAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICAgIH0NCg0KICAgIC8v IC0tLS0tIEdvIHRvIGJlZ2lubmluZyBvZiBGaWxlDQogICAgQHJld2luZCgkcF9hcmNoaXZlX3RvX2Fk ZC0+emlwX2ZkKTsNCg0KICAgIC8vIC0tLS0tIENyZWF0ZXMgYSB0ZW1wb3JheSBmaWxlDQogICAgJHZf emlwX3RlbXBfbmFtZSA9IFBDTFpJUF9URU1QT1JBUllfRElSLnVuaXFpZCgncGNsemlwLScpLicudG1w JzsNCg0KICAgIC8vIC0tLS0tIE9wZW4gdGhlIHRlbXBvcmFyeSBmaWxlIGluIHdyaXRlIG1vZGUNCiAg ICBpZiAoKCR2X3ppcF90ZW1wX2ZkID0gQGZvcGVuKCR2X3ppcF90ZW1wX25hbWUsICd3YicpKSA9PSAw KQ0KICAgIHsNCiAgICAgICR0aGlzLT5wcml2Q2xvc2VGZCgpOw0KICAgICAgJHBfYXJjaGl2ZV90b19h ZGQtPnByaXZDbG9zZUZkKCk7DQoNCiAgICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJf UkVBRF9PUEVOX0ZBSUwsICdVbmFibGUgdG8gb3BlbiB0ZW1wb3JhcnkgZmlsZSBcJycuJHZfemlwX3Rl bXBfbmFtZS4nXCcgaW4gYmluYXJ5IHdyaXRlIG1vZGUnKTsNCg0KICAgICAgLy8gLS0tLS0gUmV0dXJu DQogICAgICByZXR1cm4gUGNsWmlwOjplcnJvckNvZGUoKTsNCiAgICB9DQoNCiAgICAvLyAtLS0tLSBD b3B5IHRoZSBmaWxlcyBmcm9tIHRoZSBhcmNoaXZlIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZQ0KICAgIC8v IFRCQyA6IEhlcmUgSSBzaG91bGQgYmV0dGVyIGFwcGVuZCB0aGUgZmlsZSBhbmQgZ28gYmFjayB0byBl cmFzZSB0aGUgY2VudHJhbCBkaXINCiAgICAkdl9zaXplID0gJHZfY2VudHJhbF9kaXJbJ29mZnNldCdd Ow0KICAgIHdoaWxlICgkdl9zaXplICE9IDApDQogICAgew0KICAgICAgJHZfcmVhZF9zaXplID0gKCR2 X3NpemUgPCBQQ0xaSVBfUkVBRF9CTE9DS19TSVpFID8gJHZfc2l6ZSA6IFBDTFpJUF9SRUFEX0JMT0NL X1NJWkUpOw0KICAgICAgJHZfYnVmZmVyID0gZnJlYWQoJHRoaXMtPnppcF9mZCwgJHZfcmVhZF9zaXpl KTsNCiAgICAgIEBmd3JpdGUoJHZfemlwX3RlbXBfZmQsICR2X2J1ZmZlciwgJHZfcmVhZF9zaXplKTsN CiAgICAgICR2X3NpemUgLT0gJHZfcmVhZF9zaXplOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIENvcHkg dGhlIGZpbGVzIGZyb20gdGhlIGFyY2hpdmVfdG9fYWRkIGludG8gdGhlIHRlbXBvcmFyeSBmaWxlDQog ICAgJHZfc2l6ZSA9ICR2X2NlbnRyYWxfZGlyX3RvX2FkZFsnb2Zmc2V0J107DQogICAgd2hpbGUgKCR2 X3NpemUgIT0gMCkNCiAgICB7DQogICAgICAkdl9yZWFkX3NpemUgPSAoJHZfc2l6ZSA8IFBDTFpJUF9S RUFEX0JMT0NLX1NJWkUgPyAkdl9zaXplIDogUENMWklQX1JFQURfQkxPQ0tfU0laRSk7DQogICAgICAk dl9idWZmZXIgPSBmcmVhZCgkcF9hcmNoaXZlX3RvX2FkZC0+emlwX2ZkLCAkdl9yZWFkX3NpemUpOw0K ICAgICAgQGZ3cml0ZSgkdl96aXBfdGVtcF9mZCwgJHZfYnVmZmVyLCAkdl9yZWFkX3NpemUpOw0KICAg ICAgJHZfc2l6ZSAtPSAkdl9yZWFkX3NpemU7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gU3RvcmUgdGhl IG9mZnNldCBvZiB0aGUgY2VudHJhbCBkaXINCiAgICAkdl9vZmZzZXQgPSBAZnRlbGwoJHZfemlwX3Rl bXBfZmQpOw0KDQogICAgLy8gLS0tLS0gQ29weSB0aGUgYmxvY2sgb2YgZmlsZSBoZWFkZXJzIGZyb20g dGhlIG9sZCBhcmNoaXZlDQogICAgJHZfc2l6ZSA9ICR2X2NlbnRyYWxfZGlyWydzaXplJ107DQogICAg d2hpbGUgKCR2X3NpemUgIT0gMCkNCiAgICB7DQogICAgICAkdl9yZWFkX3NpemUgPSAoJHZfc2l6ZSA8 IFBDTFpJUF9SRUFEX0JMT0NLX1NJWkUgPyAkdl9zaXplIDogUENMWklQX1JFQURfQkxPQ0tfU0laRSk7

DQogICAgICAkdl9idWZmZXIgPSBAZnJlYWQoJHRoaXMtPnppcF9mZCwgJHZfcmVhZF9zaXplKTsNCiAg ICAgIEBmd3JpdGUoJHZfemlwX3RlbXBfZmQsICR2X2J1ZmZlciwgJHZfcmVhZF9zaXplKTsNCiAgICAg ICR2X3NpemUgLT0gJHZfcmVhZF9zaXplOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIENvcHkgdGhlIGJs b2NrIG9mIGZpbGUgaGVhZGVycyBmcm9tIHRoZSBhcmNoaXZlX3RvX2FkZA0KICAgICR2X3NpemUgPSAk dl9jZW50cmFsX2Rpcl90b19hZGRbJ3NpemUnXTsNCiAgICB3aGlsZSAoJHZfc2l6ZSAhPSAwKQ0KICAg IHsNCiAgICAgICR2X3JlYWRfc2l6ZSA9ICgkdl9zaXplIDwgUENMWklQX1JFQURfQkxPQ0tfU0laRSA/ ICR2X3NpemUgOiBQQ0xaSVBfUkVBRF9CTE9DS19TSVpFKTsNCiAgICAgICR2X2J1ZmZlciA9IEBmcmVh ZCgkcF9hcmNoaXZlX3RvX2FkZC0+emlwX2ZkLCAkdl9yZWFkX3NpemUpOw0KICAgICAgQGZ3cml0ZSgk dl96aXBfdGVtcF9mZCwgJHZfYnVmZmVyLCAkdl9yZWFkX3NpemUpOw0KICAgICAgJHZfc2l6ZSAtPSAk dl9yZWFkX3NpemU7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gTWVyZ2UgdGhlIGZpbGUgY29tbWVudHMN CiAgICAkdl9jb21tZW50ID0gJHZfY2VudHJhbF9kaXJbJ2NvbW1lbnQnXS4nICcuJHZfY2VudHJhbF9k aXJfdG9fYWRkWydjb21tZW50J107DQoNCiAgICAvLyAtLS0tLSBDYWxjdWxhdGUgdGhlIHNpemUgb2Yg dGhlIChuZXcpIGNlbnRyYWwgaGVhZGVyDQogICAgJHZfc2l6ZSA9IEBmdGVsbCgkdl96aXBfdGVtcF9m ZCktJHZfb2Zmc2V0Ow0KDQogICAgLy8gLS0tLS0gU3dhcCB0aGUgZmlsZSBkZXNjcmlwdG9yDQogICAg Ly8gSGVyZSBpcyBhIHRyaWNrIDogSSBzd2FwIHRoZSB0ZW1wb3JhcnkgZmQgd2l0aCB0aGUgemlwIGZk LCBpbiBvcmRlciB0byB1c2UNCiAgICAvLyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgb24gdGhlIHRlbXBv cmFyeSBmaWwgYW5kIG5vdCB0aGUgcmVhbCBhcmNoaXZlIGZkDQogICAgJHZfc3dhcCA9ICR0aGlzLT56 aXBfZmQ7DQogICAgJHRoaXMtPnppcF9mZCA9ICR2X3ppcF90ZW1wX2ZkOw0KICAgICR2X3ppcF90ZW1w X2ZkID0gJHZfc3dhcDsNCg0KICAgIC8vIC0tLS0tIENyZWF0ZSB0aGUgY2VudHJhbCBkaXIgZm9vdGVy DQogICAgaWYgKCgkdl9yZXN1bHQgPSAkdGhpcy0+cHJpdldyaXRlQ2VudHJhbEhlYWRlcigkdl9jZW50 cmFsX2RpclsnZW50cmllcyddKyR2X2NlbnRyYWxfZGlyX3RvX2FkZFsnZW50cmllcyddLCAkdl9zaXpl LCAkdl9vZmZzZXQsICR2X2NvbW1lbnQpKSAhPSAxKQ0KICAgIHsNCiAgICAgICR0aGlzLT5wcml2Q2xv c2VGZCgpOw0KICAgICAgJHBfYXJjaGl2ZV90b19hZGQtPnByaXZDbG9zZUZkKCk7DQogICAgICBAZmNs b3NlKCR2X3ppcF90ZW1wX2ZkKTsNCiAgICAgICR0aGlzLT56aXBfZmQgPSBudWxsOw0KDQogICAgICAv LyAtLS0tLSBSZXNldCB0aGUgZmlsZSBsaXN0DQogICAgICB1bnNldCgkdl9oZWFkZXJfbGlzdCk7DQoN CiAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgICB9DQoNCiAg ICAvLyAtLS0tLSBTd2FwIGJhY2sgdGhlIGZpbGUgZGVzY3JpcHRvcg0KICAgICR2X3N3YXAgPSAkdGhp cy0+emlwX2ZkOw0KICAgICR0aGlzLT56aXBfZmQgPSAkdl96aXBfdGVtcF9mZDsNCiAgICAkdl96aXBf dGVtcF9mZCA9ICR2X3N3YXA7DQoNCiAgICAvLyAtLS0tLSBDbG9zZQ0KICAgICR0aGlzLT5wcml2Q2xv c2VGZCgpOw0KICAgICRwX2FyY2hpdmVfdG9fYWRkLT5wcml2Q2xvc2VGZCgpOw0KDQogICAgLy8gLS0t LS0gQ2xvc2UgdGhlIHRlbXBvcmFyeSBmaWxlDQogICAgQGZjbG9zZSgkdl96aXBfdGVtcF9mZCk7DQoN CiAgICAvLyAtLS0tLSBEZWxldGUgdGhlIHppcCBmaWxlDQogICAgLy8gVEJDIDogSSBzaG91bGQgdGVz dCB0aGUgcmVzdWx0IC4uLg0KICAgIEB1bmxpbmsoJHRoaXMtPnppcG5hbWUpOw0KDQogICAgLy8gLS0t LS0gUmVuYW1lIHRoZSB0ZW1wb3JhcnkgZmlsZQ0KICAgIC8vIFRCQyA6IEkgc2hvdWxkIHRlc3QgdGhl IHJlc3VsdCAuLi4NCiAgICAvL0ByZW5hbWUoJHZfemlwX3RlbXBfbmFtZSwgJHRoaXMtPnppcG5hbWUp Ow0KICAgIFBjbFppcFV0aWxSZW5hbWUoJHZfemlwX3RlbXBfbmFtZSwgJHRoaXMtPnppcG5hbWUpOw0K DQogICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9u IDogcHJpdkR1cGxpY2F0ZSgpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6DQog IC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBw cml2RHVwbGljYXRlKCRwX2FyY2hpdmVfZmlsZW5hbWUpDQogIHsNCiAgICAkdl9yZXN1bHQ9MTsNCg0K ICAgIC8vIC0tLS0tIExvb2sgaWYgdGhlICRwX2FyY2hpdmVfZmlsZW5hbWUgZXhpc3RzDQogICAgaWYg KCFpc19maWxlKCRwX2FyY2hpdmVfZmlsZW5hbWUpKQ0KICAgIHsNCg0KICAgICAgLy8gLS0tLS0gTm90 aGluZyB0byBkdXBsaWNhdGUsIHNvIGR1cGxpY2F0ZSBpcyBhIHN1Y2Nlc3MuDQogICAgICAkdl9yZXN1 bHQgPSAxOw0KDQogICAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQog ICAgfQ0KDQogICAgLy8gLS0tLS0gT3BlbiB0aGUgemlwIGZpbGUNCiAgICBpZiAoKCR2X3Jlc3VsdD0k dGhpcy0+cHJpdk9wZW5GZCgnd2InKSkgIT0gMSkNCiAgICB7DQogICAgICAvLyAtLS0tLSBSZXR1cm4N CiAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gT3BlbiB0aGUgdGVt cG9yYXJ5IGZpbGUgaW4gd3JpdGUgbW9kZQ0KICAgIGlmICgoJHZfemlwX3RlbXBfZmQgPSBAZm9wZW4o JHBfYXJjaGl2ZV9maWxlbmFtZSwgJ3JiJykpID09IDApDQogICAgew0KICAgICAgJHRoaXMtPnByaXZD bG9zZUZkKCk7DQoNCiAgICAgIFBjbFppcDo6cHJpdkVycm9yTG9nKFBDTFpJUF9FUlJfUkVBRF9PUEVO X0ZBSUwsICdVbmFibGUgdG8gb3BlbiBhcmNoaXZlIGZpbGUgXCcnLiRwX2FyY2hpdmVfZmlsZW5hbWUu J1wnIGluIGJpbmFyeSB3cml0ZSBtb2RlJyk7DQoNCiAgICAgIC8vIC0tLS0tIFJldHVybg0KICAgICAg cmV0dXJuIFBjbFppcDo6ZXJyb3JDb2RlKCk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gQ29weSB0aGUg ZmlsZXMgZnJvbSB0aGUgYXJjaGl2ZSB0byB0aGUgdGVtcG9yYXJ5IGZpbGUNCiAgICAvLyBUQkMgOiBI ZXJlIEkgc2hvdWxkIGJldHRlciBhcHBlbmQgdGhlIGZpbGUgYW5kIGdvIGJhY2sgdG8gZXJhc2UgdGhl IGNlbnRyYWwgZGlyDQogICAgJHZfc2l6ZSA9IGZpbGVzaXplKCRwX2FyY2hpdmVfZmlsZW5hbWUpOw0K

ICAgIHdoaWxlICgkdl9zaXplICE9IDApDQogICAgew0KICAgICAgJHZfcmVhZF9zaXplID0gKCR2X3Np emUgPCBQQ0xaSVBfUkVBRF9CTE9DS19TSVpFID8gJHZfc2l6ZSA6IFBDTFpJUF9SRUFEX0JMT0NLX1NJ WkUpOw0KICAgICAgJHZfYnVmZmVyID0gZnJlYWQoJHZfemlwX3RlbXBfZmQsICR2X3JlYWRfc2l6ZSk7 DQogICAgICBAZndyaXRlKCR0aGlzLT56aXBfZmQsICR2X2J1ZmZlciwgJHZfcmVhZF9zaXplKTsNCiAg ICAgICR2X3NpemUgLT0gJHZfcmVhZF9zaXplOw0KICAgIH0NCg0KICAgIC8vIC0tLS0tIENsb3NlDQog ICAgJHRoaXMtPnByaXZDbG9zZUZkKCk7DQoNCiAgICAvLyAtLS0tLSBDbG9zZSB0aGUgdGVtcG9yYXJ5 IGZpbGUNCiAgICBAZmNsb3NlKCR2X3ppcF90ZW1wX2ZkKTsNCg0KICAgIC8vIC0tLS0tIFJldHVybg0K ICAgIHJldHVybiAkdl9yZXN1bHQ7DQogIH0NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAv LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAvLyBGdW5jdGlvbiA6IHByaXZFcnJvckxvZygpDQogIC8v IERlc2NyaXB0aW9uIDoNCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQogIGZ1bmN0aW9uIHByaXZFcnJvckxvZygkcF9lcnJvcl9jb2RlPTAsICRwX2Vycm9yX3N0cmluZz0n JykNCiAgew0KICAgIGlmIChQQ0xaSVBfRVJST1JfRVhURVJOQUwgPT0gMSkgew0KICAgICAgUGNsRXJy b3IoJHBfZXJyb3JfY29kZSwgJHBfZXJyb3Jfc3RyaW5nKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAg ICAkdGhpcy0+ZXJyb3JfY29kZSA9ICRwX2Vycm9yX2NvZGU7DQogICAgICAkdGhpcy0+ZXJyb3Jfc3Ry aW5nID0gJHBfZXJyb3Jfc3RyaW5nOw0KICAgIH0NCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogcHJpdkVycm9yUmVz ZXQoKQ0KICAvLyBEZXNjcmlwdGlvbiA6DQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBwcml2RXJyb3JSZXNldCgpDQogIHsNCiAgICBpZiAoUENMWklQ X0VSUk9SX0VYVEVSTkFMID09IDEpIHsNCiAgICAgIFBjbEVycm9yUmVzZXQoKTsNCiAgICB9DQogICAg ZWxzZSB7DQogICAgICAkdGhpcy0+ZXJyb3JfY29kZSA9IDA7DQogICAgICAkdGhpcy0+ZXJyb3Jfc3Ry aW5nID0gJyc7DQogICAgfQ0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBwcml2RGlzYWJsZU1hZ2ljUXVvdGVzKCkN CiAgLy8gRGVzY3JpcHRpb24gOg0KICAvLyBQYXJhbWV0ZXJzIDoNCiAgLy8gUmV0dXJuIFZhbHVlcyA6 DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIGZ1bmN0aW9uIHByaXZEaXNhYmxlTWFnaWNRdW90 ZXMoKQ0KICB7DQogICAgJHZfcmVzdWx0PTE7DQoNCiAgICAvLyAtLS0tLSBMb29rIGlmIGZ1bmN0aW9u IGV4aXN0cw0KICAgIGlmICggICAoIWZ1bmN0aW9uX2V4aXN0cygiZ2V0X21hZ2ljX3F1b3Rlc19ydW50 aW1lIikpDQoJICAgIHx8ICghZnVuY3Rpb25fZXhpc3RzKCJzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUi KSkpIHsNCiAgICAgIHJldHVybiAkdl9yZXN1bHQ7DQoJfQ0KDQogICAgLy8gLS0tLS0gTG9vayBpZiBh bHJlYWR5IGRvbmUNCiAgICBpZiAoJHRoaXMtPm1hZ2ljX3F1b3Rlc19zdGF0dXMgIT0gLTEpIHsNCiAg ICAgIHJldHVybiAkdl9yZXN1bHQ7DQoJfQ0KDQoJLy8gLS0tLS0gR2V0IGFuZCBtZW1vcml6ZSB0aGUg bWFnaWNfcXVvdGUgdmFsdWUNCgkkdGhpcy0+bWFnaWNfcXVvdGVzX3N0YXR1cyA9IEBnZXRfbWFnaWNf cXVvdGVzX3J1bnRpbWUoKTsNCg0KCS8vIC0tLS0tIERpc2FibGUgbWFnaWNfcXVvdGVzDQoJaWYgKCR0 aGlzLT5tYWdpY19xdW90ZXNfc3RhdHVzID09IDEpIHsNCgkgIEBzZXRfbWFnaWNfcXVvdGVzX3J1bnRp bWUoMCk7DQoJfQ0KDQogICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAg fQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQog IC8vIEZ1bmN0aW9uIDogcHJpdlN3YXBCYWNrTWFnaWNRdW90ZXMoKQ0KICAvLyBEZXNjcmlwdGlvbiA6 DQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAgLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCiAgZnVuY3Rpb24gcHJpdlN3YXBCYWNrTWFnaWNRdW90ZXMoKQ0KICB7DQogICAgJHZf cmVzdWx0PTE7DQoNCiAgICAvLyAtLS0tLSBMb29rIGlmIGZ1bmN0aW9uIGV4aXN0cw0KICAgIGlmICgg ICAoIWZ1bmN0aW9uX2V4aXN0cygiZ2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lIikpDQoJICAgIHx8ICgh ZnVuY3Rpb25fZXhpc3RzKCJzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUiKSkpIHsNCiAgICAgIHJldHVy biAkdl9yZXN1bHQ7DQoJfQ0KDQogICAgLy8gLS0tLS0gTG9vayBpZiBzb21ldGhpbmcgdG8gZG8NCiAg ICBpZiAoJHRoaXMtPm1hZ2ljX3F1b3Rlc19zdGF0dXMgIT0gLTEpIHsNCiAgICAgIHJldHVybiAkdl9y ZXN1bHQ7DQoJfQ0KDQoJLy8gLS0tLS0gU3dhcCBiYWNrIG1hZ2ljX3F1b3Rlcw0KCWlmICgkdGhpcy0+ bWFnaWNfcXVvdGVzX3N0YXR1cyA9PSAxKSB7DQogIAkgIEBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUo JHRoaXMtPm1hZ2ljX3F1b3Rlc19zdGF0dXMpOw0KCX0NCg0KICAgIC8vIC0tLS0tIFJldHVybg0KICAg IHJldHVybiAkdl9yZXN1bHQ7DQogIH0NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICB9DQog

IC8vIEVuZCBvZiBjbGFzcw0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogUGNsWmlwVXRpbFBhdGhSZWR1Y3Rpb24oKQ0KICAv LyBEZXNjcmlwdGlvbiA6DQogIC8vIFBhcmFtZXRlcnMgOg0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAg Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gUGNsWmlwVXRpbFBhdGhSZWR1Y3Rpb24o JHBfZGlyKQ0KICB7DQogICAgJHZfcmVzdWx0ID0gIiI7DQoNCiAgICAvLyAtLS0tLSBMb29rIGZvciBu b3QgZW1wdHkgcGF0aA0KICAgIGlmICgkcF9kaXIgIT0gIiIpIHsNCiAgICAgIC8vIC0tLS0tIEV4cGxv ZGUgcGF0aCBieSBkaXJlY3RvcnkgbmFtZXMNCiAgICAgICR2X2xpc3QgPSBleHBsb2RlKCIvIiwgJHBf ZGlyKTsNCg0KICAgICAgLy8gLS0tLS0gU3R1ZHkgZGlyZWN0b3JpZXMgZnJvbSBsYXN0IHRvIGZpcnN0 DQogICAgICAkdl9za2lwID0gMDsNCiAgICAgIGZvciAoJGk9c2l6ZW9mKCR2X2xpc3QpLTE7ICRpPj0w OyAkaS0tKSB7DQogICAgICAgIC8vIC0tLS0tIExvb2sgZm9yIGN1cnJlbnQgcGF0aA0KICAgICAgICBp ZiAoJHZfbGlzdFskaV0gPT0gIi4iKSB7DQogICAgICAgICAgLy8gLS0tLS0gSWdub3JlIHRoaXMgZGly ZWN0b3J5DQogICAgICAgICAgLy8gU2hvdWxkIGJlIHRoZSBmaXJzdCAkaT0wLCBidXQgbm8gY2hlY2sg aXMgZG9uZQ0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKCR2X2xpc3RbJGldID09ICIuLiIpIHsN CgkJICAkdl9za2lwKys7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoJHZfbGlzdFskaV0gPT0g IiIpIHsNCgkJICAvLyAtLS0tLSBGaXJzdCAnLycgaS5lLiByb290IHNsYXNoDQoJCSAgaWYgKCRpID09 IDApIHsNCiAgICAgICAgICAgICR2X3Jlc3VsdCA9ICIvIi4kdl9yZXN1bHQ7DQoJCSAgICBpZiAoJHZf c2tpcCA+IDApIHsNCgkJICAgICAgICAvLyAtLS0tLSBJdCBpcyBhbiBpbnZhbGlkIHBhdGgsIHNvIHRo ZSBwYXRoIGlzIG5vdCBtb2RpZmllZA0KCQkgICAgICAgIC8vIFRCQw0KCQkgICAgICAgICR2X3Jlc3Vs dCA9ICRwX2RpcjsNCiAgICAgICAgICAgICAgICAkdl9za2lwID0gMDsNCgkJICAgIH0NCgkJICB9DQoJ CSAgLy8gLS0tLS0gTGFzdCAnLycgaS5lLiBpbmRpY2F0ZXMgYSBkaXJlY3RvcnkNCgkJICBlbHNlIGlm ICgkaSA9PSAoc2l6ZW9mKCR2X2xpc3QpLTEpKSB7DQogICAgICAgICAgICAkdl9yZXN1bHQgPSAkdl9s aXN0WyRpXTsNCgkJICB9DQoJCSAgLy8gLS0tLS0gRG91YmxlICcvJyBpbnNpZGUgdGhlIHBhdGgNCgkJ ICBlbHNlIHsNCiAgICAgICAgICAgIC8vIC0tLS0tIElnbm9yZSBvbmx5IHRoZSBkb3VibGUgJy8vJyBp biBwYXRoLA0KICAgICAgICAgICAgLy8gYnV0IG5vdCB0aGUgZmlyc3QgYW5kIGxhc3QgJy8nDQoJCSAg fQ0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KCQkgIC8vIC0tLS0tIExvb2sgZm9yIGl0ZW0gdG8g c2tpcA0KCQkgIGlmICgkdl9za2lwID4gMCkgew0KCQkgICAgJHZfc2tpcC0tOw0KCQkgIH0NCgkJICBl bHNlIHsNCiAgICAgICAgICAgICR2X3Jlc3VsdCA9ICR2X2xpc3RbJGldLigkaSE9KHNpemVvZigkdl9s aXN0KS0xKT8iLyIuJHZfcmVzdWx0OiIiKTsNCgkJICB9DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAg ICAgLy8gLS0tLS0gTG9vayBmb3Igc2tpcA0KICAgICAgaWYgKCR2X3NraXAgPiAwKSB7DQogICAgICAg IHdoaWxlICgkdl9za2lwID4gMCkgew0KICAgICAgICAgICAgJHZfcmVzdWx0ID0gJy4uLycuJHZfcmVz dWx0Ow0KICAgICAgICAgICAgJHZfc2tpcC0tOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KDQog ICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJuICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDog UGNsWmlwVXRpbFBhdGhJbmNsdXNpb24oKQ0KICAvLyBEZXNjcmlwdGlvbiA6DQogIC8vICAgVGhpcyBm dW5jdGlvbiBpbmRpY2F0ZXMgaWYgdGhlIHBhdGggJHBfcGF0aCBpcyB1bmRlciB0aGUgJHBfZGlyIHRy ZWUuIE9yLA0KICAvLyAgIHNhaWQgaW4gYW4gb3RoZXIgd2F5LCBpZiB0aGUgZmlsZSBvciBzdWItZGly ICRwX3BhdGggaXMgaW5zaWRlIHRoZSBkaXINCiAgLy8gICAkcF9kaXIuDQogIC8vICAgVGhlIGZ1bmN0 aW9uIGluZGljYXRlcyBhbHNvIGlmIHRoZSBwYXRoIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIGRp ci4NCiAgLy8gICBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHBhdGggd2l0aCBkdXBsaWNhdGVkICcvJyBs aWtlICcvLycsIGJ1dCBkb2VzIG5vdA0KICAvLyAgIHN1cHBvcnQgJy4nIG9yICcuLicgc3RhdGVtZW50 cy4NCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAgIDAgaWYgJHBf cGF0aCBpcyBub3QgaW5zaWRlIGRpcmVjdG9yeSAkcF9kaXINCiAgLy8gICAxIGlmICRwX3BhdGggaXMg aW5zaWRlIGRpcmVjdG9yeSAkcF9kaXINCiAgLy8gICAyIGlmICRwX3BhdGggaXMgZXhhY3RseSB0aGUg c2FtZSBhcyAkcF9kaXINCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gUGNsWmlw VXRpbFBhdGhJbmNsdXNpb24oJHBfZGlyLCAkcF9wYXRoKQ0KICB7DQogICAgJHZfcmVzdWx0ID0gMTsN Cg0KICAgIC8vIC0tLS0tIExvb2sgZm9yIHBhdGggYmVnaW5uaW5nIGJ5IC4vDQogICAgaWYgKCAgICgk cF9kaXIgPT0gJy4nKQ0KICAgICAgICB8fCAoKHN0cmxlbigkcF9kaXIpID49MikgJiYgKHN1YnN0cigk cF9kaXIsIDAsIDIpID09ICcuLycpKSkgew0KICAgICAgJHBfZGlyID0gUGNsWmlwVXRpbFRyYW5zbGF0 ZVdpblBhdGgoZ2V0Y3dkKCksIEZBTFNFKS4nLycuc3Vic3RyKCRwX2RpciwgMSk7DQogICAgfQ0KICAg IGlmICggICAoJHBfcGF0aCA9PSAnLicpDQogICAgICAgIHx8ICgoc3RybGVuKCRwX3BhdGgpID49Mikg JiYgKHN1YnN0cigkcF9wYXRoLCAwLCAyKSA9PSAnLi8nKSkpIHsNCiAgICAgICRwX3BhdGggPSBQY2xa aXBVdGlsVHJhbnNsYXRlV2luUGF0aChnZXRjd2QoKSwgRkFMU0UpLicvJy5zdWJzdHIoJHBfcGF0aCwg MSk7DQogICAgfQ0KDQogICAgLy8gLS0tLS0gRXhwbG9kZSBkaXIgYW5kIHBhdGggYnkgZGlyZWN0b3J5 IHNlcGFyYXRvcg0KICAgICR2X2xpc3RfZGlyID0gZXhwbG9kZSgiLyIsICRwX2Rpcik7DQogICAgJHZf

bGlzdF9kaXJfc2l6ZSA9IHNpemVvZigkdl9saXN0X2Rpcik7DQogICAgJHZfbGlzdF9wYXRoID0gZXhw bG9kZSgiLyIsICRwX3BhdGgpOw0KICAgICR2X2xpc3RfcGF0aF9zaXplID0gc2l6ZW9mKCR2X2xpc3Rf cGF0aCk7DQoNCiAgICAvLyAtLS0tLSBTdHVkeSBkaXJlY3RvcmllcyBwYXRocw0KICAgICRpID0gMDsN CiAgICAkaiA9IDA7DQogICAgd2hpbGUgKCgkaSA8ICR2X2xpc3RfZGlyX3NpemUpICYmICgkaiA8ICR2 X2xpc3RfcGF0aF9zaXplKSAmJiAoJHZfcmVzdWx0KSkgew0KDQogICAgICAvLyAtLS0tLSBMb29rIGZv ciBlbXB0eSBkaXIgKHBhdGggcmVkdWN0aW9uKQ0KICAgICAgaWYgKCR2X2xpc3RfZGlyWyRpXSA9PSAn Jykgew0KICAgICAgICAkaSsrOw0KICAgICAgICBjb250aW51ZTsNCiAgICAgIH0NCiAgICAgIGlmICgk dl9saXN0X3BhdGhbJGpdID09ICcnKSB7DQogICAgICAgICRqKys7DQogICAgICAgIGNvbnRpbnVlOw0K ICAgICAgfQ0KDQogICAgICAvLyAtLS0tLSBDb21wYXJlIHRoZSBpdGVtcw0KICAgICAgaWYgKCgkdl9s aXN0X2RpclskaV0gIT0gJHZfbGlzdF9wYXRoWyRqXSkgJiYgKCR2X2xpc3RfZGlyWyRpXSAhPSAnJykg JiYgKCAkdl9saXN0X3BhdGhbJGpdICE9ICcnKSkgIHsNCiAgICAgICAgJHZfcmVzdWx0ID0gMDsNCiAg ICAgIH0NCg0KICAgICAgLy8gLS0tLS0gTmV4dCBpdGVtcw0KICAgICAgJGkrKzsNCiAgICAgICRqKys7 DQogICAgfQ0KDQogICAgLy8gLS0tLS0gTG9vayBpZiBldmVyeXRoaW5nIHNlZW1zIHRvIGJlIHRoZSBz YW1lDQogICAgaWYgKCR2X3Jlc3VsdCkgew0KICAgICAgLy8gLS0tLS0gU2tpcCBhbGwgdGhlIGVtcHR5 IGl0ZW1zDQogICAgICB3aGlsZSAoKCRqIDwgJHZfbGlzdF9wYXRoX3NpemUpICYmICgkdl9saXN0X3Bh dGhbJGpdID09ICcnKSkgJGorKzsNCiAgICAgIHdoaWxlICgoJGkgPCAkdl9saXN0X2Rpcl9zaXplKSAm JiAoJHZfbGlzdF9kaXJbJGldID09ICcnKSkgJGkrKzsNCg0KICAgICAgaWYgKCgkaSA+PSAkdl9saXN0 X2Rpcl9zaXplKSAmJiAoJGogPj0gJHZfbGlzdF9wYXRoX3NpemUpKSB7DQogICAgICAgIC8vIC0tLS0t IFRoZXJlIGFyZSBleGFjdGx5IHRoZSBzYW1lDQogICAgICAgICR2X3Jlc3VsdCA9IDI7DQogICAgICB9 DQogICAgICBlbHNlIGlmICgkaSA8ICR2X2xpc3RfZGlyX3NpemUpIHsNCiAgICAgICAgLy8gLS0tLS0g VGhlIHBhdGggaXMgc2hvcnRlciB0aGFuIHRoZSBkaXINCiAgICAgICAgJHZfcmVzdWx0ID0gMDsNCiAg ICAgIH0NCiAgICB9DQoNCiAgICAvLyAtLS0tLSBSZXR1cm4NCiAgICByZXR1cm4gJHZfcmVzdWx0Ow0K ICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CiAgLy8gRnVuY3Rpb24gOiBQY2xaaXBVdGlsQ29weUJsb2NrKCkNCiAgLy8gRGVzY3JpcHRpb24gOg0K ICAvLyBQYXJhbWV0ZXJzIDoNCiAgLy8gICAkcF9tb2RlIDogcmVhZC93cml0ZSBjb21wcmVzc2lvbiBt b2RlDQogIC8vICAgICAgICAgICAgIDAgOiBzcmMgJiBkZXN0IG5vcm1hbA0KICAvLyAgICAgICAgICAg ICAxIDogc3JjIGd6aXAsIGRlc3Qgbm9ybWFsDQogIC8vICAgICAgICAgICAgIDIgOiBzcmMgbm9ybWFs LCBkZXN0IGd6aXANCiAgLy8gICAgICAgICAgICAgMyA6IHNyYyAmIGRlc3QgZ3ppcA0KICAvLyBSZXR1 cm4gVmFsdWVzIDoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rpb24gUGNsWmlwVXRp bENvcHlCbG9jaygkcF9zcmMsICRwX2Rlc3QsICRwX3NpemUsICRwX21vZGU9MCkNCiAgew0KICAgICR2 X3Jlc3VsdCA9IDE7DQoNCiAgICBpZiAoJHBfbW9kZT09MCkNCiAgICB7DQogICAgICB3aGlsZSAoJHBf c2l6ZSAhPSAwKQ0KICAgICAgew0KICAgICAgICAkdl9yZWFkX3NpemUgPSAoJHBfc2l6ZSA8IFBDTFpJ UF9SRUFEX0JMT0NLX1NJWkUgPyAkcF9zaXplIDogUENMWklQX1JFQURfQkxPQ0tfU0laRSk7DQogICAg ICAgICR2X2J1ZmZlciA9IEBmcmVhZCgkcF9zcmMsICR2X3JlYWRfc2l6ZSk7DQogICAgICAgIEBmd3Jp dGUoJHBfZGVzdCwgJHZfYnVmZmVyLCAkdl9yZWFkX3NpemUpOw0KICAgICAgICAkcF9zaXplIC09ICR2 X3JlYWRfc2l6ZTsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSBpZiAoJHBfbW9kZT09MSkNCiAgICB7 DQogICAgICB3aGlsZSAoJHBfc2l6ZSAhPSAwKQ0KICAgICAgew0KICAgICAgICAkdl9yZWFkX3NpemUg PSAoJHBfc2l6ZSA8IFBDTFpJUF9SRUFEX0JMT0NLX1NJWkUgPyAkcF9zaXplIDogUENMWklQX1JFQURf QkxPQ0tfU0laRSk7DQogICAgICAgICR2X2J1ZmZlciA9IEBnenJlYWQoJHBfc3JjLCAkdl9yZWFkX3Np emUpOw0KICAgICAgICBAZndyaXRlKCRwX2Rlc3QsICR2X2J1ZmZlciwgJHZfcmVhZF9zaXplKTsNCiAg ICAgICAgJHBfc2l6ZSAtPSAkdl9yZWFkX3NpemU7DQogICAgICB9DQogICAgfQ0KICAgIGVsc2UgaWYg KCRwX21vZGU9PTIpDQogICAgew0KICAgICAgd2hpbGUgKCRwX3NpemUgIT0gMCkNCiAgICAgIHsNCiAg ICAgICAgJHZfcmVhZF9zaXplID0gKCRwX3NpemUgPCBQQ0xaSVBfUkVBRF9CTE9DS19TSVpFID8gJHBf c2l6ZSA6IFBDTFpJUF9SRUFEX0JMT0NLX1NJWkUpOw0KICAgICAgICAkdl9idWZmZXIgPSBAZnJlYWQo JHBfc3JjLCAkdl9yZWFkX3NpemUpOw0KICAgICAgICBAZ3p3cml0ZSgkcF9kZXN0LCAkdl9idWZmZXIs ICR2X3JlYWRfc2l6ZSk7DQogICAgICAgICRwX3NpemUgLT0gJHZfcmVhZF9zaXplOw0KICAgICAgfQ0K ICAgIH0NCiAgICBlbHNlIGlmICgkcF9tb2RlPT0zKQ0KICAgIHsNCiAgICAgIHdoaWxlICgkcF9zaXpl ICE9IDApDQogICAgICB7DQogICAgICAgICR2X3JlYWRfc2l6ZSA9ICgkcF9zaXplIDwgUENMWklQX1JF QURfQkxPQ0tfU0laRSA/ICRwX3NpemUgOiBQQ0xaSVBfUkVBRF9CTE9DS19TSVpFKTsNCiAgICAgICAg JHZfYnVmZmVyID0gQGd6cmVhZCgkcF9zcmMsICR2X3JlYWRfc2l6ZSk7DQogICAgICAgIEBnendyaXRl KCRwX2Rlc3QsICR2X2J1ZmZlciwgJHZfcmVhZF9zaXplKTsNCiAgICAgICAgJHBfc2l6ZSAtPSAkdl9y ZWFkX3NpemU7DQogICAgICB9DQogICAgfQ0KDQogICAgLy8gLS0tLS0gUmV0dXJuDQogICAgcmV0dXJu ICR2X3Jlc3VsdDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogIC8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQogIC8vIEZ1bmN0aW9uIDogUGNsWmlwVXRpbFJlbmFtZSgpDQogIC8vIERlc2Ny aXB0aW9uIDoNCiAgLy8gICBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGRvIGEgc2ltcGxlIHJlbmFtZSgp

IGZ1bmN0aW9uLiBJZiBpdCBmYWlscywgaXQNCiAgLy8gICB0cmllcyB0byBjb3B5IHRoZSAkcF9zcmMg ZmlsZSBpbiBhIG5ldyAkcF9kZXN0IGZpbGUgYW5kIHRoZW4gdW5saW5rIHRoZQ0KICAvLyAgIGZpcnN0 IG9uZS4NCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vICAgJHBfc3JjIDogT2xkIGZpbGVuYW1lDQogIC8v ICAgJHBfZGVzdCA6IE5ldyBmaWxlbmFtZQ0KICAvLyBSZXR1cm4gVmFsdWVzIDoNCiAgLy8gICAxIG9u IHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4NCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgZnVuY3Rp b24gUGNsWmlwVXRpbFJlbmFtZSgkcF9zcmMsICRwX2Rlc3QpDQogIHsNCiAgICAkdl9yZXN1bHQgPSAx Ow0KDQogICAgLy8gLS0tLS0gVHJ5IHRvIHJlbmFtZSB0aGUgZmlsZXMNCiAgICBpZiAoIUByZW5hbWUo JHBfc3JjLCAkcF9kZXN0KSkgew0KDQogICAgICAvLyAtLS0tLSBUcnkgdG8gY29weSAmIHVubGluayB0 aGUgc3JjDQogICAgICBpZiAoIUBjb3B5KCRwX3NyYywgJHBfZGVzdCkpIHsNCiAgICAgICAgJHZfcmVz dWx0ID0gMDsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYgKCFAdW5saW5rKCRwX3NyYykpIHsNCiAgICAg ICAgJHZfcmVzdWx0ID0gMDsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAvLyAtLS0tLSBSZXR1cm4NCiAg ICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBQY2xaaXBVdGlsT3B0aW9uVGV4dCgp DQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gICBUcmFuc2xhdGUgb3B0aW9uIHZhbHVlIGluIHRleHQu IE1haW5seSBmb3IgZGVidWcgcHVycG9zZS4NCiAgLy8gUGFyYW1ldGVycyA6DQogIC8vICAgJHBfb3B0 aW9uIDogdGhlIG9wdGlvbiB2YWx1ZS4NCiAgLy8gUmV0dXJuIFZhbHVlcyA6DQogIC8vICAgVGhlIG9w dGlvbiB0ZXh0IHZhbHVlLg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBmdW5jdGlvbiBQY2xa aXBVdGlsT3B0aW9uVGV4dCgkcF9vcHRpb24pDQogIHsNCg0KICAgICR2X2xpc3QgPSBnZXRfZGVmaW5l ZF9jb25zdGFudHMoKTsNCiAgICBmb3IgKHJlc2V0KCR2X2xpc3QpOyAkdl9rZXkgPSBrZXkoJHZfbGlz dCk7IG5leHQoJHZfbGlzdCkpIHsNCgkgICAgJHZfcHJlZml4ID0gc3Vic3RyKCR2X2tleSwgMCwgMTAp Ow0KCSAgICBpZiAoKCAgICgkdl9wcmVmaXggPT0gJ1BDTFpJUF9PUFQnKQ0KICAgICAgICAgICB8fCAo JHZfcHJlZml4ID09ICdQQ0xaSVBfQ0JfJykNCiAgICAgICAgICAgfHwgKCR2X3ByZWZpeCA9PSAnUENM WklQX0FUVCcpKQ0KCSAgICAgICAgJiYgKCR2X2xpc3RbJHZfa2V5XSA9PSAkcF9vcHRpb24pKSB7DQog ICAgICAgIHJldHVybiAkdl9rZXk7DQoJICAgIH0NCiAgICB9DQoNCiAgICAkdl9yZXN1bHQgPSAnVW5r bm93bic7DQoNCiAgICByZXR1cm4gJHZfcmVzdWx0Ow0KICB9DQogIC8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgLy8gRnVuY3Rpb24gOiBQY2xaaXBVdGls VHJhbnNsYXRlV2luUGF0aCgpDQogIC8vIERlc2NyaXB0aW9uIDoNCiAgLy8gICBUcmFuc2xhdGUgd2lu ZG93cyBwYXRoIGJ5IHJlcGxhY2luZyAnXCcgYnkgJy8nIGFuZCBvcHRpb25hbGx5IHJlbW92aW5nDQog IC8vICAgZHJpdmUgbGV0dGVyLg0KICAvLyBQYXJhbWV0ZXJzIDoNCiAgLy8gICAkcF9wYXRoIDogcGF0 aCB0byB0cmFuc2xhdGUuDQogIC8vICAgJHBfcmVtb3ZlX2Rpc2tfbGV0dGVyIDogdHJ1ZSB8IGZhbHNl DQogIC8vIFJldHVybiBWYWx1ZXMgOg0KICAvLyAgIFRoZSBwYXRoIHRyYW5zbGF0ZWQuDQogIC8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQogIGZ1bmN0aW9uIFBjbFppcFV0aWxUcmFuc2xhdGVXaW5QYXRoKCRw X3BhdGgsICRwX3JlbW92ZV9kaXNrX2xldHRlcj10cnVlKQ0KICB7DQogICAgaWYgKHN0cmlzdHIocGhw X3VuYW1lKCksICd3aW5kb3dzJykpIHsNCiAgICAgIC8vIC0tLS0tIExvb2sgZm9yIHBvdGVudGlhbCBk aXNrIGxldHRlcg0KICAgICAgaWYgKCgkcF9yZW1vdmVfZGlza19sZXR0ZXIpICYmICgoJHZfcG9zaXRp b24gPSBzdHJwb3MoJHBfcGF0aCwgJzonKSkgIT0gZmFsc2UpKSB7DQogICAgICAgICAgJHBfcGF0aCA9 IHN1YnN0cigkcF9wYXRoLCAkdl9wb3NpdGlvbisxKTsNCiAgICAgIH0NCiAgICAgIC8vIC0tLS0tIENo YW5nZSBwb3RlbnRpYWwgd2luZG93cyBkaXJlY3Rvcnkgc2VwYXJhdG9yDQogICAgICBpZiAoKHN0cnBv cygkcF9wYXRoLCAnXFwnKSA+IDApIHx8IChzdWJzdHIoJHBfcGF0aCwgMCwxKSA9PSAnXFwnKSkgew0K ICAgICAgICAgICRwX3BhdGggPSBzdHJ0cigkcF9wYXRoLCAnXFwnLCAnLycpOw0KICAgICAgfQ0KICAg IH0NCiAgICByZXR1cm4gJHBfcGF0aDsNCiAgfQ0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoN Cj8+DQo= ###PACKDATA,FILE_END,/importbuddy/lib/pclzip/pclzip.php,importbuddy/lib/pclzip/p clzip.php ###PACKDATA,FILE_START,/images/working.gif,importbuddy/images/working.gif R0lGODlhKwALAPEAAPn5+SiKt5LC2CiKtyH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGgg YWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAKwALAAACMoSOCMuW2diD88UKG95W88uF4DaGWFmhZid9 3pq+pwxnLUnXh8ou+sSz+T64oCAyTBUAACH5BAkKAAAALAAAAAArAAsAAAI9xI4IyyAPYWOxmoTHrHzz mGHe94xkmJifyqFKQ0pwLLgHa82xrekkDrIBZRQab1jyfY7KTtPimixiUsevAAAh+QQJCgAAACwAAAAA KwALAAACPYSOCMswD2FjqZpqW9xv4g8KE7d54XmMpNSgqLoOpgvC60xjNonnyc7p+VKamKw1zDCMR8rp 8pksYlKorgAAIfkECQoAAAAsAAAAACsACwAAAkCEjgjLltnYmJS6Bxt+sfq5ZUyoNJ9HHlEqdCfFrqn7 DrE2m7Wdj/2y45FkQ13t5itKdshFExC8YCLOEBX6AhQAADsAAAAAAAAAAAA=

###PACKDATA,FILE_END,/images/working.gif,importbuddy/images/working.gif ###PACKDATA,FILE_START,/lib/dbreplace/dbreplace.php,importbuddy/lib/dbreplace/db replace.php PD9waHANCi8qKg0KICoJcGx1Z2luYnVkZHlfZGJyZXBsYWNlIENsYXNzDQogKg0KICoJSGFuZGxlcyBy ZXBsYWNlbWVudCBvZiBkYXRhIGluIGEgdGFibGUvZGF0YWJhc2UsIHRleHQgb3Igc2VyaWFsaXplZC4g QSBkYXRhYmFzZSBjb25uZWN0aW9uIHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaW5zdGFudGlh dGlvbi4NCiAqCQ0KICoJVmVyc2lvbjogMS4wLjANCiAqCUF1dGhvcjogRHVzdGluIEJvbHRvbg0KICoJ QXV0aG9yIFVSSTogaHR0cDovL2R1c3RpbmJvbHRvbi5jb20vDQogKg0KICoJQHBhcmFtCQkkc3RhdHVz X2NhbGxiYWNrCQlvYmplY3QJCU9wdGlvbmFsIG9iamVjdCBjb250YWluaW5nIHRoZSBzdGF0dXMoKSBm dW5jdGlvbiBmb3IgcmVwb3J0aW5nIGJhY2sgaW5mb3JtYXRpb24uDQogKglAcmV0dXJuCQludWxsDQog Kg0KICovDQppZiAoIWNsYXNzX2V4aXN0cygicGx1Z2luYnVkZHlfZGJyZXBsYWNlIikpIHsNCgljbGFz cyBwbHVnaW5idWRkeV9kYnJlcGxhY2Ugew0KCQl2YXIgJF92ZXJzaW9uID0gJzEuMCc7DQoJCQ0KCQkN CgkJLyoqDQoJCSAqCV9fY29uc3RydWN0KCkNCgkJICoJDQoJCSAqCURlZmF1bHQgY29uc3RydWN0b3Iu IFNldHMgdXAgb3B0aW9uYWwgc3RhdHVzKCkgZnVuY3Rpb24gY2xhc3MgaWYgYXBwbGljYWJsZS4NCgkJ ICoJDQoJCSAqCUBwYXJhbQkJcmVmZXJlbmNlCSYkc3RhdHVzX2NhbGxiYWNrCQlbb3B0aW9uYWxdIFJl ZmVyZW5jZSB0byB0aGUgY2xhc3MgY29udGFpbmluZyB0aGUgc3RhdHVzKCkgZnVuY3Rpb24gZm9yIHN0 YXR1cyB1cGRhdGVzLg0KCQkgKglAcmV0dXJuCQludWxsDQoJCSAqDQoJCSAqLw0KCQlmdW5jdGlvbiBf X2NvbnN0cnVjdCggJiRzdGF0dXNfY2FsbGJhY2sgPSAnJyApIHsNCgkJCSR0aGlzLT5zdGF0dXNfY2Fs bGJhY2sgPSAmJHN0YXR1c19jYWxsYmFjazsNCgkJfQ0KCQkNCgkJDQoJCS8qKg0KCQkgKglzdGF0dXMo KQ0KCQkgKgkNCgkJICoJUGFzcyBzdGF0dXMgYmFjayB0byBjYWxsYmFjayBjbGFzcy4gSWYgdGhlcmUg aXMgbm8gY2FsbGJhY2sgdGhlbiB0aGlzIHRoaXMgaXMgaWdub3JlZC4NCgkJICoJDQoJCSAqCUBwYXJh bQkJc3RyaW5nCQkkdGFibGUJCVN0YXR1cyBtZXNzYWdlIHR5cGUuDQoJCSAqCUBwYXJhbQkJc3RyaW5n CQkkbWVzc2FnZQlTdGF0dXMgbWVzc2FnZS4NCgkJICoJQHJldHVybgkJbnVsbA0KCQkgKg0KCQkgKi8N CgkJZnVuY3Rpb24gc3RhdHVzKCAkdHlwZSA9ICcnLCAkbWVzc2FnZSA9ICcnICkgew0KCQkJaWYgKCBp c3NldCggJHRoaXMtPnN0YXR1c19jYWxsYmFjayApICkgew0KCQkJCSR0aGlzLT5zdGF0dXNfY2FsbGJh Y2stPnN0YXR1cyggJHR5cGUsICRtZXNzYWdlICk7DQoJCQl9DQoJCX0NCgkJDQoJCQ0KCQkvKioNCgkJ ICoJdGV4dCgpDQoJCSAqCQ0KCQkgKglSZXBsYWNlcyB0ZXh0IHdpdGhpbiBhIHRhYmxlIGJ5IHNwZWNp ZnlpbmcgdGhlIHRhYmxlLCByb3dzIHRvIHJlcGxhY2Ugd2l0aGluIGFuZCB0aGUgb2xkIGFuZCBuZXcg dmFsdWUocykuDQoJCSAqCQ0KCQkgKglAcGFyYW0JCXN0cmluZwkJJHRhYmxlCQlUYWJsZSB0byByZXBs YWNlIHRleHQgaW4uDQoJCSAqCUBwYXJhbQkJbWl4ZWQJCSRvbGRzCQlPbGQgdmFsdWUocykgdG8gZmlu ZCBmb3IgcmVwbGFjZW1lbnQuIE1heSBiZSBhIHN0cmluZyBvciBhcnJheSBvZiB2YWx1ZXMuDQoJCSAq CUBwYXJhbQkJbWl4ZWQJCSRuZXdzCQlOZXcgdmFsdWUocykgdG8gYmUgcmVwbGFjZWQgd2l0aC4gTWF5 IGJlIGEgc3RyaW5nIG9yIGFycmF5LiBJZiBhcnJheSB0aGVyZSBtdXN0IGJlIHRoZSBzYW1lIG51bWJl ciBvZiB2YWx1ZXMgYXMgJG9sZHMuDQoJCSAqCUBwYXJhbQkJbWl4ZWQJCSRyb3dzCQlUYWJsZSByb3co cykgdG8gcmVwbGFjZSB3aXRoaW4uIE1heSBiZSBhbiBhcnJheSBvZiB0YWJsZXMuDQoJCSAqCUByZXR1 cm4JCW51bGwNCgkJICoNCgkJICovDQoJCXB1YmxpYyBmdW5jdGlvbiB0ZXh0KCAkdGFibGUsICRvbGRz LCAkbmV3cywgJHJvd3MgKSB7DQoJCQkkcm93c19zcWwgPSBhcnJheSgpOw0KCQkJDQoJCQlpZiAoICFp c19hcnJheSggJG9sZHMgKSApIHsNCgkJCQkkb2xkcyA9IGFycmF5KCAkb2xkcyApOw0KCQkJfQ0KCQkJ aWYgKCAhaXNfYXJyYXkoICRuZXdzICkgKSB7DQoJCQkJJG5ld3MgPSBhcnJheSggJG5ld3MgKTsNCgkJ CX0NCgkJCWlmICggIWlzX2FycmF5KCAkcm93cyApICkgew0KCQkJCSRyb3dzID0gYXJyYXkoICRyb3dz ICk7DQoJCQl9DQoJCQkNCgkJCS8vIFByZXZlbnQgdHJ5aW5nIHRvIHJlcGxhY2UgZGF0YSB3aXRoIHRo ZSBzYW1lIGRhdGEgZm9yIHBlcmZvcm1hbmNlLg0KCQkJJHRoaXMtPnJlbW92ZV9tYXRjaGluZ19hcnJh eV9lbGVtZW50cyggJG9sZHMsICRuZXdzICk7DQoJCQkNCgkJCWZvcmVhY2ggKCAkcm93cyBhcyAkcm93 ICkgew0KCQkJCSRpID0gMDsNCgkJCQlmb3JlYWNoICggJG9sZHMgYXMgJG9sZCApIHsNCgkJCQkJJHJv d3Nfc3FsW10gPSAkcm93IC4gIiA9IHJlcGxhY2UoIHskcm93fSwgJ3skb2xkfScsICd7JG5ld3NbJGld fScpIjsNCgkJCQkJJGkrKzsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCXJldHVybiBteXNxbF9xdWVyeSgg IlVQREFURSBgeyR0YWJsZX1gIFNFVCAiIC4gaW1wbG9kZSggJywnLCAkcm93c19zcWwgKSAuICI7IiAp Ow0KCQl9DQoJCQ0KCQkNCgkJLyoqDQoJCSAqCXNlcmlhbGl6ZWQoKQ0KCQkgKgkNCgkJICoJUmVwbGFj ZXMgc2VyaWFsaXplZCB0ZXh0IHdpdGhpbiBhIHRhYmxlIGJ5IHNwZWNpZnlpbmcgdGhlIHRhYmxlLCBy b3dzIHRvIHJlcGxhY2Ugd2l0aGluIGFuZCB0aGUgb2xkIGFuZCBuZXcgdmFsdWUocykuDQoJCSAqCQ0K CQkgKglAcGFyYW0JCXN0cmluZwkJJHRhYmxlCQlUYWJsZSB0byByZXBsYWNlIHRleHQgaW4uDQoJCSAq CUBwYXJhbQkJbWl4ZWQJCSRvbGRzCQlPbGQgdmFsdWUocykgdG8gZmluZCBmb3IgcmVwbGFjZW1lbnQu IE1heSBiZSBhIHN0cmluZyBvciBhcnJheSBvZiB2YWx1ZXMuDQoJCSAqCUBwYXJhbQkJbWl4ZWQJCSRu ZXdzCQlOZXcgdmFsdWUocykgdG8gYmUgcmVwbGFjZWQgd2l0aC4gTWF5IGJlIGEgc3RyaW5nIG9yIGFy cmF5LiBJZiBhcnJheSB0aGVyZSBtdXN0IGJlIHRoZSBzYW1lIG51bWJlciBvZiB2YWx1ZXMgYXMgJG9s ZHMuDQoJCSAqCUBwYXJhbQkJbWl4ZWQJCSRyb3dzCQlUYWJsZSByb3cocykgdG8gcmVwbGFjZSB3aXRo aW4uIE1heSBiZSBhbiBhcnJheSBvZiB0YWJsZXMuDQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJ ICovDQoJCXB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemVkKCAkdGFibGUsICRvbGRzLCAkbmV3cywgJHJv d3MgKSB7DQoJCQlpZiAoICFpc19hcnJheSggJG9sZHMgKSApIHsNCgkJCQkkb2xkcyA9IGFycmF5KCAk b2xkcyApOw0KCQkJfQ0KCQkJaWYgKCAhaXNfYXJyYXkoICRuZXdzICkgKSB7DQoJCQkJJG5ld3MgPSBh

cnJheSggJG5ld3MgKTsNCgkJCX0NCgkJCWlmICggIWlzX2FycmF5KCAkcm93cyApICkgew0KCQkJCSRy b3dzID0gYXJyYXkoICRyb3dzICk7DQoJCQl9DQoJCQkNCgkJCS8vIFByZXZlbnQgdHJ5aW5nIHRvIHJl cGxhY2UgZGF0YSB3aXRoIHRoZSBzYW1lIGRhdGEgZm9yIHBlcmZvcm1hbmNlLg0KCQkJJHRoaXMtPnJl bW92ZV9tYXRjaGluZ19hcnJheV9lbGVtZW50cyggJG9sZHMsICRuZXdzICk7DQoJCQkka2V5X3Jlc3Vs dCA9IG15c3FsX3F1ZXJ5KCAic2hvdyBrZXlzIGZyb20geyR0YWJsZX0gV0hFUkUgS2V5X25hbWU9J1BS SU1BUlknOyIgKTsNCgkJCWlmICggJGtleV9yZXN1bHQgPT09IGZhbHNlICkgew0KCQkJCSR0aGlzLT5z dGF0dXMoICdkZXRhaWxzJywgJ1RhYmxlIGAnIC4gJHRhYmxlIC4gJ2AgZG9lcyBub3QgZXhpc3Q7IHNr aXBwaW5nIG1pZ3JhdGlvbiBvZiB0aGlzIHRhYmxlLicgKTsNCgkJCQlyZXR1cm47DQoJCQl9DQoJCQkN CgkJCS8vIE5vIHByaW1hcnkga2V5IGZvdW5kOyB1bnNhZmUgdG8gZWRpdCB0aGlzIHRhYmxlLiBAc2lu Y2UgMi4yLjMyLg0KCQkJaWYgKCBteXNxbF9udW1fcm93cyggJGtleV9yZXN1bHQgKSA9PSAwICkgew0K CQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgJ0Vycm9yICM5MDI5OiBUYWJsZSBgJy4gICR0YWJs ZSAuJ2AgZG9lcyBub3QgY29udGFpbiBhIHByaW1hcnkga2V5OyBCYWNrdXBCdWRkeSBjYW5ub3Qgc2Fm ZWx5IG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhpcyB0YWJsZS4gU2tpcHBpbmcgbWlncmF0aW9uIG9m IHRoaXMgdGFibGUuIChzZXJpYWxpemVkKCkpLicgKTsNCgkJCQlyZXR1cm47DQoJCQl9DQoJCQkNCgkJ CSRrZXlfcmVzdWx0ID0gbXlzcWxfZmV0Y2hfYXJyYXkoICRrZXlfcmVzdWx0ICk7DQoJCQkkcHJpbWFy eV9rZXkgPSAka2V5X3Jlc3VsdFsnQ29sdW1uX25hbWUnXTsNCgkJCXVuc2V0KCAka2V5X3Jlc3VsdCAp Ow0KCQkJDQoJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoICJTRUxFQ1QgYCIgLiBpbXBsb2RlKCAnYCxg JywgJHJvd3MgKSAuICJgLGB7JHByaW1hcnlfa2V5fWAgRlJPTSBgeyR0YWJsZX1gIik7DQoJCQkNCgkJ CSR1cGRhdGVkID0gZmFsc2U7DQoJCQl3aGlsZSAoICRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSggJHJl c3VsdCwgTVlTUUxfQVNTT0MgKSApIHsNCgkJCQkkbmVlZHNfdXBkYXRlID0gZmFsc2U7DQoJCQkJJHNx bF91cGRhdGUgPSBhcnJheSgpOw0KCQkJCQ0KCQkJCWZvcmVhY2goICRyb3cgYXMgJGNvbHVtbiA9PiAk dmFsdWUgKSB7DQoJCQkJCWlmICggJGNvbHVtbiAhPSAkcHJpbWFyeV9rZXkgKSB7DQoJCQkJCQlpZiAo IGZhbHNlICE9PSAoICRlZGl0ZWRfZGF0YSA9ICR0aGlzLT5yZXBsYWNlX21heWJlX3NlcmlhbGl6ZWQo ICR2YWx1ZSwgJG9sZHMsICRuZXdzICkgKSApIHsgLy8gRGF0YSBjaGFuZ2VkLg0KCQkJCQkJCSRuZWVk c191cGRhdGUgPSB0cnVlOw0KCQkJCQkJCSRzcWxfdXBkYXRlW10gPSAkY29sdW1uIC4gIj0gJyIgLiBt eXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoICRlZGl0ZWRfZGF0YSApIC4gIiciOw0KCQkJCQkJfQ0KCQkJ CQl9IGVsc2Ugew0KCQkJCQkJJHByaW1hcnlfa2V5X3ZhbHVlID0gJHZhbHVlOw0KCQkJCQl9DQoJCQkJ fQ0KCQkJCQ0KCQkJCWlmICggJG5lZWRzX3VwZGF0ZSA9PT0gdHJ1ZSApIHsNCgkJCQkJJHVwZGF0ZWQg PSB0cnVlOw0KCQkJCQlteXNxbF9xdWVyeSggIlVQREFURSBgeyR0YWJsZX1gIFNFVCAiIC4gaW1wbG9k ZSggJywnLCAkc3FsX3VwZGF0ZSApIC4gIiBXSEVSRSBgeyRwcmltYXJ5X2tleX1gID0gJ3skcHJpbWFy eV9rZXlfdmFsdWV9JyBMSU1JVCAxIiApOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJaWYgKCAkdXBkYXRl ZCA9PT0gdHJ1ZSApIHsNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICdVcGRhdGVkIHNlcmlh bGl6ZWQgZGF0YSBpbiAnIC4gJHRhYmxlIC4gJy4nICk7DQoJCQl9DQoJCX0NCgkJDQoJCQ0KCQkvKioN CgkJICoJcmVwbGFjZV9tYXliZV9zZXJpYWxpemVkKCkNCgkJICoJDQoJCSAqCVJlcGxhY2VzIHBvc3Np Ymx5IHNlcmlhbGl6ZWQgKG9yIG5vbi1zZXJpYWxpemVkKSB0ZXh0IGlmIGEgY2hhbmdlIGlzIG5lZWRl ZC4gUmV0dXJucyBmYWxzZSBpZiB0aGVyZSB3YXMgbm8gY2hhbmdlLg0KCQkgKgkNCgkJICoJQHBhcmFt CQlzdHJpbmcJCSR0YWJsZQkJVGV4dCAocG9zc2libHkgc2VyaWFsaXplZCkgdG8gdXBkYXRlLg0KCQkg KglAcGFyYW0JCW1peGVkCQkkb2xkcwkJVGV4dCB0byBzZWFyY2ggZm9yIHRvIHJlcGxhY2UuIE1heSBi ZSBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIHNlYXJjaCBmb3IuDQoJCSAqCUBwYXJhbQkJbWl4ZWQJCSRu ZXdzCQlOZXcgdmFsdWUocykgdG8gYmUgcmVwbGFjZWQgd2l0aC4gTWF5IGJlIGEgc3RyaW5nIG9yIGFy cmF5LiBJZiBhcnJheSB0aGVyZSBtdXN0IGJlIHRoZSBzYW1lIG51bWJlciBvZiB2YWx1ZXMgYXMgJG9s ZHMuDQoJCSAqCUByZXR1cm4JCW1peGVkCQkJCQlSZXR1cm5zIG1vZGlmaWVkIHN0cmluZyBkYXRhIGlm IHNlcmlhbGl6ZWQgZGF0YSB3YXMgcmVwbGFjZWQuIEZhbHNlIGlmIG5vIGNoYW5nZSB3YXMgbWFkZS4N CgkJICoNCgkJICovDQoJCWZ1bmN0aW9uIHJlcGxhY2VfbWF5YmVfc2VyaWFsaXplZCggJGRhdGEsICRv bGRzLCAkbmV3cyApIHsNCgkJCWlmICggIWlzX2FycmF5KCAkb2xkcyApICkgew0KCQkJCSRvbGRzID0g YXJyYXkoICRvbGRzICk7DQoJCQl9DQoJCQlpZiAoICFpc19hcnJheSggJG5ld3MgKSApIHsNCgkJCQkk bmV3cyA9IGFycmF5KCAkbmV3cyApOw0KCQkJfQ0KCQkJDQoJCQkkdHlwZSA9ICcnOw0KCQkJJHVuc2Vy aWFsaXplZCA9IGZhbHNlOyAvLyBmaXJzdCBhc3N1bWUgbm90IHNlcmlhbGl6ZWQgZGF0YQ0KCQkJaWYg KCBpc19zZXJpYWxpemVkKCAkZGF0YSApICkgeyAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcmlhbGl6ZWQg ZGF0YQ0KCQkJCSR1bnNlcmlhbGl6ZWQgPSBAdW5zZXJpYWxpemUoICRkYXRhICk7IC8vIHVuc2VyaWFs aXNlIC0gaWYgZmFsc2UgaXMgcmV0dXJuZWQgd2Ugd29uJ3QgdHJ5IHRvIHByb2Nlc3MgaXQgYXMgc2Vy aWFsaXNlZC4NCgkJCX0NCgkJCWlmICggJHVuc2VyaWFsaXplZCAhPT0gZmFsc2UgKSB7IC8vIFNlcmlh bGl6ZWQgZGF0YS4NCgkJCQkkdHlwZSA9ICdzZXJpYWxpemVkJzsNCgkJCQkkaSA9IDA7DQoJCQkJZm9y ZWFjaCAoICRvbGRzIGFzICRvbGQgKSB7DQoJCQkJCSR0aGlzLT5yZWN1cnNpdmVfYXJyYXlfcmVwbGFj ZSggJG9sZCwgJG5ld3NbJGldLCAkdW5zZXJpYWxpemVkICk7DQoJCQkJCSRpKys7DQoJCQkJfQ0KCQkJ CSRlZGl0ZWRfZGF0YSA9IHNlcmlhbGl6ZSggJHVuc2VyaWFsaXplZCApOw0KCQkJfQllbHNlIHsgLy8g Tm9uLXNlcmlhbGl6ZWQgZGF0YS4NCgkJCQkkdHlwZSA9ICd0ZXh0JzsNCgkJCQkkZWRpdGVkX2RhdGEg PSAkZGF0YTsNCgkJCQkkaSA9IDA7DQoJCQkJZm9yZWFjaCAoICRvbGRzIGFzICRvbGQgKSB7DQoJCQkJ CSRlZGl0ZWRfZGF0YSA9c3RyX2lyZXBsYWNlKCAkb2xkLCAkbmV3c1skaV0sICRlZGl0ZWRfZGF0YSAp Ow0KCQkJCQkkaSsrOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJLy8gUmV0dXJuIHRoZSByZXN1bHRzLg0K

CQkJaWYgKCAkZGF0YSAhPSAkZWRpdGVkX2RhdGEgKSB7DQoJCQkJcmV0dXJuICRlZGl0ZWRfZGF0YTsN CgkJCX0gZWxzZSB7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJCQ0KCQkNCgkJLyoqDQoJ CSAqCWJydXRlZm9yY2VfdGFibGUoKQ0KCQkgKgkNCgkJICoJUmVwbGFjZXMgdGV4dCwgc2VyaWFsaXpl ZCBvciBub3QsIHdpdGhpbiB0aGUgZW50aXJlIHRhYmxlLiBCcnV0ZWZvcmNlIG1ldGhvZCBpdGVyYXRl cyB0aHJvdWdoIGV2ZXJ5IHJvdyAmIGNvbHVtbiBpbiB0aGUgZW50aXJlIHRhYmxlIGFuZCByZXBsYWNl cyBpZiBuZWVkZWQuDQoJCSAqCQ0KCQkgKglAcGFyYW0JCXN0cmluZwkJJHRhYmxlCQlUZXh0IChwb3Nz aWJseSBzZXJpYWxpemVkKSB0byB1cGRhdGUuDQoJCSAqCUBwYXJhbQkJbWl4ZWQJCSRvbGRzCQlUZXh0 IHRvIHNlYXJjaCBmb3IgdG8gcmVwbGFjZS4gTWF5IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gc2Vh cmNoIGZvci4NCgkJICoJQHBhcmFtCQltaXhlZAkJJG5ld3MJCU5ldyB2YWx1ZShzKSB0byBiZSByZXBs YWNlZCB3aXRoLiBNYXkgYmUgYSBzdHJpbmcgb3IgYXJyYXkuIElmIGFycmF5IHRoZXJlIG11c3QgYmUg dGhlIHNhbWUgbnVtYmVyIG9mIHZhbHVlcyBhcyAkb2xkcy4NCgkJICoJQHJldHVybgkJYm9vbGVhbgkJ CQkJQWx3YXlzIHRydWUgY3VycmVudGx5Lg0KCQkgKg0KCQkgKi8NCgkJZnVuY3Rpb24gYnJ1dGVmb3Jj ZV90YWJsZSggJHRhYmxlLCAkb2xkcywgJG5ld3MgKSB7DQoJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2Fn ZScsICdTdGFydGluZyBicnV0ZSBmb3JjZSBkYXRhIG1pZ3JhdGlvbiBmb3IgdGFibGUgYCcgLiAkdGFi bGUgLiAnYC4uLicgKTsNCgkJCWlmICggIWlzX2FycmF5KCAkb2xkcyApICkgew0KCQkJCSRvbGRzID0g YXJyYXkoICRvbGRzICk7DQoJCQl9DQoJCQlpZiAoICFpc19hcnJheSggJG5ld3MgKSApIHsNCgkJCQkk bmV3cyA9IGFycmF5KCAkbmV3cyApOw0KCQkJfQ0KCQkJDQoJCQkkY291bnRfaXRlbXNfY2hlY2tlZCA9 IDA7DQoJCQkkY291bnRfaXRlbXNfY2hhbmdlZCA9IDA7DQoJCQkNCgkJCSRmaWVsZHNfbGlzdCA9IG15 c3FsX3F1ZXJ5KCAiREVTQ1JJQkUgYCIgLiAkdGFibGUgLiAiYCIgKTsNCgkJCSRpbmRleF9maWVsZHMg PSAnJzsgIC8vIFJlc2V0IGZpZWxkcyBmb3IgZWFjaCB0YWJsZS4NCgkJCSRjb2x1bW5fbmFtZSA9ICcn Ow0KCQkJJHRhYmxlX2luZGV4ID0gJyc7DQoJCQkkaSA9IDA7DQoJCQkNCgkJCSRmb3VuZF9wcmltYXJ5 X2tleSA9IGZhbHNlOw0KCQkJDQoJCQl3aGlsZSAoICRmaWVsZF9yb3dzID0gbXlzcWxfZmV0Y2hfYXJy YXkoICRmaWVsZHNfbGlzdCApICkgew0KCQkJCSRjb2x1bW5fbmFtZVskaSsrXSA9ICRmaWVsZF9yb3dz WydGaWVsZCddOw0KCQkJCWlmICggJGZpZWxkX3Jvd3NbJ0tleSddID09ICdQUkknICkgew0KCQkJCQkk dGFibGVfaW5kZXhbJGldID0gdHJ1ZTsNCgkJCQkJJGZvdW5kX3ByaW1hcnlfa2V5ID0gdHJ1ZTsNCgkJ CQl9DQoJCQl9DQoJCQkNCgkJCS8vIFNraXBzIG1pZ3JhdGlvbiBvZiB0aGlzIHRhYmxlIGlmIHRoZXJl IGlzIG5vIHByaW1hcnkga2V5LiBNb2RpZnlpbmcgb24gYW55IG90aGVyIGtleSBpcyBub3Qgc2FmZS4g bXlzcWwgYXV0b21hdGljYWxseSByZXR1cm5zIGEgUFJJTUFSWSBpZiBhIFVOSVFVRSBub24tcHJpbWFy eSBpcyBmb3VuZCBhY2NvcmRpbmcgdG8gaHR0cDovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi81LjEv ZW4vY3JlYXRlLXRhYmxlLmh0bWwgIEBzaW5jZSAyLjIuMzIuDQoJCQlpZiAoICRmb3VuZF9wcmltYXJ5 X2tleSA9PT0gZmFsc2UgKSB7DQoJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCAnRXJyb3IgIzkw Mjk6IFRhYmxlIGAnLiAgJHRhYmxlIC4nYCBkb2VzIG5vdCBjb250YWluIGEgcHJpbWFyeSBrZXk7IEJh Y2t1cEJ1ZGR5IGNhbm5vdCBzYWZlbHkgbW9kaWZ5IHRoZSBjb250ZW50cyBvZiB0aGlzIHRhYmxlLiBT a2lwcGluZyBtaWdyYXRpb24gb2YgdGhpcyB0YWJsZS4gKGJydXRlZm9yY2VfdGFibGUoKSkuJyApOw0K CQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCQ0KCQkJJGRhdGEgPSBteXNxbF9xdWVyeSggIlNFTEVD VCAqIEZST00gYCIgLiAkdGFibGUgLiAiYCIgKTsNCgkJCWlmICghJGRhdGEpIHsNCgkJCQkkdGhpcy0+ c3RhdHVzKCAnZXJyb3InLCAnRVJST1IgIzQ0NTQ1MzQzIC4uLiBTUUwgRVJST1I6ICcgLiBteXNxbF9l cnJvcigpICk7DQoJCQl9DQoJCQkNCgkJCSRyb3dfbG9vcCA9IDA7DQoJCQl3aGlsZSAoICRyb3cgPSBt eXNxbF9mZXRjaF9hcnJheSggJGRhdGEgKSApIHsNCgkJCQkkbmVlZF90b191cGRhdGUgPSBmYWxzZTsN CgkJCQkkVVBEQVRFX1NRTCA9ICdVUERBVEUgYCcgLiAkdGFibGUgLiAnYCBTRVQgJzsNCgkJCQkkV0hF UkVfU1FMID0gJyBXSEVSRSAnOw0KCQkJCQ0KCQkJCSRqID0gMDsNCgkJCQlmb3JlYWNoICggJGNvbHVt bl9uYW1lIGFzICRjdXJyZW50X2NvbHVtbiApIHsNCgkJCQkJJGorKzsNCgkJCQkJJGNvdW50X2l0ZW1z X2NoZWNrZWQrKzsNCgkJCQkJJHJvd19sb29wKys7DQoJCQkJCWlmICggJHJvd19sb29wID4gNTAwMCAp IHsNCgkJCQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgJ1dvcmtpbmcuLi4nICk7DQoJCQkJCQkk cm93X2xvb3AgPSAwOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQkkZGF0YV90b19maXggPSAkcm93WyRjdXJy ZW50X2NvbHVtbl07DQoJCQkJCWlmICggZmFsc2UgIT09ICggJGVkaXRlZF9kYXRhID0gJHRoaXMtPnJl cGxhY2VfbWF5YmVfc2VyaWFsaXplZCggJGRhdGFfdG9fZml4LCAkb2xkcywgJG5ld3MgKSApICkgeyAv LyBubyBjaGFuZ2UgbmVlZGVkDQoJCQkJCQkkY291bnRfaXRlbXNfY2hhbmdlZCsrOw0KCQkJCQkJaWYg KCAkbmVlZF90b191cGRhdGUgIT0gZmFsc2UgKSB7IC8vIElmIHRoaXMgaXNuJ3Qgb3VyIGZpcnN0IHRp bWUgaGVyZSwgd2UgbmVlZCB0byBhZGQgYSBjb21tYS4NCgkJCQkJCQkkVVBEQVRFX1NRTCA9ICRVUERB VEVfU1FMIC4gJywnOw0KCQkJCQkJfQ0KCQkJCQkJJFVQREFURV9TUUwgPSAkVVBEQVRFX1NRTCAuICcg JyAuICRjdXJyZW50X2NvbHVtbiAuICcgPSAiJyAuIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyggJGVk aXRlZF9kYXRhICkgLiAnIic7DQoJCQkJCQkkbmVlZF90b191cGRhdGUgPSB0cnVlOyAvLyBPbmx5IHNl dCBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSAtIGF2b2lkcyB3YXN0ZWQgVVBEQVRFIHN0YXRlbWVudHMuDQoJ CQkJCX0NCgkJCQkJDQoJCQkJCWlmICggaXNzZXQoICR0YWJsZV9pbmRleFskal0gKSApIHsNCgkJCQkJ CSRXSEVSRV9TUUwgPSAkV0hFUkVfU1FMIC4gJ2AnIC4gJGN1cnJlbnRfY29sdW1uIC4gJ2AgPSAiJyAu ICRyb3dbJGN1cnJlbnRfY29sdW1uXSAuICciIEFORCAnOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCQ0KCQkJ CWlmICggJG5lZWRfdG9fdXBkYXRlICkgew0KCQkJCQkkV0hFUkVfU1FMID0gc3Vic3RyKCAkV0hFUkVf U1FMICwgMCwgLTQgKTsgLy8gU3RyaXAgb2ZmIHRoZSBleGNlc3MgQU5EIC0gdGhlIGVhc2llc3Qgd2F5 IHRvIGNvZGUgdGhpcyB3aXRob3V0IGV4dHJhIGZsYWdzLCBldGMuDQoJCQkJCSRVUERBVEVfU1FMID0g

JFVQREFURV9TUUwgLiAkV0hFUkVfU1FMOw0KCQkJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoICRVUERB VEVfU1FMICk7DQoJCQkJCWlmICggISRyZXN1bHQgKSB7DQoJCQkJCQkkdGhpcy0+c3RhdHVzKCAnZXJy b3InLCAnRVJST1I6IG15c3FsIGVycm9yIHVwZGF0aW5nIGRiOiAnIC4gbXlzcWxfZXJyb3IoKSAuICcu IFNRTCBRdWVyeTogJyAuIGh0bWxlbnRpdGllcyggJFVQREFURV9TUUwgKSApOw0KCQkJCQl9IA0KCQkJ CX0NCgkJCQkNCgkJCX0NCgkJCQ0KCQkJdW5zZXQoICRtYWluX3Jlc3VsdCApOw0KCQkJJHRoaXMtPnN0 YXR1cyggJ21lc3NhZ2UnLCAnQnJ1dGUgZm9yY2UgZGF0YSBtaWdyYXRpb24gZm9yIHRhYmxlIGAnIC4g JHRhYmxlIC4gJ2AgY29tcGxldGUuIENoZWNrZWQgJyAuICRjb3VudF9pdGVtc19jaGVja2VkIC4gJyBp dGVtczsgJyAuICRjb3VudF9pdGVtc19jaGFuZ2VkIC4gJyBjaGFuZ2VkLicgKTsNCgkJCQ0KCQkJcmV0 dXJuIHRydWU7DQoJCX0NCgkJDQoJCQ0KCQkvKioNCgkJICoJcmVjdXJzaXZlX2FycmF5X3JlcGxhY2Uo KQ0KCQkgKgkNCgkJICoJUmVjdXJzaXZlbHkgcmVwbGFjZSB0ZXh0IGluIGFuIGFycmF5LCBzdGVwcGlu ZyB0aHJvdWdoIGFycmF5cyB3aXRoaW4gYXJyYXlzIGFzIG5lZWRlZC4NCgkJICoJDQoJCSAqCUBwYXJh bQkJc3RyaW5nCQkkZmluZAkJVGV4dCB0byBmaW5kLg0KCQkgKglAcGFyYW0JCXN0cmluZwkJJHJlcGxh Y2UJVGV4dCB0byByZXBsYWNlIGZvdW5kIHRleHQgd2l0aC4NCgkJICoJQHBhcmFtCQlyZWZlcmVuY2UJ JiRkYXRhCQlQYXNzIHRoZSB2YXJpYWJsZSB0byBjaGFuZ2UgdGhlIGRhdGEgd2l0aGluLg0KCQkgKglA cmV0dXJuCQlib29sZWFuCQkJCQlBbHdheXMgdHJ1ZSBjdXJyZW50bHkuDQoJCSAqDQoJCSAqLw0KCQlw dWJsaWMgZnVuY3Rpb24gcmVjdXJzaXZlX2FycmF5X3JlcGxhY2UoICRmaW5kLCAkcmVwbGFjZSwgJiRk YXRhICkgew0KCQkJaWYgKCBpc19hcnJheSggJGRhdGEgKSApIHsNCgkJCQlmb3JlYWNoICggJGRhdGEg YXMgJGtleSA9PiAkdmFsdWUgKSB7DQoJCQkJCWlmICggaXNfYXJyYXkoICR2YWx1ZSApICkgew0KCQkJ CQkJJHRoaXMtPnJlY3Vyc2l2ZV9hcnJheV9yZXBsYWNlKCAkZmluZCwgJHJlcGxhY2UsICRkYXRhWyRr ZXldICk7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkvLyBIYXZlIHRvIGNoZWNrIGlmIGl0J3Mgc3RyaW5n IHRvIGVuc3VyZSBubyBzd2l0Y2hpbmcgdG8gc3RyaW5nIGZvciBib29sZWFucy9udW1iZXJzL251bGxz IC0gZG9uJ3QgbmVlZCBhbnkgbmFzdHkgY29udmVyc2lvbnMuDQoJCQkJCQlpZiAoIGlzX3N0cmluZygg JHZhbHVlICkgKSAkZGF0YVska2V5XSA9IHN0cl9yZXBsYWNlKCAkZmluZCwgJHJlcGxhY2UsICR2YWx1 ZSApOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoIGlzX3N0cmluZyggJGRhdGEg KSApICRkYXRhID0gc3RyX3JlcGxhY2UoICRmaW5kLCAkcmVwbGFjZSwgJGRhdGEgKTsNCgkJCX0NCgkJ fQ0KCQkNCgkJDQoJCS8qKg0KCQkgKiBDaGVjayB2YWx1ZSB0byBmaW5kIGlmIGl0IHdhcyBzZXJpYWxp emVkLg0KCQkgKg0KCQkgKiBJZiAkZGF0YSBpcyBub3QgYW4gc3RyaW5nLCB0aGVuIHJldHVybmVkIHZh bHVlIHdpbGwgYWx3YXlzIGJlIGZhbHNlLg0KCQkgKiBTZXJpYWxpemVkIGRhdGEgaXMgYWx3YXlzIGEg c3RyaW5nLg0KCQkgKg0KCQkgKiBDb3VydGVzeSBXb3JkUHJlc3M7IHNpbmNlIFdvcmRQcmVzcyAyLjAu NS4NCgkJICoNCgkJICogQHBhcmFtIG1peGVkICRkYXRhIFZhbHVlIHRvIGNoZWNrIHRvIHNlZSBpZiB3 YXMgc2VyaWFsaXplZC4NCgkJICogQHJldHVybiBib29sIEZhbHNlIGlmIG5vdCBzZXJpYWxpemVkIGFu ZCB0cnVlIGlmIGl0IHdhcy4NCgkJICovDQoJCWZ1bmN0aW9uIGlzX3NlcmlhbGl6ZWQoICRkYXRhICkg ew0KCQkJLy8gaWYgaXQgaXNuJ3QgYSBzdHJpbmcsIGl0IGlzbid0IHNlcmlhbGl6ZWQNCgkJCWlmICgg ISBpc19zdHJpbmcoICRkYXRhICkgKQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCSRkYXRhID0gdHJpbSgg JGRhdGEgKTsNCgkJIAlpZiAoICdOOycgPT0gJGRhdGEgKQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJJGxl bmd0aCA9IHN0cmxlbiggJGRhdGEgKTsNCgkJCWlmICggJGxlbmd0aCA8IDQgKQ0KCQkJCXJldHVybiBm YWxzZTsNCgkJCWlmICggJzonICE9PSAkZGF0YVsxXSApDQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJJGxh c3RjID0gJGRhdGFbJGxlbmd0aC0xXTsNCgkJCWlmICggJzsnICE9PSAkbGFzdGMgJiYgJ30nICE9PSAk bGFzdGMgKQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCSR0b2tlbiA9ICRkYXRhWzBdOw0KCQkJc3dpdGNo ICggJHRva2VuICkgew0KCQkJCWNhc2UgJ3MnIDoNCgkJCQkJaWYgKCAnIicgIT09ICRkYXRhWyRsZW5n dGgtMl0gKQ0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCWNhc2UgJ2EnIDoNCgkJCQljYXNlICdPJyA6 DQoJCQkJCXJldHVybiAoYm9vbCkgcHJlZ19tYXRjaCggIi9eeyR0b2tlbn06WzAtOV0rOi9zIiwgJGRh dGEgKTsNCgkJCQljYXNlICdiJyA6DQoJCQkJY2FzZSAnaScgOg0KCQkJCWNhc2UgJ2QnIDoNCgkJCQkJ cmV0dXJuIChib29sKSBwcmVnX21hdGNoKCAiL157JHRva2VufTpbMC05LkUtXSs7XCQvIiwgJGRhdGEg KTsNCgkJCX0NCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQkNCgkJDQoJCS8qKg0KCQkgKglyZW1vdmVf bWF0Y2hpbmdfYXJyYXlfZWxlbWVudHMoKQ0KCQkgKgkNCgkJICoJUmVtb3ZlcyBpZGVudGljYWwgZWxl bWVudHMgKHNhbWUgaW5kZXggYW5kIHZhbHVlKSBmcm9tIGJvdGggYXJyYXlzIHdoZXJlIHRoZXkgbWF0 Y2guDQoJCSAqDQoJCSAqCUV4Og0KCQkgKgkJLy8gQmVmb3JlOg0KCQkgKgkJJGEgPSBhcnJheSggJ2Fw cGxlJywgJ2JhbmFuYScsICdjYXJyb3QnICk7DQoJCSAqCQkkYiA9IGFycmF5KCAnYXBwbGUnLCAnYmVl ZicsICdjdWN1bWJlcicgKTsNCgkJICoJCXJlbW92ZV9tYXRjaGluZ19hcnJheV9lbGVtZW50cyggJGEs ICRiICk7DQoJCSAqCQkvLyBBZnRlcjoNCgkJICoJCSRhID0gYXJyYXkoICdiYW5hbmEnLCAnY2Fycm90 JyApOw0KCQkgKgkJJGIgPSBhcnJheSggJ2JlZWYnLCAnY3VjdW1iZXInICk7DQoJCSAqCQ0KCQkgKglA cGFyYW0JCWFycmF5CQkmJGEJCUZpcnN0IGFycmF5IHRvIGNvbXBhcmUgd2l0aCBzZWNvbmQuIChyZWZl cmVuY2UpDQoJCSAqCUBwYXJhbQkJYXJyYXkJCSYkYgkJU2Vjb25kIGFycmF5IHRvIGNvbXBhcmUgd2l0 aCBmaXJzdC4gKHJlZmVyZW5jZSkNCgkJICoJQHJldHVybgkJbnVsbAkJCQlBcnJheXMgcGFzc2VkIGFy ZSB1cGRhdGVkIGFzIHRoZXkgYXJlIHBhc3NlZCBieSByZWZlcmVuY2UuDQoJCSAqDQoJCSAqLw0KCQlm dW5jdGlvbiByZW1vdmVfbWF0Y2hpbmdfYXJyYXlfZWxlbWVudHMoICYkYSwgJiRiICkgew0KCQkJJHNp emVvZiA9IHNpemVvZiggJGEgKTsNCgkJCWZvciggJGk9MDsgJGkgPCAkc2l6ZW9mOyAkaSsrICkgew0K CQkJCWlmICggJGFbJGldID09ICRiWyRpXSApIHsNCgkJCQkJdW5zZXQoICRhWyRpXSApOw0KCQkJCQl1 bnNldCggJGJbJGldICk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCQ0KCQkNCgl9IC8vIGVuZCBwbHVnaW5i

dWRkeV9kYnJlcGxhY2UgY2xhc3MuDQp9DQo/Pg== ###PACKDATA,FILE_END,/lib/dbreplace/dbreplace.php,importbuddy/lib/dbreplace/dbre place.php ###PACKDATA,FILE_START,/lib/dbreplace/history.txt,importbuddy/lib/dbreplace/hist ory.txt MS4wLjAgLSAyMDExLTA4LTE4IC0gRHVzdGluIEJvbHRvbg0KCUNyZWF0ZWQgZGJyZXBsYWNlIGNsYXNz Lg== ###PACKDATA,FILE_END,/lib/dbreplace/history.txt,importbuddy/lib/dbreplace/histor y.txt ###PACKDATA,FILE_START,/lib/dbimport/dbimport.php,importbuddy/lib/dbimport/dbimp ort.php PD9waHANCi8qKg0KICoJcGx1Z2luYnVkZHlfZGJpbXBvcnQgQ2xhc3MNCiAqDQogKglIYW5kbGVzIGlt cG9ydCBvZiBhIGRhdGFiYXNlIGZyb20gYSBCYWNrdXBCdWRkeSBkdW1wLiBVc2VkIGJ5IGltcG9ydGJ1 ZGR5IGFuZCBNdWx0aVNpdGUgaW1wb3J0IGZlYXR1cmVzLg0KICoJRXhwZWN0cyBkYXRhYmFzZSB0byBh bHJlYWR5IGJlIHNldCB1cCBhbmQgaW5pdGlhbGl6ZWQuDQogKgkNCiAqCVZlcnNpb246IDEuMC4wDQog KglBdXRob3I6IER1c3RpbiBCb2x0b24NCiAqCUF1dGhvciBVUkk6IGh0dHA6Ly9kdXN0aW5ib2x0b24u Y29tLw0KICoNCiAqCUBwYXJhbQkJJHN0YXR1c19jYWxsYmFjawkJb2JqZWN0CQlPcHRpb25hbCBvYmpl Y3QgY29udGFpbmluZyB0aGUgc3RhdHVzKCkgZnVuY3Rpb24gZm9yIHJlcG9ydGluZyBiYWNrIGluZm9y bWF0aW9uLg0KICoJQHJldHVybgkJbnVsbA0KICoNCiAqLw0KaWYgKCFjbGFzc19leGlzdHMoInBsdWdp bmJ1ZGR5X2RiaW1wb3J0IikpIHsNCgljbGFzcyBwbHVnaW5idWRkeV9kYmltcG9ydCB7DQoJCXZhciAk X3ZlcnNpb24gPSAnMS4wJzsNCgkJdmFyICRfb3B0aW9ucyA9IGFycmF5KA0KCQkJCQkJCSd6aXBfaWQn CQkJCT0+CQknJywNCgkJCQkJCQknZGJfc2VydmVyJwkJCQk9PgkJJ2xvY2FsaG9zdCcsDQoJCQkJCQkJ J2RiX25hbWUnCQkJCT0+CQknJywNCgkJCQkJCQknZGJfdXNlcicJCQkJPT4JCScnLA0KCQkJCQkJCSdk Yl9wYXNzd29yZCcJCQk9PgkJJycsDQoJCQkJCQkJJ2RiX3ByZWZpeCcJCQkJPT4JCScnLA0KCQkJCQkJ CSdvbGRfcHJlZml4JwkJCT0+CQknJywNCgkJCQkJCQknbWF4X2V4ZWN1dGlvbl90aW1lJwk9PgkJJzMw JywNCgkJCQkJCQkpOw0KCQkNCgkJDQoJCS8qKg0KCQkgKglfX2NvbnN0cnVjdCgpDQoJCSAqCQ0KCQkg KglEZWZhdWx0IGNvbnN0cnVjdG9yLiBTZXRzIHVwIG9wdGlvbmFsIHN0YXR1cygpIGZ1bmN0aW9uIGNs YXNzIGlmIGFwcGxpY2FibGUuDQoJCSAqCQ0KCQkgKglAcGFyYW0JCWFycmF5CQkkb3B0aW9ucwkJCQlB cnJheSBvZiBvcHRpb25zLg0KCQkgKglAcGFyYW0JCXJlZmVyZW5jZQkmJHN0YXR1c19jYWxsYmFjawkJ W29wdGlvbmFsXSBSZWZlcmVuY2UgdG8gdGhlIGNsYXNzIGNvbnRhaW5pbmcgdGhlIHN0YXR1cygpIGZ1 bmN0aW9uIGZvciBzdGF0dXMgdXBkYXRlcy4NCgkJICoJQHBhcmFtCQlib29sZWFuCQkkaWdub3JlX3Nx bF9lcnJvcnMJCUlmIHRydWUgdGhlbiBhbnkgU1FMIGVycm9ycyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQg dG8gdGhlIHVzZXIuIERlZmF1bHQ6IGZhbHNlDQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJICov DQoJCWZ1bmN0aW9uIF9fY29uc3RydWN0KCAkb3B0aW9ucywgJiRzdGF0dXNfY2FsbGJhY2sgPSAnJywg JGlnbm9yZV9zcWxfZXJyb3JzID0gZmFsc2UgKSB7DQoJCQkkdGhpcy0+X29wdGlvbnMgPSBhcnJheV9t ZXJnZSggJHRoaXMtPl9vcHRpb25zLCAkb3B0aW9ucyApOw0KCQkJJHRoaXMtPnN0YXR1c19jYWxsYmFj ayA9ICYkc3RhdHVzX2NhbGxiYWNrOw0KCQkJJHRoaXMtPl9pZ25vcmVfc3FsX2Vycm9ycyA9ICRpZ25v cmVfc3FsX2Vycm9yczsNCgkJCQ0KCQkJaWYgKA0KCQkJCSggJHRoaXMtPl9vcHRpb25zWyd6aXBfaWQn XSA9PSAnJyApDQoJCQkJfHwNCgkJCQkoICR0aGlzLT5fb3B0aW9uc1snZGJfc2VydmVyJ10gPT0gJycg KQ0KCQkJCXx8DQoJCQkJKCAkdGhpcy0+X29wdGlvbnNbJ2RiX25hbWUnXSA9PSAnJyApDQoJCQkJfHwN CgkJCQkoICR0aGlzLT5fb3B0aW9uc1snZGJfdXNlciddID09ICcnICkNCgkJCQl8fA0KCQkJCSggJHRo aXMtPl9vcHRpb25zWydkYl9wYXNzd29yZCddID09ICcnICkNCgkJCQl8fA0KCQkJCSggJHRoaXMtPl9v cHRpb25zWydkYl9wcmVmaXgnXSA9PSAnJyApDQoJCQkJfHwNCgkJCQkoICR0aGlzLT5fb3B0aW9uc1sn b2xkX3ByZWZpeCddID09ICcnICkNCgkJCSAgICkgew0KCQkJCWRpZSggJ0Vycm9yICM4NDM4OTM0OTg0 OiBkYmltcG9ydCBjbGFzcyBtaXNzaW5nIG9wdGlvbiBpbiBjb25zdHJ1Y3RvciAkb3B0aW9ucyB2YXJp YWJsZS4nICk7DQoJCQl9DQoJCQkNCgkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgJ01heGltdW0g ZXhlY3V0aW9uIHRpbWUgZm9yIHRoaXMgcnVuOiAnIC4gJHRoaXMtPl9vcHRpb25zWydtYXhfZXhlY3V0 aW9uX3RpbWUnXSAuICcgc2Vjb25kcy4nICk7DQoJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICdP bGQgcHJlZml4OiAnIC4gJHRoaXMtPl9vcHRpb25zWydvbGRfcHJlZml4J10gLiAnOyBuZXcgcHJlZml4 OiAnIC4gJHRoaXMtPl9vcHRpb25zWydkYl9wcmVmaXgnXSApOw0KCQkJDQoJCQkvLyBicmVha3MgZm9y IHNvbWUgcmVhc29uOiAkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICdJbXBvcnQgcmVwbGFjZSBzZXR0 aW5nczogJyAuIGh0bWxlbnRpdGllcyggcHJpbnRfciggJHRoaXMtPl9vcHRpb25zLCB0cnVlICkgKSAp Ow0KCQl9DQoJCQ0KCQkNCgkJLyoqDQoJCSAqCXN0YXR1cygpDQoJCSAqCQ0KCQkgKglQYXNzIHN0YXR1 cyBiYWNrIHRvIGNhbGxiYWNrIGNsYXNzLiBJZiB0aGVyZSBpcyBubyBjYWxsYmFjayB0aGVuIHRoaXMg dGhpcyBpcyBpZ25vcmVkLg0KCQkgKgkNCgkJICoJQHBhcmFtCQlzdHJpbmcJCSR0YWJsZQkJU3RhdHVz IG1lc3NhZ2UgdHlwZS4NCgkJICoJQHBhcmFtCQlzdHJpbmcJCSRtZXNzYWdlCVN0YXR1cyBtZXNzYWdl Lg0KCQkgKglAcmV0dXJuCQludWxsDQoJCSAqDQoJCSAqLw0KCQlmdW5jdGlvbiBzdGF0dXMoICR0eXBl ID0gJycsICRtZXNzYWdlID0gJycgKSB7DQoJCQlpZiAoIGlzc2V0KCAkdGhpcy0+c3RhdHVzX2NhbGxi YWNrICkgKSB7DQoJCQkJJHRoaXMtPnN0YXR1c19jYWxsYmFjay0+c3RhdHVzKCAkdHlwZSwgJG1lc3Nh Z2UgKTsNCgkJCX0NCgkJfQ0KCQkNCgkJDQoJCS8qKg0KCQkgKglyZXN0b3JlX2RhdGFiYXNlKCkNCgkJ

ICoNCgkJICoJUHJlc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHdpdGhpbiAkdGhpcy0+X29wdGlv bnMgYmVmb3JlIGNvbnRpbnVpbmc6DQoJCSAqCQlkYl9zZXJ2ZXIsIGRiX3VzZXIsIGRiX3Bhc3N3b3Jk LCBkYl9uYW1lDQoJCSAqDQoJCSAqCUBwYXJhbQkJCXN0cmluZwkJJHF1ZXJ5X3N0YXJ0CQlDdXJyZW50 bHkgZG9lc250IHdvcms7DQoJCSAqCUBwYXJhbQkJCXN0cmluZwkJDQoJCSAqCUByZXR1cm4JCQltaXhl ZAkJdHJ1ZTogc3VjY2VzcywgZmFsc2U6IGZhaWx1cmUsIGludGVnZXI6IHF1ZXJ5IHRvIHN0YXJ0IG5l eHQgZGIgaW1wb3J0IGNodW5rIG9uDQoJCSAqLw0KCQlmdW5jdGlvbiByZXN0b3JlX2RhdGFiYXNlKCAk cXVlcnlfc3RhcnQgPSAwLCAkaWdub3JlX2V4aXN0aW5nID0gZmFsc2UgKSB7DQoJCQkkdGhpcy0+dGlt ZV9zdGFydCA9IG1pY3JvdGltZSggdHJ1ZSApOw0KCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCAn QmVnaW5uaW5nIGRhdGFiYXNlIGltcG9ydC4uLicgKTsNCgkJCQ0KCQkJLy8kdGhpcy0+Y29ubmVjdF9k YXRhYmFzZSgpOw0KCQkJDQoJCQkvLyBSZXF1aXJlIGEgdGFibGUgcHJlZml4Lg0KCQkJaWYgKCAkdGhp cy0+X29wdGlvbnNbJ2RiX3ByZWZpeCddID09ICcnICkgew0KCQkJCSR0aGlzLT5zdGF0dXMoICdlcnJv cicsICdFUlJPUiA5MDA4OiBBIGRhdGFiYXNlIHByZWZpeCBpcyByZXF1aXJlZCBmb3IgaW1wb3J0aW5n LiBEZXRhaWxzOiAnIC4gbXlzcWxfZXJyb3IoKSApOw0KCQkJfQ0KCQkJDQoJCQlpZiAoICRxdWVyeV9z dGFydCA+IDAgKSB7DQoJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCAnQ29udGludWluZyB0byBy ZXN0b3JlIGRhdGFiYXNlIGR1bXAgc3RhcnRpbmcgYXQgcXVlcnkgJyAuICRxdWVyeV9zdGFydCAuICcu JyApOw0KCQkJfSBlbHNlIHsNCgkJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdSZXN0b3Jpbmcg ZGF0YWJhc2UgZHVtcC4gVGhpcyBtYXkgdGFrZSBhIG1vbWVudC4uLicgKTsNCgkJCX0NCgkJCQ0KCQkJ Zmx1c2goKTsNCgkJCQ0KCQkJaWYgKCAkaWdub3JlX2V4aXN0aW5nID09PSBmYWxzZSApIHsNCgkJCQkv LyBDaGVjayBudW1iZXIgb2YgdGFibGVzIGFscmVhZHkgZXhpc3Rpbmcgd2l0aCB0aGlzIHByZWZpeC4g U2tpcHMgdGhpcyBjaGVjayBvbiBzdWJzdGVwcyBvZiBEQiBpbXBvcnQuDQoJCQkJaWYgKCAkcXVlcnlf c3RhcnQgPT0gMCApIHsNCgkJCQkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCAiU0hPVyBUQUJMRVMgTElL RSAnIiAuIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyggJHRoaXMtPl9vcHRpb25zWydkYl9wcmVmaXgn XSApIC4gIiUnIiApOw0KCQkJCQlpZiAoIG15c3FsX251bV9yb3dzKCAkcmVzdWx0ICkgPiAwICkgew0K CQkJCQkJLy9lY2hvIGV6aW1nOjpnZW5JbWFnZVRhZygnYnVsbGV0X2Vycm9yLnBuZycpLicgRm91bmQg JyAuIG15c3FsX251bV9yb3dzKCAkcmVzdWx0ICkgLiAnIGV4aXN0aW5nIHRhYmxlcyB3aXRoIHNhbWUg cHJlZml4IC4uLiBSZXN0b3JlIHN0b3BwZWQgdG8gcHJldmVudCBhY2NpZGVudGFsIG92ZXJ3cml0ZSBv ZiBleGlzdGluZyBkYXRhLic7DQoJCQkJCQkkdGhpcy0+c3RhdHVzKCAnZXJyb3InLCAnRXJyb3IgIzkw MTQ6IERhdGFiYXNlIGltcG9ydCBoYWx0ZWQgdG8gcHJldmVudCBvdmVyd3JpdGluZyBleGlzdGluZyBX b3JkUHJlc3MgZGF0YS4nLCAnVGhlIGRhdGFiYXNlIGFscmVhZHkgY29udGFpbnMgYSBXb3JkUHJlc3Mg aW5zdGFsbGF0aW9uIHdpdGggdGhpcyBwcmVmaXggKCcgLiBteXNxbF9udW1fcm93cyggJHJlc3VsdCAp IC4gJyB0YWJsZXMpLiBSZXN0b3JlIGhhcyBiZWVuIHN0b3BwZWQgdG8gcHJldmVudCBvdmVyd3JpdGlu ZyBleGlzdGluZyBkYXRhLiBQbGVhc2UgZ28gYmFjayBhbmQgZW50ZXIgYSBuZXcgZGF0YWJhc2UgbmFt ZSBhbmQvb3IgcHJlZml4IE9SIHNlbGVjdCB0aGUgb3B0aW9uIHRvIHdpcGUgdGhlIGRhdGFiYXNlIHBy aW9yIHRvIGltcG9ydCBmcm9tIHRoZSBhZHZhbmNlZCBzZXR0aW5ncyBvbiB0aGUgZmlyc3QgaW1wb3J0 IHN0ZXAuJyApOw0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9DQoJCQkJCXVuc2V0KCAkcmVzdWx0 ICk7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkvLyBJbXBvcnQgU1FMIGR1bXAgb250byBuZXcgc2VydmVy LiBOT1RFOiBUaGlzIGRhdGEgaGFzIE5PVCBiZWVuIG1pZ3JhdGVkLiBJdCBpcyBpZGVudGljYWwgdG8g dGhlIHNvdXJjZSBzZXJ2ZXIgc3RpbGwgYXQgdGhpcyBwb2ludC4NCgkJCSRpbXBvcnRfcmVzdWx0ID0g JHRoaXMtPmltcG9ydF9zcWxfZHVtcCggJHF1ZXJ5X3N0YXJ0ICk7DQoJCQkNCgkJCS8vIENMRUFOVVAN CgkJCW15c3FsX2Nsb3NlKCk7DQoJCQkNCgkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgJ0RhdGFi YXNlIGltcG9ydCBjb21wbGV0ZS4nICk7DQoJCQkNCgkJCXJldHVybiAkaW1wb3J0X3Jlc3VsdDsNCgkJ fQ0KCQkNCgkJDQoJCS8qKg0KCQkgKglpbXBvcnRfc3FsX2R1bXAoKQ0KCQkgKg0KCQkgKglEaXJlY3Rs eSBpbnNlcnRzIHRoZSBzb3VyY2UgU1FMIGR1bXAgaW50byB0aGUgbmV3IGRhdGFiYXNlLg0KCQkgKglE b2VzIE5PVCBtb2RpZnkgYW55IGRhdGEgb3IgZG8gYW55IG1pZ3JhdGlvbi4NCgkJICoNCgkJICoJQHJl dHVybgkJYm9vbGVhbgkJVHJ1ZTogc3VjY2VzcywgRmFsc2U6IGZhaWxlZC4NCgkJICoNCgkJICovDQoJ CWZ1bmN0aW9uIGltcG9ydF9zcWxfZHVtcCggJHF1ZXJ5X3N0YXJ0ID0gMCApIHsNCgkJCS8vIFRPRE86 IGRlYnVnZ2luZw0KCQkJLy8kcXVlcnlfc3RhcnQgPSA4Mzk7DQoJCQkkdGhpcy0+c3RhdHVzKCAnbWVz c2FnZScsICdTdGFydGluZyBpbXBvcnQgb2YgU1FMIGRhdGEuLi4gVGhpcyBtYXkgdGFrZSBhIG1vbWVu dC4uLicgKTsNCgkJCQ0KCQkJJGZpbGVfc3RyZWFtID0gZmFsc2U7IC8vIERlZmF1bHQgc3RhdGUuDQoJ CQlpZiAoIGZpbGVfZXhpc3RzICggQUJTUEFUSCAuICd3cC1jb250ZW50L3VwbG9hZHMvdGVtcF8nIC4g JHRoaXMtPl9vcHRpb25zWyd6aXBfaWQnXSAuICcvZGIuc3FsJyApICkgeyAvLyBGdWxsIGJhY2t1cCBm b3VuZC4NCgkJCQkkZmlsZV9zdHJlYW0gPSBmb3BlbiggQUJTUEFUSCAuICd3cC1jb250ZW50L3VwbG9h ZHMvdGVtcF8nLiR0aGlzLT5fb3B0aW9uc1snemlwX2lkJ10uJy9kYi5zcWwnLCAncicgKTsNCgkJCX0g ZWxzZWlmICggZmlsZV9leGlzdHMgKCBBQlNQQVRIIC4gJ2RiLnNxbCcgKSApIHsgLy8gREItb25seSBi YWNrdXAgZm91bmQuDQoJCQkJJGZpbGVfc3RyZWFtID0gZm9wZW4oIEFCU1BBVEggLiAnZGIuc3FsJywg J3InICk7DQoJCQl9IGVsc2VpZiAoIGZpbGVfZXhpc3RzICggQUJTUEFUSCAuICd3cC1jb250ZW50L3Vw bG9hZHMvYmFja3VwYnVkZHlfdGVtcC8nIC4gJHRoaXMtPl9vcHRpb25zWyd6aXBfaWQnXSAuICcvZGJf MS5zcWwnICkgKSB7IC8vIEZ1bGwgYmFja3VwIGZvdW5kLiAyLjAgbWV0aG9kLg0KCQkJCSRmaWxlX3N0 cmVhbSA9IGZvcGVuKCBBQlNQQVRIIC4gJ3dwLWNvbnRlbnQvdXBsb2Fkcy9iYWNrdXBidWRkeV90ZW1w LycgLiAkdGhpcy0+X29wdGlvbnNbJ3ppcF9pZCddIC4gJy9kYl8xLnNxbCcsICdyJyApOw0KCQkJfSBl

bHNlaWYgKCBmaWxlX2V4aXN0cyAoIEFCU1BBVEggLiAnZGJfMS5zcWwnICkgKSB7IC8vIERCLW9ubHkg YmFja3VwIGZvdW5kLiAyLjAgbWV0aG9kLg0KCQkJCSRmaWxlX3N0cmVhbSA9IGZvcGVuKCBBQlNQQVRI IC4gJ2RiXzEuc3FsJywgJ3InICk7DQoJCQl9ICBlbHNlaWYgKCBmaWxlX2V4aXN0cyAoIEFCU1BBVEgg LiAnd3AtY29udGVudC91cGxvYWRzL2JhY2t1cGJ1ZGR5X3RlbXAvaW1wb3J0XycgLiAkdGhpcy0+X29w dGlvbnNbJ3ppcF9pZCddIC4gJy93cC1jb250ZW50L3VwbG9hZHMvYmFja3VwYnVkZHlfdGVtcC8nIC4g JHRoaXMtPl9vcHRpb25zWyd6aXBfaWQnXSAuICcvZGJfMS5zcWwnICkgKSB7IC8vIE11bHRpc2l0ZSBp bXBvcnQuDQoJCQkJJGZpbGVfc3RyZWFtID0gZm9wZW4oIEFCU1BBVEggLiAnd3AtY29udGVudC91cGxv YWRzL2JhY2t1cGJ1ZGR5X3RlbXAvaW1wb3J0XycgLiAkdGhpcy0+X29wdGlvbnNbJ3ppcF9pZCddIC4g Jy93cC1jb250ZW50L3VwbG9hZHMvYmFja3VwYnVkZHlfdGVtcC8nIC4gJHRoaXMtPl9vcHRpb25zWyd6 aXBfaWQnXSAuICcvZGJfMS5zcWwnLCAncicgKTsNCgkJCX0gIGVsc2VpZiAoIGZpbGVfZXhpc3RzICgg JHRoaXMtPl9vcHRpb25zWydkYXRhYmFzZV9kaXJlY3RvcnknXSAuICdkYl8xLnNxbCcgKSApIHsgLy8g TXVsdGlzaXRlIGltcG9ydC4NCgkJCQkkZmlsZV9zdHJlYW0gPSBmb3BlbiggJHRoaXMtPl9vcHRpb25z WydkYXRhYmFzZV9kaXJlY3RvcnknXSAuICdkYl8xLnNxbCcsICdyJyApOw0KCQkJfQ0KCQkJDQoJCQlp ZiAoIGZhbHNlID09PSAkZmlsZV9zdHJlYW0gKSB7DQoJCQkJLy8kdGhpcy0+YWxlcnQoICdFUlJPUjog VW5hYmxlIHRvIGZpbmQgYW55IGRhdGFiYXNlIGJhY2t1cCBkYXRhIGluIHRoZSBzZWxlY3RlZCBiYWNr dXAuJywgdHJ1ZSwgJzkwMDknICk7DQoJCQkJJHRoaXMtPnN0YXR1cyggJ2Vycm9yJywgJ0Vycm9yICM5 MDA5OiBVbmFibGUgdG8gZmluZCBhbnkgZGF0YWJhc2UgYmFja3VwIGRhdGEgaW4gdGhlIHNlbGVjdGVk IGJhY2t1cC4gRXJyb3IgIzkwMDkuJyApOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCQ0KCQkJ Ly8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggZnVsbCByb3cgYWN0aW9uIGFuZCBpbXBvcnQgaXQgb25lIGF0 IGEgdGltZS4NCgkJCQ0KCQkJJHF1ZXJ5X2NvdW50ID0gMDsNCgkJCSRmaWxlX2RhdGEgPSAnJzsNCgkJ CQ0KCQkJd2hpbGUgKCAhIGZlb2YoICRmaWxlX3N0cmVhbSApICkgew0KCQkJDQoJCQkJd2hpbGUgKCBm YWxzZSA9PT0gc3RycG9zKCAkZmlsZV9kYXRhLCAiXG4iICkgKSB7DQoJCQkJCSRmaWxlX2RhdGEgLj0g ZnJlYWQoICRmaWxlX3N0cmVhbSwgNDA5NiApOw0KCQkJCX0NCgkJCQkNCgkJCQkkcXVlcmllcyA9IGV4 cGxvZGUoICJcbiIsICRmaWxlX2RhdGEgKTsNCgkJCQkNCgkJCQlpZiAoIHByZWdfbWF0Y2goICIvXG4k LyIsICRmaWxlX2RhdGEgKSApIHsNCgkJCQkJJGZpbGVfZGF0YSA9ICcnOw0KCQkJCX0gZWxzZSB7DQoJ CQkJCSRmaWxlX2RhdGEgPSBhcnJheV9wb3AoICRxdWVyaWVzICk7DQoJCQkJfQ0KCQkJCQ0KCQkJCS8v IFRPRE86IERFQlVHR0lORzoNCgkJCQkvLyR0aGlzLT5fb3B0aW9uc1snbWF4X2V4ZWN1dGlvbl90aW1l J10gPSAwLjQxOw0KCQkJCQ0KCQkJCS8vIExvb3BzIHRocm91Z2ggZWFjaCBmdWxsIHF1ZXJ5Lg0KCQkJ CWZvcmVhY2ggKCAoYXJyYXkpICRxdWVyaWVzIGFzICRxdWVyeSApIHsNCgkJCQkJaWYgKCAkcXVlcnlf Y291bnQgPCAoICRxdWVyeV9zdGFydCAtIDEgKSApIHsgLy8gSGFuZGxlIHNraXBwaW5nIGFueSBxdWVy aWVzIHVwIHRvIHRoZSBwb2ludCB3ZSBhcmUgYXQuDQoJCQkJCQkkcXVlcnlfY291bnQrKzsNCgkJCQkJ CWNvbnRpbnVlOyAvLyBDb250aW51ZSB0byBuZXh0IGZvcmVhY2ggaXRlcmF0aW9uLg0KCQkJCQl9IGVs c2Ugew0KCQkJCQkJJHF1ZXJ5X2NvdW50Kys7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCSRxdWVyeSA9IHRy aW0oICRxdWVyeSApOw0KCQkJCQkNCgkJCQkJaWYgKCBlbXB0eSggJHF1ZXJ5ICkgKSB7DQoJCQkJCQlj b250aW51ZTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJJHJlc3VsdCA9ICR0aGlzLT5pbXBvcnRfc3FsX2R1 bXBfbGluZSggJHF1ZXJ5ICk7DQoJCQkJCQ0KCQkJCQlpZiAoIGZhbHNlID09PSAkcmVzdWx0ICkgeyAv LyBTa2lwcGVkIHF1ZXJ5DQoJCQkJCQljb250aW51ZTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYgKCAw ID09PSAoICRxdWVyeV9jb3VudCAlIDIwMDAgKSApIHsgLy8gRGlzcGxheSBXb3JraW5nIGV2ZXJ5IDE1 MDAgcXVlcmllcyBpbXBvcnRlZC4NCgkJCQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgJ1dvcmtp bmcuLi4nICk7DQoJCQkJCX0NCgkJCQkJLyoNCgkJCQkJaWYgKCAwID09PSAoICRxdWVyeV9jb3VudCAl IDYwMDAgKSApIHsNCgkJCQkJCWVjaG8gIjxicj5cbiI7DQoJCQkJCX0NCgkJCQkJKi8NCgkJCQkJDQoJ CQkJCS8vIElmIHdlIGFyZSB3aXRoaW4gMSBzZWNvbmQgb2YgcmVhY2hpbmcgbWF4aW11bSBQSFAgcnVu dGltZSB0aGVuIHN0b3AgaGVyZSBzbyB0aGF0IGl0IGNhbiBiZSBwaWNrZWQgdXAgaW4gYW5vdGhlciBQ SFAgcHJvY2Vzcy4uLg0KCQkJCQlpZiAoICggKCBtaWNyb3RpbWUoIHRydWUgKSAtICR0aGlzLT50aW1l X3N0YXJ0ICkgKyAxICkgPj0gJHRoaXMtPl9vcHRpb25zWydtYXhfZXhlY3V0aW9uX3RpbWUnXSApIHsN CgkJCQkJLy8gVE9ETzogRGVidWdnaW5nOg0KCQkJCQkvL2lmICggKCAoIG1pY3JvdGltZSggdHJ1ZSAp IC0gJHRoaXMtPnRpbWVfc3RhcnQgKSApID49ICR0aGlzLT5fb3B0aW9uc1snbWF4X2V4ZWN1dGlvbl90 aW1lJ10gKSB7DQoJCQkJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdFeGhhdXN0ZWQgYXZhaWxh YmxlIFBIUCB0aW1lIHRvIGltcG9ydCBmb3IgdGhpcyBwYWdlIGxvYWQuIExhc3QgcXVlcnk6ICcgLiAk cXVlcnlfY291bnQgLiAnLicgKTsNCgkJCQkJCQ0KCQkJCQkJZmNsb3NlKCAkZmlsZV9zdHJlYW0gKTsN CgkJCQkJCQ0KCQkJCQkJcmV0dXJuICggJHF1ZXJ5X2NvdW50ICsgMSApOw0KCQkJCQkJLy9icmVhayAy Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KCQkJDQoJCQlmY2xvc2UoICRmaWxlX3N0cmVhbSAp Ow0KCQkJDQoJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdJbXBvcnQgb2YgU1FMIGRhdGEgY29t cGxldGUuJyApOwkJCQ0KCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCAnVG9vayAnIC4gcm91bmQo IG1pY3JvdGltZSggdHJ1ZSApIC0gJHRoaXMtPnRpbWVfc3RhcnQsIDMgKSAuICcgc2Vjb25kcyBvbiAn IC4gJHF1ZXJ5X2NvdW50IC4gJyBxdWVyaWVzLiAnICk7DQoJCQkNCgkJCXJldHVybiB0cnVlOw0KCQl9 DQoJCQ0KCQkNCgkJLyoqDQoJCSAqCWltcG9ydF9zcWxfZHVtcF9saW5lKCkNCgkJICoNCgkJICoJSW1w b3J0cyBhIGxpbmUvcXVlcnkgaW50byB0aGUgZGF0YWJhc2UuDQoJCSAqCUhhbmRsZXMgdXNpbmcgdGhl IHNwZWNpZmllZCB0YWJsZSBwcmVmaXguDQoJCSAqDQoJCSAqCSRxdWVyeQkJc3RyaW5nCQlRdWVyeSBz dHJpbmcgdG8gcnVuIGZvciBpbXBvcnRpbmcuDQoJCSAqCUByZXR1cm4JCWJvb2xlYW4JCVRydWU9c3Vj

Y2VzcywgRmFsc2U9ZmFpbGVkLg0KCQkgKg0KCQkgKi8NCgkJZnVuY3Rpb24gaW1wb3J0X3NxbF9kdW1w X2xpbmUoICRxdWVyeSApIHsNCgkJCS8vJG9sZF9wcmVmaXggPSAkdGhpcy0+X2JhY2t1cGRhdGFbJ2Ri X3ByZWZpeCddOw0KCQkJJG9sZF9wcmVmaXggPSAkdGhpcy0+X29wdGlvbnNbJ29sZF9wcmVmaXgnXTsN CgkJCSRuZXdfcHJlZml4ID0gJHRoaXMtPl9vcHRpb25zWydkYl9wcmVmaXgnXTsNCgkJCQ0KCQkJJHF1 ZXJ5X29wZXJhdG9ycyA9ICdJTlNFUlQgSU5UT3xDUkVBVEUgVEFCTEV8UkVGRVJFTkNFU3xDT05TVFJB SU5UJzsNCgkJCQ0KCQkJLy8gUmVwbGFjZSBkYXRhYmFzZSBwcmVmaXggaW4gcXVlcnkuDQoJCQlpZiAo ICRvbGRfcHJlZml4ICE9PSAkbmV3X3ByZWZpeCApIHsNCgkJCQkkcXVlcnkgPSBwcmVnX3JlcGxhY2Uo ICIvXigkcXVlcnlfb3BlcmF0b3JzKShccytgPykkb2xkX3ByZWZpeC9pIiwgIlwkezF9XCR7Mn0kbmV3 X3ByZWZpeCIsICRxdWVyeSApOyAvLyA0LTI5LTExDQoJCQl9DQoJCQkNCgkJCS8vIFJ1biB0aGUgcXVl cnkNCgkJCS8vIERpc2FibGVkIHRvIHByZXZlbnQgZnJvbSBydW5uaW5nIG9uIEVWRVJZIGxpbmUuIE5v dyBqdXN0IHJ1bm5pbmcgYmVmb3JlIHRoaXMuIG15c3FsX3F1ZXJ5KCJTRVQgTkFNRVMgJ3V0ZjgnIik7 IC8vIEZvcmNlIFVURjgNCgkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSggJHF1ZXJ5ICk7DQoJCQkNCgkJ CWlmICggZmFsc2UgPT09ICRyZXN1bHQgKSB7DQoJCQkJaWYgKCAkdGhpcy0+X2lnbm9yZV9zcWxfZXJy b3JzICE9PSB0cnVlICkgew0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZXJyb3InLCAnRXJyb3IgIzkwMTA6 IFVuYWJsZSB0byBpbXBvcnQgU1FMIHF1ZXJ5OiAnIC4gbXlzcWxfZXJyb3IoKSApOw0KCQkJCX0NCgkJ CQlyZXR1cm4gZmFsc2U7DQoJCQl9IGVsc2Ugew0KCQkJCXJldHVybiB0cnVlOw0KCQkJfQ0KCQl9DQoJ CQ0KCQkNCgl9IC8vIGVuZCBwbHVnaW5idWRkeV9kYmltcG9ydCBjbGFzcy4NCn0NCj8+ ###PACKDATA,FILE_END,/lib/dbimport/dbimport.php,importbuddy/lib/dbimport/dbimpor t.php ###PACKDATA,FILE_START,/lib/zipbuddy/history.txt,importbuddy/lib/zipbuddy/histor y.txt Mi4wLjAgLSAyMDExLTEwLTA4IC0gRHVzdGluIEJvbHRvbg0KCUFkZGVkIGhpc3RvcnkudHh0Lg0KCUFk ZGVkIHVuemlwIGZ1bmN0aW9uYWxpdHku ###PACKDATA,FILE_END,/lib/zipbuddy/history.txt,importbuddy/lib/zipbuddy/history. txt ###PACKDATA,FILE_START,/lib/zipbuddy/x-zipbuddy.php,importbuddy/lib/zipbuddy/x-z ipbuddy.php PD9waHANCi8qKg0KICoJcGx1Z2luYnVkZHlfemlwYnVkZHkgQ2xhc3MgKEV4cGVyaW1lbnRhbCkNCiAq DQogKglIYW5kbGVzIHppcHBpbmcgYW5kIHVuemlwcGluZywgdXNpbmcgdGhlIGJlc3QgbWV0aG9kcyBh dmFpbGFibGUgYW5kIGZhbGxpbmcgYmFjayB0byB3b3JzZSBtZXRob2RzDQogKglhcyBuZWVkZWQgZm9y IGNvbXBhdGliaWxpdHkuIEFsbG93cyBmb3IgZm9yY2luZyBjb21wYXRpYmlsaXR5IG1vZGVzLg0KICoJ DQogKglWZXJzaW9uOiAxLjAuMA0KICoJQXV0aG9yOiANCiAqCUF1dGhvciBVUkk6IA0KICoNCiAqDQog Ki8NCmlmICggIWNsYXNzX2V4aXN0cyggInBsdWdpbmJ1ZGR5X3ppcGJ1ZGR5IiApICkgew0KDQoJY2xh c3MgcGx1Z2luYnVkZHlfemlwYnVkZHkgew0KCQ0KCQljb25zdCBaSVBfTUVUSE9EU19UUkFOU0lFTlQg PSAncGx1Z2luYnVkZHlfYmFja3VwYnVkZHlfYXZhaWxfemlwX21ldGhvZHMnOw0KCQljb25zdCBaSVBf TUVUSE9EU19UUkFOU0lFTlRfTElGRSA9IDYwOw0KDQogICAgCS8qKg0KICAgICAgICAgKiBwYXJlbnQg b2JqZWN0DQogICAgICAgICAqIA0KICAgICAgICAgKiBAdmFyIG9iamVjdA0KICAgICAgICAgKi8NCiAg ICAgICAgcHJvdGVjdGVkICRfcGFyZW50ID0gTlVMTDsNCg0KICAgICAgICAvKioNCiAgICAgICAgICog VGhlIHBsdWdpbiBwYXRoIGZvciB0aGlzIHBsdWdpbg0KICAgICAgICAgKiANCiAgICAgICAgICogQHZh ciBzdHJpbmcNCiAgICAgICAgICovDQogICAgICAgIHB1YmxpYyAkX3BsdWdpblBhdGggPSAnJzsNCg0K ICAgICAgICAvKioNCiAgICAgICAgICogVGhlIHBhdGggb2YgdGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnkg dGhhdCBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgZmlsZXMgYW5kIHN0dWZmDQogICAgICAgICAqIA0K ICAgICAgICAgKiBAdmFyIHN0cmluZw0KICAgICAgICAgKi8NCiAgICAgICAgcHJvdGVjdGVkICRfdGVt cGRpciA9ICIiOw0KICAgICAgICANCiAgICAgICAgLyoqDQogICAgICAgICAqIFRoZSBsaXN0IG9mIHpp cCBtZXRob2RzIHRoYXQgYXJlIHJlcXVlc3RlZCB0byBiZSB1c2VkDQogICAgICAgICAqIA0KICAgICAg ICAgKiBAdmFyIGFycmF5IG9mIHN0cmluZw0KICAgICAgICAgKi8NCiAgICAgICAgcHJvdGVjdGVkICRf cmVxdWVzdGVkX3ppcF9tZXRob2RzID0gYXJyYXkoKTsNCg0KICAgICAgICAvKioNCiAgICAgICAgICog VGhlIG1vZGUgd2hpY2ggdGhlIG9iamVjdCBpcyBiZWluZyBjcmVhdGVkIGZvcg0KICAgICAgICAgKiAN CiAgICAgICAgICogQHZhciBzdHJpbmcNCiAgICAgICAgICovDQogICAgICAgIHByb3RlY3RlZCAkX21v ZGUgPSAiIjsNCg0KICAgICAgICAvKioNCiAgICAgICAgICogU3RhdHVzIG1lc3NhZ2UgYXJyYXkgdXNl ZCB3aGVuIGNhbGxpbmcgb3RoZXIgbWV0aG9kcyB0byBnZXQgc3RhdHVzIGluZm9ybWF0aW9uIGJhY2sN CiAgICAgICAgICogDQogICAgICAgICAqIEB2YXIgYXJyYXkgb2Ygc3RyaW5nDQogICAgICAgICAqLw0K ICAgICAgICBwdWJsaWMgJF9zdGF0dXMgPSBhcnJheSgpOw0KDQogICAgICAgIC8qKg0KICAgICAgICAg KiBUaGUgbGlzdCBvZiB6aXAgbWV0aG9kcyB0aGF0IGFyZSB0byBiZSB1c2VkIG9yIGFyZSBhdmFpbGFi bGUNCiAgICAgICAgICogSGFkIHRvIG1ha2UgdGhpcyBwdWJsaWMgZm9yIG5vdyBiZWNhdXNlIHNvbWV0 aGluZyBhY2Nlc3NlcyBpdCBkaXJlY3RseSAtIGJhZCBrYXJtYQ0KICAgICAgICAgKiANCiAgICAgICAg ICogQHZhciBhcnJheSBvZiBzdHJpbmcNCiAgICAgICAgICovDQogICAgICAgIHB1YmxpYyAkX3ppcF9t ZXRob2RzID0gYXJyYXkoKTsNCiAgICAgICAgDQogICAgICAgIC8qKg0KICAgICAgICAgKiBUaGUgZGV0 YWlscyBvZiB0aGUgdmFyaW91cyB6aXAgbWV0aG9kcyB0aGF0IGFyZSBhdmFpbGFibGUNCiAgICAgICAg ICogSGF2ZSB0byBtYWtlIHRoaXMgYSBzZXBhcmF0ZSBhcnJheSBpbmRleGVkIGJ5IHRoZSBtZXRob2Qg

dGFnLiBJZGVhbGx5IHdvdWxkIGJlIGNvbWJpbmVkDQogICAgICAgICAqIHdpdGggdGhlIHppcCBtZXRo b2RzIGFycmF5IGJ1dCB0aGF0IHdvdWxkIGludm9sdmUgbW9yZSBnZW5lcmFsIGNoYW5nZXMgZWxzZXdo ZXJlIHNvIHRoYXQNCiAgICAgICAgICogcmVmYWN0b3JpbmcgY2FuIGJlIGRvbmUgbGF0ZXIgLSBtYWlu IHByb2JsZW0gaXMgdGhlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHppcCBtZXRob2RzDQogICAgICAgICAq IGFycmF5IHRoYXQgaXMgbWFkZSByYXRoZXIgdGhhbiB0aHJvdWdoIGEgZnVuY3Rpb24uDQogICAgICAg ICAqIA0KICAgICAgICAgKiBAdmFyIGFycmF5IG9mIGFycmF5IG9mIGFycmF5DQogICAgICAgICAqLw0K ICAgICAgICBwcm90ZWN0ZWQgJF96aXBfbWV0aG9kc19kZXRhaWxzID0gYXJyYXkoKTsNCiAgICAgICAg DQogICAgICAgIC8qKg0KICAgICAgICAgKiBUaGUgbGlzdCBvZiB6aXAgbWV0aG9kcyB0aGF0IGFyZSBz dXBwb3J0ZWQsIGkuZS4sIHRoZXJlIGlzIGEgc3VwcG9ydGluZyBjbGFzcyBkZWZpbmVkDQogICAgICAg ICAqIA0KICAgICAgICAgKiBAdmFyIGFycmF5IG9mIHN0cmluZw0KICAgICAgICAgKi8NCiAgICAgICAg cHJvdGVjdGVkICRfc3VwcG9ydGVkX3ppcF9tZXRob2RzID0gYXJyYXkoKTsNCg0KICAgICAgICAvKioN CiAgICAgICAgICogV2hldGhlciBvciBub3Qgd2UgY2FuIGNhbGwgYSBzdGF0dXMgY2FsYmFjaw0KICAg ICAgICAgKiANCiAgICAgICAgICogQHZhciBib29sDQogICAgICAgICAqLw0KCQlwcm90ZWN0ZWQgJF9o YXZlX3N0YXR1c19jYWxsYmFjayA9IGZhbHNlOw0KCQkNCiAgICAgICAgLyoqDQogICAgICAgICAqIE9i amVjdC0+bWV0aG9kIGFycmF5IGZvciBzdGF0dXMgZnVuY3Rpb24NCiAgICAgICAgICogDQogICAgICAg ICAqIEB2YXIgYXJyYXkNCiAgICAgICAgICovDQoJCXByb3RlY3RlZCAkX3N0YXR1c19jYWxsYmFjayA9 IGFycmF5KCk7DQoJCQ0KCQkvKioNCgkJICoJX19jb25zdHJ1Y3QoKQ0KCQkgKgkNCgkJICoJRGVmYXVs dCBjb25zdHJ1Y3Rvci4NCgkJICoJDQoJCSAqCUBwYXJhbQkJc3RyaW5nCQlUaGUgcGF0aCBvZiB0aGUg dGVtcG9yYXJ5IGRpcmVjdG9yeSB0byB1c2UNCgkJICoJQHBhcmFtCQlzdHJpbmcJCVRoZSBsaXN0IG9m IHppcCBtZXRob2RzIHJlcXVlc3RlZCB0byB1c2UgKHRoaXMgc2hvdWxkIGJlIGFuIGFycmF5IHJlYWxs eSkNCgkJICoJQHBhcmFtCQlzdHJpbmcJCVRoZSB6aXAgbW9kZSBmb3IgdGggZW9iamVjdA0KCQkgKglA cGFyYW0JCXJlZmVyZW5jZQlbb3B0aW9uYWxdIFJlZmVyZW5jZSB0byB0aGUgcGFyZW50DQoJCSAqCUBy ZXR1cm4JCW51bGwNCgkJICoNCgkJICovDQoJCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCggJHRl bXBfZGlyLCAkemlwX21ldGhvZHMgPSAnJywgJG1vZGUgPSAnemlwJywgJiRwYXJlbnQgPSBOVUxMICkg ew0KDQoJCQkkdGhpcy0+X3RlbXBkaXIgPSAkdGVtcF9kaXI7DQoJCQkkdGhpcy0+X21vZGUgPSAkbW9k ZTsNCgkJCSR0aGlzLT5fcGFyZW50ID0gJiRwYXJlbnQ7DQoJCQkNCgkJCS8vIE1ham9yIGtsdWRnZSB0 byBnZXQgbWUgYSBwbHVnaW4gcGF0aCBzbyBJIGNhbiBsb2FkIG90aGVyIGxpYnMgYXMgbm9ybWFsIC0g aGF2ZSB0byBkbw0KCQkJLy8gdGhpcyBiZWNhdXNlIG5vdCBwYXNzZWQgcGFyZW50IG9iamVjdCByZWZl cmVuY2UgYW5kIGNhbm5vdCBkZXJpdmUgaXQNCgkJCSR0aGlzLT5fcGx1Z2luUGF0aCA9IGRpcm5hbWUo IGRpcm5hbWUoIGRpcm5hbWUoIF9fRklMRV9fICkgKSApOw0KCQkJDQoJCQkvLyBNYWtlIHN1cmUgd2Ug bG9hZCB0aGUgY29yZSBhYnN0cmFjdCBjbGFzcyBhcyB0aGlzIHdpbGwgYWx3YXlzIGJlIG5lZWRlZA0K CQkJQHJlcXVpcmVfb25jZSggJHRoaXMtPl9wbHVnaW5QYXRoIC4gJy9saWIvemlwYnVkZHkvemJ6aXBj b3JlLnBocCcgKTsNCgkJCQ0KCQkJLy8gSWYgd2UgbG9hZGVkIHRoYXQgb2sgdGhlbiB0cnkgdGhlIG1l dGhvZCBzcGVjaWZpYyBjbGFzc2VzDQoJCQkvLyBDb3VsZCBtYWtlIHRoaXMgbW9yZSBnZW5lcmljIGJh c2VkIG9uIGNvbmZpZyBvciBzb21lc3VjaA0KCQkJaWYgKCBjbGFzc19leGlzdHMoICdwbHVnaW5idWRk eV96YnppcGNvcmUnICkgKSB7DQoJCQkNCgkJCQlAaW5jbHVkZV9vbmNlKCAkdGhpcy0+X3BsdWdpblBh dGggLiAnL2xpYi96aXBidWRkeS96YnppcHByb2MucGhwJyApOw0KCQkJCWlmICggY2xhc3NfZXhpc3Rz KCAncGx1Z2luYnVkZHlfemJ6aXBwcm9jJyApICkgew0KCQkJCQlhcnJheV9wdXNoKCAkdGhpcy0+X3N1 cHBvcnRlZF96aXBfbWV0aG9kcywgcGx1Z2luYnVkZHlfemJ6aXBwcm9jOjokX21ldGhvZF90YWcgKTsN CgkJCQl9DQoJCQkJDQoJCQkJQGluY2x1ZGVfb25jZSggJHRoaXMtPl9wbHVnaW5QYXRoIC4gJy9saWIv emlwYnVkZHkvemJ6aXBleGVjLnBocCcgKTsNCgkJCQlpZiAoIGNsYXNzX2V4aXN0cyggJ3BsdWdpbmJ1 ZGR5X3piemlwZXhlYycgKSApIHsNCgkJCQkJYXJyYXlfcHVzaCggJHRoaXMtPl9zdXBwb3J0ZWRfemlw X21ldGhvZHMsIHBsdWdpbmJ1ZGR5X3piemlwZXhlYzo6JF9tZXRob2RfdGFnICk7DQoJCQkJfQ0KCQkJ CQ0KCQkJCUBpbmNsdWRlX29uY2UoICR0aGlzLT5fcGx1Z2luUGF0aCAuICcvbGliL3ppcGJ1ZGR5L3pi emlwemlwYXJjaGl2ZS5waHAnICk7DQoJCQkJaWYgKCBjbGFzc19leGlzdHMoICdwbHVnaW5idWRkeV96 YnppcHppcGFyY2hpdmUnICkgKSB7DQoJCQkJCWFycmF5X3B1c2goICR0aGlzLT5fc3VwcG9ydGVkX3pp cF9tZXRob2RzLCBwbHVnaW5idWRkeV96YnppcHppcGFyY2hpdmU6OiRfbWV0aG9kX3RhZyApOw0KCQkJ CX0NCgkJCQkNCgkJCQlAaW5jbHVkZV9vbmNlKCAkdGhpcy0+X3BsdWdpblBhdGggLiAnL2xpYi96aXBi dWRkeS96YnppcHBjbHppcC5waHAnICk7DQoJCQkJaWYgKCBjbGFzc19leGlzdHMoICdwbHVnaW5idWRk eV96YnppcHBjbHppcCcgKSApIHsNCgkJCQkJYXJyYXlfcHVzaCggJHRoaXMtPl9zdXBwb3J0ZWRfemlw X21ldGhvZHMsIHBsdWdpbmJ1ZGR5X3piemlwcGNsemlwOjokX21ldGhvZF90YWcgKTsNCgkJCQl9DQoJ CQkJDQoJCQl9DQoNCgkJCS8vIE5lZWQgdG8gZGVhbCB3aXRoIHRoZSBzdHJpbmcgLSBvbmx5IGV4cGxv ZGUgaWYgaXQgaGFzIHNvbWUgY29udGVudA0KCQkJJHppcF9tZXRob2RzID0gdHJpbSggJHppcF9tZXRo b2RzICk7DQoJCQlpZiAoICFlbXB0eSggJHppcF9tZXRob2RzICkgKSB7DQoJCQkJLy8gVHJhbnNsYXRl IGZyb20gYSBzdHJpbmcgaW50byBhbiBhcnJheQ0KCQkJCSR0aGlzLT5fcmVxdWVzdGVkX3ppcF9tZXRo b2RzID0gYXJyYXlfbWFwKCAndHJpbScsIGV4cGxvZGUoICIsIiwgJHppcF9tZXRob2RzICkgKTsNCgkJ CX0NCg0KCQkJLy8gV29yayBvdXQgdGhlIGxpc3Qgb2YgemlwIG1ldGhvZHMgZnJvbSB0aGUgcmVxdWVz dGVkIGFuZCBhdmFpbGFibGUgYWxvbmcgd2l0aCB0aGVpciBkZXRhaWxzDQoJCQkkdGhpcy0+ZGVkdWNl X3ppcF9tZXRob2RzKCAkdGhpcy0+X3ppcF9tZXRob2RzLCAkdGhpcy0+X3ppcF9tZXRob2RzX2RldGFp bHMsICR0aGlzLT5fcmVxdWVzdGVkX3ppcF9tZXRob2RzLCBmYWxzZSwgJHRoaXMtPl9tb2RlICk7DQoJ

CQkNCgkJfQ0KCQkNCgkJDQoJCS8qKg0KCQkgKglfX2Rlc3RydWN0KCkNCgkJICoJDQoJCSAqCURlZmF1 bHQgZGVzdHJ1Y3Rvci4NCgkJICoJDQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJICovDQoJCXB1 YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCApIHsNCg0KCQl9DQoJCQ0KCQkvKioNCgkJICoJZGVkdWNl X3ppcF9tZXRob2RzKCkNCgkJICoJDQoJCSAqCVJldHVybnMgdGhlIGFycmF5IG9mIHppcCBtZXRob2Rz IHRoYXQgYXJlIGF2YWlsYWJsZSAob3IganVzdCB0aGUgYmVzdCkgZmlsdGVyZWQgYnkgcmVxdWVzdGVk IG1ldGhvZHMuDQoJCSAqCUJlY2F1c2UgdGhlIGF2YWlsYWJsZSBtZXRob2RzIGRvbid0IHJlYWxseSBj aGFuZ2Ugb2Z0ZW4gKHJhcmVseSBvbmNlIHN0YWJsZSkgd2UgdXNlIGEgdHJhbnNpZW50DQoJCSAqCXdo aWNoIGhhcyBhIGxpZmV0aW1lIG9mIDYwcyBzbyB3ZSBkb24ndCB3YXN0ZSB0aW1lIHJlcGVhdGluZyB0 aGUgdGVzdGluZyB3aGljaCBpbnZvbHZlcyBjcmVhdGluZw0KCQkgKglvYmplY3RzIGFuZCBwcm9jZXNz ZXMgYW5kIGZpbGVzIHdoaWNoIGNhbiBiZSB0aW1lIGNvbnN1bWluZy4gSW4gZnV0dXJlIHdlIGNvdWxk IG1ha2UgdGhpcyBhIGxvbmdlcg0KCQkgKglsaXZlZCB0cmFuc2llbnQgYW5kIGFuZCBwcm92aWRlIGEg bWFudWFsIHdheSB0byBkZWxldGUgaXQgaWYgd2UgbmVlZCB0byByZWZyZXNoIHRoZSBsaXN0Lg0KCQkg KgkNCgkJICoJQHBhcmFtCQlhcnJheQlBcnJheSByZWZlcmVuY2UgZm9yIHRoZSBkZWR1Y2VkIHppcCBt ZXRob2RzDQoJCSAqCUBwYXJhbQkJYXJyYXkJQXJyeSByZWZlcmVuY2UgZm9yIHRoZSBkZXRhaWxzIG9m IHRoZSBkZWR1Y2VkIG1ldGhvZHMNCgkJICoJQHBhcmFtCQlhcnJheQlGbGF0IGFycmF5IG9mIHJlcXVl c3RlZCAocHJlZmVycmVkKSB6aXAgbWV0aG9kcw0KCQkgKglAcGFyYW0JCWJvb2wJVHJ1ZSBpZiBvbmx5 IHRoZSBiZXN0IGF2YWlsYWJsZSBtZXRob2Qgd2FudGVkDQoJCSAqCUBwYXJhbQkJc3RyaW5nCVdoaWNo IHppcCBtb2RlIGJlaW5nIHRlc3RlZA0KCQkgKglAcmV0dXJuCQlib29sCVRydWUgaWYgbWV0aG9kcyBh cmUgYXZhaWxhYmxlLCBGYWxzZSBvdGhlcndpc2UNCgkJICoNCgkJICovDQoJCXByb3RlY3RlZCBmdW5j dGlvbiBkZWR1Y2VfemlwX21ldGhvZHMoIGFycmF5ICYkbWV0aG9kcywgYXJyYXkgJiRtZXRob2RzX2Rl dGFpbHMsIGFycmF5ICRyZXF1ZXN0ZWQsICRiZXN0X29ubHksICRtb2RlICkgew0KCQkJDQoJCQkkYXZh aWxhYmxlX21ldGhvZHMgPSBhcnJheSgpOw0KCQkJJGF2YWlsYWJsZV9tZXRob2RzX2RldGFpbHMgPSBh cnJheSgpOw0KCQkJJGFnZ3JlZ2F0ZV9hdmFpbGFibGVfbWV0aG9kcyA9IGFycmF5KCk7DQoJCQkNCgkJ CS8vIEdldCBvdXIgdHJhbnNpZW50IHRvIHNhdmUgcmVwZWF0ZWQgdGVzdGluZyBvdmVyIGEgc2hvcnQg cGVyaW9kDQoJCQlpZiAoIGZhbHNlID09PSAoICRhZ2dyZWdhdGVfYXZhaWxhYmxlX21ldGhvZHMgPSBn ZXRfdHJhbnNpZW50KCBzZWxmOjpaSVBfTUVUSE9EU19UUkFOU0lFTlQgKSApICkgew0KDQoJCQkJLy8g R2V0IGFsbCBhdmFpbGFibGUgbWV0aG9kcyBpbiAkYXZhaWxhYmxlX21ldGhvZHMgLSBtdXN0IHJldHVy biB0aGVtIGluIG9yZGVyIGJlc3QgLT4gd29yc3QNCgkJCQkvLyBBbHNvIGdldHRpbmcgdGhlIG1ldGhv ZCBkZXRhaWxzIGFycmF5IHdoaWNoIGlzIGtleWVkIGJ5IG1ldGhvZCB0YWcNCgkJCQkkdGhpcy0+Z2V0 X2F2YWlsYWJsZV96aXBfbWV0aG9kcyggJHRoaXMtPl9zdXBwb3J0ZWRfemlwX21ldGhvZHMsICRhdmFp bGFibGVfbWV0aG9kcywgJGF2YWlsYWJsZV9tZXRob2RzX2RldGFpbHMgKTsNCgkJCQkNCgkJCQkvLyBO b3cgd2UgaGF2ZSB0byBjb21iaW5lIHRoZSB0d28gYXJyYXlzIGludG8gYW4gYWdncmVnYXRlIHRvIHNh dmUNCgkJCQkkYWdncmVnYXRlX2F2YWlsYWJsZV9tZXRob2RzWyAnbWV0aG9kcycgXSA9ICRhdmFpbGFi bGVfbWV0aG9kczsNCgkJCQkkYWdncmVnYXRlX2F2YWlsYWJsZV9tZXRob2RzWyAnZGV0YWlscycgXSA9 ICRhdmFpbGFibGVfbWV0aG9kc19kZXRhaWxzOw0KCQkJCQ0KCQkJCS8vIFNhdmUgaXQJCQkJDQoJCQkJ c2V0X3RyYW5zaWVudCggc2VsZjo6WklQX01FVEhPRFNfVFJBTlNJRU5ULCAkYWdncmVnYXRlX2F2YWls YWJsZV9tZXRob2RzLCBzZWxmOjpaSVBfTUVUSE9EU19UUkFOU0lFTlRfTElGRSApOw0KCQkJCQkJCQ0K CQkJfSBlbHNlIHsNCgkJCQ0KCQkJCS8vIFdlIGdvdCBhIHZhbGlkIHRyYW5zaWVudCB2YWx1ZSBzbyBu b3cgc2VwYXJhdGUgdGhlIGFnZ3JlZ2F0ZSBpbnRvIHR3bw0KCQkJCSRhdmFpbGFibGVfbWV0aG9kcyA9 ICRhZ2dyZWdhdGVfYXZhaWxhYmxlX21ldGhvZHNbICdtZXRob2RzJyBdOw0KCQkJCSRhdmFpbGFibGVf bWV0aG9kc19kZXRhaWxzID0gJGFnZ3JlZ2F0ZV9hdmFpbGFibGVfbWV0aG9kc1sgJ2RldGFpbHMnIF07 DQoJCQkNCgkJCX0NCgkJCQ0KCQkJLy8gQ2hlY2sgd2hldGhlciB0aGVzZSBuZWVkIHRvIGJlIGZpbHRl cmVkIGJ5IHJlcXVlc3RlZCBtZXRob2RzDQoJCQlpZiAoICFlbXB0eSggJHJlcXVlc3RlZCApICkgew0K CQkJDQoJCQkJLy8gRmlsdGVyIHRoZSBhdmFpbGFibGUgbWV0aG9kcyAtIHJlc3VsdCBjb3VsZCBiZSBl bXB0eQ0KCQkJCS8vIE9yZGVyIHdpbGwgYmUgcmV0YWluZWQgcmVnYXJkbGVzcyBvZiBvcmRlciBvZiBy ZXF1ZXN0ZWQgbWV0aG9kcw0KCQkJCSRhdmFpbGFibGVfbWV0aG9kcyA9IGFycmF5X2ludGVyc2VjdCgg JGF2YWlsYWJsZV9tZXRob2RzLCAkcmVxdWVzdGVkICk7DQoJCQkJDQoJCQl9DQoNCgkJCS8vIElmIGp1 c3QgdGhlIGJlc3QgYXZhaWxhYmxlIHJlcXVlc3RlZCB0aGVuIHNsaWNlIGl0IG9mZg0KCQkJaWYgKCAo IHRydWUgPT09ICRiZXN0X29ubHkgKSAmJiAoICFlbXB0eSggJGF2YWlsYWJsZV9tZXRob2RzICkgKSAp IHsNCgkJCQ0KCQkJCSRtZXRob2RzID0gYXJyYXlfc2xpY2UoICRhdmFpbGFibGVfbWV0aG9kcywgMCwg MSApOw0KCQkJCSRtZXRob2RzX2RldGFpbHMgPSAkYXZhaWxhYmxlX21ldGhvZHNfZGV0YWlsczsNCgkJ CQkNCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQkkbWV0aG9kcyA9ICRhdmFpbGFibGVfbWV0aG9kczsNCgkJ CQkkbWV0aG9kc19kZXRhaWxzID0gJGF2YWlsYWJsZV9tZXRob2RzX2RldGFpbHM7DQoJCQkNCgkJCX0N CgkJCQ0KCQkJaWYgKCAhZW1wdHkoICRtZXRob2RzICkgKSB7DQoJCQkNCgkJCQlyZXR1cm4gdHJ1ZTsN CgkJCQkNCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJDQoJCQl9DQoJCQ0K CQl9DQoJCQkJDQoJCS8qKg0KCQkgKglnZXRfemlwX21ldGhvZHMoKQ0KCQkgKgkNCgkJICoJUmV0dXJu cyB0aGUgYXJyYXkgb2YgemlwIG1ldGhvZHMgcHJldmlvdXNseSBkZWR1Y2VkDQoJCSAqCQ0KCQkgKglA cmV0dXJuCQlhcnJheQlGbGF0IGFycmF5IG9mIHppcCBtZXRob2RzIChjb3VsZCBiZSBlbXB0eSkNCgkJ ICoNCgkJICovDQoJCXB1YmxpYyBmdW5jdGlvbiBnZXRfemlwX21ldGhvZHMoKSB7DQoJCQkNCgkJCXJl dHVybiAkdGhpcy0+X3ppcF9tZXRob2RzOw0KCQkNCgkJfQ0KCQkJCQ0KCQkvKioNCgkJICoJc2V0X3pp

cF9tZXRob2RzKCkNCgkJICoJDQoJCSAqCVJlc2V0cyB0aGUgemlwIG1ldGhvZHMgYmFzZWQgb24gbmV3 IGNyaXRlcmlhIGFuZCByZXR1cm5zIHRoZSBhcnJheSBvZiB6aXAgbWV0aG9kcw0KCQkgKgkNCgkJICoJ QHBhcmFtCQlhcnJheQlGbGF0IGFycmF5IG9mIHJlcXVlc3RlZCAocHJlZmVycmVkKSB6aXAgbWV0aG9k cw0KCQkgKglAcGFyYW0JCWJvb2wJVHJ1ZSBpZiBvbmx5IHRoZSBiZXN0IGF2YWlsYWJsZSBtZXRob2Qg d2FudGVkDQoJCSAqCUByZXR1cm4JCWFycmF5CUZsYXQgYXJyYXkgb2YgemlwIG1ldGhvZHMgKGNvdWxk IGJlIGVtcHR5KQ0KCQkgKg0KCQkgKi8NCgkJcHVibGljIGZ1bmN0aW9uIHNldF96aXBfbWV0aG9kcygg YXJyYXkgJHJlcXVlc3RlZCwgJGJlc3Rfb25seSA9IGZhbHNlICkgew0KCQkJDQoJCQkvLyBVcGRhdGUg dGhlIG1lbW9yeSBvZiB3aGF0IHppcCBtZXRob2RzIHdlcmUgcmVxdWVzdGVkIC0gbWFrZSBpdCBjbGVh bg0KCQkJJHRoaXMtPl9yZXF1ZXN0ZWRfemlwX21ldGhvZHMgPSBhcnJheV9tYXAoICd0cmltJywgJHJl cXVlc3RlZCApOw0KCQkJDQoJCQkvLyBXb3JrIG91dCB0aGUgbGlzdCBvZiB6aXAgbWV0aG9kcyBmcm9t IHRoZSByZXF1ZXN0ZWQgYW5kIGF2YWlsYWJsZQ0KCQkJJHRoaXMtPmRlZHVjZV96aXBfbWV0aG9kcygg JHRoaXMtPl96aXBfbWV0aG9kcywgJHRoaXMtPl96aXBfbWV0aG9kc19kZXRhaWxzLCAkdGhpcy0+X3Jl cXVlc3RlZF96aXBfbWV0aG9kcywgJGJlc3Rfb25seSwgJHRoaXMtPl9tb2RlICk7DQoJCQkNCgkJCS8v IE1ha2UgdGhlIHppcCBtZXRob2RzIGtub3duIGRpcmVjdGx5DQoJCQlyZXR1cm4gJHRoaXMtPl96aXBf bWV0aG9kczsNCgkJDQoJCX0NCgkJCQkNCgkJLyoqDQoJCSAqCWZpbGVfZXhpc3RzKCkNCgkJICoJDQoJ CSAqCVRlc3RzIHdoZXRoZXIgYSBmaWxlICh3aXRoIHBhdGgpIGV4aXN0cyBpbiB0aGUgZ2l2ZW4gemlw IGZpbGUNCgkJICoJSWYgbGVhdmVfb3BlbiBpcyB0cnVlIHRoZW4gdGhlIHppcCBvYmplY3Qgd2lsbCBi ZSBsZWZ0IG9wZW4gZm9yIGZhc3RlciBjaGVja2luZyBmb3Igc3Vic2VxdWVudCBmaWxlcyB3aXRoaW4g dGhpcyB6aXANCgkJICoJDQoJCSAqCUBwYXJhbQkJc3RyaW5nCVRoZSB6aXAgZmlsZSB0byBjaGVjaw0K CQkgKglAcGFyYW0JCXN0cmluZwlUaGUgZmlsZSB0byB0ZXN0IGZvcg0KCQkgKglAcGFyYW0JCWJvb2wJ VHJ1ZSBpZiB0aGUgemlwIGZpbGUgc2hvdWxkIGJlIGxlZnQgb3Blbg0KCQkgKglAcmV0dXJuCQlib29s CVRydWUgaWYgdGhlIGZpbGUgaXMgZm91bmQgaW4gdGVoIHppcCBvdGhlcndpc2UgZmFsc2UNCgkJICoN CgkJICovDQoJCXB1YmxpYyBmdW5jdGlvbiBmaWxlX2V4aXN0cyggJHppcF9maWxlLCAkbG9jYXRlX2Zp bGUsICRsZWF2ZV9vcGVuID0gZmFsc2UgKSB7DQoJCQ0KCQkJJHRoaXMtPmNsZWFyX3N0YXR1cygpOw0K CQkNCgkJCWlmICggaW5fYXJyYXkoICd6aXBhcmNoaXZlJywgJHRoaXMtPl96aXBfbWV0aG9kcyApICkg ew0KCQkJDQoJCQkJJHRoaXMtPl96aXAgPSBuZXcgWmlwQXJjaGl2ZTsNCgkJCQlpZiAoICR0aGlzLT5f emlwLT5vcGVuKCAkemlwX2ZpbGUgKSA9PT0gdHJ1ZSApIHsNCgkJCQkNCgkJCQkJaWYgKCAkdGhpcy0+ X3ppcC0+bG9jYXRlTmFtZSggJGxvY2F0ZV9maWxlICkgPT09IGZhbHNlICkgeyAvLyBGaWxlIG5vdCBm b3VuZCBpbiB6aXAuDQoJCQkJCQ0KCQkJCQkJJHRoaXMtPl96aXAtPmNsb3NlKCk7DQoJCQkJCQkkdGhp cy0+X3N0YXR1c1tdID0gX18oJ0ZpbGUgbm90IGZvdW5kICh6aXBhcmNoaXZlKScsICdpdC1sMTBuLWJh Y2t1cGJ1ZGR5JykgLiAnOiAnIC4gJGxvY2F0ZV9maWxlOw0KCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJ CQkJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCSR0aGlzLT5femlwLT5jbG9zZSgpOw0KCQkJCQlyZXR1cm4g dHJ1ZTsgLy8gTmV2ZXIgcmFuIGludG8gYSBmaWxlIG1pc3Npbmcgc28gbXVzdCBoYXZlIGZvdW5kIHRo ZW0gYWxsLg0KCQkJCQkNCgkJCQl9IGVsc2Ugew0KCQkJCQ0KCQkJCQkkdGhpcy0+X3N0YXR1c1tdID0g c3ByaW50ZiggX18oJ1ppcEFyY2hpdmUgZmFpbGVkIHRvIG9wZW4gZmlsZSB0byBjaGVjayBpZiBmaWxl IGV4aXN0cyAobG9va2luZyBmb3IgJTEkcyBpbiAlMiRzKS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScp LCAkbG9jYXRlX2ZpbGUgLCAkemlwX2ZpbGUgKTsNCgkJCQkJDQoJCQkJCXJldHVybiBmYWxzZTsNCgkJ CQkJDQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KCQkJDQoJCQkvLyBJZiB3ZSBtYWRlIGl0IHRoaXMgZmFyIHRo ZW4gemlwYXJjaGl2ZSBub3QgYXZhaWxhYmxlL2ZhaWxlZC4NCgkJCWlmICggaW5fYXJyYXkoICdwY2x6 aXAnLCAkdGhpcy0+X3ppcF9tZXRob2RzICkgKSB7DQoJCQkNCgkJCQlyZXF1aXJlX29uY2UoIEFCU1BB VEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvY2xhc3MtcGNsemlwLnBocCcgKTsNCgkJCQkkdGhpcy0+X3pp cCA9IG5ldyBQY2xaaXAoICR6aXBfZmlsZSApOw0KCQkJCWlmICggKCAkZmlsZV9saXN0ID0gJHRoaXMt Pl96aXAtPmxpc3RDb250ZW50KCkgKSA9PSAwICkgeyAvLyBJZiB6ZXJvLCB6aXAgaXMgY29ycnVwdCBv ciBlbXB0eS4NCgkJCQkNCgkJCQkJJHRoaXMtPl9zdGF0dXNbXSA9ICR0aGlzLT5femlwLT5lcnJvcklu Zm8oIHRydWUgKTsNCgkJCQkJDQoJCQkJfSBlbHNlIHsNCgkJCQkNCgkJCQkJZm9yZWFjaCggJGZpbGVf bGlzdCBhcyAkZmlsZSApIHsNCgkJCQkJDQoJCQkJCQlpZiAoICRmaWxlWydmaWxlbmFtZSddID09ICRs b2NhdGVfZmlsZSApIHsgLy8gRm91bmQgZmlsZS4NCgkJCQkJCQ0KCQkJCQkJCXJldHVybiB0cnVlOw0K CQkJCQkJCQ0KCQkJCQkJfQ0KCQkJCQkJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCSR0aGlzLT5fc3RhdHVz W10gPSBfXygnRmlsZSBub3QgZm91bmQgKHBjbHppcCknLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4g JzogJyAuICRsb2NhdGVfZmlsZTsNCgkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQkNCgkJCQl9DQoJCQkJ DQoJCQl9IGVsc2Ugew0KCQkJDQoJCQkJJHRoaXMtPl9zdGF0dXNbXSA9IF9fKCdVbmFibGUgdG8gY2hl Y2sgaWYgZmlsZSBleGlzdHM6IE5vIGNvbXBhdGlibGUgemlwIG1ldGhvZCBmb3VuZC4nLCAnaXQtbDEw bi1iYWNrdXBidWRkeScpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCQkNCgkJCX0NCgkJCQ0KCQl9DQoJ CQ0KCQkNCgkJLyoqDQoJCSAqCWFkZF9kaXJlY3RvcnlfdG9femlwKCkNCgkJICoNCgkJICoJQWRkcyBh IGRpcmVjdG9yeSB0byBhIG5ldyBvciBleGlzdGluZyAoVE9ETzogbm90IHlldCBhdmFpbGFibGUpIFpJ UCBmaWxlLg0KCQkgKg0KCQkgKglAcGFyYW0Jc3RyaW5nCQkJCUZ1bGwgcGF0aCAmIGZpbGVuYW1lIG9m IFpJUCBmaWxlIHRvIGNyZWF0ZS4NCgkJICoJQHBhcmFtCXN0cmluZwkJCQlGdWxsIGRpcmVjdG9yeSB0 byBhZGQgdG8gemlwIGZpbGUuDQoJCSAqCUBwYXJhbQlib29sZWFuCQkJCVRydWUgdG8gZW5hYmxlIFpJ UCBjb21wcmVzc2lvbg0KCQkgKglAcGFyYW0JYXJyYXkoIHN0cmluZyApCQlBcnJheSBvZiBzdHJpbmdz IG9mIHBhdGhzL2ZpbGVzIHRvIGV4Y2x1ZGUgZnJvbSB6aXBwaW5nDQoJCSAqCUBwYXJhbQlzdHJpbmcJ

CQkJRnVsbCBkaXJlY3RvcnkgcGF0aCB0byBkaXJlY3RvcnkgdG8gdGVtcG9yYXJpbHkgcGxhY2UgWklQ DQoJCSAqCUBwYXJhbQlib29sZWFuCQkJCVRydWU6IG9ubHkgdXNlIFBDTFppcC4gRmFsc2U6IHRyeSBh bGwgYXZhaWxhYmxlDQoJCSAqDQoJCSAqCUByZXR1cm4JCQkJCQl0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNl IG90aGVyd2lzZQ0KCQkgKg0KCQkgKi8NCgkJZnVuY3Rpb24gYWRkX2RpcmVjdG9yeV90b196aXAoICR6 aXBfZmlsZSwgJGFkZF9kaXJlY3RvcnksICRjb21wcmVzc2lvbiwgJGV4Y2x1ZGVzID0gYXJyYXkoKSwg JHRlbXBvcmFyeV96aXBfZGlyZWN0b3J5ID0gJycsICRmb3JjZV9jb21wYXRpYmlsaXR5X21vZGUgPSBm YWxzZSApIHsNCgkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgX18oJ1J1bm5pbmcgYWx0ZXJuYXRp dmUgWklQIHN5c3RlbSAoQkVUQSkgYmFzZWQgb24gc2V0dGluZ3MuJywgJ2l0LWwxMG4tYmFja3VwYnVk ZHknKSApOw0KCQkJDQoJCQkkemlwX21ldGhvZHMgPSBhcnJheSgpOw0KCQkJJHNhbml0aXplZF9leGNs dWRlcyA9IGFycmF5KCk7DQoJCQkkbGlzdG1ha2VyID0gTlVMTDsNCgkJCQ0KCQkJLy8gU2V0IHNvbWUg YWRkaXRpb25hbCBzeXN0ZW0gZXhjbHVkZXMgaGVyZSBmb3Igbm93IC0gdGhlc2UgYXJlIGFsbCBmcm9t IHRoZSBzaXRlIGluc3RhbGwgcm9vdA0KCQkJJGFkZGl0aW9uYWxfZXhjbHVkZXMgPSBhcnJheSggRElS RUNUT1JZX1NFUEFSQVRPUiAuICdpbXBvcnRidWRkeScgLiBESVJFQ1RPUllfU0VQQVJBVE9SLA0KCQkJ CQkJCQkJCSAgRElSRUNUT1JZX1NFUEFSQVRPUiAuICdpbXBvcnRidWRkeS5waHAnLA0KCQkJCQkJCQkJ CSAgRElSRUNUT1JZX1NFUEFSQVRPUiAuICdpbXBvcnRidWRkeS50eHQnLA0KCQkJCQkJCQkJCSAgRElS RUNUT1JZX1NFUEFSQVRPUiAuICd3cC1jb250ZW50JyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndXBs b2FkcycgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3BsdWdpbmJ1ZGR5X2JhY2t1cGJ1ZGR5LnR4dCcN CgkJCQkJCQkJCQkpOw0KCQkJDQoJCQkvLyBEZWNpZGUgd2hpY2ggbWV0aG9kcyB3ZSBhcmUgZ29pbmcg dG8gdHJ5DQoJCQlpZiAoICRmb3JjZV9jb21wYXRpYmlsaXR5X21vZGUgPT09IHRydWUgKSB7DQoNCgkJ CQkkemlwX21ldGhvZHMgPSAkdGhpcy0+Z2V0X2NvbXBhdGliaWxpdHlfemlwX21ldGhvZHMoKTsJCQkJ DQoJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCBfXygnRm9yY2VkIENvbXBhdGliaWxpdHkgTW9k ZSBiYXNlZCBvbiBzZXR0aW5ncy4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkJDQoJCQl9 IGVsc2Ugew0KCQkJDQoJCQkJJHppcF9tZXRob2RzID0gJHRoaXMtPl96aXBfbWV0aG9kczsNCgkJCQkk dGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdVc2luZyBhbGwgYXZhaWxhYmxlIHppcCBtZXRob2Rz IGluIHByZWZlcnJlZCBvcmRlci4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQl9DQoJCQkN CgkJCS8vIEJldHRlciBtYWtlIHN1cmUgd2UgaGF2ZSBzb21lIGF2YWlsYWJsZSBtZXRob2RzDQoJCQlp ZiAoIGVtcHR5KCAkemlwX21ldGhvZHMgKSApIHsNCgkJCQ0KCQkJCS8vIEhtbSwgd2UgZG9uJ3Qgc2Vl bSB0byBoYXZlIGFueSBhdmFpbGFibGUgbWV0aG9kcywgb29wcywgYmVzdCBnbyBubyBmdXJ0aGVyDQoJ CQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnRmFpbGVkIHRvIGNyZWF0ZSBhIFppcCBBcmNo aXZlIGZpbGUgLSBubyBhdmFpbGFibGUgbWV0aG9kcy4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7 DQoJCQkJDQoJCQkJLy8gV2Ugc2hvdWxkIGhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBtdXN0IGdl dCByaWQgb2YgaXQsIGNhbiBzaW1wbHkgcm1kaXIgaXQgYXMgaXQgd2lsbCAoc2hvdWxkKSBiZSBlbXB0 eQ0KCQkJCWlmICggIWVtcHR5KCAkdGVtcG9yYXJ5X3ppcF9kaXJlY3RvcnkgKSAmJiBmaWxlX2V4aXN0 cyggJHRlbXBvcmFyeV96aXBfZGlyZWN0b3J5ICkgKSB7DQoJCQkJCQ0KCQkJCQlpZiAoICFybWRpcigg JHRlbXBvcmFyeV96aXBfZGlyZWN0b3J5ICkgKSB7DQoJCQkJCQ0KCQkJCQkJJHRoaXMtPnN0YXR1cygg J2RldGFpbHMnLCBfXygnVGVtcG9yYXJ5IGRpcmVjdG9yeSBjb3VsZCBub3QgYmUgZGVsZXRlZDogJywg J2l0LWwxMG4tYmFja3VwYnVkZHknKSAuICR0ZW1wb3JhcnlfemlwX2RpcmVjdG9yeSApOw0KCQkJCQkN CgkJCQkJfQ0KCQkJCQkJDQoJCQkJfQ0KDQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQ0KCQkJfQ0KCQkJ DQoJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdDcmVhdGluZyBaSVAgZmlsZScsICdpdC1s MTBuLWJhY2t1cGJ1ZGR5JykgLiAnIGAnIC4gJHppcF9maWxlIC4gJ2AuICcgLiBfXygnQWRkaW5nIGRp cmVjdG9yeScsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAnIGAnIC4gJGFkZF9kaXJlY3RvcnkgLiAn YC4gJyAuIF9fKCdDb21wcmVzc2lvbicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAnOiAnIC4gJGNv bXByZXNzaW9uIC4gJzsgJyAuIF9fKCdFeGNsdWRlcycsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAn OiAnIC4gaW1wbG9kZSggJywnLCAkZXhjbHVkZXMgKSApOw0KCQkJDQoJCQkvLyBXZSdsbCB0cnkgYW5k IGFsbG93IGV4Y2x1c2lvbnMgZm9yIHBjbHppcCBpZiB3ZSBjYW4NCgkJCUBpbmNsdWRlX29uY2UoICR0 aGlzLT5fcGx1Z2luUGF0aCAuICcvbGliL3ppcGJ1ZGR5L3piZGlyLnBocCcgKTsNCgkJCWlmICggY2xh c3NfZXhpc3RzKCAncGx1Z2luYnVkZHlfemJkaXInICkgKSB7DQoJCQkNCgkJCQkvLyBHZW5lcmF0ZSBv dXIgc2FuaXRpemVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMvZmlsZXMgdG8gZXhjbHVkZSBhcyBhYnNvbHV0 ZSBwYXRocyAobm9ybWFsaXplZCkgZm9yIHpiZGlyDQoJCQkJJHNhbml0aXplZF9leGNsdWRlcyA9ICR0 aGlzLT5zYW5pdGl6ZV9leGNsdWRlcyggJGV4Y2x1ZGVzLCAkYWRkaXRpb25hbF9leGNsdWRlcywgJGFk ZF9kaXJlY3RvcnkgKTsNCgkJCQ0KCQkJCS8vIE5vdyBsZXQncyBjcmVhdGUgdGhlIGxpc3Qgb2YgaXRl bXMgdG8gYWRkIHRvIHRoZSB6aXAgLSBmaXJzdCBidWlsZCB0aGUgdHJlZQ0KCQkJCSRsaXN0bWFrZXIg PSBuZXcgcGx1Z2luYnVkZHlfemJkaXIoICRhZGRfZGlyZWN0b3J5LCAkc2FuaXRpemVkX2V4Y2x1ZGVz ICk7DQoJCQkJDQoJCQkJLy8gUmUtZ2VuZXJhdGUgb3VyIHNhbml0aXplZCBsaXN0IG9mIGRpcmVjdG9y aWVzL2ZpbGVzIHRvIGV4Y2x1ZGUgYXMgcmVsYXRpdmUgcGF0aHMNCgkJCQkvLyBTbGlnaHQga2x1ZGdl IHRvIGRlYWwgd2l0aCBiZWluZyBhYmxlIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBpbmNsdXNpb24gcHJv Y2Vzc2luZw0KCQkJCS8vIChjdXJyZW50bHkgY29uZmlndXJlZCBpbiB3cC1jb25maWcucGhwKSBzbyBh bHdheXMgbmVlZCB0byBwcm92aWRlIHRoZSBleGNsdWRlcyBhcw0KCQkJCS8vIHJlbGF0aXZlIHBhdGgg Zm9yIG5vdy4gVGhpcyBuZWVkcyB0byBiZSB0aWRpZWQgdXAgaW4gZnV0dXJlIGlmL3doZW4gdGhlIGNh cGFiaWxpdHkNCgkJCQkvLyBpcyBlc3RhYmxpc2hlZCBhcyBzdGFuZGFyZA0KCQkJCSRzYW5pdGl6ZWRf

ZXhjbHVkZXMgPSAkdGhpcy0+c2FuaXRpemVfZXhjbHVkZXMoICRleGNsdWRlcywgJGFkZGl0aW9uYWxf ZXhjbHVkZXMgKTsJCQkJDQoJCQkJDQoJCQl9IGVsc2Ugew0KCQkJDQoJCQkJLy8gR2VuZXJhdGUgb3Vy IHNhbml0aXplZCBsaXN0IG9mIGRpcmVjdG9yaWVzL2ZpbGVzIHRvIGV4Y2x1ZGUgYXMgcmVsYXRpdmUg cGF0aHMNCgkJCQkkc2FuaXRpemVkX2V4Y2x1ZGVzID0gJHRoaXMtPnNhbml0aXplX2V4Y2x1ZGVzKCAk ZXhjbHVkZXMsICRhZGRpdGlvbmFsX2V4Y2x1ZGVzICk7DQoJCQkNCgkJCX0NCgkJCQ0KCQkJLy8gSXRl cmF0ZSBvdmVyIHRoZSBtZXRob2RzIC0gb25jZSB3ZSBzdWNjZWVkIGp1c3QgcmV0dXJuIGRpcmVjdGx5 IG90aGVyd2lzZSBkcm9wIHRocm91Z2gNCgkJCWZvcmVhY2ggKCAkemlwX21ldGhvZHMgYXMgJG1ldGhv ZF90YWcgKSB7DQoNCgkJCQkkY2xhc3NfbmFtZSA9ICdwbHVnaW5idWRkeV96YnppcCcgLiAkbWV0aG9k X3RhZzsNCgkNCgkJCQkkemlwcGVyID0gbmV3ICRjbGFzc19uYW1lKCAkdGhpcyApOw0KCQkJCSR6aXBw ZXItPnNldF9zdGF0dXNfY2FsbGJhY2soIGFycmF5KCAmJHRoaXMsICdzdGF0dXMnICkgKTsNCgkJCQkN CgkJCQkvLyBXZSBuZWVkIHRvIHRlbGwgdGhlIG1ldGhvZCB3aGF0IGRldGFpbHMgYmVsb25nIHRvIGl0 DQoJCQkJJHppcHBlci0+c2V0X21ldGhvZF9kZXRhaWxzKCAkdGhpcy0+X3ppcF9tZXRob2RzX2RldGFp bHNbICRtZXRob2RfdGFnIF0gKTsNCgkJCQkNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9f KCdUcnlpbmcgJywgICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAkbWV0aG9kX3RhZyAuIF9fKCcgbWV0 aG9kIGZvciBaSVAuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJCQ0KCQkJCS8vIFRoZSB0 ZW1wb3JhcnkgemlwIGRpcmVjdG9yeSBfbXVzdF8gZXhpc3QNCgkJCQlpZiAoICFlbXB0eSggJHRlbXBv cmFyeV96aXBfZGlyZWN0b3J5ICkgKSB7DQoJCQkJDQoJCQkJCWlmICggIWZpbGVfZXhpc3RzKCAkdGVt cG9yYXJ5X3ppcF9kaXJlY3RvcnkgKSApIHsgLy8gQ3JlYXRlIHRlbXAgZGlyIGlmIGl0IGRvZXMgbm90 IGV4aXN0Lg0KCQkJCQkNCgkJCQkJCW1rZGlyKCAkdGVtcG9yYXJ5X3ppcF9kaXJlY3RvcnkgKTsNCgkJ CQkJCQ0KCQkJCQl9DQoJCQkJCQ0KCQkJCX0NCgkJCQkNCgkJCQkvLyBOb3cgd2UgYXJlIHJlYWR5IHRv IHRyeSBhbmQgcHJvZHVjZSB0aGUgYmFja3VwDQoJCQkJaWYgKCAkemlwcGVyLT5jcmVhdGUoICR6aXBf ZmlsZSwgJGFkZF9kaXJlY3RvcnksICRjb21wcmVzc2lvbiwgJHNhbml0aXplZF9leGNsdWRlcywgJHRl bXBvcmFyeV96aXBfZGlyZWN0b3J5LCAkbGlzdG1ha2VyICkgPT09IHRydWUgKSB7DQoJCQkJDQoJCQkJ CS8vIEdvdCBhIHZhbGlkIHppcCBmaWxlIHNvIHdlIGNhbiBqdXN0IHJldHVybiAtIG1ldGhvZCB3aWxs IGhhdmUgY2xlYW5lZCB1cCB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeQ0KCQkJCQkkdGhpcy0+c3RhdHVz KCAnZGV0YWlscycsIF9fKCdUaGUgJywgICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAkbWV0aG9kX3Rh ZyAuIF9fKCcgbWV0aG9kIGZvciBaSVAgd2FzIHN1Y2Nlc3NmdWwuJywgJ2l0LWwxMG4tYmFja3VwYnVk ZHknKSApOw0KCQkJCQl1bnNldCggJHppcHBlciApOw0KCQkJCQkNCgkJCQkJLy8gV2UgaGF2ZSB0byBy ZXR1cm4gaGVyZSBiZWNhdXNlIHdlIGNhbm5vdCBicmVhayBvdXQgb2YgZm9yZWFjaA0KCQkJCQlyZXR1 cm4gdHJ1ZTsNCg0KCQkJCX0gZWxzZSB7DQoJCQkJDQoJCQkJCS8vIE1ldGhvZCB3aWxsIGhhdmUgY2xl YW5lZCB1cCB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeQkJCQkNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ2Rl dGFpbHMnLCBfXygnVGhlICcsICAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4gJG1ldGhvZF90YWcgLiBf XygnIG1ldGhvZCBmb3IgWklQIHdhcyB1bnN1Y2Nlc3NmdWwuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHkn KSApOw0KCQkJCQkJCQkJCQkJCQkJDQoJCQkJCXVuc2V0KCAkemlwcGVyICk7DQoJCQkJCQ0KCQkJCX0N CgkJCQkNCgkJCX0NCgkJCQ0KCQkJLy8gSWYgd2UgZ2V0IGhlcmUgdGhlbiBoYXZlIGZhaWxlZCBpbiBh bGwgYXR0ZW1wdHMNCgkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ0ZhaWxlZCB0byBjcmVh dGUgYSBaaXAgQXJjaGl2ZSBmaWxlIHdpdGggYW55IGF2YWlsYWJsZSBtZXRob2QuJywgJ2l0LWwxMG4t YmFja3VwYnVkZHknKSApOw0KCQkJDQoJCQlyZXR1cm4gZmFsc2U7DQoJDQoJCX0NCgkJDQoJCQ0KCQkv KioNCgkJICoJc2FuaXRpemVfZXhjbHVkZXMoKQ0KCQkgKg0KCQkgKglUYWtlIGFuIGV4Y2x1c2lvbiBs aXN0IG9mIGRpcmVjdG9yaWVzIGFuZC9vciBmaWxlcyBhbmQgcHJvZHVjZSBhIHNhbml0aXplZCBleGNs dXNpb24gbGlzdA0KCQkgKglEaXJlY3RvcmllcyB3aWxsIGFsd2F5cyBoYXZlIGEgdHJhaWxpbmcgc2xh c2ggYW5kIGZpbGVzIHdpbGwgbm90DQoJCSAqDQoJCSAqCUBwYXJhbQlhcnJheQkJTGlzdCBvZiBwcmlt YXJ5IGV4Y2x1c2lvbnMgKGN1cnJlbnRseSBvbmx5IGRpcmVjdG9yaWVzKSAtIG1heSBiZSBlbXB0eQ0K CQkgKglAcGFyYW0JYXJyYXkJCUxpc3Qgb2Ygc2Vjb25kYXJ5IGV4Y2x1c2lvbnMgLSBtYXkgYmUgZW1w dHkNCgkJICoJQHBhcmFtCXN0cmluZwkJVGhlIGJhc2UgZGlyZWN0b3J5IHRvIGJlIHVzZWQgaWYgbm9y bWFsaXppbmcNCgkJICoNCgkJICoJQHJldHVybgltaXhlZAkJYXJyYXkgb24gc3VjY2VzcywgZmFsc2Ug b3RoZXJ3aXNlDQoJCSAqLw0KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gc2FuaXRpemVfZXhjbHVkZXMoICRw cmltYXJ5LCAkc2Vjb25kYXJ5LCAkYmFzZSA9ICcnICkgew0KCQkNCgkJCSRzYW5pdGl6ZWQgPSBhcnJh eSgpOw0KCQkJJGJhc2VkaXIgPSB0cmltKCAkYmFzZSApOw0KCQkJJG5vcm1hbGl6ZSA9ICFlbXB0eSgg JGJhc2VkaXIgKTsNCgkJDQoJCQkvLyAkcHJpbWFyeSBpcyBjb25zaWRlcmVkIHRvIGJlIHVuY2xlYW4N CgkJCWZvcmVhY2ggKCAkcHJpbWFyeSBhcyAkZXhjbHVkZSApIHsNCgkJCQ0KCQkJCS8vIEdldCByaWQg b2Ygc3RhbmRhcmQgcHJlZml4L3N1ZmZpeCBkZXRyaXR1cw0KCQkJCSRleGNsdWRlID0gdHJpbSggJGV4 Y2x1ZGUgKTsNCgkJCQkNCgkJCQkvLyBQb3NzaWJsZSB0aGF0IHdlIGNvdWxkIGVuZCB1cCB3aXRoIGFu IGVtcHR5IGVudHJ5DQoJCQkJaWYgKCAhZW1wdHkoICRleGNsdWRlICkgKSB7DQoJCQkJDQoJCQkJCS8v IFJlbW92ZSB3aGF0IGNvdWxkIGJlIG11bHRpcGxlIHByZWZpeCBvciBzdWZmaXggZGlyZWN0b3J5IHNl cGFyYXRvcnMNCgkJCQkJJGV4Y2x1ZGUgPSB0cmltKCAkZXhjbHVkZSwgRElSRUNUT1JZX1NFUEFSQVRP UiApOw0KCQkJCQkNCgkJCQkJLy8gQW5kIGFkZCBiYWNrIGEgc2luZ2xlIGluc3RhbmNlIGluIGVhY2gg Y2FzZQ0KCQkJCQkkZXhjbHVkZSA9IERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZXhjbHVkZSAuIERJUkVD VE9SWV9TRVBBUkFUT1I7DQoJCQkJCQkJCQkJDQoJCQkJCSRzYW5pdGl6ZWRbXSA9ICRleGNsdWRlOw0K CQkJCQkNCgkJCQl9DQoJCQkJDQoJCQl9DQoJCQkNCgkJCS8vICRzZWNvbmRhcnkgaXMgY29uc2lkZXJl

ZCB0byBiZSBjbGVhbg0KCQkJaWYgKCAhZW1wdHkoICRzZWNvbmRhcnkgKSApIHsNCgkJCQ0KCQkJCSRz YW5pdGl6ZWQgPSBhcnJheV9tZXJnZSggJHNhbml0aXplZCwgJHNlY29uZGFyeSApOyANCgkJCQ0KCQkJ fQ0KCQkJDQoJCQkvLyBHZXQgdW5pcXVlIGVudHJpZXMgYW5kIHJlbnVtYmVyIG51bWVyaWMga2V5cw0K CQkJJHNhbml0aXplZCA9IGFycmF5X21lcmdlKCBhcnJheV91bmlxdWUoICRzYW5pdGl6ZWQgKSApOw0K CQkJDQoJCQlpZiAoIHRydWUgPT0gJG5vcm1hbGl6ZSApIHsNCgkJCQ0KCQkJCS8vIE1ha2Ugc3VyZSB0 aGUgbm9ybWFsaXplIGJhc2UgaGFzIGEgdHJhaWxpbmcgZGlyZWN0b3J5IHNlcGFyYXRvcg0KCQkJCSRi YXNlZGlyID0gKCBydHJpbSggJGJhc2VkaXIsIERJUkVDVE9SWV9TRVBBUkFUT1IgKSApIC4gRElSRUNU T1JZX1NFUEFSQVRPUjsNCgkJCQ0KCQkJCWZvcmVhY2ggKCAkc2FuaXRpemVkIGFzICYkZXhjbHVzaW9u ICkgew0KCQkJCQ0KCQkJCQkvLyBNdXN0IHJlbW92ZSBhbnkgbGVhZGluZyBESVJFQ1RPUllfU0VQQVJB VE9SIGJlY2F1c2UgJGJhc2VkaXIgYWx3YXlzIGhhcyB0cmFpbGluZw0KCQkJCQkkZXhjbHVzaW9uID0g bHRyaW0oICRleGNsdXNpb24sIERJUkVDVE9SWV9TRVBBUkFUT1IgKTsNCgkJCQkJJGV4Y2x1c2lvbiA9 ICggJGJhc2VkaXIgLiAkZXhjbHVzaW9uICk7DQoJCQkJCQ0KCQkJCX0NCgkJCQkJCQkJDQoJCQl9DQoJ CQkNCgkJDQoJCQlyZXR1cm4gJHNhbml0aXplZDsNCgkJDQoJCX0NCg0KDQoJCS8qKg0KCQkgKgl1bnpp cCgpDQoJCSAqDQoJCSAqCUV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiBhIHppcCBmaWxlIHRvIHRoZSBz cGVjaWZpZWQgZGlyZWN0b3J5IHVzaW5nIHRoZSBiZXN0IHVuemlwIG1ldGhvZHMgcG9zc2libGUuDQoJ CSAqDQoJCSAqCUBwYXJhbQlzdHJpbmcJCUZ1bGwgcGF0aCAmIGZpbGVuYW1lIG9mIFpJUCBmaWxlIHRv IGNyZWF0ZS4NCgkJICoJQHBhcmFtCXN0cmluZwkJRnVsbCBkaXJlY3RvcnkgcGF0aCB0byBleHRyYWN0 IGludG8uDQoJCSAqCUBwYXJhbQlib29sCQlUcnVlOiBvbmx5IHVzZSBQY2xaaXAsIEZhbHNlOiB0cnkg YWxsIGF2YWlsYWJsZSANCgkJICoNCgkJICoJQHJldHVybglib29sCQl0cnVlIG9uIHN1Y2Nlc3MsIGZh bHNlIG90aGVyd2lzZQ0KCQkgKi8NCgkJZnVuY3Rpb24gdW56aXAoICR6aXBfZmlsZSwgJGRlc3RpbmF0 aW9uX2RpcmVjdG9yeSwgJGZvcmNlX2NvbXBhdGliaWxpdHlfbW9kZSA9IGZhbHNlICkgew0KCQkJaWYg KCAkZm9yY2VfY29tcGF0aWJpbGl0eV9tb2RlID09ICd6aXBhcmNoaXZlJyApIHsNCgkJCQkkemlwX21l dGhvZHMgPSBhcnJheSggJ3ppcGFyY2hpdmUnICk7DQoJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2Un LCBfXygnRm9yY2VkIGNvbXBhdGliaWxpdHkgbW9kZSAoWmlwQXJjaGl2ZTsgbWVkaXVtIHNwZWVkKSBi YXNlZCBvbiBzZXR0aW5ncy4gVGhpcyBpcyBzbG93ZXIgYW5kIGxlc3MgcmVsaWFibGUuJywgJ2l0LWwx MG4tYmFja3VwYnVkZHknKSApOw0KCQkJfSBlbHNlaWYgKCAkZm9yY2VfY29tcGF0aWJpbGl0eV9tb2Rl ID09ICdwY2x6aXAnICkgew0KCQkJCSR6aXBfbWV0aG9kcyA9IGFycmF5KCAncGNsemlwJyApOw0KCQkJ CSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgX18oJ0ZvcmNlZCBjb21wYXRpYmlsaXR5IG1vZGUgKFBD TFppcDsgc2xvdyBzcGVlZCkgYmFzZWQgb24gc2V0dGluZ3MuIFRoaXMgaXMgc2xvd2VyIGFuZCBsZXNz IHJlbGlhYmxlLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCX0gZWxzZSB7DQoJCQkJJHpp cF9tZXRob2RzID0gJHRoaXMtPl96aXBfbWV0aG9kczsNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWls cycsIF9fKCdVc2luZyBhbGwgYXZhaWxhYmxlIHppcCBtZXRob2RzIGluIHByZWZlcnJlZCBvcmRlci4n LCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQl9DQoJCQkNCgkJCWlmICggaW5fYXJyYXkoICdl eGVjJywgJHppcF9tZXRob2RzICkgKSB7DQoJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCAgJ1N0 YXJ0aW5nIGhpZ2hzcGVlZCBleHRyYWN0aW9uIChleGVjKS4uLiBUaGlzIG1heSB0YWtlIGEgbW9tZW50 Li4uJyApOw0KCQkJCQ0KCQkJCSRjb21tYW5kID0gJ3VuemlwIC1xbyc7IC8vIHEgPSBxdWlldCwgbyA9 IG92ZXJ3cml0ZSB3aXRob3V0IHByb21wdC4NCgkJCQkkY29tbWFuZCAuPSAiICckemlwX2ZpbGUnIC1k ICckZGVzdGluYXRpb25fZGlyZWN0b3J5JyAteCAnaW1wb3J0YnVkZHkucGhwJyI7IC8vIHggZXhjbHVk ZXMgaW1wb3J0YnVkZHkgc2NyaXB0IHRvIHByZXZlbnQgb3ZlcndyaXRpbmcgbmV3ZXIgaW1wb3J0YnVk ZHkgb24gZXh0cmFjdCBzdGVwLg0KCQkJDQoJCQkJLy8gSGFuZGxlIHdpbmRvd3MuDQoJCQkJaWYgKCBz dHJpc3RyKCBQSFBfT1MsICdXSU4nICkgJiYgIXN0cmlzdHIoIFBIUF9PUywgJ0RBUldJTicgKSApIHsg Ly8gUnVubmluZyBXaW5kb3dzLiAobm90IGRhcndpbikNCgkJCQkJaWYgKCBmaWxlX2V4aXN0cyggQUJT UEFUSCAuICd1bnppcC5leGUnICkgKSB7DQoJCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICAn QXR0ZW1wdGluZyB0byB1c2UgV2luZG93cyB1bnppcC5leGUuJyApOw0KCQkJCQkJJGNvbW1hbmQgPSBz dHJfcmVwbGFjZSggJ1wnJywgJyInLCAkY29tbWFuZCApOyAvLyBXaW5kb3dzIHdhbnRzIGRvdWJsZSBx dW90ZXMNCgkJCQkJCSRjb21tYW5kID0gQUJTUEFUSCAuICRjb21tYW5kOw0KCQkJCQl9DQoJCQkJfQ0K CQkJCQ0KCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgJ1J1bm5pbmcgWklQIGNvbW1hbmQ6ICcg LiAkY29tbWFuZCApOw0KCQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgJ1RoaXMgbWF5IHRha2Ug YSBtb21lbnQgLiAuIC4nICk7DQoJCQkJZXhlYyggJGNvbW1hbmQsICRleGVjX3JldHVybl9hLCAkZXhl Y19yZXR1cm5fYiApOw0KCQkJCQkJCQkNCgkJCQlpZiAoICggISBmaWxlX2V4aXN0cyggJGRlc3RpbmF0 aW9uX2RpcmVjdG9yeSAuICd3cC1jb25maWcucGhwJyApICkgfHwgKCAkZXhlY19yZXR1cm5fYiAhPSAn JyApICkgeyAvLyBGaWxlIG5vdCBtYWRlIG9yIGVycm9yIHJldHVybmVkLg0KCQkJCS8vaWYgKCAkZXhl Y19yZXR1cm5fYiAhPSAnJyApIHsgLy8gRmlsZSBub3QgbWFkZSBvciBlcnJvciByZXR1cm5lZC4NCg0K CQkJCQkvLyBFUlJPUiBMSVNUOiBodHRwOi8vd3d3Lm1rc3NvZnR3YXJlLmNvbS9kb2NzL21hbjEvdW56 aXAuMS5hc3ANCgkJCQkJaWYgKCAkZXhlY19yZXR1cm5fYiA9PSAnNTAnICkgew0KCQkJCQkJJHRoaXMt PnN0YXR1cyggJ2Vycm9yJywgICdUaGUgZGlzayBpcyAob3Igd2FzKSBmdWxsIGR1cmluZyBleHRyYWN0 aW9uIDxiPk9SPC9iPiB0aGUgemlwL3VuemlwIGNvbW1hbmQgZG9lcyBub3QgaGF2ZSB3cml0ZSBwZXJt aXNzaW9uIHRvIHlvdXIgZGlyZWN0b3J5LiAgVHJ5IGluY3JlYXNpbmcgcGVybWlzc2lvbnMgZm9yIHRo ZSBkaXJlY3RvcnkuJywgdHJ1ZSApOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQkNCgkJCQkJaWYgKCAhIGZp bGVfZXhpc3RzKCAnd3AtY29uZmlnLnBocCcgKSApIHsNCgkJCQkJCSR0aGlzLT5zdGF0dXMoICdlcnJv

cicsICAnd3AtY29uZmlnLnBocCBmaWxlIHdhcyBub3QgZm91bmQgYWZ0ZXIgZXh0cmFjdGlvbiB1c2lu ZyBoaWdoIHNwZWVkIG1vZGUuJyApOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQkNCgkJCQkJJHRoaXMtPnN0 YXR1cyggJ21lc3NhZ2UnLCAgJ0ZhbGxpbmcgYmFjayB0byBuZXh0IGNvbXBhdGlsYml0eSBtb2RlLicg KTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdGaWxlIGV4dHJh Y3Rpb24gY29tcGxldGUuJyApOw0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJ CWlmICggaW5fYXJyYXkoICd6aXBhcmNoaXZlJywgJHppcF9tZXRob2RzICkgKSB7DQoJCQkJJHRoaXMt PnN0YXR1cyggJ2RldGFpbHMnLCAgJ1N0YXJ0aW5nIG1lZGl1bSBzcGVlZCBleHRyYWN0aW9uICh6aXBh cmNoaXZlKS4uLiBUaGlzIG1heSB0YWtlIGEgbW9tZW50Li4uJyApOw0KCQkJCQ0KCQkJCSR6aXAgPSBu ZXcgWmlwQXJjaGl2ZTsNCgkJCQlpZiAoICR6aXAtPm9wZW4oICR6aXBfZmlsZSApID09PSB0cnVlICkg ew0KCQkJCQlpZiAoIHRydWUgPT09ICR6aXAtPmV4dHJhY3RUbyggJGRlc3RpbmF0aW9uX2RpcmVjdG9y eSApICkgew0KCQkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCAgJ1ppcEFyY2hpdmUgZXh0cmFj dGlvbiBzdWNjZXNzLicgKTsNCgkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJ JHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCAgJ0Vycm9yOiBaaXBBcmNoaXZlIHdhcyBhdmFpbGFibGUg YnV0IGZhaWxlZCBleHRyYWN0aW5nIGZpbGVzLiAgRmFsbGluZyBiYWNrIHRvIG5leHQgY29tcGF0aWJp bGl0eSBtb2RlLicgKTsNCgkJCQkJfQ0KCQkJCX0gZWxzZSB7DQoJCQkJCSR0aGlzLT5zdGF0dXMoICdt ZXNzYWdlJywgICdFcnJvcjogVW5hYmxlIHRvIG9wZW4gemlwIGZpbGUgdmlhIFppcEFyY2hpdmUuIEZh bGxpbmcgYmFjayB0byBuZXh0IGNvbXBhdGliaWxpdHkgbW9kZS4nICk7DQoJCQkJfQ0KCQkJCSR6aXAt PmNsb3NlKCk7DQoJCQl9DQoJCQkNCgkJCWlmICggaW5fYXJyYXkoICdwY2x6aXAnLCAkemlwX21ldGhv ZHMgKSApIHsNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICAnU3RhcnRpbmcgbG93IHNwZWVk IGV4dHJhY3Rpb24gKHBjbHppcCkuLi4gVGhpcyBtYXkgdGFrZSBhIG1vbWVudC4uLicgKTsNCgkJCQkN CgkJCQlpZiAoICFjbGFzc19leGlzdHMoICdQY2xaaXAnICkgKSB7DQoJCQkJCSRwY2x6aXBfZmlsZSA9 IHN0cl9yZXBsYWNlKCAnL3ppcGJ1ZGR5JywgJy9wY2x6aXAvcGNsemlwLnBocCcsIGRpcm5hbWUoIF9f RklMRV9fICkgKTsNCgkJCQkJaWYgKCBmaWxlX2V4aXN0cyggJHBjbHppcF9maWxlICkgKSB7DQoJCQkJ CQlyZXF1aXJlX29uY2UoICRwY2x6aXBfZmlsZSApOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSRhcmNoaXZl ID0gbmV3IFBjbFppcCggJHppcF9maWxlICk7DQoJCQkJJHJlc3VsdCA9ICRhcmNoaXZlLT5leHRyYWN0 KCk7IC8vIEV4dHJhY3QgdG8gY3VycmVudCBkaXJlY3RvcnkuIEV4cGxpY2l0eSB1c2luZyBQQ0xaSVBf T1BUX1BBVEggcmVzdWx0cyBpbiBleHRyYWN0aW9uIHRvIGEgUENMWklQX09QVF9QQVRIIHN1YmZvbGRl ci4NCgkJCQkNCgkJCQlpZiAoIDAgPT0gJHJlc3VsdCApIHsNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ2Rl dGFpbHMnLCAgJ1BDTFppcCBGYWlsdXJlOiAnIC4gJGFyY2hpdmUtPmVycm9ySW5mbyggdHJ1ZSApICk7 DQoJCQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgICdMb3cgc3BlZWQgKFBDTFppcCkgZXh0cmFj dGlvbiBmYWlsZWQuJywgJGFyY2hpdmUtPmVycm9ySW5mbyggdHJ1ZSApICk7DQoJCQkJfSBlbHNlIHsN CgkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkvLyBOb3RoaW5nIHN1Y2NlZWRl ZCBpZiB3ZSBtYWRlIGl0IHRoaXMgZmFyLi4uDQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0JCQ0KCQkNCgkJ LyoqDQoJCSAqCWdldF9hdmFpbGFibGVfemlwX21ldGhvZHMoKQ0KCQkgKgkNCgkJICoJUmV0dXJucyB0 aGUgYXJyYXkgb2YgemlwIG1ldGhvZHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB0aGUgbW9kZSBvZiB0 aGlzIG9iamVjdA0KCQkgKglMaWJyYXJpZXMgbXVzdCBoYXZlIGJlZW4gbG9hZGVkIGFscmVhZHkNCgkJ ICoJDQoJCSAqCUBwYXJhbQkJYXJyYXkJVGhlIHN1cHBvcnRlZCB6aXAgbWV0aG9kcw0KCQkgKglAcGFy YW0JCWFycmF5CVRoZSBhcnJheSB3aGljaCB3aWxsIGhvbGQgdGhlIGF2YWlsYWJsZSBtZXRob2RzDQoJ CSAqCUBwYXJhbQkJYXJyYXkJVGhlIGFycmF5IHRoYXQgd2lsbCBob2xkIHRoZSBhdmFpbGFibGUgbWV0 aG9kcyBhdHRyaWJ1dGVzIChtZXRob2QgdGFnIGlzIGtleSkNCgkJICoJQHJldHVybgkJYm9vbAlUcnVl IGlmIG1ldGhvZHMgYXZhaWxhYmxlLCBGYWxzZSBvdGhlcndpc2UNCgkJICoNCgkJICovDQoJCXByb3Rl Y3RlZCBmdW5jdGlvbiBnZXRfYXZhaWxhYmxlX3ppcF9tZXRob2RzKCBhcnJheSAkc3VwcG9ydGVkX3pp cF9tZXRob2RzLCAmJGF2YWlsYWJsZV9tZXRob2RzLCAmJGF2YWlsYWJsZV9tZXRob2RzX2RldGFpbHMg KSB7DQoJCQ0KCQkJLy8gTWFrZSBzdXJlIHRoZXNlIGFyZSBjbGVhcmVkIGFzIHRoZSBjYWxsZXIgbWln aHQgbm90IGhhdmUgZG9uZSBzbw0KCQkJJGF2YWlsYWJsZV9tZXRob2RzID0gYXJyYXkoKTsNCgkJCSRh dmFpbGFibGVfbWV0aG9kc19kZXRhaWxzID0gYXJyYXkoKTsNCgkJCQ0KCQkJLy8gQ3VycmVudGx5IHdl IHdpbGwgc2VuZCBhbnkgZXJyb3Igc3RhdHVzIG1lc3NhZ2VzIGhlcmUNCgkJCSRlcnJvcl9maWxlID0g JHRoaXMtPl90ZW1wZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdtZXRob2RzX3Rlc3RfZXJyb3Jz LnR4dCc7DQoJCQlpZiAoIGZpbGVfZXhpc3RzKCAkZXJyb3JfZmlsZSApICkgew0KCQkJDQoJCQkJQHVu bGluayggJGVycm9yX2ZpbGUgKTsNCgkJCQkNCgkJCX0NCgkJCQ0KCQkJZm9yZWFjaCAoICRzdXBwb3J0 ZWRfemlwX21ldGhvZHMgYXMgJG1ldGhvZF90YWcgKSB7DQoNCgkJCQkkdGhpcy0+Y2xlYXJfc3RhdHVz KCk7DQoJCQkNCgkJCQkkY2xhc3NfbmFtZSA9ICdwbHVnaW5idWRkeV96YnppcCcgLiAkbWV0aG9kX3Rh ZzsNCgkNCgkJCQkkemlwcGVyID0gbmV3ICRjbGFzc19uYW1lKCAkdGhpcyApOw0KCQkJCQ0KCQkJCWlm ICggdHJ1ZSA9PT0gJHppcHBlci0+aXNfYXZhaWxhYmxlKCAkdGhpcy0+X3RlbXBkaXIsICR0aGlzLT5f bW9kZSwgJHRoaXMtPl9zdGF0dXMgKSApIHsNCgkJCQkNCgkJCQkJJGF2YWlsYWJsZV9tZXRob2RzW10g PSAkbWV0aG9kX3RhZzsNCgkJCQkJJGF2YWlsYWJsZV9tZXRob2RzX2RldGFpbHNbICRtZXRob2RfdGFn IF0gPSAkemlwcGVyLT5nZXRfbWV0aG9kX2RldGFpbHMoKTsNCgkJCQkJDQoJCQkJfSBlbHNlIHsNCgkJ CQkJDQoJCQkJCS8vIEFzIHdlIG1heSBoYXZlIGVycm9ycyBmcm9tIG11bHRpcGxlIG1ldGhvZHMgdXNl IGFwcGVuZCBtb2RlDQoJCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCAkZXJyb3JfZmlsZSwgcHJpbnRfcigg JHRoaXMtPl9zdGF0dXMsIHRydWUgKSwgRklMRV9BUFBFTkQgKTsNCgkJCQkJCQkJCQ0KCQkJCX0NCgkJ

CQkNCgkJCQl1bnNldCggJHppcHBlciApOw0KCQkJfQ0KCQkJCQkJDQoJCQlyZXR1cm4gKCAhZW1wdHko ICRhdmFpbGFibGVfbWV0aG9kcyApICk7DQoNCgkJfQ0KCQkJCQkJDQoJCS8qKg0KCQkgKglnZXRfY29t cGF0aWJpbGl0eV96aXBfbWV0aG9kcygpDQoJCSAqCQ0KCQkgKglSZXR1cm5zIHRoZSBhcnJheSBvZiB6 aXAgbWV0aG9kcyB0aGF0IGFyZSByZWdhcmRlZCBhcyAiY29tcGF0aWJpbGl0eSIgbWV0aG9kcw0KCQkg KglMaWJyYXJpZXMgbXVzdCBoYXZlIGJlZW4gbG9hZGVkIGFscmVhZHkNCgkJICoJDQoJCSAqCUByZXR1 cm4JCWFycmF5CUZsYXQgYXJyYXkgb2YgemlwIG1ldGhvZHMgKGNvdWxkIGJlIGVtcHR5KQ0KCQkgKg0K CQkgKi8NCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9jb21wYXRpYmlsaXR5X3ppcF9tZXRob2RzKCkg ew0KCQkNCgkJCSRjb21wYXRpYmlsaXR5X21ldGhvZHMgPSBhcnJheSgpOw0KCQkJJHRoaXMtPmNsZWFy X3N0YXR1cygpOw0KCQkJDQoJCQlmb3JlYWNoICggJHRoaXMtPl96aXBfbWV0aG9kcyBhcyAkbWV0aG9k X3RhZyApIHsNCg0KCQkJCSRjbGFzc19uYW1lID0gJ3BsdWdpbmJ1ZGR5X3piemlwJyAuICRtZXRob2Rf dGFnOw0KCQ0KCQkJCSR6aXBwZXIgPSBuZXcgJGNsYXNzX25hbWUoICR0aGlzICk7DQoJCQkJDQoJCQkJ aWYgKCAkemlwcGVyLT5nZXRfaXNfY29tcGF0aWJpbGl0eV9tZXRob2QoKSA9PT0gdHJ1ZSApIHsNCgkJ CQkNCgkJCQkJJGNvbXBhdGliaWxpdHlfbWV0aG9kc1tdID0gJG1ldGhvZF90YWc7DQoJCQkJCQ0KCQkJ CX0NCgkJCQkNCgkJCQl1bnNldCggJHppcHBlciApOw0KCQkJfQ0KCQkJCQkJDQoJCQlyZXR1cm4gJGNv bXBhdGliaWxpdHlfbWV0aG9kczsNCg0KCQl9DQoJCQkJCQkNCgkJLyoqDQoJCSAqCWdldF9zdGF0dXMo KQ0KCQkgKgkNCgkJICoJUmV0dXJucyB0aGUgc3RhdHVzIGFycmF5DQoJCSAqCQ0KCQkgKglAcmV0dXJu CQlhcnJheQlUaGUgc3RhdHVzIGFycmF5DQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gZ2V0 X3N0YXR1cygpIHsNCgkJDQoJCQlyZXR1cm4gJHRoaXMtPl9zdGF0dXM7DQoJCQ0KCQl9DQoJCQ0KCQkv KioNCgkJICoJY2xlYXJfc3RhdHVzKCkNCgkJICoNCgkJICoJU2ltcGx5IGNsZWFyIHRoZSBpbnRlcm5h bCBzdGF0dXMgYXJyYXkuDQoJCSAqDQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJICovDQoJCXB1 YmxpYyBmdW5jdGlvbiBjbGVhcl9zdGF0dXMoKSB7DQoJCQ0KCQkJJHRoaXMtPl9zdGF0dXMgPSBhcnJh eSgpOw0KCQkJDQoJCX0NCgkJDQoJCS8qKg0KCQkgKglzZXRfc3RhdHVzX2NhbGxiYWNrKCkNCgkJICoN CgkJICoJU2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBzdGF0 dXMgdXBkYXRlLg0KCQkgKiAgQXJndW1lbnQgbXVzdCBhdCBsZWFzdCBiZSBhIG5vbi1lbXB0eSBhcnJh eSB3aXRoIDIgZWxlbWVudHMNCgkJICoNCgkJICoJQHBhcmFtCQlhcnJheSAJT2JqZWN0LT5tZXRob2Qg dG8gY2FsbCBmb3Igc3RhdHVzIHVwZGF0ZXMuDQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJICov DQoJCXB1YmxpYyBmdW5jdGlvbiBzZXRfc3RhdHVzX2NhbGxiYWNrKCAkY2FsbGJhY2sgPSBhcnJheSgp ICkgew0KCQkNCgkJCWlmICggaXNfYXJyYXkoICRjYWxsYmFjayApICYmICFlbXB0eSggJGNhbGxiYWNr ICkgJiYgKCAyID09IGNvdW50KCAkY2FsbGJhY2sgKSApICkgew0KCQkJDQoJCQkJJHRoaXMtPl9zdGF0 dXNfY2FsbGJhY2sgPSAkY2FsbGJhY2s7DQoJCQkJJHRoaXMtPl9oYXZlX3N0YXR1c19jYWxsYmFjayA9 IHRydWU7DQoNCgkJCX0NCgkJCQ0KCQl9DQoJCQ0KCQkvKioNCgkJICoJc3RhdHVzKCkNCgkJICoJDQoJ CSAqCUludm9rZSBzdGF0dXMgbWV0aG9kIG9mIHBhcmVudCBpZiBpdCBleGlzdHMNCgkJICogIE11c3Qg YmUgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdGhlcndpc2UgaWdub3JlIHRoZSBjYWxsDQoJCSAqCQ0K CQkgKglAcGFyYW0JCXN0cmluZwkJKEV4cGVjdGVkKSBTdGF0dXMgbWVzc2FnZSB0eXBlLg0KCQkgKglA cGFyYW0JCXN0cmluZwkJKEV4cGVjdGVkKSBTdGF0dXMgbWVzc2FnZS4NCgkJICoJQHJldHVybgkJbnVs bA0KCQkgKg0KCQkgKi8NCgkJcHVibGljIGZ1bmN0aW9uIHN0YXR1cygpIHsNCgkJDQoJCQlpZiAoICR0 aGlzLT5faGF2ZV9zdGF0dXNfY2FsbGJhY2sgJiYgKCBmdW5jX251bV9hcmdzKCkgPiAwICkgKSB7DQoN CgkJCQkkYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsNCgkJCQljYWxsX3VzZXJfZnVuY19hcnJheSggJHRo aXMtPl9zdGF0dXNfY2FsbGJhY2ssICRhcmdzICk7DQoJCQkJDQoJCQl9DQoJCQkNCgkJfQ0KCQ0KCX0g Ly8gRW5kIGNsYXNzDQoJDQoJLy8kcGx1Z2luYnVkZHlfemlwYnVkZHkgPSBuZXcgcGx1Z2luYnVkZHlf emlwYnVkZHkoICR0aGlzLT5fb3B0aW9uc1snYmFja3VwX2RpcmVjdG9yeSddICk7DQoNCn0= ###PACKDATA,FILE_END,/lib/zipbuddy/x-zipbuddy.php,importbuddy/lib/zipbuddy/x-zip buddy.php ###PACKDATA,FILE_START,/lib/zipbuddy/zbdir.php,importbuddy/lib/zipbuddy/zbdir.ph p PD9waHANCi8qKg0KICoJcGx1Z2luYnVkZHlfemJkaXIgQ2xhc3MNCiAqDQogKiAgUHJvdmlkZXMgYSBk aXJlY3RvcnkgY2xhc3MgZm9yIHppcGJ1ZGR5IGZvciBidWlsZGluZyBhIGRpcmVjdG9yeSB0cmVlIGZv ciBiYWNrdXANCiAqCQ0KICoJVmVyc2lvbjogMS4wLjANCiAqCUF1dGhvcjoNCiAqCUF1dGhvciBVUkk6 DQogKg0KICoJQHBhcmFtCQkkcGFyZW50CQlvYmplY3QJCU9wdGlvbmFsIHBhcmVudCBvYmplY3Qgd2hp Y2ggY2FuIHByb3ZpZGUgZnVuY3Rpb25zIGZvciByZXBvcnRpbmcsIGV0Yy4NCiAqCUByZXR1cm4JCW51 bGwNCiAqDQogKi8NCmlmICggIWNsYXNzX2V4aXN0cyggInBsdWdpbmJ1ZGR5X3piZGlyIiApICkgew0K DQoJY2xhc3MgcGx1Z2luYnVkZHlfemJkaXIgew0KCQ0KCQkvLyBzdGF0dXMgbWV0aG9kIHR5cGUgcGFy YW1ldGVyIHZhbHVlcyAtIHdvdWxkIGxpa2UgYSBjbGFzcyBmb3IgdGhpcw0KCQljb25zdCBTVEFUVVNf VFlQRV9ERVRBSUxTID0gJ2RldGFpbHMnOw0KDQoJCXB1YmxpYyAkX3ZlcnNpb24gPSAnMS4wJzsNCg0K ICAgICAgICAvKioNCiAgICAgICAgICogcGFyZW50IG9iamVjdA0KICAgICAgICAgKiANCiAgICAgICAg ICogQHZhciBwYXJlbnQgb2JqZWN0DQogICAgICAgICAqLw0KICAgICAgICBwcm90ZWN0ZWQgJF9wYXJl bnQgPSBOVUxMOw0KDQogICAgICAgIC8qKg0KICAgICAgICAgKiBUaGUgcGF0aCBvZiB0aGlzIGRpcmVj dG9yeSBub2RlDQogICAgICAgICAqIA0KICAgICAgICAgKiBAdmFyIHBhdGggc3RyaW5nDQogICAgICAg ICAqLw0KICAgICAgICBwcm90ZWN0ZWQgJF9wYXRoID0gIiI7DQogICAgICAgIA0KICAgICAgICAvKioN CiAgICAgICAgICogVGhlIGFic29sdXRlIHBhdGhzIHRvIGJlIGV4Y2x1ZGVkLCBtdXN0IGJlIC8gdGVy

bWluYXRlZA0KICAgICAgICAgKiANCiAgICAgICAgICogQHZhciBwYXRoc190b19leGNsdWRlIGFycmF5 IG9mIHN0cmluZw0KICAgICAgICAgKi8NCiAgICAgICAgcHJvdGVjdGVkICRfcGF0aHNfdG9fZXhjbHVk ZSA9IGFycmF5KCk7DQoNCiAgICAgICAgLyoqDQogICAgICAgICAqIFRoZSBkaXJlY3RvcnkgbGlzdGlu ZyBpdGVtcyB0byBiZSBpZ25vcmVkDQogICAgICAgICAqIA0KICAgICAgICAgKiBAdmFyIGl0ZW1zX3Rv X2lnbm9yZSBhcnJheSBvZiBzdHJpbmcNCiAgICAgICAgICovDQogICAgICAgIHByb3RlY3RlZCAkX2l0 ZW1zX3RvX2lnbm9yZSA9IGFycmF5KCAiLiIsICIuLiIsICIuRFNfU3RvcmUiICk7DQoNCiAgICAgICAg LyoqDQogICAgICAgICAqIFRoZSBpdGVtcyB0aGF0IGFyZSB0ZXJtaW5hbHMgYW5kIHdlIGNhbiBhZGQg ZGlyZWN0bHkgZm9yIHRoaXMgZGlyZWN0b3J5IChhYnNvbHV0ZSBwYXRocykNCiAgICAgICAgICogDQog ICAgICAgICAqIEB2YXIgdGVybWluYWxzIGFycmF5IG9mIHN0cmluZw0KICAgICAgICAgKi8NCiAgICAg ICAgcHJvdGVjdGVkICRfdGVybWluYWxzID0gYXJyYXkoKTsNCg0KICAgICAgICAvKioNCiAgICAgICAg ICogVGhlIGJyYW5jaCBub2RlcyBvZiBzdWJvcmRpbmF0ZSBkaXJlY3RvcmllcyB0aGF0IGFyZSBvbiBh biBleGNsdXNpb24gcGF0aA0KICAgICAgICAgKiANCiAgICAgICAgICogQHZhciBicmFuY2hlcyBhcnJh eSBvZiBzdHJpbmcgPT4gcGx1Z2luYnVkZHlfemJkaXINCiAgICAgICAgICovDQogICAgICAgIHByb3Rl Y3RlZCAkX2JyYW5jaGVzID0gYXJyYXkoKTsNCg0KICAgICAgICAvKioNCiAgICAgICAgICogV2hldGhl ciBvciBub3Qgd2UgY2FuIGNhbGwgYSBzdGF0dXMgY2FsYmFjaw0KICAgICAgICAgKiANCiAgICAgICAg ICogQHZhciBoYXZlX3N0YXR1c19jYWxsYmFjayBib29sDQogICAgICAgICAqLw0KCQlwcm90ZWN0ZWQg JF9oYXZlX3N0YXR1c19jYWxsYmFjayA9IGZhbHNlOw0KCQkNCiAgICAgICAgLyoqDQogICAgICAgICAq IE9iamVjdC0+bWV0aG9kIGFycmF5IGZvciBzdGF0dXMgZnVuY3Rpb24NCiAgICAgICAgICogDQogICAg ICAgICAqIEB2YXIgc3RhdHVzX2NhbGxiYWNrIGFycmF5DQogICAgICAgICAqLw0KCQlwcm90ZWN0ZWQg JF9zdGF0dXNfY2FsbGJhY2sgPSBhcnJheSgpOw0KCQkNCgkJLyoqDQoJCSAqCV9fY29uc3RydWN0KCkN CgkJICoJDQoJCSAqCURlZmF1bHQgY29uc3RydWN0b3IuDQoJCSAqCQ0KCQkgKglAcGFyYW0JCXN0cmlu ZwkJJHBhdGgJCQlUaGUgcGF0aCB0byBmb3JtIGEgbm9kZSBmb3INCgkJICoJQHBhcmFtCQlhcnJheQkJ JGV4Y2x1ZGVzCQlUaGUgbGlzdCBvZiBkaXJzL2ZpbGVzIHRvIGV4Y2x1ZGUgKGFic29sdXRlIHBhdGhz IHdpdGggLyB0ZXJtaW5hdG9yIGZvciBkaXJzKQ0KCQkgKglAcGFyYW0JCXJlZmVyZW5jZQkmJHBhcmVu dAkJW29wdGlvbmFsXSBSZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBzdGF0dXMo KSBmdW5jdGlvbiBmb3Igc3RhdHVzIHVwZGF0ZXMuDQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJ ICovDQoJCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCggJHBhdGgsICRleGNsdWRlcyA9IGFycmF5 KCksICYkcGFyZW50ID0gTlVMTCApIHsNCg0KCQkJJHRoaXMtPl9wYXRoID0gJHBhdGg7DQoJCQkkdGhp cy0+X3BhdGhzX3RvX2V4Y2x1ZGUgPSAkZXhjbHVkZXM7DQoJCQkkdGhpcy0+X3BhcmVudCA9ICYkcGFy ZW50Ow0KCQkJDQoJCQkkY29udGVudCA9IHNjYW5kaXIoICR0aGlzLT5fcGF0aCApOyAvLyBHZXQgdGhl IGRpcmVjdG9yeSBjb250ZW50LCB3aWxsIGJlIHNpbXBsZSBuYW1lcw0KCQkJDQoJCQkvLyBQcm9jZXNz IGVhY2ggaXRlbSBmb3IgaWdub3JpbmcsIHRyZWF0aW5nIGFzIGEgdGVybWluYWwgb3IgYXMgYSBicmFu Y2gNCgkJCWZvcmVhY2ggKCAkY29udGVudCBhcyAmJGl0ZW0gKSB7DQoNCgkJCQkvLyBJbml0aWFsbHkg Y2hlY2sgdGhlIHNpbXBsZSBuYW1lDQoJCQkJaWYgKCBpbl9hcnJheSggJGl0ZW0sICR0aGlzLT5faXRl bXNfdG9faWdub3JlICkgKSB7DQoNCgkJCQkJLy8gVGhpcyBpcyBqdXN0IGZsdWZmIGluIHRoZSBkaXJl Y3RvcnkgbGlzdGluZw0KCQkJCQljb250aW51ZTsNCgkJCQkJDQoJCQkJfSBlbHNlaWYgKCBpc19kaXIo ICggJHRoaXMtPl9wYXRoIC4gJGl0ZW0gKSApICkgew0KDQoJCQkJCS8vIEl0J3MgYSBkaXJlY3Rvcnks IGNoZWNrIGZvciBtYXRjaGluZyBleGNsdXNpb24gb3IgYmVpbmcgcHJlZml4IG9mIGV4Y2x1c2lvbg0K CQkJCQlpZiAoIGluX2FycmF5KCAoICR0aGlzLT5fcGF0aCAuICRpdGVtIC4gRElSRUNUT1JZX1NFUEFS QVRPUiApLCAkdGhpcy0+X3BhdGhzX3RvX2V4Y2x1ZGUgKSApIHsNCgkJCQkJDQoJCQkJCQkvLyBFeGFj dCBtYXRjaCB0byBhbiBleGNsdXNpb24sIGV4Y2x1ZGUgdGhpcyBkaXJlY3RvcnkgY29tcGxldGVseQ0K CQkJCQkJY29udGludWU7DQoJCQkJCQkNCgkJCQkJfSBlbHNlaWYgKCAkdGhpcy0+aW5fYXJyYXlfcHJl Zml4KCAoICR0aGlzLT5fcGF0aCAuICRpdGVtIC4gRElSRUNUT1JZX1NFUEFSQVRPUiApLCAkdGhpcy0+ X3BhdGhzX3RvX2V4Y2x1ZGUgKSApIHsNCg0KCQkJCQkJLy8gTmVlZCBhIG5ldyBub2RlLCBhZGQgdG8g dGhlIG5vZGUgYXJyYXkgKGFic29sdXRlIGRpciBwYXRoIGlzIGtleSkNCgkJCQkJCSR0aGlzLT5fYnJh bmNoZXNbICggJHRoaXMtPl9wYXRoIC4gJGl0ZW0gKSBdID0gbmV3IHBsdWdpbmJ1ZGR5X3piZGlyKCAo ICR0aGlzLT5fcGF0aCAuICRpdGVtIC4gRElSRUNUT1JZX1NFUEFSQVRPUiApLCAkdGhpcy0+X3BhdGhz X3RvX2V4Y2x1ZGUsICR0aGlzICk7DQoJCQkJCQkNCgkJCQkJfSBlbHNlIHsNCgkJCQkJDQoJCQkJCQkv LyBOZWl0aGVyIGV4Y2x1c2lvbiBub3IgZXhjbHVzaW9uIHByZWZpeCBzbyB3ZWxsIHRyZWF0IGl0IGFz IGEgdGVybWluYWwNCgkJCQkJCSR0aGlzLT5fdGVybWluYWxzW10gPSAoICR0aGlzLT5fcGF0aCAuICRp dGVtICk7DQoJCQkJCQ0KCQkJCQl9DQoJCQkJCQ0KCQkJCX0gZWxzZSB7DQoNCgkJCQkJLy8gQXNzdW1l IGl0J3MgYSBmaWxlLCBjaGVjayBmb3IgbWF0Y2hpbmcgZXhjbHVzaW9uDQoJCQkJCWlmICggaW5fYXJy YXkoICggJHRoaXMtPl9wYXRoIC4gJGl0ZW0gKSwgJHRoaXMtPl9wYXRoc190b19leGNsdWRlICkgKSB7 DQoJCQkJCQ0KCQkJCQkJLy8gRXhhY3QgbWF0Y2ggdG8gYW4gZXhjbHVzaW9uLCBleGNsdWRlIHRoaXMg ZmlsZSBjb21wbGV0ZWx5DQoJCQkJCQljb250aW51ZTsNCgkJCQkJCQ0KCQkJCQl9IGVsc2Ugew0KCQkJ CQkNCgkJCQkJCS8vIE5vdCBhbiBleGNsdXNpb24gc28gaXQncyBhIHRlcm1pbmFsDQoJCQkJCQkkdGhp cy0+X3Rlcm1pbmFsc1tdID0gKCAkdGhpcy0+X3BhdGggLiAkaXRlbSApOw0KCQkJCQkJDQoJCQkJCX0N CgkJCQkJDQoJCQkJfQkNCgkJCX0NCgkJCQkJCQkNCgkJfQ0KCQkNCgkJLyoqDQoJCSAqCV9fZGVzdHJ1 Y3QoKQ0KCQkgKgkNCgkJICoJRGVmYXVsdCBkZXN0cnVjdG9yLg0KCQkgKgkNCgkJICoJQHJldHVybgkJ bnVsbA0KCQkgKg0KCQkgKi8NCgkJcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoICkgew0KDQoJCX0N

CgkJCQkNCgkJLyoqDQoJCSAqCXNldF9zdGF0dXNfY2FsbGJhY2soKQ0KCQkgKg0KCQkgKglTZXRzIGEg cmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHN0YXR1cyB1cGRhdGUuDQoJ CSAqICBBcmd1bWVudCBtdXN0IGF0IGxlYXN0IGJlIGEgbm9uLWVtcHR5IGFycmF5IHdpdGggMiBlbGVt ZW50cw0KCQkgKg0KCQkgKglAcGFyYW0JCWFycmF5IAkkY2FsbGJhY2sJT2JqZWN0LT5tZXRob2QgdG8g Y2FsbCBmb3Igc3RhdHVzIHVwZGF0ZXMuDQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJICovDQoJ CXB1YmxpYyBmdW5jdGlvbiBzZXRfc3RhdHVzX2NhbGxiYWNrKCAkY2FsbGJhY2sgPSBhcnJheSgpICkg ew0KCQkNCgkJCWlmICggaXNfYXJyYXkoICRjYWxsYmFjayApICYmICFlbXB0eSggJGNhbGxiYWNrICkg JiYgKCAyID09IGNvdW50KCAkY2FsbGJhY2sgKSApICkgew0KCQkJDQoJCQkJJHRoaXMtPl9zdGF0dXNf Y2FsbGJhY2sgPSAkY2FsbGJhY2s7DQoJCQkJJHRoaXMtPl9oYXZlX3N0YXR1c19jYWxsYmFjayA9IHRy dWU7DQoNCgkJCX0NCgkJCQ0KCQl9DQoJCQ0KCQkvKioNCgkJICoJc3RhdHVzKCkNCgkJICoJDQoJCSAq CUludm9rZSBzdGF0dXMgbWV0aG9kIG9mIHBhcmVudCBpZiBpdCBleGlzdHMNCgkJICogIE11c3QgYmUg YXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdGhlcndpc2UgaWdub3JlIHRoZSBjYWxsDQoJCSAqCQ0KCQkg KglAcGFyYW0JCXN0cmluZwkJJHR5cGUJCShFeHBlY3RlZCkgU3RhdHVzIG1lc3NhZ2UgdHlwZS4NCgkJ ICoJQHBhcmFtCQlzdHJpbmcJCSRtZXNzYWdlCShFeHBlY3RlZCkgU3RhdHVzIG1lc3NhZ2UuDQoJCSAq CUByZXR1cm4JCW51bGwNCgkJICoNCgkJICovDQoJCXB1YmxpYyBmdW5jdGlvbiBzdGF0dXMoKSB7DQoJ CQ0KCQkJaWYgKCAkdGhpcy0+X2hhdmVfc3RhdHVzX2NhbGxiYWNrICYmICggZnVuY19udW1fYXJncygp ID4gMCApICkgew0KDQoJCQkJJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7DQoJCQkJY2FsbF91c2VyX2Z1 bmNfYXJyYXkoICR0aGlzLT5fc3RhdHVzX2NhbGxiYWNrLCAkYXJncyApOw0KCQkJCQ0KCQkJfQ0KCQkJ DQoJCX0NCgkJDQoJCS8qKg0KCQkgKglnZXRfdGVybWluYWxzKCkNCgkJICoJDQoJCSAqCVJldHVybnMg dGhlIGFycmF5IG9mIHRlcm1pbmFscyBmcm9tIHRoaXMgZGlyIHBsdXMgc3Vib3JkaW5hdGVzDQoJCSAq CQ0KCQkgKglAcmV0dXJuCQlhcnJheQlGbGF0IGFycmF5IG9mIHRlcm1pbmFsIGZpbGVuYW1lcyBhbmQg ZGlyZWN0b3J5IG5hbWVzDQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gZ2V0X3Rlcm1pbmFs cyggKSB7DQoJCQ0KCQkJLy8gTWluaW11bSBpcyBvdXIgdGVybWluYWxzDQoJCQkkYWxsX3Rlcm1pbmFs cyA9ICR0aGlzLT5fdGVybWluYWxzOw0KCQkJDQoJCQkvLyBOb3cgYWRkIHRlcm1pbmFscyBmcm9tIGVh Y2ggc3Vib3JkaW5hdGUNCgkJCWZvcmVhY2ggKCAkdGhpcy0+X2JyYW5jaGVzIGFzICRicmFuY2ggKSB7 DQoJCQkNCgkJCQkkYWxsX3Rlcm1pbmFscyA9IGFycmF5X21lcmdlKCAkYWxsX3Rlcm1pbmFscywgJGJy YW5jaC0+Z2V0X3Rlcm1pbmFscygpICk7DQoJCQkJDQoJCQl9DQoJCQkNCgkJCXJldHVybiAkYWxsX3Rl cm1pbmFsczsNCgkJCQ0KCQl9DQoJCQ0KCQkvKioNCgkJICoJZ2V0X3JlbGF0aXZlX2V4Y2x1ZGVzKCkN CgkJICoJDQoJCSAqCVJldHVybnMgdGhlIGFycmF5IG9mIGV4Y2x1c2lvbnMgd2l0aCBvcHRpb25hbCBk aXJlY3RvcnkgcHJlZml4IHJlbW92ZWQgcHJlZml4IHJlbW92ZWQNCgkJICoJDQoJCSAqCUBwYXJhbQkJ c3RyaW5nCVRoZSBiYXNlIGRpcmVjdG9yeSBwcmVmaXggdG8gYmUgcmVtb3ZlZA0KCQkgKglAcmV0dXJu CQlhcnJheQlGbGF0IGFycmF5IG9mIHJlbGF0aXZlICh0byBzaXRlIHJvb3QpIGV4Y2x1ZGVkIGZpbGVu YW1lcyBhbmQgZGlyZWN0b3J5IG5hbWVzDQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gZ2V0 X3JlbGF0aXZlX2V4Y2x1ZGVzKCAkYmFzZSA9ICcnICkgew0KCQkNCgkJCS8vIFRoZSBiYXNlZGlyIG11 c3QgaGF2ZSBhIHRyYWlsaW5nIGRpcmVjdG9yeSBzZXBhcmF0b3INCgkJCSRiYXNlZGlyID0gKCBydHJp bSggdHJpbSggJGJhc2UgKSwgRElSRUNUT1JZX1NFUEFSQVRPUiApICkgLiBESVJFQ1RPUllfU0VQQVJB VE9SOw0KCQkNCgkJCSRyZWxhdGl2ZV9leGNsdWRlcyA9ICR0aGlzLT5fcGF0aHNfdG9fZXhjbHVkZTsN CgkJCQ0KCQkJZm9yZWFjaCAoICRyZWxhdGl2ZV9leGNsdWRlcyBhcyAmJGV4Y2x1ZGUgKSB7DQoJCQkN CgkJCQkvLyBSZW1vdmUgYmFzZSBwcmVmaXggYnV0IGxlYXZlIGxlYWRpbmcgc2xhc2gNCgkJCQkkZXhj bHVkZSA9IHN0cl9yZXBsYWNlKCBydHJpbSggJGJhc2VkaXIsIERJUkVDVE9SWV9TRVBBUkFUT1IgKSwg JycsICRleGNsdWRlICk7DQoJCQkNCgkJCX0NCgkJCQ0KCQkJcmV0dXJuICRyZWxhdGl2ZV9leGNsdWRl czsNCgkJCQ0KCQl9DQoJCQ0KCQkvKioNCgkJICoJaW5fYXJyYXlfcHJlZml4KCkNCgkJICoJDQoJCSAq CUNoZWNrIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSBwcmVmaXggb2YgYW55IHN0cmluZyBpbiB0aGUg Z2l2ZW4gYXJyYXkNCgkJICoJDQoJCSAqICBAcGFyYW0JCXN0cmluZwkkcHJlZml4CQlUaGUgcHJlZml4 IHN0cmluZw0KCQkgKiAgQHBhcmFtCQlhcnJheQkkY2FuZGlkYXRlcwlUaGUgYXJyYXkgb2Ygc3RyaW5n cw0KCQkgKglAcmV0dXJuCQlib29sCXRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHByZWZpeCwgZmFsc2Ug b3RoZXJ3aXNlDQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gaW5fYXJyYXlfcHJlZml4KCAk cHJlZml4LCBhcnJheSAkY2FuZGlkYXRlcyApIHsNCg0KCQkJZm9yZWFjaCAoICRjYW5kaWRhdGVzIGFz ICRjYW5kaWRhdGUgKSB7DQoJCQkNCgkJCQlpZiAoICEoIGZhbHNlID09PSBzdHJwb3MoICRjYW5kaWRh dGUsICRwcmVmaXggKSApICkgew0KDQoJCQkJCS8vIFdlIGZvdW5kIHRoZSBwcmVmaXgNCgkJCQkJcmV0 dXJuIHRydWU7DQoJCQkJCQ0KCQkJCX0NCgkJCQkNCgkJCX0NCgkJCQ0KCQkJLy8gR290IHRoaXMgZmFy IHNvIG5vdCBhIHByZWZpeA0KCQkJcmV0dXJuIGZhbHNlOw0KCQkJDQoJCX0NCgkJDQoJfSAvLyBlbmQg cGx1Z2luYnVkZHlfemJkaXIgY2xhc3MuCQ0KCQ0KfQ0KPz4= ###PACKDATA,FILE_END,/lib/zipbuddy/zbdir.php,importbuddy/lib/zipbuddy/zbdir.php ###PACKDATA,FILE_START,/lib/zipbuddy/zbzipcore.php,importbuddy/lib/zipbuddy/zbzi pcore.php PD9waHANCi8qKg0KICoJcGx1Z2luYnVkZHlfemJ6aXBjb3JlIENsYXNzDQogKg0KICogIFByb3ZpZGVz IGFuIGFic3RyYWN0IHppcCBjYXBhYmlsaXR5IGNvcmUgY2xhc3MNCiAqCQ0KICoJVmVyc2lvbjogMS4w LjANCiAqCUF1dGhvcjoNCiAqCUF1dGhvciBVUkk6DQogKg0KICoJQHBhcmFtCQkkcGFyZW50CQlvYmpl Y3QJCU9wdGlvbmFsIHBhcmVudCBvYmplY3Qgd2hpY2ggY2FuIHByb3ZpZGUgZnVuY3Rpb25zIGZvciBy

ZXBvcnRpbmcsIGV0Yy4NCiAqCUByZXR1cm4JCW51bGwNCiAqDQogKi8NCmlmICggIWNsYXNzX2V4aXN0 cyggInBsdWdpbmJ1ZGR5X3piemlwY29yZSIgKSApIHsNCg0KCWFic3RyYWN0IGNsYXNzIHBsdWdpbmJ1 ZGR5X3piemlwY29yZSB7DQoJDQoJCS8vIHN0YXR1cyBtZXRob2QgdHlwZSBwYXJhbWV0ZXIgdmFsdWVz IC0gd291bGQgbGlrZSBhIGNsYXNzIGZvciB0aGlzDQoJCWNvbnN0IFNUQVRVU19UWVBFX0RFVEFJTFMg PSAnZGV0YWlscyc7DQoJCWNvbnN0IE1BWF9FUlJPUl9MSU5FU19UT19TSE9XID0gMTA7DQoNCgkJcHVi bGljICRfdmVyc2lvbiA9ICcxLjAnOw0KDQogICAgICAgIC8qKg0KICAgICAgICAgKiBwYXJlbnQgb2Jq ZWN0DQogICAgICAgICAqIA0KICAgICAgICAgKiBAdmFyIHBhcmVudCBvYmplY3QNCiAgICAgICAgICov DQogICAgICAgIHByb3RlY3RlZCAkX3BhcmVudCA9IE5VTEw7DQoNCiAgICAgICAgLyoqDQogICAgICAg ICAqIFRoZSBwbHVnaW4gcGF0aCBmb3IgdGhpcyBwbHVnaW4NCiAgICAgICAgICogDQogICAgICAgICAq IEB2YXIgJF9wbHVnaW5QYXRoIHN0cmluZw0KICAgICAgICAgKi8NCiAgICAgICAgcHVibGljICRfcGx1 Z2luUGF0aCA9ICcnOw0KDQogICAgICAgIC8qKg0KICAgICAgICAgKiBUaGUgcGF0aCBvZiB0aGlzIGRp cmVjdG9yeSBub2RlDQogICAgICAgICAqIA0KICAgICAgICAgKiBAdmFyIHBhdGggc3RyaW5nDQogICAg ICAgICAqLw0KICAgICAgICBwcm90ZWN0ZWQgJF9wYXRoID0gIiI7DQogICAgICAgIA0KICAgICAgICAv KioNCiAgICAgICAgICogVGhlIGFic29sdXRlIHBhdGhzIHRvIGJlIGV4Y2x1ZGVkLCBtdXN0IGJlIC8g dGVybWluYXRlZA0KICAgICAgICAgKiANCiAgICAgICAgICogQHZhciBwYXRoc190b19leGNsdWRlIGFy cmF5IG9mIHN0cmluZw0KICAgICAgICAgKi8NCiAgICAgICAgcHJvdGVjdGVkICRfcGF0aHNfdG9fZXhj bHVkZSA9IGFycmF5KCk7DQoNCiAgICAgICAgLyoqDQogICAgICAgICAqIFRoZSBkZXRhaWxzIG9mIHRo ZSBtZXRob2QNCiAgICAgICAgICogDQogICAgICAgICAqIEB2YXIgbWV0aG9kX2RldGFpbHMgYXJyYXkN CiAgICAgICAgICovDQoJCXByb3RlY3RlZCAkX21ldGhvZF9kZXRhaWxzID0gYXJyYXkoKTsNCgkJDQog ICAgICAgIC8qKg0KICAgICAgICAgKiBUaGUgc2V0IG9mIHBhdGhzIGZvciB3aGVyZSB0byBsb29rIGZv ciB6aXAgb3Igb3RoZXIgZXhlY3V0YWJsZXMNCiAgICAgICAgICoNCiAgICAgICAgICogQXBwbGllcyB0 byBMaW51eCBvbmx5IC0gZmlyc3QgcGF0aCBpcyBlbXB0eSBzbyB0aGF0IGRlZmF1bHQgZW52aXJvbm1l bnQgUEFUSCBpcyB1c2VkDQogICAgICAgICAqIGZpcnN0LCBhZnRlciB0aGF0IHBvc3NpYmxlIHBhdGhz IChtdXN0IGluY2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2gpDQogICAgICAgICAqIA0KICAg ICAgICAgKiBAdmFyICBleGVjdXRhYmxlX3BhdGhzCWFycmF5DQogICAgICAgICAqLw0KCQlwcm90ZWN0 ZWQgJF9leGVjdXRhYmxlX3BhdGhzID0gYXJyYXkoICcnLCAnL3Vzci9iaW4vJywgJy91c3IvbG9jYWwv YmluLycgKTsNCgkJDQogICAgICAgIC8qKg0KICAgICAgICAgKiBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4g Y2FsbCBhIHN0YXR1cyBjYWxiYWNrDQogICAgICAgICAqIA0KICAgICAgICAgKiBAdmFyIGhhdmVfc3Rh dHVzX2NhbGxiYWNrIGJvb2wNCiAgICAgICAgICovDQoJCXByb3RlY3RlZCAkX2hhdmVfc3RhdHVzX2Nh bGxiYWNrID0gZmFsc2U7DQoJCQ0KICAgICAgICAvKioNCiAgICAgICAgICogT2JqZWN0LT5tZXRob2Qg YXJyYXkgZm9yIHN0YXR1cyBmdW5jdGlvbg0KICAgICAgICAgKiANCiAgICAgICAgICogQHZhciBzdGF0 dXNfY2FsbGJhY2sgYXJyYXkNCiAgICAgICAgICovDQoJCXByb3RlY3RlZCAkX3N0YXR1c19jYWxsYmFj ayA9IGFycmF5KCk7DQoJCQ0KICAgICAgICAvKioNCiAgICAgICAgICogQXJyYXkgb2Ygc3RhdHVzIGlu Zm9ybWF0aW9uDQogICAgICAgICAqIA0KICAgICAgICAgKiBAdmFyIHN0YXR1cyBhcnJheQ0KICAgICAg ICAgKi8NCgkJcHJvdGVjdGVkICRfc3RhdHVzID0gYXJyYXkoKTsNCgkJDQoJCS8qKg0KCQkgKglfX2Nv bnN0cnVjdCgpDQoJCSAqCQ0KCQkgKglEZWZhdWx0IGNvbnN0cnVjdG9yLg0KCQkgKgkNCgkJICoJQHBh cmFtCQlyZWZlcmVuY2UJJiRwYXJlbnQJCVtvcHRpb25hbF0gUmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qg Y29udGFpbmluZyB0aGUgc3RhdHVzKCkgZnVuY3Rpb24gZm9yIHN0YXR1cyB1cGRhdGVzLg0KCQkgKglA cmV0dXJuCQludWxsDQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoICYk cGFyZW50ID0gTlVMTCApIHsNCg0KCQkJJHRoaXMtPl9wYXJlbnQgPSAmJHBhcmVudDsNCgkJCSR0aGlz LT5fcGx1Z2luUGF0aCA9ICR0aGlzLT5fcGFyZW50LT5fcGx1Z2luUGF0aDsNCgkJCQkJCQkJCQ0KCQl9 DQoJCQ0KCQkvKioNCgkJICoJX19kZXN0cnVjdCgpDQoJCSAqCQ0KCQkgKglEZWZhdWx0IGRlc3RydWN0 b3IuDQoJCSAqCQ0KCQkgKglAcmV0dXJuCQludWxsDQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rp b24gX19kZXN0cnVjdCggKSB7DQoNCgkJfQ0KCQkJCQ0KCQkvKioNCgkJICoJc2V0X3N0YXR1c19jYWxs YmFjaygpDQoJCSAqDQoJCSAqCVNldHMgYSByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uIHRvIGNhbGwg Zm9yIGVhY2ggc3RhdHVzIHVwZGF0ZS4NCgkJICogIEFyZ3VtZW50IG11c3QgYXQgbGVhc3QgYmUgYSBu b24tZW1wdHkgYXJyYXkgd2l0aCAyIGVsZW1lbnRzDQoJCSAqDQoJCSAqCUBwYXJhbQkJYXJyYXkgCSRj YWxsYmFjawlPYmplY3QtPm1ldGhvZCB0byBjYWxsIGZvciBzdGF0dXMgdXBkYXRlcy4NCgkJICoJQHJl dHVybgkJbnVsbA0KCQkgKg0KCQkgKi8NCgkJcHVibGljIGZ1bmN0aW9uIHNldF9zdGF0dXNfY2FsbGJh Y2soICRjYWxsYmFjayA9IGFycmF5KCkgKSB7DQoJCQ0KCQkJaWYgKCBpc19hcnJheSggJGNhbGxiYWNr ICkgJiYgIWVtcHR5KCAkY2FsbGJhY2sgKSAmJiAoIDIgPT0gY291bnQoICRjYWxsYmFjayApICkgKSB7 DQoJCQkNCgkJCQkkdGhpcy0+X3N0YXR1c19jYWxsYmFjayA9ICRjYWxsYmFjazsNCgkJCQkkdGhpcy0+ X2hhdmVfc3RhdHVzX2NhbGxiYWNrID0gdHJ1ZTsNCg0KCQkJfQ0KCQkJDQoJCX0NCgkJDQoJCS8qKg0K CQkgKglzdGF0dXMoKQ0KCQkgKgkNCgkJICoJSW52b2tlIHN0YXR1cyBtZXRob2Qgb2YgcGFyZW50IGlm IGl0IGV4aXN0cw0KCQkgKiAgTXVzdCBiZSBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG90aGVyd2lzZSBp Z25vcmUgdGhlIGNhbGwNCgkJICoJDQoJCSAqCUBwYXJhbQkJc3RyaW5nCQkkdHlwZQkJKEV4cGVjdGVk KSBTdGF0dXMgbWVzc2FnZSB0eXBlLg0KCQkgKglAcGFyYW0JCXN0cmluZwkJJG1lc3NhZ2UJKEV4cGVj dGVkKSBTdGF0dXMgbWVzc2FnZS4NCgkJICoJQHJldHVybgkJbnVsbA0KCQkgKg0KCQkgKi8NCgkJcHVi bGljIGZ1bmN0aW9uIHN0YXR1cygpIHsNCgkJDQoJCQlpZiAoICR0aGlzLT5faGF2ZV9zdGF0dXNfY2Fs bGJhY2sgJiYgKCBmdW5jX251bV9hcmdzKCkgPiAwICkgKSB7DQoNCgkJCQkkYXJncyA9IGZ1bmNfZ2V0

X2FyZ3MoKTsNCgkJCQljYWxsX3VzZXJfZnVuY19hcnJheSggJHRoaXMtPl9zdGF0dXNfY2FsbGJhY2ss ICRhcmdzICk7DQoJCQkJDQoJCQl9DQoJCQkNCgkJfQ0KCQkNCgkJLyoqDQoJCSAqCWdldF9zdGF0dXMo KQ0KCQkgKgkNCgkJICoJUmV0dXJucyB0aGUgc3RhdHVzIGFycmF5DQoJCSAqCQ0KCQkgKglAcmV0dXJu CQlhcnJheQlUaGUgc3RhdHVzIGFycmF5DQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gZ2V0 X3N0YXR1cygpIHsNCgkJDQoJCQlyZXR1cm4gJHRoaXMtPl9zdGF0dXM7DQoJCQ0KCQl9DQoJCQ0KCQkv KioNCgkJICoJY2xlYXJfc3RhdHVzKCkNCgkJICoJDQoJCSAqCUNsZWFycyB0aGUgaW50ZXJuYWwgc3Rh dHVzIGFycmF5DQoJCSAqCQ0KCQkgKglAcmV0dXJuCQlhcnJheQlUaGUgc3RhdHVzIGFycmF5DQoJCSAq DQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gY2xlYXJfc3RhdHVzKCkgew0KCQkNCgkJCSR0aGlzLT5f c3RhdHVzID0gYXJyYXkoKTsNCgkJDQoJCX0NCgkJDQoJCS8qKg0KCQkgKglnZXRfbWV0aG9kX3RhZygp DQoJCSAqCQ0KCQkgKglSZXR1cm5zIHRoZSAoc3RhdGljKSBtZXRob2QgdGFnDQoJCSAqCQ0KCQkgKglA cmV0dXJuCQlzdHJpbmcgVGhlIG1ldGhvZCB0YWcNCgkJICoNCgkJICovDQoJCWFic3RyYWN0IHB1Ymxp YyBmdW5jdGlvbiBnZXRfbWV0aG9kX3RhZygpOw0KDQoJCS8qKg0KCQkgKglnZXRfaXNfY29tcGF0aWJp bGl0eV9tZXRob2QoKQ0KCQkgKgkNCgkJICoJUmV0dXJucyB0aGUgKHN0YXRpYykgaXNfY29tcGF0aWJp bGl0eV9tZXRob2QgYm9vbGVhbg0KCQkgKgkNCgkJICoJQHJldHVybgkJYm9vbA0KCQkgKg0KCQkgKi8N CgkJYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldF9pc19jb21wYXRpYmlsaXR5X21ldGhvZCgpOw0K DQoJCS8qKg0KCQkgKglnZXRfbWV0aG9kX2RldGFpbHMoKQ0KCQkgKgkNCgkJICoJUmV0dXJucyB0aGUg ZGV0YWlscyBhcnJheQ0KCQkgKgkNCgkJICoJQHJldHVybgkJYXJyYXkNCgkJICoNCgkJICovDQoJCXB1 YmxpYyBmdW5jdGlvbiBnZXRfbWV0aG9kX2RldGFpbHMoKSB7DQoJCQ0KCQkJcmV0dXJuICR0aGlzLT5f bWV0aG9kX2RldGFpbHM7DQoJCQkNCgkJfQ0KDQoJCS8qKg0KCQkgKglzZXRfbWV0aG9kX2RldGFpbHMo KQ0KCQkgKgkNCgkJICoJU2V0cyB0aGUgaW50ZXJuYWwgKHNldHRhYmxlKSBkZXRhaWxzDQoJCSAqCQ0K CQkgKglAcGFyYW0JCWFycmF5DQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJICovDQoJCXB1Ymxp YyBmdW5jdGlvbiBzZXRfbWV0aG9kX2RldGFpbHMoIGFycmF5ICRkZXRhaWxzLCAkbWVyZ2UgPSB0cnVl ICkgew0KCQkNCgkJCWlmICggdHJ1ZSA9PT0gJG1lcmdlICkgew0KCQkJDQoJCQkJJHRoaXMtPl9tZXRo b2RfZGV0YWlsc1sgJ2F0dHInIF0gPSBhcnJheV9tZXJnZSggJHRoaXMtPl9tZXRob2RfZGV0YWlsc1sg J2F0dHInIF0sICRkZXRhaWxzWyAnYXR0cicgXSApOw0KCQkJCSR0aGlzLT5fbWV0aG9kX2RldGFpbHNb ICdwYXJhbScgXSA9IGFycmF5X21lcmdlKCAkdGhpcy0+X21ldGhvZF9kZXRhaWxzWyAncGFyYW0nIF0s ICRkZXRhaWxzWyAncGFyYW0nIF0gKTsNCgkJCQ0KCQkJfSBlbHNlIHsNCgkJCQ0KCQkJCSR0aGlzLT5f bWV0aG9kX2RldGFpbHMgPSAkZGV0YWlsczsNCgkJCQ0KCQkJfQ0KCQkJCQkJDQoJCX0NCg0KCQkvKioN CgkJICoJZ2V0X2V4ZWN1dGFibGVfcGF0aHMoKQ0KCQkgKgkNCgkJICoJUmV0dXJucyB0aGUgZXhlY3V0 YWJsZV9wYXRocyBhcnJheQ0KCQkgKgkNCgkJICoJQHJldHVybgkJYXJyYXkNCgkJICoNCgkJICovDQoJ CXB1YmxpYyBmdW5jdGlvbiBnZXRfZXhlY3V0YWJsZV9wYXRocygpIHsNCgkJDQoJCQlyZXR1cm4gJHRo aXMtPl9leGVjdXRhYmxlX3BhdGhzOw0KCQkJDQoJCX0NCg0KCQkvKioNCgkJICoJc2V0X2V4ZWN1dGFi bGVfcGF0aHMoKQ0KCQkgKgkNCgkJICoJU2V0cyB0aGUgZXhlY3V0YWJsZV9wYXRocyBhcnJheSBzbyBj YW4gYmUgdXNlZCB0byBhdWdtZW50IG9yIG92ZXJyaWRlIHRoZSBkZWZhdWx0DQoJCSAqCQ0KCQkgKglA cGFyYW0JCWFycmF5DQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJICovDQoJCXB1YmxpYyBmdW5j dGlvbiBzZXRfZXhlY3V0YWJsZV9wYXRocyggYXJyYXkgJHBhdGhzLCAkbWVyZ2UgPSB0cnVlICkgew0K CQkNCgkJCWlmICggdHJ1ZSA9PT0gJG1lcmdlICkgew0KCQkJDQoJCQkJJHRoaXMtPl9leGVjdXRhYmxl X3BhdGhzID0gYXJyYXlfbWVyZ2UoICR0aGlzLT5fZXhlY3V0YWJsZV9wYXRocywgJHBhdGhzICk7DQoJ CQkNCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQkkdGhpcy0+X2V4ZWN1dGFibGVfcGF0aHMgPSAkcGF0aHM7 DQoJCQkNCgkJCX0NCgkJCQkJCQ0KCQl9DQoNCgkJLyoqDQoJCSAqCWRlbGV0ZV9kaXJlY3RvcnlfcmVj dXJzaXZlKCkNCgkJICoJDQoJCSAqCVJlY3Vyc2l2ZWx5IGRlbGV0ZSBhIGRpcmVjdG9yeSBhbmQgaXQn cyBjb250ZW50DQoJCSAqCQ0KCQkgKglAcGFyYW0JCXN0cmluZwkkZGlyZWN0b3J5CURpcmVjdG9yeSB0 byBkZWxldGUNCgkJICoJQHJldHVybgkJYm9vbAkJCQlUcnVlIGlmIG9wZXJhdGlvbiBmdWxseSBzdWNj ZXNzZnVsLCBvdGhlcndpc2UgZmFsc2UNCgkJICoNCgkJICovDQoJCXB1YmxpYyBmdW5jdGlvbiBkZWxl dGVfZGlyZWN0b3J5X3JlY3Vyc2l2ZSggJGRpcmVjdG9yeSApIHsNCgkJDQoJCQkkZGlyZWN0b3J5ID0g cHJlZ19yZXBsYWNlKCAnfFsvXFxcXF0rJHwnLCAnJywgJGRpcmVjdG9yeSApOw0KDQoJCQkkZmlsZXMg PSBnbG9iKCAkZGlyZWN0b3J5IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICcqJywgR0xPQl9NQVJLICk7 DQoJCQlpZiAoIGlzX2FycmF5KCAkZmlsZXMgKSAmJiAhZW1wdHkoICRmaWxlcyApICkgew0KCQkJDQoJ CQkJZm9yZWFjaCggJGZpbGVzIGFzICRmaWxlICkgew0KCQkJCQ0KCQkJCQlpZiggRElSRUNUT1JZX1NF UEFSQVRPUiA9PT0gc3Vic3RyKCAkZmlsZSwgLTEgKSApIHsNCgkJCQkJDQoJCQkJCQkkdGhpcy0+ZGVs ZXRlX2RpcmVjdG9yeV9yZWN1cnNpdmUoICRmaWxlICk7DQoJCQkJCQkNCgkJCQkJfSBlbHNlIHsNCgkJ CQkJDQoJCQkJCQl1bmxpbmsoICRmaWxlICk7DQoJCQkJCQkNCgkJCQkJfQ0KCQkJCQkNCgkJCQl9DQoJ CQkJDQoJCQl9DQoJCQkNCgkJCS8vIEl0IHJlYWxseSBzaG91bGQgYmUgYSBkaXJlY3RvcnkgYnV0IGNo ZWNrIGluIGNhc2UNCgkJCWlmICggaXNfZGlyKCAkZGlyZWN0b3J5ICkgKSB7DQoJCQkNCgkJCQlybWRp ciggJGRpcmVjdG9yeSApOw0KCQkJCQ0KCQkJfQ0KCQkJDQoJCQkvLyBDaGVjayBpZiB3ZSBmYWlsZWQg dG8gZGVsZXRlIGl0IC0gcG9zc2libHkgbm90IGFsbCBjb250ZW50IHdhcyBhYmxlIHRvIGJlIGRlbGV0 ZWQNCgkJCWlmICggaXNfZGlyKCAkZGlyZWN0b3J5ICkgKSB7DQoJCQkNCgkJCQlyZXR1cm4gZmFsc2U7 DQoJCQkJDQoJCQl9IGVsc2Ugew0KCQkJCQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJCQ0KCQkJfQ0KCQkJ DQoJCX0NCgkJDQoJCS8qKg0KCQkgKglpc19hdmFpbGFibGUoKQ0KCQkgKgkNCgkJICoJQSBmdW5jdGlv biB0aGF0IHRlc3RzIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBzcGVjaWZpYyBtZXRob2QgaW4g

dGhlIHJlcXVlc3RlZCBtb2RlDQoJCSAqCQ0KCQkgKglAcGFyYW0JCXN0cmluZwkkdGVtcGRpcglUZW1w b3JhcnkgZGlyZWN0b3J5IHRvIHVzZSBmb3IgYW55IHRlc3QgZmlsZXMgKG11c3QgYmUgd3JpdGVhYmxl KQ0KCQkgKglAcGFyYW0JCXN0cmluZwkkbW9kZQkJTWV0aG9kIG1vZGUgdG8gdGVzdCBmb3INCgkJICoJ QHBhcmFtCQlhcnJheQkkc3RhdHVzCQlBcnJheSBmb3IgYW55IHN0YXR1cyBtZXNzYWdlcw0KCQkgKglA cmV0dXJuCQlib29sCQkJCVRydWUgaWYgdGhlIG1ldGhvZC9tb2RlIGNvbWJpbmF0aW9uIGlzIGF2YWls YWJsZSwgZmFsc2Ugb3RoZXJ3aXNlDQoJCSAqDQoJCSAqLw0KCQlhYnN0cmFjdCBwdWJsaWMgZnVuY3Rp b24gaXNfYXZhaWxhYmxlKCAkdGVtcGRpciwgJG1vZGUsICYkc3RhdHVzICk7DQoJCQ0KCQkvKioNCgkJ ICoJY3JlYXRlKCkNCgkJICoJDQoJCSAqCUEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGFuIGFyY2hpdmUg ZmlsZQ0KCQkgKgkNCgkJICoJVGhlICRleGNsdWRlcyB3aWxsIGJlIGEgbGlzdCBvciByZWxhdGl2ZSBw YXRoIGV4Y2x1ZGVzIGlmIHRoZSAkbGlzdG1ha2VyIG9iamVjdCBpcyBOVUxMIG90ZWhyd2lzZQ0KCQkg Kgl3aWxsIGJlIGFic29sdXRlIHBhdGggZXhjbHVkZXMgYW5kIHJlbGF0aXZlIHBhdGggZXhjbHVkZXMg Y2FuIGJlIGhhZCBmcm9tIHRoZSAkbGlzdG1ha2VyIG9iamVjdA0KCQkgKgkNCgkJICoJQHBhcmFtCQlz dHJpbmcJJHppcAkJCUZ1bGwgcGF0aCAmIGZpbGVuYW1lIG9mIFpJUCBBcmNoaXZlIGZpbGUgdG8gY3Jl YXRlDQoJCSAqCUBwYXJhbQkJc3RyaW5nCSRkaXIJCQlGdWxsIHBhdGggb2YgZGlyZWN0b3J5IHRvIGFk ZCB0byBaSVAgQXJjaGl2ZSBmaWxlDQoJCSAqCUBwYXJhbQkJYm9vbAkkY29tcHJlc3Npb24JVHJ1ZSB0 byBlbmFibGUgY29tcHJlc3Npb24gb2YgZmlsZXMgYWRkZWQgdG8gWklQIEFyY2hpdmUgZmlsZQ0KCQkg KglAcGFyYW1lCQlhcnJheQkkZXhjbHVkZXMJCUxpc3Qgb2YgZWl0aGVyIGFic29sdXRlIHBhdGggZXhj bHVzaW9ucyBvciByZWxhdGl2ZSBleGNsdXNpb25zDQoJCSAqCUBwYXJhbQkJc3RyaW5nCSR0ZW1wZGly CQlGdWxsIHBhdGggb2YgZGlyZWN0b3J5IGZvciB0ZW1wb3JhcnkgdXNhZ2UNCgkJICoJQHBhcmFtCQlv YmplY3QJJGxpc3RtYWtlcgkJVGhlIG9iamVjdCBmcm9tIHdoaWNoIHdlIGNhbiBnZXQgYW4gaW5jbHVz aW9ucyBsaXN0DQoJCSAqCUByZXR1cm4JCWJvb2wJCQkJCVRydWUgaWYgdGhlIGNyZWF0aW9uIHdhcyBz dWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UNCgkJICoNCgkJICovDQoJCWFic3RyYWN0IHB1YmxpYyBm dW5jdGlvbiBjcmVhdGUoICR6aXAsICRkaXIsICRjb21wcmVzc2lvbiwgJGV4Y2x1ZGVzLCAkdGVtcGRp ciwgJGxpc3RtYWtlciA9IE5VTEwgKTsNCgkJDQoJfSAvLyBlbmQgcGx1Z2luYnVkZHlfemJ6aXBjb3Jl IGNsYXNzLgkNCgkNCn0NCj8+ ###PACKDATA,FILE_END,/lib/zipbuddy/zbzipcore.php,importbuddy/lib/zipbuddy/zbzipc ore.php ###PACKDATA,FILE_START,/lib/zipbuddy/zbzipexec.php,importbuddy/lib/zipbuddy/zbzi pexec.php PD9waHANCi8qKg0KICoJcGx1Z2luYnVkZHlfemJ6aXBleGVjIENsYXNzDQogKg0KICogIEV4dGVuZHMg dGhlIHppcCBjYXBhYmlsaXR5IGNvcmUgY2xhc3Mgd2l0aCBwcm9jIHNwZWNpZmljIGNhcGFiaWxpdHkN CiAqCQ0KICoJVmVyc2lvbjogMS4wLjANCiAqCUF1dGhvcjoNCiAqCUF1dGhvciBVUkk6DQogKg0KICoJ QHBhcmFtCQkkcGFyZW50CQlvYmplY3QJCU9wdGlvbmFsIHBhcmVudCBvYmplY3Qgd2hpY2ggY2FuIHBy b3ZpZGUgZnVuY3Rpb25zIGZvciByZXBvcnRpbmcsIGV0Yy4NCiAqCUByZXR1cm4JCW51bGwNCiAqDQog Ki8NCmlmICggIWNsYXNzX2V4aXN0cyggInBsdWdpbmJ1ZGR5X3piemlwZXhlYyIgKSApIHsNCg0KCWNs YXNzIHBsdWdpbmJ1ZGR5X3piemlwZXhlYyBleHRlbmRzIHBsdWdpbmJ1ZGR5X3piemlwY29yZSB7DQoJ DQoJCWNvbnN0IFpJUF9FUlJPUl9GSUxFX05BTUUgPSAnbGFzdF9leGVjX2Vycm9ycy50eHQnOw0KCQkN CiAgICAgICAgLyoqDQogICAgICAgICAqIG1ldGhvZCB0YWcgdXNlZCB0byByZWZlciB0byB0aGUgbWV0 aG9kIGFuZCBlbnRpdGllcyBhc3NvY2lhdGVkIHdpdGggaXQgc3VjaCBhcyBjbGFzcyBuYW1lDQogICAg ICAgICAqIA0KICAgICAgICAgKiBAdmFyICRfbWV0aG9kX3RhZyAJc3RyaW5nDQogICAgICAgICAqLw0K CQlwdWJsaWMgc3RhdGljICRfbWV0aG9kX3RhZyA9ICdleGVjJzsNCgkJCQ0KICAgICAgICAvKioNCiAg ICAgICAgICogVGhpcyB0ZWxscyB1cyB3aGV0aGVyIHRoaXMgbWV0aG9kIGlzIHJlZ2FyZGVkIGFzIGEg ImNvbXBhdGliaWxpdHkiIG1ldGhvZA0KICAgICAgICAgKiANCiAgICAgICAgICogQHZhciBib29sDQog ICAgICAgICAqLw0KCQlwdWJsaWMgc3RhdGljICRfaXNfY29tcGF0aWJpbGl0eV9tZXRob2QgPSBmYWxz ZTsNCgkJCQ0KCQkvKioNCgkJICoJX19jb25zdHJ1Y3QoKQ0KCQkgKgkNCgkJICoJRGVmYXVsdCBjb25z dHJ1Y3Rvci4NCgkJICoJDQoJCSAqCUBwYXJhbQkJcmVmZXJlbmNlCSYkcGFyZW50CQlbb3B0aW9uYWxd IFJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXR1cygpIGZ1bmN0aW9uIGZv ciBzdGF0dXMgdXBkYXRlcy4NCgkJICoJQHJldHVybgkJbnVsbA0KCQkgKg0KCQkgKi8NCgkJcHVibGlj IGZ1bmN0aW9uIF9fY29uc3RydWN0KCAmJHBhcmVudCA9IE5VTEwgKSB7DQoNCgkJCXBhcmVudDo6X19j b25zdHJ1Y3QoICRwYXJlbnQgKTsNCgkJCQ0KCQkJLy8gRGVmaW5lIHRoZSBpbml0aWFsIGRldGFpbHMN CgkJCSR0aGlzLT5fbWV0aG9kX2RldGFpbHNbICdhdHRyJyBdID0gYXJyYXkoICduYW1lJyA9PiAnRXhl YyBNZXRob2QnLCAnY29tcGF0aWJpbGl0eScgPT4gcGx1Z2luYnVkZHlfemJ6aXBleGVjOjokX2lzX2Nv bXBhdGliaWxpdHlfbWV0aG9kICk7DQoJCQkkdGhpcy0+X21ldGhvZF9kZXRhaWxzWyAncGFyYW0nIF0g PSBhcnJheSggJ3BhdGgnID0+ICcnICk7DQoJCQkNCgkJfQ0KCQkNCgkJLyoqDQoJCSAqCV9fZGVzdHJ1 Y3QoKQ0KCQkgKgkNCgkJICoJRGVmYXVsdCBkZXN0cnVjdG9yLg0KCQkgKgkNCgkJICoJQHJldHVybgkJ bnVsbA0KCQkgKg0KCQkgKi8NCgkJcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoICkgew0KCQkNCgkJ CXBhcmVudDo6X19kZXN0cnVjdCgpOw0KDQoJCX0NCgkJDQoJCS8qKg0KCQkgKglnZXRfbWV0aG9kX3Rh ZygpDQoJCSAqCQ0KCQkgKglSZXR1cm5zIHRoZSAoc3RhdGljKSBtZXRob2QgdGFnDQoJCSAqCQ0KCQkg KglAcmV0dXJuCQlzdHJpbmcgVGhlIG1ldGhvZCB0YWcNCgkJICoNCgkJICovDQoJCXB1YmxpYyBmdW5j dGlvbiBnZXRfbWV0aG9kX3RhZygpIHsNCgkJDQoJCQlyZXR1cm4gcGx1Z2luYnVkZHlfemJ6aXBleGVj

OjokX21ldGhvZF90YWc7DQoJCQkNCgkJfQ0KCQkNCgkJLyoqDQoJCSAqCWdldF9pc19jb21wYXRpYmls aXR5X21ldGhvZCgpDQoJCSAqCQ0KCQkgKglSZXR1cm5zIHRoZSAoc3RhdGljKSBpc19jb21wYXRpYmls aXR5X21ldGhvZCBib29sZWFuDQoJCSAqCQ0KCQkgKglAcmV0dXJuCQlib29sDQoJCSAqDQoJCSAqLw0K CQlwdWJsaWMgZnVuY3Rpb24gZ2V0X2lzX2NvbXBhdGliaWxpdHlfbWV0aG9kKCkgew0KCQkNCgkJCXJl dHVybiBwbHVnaW5idWRkeV96YnppcGV4ZWM6OiRfaXNfY29tcGF0aWJpbGl0eV9tZXRob2Q7DQoJCQkN CgkJfQ0KCQkNCgkJLyoqDQoJCSAqCWlzX2F2YWlsYWJsZSgpDQoJCSAqCQ0KCQkgKglBIGZ1bmN0aW9u IHRoYXQgdGVzdHMgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIHNwZWNpZmljIG1ldGhvZCBpbiB0 aGUgcmVxdWVzdGVkIG1vZGUNCgkJICoJDQoJCSAqCUBwYXJhbWUJc3RyaW5nCSR0ZW1wZGlyCVRlbXBv cmFyeSBkaXJlY3RvcnkgdG8gdXNlIGZvciBhbnkgdGVzdCBmaWxlcw0KCQkgKglAcGFyYW0Jc3RyaW5n CSRtb2RlCQlNZXRob2QgbW9kZSB0byB0ZXN0IGZvcg0KCQkgKglAcGFyYW0JYXJyYXkJJHN0YXR1cwkJ QXJyYXkgZm9yIGFueSBzdGF0dXMgbWVzc2FnZXMNCgkJICoJQHJldHVybglib29sCQkJCVRydWUgaWYg dGhlIG1ldGhvZC9tb2RlIGNvbWJpbmF0aW9uIGlzIGF2YWlsYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlDQoJ CSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gaXNfYXZhaWxhYmxlKCAkdGVtcGRpciwgJG1vZGUs ICYkc3RhdHVzICkgew0KCQkNCgkJCWlmICggc3RyaXN0ciggUEhQX09TLCAnV0lOJyApICYmICFzdHJp c3RyKCBQSFBfT1MsICdEQVJXSU4nICkgKSB7IC8vIFJ1bm5pbmcgV2luZG93cy4gKG5vdCBkYXJ3aW4p DQoNCgkJCQlyZXR1cm4gJHRoaXMtPmlzX2F2YWlsYWJsZV93aW5kb3dzKCAkdGVtcGRpciwgJG1vZGUs ICRzdGF0dXMgKTsNCgkJCQ0KCQkJfSBlbHNlIHsNCgkJCQ0KCQkJCXJldHVybiAkdGhpcy0+aXNfYXZh aWxhYmxlX2xpbnV4KCAkdGVtcGRpciwgJG1vZGUsICRzdGF0dXMgKTsNCgkJCQkNCgkJCX0NCgkJCQkJ ICAJDQoJCX0NCgkJDQoJCS8qKg0KCQkgKglpc19hdmFpbGFibGVfd2luZG93cygpDQoJCSAqCQ0KCQkg KglBIGZ1bmN0aW9uIHRoYXQgdGVzdHMgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIHNwZWNpZmlj IG1ldGhvZCBpbiB0aGUgcmVxdWVzdGVkIG1vZGUNCgkJICoJDQoJCSAqCUBwYXJhbWUJc3RyaW5nCSR0 ZW1wZGlyCVRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gdXNlIGZvciBhbnkgdGVzdCBmaWxlcw0KCQkgKglA cGFyYW0Jc3RyaW5nCSRtb2RlCQlNZXRob2QgbW9kZSB0byB0ZXN0IGZvcg0KCQkgKglAcGFyYW0JYXJy YXkJJHN0YXR1cwkJQXJyYXkgZm9yIGFueSBzdGF0dXMgbWVzc2FnZXMNCgkJICoJQHJldHVybglib29s CQkJCVRydWUgaWYgdGhlIG1ldGhvZC9tb2RlIGNvbWJpbmF0aW9uIGlzIGF2YWlsYWJsZSwgZmFsc2Ug b3RoZXJ3aXNlDQoJCSAqDQoJCSAqLw0KCQlwcm90ZWN0ZWQgZnVuY3Rpb24gaXNfYXZhaWxhYmxlX3dp bmRvd3MoICR0ZW1wZGlyLCAkbW9kZSwgJiRzdGF0dXMgKSB7DQoJCQ0KCQkJJHJlc3VsdCA9IGZhbHNl Ow0KCQkJJGV4ZWNfZXhpdF9jb2RlID0gMDsNCgkJCQ0KCQkJaWYgKCBmdW5jdGlvbl9leGlzdHMoICdl eGVjJyApICkgew0KCQkJDQoJCQkJLy8gSWYgdW56aXAgbW9kZSBhbmQgdW56aXAuZXhlIGlzIGZvdW5k IHRoZW4gYXNzdW1lIHdlIGhhdmUgdGhhdCBvcHRpb24gZm9yIHVuemlwcGluZyBzaW5jZSB3ZSBhcmVu dCBhY3R1YWxseSB0ZXN0aW5nIHVuemlwLg0KCQkJCWlmICggJG1vZGUgPT0gJ3VuemlwJyApIHsNCgkJ CQkNCgkJCQkJaWYgKCBmaWxlX2V4aXN0cyggQUJTUEFUSCAuICd1bnppcC5leGUnICkgKSB7DQoJCQkJ CQ0KCQkJCQkJJHJlc3VsdCA9IHRydWU7DQoJCQkJCQlyZXR1cm4gJHJlc3VsdDsNCgkJCQkJCQ0KCQkJ CQl9IGVsc2Ugew0KCQkJCQkNCgkJCQkJCSRzdGF0dXNbXSA9IF9fKCdFeGVjIHRlc3QgRkFJTEVEOiB1 bnppcC5leGUgbm90IGZvdW5kIGF0OiAnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4gQUJTUEFUSDsN CgkJCQkJCSRyZXN1bHQgPSBmYWxzZTsNCgkJCQkJCXJldHVybiAkcmVzdWx0Ow0KCQkJCQkNCgkJCQkJ fQ0KCQkJCQkJDQoJCQkJfQ0KCQkJCQ0KCQkJCS8vIE11c3QgYmUgemlwIG1vZGUgdGVzdGluZw0KCQkJ CSR0ZXN0X2ZpbGUgPSAkdGVtcGRpciAuICd0ZW1wXycgLiB1bmlxaWQoKSAuICcuemlwJzsNCgkJCQkJ CQkJDQoJCQkJaWYgKCBmaWxlX2V4aXN0cyggQUJTUEFUSCAuICd6aXAuZXhlJyApICkgew0KCQkJCQkN CgkJCQkJJGNvbW1hbmQgPSBBQlNQQVRIIC4gJ3ppcCc7CQkJCQkNCgkJCQkNCgkJCQkJQGV4ZWMoICRj b21tYW5kIC4gJyAiJyAuICR0ZXN0X2ZpbGUgLiAnIiAiJyAuIF9fRklMRV9fIC4gJyInLCAkZXhlY19v dXRwdXQsICRleGVjX2V4aXRfY29kZSApOw0KCQkJCQkNCgkJCQkJaWYgKCBmaWxlX2V4aXN0cyggJHRl c3RfZmlsZSApICkgew0KCQkJCQkNCgkJCQkJCWlmICggIXVubGluayggJHRlc3RfZmlsZSApICkgew0K CQkJCQkJDQoJCQkJCQkJJHN0YXR1c1tdID0gc3ByaW50ZiggX18oJ0Vycm9yICM1NjQ2MzQuIFVuYWJs ZSB0byBkZWxldGUgdGVzdCBmaWxlICglcykhJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSwgJHRlc3Rf ZmlsZSApOw0KCQkJCQkJCQ0KCQkJCQkJfQ0KCQkJCQkJDQoJCQkJCQkkc3RhdHVzW10gPSBfXygnRXhl YyB0ZXN0IFBBU1NFRC4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOwkNCgkJCQkJCSRyZXN1bHQgPSB0 cnVlOw0KCQkJCQkJDQoJCQkJCQkvLyBTZXQgdGhlIHBhcmFtZXRlciB0byBiZSByZW1lbWJlcmVkDQoJ CQkJCQkkdGhpcy0+X21ldGhvZF9kZXRhaWxzWyAncGFyYW0nIF1bICdwYXRoJyBdID0gQUJTUEFUSDsN CgkJCQkJCQkJCQkJCQkJDQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkNCgkJCQkJCSRzdGF0dXNbXSA9IF9f KCdFeGVjIHRlc3QgRkFJTEVEOiBUZXN0IHppcCBmaWxlIG5vdCBmb3VuZC4nLCAnaXQtbDEwbi1iYWNr dXBidWRkeScpOw0KCQkJCQkJJHN0YXR1c1tdID0gX18oJ0V4ZWMgRXhpdCBDb2RlOiAnLCAnaXQtbDEw bi1iYWNrdXBidWRkeScpIC4gJGV4ZWNfZXhpdF9jb2RlOw0KCQkJCQkJJHJlc3VsdCA9IGZhbHNlOw0K CQkJCQkJDQoJCQkJCX0NCgkJCQkNCgkJCQl9IGVsc2Ugew0KCQkJCQ0KCQkJCQkkc3RhdHVzW10gPSBf XygnRXhlYyB0ZXN0IEZBSUxFRDogemlwLmV4ZSBub3QgZm91bmQgYXQ6ICcsICdpdC1sMTBuLWJhY2t1 cGJ1ZGR5JykgLiBBQlNQQVRIOw0KCQkJCQkkcmVzdWx0ID0gZmFsc2U7CQ0KCQkJCQ0KCQkJCX0NCgkJ CQkNCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQkkc3RhdHVzW10gPSBfXygnRXhlYyB0ZXN0IEZBSUxFRDog T25lIG9yIG1vcmUgcmVxdWlyZWQgZnVuY3Rpb24gZG8gbm90IGV4aXN0LicsICdpdC1sMTBuLWJhY2t1 cGJ1ZGR5Jyk7DQoJCQkJJHJlc3VsdCA9IGZhbHNlOw0KCQkgIA0KCQkgIAl9DQoJCSAgCQ0KCQkgIAly ZXR1cm4gJHJlc3VsdDsNCgkJICAJDQoJCX0NCgkJDQoJCS8qKg0KCQkgKglpc19hdmFpbGFibGVfbGlu

dXgoKQ0KCQkgKgkNCgkJICoJQSBmdW5jdGlvbiB0aGF0IHRlc3RzIGZvciB0aGUgYXZhaWxhYmlsaXR5 IG9mIHRoZSBzcGVjaWZpYyBtZXRob2QgaW4gdGhlIHJlcXVlc3RlZCBtb2RlDQoJCSAqCQ0KCQkgKglA cGFyYW1lCXN0cmluZwkkdGVtcGRpcglUZW1wb3JhcnkgZGlyZWN0b3J5IHRvIHVzZSBmb3IgYW55IHRl c3QgZmlsZXMNCgkJICoJQHBhcmFtCXN0cmluZwkkbW9kZQkJTWV0aG9kIG1vZGUgdG8gdGVzdCBmb3IN CgkJICoJQHBhcmFtCWFycmF5CSRzdGF0dXMJCUFycmF5IGZvciBhbnkgc3RhdHVzIG1lc3NhZ2VzDQoJ CSAqCUByZXR1cm4JYm9vbAkJCQlUcnVlIGlmIHRoZSBtZXRob2QvbW9kZSBjb21iaW5hdGlvbiBpcyBh dmFpbGFibGUsIGZhbHNlIG90aGVyd2lzZQ0KCQkgKg0KCQkgKi8NCgkJcHVibGljIGZ1bmN0aW9uIGlz X2F2YWlsYWJsZV9saW51eCggJHRlbXBkaXIsICRtb2RlLCAmJHN0YXR1cyApIHsNCgkJDQoJCQkkcmVz dWx0ID0gZmFsc2U7DQoJCQkkZXhlY19leGl0X2NvZGUgPSAwOw0KCQkJJGZvdW5kX3ppcCA9IGZhbHNl Ow0KCQkJDQoJCQlpZiAoIGZ1bmN0aW9uX2V4aXN0cyggJ2V4ZWMnICkgKSB7DQoJCQkNCgkJCQkkY2Fu ZGlkYXRlX3BhdGhzID0gJHRoaXMtPl9leGVjdXRhYmxlX3BhdGhzOw0KCQkJCQ0KCQkJCS8vIFdlIGFy ZSBzZWFyY2hpbmcgZm9yIHppcCB1c2luZyB0aGUgbGlzdCBvZiBwb3NzaWJsZSBwYXRocw0KCQkJCXdo aWxlICggKCBmYWxzZSA9PSAkZm91bmRfemlwICkgJiYgKCAhZW1wdHkoICRjYW5kaWRhdGVfcGF0aHMg KSApICkgew0KCQkJCQ0KCQkJCQkkcGF0aCA9IGFycmF5X3NoaWZ0KCAkY2FuZGlkYXRlX3BhdGhzICk7 DQoJCQkJCSRzdGF0dXNbXSA9IF9fKCAnVHJ5aW5nIGV4ZWN1dGFibGUgcGF0aCBmb3IgemlwOicsICdp dC1sMTBuLWJhY2t1cGJ1ZGR5JyApIC4gJyBgJyAuICRwYXRoIC4gJ2AuJzsNCg0KCQkJCQkkdGVzdF9m aWxlID0gJHRlbXBkaXIgLiAndGVtcF90ZXN0XycgLiB1bmlxaWQoKSAuICcuemlwJzsNCgkJCQkJDQoJ CQkJCSRjb21tYW5kID0gJHBhdGggLiAnemlwICcgLiAnICInIC4gJHRlc3RfZmlsZSAuICciICInIC4g X19GSUxFX18gLiAnIic7DQoJCQkJCQkJCQkNCgkJCQkJQGV4ZWMoICRjb21tYW5kIC4gJyAiJyAuICR0 ZXN0X2ZpbGUgLiAnIiAiJyAuIF9fRklMRV9fIC4gJyInLCAkZXhlY19vdXRwdXQsICRleGVjX2V4aXRf Y29kZSApOw0KCQkJDQoJCQkJCWlmICggZmlsZV9leGlzdHMoICR0ZXN0X2ZpbGUgKSApIHsNCgkJCQ0K CQkJCQkJaWYgKCAhdW5saW5rKCAkdGVzdF9maWxlICkgKSB7DQoJCQkJDQoJCQkJCQkJJHN0YXR1c1td ID0gc3ByaW50ZiggX18oJ0Vycm9yICM1NjQ2MzQuIFVuYWJsZSB0byBkZWxldGUgdGVzdCBmaWxlICgl cykhJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSwgJHRlc3RfZmlsZSApOw0KCQkJCQkNCgkJCQkJCX0N CgkJCQkNCgkJCQkJCSRzdGF0dXNbXSA9IF9fKCdFeGVjIHRlc3QgUEFTU0VELicsICdpdC1sMTBuLWJh Y2t1cGJ1ZGR5Jyk7CQ0KCQkJCQkJJHJlc3VsdCA9IHRydWU7DQoJCQkJDQoJCQkJCQkvLyBTZXQgdGhl IHBhcmFtZXRlciB0byBiZSByZW1lbWJlcmVkDQoJCQkJCQkkdGhpcy0+X21ldGhvZF9kZXRhaWxzWyAn cGFyYW0nIF1bICdwYXRoJyBdID0gJHBhdGg7DQoJCQkJCQkJCQ0KCQkJCQkJLy8gVGhpcyB3aWxsIGJy ZWFrIHVzIG91dCBvZiB0aGUgbG9vcA0KCQkJCQkJJGZvdW5kX3ppcCA9IHRydWU7DQoJCQkJCQkNCgkJ CQkJfSBlbHNlIHsNCgkJCQkNCgkJCQkJCSRzdGF0dXNbXSA9IF9fKCdFeGVjIHRlc3QgRkFJTEVEOiBU ZXN0IHppcCBmaWxlIG5vdCBmb3VuZC4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCQkJCQkJJHN0 YXR1c1tdID0gX18oJ0V4ZWMgRXhpdCBDb2RlOiAnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4gJGV4 ZWNfZXhpdF9jb2RlOw0KCQkJCQkJJHJlc3VsdCA9IGZhbHNlOw0KCQkJCQ0KCQkJCQl9DQoJCQkJCQ0K CQkJCX0NCgkJCQkNCgkJCQlpZiAoIGZhbHNlID09ICRmb3VuZF96aXAgKSB7DQoJCQkJCQ0KCQkJCQkv LyBOZXZlciBmb3VuZCB6aXAgb24gYW55IGNhbmRpZGF0ZSBwYXRoDQoJCQkJCSRzdGF0dXNbXSA9IF9f KCdFeGVjIHRlc3QgRmFpbGVkOiBVbmFibGUgdG8gZmluZCB6aXAgZXhlY3V0YWJsZSBvbiBhbnkgc3Bl Y2lmaWVkIHBhdGguJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKTsNCgkJCQkJDQoJCQkJfQ0KCQkJCQkJ ICANCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQkkc3RhdHVzW10gPSBfXygnRXhlYyB0ZXN0IEZBSUxFRDog T25lIG9yIG1vcmUgcmVxdWlyZWQgZnVuY3Rpb24gZG8gbm90IGV4aXN0LicsICdpdC1sMTBuLWJhY2t1 cGJ1ZGR5Jyk7DQoJCQkJJHJlc3VsdCA9IGZhbHNlOw0KCQkgIA0KCQkgIAl9DQoJCSAgCQ0KCQkgIAly ZXR1cm4gJHJlc3VsdDsNCgkJICAJDQoJCX0NCgkJDQoJCS8qKg0KCQkgKgljcmVhdGUoKQ0KCQkgKgkN CgkJICoJQSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYW4gYXJjaGl2ZSBmaWxlDQoJCSAqCUFsd2F5cyBj bGVhbnMgdXAgYWZ0ZXIgaXRzZWxmDQoJCSAqCQ0KCQkgKglUaGUgJGV4Y2x1ZGVzIHdpbGwgYmUgYSBs aXN0IG9yIHJlbGF0aXZlIHBhdGggZXhjbHVkZXMgaWYgdGhlICRsaXN0bWFrZXIgb2JqZWN0IGlzIE5V TEwgb3RlaHJ3aXNlDQoJCSAqCXdpbGwgYmUgYWJzb2x1dGUgcGF0aCBleGNsdWRlcyBhbmQgcmVsYXRp dmUgcGF0aCBleGNsdWRlcyBjYW4gYmUgaGFkIGZyb20gdGhlICRsaXN0bWFrZXIgb2JqZWN0DQoJCSAq CQ0KCQkgKglAcGFyYW0JCXN0cmluZwkkemlwCQkJRnVsbCBwYXRoICYgZmlsZW5hbWUgb2YgWklQIEFy Y2hpdmUgZmlsZSB0byBjcmVhdGUNCgkJICoJQHBhcmFtCQlzdHJpbmcJJGRpcgkJCUZ1bGwgcGF0aCBv ZiBkaXJlY3RvcnkgdG8gYWRkIHRvIFpJUCBBcmNoaXZlIGZpbGUNCgkJICoJQHBhcmFtCQlib29sCSRj b21wcmVzc2lvbglUcnVlIHRvIGVuYWJsZSBjb21wcmVzc2lvbiBvZiBmaWxlcyBhZGRlZCB0byBaSVAg QXJjaGl2ZSBmaWxlDQoJCSAqCUBwYXJhbWUJCWFycmF5CSRleGNsdWRlcwkJTGlzdCBvZiBlaXRoZXIg YWJzb2x1dGUgcGF0aCBleGNsdXNpb25zIG9yIHJlbGF0aXZlIGV4Y2x1c2lvbnMNCgkJICoJQHBhcmFt CQlzdHJpbmcJJHRlbXBkaXIJCUZ1bGwgcGF0aCBvZiBkaXJlY3RvcnkgZm9yIHRlbXBvcmFyeSB1c2Fn ZQ0KCQkgKglAcGFyYW0JCW9iamVjdAkkbGlzdG1ha2VyCQlUaGUgb2JqZWN0IGZyb20gd2hpY2ggd2Ug Y2FuIGdldCBhbiBpbmNsdXNpb25zIGxpc3QNCgkJICoJQHJldHVybgkJYm9vbAkJCQkJVHJ1ZSBpZiB0 aGUgY3JlYXRpb24gd2FzIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZQ0KCQkgKg0KCQkgKi8NCgkJ cHVibGljIGZ1bmN0aW9uIGNyZWF0ZSggJHppcCwgJGRpciwgJGNvbXByZXNzaW9uLCAkZXhjbHVkZXMs ICR0ZW1wZGlyLCAkbGlzdG1ha2VyID0gTlVMTCApIHsNCgkJDQoJCQlpZiAoIHN0cmlzdHIoIFBIUF9P UywgJ1dJTicgKSAmJiAhc3RyaXN0ciggUEhQX09TLCAnREFSV0lOJyApICkgeyAvLyBSdW5uaW5nIFdp bmRvd3MuIChub3QgZGFyd2luKQ0KDQoJCQkJcmV0dXJuICR0aGlzLT5jcmVhdGVfd2luZG93cyggJHpp

cCwgJGRpciwgJGNvbXByZXNzaW9uLCAkZXhjbHVkZXMsICR0ZW1wZGlyLCAkbGlzdG1ha2VyICk7DQoJ CQkNCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQlyZXR1cm4gJHRoaXMtPmNyZWF0ZV9saW51eCggJHppcCwg JGRpciwgJGNvbXByZXNzaW9uLCAkZXhjbHVkZXMsICR0ZW1wZGlyLCAkbGlzdG1ha2VyICk7DQoJCQkJ DQoJCQl9DQoJCQkNCgkJfQ0KCQkJDQoJCS8qKg0KCQkgKgljcmVhdGVfd2luZG93cygpDQoJCSAqCQ0K CQkgKglBIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbiBhcmNoaXZlIGZpbGUNCgkJICoJDQoJCSAqCVRo ZSAkZXhjbHVkZXMgd2lsbCBiZSBhIGxpc3Qgb3IgcmVsYXRpdmUgcGF0aCBleGNsdWRlcyBpZiB0aGUg JGxpc3RtYWtlciBvYmplY3QgaXMgTlVMTCBvdGVocndpc2UNCgkJICoJd2lsbCBiZSBhYnNvbHV0ZSBw YXRoIGV4Y2x1ZGVzIGFuZCByZWxhdGl2ZSBwYXRoIGV4Y2x1ZGVzIGNhbiBiZSBoYWQgZnJvbSB0aGUg JGxpc3RtYWtlciBvYmplY3QNCgkJICoJDQoJCSAqCUBwYXJhbQkJc3RyaW5nCSR6aXAJCQlGdWxsIHBh dGggJiBmaWxlbmFtZSBvZiBaSVAgQXJjaGl2ZSBmaWxlIHRvIGNyZWF0ZQ0KCQkgKglAcGFyYW0JCXN0 cmluZwkkZGlyCQkJRnVsbCBwYXRoIG9mIGRpcmVjdG9yeSB0byBhZGQgdG8gWklQIEFyY2hpdmUgZmls ZQ0KCQkgKglAcGFyYW0JCWJvb2wJJGNvbXByZXNzaW9uCVRydWUgdG8gZW5hYmxlIGNvbXByZXNzaW9u IG9mIGZpbGVzIGFkZGVkIHRvIFpJUCBBcmNoaXZlIGZpbGUNCgkJICoJQHBhcmFtCQlzdHJpbmcJJHRl bXBkaXIJCVtPcHRpb25hbF0gRnVsbCBwYXRoIG9mIGRpcmVjdG9yeSBmb3IgdGVtcG9yYXJ5IHVzYWdl DQoJCSAqCUBwYXJhbQkJb2JqZWN0CSRsaXN0bWFrZXIJCVRoZSBvYmplY3QgZnJvbSB3aGljaCB3ZSBj YW4gZ2V0IGFuIGluY2x1c2lvbnMgbGlzdA0KCQkgKglAcmV0dXJuCQlib29sCQkJCQlUcnVlIGlmIHRo ZSBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlDQoJCSAqDQoJCSAqLw0KCQlw cm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlX3dpbmRvd3MoICR6aXAsICRkaXIsICRjb21wcmVzc2lvbiwg JGV4Y2x1ZGVzLCAkdGVtcGRpciwgJGxpc3RtYWtlciApIHsNCgkJDQoJCQkkZXhpdGNvZGUgPSAwOw0K CQkJJGxpbmVzID0gYXJyYXkoKTsNCgkJCSR6aXBwYXRoID0gJyc7DQoJCQkkY29tbWFuZCA9ICcnOw0K CQkJJHRlbXBfemlwID0gJyc7DQoJCQkkZXhjbHVkaW5nX2FkZGl0aW9uYWwgPSBmYWxzZTsNCgkJCSRl eGNsdWRlX2NvdW50ID0gMDsNCgkJCSRleGNsdXNpb25zID0gYXJyYXkoKTsNCgkJDQoJCQkvLyBUaGUg YmFzZWRpciBtdXN0IGhhdmUgYSB0cmFpbGluZyBkaXJlY3Rvcnkgc2VwYXJhdG9yDQoJCQkkYmFzZWRp ciA9ICggcnRyaW0oIHRyaW0oICRkaXIgKSwgRElSRUNUT1JZX1NFUEFSQVRPUiApICkgLiBESVJFQ1RP UllfU0VQQVJBVE9SOw0KCQkJDQoJCQlpZiAoIGVtcHR5KCAkdGVtcGRpciApIHx8ICFmaWxlX2V4aXN0 cyggJHRlbXBkaXIgKSApIHsNCgkJCQ0KCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1Rl bXBvcmFyeSB3b3JraW5nIGRpcmVjdG9yeSBtdXN0IGJlIGF2YWlsYWJsZS4nLCAnaXQtbDEwbi1iYWNr dXBidWRkeScpICk7CQkJCQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCQkNCgkJCX0NCgkJCQkJDQoJCQkv LyBEZXRlcm1pbmUgaWYgd2UgYXJlIHVzaW5nIGFuIGFic29sdXRlIHBhdGgNCgkJCWlmICggaXNzZXQo ICR0aGlzLT5fbWV0aG9kX2RldGFpbHNbICdwYXJhbScgXVsgJ3BhdGgnIF0gKSAmJiAhZW1wdHkoICR0 aGlzLT5fbWV0aG9kX2RldGFpbHNbICdwYXJhbScgXVsgJ3BhdGgnIF0gKSApIHsNCgkJCQ0KCQkJCSR6 aXBwYXRoID0gdHJpbSggJHRoaXMtPl9tZXRob2RfZGV0YWlsc1sgJ3BhcmFtJyBdWyAncGF0aCcgXSAp Ow0KCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oICdVc2luZyBjdXN0b20gemlwIHBhdGg6 ICcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApIC4gJHppcHBhdGggKTsNCgkJCQkkY29tbWFuZCA9ICR6 aXBwYXRoIC4gJ3ppcCAnOw0KCQkJCQ0KCQkJfSBlbHNlIHsNCgkJCQ0KCQkJCSRjb21tYW5kID0gJ3pp cCAnOw0KCQkJCQ0KCQkJfQ0KDQoJCQkvLyBIYXJkY29kaW5nIHNvbWUgYWRkaXRpb25hbCBvcHRpb25z IGZvciBub3cNCgkJCSRjb21tYW5kIC49ICctcSAtciAnOw0KCQkJDQoJCQlpZiAoICRjb21wcmVzc2lv biAhPT0gdHJ1ZSApIHsNCgkJCQ0KCQkJCSRjb21tYW5kIC49ICctMCAnOw0KCQkJCSR0aGlzLT5zdGF0 dXMoICdkZXRhaWxzJywgX18oJ0NvbXByZXNzaW9uIGRpc2FibGVkIGJhc2VkIG9uIHNldHRpbmdzLics ICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCQkNCgkJCX0NCgkJCQ0KCQkJaWYgKCBmaWxlX2V4 aXN0cyggJHppcCApICkgew0KDQoJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnRXhpc3Rp bmcgWklQIEFyY2hpdmUgZmlsZSB3aWxsIGJlIHJlcGxhY2VkLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5 JykgKTsNCgkJCQl1bmxpbmsoICR6aXAgKTsNCg0KCQkJfQ0KCQkJCQkJDQoJCQkvLyBTZXQgdGVtcG9y YXJ5IGRpcmVjdG9yeSB0byBzdG9yZSBaSVAgd2hpbGUgaXQncyBiZWluZyBnZW5lcmF0ZWQuCQkJDQoJ CQkkY29tbWFuZCAuPSAiLWIgJ3skdGVtcGRpcn0nICI7DQoNCgkJCS8vIFB1dCBvdXIgZmluYWwgemlw IGZpbGUgaW4gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgLSBpdCB3aWxsIGJlIG1vdmVkIGxhdGVyDQoJ CQkkdGVtcF96aXAgPSAkdGVtcGRpciAuIGJhc2VuYW1lKCAkemlwICk7CQkNCgkJCSRjb21tYW5kIC49 ICIneyR0ZW1wX3ppcH0nIC4gIjsNCgkJCQ0KCQkJLy8gTm93IHdvcmsgb3V0IGV4Y2x1c2lvbnMgZGVw ZW5kZW50IG9uIHdoYXQgd2UgaGF2ZSBiZWVuIGdpdmVuDQoJCQlpZiAoIGlzX29iamVjdCggJGxpc3Rt YWtlciApICYmICggZGVmaW5lZCggJ1VTRV9FWFBFUklNRU5UQUxfWklQQlVERFlfSU5DTFVTSU9OJyAp ICYmICggdHJ1ZSA9PT0gVVNFX0VYUEVSSU1FTlRBTF9aSVBCVUREWV9JTkNMVVNJT04gKSApICkgew0K CQkJDQoJCQkJLy8gV2UncmUgZG9pbmcgYW4gaW5jbHVzaW9uIG9wZXJhdGlvbiwgYnV0IGZpcnN0IHdl J2xsIGp1c3Qgc2hvdyB0aGUgZXhjbHVzaW9zbg0KCQkJCQ0KCQkJCS8vIEZvciB6aXAgd2UgbmVlZCBy ZWxhdGl2ZSByYXRoZXIgdGhhbiBhYnNvbHV0ZSBleGNsdXNpb24gc3BhdGhzDQoJCQkJJGV4Y2x1c2lv bnMgPSAkbGlzdG1ha2VyLT5nZXRfcmVsYXRpdmVfZXhjbHVkZXMoICRiYXNlZGlyICk7DQoJCQkJDQoJ CQkJaWYgKCBjb3VudCggJGV4Y2x1c2lvbnMgKSA+IDAgKSB7DQoJCQkJDQoJCQkJCSR0aGlzLT5zdGF0 dXMoICdkZXRhaWxzJywgX18oJ0NhbGN1bGF0aW5nIGRpcmVjdG9yaWVzIHRvIGV4Y2x1ZGUgZnJvbSBi YWNrdXAuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJCQkNCgkJCQkJJGV4Y2x1ZGluZ19h ZGRpdGlvbmFsID0gZmFsc2U7DQoJCQkJCSRleGNsdWRlX2NvdW50ID0gMDsNCgkJCQkJZm9yZWFjaCAo ICRleGNsdXNpb25zIGFzICRleGNsdWRlICkgew0KCQkJCQkNCgkJCQkJCWlmICggIXN0cnN0ciggJGV4

Y2x1ZGUsICdiYWNrdXBidWRkeV9iYWNrdXBzJyApICkgeyAvLyBTZXQgdmFyaWFibGUgdG8gc2hvdyB3 ZSBhcmUgZXhjbHVkaW5nIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgYmVzaWRlcyBiYWNrdXAgZGlyLg0K CQ0KCQkJCQkJCSRleGNsdWRpbmdfYWRkaXRpb25hbCA9IHRydWU7DQoJCQkJCQkJCQ0KCQkJCQkJfQ0K CQkJCQkJCQ0KCQkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnRXhjbHVkaW5nJywgJ2l0 LWwxMG4tYmFja3VwYnVkZHknKSAuICc6ICcgLiAkZXhjbHVkZSApOw0KCQkJCQkJCQkJCQkJCQ0KCQkJ CQkJJGV4Y2x1ZGVfY291bnQrKzsNCgkJCQkJCQkNCgkJCQkJfQ0KCQkJCQkJCQkJCQ0KCQkJCX0NCgkJ CQkNCgkJCQkvLyBHZXQgdGhlIGxpc3Qgb2YgaW5jbHVzaW9ucyB0byBwcm9jZXNzDQoJCQkJJGluY2x1 c2lvbnMgPSAkbGlzdG1ha2VyLT5nZXRfdGVybWluYWxzKCk7DQoJCQkJDQoJCQkJLy8gRm9yIGVhY2gg ZGlyZWN0b3J5IHdlIG5lZWQgdG8gcHV0IHRoZSAid2lsZGNhcmQiIG9uIHRoZSBlbmQNCgkJCQlmb3Jl YWNoICggJGluY2x1c2lvbnMgYXMgJiRpbmNsdXNpb24gKSB7DQoJCQkJDQoJCQkJCWlmICggaXNfZGly KCAkaW5jbHVzaW9uICkgKSB7DQoJCQkJCQ0KCQkJCQkJJGluY2x1c2lvbiAuPSBESVJFQ1RPUllfU0VQ QVJBVE9SIC4gIioiOw0KCQkJCQl9DQoJCQkJDQoJCQkJCS8vIFJlbW92ZSBkaXJlY3RvcnkgcGF0aCBw cmVmaXggZXhjbHVkaW5nIGxlYWRpbmcgc2xhc2ggdG8gbWFrZSByZWxhdGl2ZSAobmVlZGVkIGZvciB6 aXApDQoJCQkJCSRpbmNsdXNpb24gPSBzdHJfcmVwbGFjZSggcnRyaW0oICRiYXNlZGlyLCBESVJFQ1RP UllfU0VQQVJBVE9SICksICcnLCAkaW5jbHVzaW9uICk7DQoJCQkJCQkJCQkNCgkJCQl9DQoJCQkJDQoJ CQkJLy8gTm93IGNyZWF0ZSB0aGUgaW5jbHVzaW9ucyBmaWxlIGluIHRoZSB0ZW1wZGlyDQoJCQkJDQoJ CQkJLy8gQW5kIHVwZGF0ZSB0aGUgY29tbWFuZCBvcHRpb25zDQoJCQkJJGlmaWxlID0gZGlybmFtZSgg JHRlbXBkaXIgKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnaW5jbHVzaW9uc19maWxlLnR4dCc7DQoJ CQkJaWYgKCBmaWxlX2V4aXN0cyggJGlmaWxlICkgKSB7DQoJCQkJDQoJCQkJCUB1bmxpbmsoICRpZmls ZSApOw0KCQkJCQ0KCQkJCX0NCgkJCQkNCgkJCQlmaWxlX3B1dF9jb250ZW50cyggJGlmaWxlLCBpbXBs b2RlKCBQSFBfRU9MLCAkaW5jbHVzaW9ucyApIC4gUEhQX0VPTCAuIFBIUF9FT0wgKTsNCgkJCQkNCgkJ CQkkY29tbWFuZCAuPSAiLWlAIiAuICRpZmlsZSAuICIgIjsNCgkJCQ0KCQkJfSBlbHNlIHsNCgkJCQ0K CQkJCS8vIFdlJ3JlIGRvaW5nIGFuIGV4Y2x1c2lvbiBvcGVyYXRpb24NCgkJCQ0KCQkJCSRjb21tYW5k IC49ICItaSAnKicgIjsNCgkJCQkNCgkJCQkvLyBTaW5jZSB3ZSBoYWQgbm8gJGxpc3RtYWtlciBvYmpl Y3Qgb3Igbm90IHVzaW5nIGl0IGdldCB0aGUgc3RhbmRhcmQgcmVsYXRpdmUgZXhjbHVkZXMgdG8gcHJv Y2Vzcw0KCQkJCSRleGNsdXNpb25zID0gJGV4Y2x1ZGVzOw0KCQkJCQ0KCQkJCWlmICggY291bnQoICRl eGNsdXNpb25zICkgPiAwICkgew0KCQkJCQ0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9f KCdDYWxjdWxhdGluZyBkaXJlY3RvcmllcyB0byBleGNsdWRlIGZyb20gYmFja3VwLicsICdpdC1sMTBu LWJhY2t1cGJ1ZGR5JykgKTsNCgkJCQkJJGNvbW1hbmQgLj0gJy14ICc7DQoJCQkJCQ0KCQkJCQkkZXhj bHVkaW5nX2FkZGl0aW9uYWwgPSBmYWxzZTsNCgkJCQkJJGV4Y2x1ZGVfY291bnQgPSAwOw0KCQkJCQlm b3JlYWNoICggJGV4Y2x1c2lvbnMgYXMgJGV4Y2x1ZGUgKSB7DQoJCQkJCQ0KCQkJCQkJaWYgKCAhc3Ry c3RyKCAkZXhjbHVkZSwgJ2JhY2t1cGJ1ZGR5X2JhY2t1cHMnICkgKSB7IC8vIFNldCB2YXJpYWJsZSB0 byBzaG93IHdlIGFyZSBleGNsdWRpbmcgYWRkaXRpb25hbCBkaXJlY3RvcmllcyBiZXNpZGVzIGJhY2t1 cCBkaXIuDQoJDQoJCQkJCQkJJGV4Y2x1ZGluZ19hZGRpdGlvbmFsID0gdHJ1ZTsNCgkJCQkJCQkJDQoJ CQkJCQl9DQoJCQkJCQkJDQoJCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdFeGNsdWRp bmcnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4gJzogJyAuICRleGNsdWRlICk7DQoJCQkJCQkNCgkJ CQkJCWlmICggc3Vic3RyKCAkZXhjbHVkZSwgLTEsIDEpID09IERJUkVDVE9SWV9TRVBBUkFUT1IgKSB7 DQoJCQkJCQkNCgkJCQkJCQkvLyBJdCdzIGEgZGlyZWN0b3J5IHNvIGFwcGVuZCBhIHdpbGRjYXJkDQoJ CQkJCQkJJGNvbW1hbmQgLj0gIid7JGV4Y2x1ZGV9KicgIjsNCgkJCQkJCQkNCgkJCQkJCX0gZWxzZSB7 DQoJCQkJCQkNCgkJCQkJCQkvLyBJdCdzIGEgZmlsZSBzbyBubyB3aWxkY2FyZA0KCQkJCQkJCSRjb21t YW5kIC49ICIneyRleGNsdWRlfScgIjsNCgkJCQkJCQ0KCQkJCQkJfQ0KCQkJCQkJCQ0KCQkJCQkJJGV4 Y2x1ZGVfY291bnQrKzsNCgkJCQkJCQkNCgkJCQkJfQ0KCQkJCQkJCQkJCQ0KCQkJCX0NCgkJCQ0KCQkJ fQ0KCQkJCQkJDQoJCQlpZiAoICRleGNsdWRpbmdfYWRkaXRpb25hbCA9PT0gdHJ1ZSApIHsNCgkJCQ0K CQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgX18oICdFeGNsdWRpbmcgYXJjaGl2ZXMgZGlyZWN0 b3J5IGFuZCBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIGRlZmluZWQgaW4gc2V0dGluZ3MuJywgJ2l0LWwx MG4tYmFja3VwYnVkZHknICkgLiAnICcgLiAkZXhjbHVkZV9jb3VudCAuICcgJyAuIF9fKCAndG90YWwn LCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSAuICcuJyApOw0KCQkJCQ0KCQkJfSBlbHNlIHsNCgkJCQ0K CQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgX18oICdPbmx5IGV4Y2x1ZGluZyBhcmNoaXZlcyBk aXJlY3RvcnkgYmFzZWQgb24gc2V0dGluZ3MuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgLiAnICcg LiAkZXhjbHVkZV9jb3VudCAuICcgJyAuIF9fKCAndG90YWwnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScg KSAuICcuJyApOw0KCQkJCQ0KCQkJfQ0KCQkJCQkJDQoJCQkvLyBSZW1lbWJlciB0aGUgY3VycmVudCBk aXJlY3RvcnkgYW5kIGNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IGJlaW5nIGFkZGVkIHNvIHRoYXQgIi4i IGlzIHZhbGlkIGluIGNvbW1hbmQNCgkJCSR3b3JraW5nX2RpciA9IGdldGN3ZCgpOw0KCQkJY2hkaXIo ICRkaXIgKTsNCgkJCQ0KCQkJLy8gUnVuIFpJUCBjb21tYW5kLg0KCQkJJHRoaXMtPnN0YXR1cyggJ21l c3NhZ2UnLCBfXygnQXR0ZW1wdGluZyB0byB1c2UgcHJvdmlkZWQgV2luZG93cyB6aXAuZXhlLicsICdp dC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCSRjb21tYW5kID0gc3RyX3JlcGxhY2UoICdcJycsICci JywgJGNvbW1hbmQgKTsgLy8gV2luZG93cyB3YW50cyBkb3VibGUgcXVvdGVzDQoJCQkNCgkJCS8vIEFw cGFyZW50bHkgdGhpcyBzaG91bGQgZG8gdGhlIHN0ZGVyciByZWRpcmVjdGlvbiB0byBzdGRvdXQgb24g V2luZG93cw0KCQkJJGNvbW1hbmQgLj0gJyAyPiYxICc7DQoJCQkNCgkJCSR0aGlzLT5zdGF0dXMoICdk ZXRhaWxzJywgJHRoaXMtPmdldF9tZXRob2RfdGFnKCkgLiBfXygnIGNvbW1hbmQgKFdpbmRvd3MpJywg

J2l0LWwxMG4tYmFja3VwYnVkZHknKSAuICc6ICcgLiAkY29tbWFuZCApOw0KCQkJQGV4ZWMoICRjb21t YW5kLCAkbGluZXMsICRleGl0Y29kZSApOyAvLyBTdXBwcmVzcyBlcnJvcnMgaW4gV2luZG93cyBzaW5j ZSBpdCBnaXZlcyBtYWpvciBmb3JraW5nIHdhcm5pbmdzIGluIFdpbmRvd3MuDQoJCQkNCgkJCS8vIFNl dCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGJhY2sgdG8gd2hlcmUgd2Ugd2VyZQ0KCQkJY2hkaXIo ICR3b3JraW5nX2RpciApOw0KCQkJDQoJCQkvLyBDb252ZW5pZW5jZSBmb3IgaGFuZGxpbmcgZGlmZmVy ZW50IHNjYW5hcmlvcw0KCQkJJHJlc3VsdCA9IGZhbHNlOw0KCQkJDQoJCQkvLyBTZWUgaWYgd2UgY2Fu IGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5lZCAtIG5vdGUgdGhhdCAkZXhpdGNvZGUgY291bGQgYmUgbm9u LXplcm8gZm9yIGEgd2FybmluZyBvciBlcnJvcg0KCQkJaWYgKCAoICEgZmlsZV9leGlzdHMoICR0ZW1w X3ppcCApICkgfHwgKCAkZXhpdGNvZGUgIT0gMCApICkgew0KCQkJDQoJCQkJLy8gSWYgd2UgaGFkIGEg bm9uLXplcm8gZXhpdCBjb2RlIHRoZW4gc2hvdWxkIHJlcG9ydCBpdCAoZmlsZSBtYXkgb3IgbWF5IG5v dCBiZSBjcmVhdGVkKQ0KCQkJCWlmICggJGV4aXRjb2RlICE9IDAgKSB7DQoJCQkJDQoJCQkJCSR0aGlz LT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1ppcCBwcm9jZXNzIGV4aXQgY29kZTogJywgJ2l0LWwxMG4t YmFja3VwYnVkZHknICkgLiAkZXhpdGNvZGUgKTsNCgkJCQkJDQoJCQkJfQ0KDQoJCQkJLy8gUmVwb3J0 IHdoZXRoZXIgb3Igbm90IHRoZSB6aXAgZmlsZSB3YXMgY3JlYXRlZAkJCQkNCgkJCQlpZiAoICEgZmls ZV9leGlzdHMoICR0ZW1wX3ppcCApICkgew0KCQkJCQ0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWls cycsIF9fKCAnWmlwIEFyY2hpdmUgZmlsZSBub3QgY3JlYXRlZCAtIGNoZWNrIHByb2Nlc3MgZXhpdCBj b2RlLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApICk7DQoJCQkJCQ0KCQkJCX0gZWxzZSB7DQoJCQkJ CQ0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCAnWmlwIEFyY2hpdmUgZmlsZSBjcmVh dGVkIC0gY2hlY2sgcHJvY2VzcyBleGl0IGNvZGUuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgKTsN Cg0KCQkJCX0NCgkJCQkJCQkJDQoJCQkJLy8gTm93IHdlIGRvbid0IG1vdmUgaXQgKGJlY2F1c2UgZWl0 aGVyIGl0IGRvZXNuJ3QgZXhpc3Qgb3IgbWF5IGJlIGluY29tcGxldGUpIGJ1dCB3ZSdsbCBzaG93IGFu eSBlcnJvci93YXJ0bmluZyBvdXRwdXQNCgkJCQlpZiAoICFlbXB0eSggJGxpbmVzICkgKSB7DQoJCQkJ DQoJCQkJCS8vIE91dHB1dCBvbmx5IHRoZSBmaXJzdCBtYXhfbGluZXMgbGluZXMgYXQgbW9zdCAtIGlm IG1vcmUgdGhlbiBpbmRpY2F0ZSB0aGlzIGFuZCBtb3ZlIHRoZSBmaWxlIHNvIGNhbiBiZWVuIHJldmll d2VkDQoJCQkJCWlmICggY291bnQoICRsaW5lcyApID4gc2VsZjo6TUFYX0VSUk9SX0xJTkVTX1RPX1NI T1cgKSB7DQoJCQkJCQ0KCQkJCQkJJGZpcnN0X2xpbmVzID0gYXJyYXlfc2xpY2UoICRsaW5lcywgMCwg c2VsZjo6TUFYX0VSUk9SX0xJTkVTX1RPX1NIT1cgKTsNCgkJCQkJDQoJCQkJCQlmb3JlYWNoICggJGZp cnN0X2xpbmVzIGFzICRsaW5lICkgew0KCQkJCQkNCgkJCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWls cycsIF9fKCAnWmlwIHByb2Nlc3MgcmVwb3J0ZWQ6ICcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAk bGluZSApOw0KCQkJCQkNCgkJCQkJCX0NCgkJCQkJCQ0KCQkJCQkJJGVycm9yX2ZpbGUgPSBkaXJuYW1l KCAkdGVtcGRpciApIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIHNlbGY6OlpJUF9FUlJPUl9GSUxFX05B TUU7DQoJCQkJCQkNCgkJCQkJCSRlcnJvcl9hcnJheSA9IGFycmF5KCk7DQoJCQkJCQlmb3JlYWNoICgg JGxpbmVzIGFzICRsaW5lICkgew0KCQkJCQkJDQoJCQkJCQkJJGVycm9yX2FycmF5W10gPSAkbGluZSAu IFBIUF9FT0w7DQoJCQkJCQkJDQoJCQkJCQl9DQoJCQkJCQkNCgkJCQkJCWZpbGVfcHV0X2NvbnRlbnRz KCAkZXJyb3JfZmlsZSwgJGVycm9yX2FycmF5ICk7DQoJCQkJCQkNCgkJCQkJCWlmICggZmlsZV9leGlz dHMgKCAkZXJyb3JfZmlsZSApICkgew0KCQkJCQkJDQoJCQkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFp bHMnLCBfXyggJ1ppcCBwcm9jZXNzIHJlcG9ydGVkICcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAo IGNvdW50KCAkbGluZXMgKSAtIHNlbGY6Ok1BWF9FUlJPUl9MSU5FU19UT19TSE9XICkgLiBfXyggJyBt b3JlIGVycm9ycyAtIHBsZWFzZSByZXZpZXcgaW46ICcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAk ZXJyb3JfZmlsZSApOw0KCQkJCQkJCQ0KCQkJCQkJfQ0KCQkJCQkJDQoJCQkJCQ0KCQkJCQl9IGVsc2Ug ew0KCQkJCQkNCgkJCQkJCS8vIFNtYWxsIG51bWJlciBvZiBsaW5lcyBzbyBqdXN0IHNob3cgdGhlbSBh bGwNCgkJCQkJCWZvcmVhY2ggKCAkbGluZXMgYXMgJGxpbmUgKSB7DQoJCQkJCQ0KCQkJCQkJCSR0aGlz LT5zdGF0dXMoICdkZXRhaWxzJywgX18oICdaaXAgcHJvY2VzcyByZXBvcnRlZDogJywgJ2l0LWwxMG4t YmFja3VwYnVkZHknKSAuICRsaW5lICk7DQoJCQkJCQ0KCQkJCQkJfQ0KCQkJCQkJDQoJCQkJCX0NCgkJ CQkJDQoJCQkJfQ0KCQkJCQ0KCQkJCSRyZXN1bHQgPSBmYWxzZTsNCgkJCQkNCgkJCX0gZWxzZSB7DQoJ CQkNCgkJCQkvLyBHb3QgZmlsZSB3aXRoIG5vIGVycm9yIG9yIHdhcm5pbmdzIGF0IGFsbCBzbyBqdXN0 IG1vdmUgaXQgdG8gdGhlIGxvY2FsIGFyY2hpdmUNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycs IF9fKCdNb3ZpbmcgWmlwIEFyY2hpdmUgZmlsZSB0byBsb2NhbCBhcmNoaXZlIGRpcmVjdG9yeS4nLCAn aXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkJDQoJCQkJcmVuYW1lKCAkdGVtcF96aXAsICR6aXAg KTsNCgkJCQlpZiAoIGZpbGVfZXhpc3RzKCAkemlwICkgKSB7DQoJCQkJDQoJCQkJCSR0aGlzLT5zdGF0 dXMoICdkZXRhaWxzJywgX18oJ1ppcCBBcmNoaXZlIGZpbGUgbW92ZWQgdG8gbG9jYWwgYXJjaGl2ZSBk aXJlY3RvcnkuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJCQkkdGhpcy0+c3RhdHVzKCAn bWVzc2FnZScsIF9fKCAnWmlwIEFyY2hpdmUgZmlsZSBzdWNjZXNzZnVsbHkgY3JlYXRlZCB3aXRoIG5v IGVycm9ycyBvciB3YXJuaW5ncy4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSApOw0KCQkJCQkkcmVz dWx0ID0gdHJ1ZTsNCgkJCQkJDQoJCQkJfSBlbHNlIHsNCgkJCQkNCgkJCQkJJHRoaXMtPnN0YXR1cygg J2RldGFpbHMnLCBfXygnWmlwIEFyY2hpdmUgZmlsZSBjb3VsZCBub3QgYmUgbW92ZWQgdG8gbG9jYWwg YXJjaGl2ZSBkaXJlY3RvcnkuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJCQkkcmVzdWx0 ID0gZmFsc2U7DQoJCQkJCQ0KCQkJCX0NCgkJCQkNCgkJCQkvLyBBcyB3ZSBoYWQgYSBnb29kIHJlc3Vs dCB3ZSBzaG91bGQgY2xlYW4gdXAgYW55IGVycm9yIG91dHB1dCBmaWxlIGZyb20gYSBwcmV2aW91cyBi YWQgcnVuDQoJCQkJJGVycm9yX2ZpbGUgPSBkaXJuYW1lKCAkdGVtcGRpciApIC4gRElSRUNUT1JZX1NF

UEFSQVRPUiAuIHNlbGY6OlpJUF9FUlJPUl9GSUxFX05BTUU7DQoJCQkJaWYgKCBmaWxlX2V4aXN0cygg JGVycm9yX2ZpbGUgKSApIHsNCgkJCQkNCgkJCQkJQHVubGluayggJGVycm9yX2ZpbGUgKTsNCgkJCQkJ DQoJCQkJfQ0KCQkJCQkJCQkNCgkJCX0JCQkNCg0KCQkJLy8gQ2xlYW51cCB0aGUgdGVtcG9yYXJ5IGRp cmVjdG9yeSB0aGF0IHdpbGwgaGF2ZSBhbGwgZGV0cml0dXMgYW5kIG1heWJlIGluY29tcGxldGUgemlw IGZpbGUJCQkNCgkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1JlbW92aW5nIHRlbXBvcmFy eSBkaXJlY3RvcnkuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJDQoJCQlpZiAoICEoICR0 aGlzLT5kZWxldGVfZGlyZWN0b3J5X3JlY3Vyc2l2ZSggJHRlbXBkaXIgKSApICkgew0KCQkJDQoJCQkJ CSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1RlbXBvcmFyeSBkaXJlY3RvcnkgY291bGQgbm90 IGJlIGRlbGV0ZWQ6ICcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAkdGVtcGRpciApOw0KCQkJDQoJ CQl9DQoJCQkNCgkJCXJldHVybiAkcmVzdWx0Ow0KCQkJCQkJCQkJCQkJDQoJCX0NCgkJDQoJCS8qKg0K CQkgKgljcmVhdGVfbGludXgoKQ0KCQkgKgkNCgkJICoJQSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYW4g YXJjaGl2ZSBmaWxlDQoJCSAqCQ0KCQkgKglUaGUgJGV4Y2x1ZGVzIHdpbGwgYmUgYSBsaXN0IG9yIHJl bGF0aXZlIHBhdGggZXhjbHVkZXMgaWYgdGhlICRsaXN0bWFrZXIgb2JqZWN0IGlzIE5VTEwgb3RlaHJ3 aXNlDQoJCSAqCXdpbGwgYmUgYWJzb2x1dGUgcGF0aCBleGNsdWRlcyBhbmQgcmVsYXRpdmUgcGF0aCBl eGNsdWRlcyBjYW4gYmUgaGFkIGZyb20gdGhlICRsaXN0bWFrZXIgb2JqZWN0DQoJCSAqCQ0KCQkgKglA cGFyYW0JCXN0cmluZwkkemlwCQkJRnVsbCBwYXRoICYgZmlsZW5hbWUgb2YgWklQIEFyY2hpdmUgZmls ZSB0byBjcmVhdGUNCgkJICoJQHBhcmFtCQlzdHJpbmcJJGRpcgkJCUZ1bGwgcGF0aCBvZiBkaXJlY3Rv cnkgdG8gYWRkIHRvIFpJUCBBcmNoaXZlIGZpbGUNCgkJICoJQHBhcmFtCQlib29sCSRjb21wcmVzc2lv bglUcnVlIHRvIGVuYWJsZSBjb21wcmVzc2lvbiBvZiBmaWxlcyBhZGRlZCB0byBaSVAgQXJjaGl2ZSBm aWxlDQoJCSAqCUBwYXJhbWUJCWFycmF5CSRleGNsdWRlcwkJTGlzdCBvZiBlaXRoZXIgYWJzb2x1dGUg cGF0aCBleGNsdXNpb25zIG9yIHJlbGF0aXZlIGV4Y2x1c2lvbnMNCgkJICoJQHBhcmFtCQlzdHJpbmcJ JHRlbXBkaXIJCVtPcHRpb25hbF0gRnVsbCBwYXRoIG9mIGRpcmVjdG9yeSBmb3IgdGVtcG9yYXJ5IHVz YWdlDQoJCSAqCUBwYXJhbQkJb2JqZWN0CSRsaXN0bWFrZXIJCVRoZSBvYmplY3QgZnJvbSB3aGljaCB3 ZSBjYW4gZ2V0IGFuIGluY2x1c2lvbnMgbGlzdA0KCQkgKglAcmV0dXJuCQlib29sCQkJCQlUcnVlIGlm IHRoZSBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlDQoJCSAqDQoJCSAqLw0K CQlwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlX2xpbnV4KCAkemlwLCAkZGlyLCAkY29tcHJlc3Npb24s ICRleGNsdWRlcywgJHRlbXBkaXIsICRsaXN0bWFrZXIgKSB7DQoJCQ0KCQkJJGV4aXRjb2RlID0gMDsN CgkJCSRsaW5lcyA9IGFycmF5KCk7DQoJCQkkemlwcGF0aCA9ICcnOw0KCQkJJGNvbW1hbmQgPSAnJzsN CgkJCSR0ZW1wX3ppcCA9ICcnOw0KCQkJJGV4Y2x1ZGluZ19hZGRpdGlvbmFsID0gZmFsc2U7DQoJCQkk ZXhjbHVkZV9jb3VudCA9IDA7DQoJCQkkZXhjbHVzaW9ucyA9IGFycmF5KCk7DQoJCQ0KCQkJLy8gVGhl IGJhc2VkaXIgbXVzdCBoYXZlIGEgdHJhaWxpbmcgZGlyZWN0b3J5IHNlcGFyYXRvcg0KCQkJJGJhc2Vk aXIgPSAoIHJ0cmltKCB0cmltKCAkZGlyICksIERJUkVDVE9SWV9TRVBBUkFUT1IgKSApIC4gRElSRUNU T1JZX1NFUEFSQVRPUjsNCgkJCQ0KCQkJaWYgKCBlbXB0eSggJHRlbXBkaXIgKSB8fCAhZmlsZV9leGlz dHMoICR0ZW1wZGlyICkgKSB7DQoJCQkNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdU ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkgbXVzdCBiZSBhdmFpbGFibGUuJywgJ2l0LWwxMG4tYmFj a3VwYnVkZHknKSApOwkJCQkNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJDQoJCQl9DQoJCQkJCQ0KCQkJ Ly8gRGV0ZXJtaW5lIGlmIHdlIGFyZSB1c2luZyBhbiBhYnNvbHV0ZSBwYXRoDQoJCQlpZiAoIGlzc2V0 KCAkdGhpcy0+X21ldGhvZF9kZXRhaWxzWyAncGFyYW0nIF1bICdwYXRoJyBdICkgJiYgIWVtcHR5KCAk dGhpcy0+X21ldGhvZF9kZXRhaWxzWyAncGFyYW0nIF1bICdwYXRoJyBdICkgKSB7DQoJCQkNCgkJCQkk emlwcGF0aCA9IHRyaW0oICR0aGlzLT5fbWV0aG9kX2RldGFpbHNbICdwYXJhbScgXVsgJ3BhdGgnIF0g KTsNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCAnVXNpbmcgY3VzdG9tIHppcCBwYXRo OiAnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSAuICR6aXBwYXRoICk7DQoJCQkJJGNvbW1hbmQgPSAk emlwcGF0aCAuICd6aXAgJzsNCgkJCQkNCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQkkY29tbWFuZCA9ICd6 aXAgJzsNCgkJCQkNCgkJCX0NCg0KCQkJLy8gSGFyZGNvZGluZyBzb21lIGFkZGl0aW9uYWwgb3B0aW9u cyBmb3Igbm93DQoJCQkkY29tbWFuZCAuPSAnLXEgLXIgJzsNCgkJCQ0KCQkJaWYgKCAkY29tcHJlc3Np b24gIT09IHRydWUgKSB7DQoJCQkNCgkJCQkkY29tbWFuZCAuPSAnLTAgJzsNCgkJCQkkdGhpcy0+c3Rh dHVzKCAnZGV0YWlscycsIF9fKCdDb21wcmVzc2lvbiBkaXNhYmxlZCBiYXNlZCBvbiBzZXR0aW5ncy4n LCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkJDQoJCQl9DQoJCQkNCgkJCWlmICggZmlsZV9l eGlzdHMoICR6aXAgKSApIHsNCg0KCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ0V4aXN0 aW5nIFpJUCBBcmNoaXZlIGZpbGUgd2lsbCBiZSByZXBsYWNlZC4nLCAnaXQtbDEwbi1iYWNrdXBidWRk eScpICk7DQoJCQkJdW5saW5rKCAkemlwICk7DQoNCgkJCX0NCgkJCQkJCQ0KCQkJLy8gU2V0IHRlbXBv cmFyeSBkaXJlY3RvcnkgdG8gc3RvcmUgWklQIHdoaWxlIGl0J3MgYmVpbmcgZ2VuZXJhdGVkLgkJCQ0K CQkJJGNvbW1hbmQgLj0gIi1iICd7JHRlbXBkaXJ9JyAiOw0KDQoJCQkvLyBQdXQgb3VyIGZpbmFsIHpp cCBmaWxlIGluIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IC0gaXQgd2lsbCBiZSBtb3ZlZCBsYXRlcg0K CQkJJHRlbXBfemlwID0gJHRlbXBkaXIgLiBiYXNlbmFtZSggJHppcCApOwkJDQoJCQkkY29tbWFuZCAu PSAiJ3skdGVtcF96aXB9JyAuICI7DQoJCQkNCgkJCS8vIE5vdyB3b3JrIG91dCBleGNsdXNpb25zIGRl cGVuZGVudCBvbiB3aGF0IHdlIGhhdmUgYmVlbiBnaXZlbg0KCQkJaWYgKCBpc19vYmplY3QoICRsaXN0 bWFrZXIgKSAmJiAoIGRlZmluZWQoICdVU0VfRVhQRVJJTUVOVEFMX1pJUEJVRERZX0lOQ0xVU0lPTicg KSAmJiAoIHRydWUgPT09IFVTRV9FWFBFUklNRU5UQUxfWklQQlVERFlfSU5DTFVTSU9OICkgKSApIHsN CgkJCQ0KCQkJCS8vIFdlJ3JlIGRvaW5nIGFuIGluY2x1c2lvbiBvcGVyYXRpb24sIGJ1dCBmaXJzdCB3

ZSdsbCBqdXN0IHNob3cgdGhlIGV4Y2x1c2lvc24NCgkJCQkNCgkJCQkvLyBGb3IgemlwIHdlIG5lZWQg cmVsYXRpdmUgcmF0aGVyIHRoYW4gYWJzb2x1dGUgZXhjbHVzaW9uIHNwYXRocw0KCQkJCSRleGNsdXNp b25zID0gJGxpc3RtYWtlci0+Z2V0X3JlbGF0aXZlX2V4Y2x1ZGVzKCAkYmFzZWRpciApOw0KCQkJCQ0K CQkJCWlmICggY291bnQoICRleGNsdXNpb25zICkgPiAwICkgew0KCQkJCQ0KCQkJCQkkdGhpcy0+c3Rh dHVzKCAnZGV0YWlscycsIF9fKCdDYWxjdWxhdGluZyBkaXJlY3RvcmllcyB0byBleGNsdWRlIGZyb20g YmFja3VwLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCQkJDQoJCQkJCSRleGNsdWRpbmdf YWRkaXRpb25hbCA9IGZhbHNlOw0KCQkJCQkkZXhjbHVkZV9jb3VudCA9IDA7DQoJCQkJCWZvcmVhY2gg KCAkZXhjbHVzaW9ucyBhcyAkZXhjbHVkZSApIHsNCgkJCQkJDQoJCQkJCQlpZiAoICFzdHJzdHIoICRl eGNsdWRlLCAnYmFja3VwYnVkZHlfYmFja3VwcycgKSApIHsgLy8gU2V0IHZhcmlhYmxlIHRvIHNob3cg d2UgYXJlIGV4Y2x1ZGluZyBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIGJlc2lkZXMgYmFja3VwIGRpci4N CgkNCgkJCQkJCQkkZXhjbHVkaW5nX2FkZGl0aW9uYWwgPSB0cnVlOw0KCQkJCQkJCQkNCgkJCQkJCX0N CgkJCQkJCQkNCgkJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ0V4Y2x1ZGluZycsICdp dC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAnOiAnIC4gJGV4Y2x1ZGUgKTsNCgkJCQkJCQkJCQkJCQkNCgkJ CQkJCSRleGNsdWRlX2NvdW50Kys7DQoJCQkJCQkJDQoJCQkJCX0NCgkJCQkJCQkJCQkNCgkJCQl9DQoJ CQkJDQoJCQkJLy8gR2V0IHRoZSBsaXN0IG9mIGluY2x1c2lvbnMgdG8gcHJvY2Vzcw0KCQkJCSRpbmNs dXNpb25zID0gJGxpc3RtYWtlci0+Z2V0X3Rlcm1pbmFscygpOw0KCQkJCQ0KCQkJCS8vIEZvciBlYWNo IGRpcmVjdG9yeSB3ZSBuZWVkIHRvIHB1dCB0aGUgIndpbGRjYXJkIiBvbiB0aGUgZW5kDQoJCQkJZm9y ZWFjaCAoICRpbmNsdXNpb25zIGFzICYkaW5jbHVzaW9uICkgew0KCQkJCQ0KCQkJCQlpZiAoIGlzX2Rp ciggJGluY2x1c2lvbiApICkgew0KCQkJCQkNCgkJCQkJCSRpbmNsdXNpb24gLj0gRElSRUNUT1JZX1NF UEFSQVRPUiAuICIqIjsNCgkJCQkJfQ0KCQkJCQ0KCQkJCQkvLyBSZW1vdmUgZGlyZWN0b3J5IHBhdGgg cHJlZml4IGV4Y2x1ZGluZyBsZWFkaW5nIHNsYXNoIHRvIG1ha2UgcmVsYXRpdmUgKG5lZWRlZCBmb3Ig emlwKQ0KCQkJCQkkaW5jbHVzaW9uID0gc3RyX3JlcGxhY2UoIHJ0cmltKCAkYmFzZWRpciwgRElSRUNU T1JZX1NFUEFSQVRPUiApLCAnJywgJGluY2x1c2lvbiApOw0KCQkJCQkJCQkJDQoJCQkJfQ0KCQkJCQ0K CQkJCS8vIE5vdyBjcmVhdGUgdGhlIGluY2x1c2lvbnMgZmlsZSBpbiB0aGUgdGVtcGRpcg0KCQkJCQ0K CQkJCS8vIEFuZCB1cGRhdGUgdGhlIGNvbW1hbmQgb3B0aW9ucw0KCQkJCSRpZmlsZSA9IGRpcm5hbWUo ICR0ZW1wZGlyICkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2luY2x1c2lvbnNfZmlsZS50eHQnOw0K CQkJCWlmICggZmlsZV9leGlzdHMoICRpZmlsZSApICkgew0KCQkJCQ0KCQkJCQlAdW5saW5rKCAkaWZp bGUgKTsNCgkJCQkNCgkJCQl9DQoJCQkJDQoJCQkJZmlsZV9wdXRfY29udGVudHMoICRpZmlsZSwgaW1w bG9kZSggUEhQX0VPTCwgJGluY2x1c2lvbnMgKSAuIFBIUF9FT0wgLiBQSFBfRU9MICk7DQoJCQkJDQoJ CQkJJGNvbW1hbmQgLj0gIi1pQCIgLiAkaWZpbGUgLiAiICI7DQoJCQkNCgkJCX0gZWxzZSB7DQoJCQkN CgkJCQkvLyBXZSdyZSBkb2luZyBhbiBleGNsdXNpb24gb3BlcmF0aW9uDQoJCQkNCgkJCQkkY29tbWFu ZCAuPSAiLWkgJyonICI7DQoJCQkJDQoJCQkJLy8gU2luY2Ugd2UgaGFkIG5vICRsaXN0bWFrZXIgb2Jq ZWN0IG9yIG5vdCB1c2luZyBpdCBnZXQgdGhlIHN0YW5kYXJkIHJlbGF0aXZlIGV4Y2x1ZGVzIHRvIHBy b2Nlc3MNCgkJCQkkZXhjbHVzaW9ucyA9ICRleGNsdWRlczsNCgkJCQkNCgkJCQlpZiAoIGNvdW50KCAk ZXhjbHVzaW9ucyApID4gMCApIHsNCgkJCQkNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBf XygnQ2FsY3VsYXRpbmcgZGlyZWN0b3JpZXMgdG8gZXhjbHVkZSBmcm9tIGJhY2t1cC4nLCAnaXQtbDEw bi1iYWNrdXBidWRkeScpICk7DQoJCQkJCSRjb21tYW5kIC49ICcteCAnOw0KCQkJCQkNCgkJCQkJJGV4 Y2x1ZGluZ19hZGRpdGlvbmFsID0gZmFsc2U7DQoJCQkJCSRleGNsdWRlX2NvdW50ID0gMDsNCgkJCQkJ Zm9yZWFjaCAoICRleGNsdXNpb25zIGFzICRleGNsdWRlICkgew0KCQkJCQkNCgkJCQkJCWlmICggIXN0 cnN0ciggJGV4Y2x1ZGUsICdiYWNrdXBidWRkeV9iYWNrdXBzJyApICkgeyAvLyBTZXQgdmFyaWFibGUg dG8gc2hvdyB3ZSBhcmUgZXhjbHVkaW5nIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgYmVzaWRlcyBiYWNr dXAgZGlyLg0KCQ0KCQkJCQkJCSRleGNsdWRpbmdfYWRkaXRpb25hbCA9IHRydWU7DQoJCQkJCQkJCQ0K CQkJCQkJfQ0KCQkJCQkJCQ0KCQkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnRXhjbHVk aW5nJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSAuICc6ICcgLiAkZXhjbHVkZSApOw0KCQkJCQkJDQoJ CQkJCQlpZiAoIHN1YnN0ciggJGV4Y2x1ZGUsIC0xLCAxKSA9PSBESVJFQ1RPUllfU0VQQVJBVE9SICkg ew0KCQkJCQkJDQoJCQkJCQkJLy8gSXQncyBhIGRpcmVjdG9yeSBzbyBhcHBlbmQgYSB3aWxkY2FyZA0K CQkJCQkJCSRjb21tYW5kIC49ICIneyRleGNsdWRlfSonICI7DQoJCQkJCQkJDQoJCQkJCQl9IGVsc2Ug ew0KCQkJCQkJDQoJCQkJCQkJLy8gSXQncyBhIGZpbGUgc28gbm8gd2lsZGNhcmQNCgkJCQkJCQkkY29t bWFuZCAuPSAiJ3skZXhjbHVkZX0nICI7DQoJCQkJCQkNCgkJCQkJCX0NCgkJCQkJCQkNCgkJCQkJCSRl eGNsdWRlX2NvdW50Kys7DQoJCQkJCQkJDQoJCQkJCX0NCgkJCQkJCQkJCQkNCgkJCQl9DQoJCQkNCgkJ CX0NCgkJCQkJCQ0KCQkJaWYgKCAkZXhjbHVkaW5nX2FkZGl0aW9uYWwgPT09IHRydWUgKSB7DQoJCQkN CgkJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsIF9fKCAnRXhjbHVkaW5nIGFyY2hpdmVzIGRpcmVj dG9yeSBhbmQgYWRkaXRpb25hbCBkaXJlY3RvcmllcyBkZWZpbmVkIGluIHNldHRpbmdzLicsICdpdC1s MTBuLWJhY2t1cGJ1ZGR5JyApIC4gJyAnIC4gJGV4Y2x1ZGVfY291bnQgLiAnICcgLiBfXyggJ3RvdGFs JywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgLiAnLicgKTsNCgkJCQkNCgkJCX0gZWxzZSB7DQoJCQkN CgkJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsIF9fKCAnT25seSBleGNsdWRpbmcgYXJjaGl2ZXMg ZGlyZWN0b3J5IGJhc2VkIG9uIHNldHRpbmdzLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApIC4gJyAn IC4gJGV4Y2x1ZGVfY291bnQgLiAnICcgLiBfXyggJ3RvdGFsJywgJ2l0LWwxMG4tYmFja3VwYnVkZHkn ICkgLiAnLicgKTsNCgkJCQkNCgkJCX0NCgkJCQkJCQ0KCQkJLy8gUmVtZW1iZXIgdGhlIGN1cnJlbnQg ZGlyZWN0b3J5IGFuZCBjaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSBiZWluZyBhZGRlZCBzbyB0aGF0ICIu

IiBpcyB2YWxpZCBpbiBjb21tYW5kDQoJCQkkd29ya2luZ19kaXIgPSBnZXRjd2QoKTsNCgkJCWNoZGly KCAkZGlyICk7DQoJCQkNCgkJCS8vIFJ1biBaSVAgY29tbWFuZC4NCgkJCS8vIE5vdGU6IG5vdCBiYWNr Z3JvdW5kaW5nIG90aGVyd2lzZSB3ZSBjYW5ub3QgZ2V0IHJldHVybiBjb2RlDQoJCQkvLyBIb3dldmVy LCB3ZSBkbyByZWRpcmVjdCBzdGRlcnIgdG8gc3Rkb3V0IHNvIHRoYXQgaXQgaXMgY2FwdHVyZWQNCgkJ CSR0aGVzaGVsbCA9IGV4ZWMoICdlY2hvICIkMCIgJyApOw0KCQkJaWYgKCBwcmVnX21hdGNoKCAiL2Jh c2gvaSIsICR0aGVzaGVsbCApIHx8IHByZWdfbWF0Y2goICIvc2gvaSIsICR0aGVzaGVsbCApICkgew0K CQkJDQoJCQkJJGNvbW1hbmQgLj0gJyAyPiYxICc7DQoJCQkNCgkJCX0gZWxzZWlmICggcHJlZ19tYXRj aCggIi9jc2gvaSIsICR0aGVzaGVsbCApICkgew0KCQkJDQoJCQkJJGNvbW1hbmQgLj0gJyA+JiAnOw0K CQkJCQ0KCQkJfQ0KCQkJDQoJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICR0aGlzLT5nZXRfbWV0 aG9kX3RhZygpIC4gX18oJyBjb21tYW5kIChMaW51eCknLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4g JzogJyAuICRjb21tYW5kICk7DQoJCQlAZXhlYyggJGNvbW1hbmQsICRsaW5lcywgJGV4aXRjb2RlICk7 DQoJCQkJCQkNCgkJCS8vIFNldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGJhY2sgdG8gd2hlcmUg d2Ugd2VyZQ0KCQkJY2hkaXIoICR3b3JraW5nX2RpciApOw0KCQkJDQoJCQkvLyBDb252ZW5pZW5jZSBm b3IgaGFuZGxpbmcgZGlmZmVyZW50IHNjYW5hcmlvcw0KCQkJJHJlc3VsdCA9IGZhbHNlOw0KCQkJDQoJ CQkvLyBTZWUgaWYgd2UgY2FuIGZpZ3VyZSBvdXQgd2hhdCBoYXBwZW5lZCAtIG5vdGUgdGhhdCAkZXhp dGNvZGUgY291bGQgYmUgbm9uLXplcm8gZm9yIGEgd2FybmluZyBvciBlcnJvcg0KCQkJaWYgKCAoICEg ZmlsZV9leGlzdHMoICR0ZW1wX3ppcCApICkgfHwgKCAkZXhpdGNvZGUgIT0gMCApICkgew0KCQkJDQoJ CQkJLy8gSWYgd2UgaGFkIGEgbm9uLXplcm8gZXhpdCBjb2RlIHRoZW4gc2hvdWxkIHJlcG9ydCBpdCAo ZmlsZSBtYXkgb3IgbWF5IG5vdCBiZSBjcmVhdGVkKQ0KCQkJCWlmICggJGV4aXRjb2RlICE9IDAgKSB7 DQoJCQkJDQoJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1ppcCBwcm9jZXNzIGV4aXQg Y29kZTogJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgLiAkZXhpdGNvZGUgKTsNCgkJCQkJDQoJCQkJ fQ0KDQoJCQkJLy8gUmVwb3J0IHdoZXRoZXIgb3Igbm90IHRoZSB6aXAgZmlsZSB3YXMgY3JlYXRlZAkJ CQkNCgkJCQlpZiAoICEgZmlsZV9leGlzdHMoICR0ZW1wX3ppcCApICkgew0KCQkJCQ0KCQkJCQkkdGhp cy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCAnWmlwIEFyY2hpdmUgZmlsZSBub3QgY3JlYXRlZCAtIGNo ZWNrIHByb2Nlc3MgZXhpdCBjb2RlLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApICk7DQoJCQkJCQ0K CQkJCX0gZWxzZSB7DQoJCQkJCQ0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCAnWmlw IEFyY2hpdmUgZmlsZSBjcmVhdGVkIC0gY2hlY2sgcHJvY2VzcyBleGl0IGNvZGUuJywgJ2l0LWwxMG4t YmFja3VwYnVkZHknICkgKTsNCg0KCQkJCX0NCgkJCQkJCQkJDQoJCQkJLy8gTm93IHdlIGRvbid0IG1v dmUgaXQgKGJlY2F1c2UgZWl0aGVyIGl0IGRvZXNuJ3QgZXhpc3Qgb3IgbWF5IGJlIGluY29tcGxldGUp IGJ1dCB3ZSdsbCBzaG93IGFueSBlcnJvci93YXJ0bmluZyBvdXRwdXQNCgkJCQlpZiAoICFlbXB0eSgg JGxpbmVzICkgKSB7DQoJCQkJDQoJCQkJCS8vIE91dHB1dCBvbmx5IHRoZSBmaXJzdCBtYXhfbGluZXMg bGluZXMgYXQgbW9zdCAtIGlmIG1vcmUgdGhlbiBpbmRpY2F0ZSB0aGlzIGFuZCBtb3ZlIHRoZSBmaWxl IHNvIGNhbiBiZWVuIHJldmlld2VkDQoJCQkJCWlmICggY291bnQoICRsaW5lcyApID4gc2VsZjo6TUFY X0VSUk9SX0xJTkVTX1RPX1NIT1cgKSB7DQoJCQkJCQ0KCQkJCQkJJGZpcnN0X2xpbmVzID0gYXJyYXlf c2xpY2UoICRsaW5lcywgMCwgc2VsZjo6TUFYX0VSUk9SX0xJTkVTX1RPX1NIT1cgKTsNCgkJCQkJDQoJ CQkJCQlmb3JlYWNoICggJGZpcnN0X2xpbmVzIGFzICRsaW5lICkgew0KCQkJCQkNCgkJCQkJCQkkdGhp cy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCAnWmlwIHByb2Nlc3MgcmVwb3J0ZWQ6ICcsICdpdC1sMTBu LWJhY2t1cGJ1ZGR5JykgLiAkbGluZSApOw0KCQkJCQkNCgkJCQkJCX0NCgkJCQkJCQ0KCQkJCQkJJGVy cm9yX2ZpbGUgPSBkaXJuYW1lKCAkdGVtcGRpciApIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIHNlbGY6 OlpJUF9FUlJPUl9GSUxFX05BTUU7DQoJCQkJCQkNCgkJCQkJCSRlcnJvcl9hcnJheSA9IGFycmF5KCk7 DQoJCQkJCQlmb3JlYWNoICggJGxpbmVzIGFzICRsaW5lICkgew0KCQkJCQkJDQoJCQkJCQkJJGVycm9y X2FycmF5W10gPSAkbGluZSAuIFBIUF9FT0w7DQoJCQkJCQkJDQoJCQkJCQl9DQoJCQkJCQkNCgkJCQkJ CWZpbGVfcHV0X2NvbnRlbnRzKCAkZXJyb3JfZmlsZSwgJGVycm9yX2FycmF5ICk7DQoJCQkJCQkNCgkJ CQkJCWlmICggZmlsZV9leGlzdHMgKCAkZXJyb3JfZmlsZSApICkgew0KCQkJCQkJDQoJCQkJCQkJJHRo aXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXyggJ1ppcCBwcm9jZXNzIHJlcG9ydGVkICcsICdpdC1sMTBu LWJhY2t1cGJ1ZGR5JykgLiAoIGNvdW50KCAkbGluZXMgKSAtIHNlbGY6Ok1BWF9FUlJPUl9MSU5FU19U T19TSE9XICkgLiBfXyggJyBtb3JlIGVycm9ycyAtIHBsZWFzZSByZXZpZXcgaW46ICcsICdpdC1sMTBu LWJhY2t1cGJ1ZGR5JykgLiAkZXJyb3JfZmlsZSApOw0KCQkJCQkJCQ0KCQkJCQkJfQ0KCQkJCQkJDQoJ CQkJCQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkNCgkJCQkJCS8vIFNtYWxsIG51bWJlciBvZiBsaW5lcyBz byBqdXN0IHNob3cgdGhlbSBhbGwNCgkJCQkJCWZvcmVhY2ggKCAkbGluZXMgYXMgJGxpbmUgKSB7DQoJ CQkJCQ0KCQkJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oICdaaXAgcHJvY2VzcyByZXBv cnRlZDogJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSAuICRsaW5lICk7DQoJCQkJCQ0KCQkJCQkJfQ0K CQkJCQkJDQoJCQkJCX0NCgkJCQkJDQoJCQkJfQ0KCQkJCQ0KCQkJCSRyZXN1bHQgPSBmYWxzZTsNCgkJ CQkNCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQkvLyBHb3QgZmlsZSB3aXRoIG5vIGVycm9yIG9yIHdhcm5p bmdzIGF0IGFsbCBzbyBqdXN0IG1vdmUgaXQgdG8gdGhlIGxvY2FsIGFyY2hpdmUNCgkJCQkkdGhpcy0+ c3RhdHVzKCAnZGV0YWlscycsIF9fKCdNb3ZpbmcgWmlwIEFyY2hpdmUgZmlsZSB0byBsb2NhbCBhcmNo aXZlIGRpcmVjdG9yeS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkJDQoJCQkJcmVuYW1l KCAkdGVtcF96aXAsICR6aXAgKTsNCgkJCQlpZiAoIGZpbGVfZXhpc3RzKCAkemlwICkgKSB7DQoJCQkJ DQoJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1ppcCBBcmNoaXZlIGZpbGUgbW92ZWQg dG8gbG9jYWwgYXJjaGl2ZSBkaXJlY3RvcnkuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJ

CQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsIF9fKCAnWmlwIEFyY2hpdmUgZmlsZSBzdWNjZXNzZnVs bHkgY3JlYXRlZCB3aXRoIG5vIGVycm9ycyBvciB3YXJuaW5ncy4nLCAnaXQtbDEwbi1iYWNrdXBidWRk eScgKSApOw0KCQkJCQkkcmVzdWx0ID0gdHJ1ZTsNCgkJCQkJDQoJCQkJfSBlbHNlIHsNCgkJCQkNCgkJ CQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnWmlwIEFyY2hpdmUgZmlsZSBjb3VsZCBub3Qg YmUgbW92ZWQgdG8gbG9jYWwgYXJjaGl2ZSBkaXJlY3RvcnkuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHkn KSApOw0KCQkJCQkkcmVzdWx0ID0gZmFsc2U7DQoJCQkJCQ0KCQkJCX0NCgkJCQkNCgkJCQkvLyBBcyB3 ZSBoYWQgYSBnb29kIHJlc3VsdCB3ZSBzaG91bGQgY2xlYW4gdXAgYW55IGVycm9yIG91dHB1dCBmaWxl IGZyb20gYSBwcmV2aW91cyBiYWQgcnVuDQoJCQkJJGVycm9yX2ZpbGUgPSBkaXJuYW1lKCAkdGVtcGRp ciApIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIHNlbGY6OlpJUF9FUlJPUl9GSUxFX05BTUU7DQoJCQkJ aWYgKCBmaWxlX2V4aXN0cyggJGVycm9yX2ZpbGUgKSApIHsNCgkJCQkNCgkJCQkJQHVubGluayggJGVy cm9yX2ZpbGUgKTsNCgkJCQkJDQoJCQkJfQ0KCQkJCQkJCQkNCgkJCX0JCQkNCg0KCQkJLy8gQ2xlYW51 cCB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdpbGwgaGF2ZSBhbGwgZGV0cml0dXMgYW5kIG1h eWJlIGluY29tcGxldGUgemlwIGZpbGUJCQkNCgkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18o J1JlbW92aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0K CQkJDQoJCQlpZiAoICEoICR0aGlzLT5kZWxldGVfZGlyZWN0b3J5X3JlY3Vyc2l2ZSggJHRlbXBkaXIg KSApICkgew0KCQkJDQoJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1RlbXBvcmFyeSBk aXJlY3RvcnkgY291bGQgbm90IGJlIGRlbGV0ZWQ6ICcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAk dGVtcGRpciApOw0KCQkJDQoJCQl9DQoJCQkNCgkJCXJldHVybiAkcmVzdWx0Ow0KCQkJCQkJCQkJCQkJ DQoJCX0NCgkJDQoJfSAvLyBlbmQgcGx1Z2luYnVkZHlfemJ6aXBleGVjIGNsYXNzLgkNCgkNCn0NCj8+ ###PACKDATA,FILE_END,/lib/zipbuddy/zbzipexec.php,importbuddy/lib/zipbuddy/zbzipe xec.php ###PACKDATA,FILE_START,/lib/zipbuddy/zbzippclzip.php,importbuddy/lib/zipbuddy/zb zippclzip.php PD9waHANCi8qKg0KICoJcGx1Z2luYnVkZHlfemJ6aXBwY2x6aXAgQ2xhc3MNCiAqDQogKiAgRXh0ZW5k cyB0aGUgemlwIGNhcGFiaWxpdHkgY29yZSBjbGFzcyB3aXRoIHByb2Mgc3BlY2lmaWMgY2FwYWJpbGl0 eQ0KICoJDQogKglWZXJzaW9uOiAxLjAuMA0KICoJQXV0aG9yOg0KICoJQXV0aG9yIFVSSToNCiAqDQog KglAcGFyYW0JCSRwYXJlbnQJCW9iamVjdAkJT3B0aW9uYWwgcGFyZW50IG9iamVjdCB3aGljaCBjYW4g cHJvdmlkZSBmdW5jdGlvbnMgZm9yIHJlcG9ydGluZywgZXRjLg0KICoJQHJldHVybgkJbnVsbA0KICoN CiAqLw0KaWYgKCAhY2xhc3NfZXhpc3RzKCAicGx1Z2luYnVkZHlfemJ6aXBwY2x6aXAiICkgKSB7DQoN CgljbGFzcyBwbHVnaW5idWRkeV96YnppcHBjbHppcCBleHRlbmRzIHBsdWdpbmJ1ZGR5X3piemlwY29y ZSB7DQoJDQoJCWNvbnN0IFpJUF9DT05URU5UX0ZJTEVfTkFNRSA9ICdsYXN0X3BjbHppcF9saXN0LnR4 dCc7DQoNCiAgICAgICAgLyoqDQogICAgICAgICAqIG1ldGhvZCB0YWcgdXNlZCB0byByZWZlciB0byB0 aGUgbWV0aG9kIGFuZCBlbnRpdGllcyBhc3NvY2lhdGVkIHdpdGggaXQgc3VjaCBhcyBjbGFzcyBuYW1l DQogICAgICAgICAqIA0KICAgICAgICAgKiBAdmFyICRfbWV0aG9kX3RhZyAJc3RyaW5nDQogICAgICAg ICAqLw0KCQlwdWJsaWMgc3RhdGljICRfbWV0aG9kX3RhZyA9ICdwY2x6aXAnOw0KCQkJDQogICAgICAg IC8qKg0KICAgICAgICAgKiBUaGlzIHRlbGxzIHVzIHdoZXRoZXIgdGhpcyBtZXRob2QgaXMgcmVnYXJk ZWQgYXMgYSAiY29tcGF0aWJpbGl0eSIgbWV0aG9kDQogICAgICAgICAqIA0KICAgICAgICAgKiBAdmFy IGJvb2wNCiAgICAgICAgICovDQoJCXB1YmxpYyBzdGF0aWMgJF9pc19jb21wYXRpYmlsaXR5X21ldGhv ZCA9IHRydWU7DQoJCQkNCgkJLyoqDQoJCSAqCV9fY29uc3RydWN0KCkNCgkJICoJDQoJCSAqCURlZmF1 bHQgY29uc3RydWN0b3IuDQoJCSAqCQ0KCQkgKglAcGFyYW0JCXJlZmVyZW5jZQkmJHBhcmVudAkJW29w dGlvbmFsXSBSZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBzdGF0dXMoKSBmdW5j dGlvbiBmb3Igc3RhdHVzIHVwZGF0ZXMuDQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJICovDQoJ CXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCggJiRwYXJlbnQgPSBOVUxMICkgew0KDQoJCQlwYXJl bnQ6Ol9fY29uc3RydWN0KCAkcGFyZW50ICk7DQoJCQkNCgkJCS8vIERlZmluZSB0aGUgaW5pdGlhbCBk ZXRhaWxzDQoJCQkkdGhpcy0+X21ldGhvZF9kZXRhaWxzWyAnYXR0cicgXSA9IGFycmF5KCAnbmFtZScg PT4gJ1BjbFppcCBNZXRob2QnLCAnY29tcGF0aWJpbGl0eScgPT4gcGx1Z2luYnVkZHlfemJ6aXBwY2x6 aXA6OiRfaXNfY29tcGF0aWJpbGl0eV9tZXRob2QgKTsNCgkJCSR0aGlzLT5fbWV0aG9kX2RldGFpbHNb ICdwYXJhbScgXSA9IGFycmF5KCAncGF0aCcgPT4gJycgKTsNCgkJCQ0KCQl9DQoJCQ0KCQkvKioNCgkJ ICoJX19kZXN0cnVjdCgpDQoJCSAqCQ0KCQkgKglEZWZhdWx0IGRlc3RydWN0b3IuDQoJCSAqCQ0KCQkg KglAcmV0dXJuCQludWxsDQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgg KSB7DQoJCQ0KCQkJcGFyZW50OjpfX2Rlc3RydWN0KCk7DQoNCgkJfQ0KCQkNCgkJLyoqDQoJCSAqCWdl dF9tZXRob2RfdGFnKCkNCgkJICoJDQoJCSAqCVJldHVybnMgdGhlIChzdGF0aWMpIG1ldGhvZCB0YWcN CgkJICoJDQoJCSAqCUByZXR1cm4JCXN0cmluZyBUaGUgbWV0aG9kIHRhZw0KCQkgKg0KCQkgKi8NCgkJ cHVibGljIGZ1bmN0aW9uIGdldF9tZXRob2RfdGFnKCkgew0KCQkNCgkJCXJldHVybiBwbHVnaW5idWRk eV96YnppcHBjbHppcDo6JF9tZXRob2RfdGFnOw0KCQkJDQoJCX0NCgkJDQoJCQkvKioNCgkJICoJZ2V0 X2lzX2NvbXBhdGliaWxpdHlfbWV0aG9kKCkNCgkJICoJDQoJCSAqCVJldHVybnMgdGhlIChzdGF0aWMp IGlzX2NvbXBhdGliaWxpdHlfbWV0aG9kIGJvb2xlYW4NCgkJICoJDQoJCSAqCUByZXR1cm4JCWJvb2wN CgkJICoNCgkJICovDQoJCXB1YmxpYyBmdW5jdGlvbiBnZXRfaXNfY29tcGF0aWJpbGl0eV9tZXRob2Qo KSB7DQoJCQ0KCQkJcmV0dXJuIHBsdWdpbmJ1ZGR5X3piemlwcGNsemlwOjokX2lzX2NvbXBhdGliaWxp dHlfbWV0aG9kOw0KCQkJDQoJCX0NCgkJDQoJLyoqDQoJCSAqCWlzX2F2YWlsYWJsZSgpDQoJCSAqCQ0K

CQkgKglBIGZ1bmN0aW9uIHRoYXQgdGVzdHMgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIHNwZWNp ZmljIG1ldGhvZCBpbiB0aGUgcmVxdWVzdGVkIG1vZGUNCgkJICoJDQoJCSAqCUBwYXJhbWUJc3RyaW5n CSR0ZW1wZGlyCVRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gdXNlIGZvciBhbnkgdGVzdCBmaWxlcw0KCQkg KglAcGFyYW0Jc3RyaW5nCSRtb2RlCQlNZXRob2QgbW9kZSB0byB0ZXN0IGZvcg0KCQkgKglAcGFyYW0J YXJyYXkJJHN0YXR1cwkJQXJyYXkgZm9yIGFueSBzdGF0dXMgbWVzc2FnZXMNCgkJICoJQHJldHVybgli b29sCQkJCVRydWUgaWYgdGhlIG1ldGhvZC9tb2RlIGNvbWJpbmF0aW9uIGlzIGF2YWlsYWJsZSwgZmFs c2Ugb3RoZXJ3aXNlDQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gaXNfYXZhaWxhYmxlKCAk dGVtcGRpciwgJG1vZGUsICYkc3RhdHVzICkgew0KCQkNCgkJCSRyZXN1bHQgPSBmYWxzZTsNCgkJCSR6 aXAgPSBOVUxMOw0KCQkJDQoJCQkvLyBUaGUgY2xhc3MgaGFzIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXMN CgkJCUBpbmNsdWRlX29uY2UoIEFCU1BBVEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvY2xhc3MtcGNsemlw LnBocCcgKTsNCgkJCQ0KCQkJaWYgKCBjbGFzc19leGlzdHMoICdQY2xaaXAnICkgKSB7DQoJCQkNCgkJ CQkkdGVzdF9maWxlID0gJHRlbXBkaXIgLiAndGVtcF90ZXN0XycgLiB1bmlxaWQoKSAuICcuemlwJzsN CgkJCQkNCgkJCQkkemlwID0gbmV3IFBjbFppcCggJHRlc3RfZmlsZSApOw0KCQkJCQ0KCQkJCWlmICgg JHppcC0+Y3JlYXRlKCBfX0ZJTEVfXyAsIFBDTFpJUF9PUFRfUkVNT1ZFX1BBVEgsIGRpcm5hbWUoIF9f RklMRV9fKSAgKSAhPSAwICkgew0KCQkJCQkJDQoJCQkJCWlmICggZmlsZV9leGlzdHMoICR0ZXN0X2Zp bGUgKSApIHsNCgkJCQkJDQoJCQkJCQlpZiAoICF1bmxpbmsoICR0ZXN0X2ZpbGUgKSApIHsNCgkJCQkJ DQoJCQkJCQkJJHN0YXR1c1tdID0gc3ByaW50ZiggX18oJ0Vycm9yICM1NjQ2MzQuIFVuYWJsZSB0byBk ZWxldGUgdGVzdCBmaWxlICglcykhJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSwgJHRlc3RfZmlsZSAp Ow0KCQkJCQkJDQoJCQkJCQl9DQoJCQkJCQ0KCQkJCQkJJHN0YXR1c1tdID0gX18oJ1BjbFppcCB0ZXN0 IFBBU1NFRC4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCQkJCQkJJHJlc3VsdCA9IHRydWU7DQoJ CQkJCQkNCgkJCQkJfSBlbHNlIHsNCgkJCQkJDQoJCQkJCQkkc3RhdHVzW10gPSBfXygnUGNsWmlwIHRl c3QgRkFJTEVEOiBaaXAgZmlsZSBub3QgZm91bmQuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKTsNCgkJ CQkJCSRyZXN1bHQgPSBmYWxzZTsNCgkJCQkJCQ0KCQkJCQl9DQoJCQkJCQ0KCQkJCX0gZWxzZSB7DQoJ CQkJDQoJCQkJCSRzdGF0dXNbXSA9IF9fKCdQY2xaaXAgdGVzdCBGQUlMRUQ6IFVuYWJsZSB0byBjcmVh dGUvb3BlbiB6aXAgZmlsZS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCQkJCQkkc3RhdHVzW10g PSBfXygnUGNsWmlwIEVycm9yOiAnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4gJHppcC0+ZXJyb3JJ bmZvKCB0cnVlICk7DQoJCQkJCSRyZXN1bHQgPSBmYWxzZTsNCgkJCQkJDQoJCQkJfQ0KCQkJCQ0KCQkJ fSBlbHNlIHsNCgkJCQ0KCQkJCSRzdGF0dXNbXSA9IF9fKCdQY2xaaXAgdGVzdCBGQUlMRUQ6IFBjbFpp cCBjbGFzcyBkb2VzIG5vdCBleGlzdC4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCQkJCSRyZXN1 bHQgPSBmYWxzZTsNCgkJICANCgkJICAJfQ0KCQkgIAkNCgkJICAJaWYgKCBOVUxMICE9ICR6aXAgKSB7 IHVuc2V0KCAkemlwICk7IH0NCgkJICAJDQoJCSAgCXJldHVybiAkcmVzdWx0Ow0KCQkgIAkNCgkJfQ0K CQkNCgkJLyoqDQoJCSAqCWNyZWF0ZSgpDQoJCSAqCQ0KCQkgKglBIGZ1bmN0aW9uIHRoYXQgY3JlYXRl cyBhbiBhcmNoaXZlIGZpbGUNCgkJICoJDQoJCSAqCVRoZSAkZXhjbHVkZXMgd2lsbCBiZSBhIGxpc3Qg b3IgcmVsYXRpdmUgcGF0aCBleGNsdWRlcyBpZiB0aGUgJGxpc3RtYWtlciBvYmplY3QgaXMgTlVMTCBv dGVocndpc2UNCgkJICoJd2lsbCBiZSBhYnNvbHV0ZSBwYXRoIGV4Y2x1ZGVzIGFuZCByZWxhdGl2ZSBw YXRoIGV4Y2x1ZGVzIGNhbiBiZSBoYWQgZnJvbSB0aGUgJGxpc3RtYWtlciBvYmplY3QNCgkJICoJDQoJ CSAqCUBwYXJhbQkJc3RyaW5nCSR6aXAJCQlGdWxsIHBhdGggJiBmaWxlbmFtZSBvZiBaSVAgQXJjaGl2 ZSBmaWxlIHRvIGNyZWF0ZQ0KCQkgKglAcGFyYW0JCXN0cmluZwkkZGlyCQkJRnVsbCBwYXRoIG9mIGRp cmVjdG9yeSB0byBhZGQgdG8gWklQIEFyY2hpdmUgZmlsZQ0KCQkgKglAcGFyYW0JCWJvb2wJJGNvbXBy ZXNzaW9uCVRydWUgdG8gZW5hYmxlIGNvbXByZXNzaW9uIG9mIGZpbGVzIGFkZGVkIHRvIFpJUCBBcmNo aXZlIGZpbGUNCgkJICoJQHBhcmFtZQkJYXJyYXkJJGV4Y2x1ZGVzCQlMaXN0IG9mIGVpdGhlciBhYnNv bHV0ZSBwYXRoIGV4Y2x1c2lvbnMgb3IgcmVsYXRpdmUgZXhjbHVzaW9ucw0KCQkgKglAcGFyYW0JCXN0 cmluZwkkdGVtcGRpcgkJRnVsbCBwYXRoIG9mIGRpcmVjdG9yeSBmb3IgdGVtcG9yYXJ5IHVzYWdlDQoJ CSAqCUBwYXJhbQkJb2JqZWN0CSRsaXN0bWFrZXIJCVRoZSBvYmplY3QgZnJvbSB3aGljaCB3ZSBjYW4g Z2V0IGFuIGluY2x1c2lvbnMgbGlzdA0KCQkgKglAcmV0dXJuCQlib29sCQkJCQlUcnVlIGlmIHRoZSBj cmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlDQoJCSAqDQoJCSAqLw0KCQlwdWJs aWMgZnVuY3Rpb24gY3JlYXRlKCAkemlwLCAkZGlyLCAkY29tcHJlc3Npb24sICRleGNsdWRlcywgJHRl bXBkaXIsICRsaXN0bWFrZXIgPSBOVUxMICkgew0KCQkNCgkJCSRleGl0Y29kZSA9IDA7DQoJCQkkemlw X291dHB1dCA9IGFycmF5KCk7DQoJCQkkdGVtcF96aXAgPSAnJzsNCgkJCSRleGNsdWRpbmdfYWRkaXRp b25hbCA9IGZhbHNlOw0KCQkJJGV4Y2x1ZGVfY291bnQgPSAwOw0KCQkJJGV4Y2x1c2lvbnMgPSBhcnJh eSgpOw0KCQkNCgkJCS8vIFRoZSBiYXNlZGlyIG11c3QgaGF2ZSBhIHRyYWlsaW5nIGRpcmVjdG9yeSBz ZXBhcmF0b3INCgkJCSRiYXNlZGlyID0gKCBydHJpbSggdHJpbSggJGRpciApLCBESVJFQ1RPUllfU0VQ QVJBVE9SICkgKSAuIERJUkVDVE9SWV9TRVBBUkFUT1I7DQoNCgkJCSR0aGlzLT5zdGF0dXMoICdtZXNz YWdlJywgX18oJ1VzaW5nIENvbXBhdGliaWxpdHkgTW9kZS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScp ICk7DQoJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsIF9fKCdJZiB5b3VyIGJhY2t1cCB0aW1lcyBv dXQgaW4gQ29tcGF0aWJpbGl0eSBNb2RlIHRyeSBkaXNhYmxpbmcgemlwIGNvbXByZXNzaW9uIGluIFNl dHRpbmdzLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCQ0KCQkJcmVxdWlyZV9vbmNlKCBB QlNQQVRIIC4gJ3dwLWFkbWluL2luY2x1ZGVzL2NsYXNzLXBjbHppcC5waHAnICk7DQoJCQkNCgkJCWlm ICggZW1wdHkoICR0ZW1wZGlyICkgfHwgIWZpbGVfZXhpc3RzKCAkdGVtcGRpciApICkgew0KCQkJDQoJ CQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnVGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5

IG11c3QgYmUgYXZhaWxhYmxlLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsJCQkJDQoJCQkJcmV0 dXJuIGZhbHNlOw0KCQkJCQ0KCQkJfQ0KCQkJDQoJCQkvLyBEZWNpZGUgd2hldGhlciB3ZSBhcmUgb2Zm ZXJpbmcgZXhjbHVzaW9ucyBvciBub3QNCgkJCS8vIE5vdGUgdGhhdCB1bmxpa2UgcHJvYyBhbmQgemlw IHdlIGFsd2F5cyB1c2UgaW5jbHVzaW9uIGlmIGF2YWlsYWJsZSB0byBvZmZlciBleGNsdXNpb24gY2Fw YWJpbGl0eSBmb3IgcGNsemlwDQoJCQlpZiAoIGlzX29iamVjdCggJGxpc3RtYWtlciApICkgew0KCQkJ CQ0KCQkJCS8vIE5lZWQgdG8gZ2V0IHRoZSByZWxhdGl2ZSBleGNsdXNpb25zIHNvIHdlIGNhbiBsb2cg d2hhdCBpcyBiZWluZyBleGNsdWRlZC4uLg0KCQkJCSRleGNsdXNpb25zID0gJGxpc3RtYWtlci0+Z2V0 X3JlbGF0aXZlX2V4Y2x1ZGVzKCAkYmFzZWRpciApOw0KCQkJCQ0KCQkJCS8vIEJ1aWxkIHRoZSBleGNs dXNpb24gbGlzdCAtIGZpcnN0IHRoZSByZWxhdGl2ZSBkaXJlY3Rvcmllcw0KCQkJCWlmICggY291bnQo ICRleGNsdXNpb25zICkgPiAwICkgew0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdD YWxjdWxhdGluZyBkaXJlY3RvcmllcyB0byBleGNsdWRlIGZyb20gYmFja3VwLicsICdpdC1sMTBuLWJh Y2t1cGJ1ZGR5JykgKTsNCgkJCQkJDQoJCQkJCWZvcmVhY2ggKCAkZXhjbHVzaW9ucyBhcyAkZXhjbHVk ZSApIHsNCgkJCQkJDQoJCQkJCQlpZiAoICFzdHJzdHIoICRleGNsdWRlLCAnYmFja3VwYnVkZHlfYmFj a3VwcycgKSApIHsgLy8gU2V0IHZhcmlhYmxlIHRvIHNob3cgd2UgYXJlIGV4Y2x1ZGluZyBhZGRpdGlv bmFsIGRpcmVjdG9yaWVzIGJlc2lkZXMgYmFja3VwIGRpci4NCgkNCgkJCQkJCQkkZXhjbHVkaW5nX2Fk ZGl0aW9uYWwgPSB0cnVlOw0KCQkJCQkJCQkNCgkJCQkJCX0NCgkJCQkJCQkNCgkJCQkJCSR0aGlzLT5z dGF0dXMoICdkZXRhaWxzJywgX18oJ0V4Y2x1ZGluZycsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAn OiAnIC4gJGV4Y2x1ZGUgKTsNCgkJCQkJCQ0KCQkJCQkJJGV4Y2x1ZGVfY291bnQrKzsNCgkJCQkJCQkN CgkJCQkJfQ0KCQkJCQkNCgkJCQl9DQoJCQkJDQoJCQkJDQoJCQkJaWYgKCAkZXhjbHVkaW5nX2FkZGl0 aW9uYWwgPT09IHRydWUgKSB7DQoJCQkJDQoJCQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgX18o ICdFeGNsdWRpbmcgYXJjaGl2ZXMgZGlyZWN0b3J5IGFuZCBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIGRl ZmluZWQgaW4gc2V0dGluZ3MuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgLiAnICcgLiAkZXhjbHVk ZV9jb3VudCAuICcgJyAuIF9fKCAndG90YWwnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSAuICcuJyAp Ow0KCQkJCQkNCgkJCQl9IGVsc2Ugew0KCQkJCQ0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScs IF9fKCAnT25seSBleGNsdWRpbmcgYXJjaGl2ZXMgZGlyZWN0b3J5IGJhc2VkIG9uIHNldHRpbmdzLics ICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApIC4gJyAnIC4gJGV4Y2x1ZGVfY291bnQgLiAnICcgLiBfXygg J3RvdGFsJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgLiAnLicgKTsNCgkJCQkJDQoJCQkJfQ0KCQkJ CQ0KCQkJCS8vIE5vdyBnZXQgdGhlIGxpc3QgZnJvbSB0aGUgdG9wIG5vZGUNCgkJCQkkdGhlX2xpc3Qg PSAkbGlzdG1ha2VyLT5nZXRfdGVybWluYWxzKCk7DQoJCQkJDQoJCQkJLy8gUmV0YWluIHRoaXMgZm9y IHJlZmVyZW5jZSBmb3Igbm93DQoJCQkJZmlsZV9wdXRfY29udGVudHMoICggZGlybmFtZSggJHRlbXBk aXIgKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBzZWxmOjpaSVBfQ09OVEVOVF9GSUxFX05BTUUgKSwg cHJpbnRfciggJHRoZV9saXN0LCB0cnVlICkgKTsNCgkJCQ0KCQkJfSBlbHNlIHsNCgkJDQoJCQkJLy8g V2UgZG9uJ3QgaGF2ZSB0aGUgaW5jbHVzaW9uIGxpc3Qgc28gd2UgYXJlIG5vdCBvZmZlcmluZyBleGNs dXNpb25zDQoJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCBfXygnV0FSTklORzogRGlyZWN0b3J5 L2ZpbGUgZXhjbHVzaW9uIHVuYXZhaWxhYmxlIGluIENvbXBhdGliaWxpdHkgTW9kZS4gRXZlbiBleGlz dGluZyBvbGQgYmFja3VwcyB3aWxsIGJlIGJhY2tlZCB1cC4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScp ICk7DQoJCQkJJHRoZV9saXN0ID0gYXJyYXkoICRkaXIgKTsNCgkJCQ0KCQkJfQ0KCQkNCgkJCS8vIEdl dCBzdGFydGVkIHdpdGggb3V0IHppcCBvYmplY3QNCgkJCS8vIFB1dCBvdXIgZmluYWwgemlwIGZpbGUg aW4gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgLSBpdCB3aWxsIGJlIG1vdmVkIGxhdGVyDQoJCQkkdGVt cF96aXAgPSAkdGVtcGRpciAuIGJhc2VuYW1lKCAkemlwICk7CQkNCgkJCSRwY2x6aXAgPSBuZXcgUGNs WmlwKCAkdGVtcF96aXAgKTsNCgkJCQ0KCQkJaWYgKCAkY29tcHJlc3Npb24gIT09IHRydWUgKSB7DQoJ CQkNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdDb21wcmVzc2lvbiBkaXNhYmxlZCBi YXNlZCBvbiBzZXR0aW5ncy4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkJJGFyZ3VtZW50 cyA9IGFycmF5KCAkdGhlX2xpc3QsIFBDTFpJUF9PUFRfTk9fQ09NUFJFU1NJT04sIFBDTFpJUF9PUFRf UkVNT1ZFX1BBVEgsICRkaXIgKTsNCgkJCQkNCgkJCX0gZWxzZSB7DQoNCgkJCQkkYXJndW1lbnRzID0g YXJyYXkoICR0aGVfbGlzdCwgUENMWklQX09QVF9SRU1PVkVfUEFUSCwgJGRpciApOw0KDQoJCQl9DQoJ CQkNCgkJCWlmICggZmlsZV9leGlzdHMoICR6aXAgKSApIHsNCg0KCQkJCSR0aGlzLT5zdGF0dXMoICdk ZXRhaWxzJywgX18oJ0V4aXN0aW5nIFpJUCBBcmNoaXZlIGZpbGUgd2lsbCBiZSByZXBsYWNlZC4nLCAn aXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkJdW5saW5rKCAkemlwICk7DQoNCgkJCX0NCgkJCQ0K CQkJLy8gTm93IGFjdHVhbGx5IGNyZWF0ZSB0aGUgemlwIGFyY2hpdmUgZmlsZQ0KCQkJJHRoaXMtPnN0 YXR1cyggJ2RldGFpbHMnLCAkdGhpcy0+Z2V0X21ldGhvZF90YWcoKSAuIF9fKCAnIGNvbW1tYW5kIGFy Z3VtZW50cycsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAnOiAnIC4gaW1wbG9kZSggJzsnLCAkYXJn dW1lbnRzICkgKTsNCgkJCQ0KCQkJJHJldHZhbCA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KCBhcnJheSgg JiRwY2x6aXAsICdjcmVhdGUnICksICRhcmd1bWVudHMgKTsNCgkJCQ0KCQkJLy8gV29yayBvdXQgd2hl dGhlciB3ZSBoYXZlIGEgcHJvYmxlbSBvciBub3QNCgkJCWlmICggaXNfYXJyYXkoICRyZXR2YWwgKSAp IHsNCgkJCQ0KCQkJCS8vIEl0J3MgYW4gYXJyYXkgc28gYSBnb29kIHJlc3VsdA0KCQkJCSRleGl0Y29k ZSA9IDA7DQoJCQkNCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQkvLyBOb3QgYW4gYXJyYXkgc28gYSBiYWQg ZXJyb3IgY29kZQ0KCQkJCSRleGl0Y29kZSA9ICRwY2x6aXAtPmVycm9yQ29kZSgpOw0KCQkJDQoJCQl9 DQoJCQkNCgkJCS8vIENvbnZlbmllbmNlIGZvciBoYW5kbGluZyBkaWZmZXJlbnQgc2NhbmFyaW9zDQoJ CQkkcmVzdWx0ID0gZmFsc2U7DQoJCQkNCgkJCS8vIFNlZSBpZiB3ZSBjYW4gZmlndXJlIG91dCB3aGF0

IGhhcHBlbmVkIC0gbm90ZSB0aGF0ICRleGl0Y29kZSBjb3VsZCBiZSBub24temVybyBmb3IgYSB3YXJu aW5nIG9yIGVycm9yDQoJCQlpZiAoICggISBmaWxlX2V4aXN0cyggJHRlbXBfemlwICkgKSB8fCAoICRl eGl0Y29kZSAhPSAwICkgKSB7DQoJCQkNCgkJCQkvLyBJZiB3ZSBoYWQgYSBub24temVybyBleGl0IGNv ZGUgdGhlbiBzaG91bGQgcmVwb3J0IGl0IChmaWxlIG1heSBvciBtYXkgbm90IGJlIGNyZWF0ZWQpDQoJ CQkJaWYgKCAkZXhpdGNvZGUgIT0gMCApIHsNCgkJCQkNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFp bHMnLCBfXygnWmlwIHByb2Nlc3MgZXhpdCBjb2RlOiAnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSAu ICRleGl0Y29kZSApOw0KCQkJCQkNCgkJCQl9DQoNCgkJCQkvLyBSZXBvcnQgd2hldGhlciBvciBub3Qg dGhlIHppcCBmaWxlIHdhcyBjcmVhdGVkCQkJCQ0KCQkJCWlmICggISBmaWxlX2V4aXN0cyggJHRlbXBf emlwICkgKSB7DQoJCQkJDQoJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oICdaaXAgQXJj aGl2ZSBmaWxlIG5vdCBjcmVhdGVkIC0gY2hlY2sgcHJvY2VzcyBleGl0IGNvZGUuJywgJ2l0LWwxMG4t YmFja3VwYnVkZHknICkgKTsNCgkJCQkJDQoJCQkJfSBlbHNlIHsNCgkJCQkJDQoJCQkJCSR0aGlzLT5z dGF0dXMoICdkZXRhaWxzJywgX18oICdaaXAgQXJjaGl2ZSBmaWxlIGNyZWF0ZWQgLSBjaGVjayBwcm9j ZXNzIGV4aXQgY29kZS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSApOw0KDQoJCQkJfQ0KCQkJCQ0K CQkJCS8vIFB1dCB0aGUgZXJyb3IgaW5mb3JtYXRpb24gaW50byBhbiBhcnJheSBmb3IgY29uc2lzdGVu Y3kNCgkJCQkkemlwX291dHB1dFtdID0gJHBjbHppcC0+ZXJyb3JJbmZvKCB0cnVlICk7DQoJCQkJDQoJ CQkJLy8gTm93IHdlIGRvbid0IG1vdmUgaXQgKGJlY2F1c2UgZWl0aGVyIGl0IGRvZXNuJ3QgZXhpc3Qg b3IgbWF5IGJlIGluY29tcGxldGUpIGJ1dCB3ZSdsbCBzaG93IGFueSBlcnJvci93YXJ0bmluZyBvdXRw dXQNCgkJCQlpZiAoICFlbXB0eSggJHppcF9vdXRwdXQgKSApIHsNCgkJCQkNCgkJCQkJLy8gQXNzdW1l IHdlIGRvbid0IGhhdmUgYSBsb3Qgb2YgbGluZXMgZm9yIG5vdyAtIGNvdWxkIGJlIHJpc2t5IGFzc3Vt cHRpb24hDQoJCQkJCWZvcmVhY2ggKCAkemlwX291dHB1dCBhcyAkbGluZSApIHsNCgkJCQkJDQoJCQkJ CQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCAnWmlwIHByb2Nlc3MgcmVwb3J0ZWQ6ICcsICdp dC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAkbGluZSApOw0KCQkJCQkNCgkJCQkJfQ0KCQkJCQ0KCQkJCX0N CgkJCQkNCgkJCQkkcmVzdWx0ID0gZmFsc2U7DQoJCQkJDQoJCQl9IGVsc2Ugew0KCQkJDQoJCQkJLy8g R290IGZpbGUgd2l0aCBubyBlcnJvciBvciB3YXJuaW5ncyBhdCBhbGwgc28ganVzdCBtb3ZlIGl0IHRv IHRoZSBsb2NhbCBhcmNoaXZlDQoJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnTW92aW5n IFppcCBBcmNoaXZlIGZpbGUgdG8gbG9jYWwgYXJjaGl2ZSBkaXJlY3RvcnkuJywgJ2l0LWwxMG4tYmFj a3VwYnVkZHknKSApOw0KCQkJCQ0KCQkJCXJlbmFtZSggJHRlbXBfemlwLCAkemlwICk7DQoJCQkJaWYg KCBmaWxlX2V4aXN0cyggJHppcCApICkgew0KCQkJCQ0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWls cycsIF9fKCdaaXAgQXJjaGl2ZSBmaWxlIG1vdmVkIHRvIGxvY2FsIGFyY2hpdmUgZGlyZWN0b3J5Lics ICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCBf XyggJ1ppcCBBcmNoaXZlIGZpbGUgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgd2l0aCBubyBlcnJvcnMgb3Ig d2FybmluZ3MuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgKTsNCgkJCQkJJHJlc3VsdCA9IHRydWU7 DQoJCQkJCQ0KCQkJCX0gZWxzZSB7DQoJCQkJDQoJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywg X18oJ1ppcCBBcmNoaXZlIGZpbGUgY291bGQgbm90IGJlIG1vdmVkIHRvIGxvY2FsIGFyY2hpdmUgZGly ZWN0b3J5LicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCQkJJHJlc3VsdCA9IGZhbHNlOw0K CQkJCQkNCgkJCQl9DQoJCQkJCQkJCQ0KCQkJfQkJCQ0KDQoJCQkvLyBDbGVhbnVwIHRoZSB0ZW1wb3Jh cnkgZGlyZWN0b3J5IHRoYXQgd2lsbCBoYXZlIGFsbCBkZXRyaXR1cyBhbmQgbWF5YmUgaW5jb21wbGV0 ZSB6aXAgZmlsZQkJCQ0KCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnUmVtb3ZpbmcgdGVt cG9yYXJ5IGRpcmVjdG9yeS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkNCgkJCWlmICgg ISggJHRoaXMtPmRlbGV0ZV9kaXJlY3RvcnlfcmVjdXJzaXZlKCAkdGVtcGRpciApICkgKSB7DQoJCQkN CgkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnVGVtcG9yYXJ5IGRpcmVjdG9yeSBjb3Vs ZCBub3QgYmUgZGVsZXRlZDogJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSAuICR0ZW1wZGlyICk7DQoJ CQkNCgkJCX0NCgkJCQ0KCQkJcmV0dXJuICRyZXN1bHQ7DQoJCQkJCQkJCQkJCQkJCQkNCgkJfQ0KCQkN Cgl9IC8vIGVuZCBwbHVnaW5idWRkeV96YnppcHBjbHppcCBjbGFzcy4JDQoJDQp9DQo/Pg== ###PACKDATA,FILE_END,/lib/zipbuddy/zbzippclzip.php,importbuddy/lib/zipbuddy/zbzi ppclzip.php ###PACKDATA,FILE_START,/lib/zipbuddy/zbzipproc.php,importbuddy/lib/zipbuddy/zbzi pproc.php PD9waHANCi8qKg0KICoJcGx1Z2luYnVkZHlfemJ6aXBwcm9jIENsYXNzDQogKg0KICogIEV4dGVuZHMg dGhlIHppcCBjYXBhYmlsaXR5IGNvcmUgY2xhc3Mgd2l0aCBwcm9jIHNwZWNpZmljIGNhcGFiaWxpdHkN CiAqCQ0KICoJVmVyc2lvbjogMS4wLjANCiAqCUF1dGhvcjoNCiAqCUF1dGhvciBVUkk6DQogKg0KICoJ QHBhcmFtCQkkcGFyZW50CQlvYmplY3QJCU9wdGlvbmFsIHBhcmVudCBvYmplY3Qgd2hpY2ggY2FuIHBy b3ZpZGUgZnVuY3Rpb25zIGZvciByZXBvcnRpbmcsIGV0Yy4NCiAqCUByZXR1cm4JCW51bGwNCiAqDQog Ki8NCmlmICggIWNsYXNzX2V4aXN0cyggInBsdWdpbmJ1ZGR5X3piemlwcHJvYyIgKSApIHsNCg0KCWNs YXNzIHBsdWdpbmJ1ZGR5X3piemlwcHJvYyBleHRlbmRzIHBsdWdpbmJ1ZGR5X3piemlwY29yZSB7DQoJ DQoJCWNvbnN0IFpJUF9MT0dfRklMRV9OQU1FID0gJ3RlbXBfemlwX3Byb2NfbG9nLnR4dCc7DQoJCWNv bnN0IFpJUF9FUlJPUl9GSUxFX05BTUUgPSAnbGFzdF9wcm9jX2Vycm9ycy50eHQnOw0KCQ0KICAgICAg ICAvKioNCiAgICAgICAgICogbWV0aG9kIHRhZyB1c2VkIHRvIHJlZmVyIHRvIHRoZSBtZXRob2QgYW5k IGVudGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdCBzdWNoIGFzIGNsYXNzIG5hbWUNCiAgICAgICAgICog DQogICAgICAgICAqIEB2YXIgc3RyaW5nDQogICAgICAgICAqLw0KCQlwdWJsaWMgc3RhdGljICRfbWV0

aG9kX3RhZyA9ICdwcm9jJzsNCgkJCQ0KCQ0KICAgICAgICAvKioNCiAgICAgICAgICogVGhpcyB0ZWxs cyB1cyB3aGV0aGVyIHRoaXMgbWV0aG9kIGlzIHJlZ2FyZGVkIGFzIGEgImNvbXBhdGliaWxpdHkiIG1l dGhvZA0KICAgICAgICAgKiANCiAgICAgICAgICogQHZhciBib29sDQogICAgICAgICAqLw0KCQlwdWJs aWMgc3RhdGljICRfaXNfY29tcGF0aWJpbGl0eV9tZXRob2QgPSBmYWxzZTsNCgkJCQ0KCQkvKioNCgkJ ICoJX19jb25zdHJ1Y3QoKQ0KCQkgKgkNCgkJICoJRGVmYXVsdCBjb25zdHJ1Y3Rvci4NCgkJICoJDQoJ CSAqCUBwYXJhbQkJcmVmZXJlbmNlCSYkcGFyZW50CQlbb3B0aW9uYWxdIFJlZmVyZW5jZSB0byB0aGUg b2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXR1cygpIGZ1bmN0aW9uIGZvciBzdGF0dXMgdXBkYXRlcy4N CgkJICoJQHJldHVybgkJbnVsbA0KCQkgKg0KCQkgKi8NCgkJcHVibGljIGZ1bmN0aW9uIF9fY29uc3Ry dWN0KCAmJHBhcmVudCA9IE5VTEwgKSB7DQoNCgkJCXBhcmVudDo6X19jb25zdHJ1Y3QoICRwYXJlbnQg KTsNCgkJCQ0KCQkJLy8gRGVmaW5lIHRoZSBpbml0aWFsIGRlZmF1bHQgZGV0YWlscw0KCQkJJHRoaXMt Pl9tZXRob2RfZGV0YWlsc1sgJ2F0dHInIF0gPSBhcnJheSggJ25hbWUnID0+ICdQcm9jIE1ldGhvZCcs ICdjb21wYXRpYmlsaXR5JyA9PiBwbHVnaW5idWRkeV96YnppcHByb2M6OiRfaXNfY29tcGF0aWJpbGl0 eV9tZXRob2QgKTsNCgkJCSR0aGlzLT5fbWV0aG9kX2RldGFpbHNbICdwYXJhbScgXSA9IGFycmF5KCAn cGF0aCcgPT4gJycgKTsNCgkJCQ0KCQl9DQoJCQ0KCQkvKioNCgkJICoJX19kZXN0cnVjdCgpDQoJCSAq CQ0KCQkgKglEZWZhdWx0IGRlc3RydWN0b3IuDQoJCSAqCQ0KCQkgKglAcmV0dXJuCQludWxsDQoJCSAq DQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCggKSB7DQoJCQ0KCQkJcGFyZW50Ojpf X2Rlc3RydWN0KCk7DQoNCgkJfQ0KCQkNCgkJLyoqDQoJCSAqCWdldF9tZXRob2RfdGFnKCkNCgkJICoJ DQoJCSAqCVJldHVybnMgdGhlIChzdGF0aWMpIG1ldGhvZCB0YWcNCgkJICoJDQoJCSAqCUByZXR1cm4J CXN0cmluZyBUaGUgbWV0aG9kIHRhZw0KCQkgKg0KCQkgKi8NCgkJcHVibGljIGZ1bmN0aW9uIGdldF9t ZXRob2RfdGFnKCkgew0KCQkNCgkJCXJldHVybiBwbHVnaW5idWRkeV96YnppcHByb2M6OiRfbWV0aG9k X3RhZzsNCgkJCQ0KCQl9DQoJCQ0KCQkvKioNCgkJICoJZ2V0X2lzX2NvbXBhdGliaWxpdHlfbWV0aG9k KCkNCgkJICoJDQoJCSAqCVJldHVybnMgdGhlIChzdGF0aWMpIGlzX2NvbXBhdGliaWxpdHlfbWV0aG9k IGJvb2xlYW4NCgkJICoJDQoJCSAqCUByZXR1cm4JCWJvb2wNCgkJICoNCgkJICovDQoJCXB1YmxpYyBm dW5jdGlvbiBnZXRfaXNfY29tcGF0aWJpbGl0eV9tZXRob2QoKSB7DQoJCQ0KCQkJcmV0dXJuIHBsdWdp bmJ1ZGR5X3piemlwcHJvYzo6JF9pc19jb21wYXRpYmlsaXR5X21ldGhvZDsNCgkJCQ0KCQl9DQoJCQ0K CQkvKioNCgkJICoJaXNfYXZhaWxhYmxlKCkNCgkJICoJDQoJCSAqCUEgZnVuY3Rpb24gdGhhdCB0ZXN0 cyBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgc3BlY2lmaWMgbWV0aG9kIGluIHRoZSByZXF1ZXN0 ZWQgbW9kZQ0KCQkgKgkNCgkJICoJQHBhcmFtZQlzdHJpbmcJJHRlbXBkaXIJVGVtcG9yYXJ5IGRpcmVj dG9yeSB0byB1c2UgZm9yIGFueSB0ZXN0IGZpbGVzDQoJCSAqCUBwYXJhbQlzdHJpbmcJJG1vZGUJCU1l dGhvZCBtb2RlIHRvIHRlc3QgZm9yDQoJCSAqCUBwYXJhbQlhcnJheQkkc3RhdHVzCQlBcnJheSBmb3Ig YW55IHN0YXR1cyBtZXNzYWdlcw0KCQkgKglAcmV0dXJuCWJvb2wJCQkJVHJ1ZSBpZiB0aGUgbWV0aG9k L21vZGUgY29tYmluYXRpb24gaXMgYXZhaWxhYmxlLCBmYWxzZSBvdGhlcndpc2UNCgkJICoNCgkJICov DQoJCXB1YmxpYyBmdW5jdGlvbiBpc19hdmFpbGFibGUoICR0ZW1wZGlyLCAkbW9kZSwgJiRzdGF0dXMg KSB7DQoJCQ0KCQkJJHJlc3VsdCA9IGZhbHNlOw0KCQkJJGV4aXRjb2RlID0gMDsNCgkJCSRmb3VuZF96 aXAgPSBmYWxzZTsNCgkJCSRwc3RhdHVzID0gYXJyYXkoKTsNCgkJCQ0KCQkJaWYgKCBzdHJpc3RyKCBQ SFBfT1MsICdXSU4nICkgJiYgIXN0cmlzdHIoIFBIUF9PUywgJ0RBUldJTicgKSApIHsgLy8gUnVubmlu ZyBXaW5kb3dzLiAobm90IGRhcndpbikNCg0KCQkJCSRzdGF0dXNbXSA9IF9fKCdwcm9jX29wZW4gdGVz dCBGQUlMRUQ6IE1ldGhvZCBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MuJywgJ2l0LWwxMG4tYmFja3Vw YnVkZHknKTsNCgkJCQkkcmVzdWx0ID0gZmFsc2U7DQoJCQkNCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQlp ZiAoIGZ1bmN0aW9uX2V4aXN0cyggJ3Byb2Nfb3BlbicgKSAmJiBmdW5jdGlvbl9leGlzdHMoICdwcm9j X2Nsb3NlJyApICYmDQoJCQkJCSBmdW5jdGlvbl9leGlzdHMoICdwcm9jX2dldF9zdGF0dXMnICkgJiYg ZnVuY3Rpb25fZXhpc3RzKCAncHJvY190ZXJtaW5hdGUnICkgKSB7DQoJCQkJCSANCgkJCQkJJGNhbmRp ZGF0ZV9wYXRocyA9ICR0aGlzLT5fZXhlY3V0YWJsZV9wYXRoczsNCgkJCQkJDQoJCQkJCS8vIFdlIGFy ZSBzZWFyY2hpbmcgZm9yIHppcCB1c2luZyB0aGUgbGlzdCBvZiBwb3NzaWJsZSBwYXRocw0KCQkJCQl3 aGlsZSAoICggZmFsc2UgPT0gJGZvdW5kX3ppcCApICYmICggIWVtcHR5KCAkY2FuZGlkYXRlX3BhdGhz ICkgKSApIHsNCgkJCQkJDQoJCQkJCQkkcGF0aCA9IGFycmF5X3NoaWZ0KCAkY2FuZGlkYXRlX3BhdGhz ICk7DQoJCQkJCQkkc3RhdHVzW10gPSBfXyggJ1RyeWluZyBleGVjdXRhYmxlIHBhdGggZm9yIHppcDon LCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSAuICcgYCcgLiAkcGF0aCAuICdgLic7DQoJDQoJCQkJCQkk dGVzdF9maWxlID0gJHRlbXBkaXIgLiAndGVtcF90ZXN0XycgLiB1bmlxaWQoKSAuICcuemlwJzsNCgkJ CQkJCQ0KCQkJCQkJJGNvbW1hbmQgPSAnZXhlYyAnIC4gJHBhdGggLiAnemlwICcgLiAnICInIC4gJHRl c3RfZmlsZSAuICciICInIC4gX19GSUxFX18gLiAnIic7DQoJCQ0KCQkJCQkJJGRlc2NyaXB0b3JzcGVj ID0gYXJyYXkoDQoJCQkJCQkJMCA9PiBhcnJheSggInBpcGUiLCAiciIgKSwNCgkJCQkJCQkxID0+IGFy cmF5KCAiZmlsZSIsICIvZGV2L251bGwiLCAiYSIgKSwNCgkJCQkJCQkyID0+IGFycmF5KCAiZmlsZSIs ICIvZGV2L251bGwiLCAiYSIgKQkNCgkJCQkJCSk7DQoJCQkJCQkNCgkJCQkJCSRwcm9jZXNzID0gTlVM TDsgLy8gTWF5YmUgaXQgZG9lc24ndCB3b3JrDQoJCQkJCQkNCgkJCQkJCSRwcm9jZXNzID0gQHByb2Nf b3BlbiggJGNvbW1hbmQsICRkZXNjcmlwdG9yc3BlYywgJHBpcGVzICk7DQoJCQkJCQkNCgkJCQkJCWlm ICggaXNfcmVzb3VyY2UoICRwcm9jZXNzICkgKSB7DQoJCQkJCQkNCgkJCQkJCQlmY2xvc2UoICRwaXBl c1swXSApOyAvLyBOZXZlciB3YW50IHRvIHNlbmQgaW5wdXQgc28ganVzdCBjbG9zZSBpdA0KCQkJCQkJ CQ0KCQkJCQkJCSRwc3RhdHVzID0gcHJvY19nZXRfc3RhdHVzKCAkcHJvY2VzcyApOw0KCQkJCQkJCQ0K CQkJCQkJCS8vIE1ha2Ugc3VyZSB3ZSBvbmx5IGRvIDQgbG9vcCBtYXgNCgkJCQkJCQkkY291bnQgPSAw

Ow0KCQkJCQkJCQ0KCQkJCQkJCXdoaWxlICggdHJ1ZSA9PSAkcHN0YXR1c1sgJ3J1bm5pbmcnXSAmJiAo ICRjb3VudCsrIDwgNCApICkgew0KCQkJCQkJCQl1c2xlZXAoIDUwMDAwMCApOw0KCQkJCQkJCQkkcHN0 YXR1cyA9IHByb2NfZ2V0X3N0YXR1cyggJHByb2Nlc3MgKTsNCgkJCQkJCQl9DQoJCQkJCQkJDQoJCQkJ CQkJaWYgKCB0cnVlID09PSAkcHN0YXR1c1sgJ3J1bm5pbmcnIF0gKSB7DQoJCQkJCQkJCS8vIEhtbSwg c2hvdWxkbid0IHN0aWxsIGJlIHJ1bm5pbmcsIHRyeSB0byBraWxsIGl0IGFuZCBtb3ZlIG9uDQoJCQkJ CQkJCUBwcm9jX3Rlcm1pbmF0ZSggJHByb2Nlc3MgKTsNCgkJCQkJCQkJDQoJCQkJCQkJfSBlbHNlIHsN CgkJCQkJCQkNCgkJCQkJCQkJLy8gUHJvY2VzcyBmaW5pc2hlZCBub3JtYWxseSBzbyBnZXQgZXhpdCBj b2RlIGZvciBwb3NzaWJsZSB1c2UNCgkJCQkJCQkJJGV4aXRjb2RlID0gJHBzdGF0dXNbICdleGl0Y29k ZScgXTsNCgkJCQkJCQkJDQoJCQkJCQkJfQ0KCQkJCQkJCQ0KCQkJCQkJCS8vIElnbm9yZSBhbnkgY2xv c2UgaXNzdWUsIHNob3VsZG4ndCBnZXQgc3R1Y2sgaGVyZSBidXQgaXQgaXMgcG9zc2libGUgaWYNCgkJ CQkJCQkvLyB3ZSBwcm9jZXNzIHdhcyBzdGlsbCBydW5uaW5nIGFuZCB3ZSBmYWlsZWQgdG8gdGVybWlu YXRlIGl0IC0gdHJpY2t5IG9uZQ0KCQkJCQkJCS8vIHRvIG92ZXJjb21lIGJ1dCBfc2hvdWxkXyBiZSBy YXJlDQoJCQkJCQkJQHByb2NfY2xvc2UoICRwcm9jZXNzICk7DQoJCQkJCQkJDQoJCQkJCQkJaWYgKCBm aWxlX2V4aXN0cyggJHRlc3RfZmlsZSApICkgew0KCQkJCQkJCQ0KCQkJCQkJCQlpZiAoICF1bmxpbmso ICR0ZXN0X2ZpbGUgKSApIHsNCgkJCQkJCQkJDQoJCQkJCQkJCQkkc3RhdHVzW10gPSBzcHJpbnRmKCBf XygnRXJyb3IgIzU2NDYzOC4gVW5hYmxlIHRvIGRlbGV0ZSB0ZXN0IGZpbGUgKCVzKSEnLCAnaXQtbDEw bi1iYWNrdXBidWRkeScpLCAkdGVzdF9maWxlICk7DQoJCQkJCQkJCQkNCgkJCQkJCQkJfQ0KCQkJCQkJ CQkNCgkJCQkJCQkJJHN0YXR1c1tdID0gX18oJ1Byb2MgdGVzdCBQQVNTRUQuJywgJ2l0LWwxMG4tYmFj a3VwYnVkZHknKTsNCgkJCQkJCQkJJHJlc3VsdCA9IHRydWU7DQoJCQkJCQkJCQ0KCQkJCQkJCQkvLyBT ZXQgdGhlIHBhcmFtZXRlciB0byBiZSByZW1lbWJlcmVkDQoJCQkJCQkJCSR0aGlzLT5fbWV0aG9kX2Rl dGFpbHNbICdwYXJhbScgXVsgJ3BhdGgnIF0gPSAkcGF0aDsNCgkJCQkJCQkJDQoJCQkJCQkJCS8vIFRo aXMgd2lsbCBicmVhayB1cyBvdXQgb2YgdGhlIGxvb3ANCgkJCQkJCQkJJGZvdW5kX3ppcCA9IHRydWU7 DQoJCQkJCQkJCQ0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJDQoJCQkJCQkJCSRzdGF0dXNbXSA9IF9f KCdQcm9jIHRlc3QgRkFJTEVEOiBUZXN0IHppcCBmaWxlIG5vdCBmb3VuZC4nLCAnaXQtbDEwbi1iYWNr dXBidWRkeScpOw0KCQkJCQkJCQkkc3RhdHVzW10gPSBfXygnUHJvYyBFeGl0IENvZGU6ICcsICdpdC1s MTBuLWJhY2t1cGJ1ZGR5JykgLiAkZXhpdGNvZGU7DQoJCQkJCQkJCSRyZXN1bHQgPSBmYWxzZTsNCgkJ CQkJCQkNCgkJCQkJCQl9DQoJCQkJCQkJDQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJDQoJCQkJCQkJJHN0 YXR1c1tdID0gX18oJ1Byb2MgdGVzdCBGQUlMRUQ6IFVuYWJsZSB0byBjcmVhdGUgdGVzdCB6aXAgZmls ZSBwcm9jZXNzLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5Jyk7DQoJCQkJCQkJJHJlc3VsdCA9IGZhbHNl Ow0KCQkJCQkJDQoJCQkJCQl9DQoJCQkJCQ0KCQkJCQl9DQoJCQkJCQ0KCQkJCQlpZiAoIGZhbHNlID09 ICRmb3VuZF96aXAgKSB7DQoJCQkJCQ0KCQkJCQkJLy8gTmV2ZXIgZm91bmQgemlwIG9uIGFueSBjYW5k aWRhdGUgcGF0aA0KCQkJCQkJJHN0YXR1c1tdID0gX18oJ1Byb2MgdGVzdCBGYWlsZWQ6IFVuYWJsZSB0 byBmaW5kIHppcCBleGVjdXRhYmxlIG9uIGFueSBzcGVjaWZpZWQgcGF0aC4nLCAnaXQtbDEwbi1iYWNr dXBidWRkeScpOw0KCQkJCQkJDQoJCQkJCX0NCgkJCQkJCSAgDQoJCQkJfSBlbHNlIHsNCgkJCQkNCgkJ CQkJJHN0YXR1c1tdID0gX18oJ1Byb2MgdGVzdCBGQUlMRUQ6IE9uZSBvciBtb3JlIHJlcXVpcmVkIGZ1 bmN0aW9uIGRvIG5vdCBleGlzdC4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCQkJCQkkcmVzdWx0 ID0gZmFsc2U7DQoJCQkgIA0KCQkJCX0NCgkJICAJDQoJCSAgCX0NCgkJCQkJICAJDQoJCSAgCXJldHVy biAkcmVzdWx0Ow0KCQkgIAkNCgkJfQ0KCQkNCgkJLyoqDQoJCSAqCWNyZWF0ZSgpDQoJCSAqCQ0KCQkg KglBIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbiBhcmNoaXZlIGZpbGUNCgkJICoJQWx3YXlzIGNsZWFu cyB1cCBhZnRlciBpdHNlbGYNCgkJICoJDQoJCSAqCVRoZSAkZXhjbHVkZXMgd2lsbCBiZSBhIGxpc3Qg b3IgcmVsYXRpdmUgcGF0aCBleGNsdWRlcyBpZiB0aGUgJGxpc3RtYWtlciBvYmplY3QgaXMgTlVMTCBv dGVocndpc2UNCgkJICoJd2lsbCBiZSBhYnNvbHV0ZSBwYXRoIGV4Y2x1ZGVzIGFuZCByZWxhdGl2ZSBw YXRoIGV4Y2x1ZGVzIGNhbiBiZSBoYWQgZnJvbSB0aGUgJGxpc3RtYWtlciBvYmplY3QNCgkJICoJDQoJ CSAqCUBwYXJhbQkJc3RyaW5nCSR6aXAJCQlGdWxsIHBhdGggJiBmaWxlbmFtZSBvZiBaSVAgQXJjaGl2 ZSBmaWxlIHRvIGNyZWF0ZQ0KCQkgKglAcGFyYW0JCXN0cmluZwkkZGlyCQkJRnVsbCBwYXRoIG9mIGRp cmVjdG9yeSB0byBhZGQgdG8gWklQIEFyY2hpdmUgZmlsZQ0KCQkgKglAcGFyYW0JCWJvb2wJJGNvbXBy ZXNzaW9uCVRydWUgdG8gZW5hYmxlIGNvbXByZXNzaW9uIG9mIGZpbGVzIGFkZGVkIHRvIFpJUCBBcmNo aXZlIGZpbGUNCgkJICoJQHBhcmFtZQkJYXJyYXkJJGV4Y2x1ZGVzCQlMaXN0IG9mIGVpdGhlciBhYnNv bHV0ZSBwYXRoIGV4Y2x1c2lvbnMgb3IgcmVsYXRpdmUgZXhjbHVzaW9ucw0KCQkgKglAcGFyYW0JCXN0 cmluZwkkdGVtcGRpcgkJRnVsbCBwYXRoIG9mIGRpcmVjdG9yeSBmb3IgdGVtcG9yYXJ5IHVzYWdlDQoJ CSAqCUBwYXJhbQkJb2JqZWN0CSRsaXN0bWFrZXIJCVRoZSBvYmplY3QgZnJvbSB3aGljaCB3ZSBjYW4g Z2V0IGFuIGluY2x1c2lvbnMgbGlzdA0KCQkgKglAcmV0dXJuCQlib29sCQkJCQlUcnVlIGlmIHRoZSBj cmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlDQoJCSAqDQoJCSAqLw0KCQlwdWJs aWMgZnVuY3Rpb24gY3JlYXRlKCAkemlwLCAkZGlyLCAkY29tcHJlc3Npb24sICRleGNsdWRlcywgJHRl bXBkaXIsICRsaXN0bWFrZXIgPSBOVUxMICkgew0KCQkNCgkJCWlmICggc3RyaXN0ciggUEhQX09TLCAn V0lOJyApICYmICFzdHJpc3RyKCBQSFBfT1MsICdEQVJXSU4nICkgKSB7IC8vIFJ1bm5pbmcgV2luZG93 cy4gKG5vdCBkYXJ3aW4pDQoNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICR0aGlzLT5fbWV0 aG9kX3RhZyAuIF9fKCcgbWV0aG9kIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cy4nLCAnaXQtbDEwbi1i YWNrdXBidWRkeScpICk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJDQoJCQl9IGVsc2Ugew0KCQkJDQoJ CQkJcmV0dXJuICR0aGlzLT5jcmVhdGVfbGludXgoICR6aXAsICRkaXIsICRjb21wcmVzc2lvbiwgJGV4

Y2x1ZGVzLCAkdGVtcGRpciwgJGxpc3RtYWtlciApOw0KCQkJCQ0KCQkJfQ0KCQkJDQoJCX0NCgkJCQ0K CQkvKioNCgkJICoJY3JlYXRlX2xpbnV4KCkNCgkJICoJDQoJCSAqCUEgZnVuY3Rpb24gdGhhdCBjcmVh dGVzIGFuIGFyY2hpdmUgZmlsZSBvbiBMaW51eA0KCQkgKglBbHdheXMgY2xlYW5zIHVwIGFmdGVyIGl0 c2VsZg0KCQkgKg0KCQkgKglUaGUgJGV4Y2x1ZGVzIHdpbGwgYmUgYSBsaXN0IG9yIHJlbGF0aXZlIHBh dGggZXhjbHVkZXMgaWYgdGhlICRsaXN0bWFrZXIgb2JqZWN0IGlzIE5VTEwgb3RlaHJ3aXNlDQoJCSAq CXdpbGwgYmUgYWJzb2x1dGUgcGF0aCBleGNsdWRlcyBhbmQgcmVsYXRpdmUgcGF0aCBleGNsdWRlcyBj YW4gYmUgaGFkIGZyb20gdGhlICRsaXN0bWFrZXIgb2JqZWN0DQoJCSAqCQ0KCQkgKglAcGFyYW0JCXN0 cmluZwkkemlwCQkJRnVsbCBwYXRoICYgZmlsZW5hbWUgb2YgWklQIEFyY2hpdmUgZmlsZSB0byBjcmVh dGUNCgkJICoJQHBhcmFtCQlzdHJpbmcJJGRpcgkJCUZ1bGwgcGF0aCBvZiBkaXJlY3RvcnkgdG8gYWRk IHRvIFpJUCBBcmNoaXZlIGZpbGUNCgkJICoJQHBhcmFtCQlib29sCSRjb21wcmVzc2lvbglUcnVlIHRv IGVuYWJsZSBjb21wcmVzc2lvbiBvZiBmaWxlcyBhZGRlZCB0byBaSVAgQXJjaGl2ZSBmaWxlDQoJCSAq CUBwYXJhbWUJCWFycmF5CSRleGNsdWRlcwkJTGlzdCBvZiBlaXRoZXIgYWJzb2x1dGUgcGF0aCBleGNs dXNpb25zIG9yIHJlbGF0aXZlIGV4Y2x1c2lvbnMNCgkJICoJQHBhcmFtCQlzdHJpbmcJJHRlbXBkaXIJ CUZ1bGwgcGF0aCBvZiBkaXJlY3RvcnkgZm9yIHRlbXBvcmFyeSB1c2FnZQ0KCQkgKglAcGFyYW0JCW9i amVjdAkkbGlzdG1ha2VyCQlUaGUgb2JqZWN0IGZyb20gd2hpY2ggd2UgY2FuIGdldCBhbiBpbmNsdXNp b25zIGxpc3QNCgkJICoJQHJldHVybgkJYm9vbAkJCQkJVHJ1ZSBpZiB0aGUgY3JlYXRpb24gd2FzIHN1 Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZQ0KCQkgKg0KCQkgKi8NCgkJcHJvdGVjdGVkIGZ1bmN0aW9u IGNyZWF0ZV9saW51eCggJHppcCwgJGRpciwgJGNvbXByZXNzaW9uLCAkZXhjbHVkZXMsICR0ZW1wZGly LCAkbGlzdG1ha2VyICkgew0KCQkNCgkJCSRleGl0Y29kZSA9IDA7DQoJCQkkbGluZXMgPSBhcnJheSgp Ow0KCQkJJHppcHBhdGggPSAnJzsNCgkJCSRjb21tYW5kID0gJyc7DQoJCQkkdGVtcF96aXAgPSAnJzsN CgkJCSRleGNsdWRpbmdfYWRkaXRpb25hbCA9IGZhbHNlOw0KCQkJJGV4Y2x1ZGVfY291bnQgPSAwOw0K CQkJJGV4Y2x1c2lvbnMgPSBhcnJheSgpOw0KCQkJDQoJCQkvLyBUaGUgYmFzZWRpciBtdXN0IGhhdmUg YSB0cmFpbGluZyBkaXJlY3Rvcnkgc2VwYXJhdG9yDQoJCQkkYmFzZWRpciA9ICggcnRyaW0oIHRyaW0o ICRkaXIgKSwgRElSRUNUT1JZX1NFUEFSQVRPUiApICkgLiBESVJFQ1RPUllfU0VQQVJBVE9SOw0KCQkN CgkJCWlmICggZW1wdHkoICR0ZW1wZGlyICkgfHwgIWZpbGVfZXhpc3RzKCAkdGVtcGRpciApICkgew0K CQkJDQoJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnVGVtcG9yYXJ5IHdvcmtpbmcgZGly ZWN0b3J5IG11c3QgYmUgYXZhaWxhYmxlLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsJCQkJDQoJ CQkJcmV0dXJuIGZhbHNlOw0KCQkJCQ0KCQkJfQ0KCQkJDQoJCQkvLyBEZXRlcm1pbmUgaWYgd2UgYXJl IHVzaW5nIGFuIGFic29sdXRlIHBhdGgNCgkJCWlmICggaXNzZXQoICR0aGlzLT5fbWV0aG9kX2RldGFp bHNbICdwYXJhbScgXVsgJ3BhdGgnIF0gKSAmJiAhZW1wdHkoICR0aGlzLT5fbWV0aG9kX2RldGFpbHNb ICdwYXJhbScgXVsgJ3BhdGgnIF0gKSApIHsNCgkJCQ0KCQkJCSR6aXBwYXRoID0gdHJpbSggJHRoaXMt Pl9tZXRob2RfZGV0YWlsc1sgJ3BhcmFtJyBdWyAncGF0aCcgXSApOw0KCQkJCSR0aGlzLT5zdGF0dXMo ICdkZXRhaWxzJywgX18oICdVc2luZyBjdXN0b20gemlwIHBhdGg6ICcsICdpdC1sMTBuLWJhY2t1cGJ1 ZGR5JyApIC4gJHppcHBhdGggKTsNCgkJCQkkY29tbWFuZCA9ICR6aXBwYXRoIC4gJ3ppcCAnOw0KCQkJ CQ0KCQkJfSBlbHNlIHsNCgkJCQ0KCQkJCSRjb21tYW5kID0gJ3ppcCAnOw0KCQkJCQ0KCQkJfQ0KDQoJ CQkvLyBIYXJkY29kaW5nIHNvbWUgYWRkaXRpb25hbCBvcHRpb25zIGZvciBub3cNCgkJCSRjb21tYW5k IC49ICctcSAtciAnOw0KCQkJDQoJCQlpZiAoICRjb21wcmVzc2lvbiAhPT0gdHJ1ZSApIHsNCgkJCQ0K CQkJCSRjb21tYW5kIC49ICctMCAnOw0KCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ0Nv bXByZXNzaW9uIGRpc2FibGVkIGJhc2VkIG9uIHNldHRpbmdzLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5 JykgKTsNCgkJCQkNCgkJCX0NCgkJCQ0KCQkJaWYgKCBmaWxlX2V4aXN0cyggJHppcCApICkgew0KDQoJ CQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnRXhpc3RpbmcgWklQIEFyY2hpdmUgZmlsZSB3 aWxsIGJlIHJlcGxhY2VkLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCQl1bmxpbmsoICR6 aXAgKTsNCg0KCQkJfQ0KCQkJCQkJDQoJCQkvLyBTZXQgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byBzdG9y ZSBaSVAgd2hpbGUgaXQncyBiZWluZyBnZW5lcmF0ZWQuCQkJDQoJCQkkY29tbWFuZCAuPSAiLWIgJ3sk dGVtcGRpcn0nICI7DQoNCgkJCS8vIFB1dCBvdXIgZmluYWwgemlwIGZpbGUgaW4gdGhlIHRlbXBvcmFy eSBkaXJlY3RvcnkgLSBpdCB3aWxsIGJlIG1vdmVkIGxhdGVyDQoJCQkkdGVtcF96aXAgPSAkdGVtcGRp ciAuIGJhc2VuYW1lKCAkemlwICk7CQkNCgkJCSRjb21tYW5kIC49ICIneyR0ZW1wX3ppcH0nIC4gIjsN CgkJCQ0KCQkJLy8gTm93IHdvcmsgb3V0IGV4Y2x1c2lvbnMgZGVwZW5kZW50IG9uIHdoYXQgd2UgaGF2 ZSBiZWVuIGdpdmVuDQoJCQlpZiAoIGlzX29iamVjdCggJGxpc3RtYWtlciApICYmICggZGVmaW5lZCgg J1VTRV9FWFBFUklNRU5UQUxfWklQQlVERFlfSU5DTFVTSU9OJyApICYmICggdHJ1ZSA9PT0gVVNFX0VY UEVSSU1FTlRBTF9aSVBCVUREWV9JTkNMVVNJT04gKSApICkgew0KCQkJDQoJCQkJLy8gV2UncmUgZG9p bmcgYW4gaW5jbHVzaW9uIG9wZXJhdGlvbiwgYnV0IGZpcnN0IHdlJ2xsIGp1c3Qgc2hvdyB0aGUgZXhj bHVzaW9zbg0KCQkJCQ0KCQkJCS8vIEZvciB6aXAgd2UgbmVlZCByZWxhdGl2ZSByYXRoZXIgdGhhbiBh YnNvbHV0ZSBleGNsdXNpb24gcGF0aHMNCgkJCQkkZXhjbHVzaW9ucyA9ICRsaXN0bWFrZXItPmdldF9y ZWxhdGl2ZV9leGNsdWRlcyggJGJhc2VkaXIgKTsNCgkJCQkNCgkJCQlpZiAoIGNvdW50KCAkZXhjbHVz aW9ucyApID4gMCApIHsNCgkJCQkNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnQ2Fs Y3VsYXRpbmcgZGlyZWN0b3JpZXMgdG8gZXhjbHVkZSBmcm9tIGJhY2t1cC4nLCAnaXQtbDEwbi1iYWNr dXBidWRkeScpICk7DQoJCQkJCQ0KCQkJCQkkZXhjbHVkaW5nX2FkZGl0aW9uYWwgPSBmYWxzZTsNCgkJ CQkJJGV4Y2x1ZGVfY291bnQgPSAwOw0KCQkJCQlmb3JlYWNoICggJGV4Y2x1c2lvbnMgYXMgJGV4Y2x1 ZGUgKSB7DQoJCQkJCQ0KCQkJCQkJaWYgKCAhc3Ryc3RyKCAkZXhjbHVkZSwgJ2JhY2t1cGJ1ZGR5X2Jh

Y2t1cHMnICkgKSB7IC8vIFNldCB2YXJpYWJsZSB0byBzaG93IHdlIGFyZSBleGNsdWRpbmcgYWRkaXRp b25hbCBkaXJlY3RvcmllcyBiZXNpZGVzIGJhY2t1cCBkaXIuDQoJDQoJCQkJCQkJJGV4Y2x1ZGluZ19h ZGRpdGlvbmFsID0gdHJ1ZTsNCgkJCQkJCQkJDQoJCQkJCQl9DQoJCQkJCQkJDQoJCQkJCQkkdGhpcy0+ c3RhdHVzKCAnZGV0YWlscycsIF9fKCdFeGNsdWRpbmcnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4g JzogJyAuICRleGNsdWRlICk7DQoJCQkJCQkJCQkJCQkJDQoJCQkJCQkkZXhjbHVkZV9jb3VudCsrOw0K CQkJCQkJCQ0KCQkJCQl9DQoJCQkJCQkJCQkJCQ0KCQkJCX0NCgkJCQkNCgkJCQkvLyBHZXQgdGhlIGxp c3Qgb2YgaW5jbHVzaW9ucyB0byBwcm9jZXNzIC0gdGhlc2Ugd2lsIGJlIG5vcm1hbGl6ZWQNCgkJCQkk aW5jbHVzaW9ucyA9ICRsaXN0bWFrZXItPmdldF90ZXJtaW5hbHMoKTsNCgkJCQkNCgkJCQkvLyBGb3Ig ZWFjaCBkaXJlY3Rvcnkgd2UgbmVlZCB0byBwdXQgdGhlICJ3aWxkY2FyZCIgb24gdGhlIGVuZA0KCQkJ CWZvcmVhY2ggKCAkaW5jbHVzaW9ucyBhcyAmJGluY2x1c2lvbiApIHsNCgkJCQkNCgkJCQkJaWYgKCBp c19kaXIoICRpbmNsdXNpb24gKSApIHsNCgkJCQkJDQoJCQkJCQkkaW5jbHVzaW9uIC49IERJUkVDVE9S WV9TRVBBUkFUT1IgLiAiKiI7DQoJCQkJCX0NCgkJCQkNCgkJCQkJLy8gUmVtb3ZlIGRpcmVjdG9yeSBw YXRoIHByZWZpeCBleGNsdWRpbmcgbGVhZGluZyBzbGFzaCB0byBtYWtlIHJlbGF0aXZlIChuZWVkZWQg Zm9yIHppcCkNCgkJCQkJJGluY2x1c2lvbiA9IHN0cl9yZXBsYWNlKCBydHJpbSggJGJhc2VkaXIsIERJ UkVDVE9SWV9TRVBBUkFUT1IgKSwgJycsICRpbmNsdXNpb24gKTsNCgkJCQkJCQkJCQ0KCQkJCX0NCgkJ CQkNCgkJCQkvLyBOb3cgY3JlYXRlIHRoZSBpbmNsdXNpb25zIGZpbGUgaW4gdGhlIHRlbXBkaXINCgkJ CQkNCgkJCQkvLyBBbmQgdXBkYXRlIHRoZSBjb21tYW5kIG9wdGlvbnMNCgkJCQkkaWZpbGUgPSBkaXJu YW1lKCAkdGVtcGRpciApIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdpbmNsdXNpb25zX2ZpbGUudHh0 JzsNCgkJCQlpZiAoIGZpbGVfZXhpc3RzKCAkaWZpbGUgKSApIHsNCgkJCQkNCgkJCQkJQHVubGluaygg JGlmaWxlICk7DQoJCQkJDQoJCQkJfQ0KCQkJCQ0KCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCAkaWZpbGUs IGltcGxvZGUoIFBIUF9FT0wsICRpbmNsdXNpb25zICkgLiBQSFBfRU9MIC4gUEhQX0VPTCApOw0KCQkJ CQ0KCQkJCSRjb21tYW5kIC49ICItaUAiIC4gJGlmaWxlIC4gIiAiOw0KCQkJDQoJCQl9IGVsc2Ugew0K CQkJDQoJCQkJLy8gV2UncmUgZG9pbmcgYW4gZXhjbHVzaW9uIG9wZXJhdGlvbg0KCQkJDQoJCQkJJGNv bW1hbmQgLj0gIi1pICcqJyAiOw0KDQoJCQkJLy8gU2luY2Ugd2UgaGFkIG5vICRsaXN0bWFrZXIgb2Jq ZWN0IG9yIG5vdCB1c2luZyBpdCBnZXQgdGhlIHN0YW5kYXJkIHJlbGF0aXZlIGV4Y2x1ZGVzIHRvIHBy b2Nlc3MNCgkJCQkkZXhjbHVzaW9ucyA9ICRleGNsdWRlczsNCgkJCQkNCgkJCQlpZiAoIGNvdW50KCAk ZXhjbHVzaW9ucyApID4gMCApIHsNCgkJCQkNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBf XygnQ2FsY3VsYXRpbmcgZGlyZWN0b3JpZXMgdG8gZXhjbHVkZSBmcm9tIGJhY2t1cC4nLCAnaXQtbDEw bi1iYWNrdXBidWRkeScpICk7DQoJCQkJCSRjb21tYW5kIC49ICcteCAnOw0KCQkJCQkNCgkJCQkJJGV4 Y2x1ZGluZ19hZGRpdGlvbmFsID0gZmFsc2U7DQoJCQkJCSRleGNsdWRlX2NvdW50ID0gMDsNCgkJCQkJ Zm9yZWFjaCAoICRleGNsdXNpb25zIGFzICRleGNsdWRlICkgew0KCQkJCQkNCgkJCQkJCWlmICggIXN0 cnN0ciggJGV4Y2x1ZGUsICdiYWNrdXBidWRkeV9iYWNrdXBzJyApICkgeyAvLyBTZXQgdmFyaWFibGUg dG8gc2hvdyB3ZSBhcmUgZXhjbHVkaW5nIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgYmVzaWRlcyBiYWNr dXAgZGlyLg0KCQ0KCQkJCQkJCSRleGNsdWRpbmdfYWRkaXRpb25hbCA9IHRydWU7DQoJCQkJCQkJCQ0K CQkJCQkJfQ0KCQkJCQkJCQ0KCQkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnRXhjbHVk aW5nJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSAuICc6ICcgLiAkZXhjbHVkZSApOw0KCQkJCQkJDQoJ CQkJCQlpZiAoIHN1YnN0ciggJGV4Y2x1ZGUsIC0xLCAxKSA9PSBESVJFQ1RPUllfU0VQQVJBVE9SICkg ew0KCQkJCQkJDQoJCQkJCQkJLy8gSXQncyBhIGRpcmVjdG9yeSBzbyBhcHBlbmQgYSB3aWxkY2FyZA0K CQkJCQkJCSRjb21tYW5kIC49ICIneyRleGNsdWRlfSonICI7DQoJCQkJCQkJDQoJCQkJCQl9IGVsc2Ug ew0KCQkJCQkJDQoJCQkJCQkJLy8gSXQncyBhIGZpbGUgc28gbm8gd2lsZGNhcmQNCgkJCQkJCQkkY29t bWFuZCAuPSAiJ3skZXhjbHVkZX0nICI7DQoJCQkJCQkNCgkJCQkJCX0NCgkJCQkJCQkNCgkJCQkJCSRl eGNsdWRlX2NvdW50Kys7DQoJCQkJCQkJDQoJCQkJCX0NCgkJCQkJCQkJCQkNCgkJCQl9DQoJCQkJDQoJ CQl9DQoJCQkJCQkNCgkJCWlmICggJGV4Y2x1ZGluZ19hZGRpdGlvbmFsID09PSB0cnVlICkgew0KCQkJ DQoJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCBfXyggJ0V4Y2x1ZGluZyBhcmNoaXZlcyBkaXJl Y3RvcnkgYW5kIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgZGVmaW5lZCBpbiBzZXR0aW5ncy4nLCAnaXQt bDEwbi1iYWNrdXBidWRkeScgKSAuICcgJyAuICRleGNsdWRlX2NvdW50IC4gJyAnIC4gX18oICd0b3Rh bCcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApIC4gJy4nICk7DQoJCQkJDQoJCQl9IGVsc2Ugew0KCQkJ DQoJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCBfXyggJ09ubHkgZXhjbHVkaW5nIGFyY2hpdmVz IGRpcmVjdG9yeSBiYXNlZCBvbiBzZXR0aW5ncy4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSAuICcg JyAuICRleGNsdWRlX2NvdW50IC4gJyAnIC4gX18oICd0b3RhbCcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5 JyApIC4gJy4nICk7DQoJCQkJDQoJCQl9DQoJCQkJCQkNCgkJCS8vIFJlbWVtYmVyIHRoZSBjdXJyZW50 IGRpcmVjdG9yeSBhbmQgY2hhbmdlIHRvIHRoZSBkaXJlY3RvcnkgYmVpbmcgYWRkZWQgc28gdGhhdCAi LiIgaXMgdmFsaWQgaW4gY29tbWFuZA0KCQkJJHdvcmtpbmdfZGlyID0gZ2V0Y3dkKCk7DQoJCQljaGRp ciggJGRpciApOw0KCQkJDQoJCQkvLyBFeGVjdXRlIFpJUCBjb21tYW5kIC0gd2UgZG9uJ3QgY2FyZSBh IGFib3V0IFdpbmRvd3MgaGVyZSBiZWNhdXNlIHRoaXMgbWV0aG9kIGlzbid0IHN1cHBvcnRlZCB5ZXQN CgkJCS8vIFByZXBlbmQgImV4ZWMiIHNvIHRoYXQgc3Bhd25lZCBwcm9jZXNzIGJlY29tZXMgdGhlIGFj dHVhbCB6aXAgcHJvY2Vzcw0KCQkJJGNvbW1hbmQgPSAnZXhlYyAnIC4gJGNvbW1hbmQ7DQoJCQkkdGhp cy0+c3RhdHVzKCAnZGV0YWlscycsICR0aGlzLT5nZXRfbWV0aG9kX3RhZygpIC4gX18oJyBjb21tYW5k IChMaW51eCknLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4gJzogJyAuICRjb21tYW5kICk7DQoJCQkN CgkJCS8vIFNldCBzdGRpbiB0byBiZSBhIHBpcGUgdGhhdCB3ZSdsbCBjbG9zZSBpbW1lZGlhdGVseSBh

bnl3YXkNCgkJCS8vIFNlbmQgc3RkaW91dCBhbmQgc3RkZXJyIHRvIGEgZmlsZSBpbiB0aGUgdGVtcG9y YXJ5IGRpcmVjdG9yeSB0aGF0IHdlIGNvdWxkIGFjY2Vzcw0KCQkJLy8gQWN0dWFsbHkgaGF2ZSB0byBw dXQgaW4gdGhlIHBhcmVudCBkaXJlY3RvcnkgYmVjYXVzZSBjdXJyZW50bHkgdGhlIGFqYXggbW9uaXRv ciBmdW5jdGlvbiBvbmx5IGV4cGVjdHMNCgkJCS8vIGEgc2luZ2xlIGZpbGUgaW4gdGhlIHRlbXBvcmFy eSBkaXJlY3RvcnksIHRoYXQgYmVpbmcgdGhlIHppcCBmaWxlIGFzIGl0IGlzIGNyZWF0ZWQgb3IgZmlu YWxpemVkDQoJCQkkZGVzY3JpcHRvcnNwZWMgPSBhcnJheSgNCgkJCQkwID0+IGFycmF5KCAicGlwZSIs ICJyIiApLA0KCQkJCTEgPT4gYXJyYXkoICJmaWxlIiwgZGlybmFtZSggJHRlbXBkaXIgKSAuIERJUkVD VE9SWV9TRVBBUkFUT1IgLiBzZWxmOjpaSVBfTE9HX0ZJTEVfTkFNRSwgInciICksDQoJCQkJMiA9PiBh cnJheSggImZpbGUiLCBkaXJuYW1lKCAkdGVtcGRpciApIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIHNl bGY6OlpJUF9MT0dfRklMRV9OQU1FLCAidyIgKQkNCgkJCSk7DQoJCQkNCgkJCSRwcm9jZXNzID0gcHJv Y19vcGVuKCAkY29tbWFuZCwgJGRlc2NyaXB0b3JzcGVjLCAkcGlwZXMgKTsNCgkJCQ0KCQkJaWYgKCBp c19yZXNvdXJjZSggJHByb2Nlc3MgKSApIHsNCgkJCQ0KCQkJCWZjbG9zZSggJHBpcGVzWyAwIF0gKTsg Ly8gTmV2ZXIgd2FudCB0byBzZW5kIGlucHV0IHNvIGp1c3QgY2xvc2UgaXQNCgkJCQkNCgkJCQkkc3Rh dHVzID0gcHJvY19nZXRfc3RhdHVzKCAkcHJvY2VzcyApOw0KCQkJCQ0KCQkJCXdoaWxlICggdHJ1ZSA9 PSAkc3RhdHVzWyAncnVubmluZyddICkgew0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9f KCdaaXAgQXJjaGl2ZSBmaWxlIGNyZWF0aW9uIGluIHByb2dyZXNzLicsICdpdC1sMTBuLWJhY2t1cGJ1 ZGR5JyApICk7DQoJCQkJCXNsZWVwKDUpOw0KCQkJCQkkc3RhdHVzID0gcHJvY19nZXRfc3RhdHVzKCAk cHJvY2VzcyApOw0KCQkJCQkNCgkJCQkJLy8gQ291bGQgYWxzbyBjaGVjayBmb3IgcGVyc2lzdGVudCBm aW5hbCB6aXAgZmlsZSAoaS5lLiwgcHJlc2VudCBvdmVyIHR3byBsb29wcykNCgkJCQkJLy8gd2hpY2gg bWlnaHQgbWVhbiB3ZSBhcmUgc29tZWhvdyBub3Qgc2VlaW5nIHRoZSBwcm9jZXNzIGFzIGZpbmlzaGVk IHNvIHdlIHNob3VsZA0KCQkJCQkvLyB0ZXJtaW5hdGUgaXQgYW5kIGNsb3NlIGl0IC0gYW5kIGluZGlj YXRlIHNvbWUgZmFpbHVyZQ0KCQkJCX0NCgkJCQkNCgkJCQkkZXhpdGNvZGUgPSAkc3RhdHVzWyAnZXhp dGNvZGUnIF07DQoJCQkJDQoJCQkJcHJvY19jbG9zZSggJHByb2Nlc3MgKTsNCgkJCQkNCgkJCX0gZWxz ZSB7DQoJCQkNCgkJCQkvLyBNdXN0IGNsZWFuIHVwIHRlbXBvcmFyeSBkaXJlY3RvcnkNCgkJCQ0KCQkJ CSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ0ZhaWxlZCB0byBjcmVhdGUgWmlwIHByb2Nlc3M6 ICcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApICk7DQoJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMn LCBfXygnUmVtb3ZpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScp ICk7DQoJCQkJDQoJCQkJaWYgKCAhKCAkdGhpcy0+ZGVsZXRlX2RpcmVjdG9yeV9yZXN1cnNpdmUoICR0 ZW1wZGlyICkgKSApIHsNCgkJCQkNCgkJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1Rl bXBvcmFyeSBkaXJlY3RvcnkgY291bGQgbm90IGJlIGRlbGV0ZWQ6ICcsICdpdC1sMTBuLWJhY2t1cGJ1 ZGR5JykgLiAkdGVtcGRpciApOw0KCQkJCQ0KCQkJCX0NCgkJCQkNCgkJCQljaGRpciggJHdvcmtpbmdf ZGlyICk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQ0KCQkJfQ0KCQkJDQoJCQkvLyBTZXQgY3VycmVu dCB3b3JraW5nIGRpcmVjdG9yeSBiYWNrIHRvIHdoZXJlIHdlIHdlcmUNCgkJCWNoZGlyKCAkd29ya2lu Z19kaXIgKTsNCgkJCQ0KCQkJLy8gQ29udmVuaWVuY2UgZm9yIGhhbmRsaW5nIGRpZmZlcmVudCBzY2Fu YXJpb3MNCgkJCSRyZXN1bHQgPSBmYWxzZTsNCgkJCQ0KCQkJLy8gU2VlIGlmIHdlIGNhbiBmaWd1cmUg b3V0IHdoYXQgaGFwcGVuZWQgLSBub3RlIHRoYXQgJGV4aXRjb2RlIGNvdWxkIGJlIG5vbi16ZXJvIGZv ciBhIHdhcm5pbmcgb3IgZXJyb3INCgkJCWlmICggKCAhIGZpbGVfZXhpc3RzKCAkdGVtcF96aXAgKSAp IHx8ICggJGV4aXRjb2RlICE9IDAgKSApIHsNCgkJCQ0KCQkJCS8vIElmIHdlIGhhZCBhIG5vbi16ZXJv IGV4aXQgY29kZSB0aGVuIHNob3VsZCByZXBvcnQgaXQgKGZpbGUgbWF5IG9yIG1heSBub3QgYmUgY3Jl YXRlZCkNCgkJCQlpZiAoICRleGl0Y29kZSAhPSAwICkgew0KCQkJCQ0KCQkJCQkkdGhpcy0+c3RhdHVz KCAnZGV0YWlscycsIF9fKCdaaXAgcHJvY2VzcyBleGl0IGNvZGU6ICcsICdpdC1sMTBuLWJhY2t1cGJ1 ZGR5JyApIC4gJGV4aXRjb2RlICk7DQoJCQkJCQ0KCQkJCX0NCg0KCQkJCS8vIFJlcG9ydCB3aGV0aGVy IG9yIG5vdCB0aGUgemlwIGZpbGUgd2FzIGNyZWF0ZWQJCQkJDQoJCQkJaWYgKCAhIGZpbGVfZXhpc3Rz KCAkdGVtcF96aXAgKSApIHsNCgkJCQkNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygg J1ppcCBBcmNoaXZlIGZpbGUgbm90IGNyZWF0ZWQgLSBjaGVjayBwcm9jZXNzIGV4aXQgY29kZS4nLCAn aXQtbDEwbi1iYWNrdXBidWRkeScgKSApOw0KCQkJCQkNCgkJCQl9IGVsc2Ugew0KCQkJCQkNCgkJCQkJ JHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXyggJ1ppcCBBcmNoaXZlIGZpbGUgY3JlYXRlZCAtIGNo ZWNrIHByb2Nlc3MgZXhpdCBjb2RlLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApICk7DQoNCgkJCQl9 DQoJCQkJDQoJCQkJLy8gTm93IHdlIGRvbid0IG1vdmUgaXQgKGJlY2F1c2UgZWl0aGVyIGl0IGRvZXNu J3QgZXhpc3Qgb3IgbWF5IGJlIGluY29tcGxldGUpIGJ1dCB3ZSdsbCBzaG93IGFueSBlcnJvci93YXJ0 bmluZyBvdXRwdXQNCgkJCQlpZiAoIGZpbGVfZXhpc3RzKCBkaXJuYW1lKCAkdGVtcGRpciApIC4gRElS RUNUT1JZX1NFUEFSQVRPUiAuIHNlbGY6OlpJUF9MT0dfRklMRV9OQU1FICkgKSB7DQoJCQkJDQoJCQkJ CSRsaW5lcyA9IGZpbGUoIGRpcm5hbWUoICR0ZW1wZGlyICkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4g c2VsZjo6WklQX0xPR19GSUxFX05BTUUsIEZJTEVfSUdOT1JFX05FV19MSU5FUyApOw0KCQkJCQlpZiAo ICEoIGZhbHNlID09PSAkbGluZXMgKSApIHsNCgkJCQkJDQoJCQkJCQkvLyBPdXRwdXQgb25seSB0aGUg Zmlyc3QgbWF4X2xpbmVzIGxpbmVzIGF0IG1vc3QgLSBpZiBtb3JlIHRoZW4gaW5kaWNhdGUgdGhpcyBh bmQgbW92ZSB0aGUgZmlsZSBzbyBjYW4gYmVlbiByZXZpZXdlZA0KCQkJCQkJaWYgKCBjb3VudCggJGxp bmVzICkgPiBzZWxmOjpNQVhfRVJST1JfTElORVNfVE9fU0hPVyApIHsNCgkJCQkJCQ0KCQkJCQkJCSRm aXJzdF9saW5lcyA9IGFycmF5X3NsaWNlKCAkbGluZXMsIDAsIHNlbGY6Ok1BWF9FUlJPUl9MSU5FU19U T19TSE9XICk7DQoJCQkJCQkNCgkJCQkJCQlmb3JlYWNoICggJGZpcnN0X2xpbmVzIGFzICRsaW5lICkg

ew0KCQkJCQkJDQoJCQkJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oICdaaXAgcHJvY2Vz cyByZXBvcnRlZDogJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSAuICRsaW5lICk7DQoJCQkJCQkNCgkJ CQkJCQl9DQoJCQkJCQkJDQoJCQkJCQkJJGVycm9yX2ZpbGUgPSBkaXJuYW1lKCAkdGVtcGRpciApIC4g RElSRUNUT1JZX1NFUEFSQVRPUiAuIHNlbGY6OlpJUF9FUlJPUl9GSUxFX05BTUU7DQoJCQkJCQkJQGNv cHkoIGRpcm5hbWUoICR0ZW1wZGlyICkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gc2VsZjo6WklQX0xP R19GSUxFX05BTUUsICRlcnJvcl9maWxlICk7DQoJCQkJCQkJDQoJCQkJCQkJaWYgKCBmaWxlX2V4aXN0 cyAoICRlcnJvcl9maWxlICkgKSB7DQoJCQkJCQkJDQoJCQkJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRh aWxzJywgX18oICdaaXAgcHJvY2VzcyByZXBvcnRlZCAnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4g KCBjb3VudCggJGxpbmVzICkgLSBzZWxmOjpNQVhfRVJST1JfTElORVNfVE9fU0hPVyApIC4gX18oICcg bW9yZSBlcnJvcnMgLSBwbGVhc2UgcmV2aWV3IGluOiAnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4g JGVycm9yX2ZpbGUgKTsNCgkJCQkJCQkJDQoJCQkJCQkJfQ0KCQkJCQkJCQ0KCQkJCQkJDQoJCQkJCQl9 IGVsc2Ugew0KCQkJCQkJDQoJCQkJCQkJLy8gU21hbGwgbnVtYmVyIG9mIGxpbmVzIHNvIGp1c3Qgc2hv dyB0aGVtIGFsbA0KCQkJCQkJCWZvcmVhY2ggKCAkbGluZXMgYXMgJGxpbmUgKSB7DQoJCQkJCQkNCgkJ CQkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXyggJ1ppcCBwcm9jZXNzIHJlcG9ydGVkOiAn LCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4gJGxpbmUgKTsNCgkJCQkJCQ0KCQkJCQkJCX0NCgkJCQkJ CQkNCgkJCQkJCX0NCgkJCQkJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCS8vIFNob3VsZCBiZSBhYmxlIHRv IGRlbGV0ZSB0aGlzIGZpbGUgYnV0IG5vdCB0cmFnaWMgaXMgd2UgY2Fubm90DQoJCQkJCUB1bmxpbmso IGRpcm5hbWUoICR0ZW1wZGlyICkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gc2VsZjo6WklQX0xPR19G SUxFX05BTUUgKTsNCgkJCQkJCQ0KCQkJCX0NCgkJCQkNCgkJCQkkcmVzdWx0ID0gZmFsc2U7DQoJCQkJ DQoJCQl9IGVsc2Ugew0KCQkJDQoJCQkJLy8gR290IGZpbGUgd2l0aCBubyBlcnJvciBvciB3YXJuaW5n cyBhdCBhbGwgc28ganVzdCBtb3ZlIGl0IHRvIHRoZSBsb2NhbCBhcmNoaXZlDQoJCQkJJHRoaXMtPnN0 YXR1cyggJ2RldGFpbHMnLCBfXygnTW92aW5nIFppcCBBcmNoaXZlIGZpbGUgdG8gbG9jYWwgYXJjaGl2 ZSBkaXJlY3RvcnkuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJCQ0KCQkJCXJlbmFtZSgg JHRlbXBfemlwLCAkemlwICk7DQoJCQkJaWYgKCBmaWxlX2V4aXN0cyggJHppcCApICkgew0KCQkJCQ0K CQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdaaXAgQXJjaGl2ZSBmaWxlIG1vdmVkIHRv IGxvY2FsIGFyY2hpdmUgZGlyZWN0b3J5LicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCQkJ JHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCBfXyggJ1ppcCBBcmNoaXZlIGZpbGUgc3VjY2Vzc2Z1bGx5 IGNyZWF0ZWQgd2l0aCBubyBlcnJvcnMgb3Igd2FybmluZ3MuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHkn ICkgKTsNCgkJCQkJJHJlc3VsdCA9IHRydWU7DQoJCQkJCQ0KCQkJCX0gZWxzZSB7DQoJCQkJDQoJCQkJ CSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1ppcCBBcmNoaXZlIGZpbGUgY291bGQgbm90IGJl IG1vdmVkIHRvIGxvY2FsIGFyY2hpdmUgZGlyZWN0b3J5LicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5Jykg KTsNCgkJCQkJJHJlc3VsdCA9IGZhbHNlOw0KCQkJCQkNCgkJCQl9DQoJCQkJCQkJCQ0KCQkJCS8vIEFz IHdlIGhhZCBhIGdvb2QgcmVzdWx0IHdlIHNob3VsZCBjbGVhbiB1cCBhbnkgZXJyb3Igb3V0cHV0IGZp bGUgZnJvbSBhIHByZXZpb3VzIGJhZCBydW4NCgkJCQkkZXJyb3JfZmlsZSA9IGRpcm5hbWUoICR0ZW1w ZGlyICkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gc2VsZjo6WklQX0VSUk9SX0ZJTEVfTkFNRTsNCgkJ CQlpZiAoIGZpbGVfZXhpc3RzKCAkZXJyb3JfZmlsZSApICkgew0KCQkJCQ0KCQkJCQlAdW5saW5rKCAk ZXJyb3JfZmlsZSApOw0KCQkJCQkNCgkJCQl9DQoJCQkJCQkJCQ0KCQkJfQ0KCQkJDQoJCQkvLyBNdXN0 IHJlbW92ZSB0aGUgdGVtcG9yYXJ5IHppcCBvdXRwdXQgZmlsZQ0KCQkJaWYgKCBmaWxlX2V4aXN0cygg ZGlybmFtZSggJHRlbXBkaXIgKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBzZWxmOjpaSVBfTE9HX0ZJ TEVfTkFNRSApICkgew0KCQkJDQoJCQkJdW5saW5rKCBkaXJuYW1lKCAkdGVtcGRpciApIC4gRElSRUNU T1JZX1NFUEFSQVRPUiAuIHNlbGY6OlpJUF9MT0dfRklMRV9OQU1FICk7DQoJCQkJDQoJCQl9DQoJCQkN Cg0KCQkJLy8gQ2xlYW51cCB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdpbGwgaGF2ZSBhbGwg ZGV0cml0dXMgYW5kIG1heWJlIGluY29tcGxldGUgemlwIGZpbGUJCQkNCgkJCSR0aGlzLT5zdGF0dXMo ICdkZXRhaWxzJywgX18oJ1JlbW92aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkuJywgJ2l0LWwxMG4tYmFj a3VwYnVkZHknKSApOw0KCQkJDQoJCQlpZiAoICEoICR0aGlzLT5kZWxldGVfZGlyZWN0b3J5X3JlY3Vy c2l2ZSggJHRlbXBkaXIgKSApICkgew0KCQkJDQoJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywg X18oJ1RlbXBvcmFyeSBkaXJlY3RvcnkgY291bGQgbm90IGJlIGRlbGV0ZWQ6ICcsICdpdC1sMTBuLWJh Y2t1cGJ1ZGR5JykgLiAkdGVtcGRpciApOw0KCQkJDQoJCQl9DQoJCQkNCgkJCXJldHVybiAkcmVzdWx0 Ow0KCQkJCQkJCQkJDQoJCX0NCgkJDQoJfSAvLyBlbmQgcGx1Z2luYnVkZHlfemJ6aXBwcm9jIGNsYXNz LgkNCgkNCn0NCj8+ ###PACKDATA,FILE_END,/lib/zipbuddy/zbzipproc.php,importbuddy/lib/zipbuddy/zbzipp roc.php ###PACKDATA,FILE_START,/lib/zipbuddy/zbzipziparchive.php,importbuddy/lib/zipbudd y/zbzipziparchive.php PD9waHANCi8qKg0KICoJcGx1Z2luYnVkZHlfemJ6aXB6aXBhcmNoaXZlIENsYXNzDQogKg0KICogIEV4 dGVuZHMgdGhlIHppcCBjYXBhYmlsaXR5IGNvcmUgY2xhc3Mgd2l0aCBwcm9jIHNwZWNpZmljIGNhcGFi aWxpdHkNCiAqCQ0KICoJVmVyc2lvbjogMS4wLjANCiAqCUF1dGhvcjoNCiAqCUF1dGhvciBVUkk6DQog Kg0KICoJQHBhcmFtCQkkcGFyZW50CQlvYmplY3QJCU9wdGlvbmFsIHBhcmVudCBvYmplY3Qgd2hpY2gg Y2FuIHByb3ZpZGUgZnVuY3Rpb25zIGZvciByZXBvcnRpbmcsIGV0Yy4NCiAqCUByZXR1cm4JCW51bGwN CiAqDQogKi8NCmlmICggIWNsYXNzX2V4aXN0cyggInBsdWdpbmJ1ZGR5X3piemlwemlwYXJjaGl2ZSIg

KSApIHsNCg0KCWNsYXNzIHBsdWdpbmJ1ZGR5X3piemlwemlwYXJjaGl2ZSBleHRlbmRzIHBsdWdpbmJ1 ZGR5X3piemlwY29yZSB7DQoJDQogICAgICAgIC8qKg0KICAgICAgICAgKiBtZXRob2QgdGFnIHVzZWQg dG8gcmVmZXIgdG8gdGhlIG1ldGhvZCBhbmQgZW50aXRpZXMgYXNzb2NpYXRlZCB3aXRoIGl0IHN1Y2gg YXMgY2xhc3MgbmFtZQ0KICAgICAgICAgKiANCiAgICAgICAgICogQHZhciAkX21ldGhvZF90YWcgCXN0 cmluZw0KICAgICAgICAgKi8NCgkJcHVibGljIHN0YXRpYyAkX21ldGhvZF90YWcgPSAnemlwYXJjaGl2 ZSc7DQoJCQkNCiAgICAgICAgLyoqDQogICAgICAgICAqIFRoaXMgdGVsbHMgdXMgd2hldGhlciB0aGlz IG1ldGhvZCBpcyByZWdhcmRlZCBhcyBhICJjb21wYXRpYmlsaXR5IiBtZXRob2QNCiAgICAgICAgICog DQogICAgICAgICAqIEB2YXIgYm9vbA0KICAgICAgICAgKi8NCgkJcHVibGljIHN0YXRpYyAkX2lzX2Nv bXBhdGliaWxpdHlfbWV0aG9kID0gZmFsc2U7DQoJCQkNCgkJLyoqDQoJCSAqCV9fY29uc3RydWN0KCkN CgkJICoJDQoJCSAqCURlZmF1bHQgY29uc3RydWN0b3IuDQoJCSAqCQ0KCQkgKglAcGFyYW0JCXJlZmVy ZW5jZQkmJHBhcmVudAkJW29wdGlvbmFsXSBSZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBjb250YWluaW5n IHRoZSBzdGF0dXMoKSBmdW5jdGlvbiBmb3Igc3RhdHVzIHVwZGF0ZXMuDQoJCSAqCUByZXR1cm4JCW51 bGwNCgkJICoNCgkJICovDQoJCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCggJiRwYXJlbnQgPSBO VUxMICkgew0KDQoJCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCAkcGFyZW50ICk7DQoJCQkNCgkJCS8vIERl ZmluZSB0aGUgaW5pdGlhbCBkZXRhaWxzDQoJCQkkdGhpcy0+X21ldGhvZF9kZXRhaWxzWyAnYXR0cicg XSA9IGFycmF5KCAnbmFtZScgPT4gJ1ppcEFyY2hpdmUgTWV0aG9kJywgJ2NvbXBhdGliaWxpdHknID0+ IHBsdWdpbmJ1ZGR5X3piemlwemlwYXJjaGl2ZTo6JF9pc19jb21wYXRpYmlsaXR5X21ldGhvZCApOw0K CQkJJHRoaXMtPl9tZXRob2RfZGV0YWlsc1sgJ3BhcmFtJyBdID0gYXJyYXkoICdwYXRoJyA9PiAnJyAp Ow0KCQkJDQoJCX0NCgkJDQoJCS8qKg0KCQkgKglfX2Rlc3RydWN0KCkNCgkJICoJDQoJCSAqCURlZmF1 bHQgZGVzdHJ1Y3Rvci4NCgkJICoJDQoJCSAqCUByZXR1cm4JCW51bGwNCgkJICoNCgkJICovDQoJCXB1 YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCApIHsNCgkJDQoJCQlwYXJlbnQ6Ol9fZGVzdHJ1Y3QoKTsN Cg0KCQl9DQoJCQ0KCQkvKioNCgkJICoJZ2V0X21ldGhvZF90YWcoKQ0KCQkgKgkNCgkJICoJUmV0dXJu cyB0aGUgKHN0YXRpYykgbWV0aG9kIHRhZw0KCQkgKgkNCgkJICoJQHJldHVybgkJc3RyaW5nIFRoZSBt ZXRob2QgdGFnDQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gZ2V0X21ldGhvZF90YWcoKSB7 DQoJCQ0KCQkJcmV0dXJuIHBsdWdpbmJ1ZGR5X3piemlwemlwYXJjaGl2ZTo6JF9tZXRob2RfdGFnOw0K CQkJDQoJCX0NCgkJDQoJCS8qKg0KCQkgKglnZXRfaXNfY29tcGF0aWJpbGl0eV9tZXRob2QoKQ0KCQkg KgkNCgkJICoJUmV0dXJucyB0aGUgKHN0YXRpYykgaXNfY29tcGF0aWJpbGl0eV9tZXRob2QgYm9vbGVh bg0KCQkgKgkNCgkJICoJQHJldHVybgkJYm9vbA0KCQkgKg0KCQkgKi8NCgkJcHVibGljIGZ1bmN0aW9u IGdldF9pc19jb21wYXRpYmlsaXR5X21ldGhvZCgpIHsNCgkJDQoJCQlyZXR1cm4gcGx1Z2luYnVkZHlf emJ6aXB6aXBhcmNoaXZlOjokX2lzX2NvbXBhdGliaWxpdHlfbWV0aG9kOw0KCQkJDQoJCX0NCgkJDQoJ CS8qKg0KCQkgKglpc19hdmFpbGFibGUoKQ0KCQkgKgkNCgkJICoJQSBmdW5jdGlvbiB0aGF0IHRlc3Rz IGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBzcGVjaWZpYyBtZXRob2QgaW4gdGhlIHJlcXVlc3Rl ZCBtb2RlDQoJCSAqCQ0KCQkgKglAcGFyYW1lCXN0cmluZwkkdGVtcGRpcglUZW1wb3JhcnkgZGlyZWN0 b3J5IHRvIHVzZSBmb3IgYW55IHRlc3QgZmlsZXMNCgkJICoJQHBhcmFtCXN0cmluZwkkbW9kZQkJTWV0 aG9kIG1vZGUgdG8gdGVzdCBmb3INCgkJICoJQHBhcmFtCWFycmF5CSRzdGF0dXMJCUFycmF5IGZvciBh bnkgc3RhdHVzIG1lc3NhZ2VzDQoJCSAqCUByZXR1cm4JYm9vbAkJCQlUcnVlIGlmIHRoZSBtZXRob2Qv bW9kZSBjb21iaW5hdGlvbiBpcyBhdmFpbGFibGUsIGZhbHNlIG90aGVyd2lzZQ0KCQkgKg0KCQkgKi8N CgkJcHVibGljIGZ1bmN0aW9uIGlzX2F2YWlsYWJsZSggJHRlbXBkaXIsICRtb2RlLCAmJHN0YXR1cyAp IHsNCgkJDQoJCQkkcmVzdWx0ID0gZmFsc2U7DQoJCQkkemlwID0gTlVMTDsNCgkJCQ0KCQkJaWYgKCBj bGFzc19leGlzdHMoICdaaXBBcmNoaXZlJyApICkgew0KCQkJDQoJCQkJJHRlc3RfZmlsZSA9ICR0ZW1w ZGlyIC4gJ3RlbXBfdGVzdF8nIC4gdW5pcWlkKCkgLiAnLnppcCc7DQoJCQkJDQoJCQkJJHppcCA9IG5l dyBaaXBBcmNoaXZlOw0KCQkJCQ0KCQkJCSRyZXMgPSAkemlwLT5vcGVuKCAkdGVzdF9maWxlLCBaSVBB UkNISVZFOjpDUkVBVEUgfCBaSVBBUkNISVZFOjpPVkVSV1JJVEUgKTsNCgkJCQkNCgkJCQlpZiAoICRy ZXMgPT09IHRydWUgKSB7DQoJCQkJDQoJCQkJCSR6aXAtPmFkZEZpbGUoIF9fRklMRV9fLCAndGhpc19p c19hX3Rlc3QudHh0Jyk7DQoJCQkJCSR6aXAtPmNsb3NlKCk7DQoJCQkJCQ0KCQkJCQlpZiAoIGZpbGVf ZXhpc3RzKCAkdGVzdF9maWxlICkgKSB7DQoJCQkJCQ0KCQkJCQkJaWYgKCAhdW5saW5rKCAkdGVzdF9m aWxlICkgKSB7DQoJCQkJCQ0KCQkJCQkJCSRzdGF0dXNbXSA9IHNwcmludGYoIF9fKCdFcnJvciAjNTY0 NjM0LiBVbmFibGUgdG8gZGVsZXRlIHRlc3QgZmlsZSAoJXMpIScsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5 JyksICR0ZXN0X2ZpbGUgKTsNCgkJCQkJCQ0KCQkJCQkJfQ0KCQkJCQkNCgkJCQkJCSRzdGF0dXNbXSA9 IF9fKCdaaXBBcmNoaXZlIHRlc3QgUEFTU0VELicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5Jyk7DQoJCQkJ CQkkcmVzdWx0ID0gdHJ1ZTsNCgkJCQkJCQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkNCgkJCQkJCSRzdGF0 dXNbXSA9IF9fKCdaaXBBcmNoaXZlIHRlc3QgRkFJTEVEOiBaaXAgZmlsZSBub3QgZm91bmQuJywgJ2l0 LWwxMG4tYmFja3VwYnVkZHknKTsNCgkJCQkJCSRyZXN1bHQgPSBmYWxzZTsNCgkJCQkJCQ0KCQkJCQl9 DQoJCQkJCQ0KCQkJCX0gZWxzZSB7DQoJCQkJDQoJCQkJCSRzdGF0dXNbXSA9IF9fKCdaaXBBcmNoaXZl IHRlc3QgRkFJTEVEOiBVbmFibGUgdG8gY3JlYXRlL29wZW4gemlwIGZpbGUuJywgJ2l0LWwxMG4tYmFj a3VwYnVkZHknKTsNCgkJCQkJJHN0YXR1c1tdID0gX18oJ1ppcEFyY2hpdmUgRXJyb3I6ICcsICdpdC1s MTBuLWJhY2t1cGJ1ZGR5JykgLiAkcmVzOw0KCQkJCQkkcmVzdWx0ID0gZmFsc2U7DQoJCQkJCQ0KCQkJ CX0NCgkJCQkNCgkJCX0gZWxzZSB7DQoJCQkNCgkJCQkkc3RhdHVzW10gPSBfXygnWmlwQXJjaGl2ZSB0 ZXN0IEZBSUxFRDogWmlwQXJjaGl2ZSBjbGFzcyBkb2VzIG5vdCBleGlzdC4nLCAnaXQtbDEwbi1iYWNr dXBidWRkeScpOw0KCQkJCSRyZXN1bHQgPSBmYWxzZTsNCgkJICANCgkJICAJfQ0KCQkgIAkNCgkJICAJ

aWYgKCBOVUxMICE9ICR6aXAgKSB7IHVuc2V0KCAkemlwICk7IH0NCgkJICAJDQoJCSAgCXJldHVybiAk cmVzdWx0Ow0KCQkgIAkNCgkJfQ0KCQkNCgkJLyoqDQoJCSAqCWNyZWF0ZSgpDQoJCSAqCQ0KCQkgKglB IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbiBhcmNoaXZlIGZpbGUNCgkJICoJDQoJCSAqCVRoZSAkZXhj bHVkZXMgd2lsbCBiZSBhIGxpc3Qgb3IgcmVsYXRpdmUgcGF0aCBleGNsdWRlcyBpZiB0aGUgJGxpc3Rt YWtlciBvYmplY3QgaXMgTlVMTCBvdGVocndpc2UNCgkJICoJd2lsbCBiZSBhYnNvbHV0ZSBwYXRoIGV4 Y2x1ZGVzIGFuZCByZWxhdGl2ZSBwYXRoIGV4Y2x1ZGVzIGNhbiBiZSBoYWQgZnJvbSB0aGUgJGxpc3Rt YWtlciBvYmplY3QNCgkJICoJDQoJCSAqCUBwYXJhbQkJc3RyaW5nCSR6aXAJCQlGdWxsIHBhdGggJiBm aWxlbmFtZSBvZiBaSVAgQXJjaGl2ZSBmaWxlIHRvIGNyZWF0ZQ0KCQkgKglAcGFyYW0JCXN0cmluZwkk ZGlyCQkJRnVsbCBwYXRoIG9mIGRpcmVjdG9yeSB0byBhZGQgdG8gWklQIEFyY2hpdmUgZmlsZQ0KCQkg KglAcGFyYW0JCWJvb2wJJGNvbXByZXNzaW9uCVRydWUgdG8gZW5hYmxlIGNvbXByZXNzaW9uIG9mIGZp bGVzIGFkZGVkIHRvIFpJUCBBcmNoaXZlIGZpbGUNCgkJICoJQHBhcmFtZQkJYXJyYXkJJGV4Y2x1ZGVz CQlMaXN0IG9mIGVpdGhlciBhYnNvbHV0ZSBwYXRoIGV4Y2x1c2lvbnMgb3IgcmVsYXRpdmUgZXhjbHVz aW9ucw0KCQkgKglAcGFyYW0JCXN0cmluZwkkdGVtcGRpcgkJRnVsbCBwYXRoIG9mIGRpcmVjdG9yeSBm b3IgdGVtcG9yYXJ5IHVzYWdlDQoJCSAqCUBwYXJhbQkJb2JqZWN0CSRsaXN0bWFrZXIJCVRoZSBvYmpl Y3QgZnJvbSB3aGljaCB3ZSBjYW4gZ2V0IGFuIGluY2x1c2lvbnMgbGlzdA0KCQkgKglAcmV0dXJuCQli b29sCQkJCQlUcnVlIGlmIHRoZSBjcmVhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNl DQoJCSAqDQoJCSAqLw0KCQlwdWJsaWMgZnVuY3Rpb24gY3JlYXRlKCAkemlwLCAkZGlyLCAkY29tcHJl c3Npb24sICRleGNsdWRlcywgJHRlbXBkaXIsICRsaXN0bWFrZXIgPSBOVUxMICkgew0KCQkNCgkJCSR0 aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1RoZSAnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4g JHRoaXMtPmdldF9tZXRob2RfdGFnKCkgLiBfXygnIG1ldGhvZCBpcyBub3QgY3VycmVudGx5IHN1cHBv cnRlZCBmb3IgYmFja3VwLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCXJldHVybiBmYWxz ZTsNCgkJDQoJCX0NCgkJDQoJfSAvLyBlbmQgcGx1Z2luYnVkZHlfemJ6aXB6aXBhcmNoaXZlIGNsYXNz LgkNCgkNCn0NCj8+ ###PACKDATA,FILE_END,/lib/zipbuddy/zbzipziparchive.php,importbuddy/lib/zipbuddy/ zbzipziparchive.php ###PACKDATA,FILE_START,/lib/zipbuddy/zipbuddy.php,importbuddy/lib/zipbuddy/zipbu ddy.php PD9waHANCi8qKg0KICoJcGx1Z2luYnVkZHlfemlwYnVkZHkgQ2xhc3MNCiAqDQogKglIYW5kbGVzIHpp cHBpbmcgYW5kIHVuemlwcGluZywgdXNpbmcgdGhlIGJlc3QgbWV0aG9kcyBhdmFpbGFibGUgYW5kIGZh bGxpbmcgYmFjayB0byB3b3JzZSBtZXRob2RzDQogKglhcyBuZWVkZWQgZm9yIGNvbXBhdGliaWxpdHku IEFsbG93cyBmb3IgZm9yY2luZyBjb21wYXRpYmlsaXR5IG1vZGVzLg0KICoJDQogKglWZXJzaW9uOiAy LjAuMA0KICoJQXV0aG9yOiBEdXN0aW4gQm9sdG9uDQogKglBdXRob3IgVVJJOiBodHRwOi8vZHVzdGlu Ym9sdG9uLmNvbS8NCiAqDQogKgkkdGVtcF9kaXIJCXN0cmluZwkJVGVtcG9yYXJ5IGRpcmVjdG9yeSBh YnNvbHV0ZSBwYXRoIGZvciB0ZW1wb3JhcnkgZmlsZSBzdG9yYWdlLiBNdXN0IGJlIHdyaXRhYmxlIQ0K ICoJJHppcF9tZXRob2RzCWFycmF5CQlPcHRpb25hbC4gQXJyYXkgb2YgYXZhaWxhYmxlIHppcCBtZXRo b2RzIHRvIHVzZS4gVXNlZnVsIGZvciBub3QgaGF2aW5nIHRvIHJlLXRlc3QgZXZlcnkgdGltZS4NCiAq CQkJCQkJCQlJZiBvbWl0dGVkIHRoZW4gYSB0ZXN0IHdpbGwgYmUgcGVyZm9ybWVkIHRvIGZpbmQgdGhl IG1ldGhvZHMgdGhhdCB3b3JrIG9uIHRoaXMgaG9zdC4NCiAqCSRtb2RlCQkJc3RyaW5nCQlGdXR1cmUg dXNlIHRvIGFsbG93IGZvciBvdGhlciBjb21wcmVzc2lvbiBtZXRob2RzIG90aGVyIHRoYW4gemlwLiBD dXJyZW50bHkgbm90IGluIHVzZS4NCiAqDQogKi8NCg0KLy8gVHJ5IGFuZCBsb2FkIHRoZSBleHBlcmlt ZW50YWwgdmVyc2lvbiAtIGlmIHN1Y2Nlc3NmdWwgdGhlbiBjbGFzcyB3aWxsIGV4aXN0IGFuZCByZW1h aW5pbmcgY29kZSB3aWxsIGJlIGlnbm9yZWQNCmlmICgNCgkJKCBkZWZpbmVkKCAnVVNFX0VYUEVSSU1F TlRBTF9aSVBCVUREWScgKSAmJiAoIHRydWUgPT09IFVTRV9FWFBFUklNRU5UQUxfWklQQlVERFkgKSAp DQoJCXx8DQoJCSggaXNzZXQoICR0aGlzLT5fb3B0aW9uc1sndGVtcG9yYXJ5X29wdGlvbnMnXVsnZXhw ZXJpbWVudGFsX3ppcCddICkgJiYgKCAnMScgPT0gJHRoaXMtPl9vcHRpb25zWyd0ZW1wb3Jhcnlfb3B0 aW9ucyddWydleHBlcmltZW50YWxfemlwJ10gKSApDQoJKSB7DQoJCUByZXF1aXJlX29uY2UoIGRpcm5h bWUoIF9fRklMRV9fICkgLiAnL3gtemlwYnVkZHkucGhwJyApOw0KfQ0KDQppZiAoICFjbGFzc19leGlz dHMoICJwbHVnaW5idWRkeV96aXBidWRkeSIgKSApIHsNCgljbGFzcyBwbHVnaW5idWRkeV96aXBidWRk eSB7DQoJCQ0KCQlmdW5jdGlvbiBwbHVnaW5idWRkeV96aXBidWRkeSggJHRlbXBfZGlyLCAkemlwX21l dGhvZHMgPSAnJywgJG1vZGUgPSAnemlwJyApIHsNCgkJCSR0aGlzLT5fc3RhdHVzID0gYXJyYXkoKTsN CgkJCSR0aGlzLT5fdGVtcGRpciA9ICR0ZW1wX2RpcjsNCgkJCSR0aGlzLT5fZXhlY3BhdGggPSAnJzsN CgkJCQ0KCQkJaWYgKCAhZW1wdHkoICR6aXBfbWV0aG9kcyApICkgew0KCQkJCSR0aGlzLT5femlwX21l dGhvZHMgPSAkemlwX21ldGhvZHM7DQoJCQl9IGVsc2Ugew0KCQkJCSR0aGlzLT5femlwX21ldGhvZHMg PSAkdGhpcy0+YXZhaWxhYmxlX3ppcF9tZXRob2RzKCBmYWxzZSwgJG1vZGUgKTsNCgkJCX0NCgkJfQ0K CQkNCgkJDQoJCS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSAod2l0aCBwYXRoKSBleGlzdHMgaW4g dGhlIFpJUC4NCgkJLy8gSWYgbGVhdmVfb3BlbiBpcyB0cnVlIHRoZW4gdGhlIHppcCBvYmplY3Qgd2ls bCBiZSBsZWZ0IG9wZW4gZm9yIGZhc3RlciBjaGVja2luZyBmb3Igc3Vic2VxdWVudCBmaWxlcyB3aXRo aW4gdGhpcyB6aXANCgkJZnVuY3Rpb24gZmlsZV9leGlzdHMoICR6aXBfZmlsZSwgJGxvY2F0ZV9maWxl LCAkbGVhdmVfb3BlbiA9IGZhbHNlICkgew0KCQkJaWYgKCBpbl9hcnJheSggJ3ppcGFyY2hpdmUnLCAk dGhpcy0+X3ppcF9tZXRob2RzICkgKSB7DQoJCQkJJHRoaXMtPl96aXAgPSBuZXcgWmlwQXJjaGl2ZTsN

CgkJCQlpZiAoICR0aGlzLT5femlwLT5vcGVuKCAkemlwX2ZpbGUgKSA9PT0gdHJ1ZSApIHsNCgkJCQkJ CWlmICggJHRoaXMtPl96aXAtPmxvY2F0ZU5hbWUoICRsb2NhdGVfZmlsZSApID09PSBmYWxzZSApIHsg Ly8gRmlsZSBub3QgZm91bmQgaW4gemlwLg0KCQkJCQkJCSR0aGlzLT5femlwLT5jbG9zZSgpOw0KCQkJ CQkJCSR0aGlzLT5fc3RhdHVzW10gPSBfXygnRmlsZSBub3QgZm91bmQgKHppcGFyY2hpdmUpJywgJ2l0 LWwxMG4tYmFja3VwYnVkZHknKSAuICc6ICcgLiAkbG9jYXRlX2ZpbGU7DQoJCQkJCQkJcmV0dXJuIGZh bHNlOw0KCQkJCQkJfQ0KCQkJCQkJJHRoaXMtPl96aXAtPmNsb3NlKCk7DQoJCQkJCXJldHVybiB0cnVl OyAvLyBOZXZlciByYW4gaW50byBhIGZpbGUgbWlzc2luZyBzbyBtdXN0IGhhdmUgZm91bmQgdGhlbSBh bGwuDQoJCQkJfSBlbHNlIHsNCgkJCQkJJHRoaXMtPl9zdGF0dXNbXSA9IHNwcmludGYoIF9fKCdaaXBB cmNoaXZlIGZhaWxlZCB0byBvcGVuIGZpbGUgdG8gY2hlY2sgaWYgZmlsZSBleGlzdHMgKGxvb2tpbmcg Zm9yICUxJHMgaW4gJTIkcykuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSwgJGxvY2F0ZV9maWxlICwg JHppcF9maWxlICk7DQoJCQkJCQ0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJ CQkvLyBJZiB3ZSBtYWRlIGl0IHRoaXMgZmFyIHRoZW4gemlwYXJjaGl2ZSBub3QgYXZhaWxhYmxlL2Zh aWxlZC4NCgkJCWlmICggaW5fYXJyYXkoICdwY2x6aXAnLCAkdGhpcy0+X3ppcF9tZXRob2RzICkgKSB7 DQoJCQkJcmVxdWlyZV9vbmNlKCBBQlNQQVRIIC4gJ3dwLWFkbWluL2luY2x1ZGVzL2NsYXNzLXBjbHpp cC5waHAnICk7DQoJCQkJJHRoaXMtPl96aXAgPSBuZXcgUGNsWmlwKCAkemlwX2ZpbGUgKTsNCgkJCQlp ZiAoICggJGZpbGVfbGlzdCA9ICR0aGlzLT5femlwLT5saXN0Q29udGVudCgpICkgPT0gMCApIHsgLy8g SWYgemVybywgemlwIGlzIGNvcnJ1cHQgb3IgZW1wdHkuDQoJCQkJCSR0aGlzLT5fc3RhdHVzW10gPSAk dGhpcy0+X3ppcC0+ZXJyb3JJbmZvKCB0cnVlICk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJZm9yZWFjaCgg JGZpbGVfbGlzdCBhcyAkZmlsZSApIHsNCgkJCQkJCWlmICggJGZpbGVbJ2ZpbGVuYW1lJ10gPT0gJGxv Y2F0ZV9maWxlICkgeyAvLyBGb3VuZCBmaWxlLg0KCQkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQkJfQ0K CQkJCQl9DQoJCQkJCSR0aGlzLT5fc3RhdHVzW10gPSBfXygnRmlsZSBub3QgZm91bmQgKHBjbHppcCkn LCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4gJzogJyAuICRsb2NhdGVfZmlsZTsNCgkJCQkJcmV0dXJu IGZhbHNlOw0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJJHRoaXMtPl9zdGF0dXNbXSA9IF9fKCdVbmFi bGUgdG8gY2hlY2sgaWYgZmlsZSBleGlzdHM6IE5vIGNvbXBhdGlibGUgemlwIG1ldGhvZCBmb3VuZC4n LCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJfQ0KCQkN CgkJDQoJCS8qKg0KCQkgKglhZGRfZGlyZWN0b3J5X3RvX3ppcCgpDQoJCSAqDQoJCSAqCUFkZHMgYSBk aXJlY3RvcnkgdG8gYSBuZXcgb3IgZXhpc3RpbmcgKFRPRE86IG5vdCB5ZXQgYXZhaWxhYmxlKSBaSVAg ZmlsZS4NCgkJICoNCgkJICoJJHppcF9maWxlCQkJCQlzdHJpbmcJCQkJRnVsbCBwYXRoICYgZmlsZW5h bWUgb2YgWklQIGZpbGUgdG8gY3JlYXRlLg0KCQkgKgkkYWRkX2RpcmVjdG9yeQkJCQlzdHJpbmcJCQkJ RnVsbCBkaXJlY3RvcnkgdG8gYWRkIHRvIHppcCBmaWxlLg0KCQkgKgkkY29tcHJlc3Npb24JCQkJYm9v bGVhbgkJCQlUcnVlIHRvIGVuYWJsZSBaSVAgY29tcHJlc3Npb24sDQoJCSAqCQkJCQkJCQkJCQkJCShp ZiBwb3NzaWJsZSB3aXRoIGF2YWlsYWJsZSB6aXAgbWV0aG9kcykNCgkJICoJJGV4Y2x1ZGVzCQkJCQlh cnJheSggc3RyaW5nICkJCUFycmF5IG9mIHN0cmluZ3Mgb2YgcGF0aHMvZmlsZXMgdG8gZXhjbHVkZSBm cm9tIHppcHBpbmcsDQoJCSAqCQkJCQkJCQkJCQkJCShpZiBwb3NzaWJsZSB3aXRoIGF2YWlsYWJsZSB6 aXAgbWV0aG9kcykuDQoJCSAqCSR0ZW1wb3JhcnlfemlwX2RpcmVjdG9yeQlzdHJpbmcJCQkJT3B0aW9u YWwuIEZ1bGwgZGlyZWN0b3J5IHBhdGggdG8gZGlyZWN0b3J5IHRvIHRlbXBvcmFyaWx5IHBsYWNlIFpJ UA0KCQkgKgkJCQkJCQkJCQkJCQlmaWxlIHdoaWxlIGNyZWF0aW5nLiBVc2VzIHNhbWUgZGlyZWN0b3J5 IGlmIG9taXR0ZWQuDQoJCSAqCSRmb3JjZV9jb21wYXRpYmlsaXR5X21vZGUJYm9vbGVhbgkJCQlUcnVl OiBvbmx5IHVzZSBQQ0xaaXAuIEZhbHNlOiB0cnkgZXhlYyBmaXJzdCBpZiBhdmFpbGFibGUsDQoJCSAq CQkJCQkJCQkJCQkJCWFuZCBmYWxsYmFjayB0byBsZXNzZXIgbWV0aG9kcyBhcyByZXF1aXJlZC4NCgkJ ICoNCgkJICoJQHJldHVybgkJCQkJCQkJCXRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlDQoJ CSAqDQoJCSAqLw0KCQlmdW5jdGlvbiBhZGRfZGlyZWN0b3J5X3RvX3ppcCggJHppcF9maWxlLCAkYWRk X2RpcmVjdG9yeSwgJGNvbXByZXNzaW9uLCAkZXhjbHVkZXMgPSBhcnJheSgpLCAkdGVtcG9yYXJ5X3pp cF9kaXJlY3RvcnkgPSAnJywgJGZvcmNlX2NvbXBhdGliaWxpdHlfbW9kZSA9IGZhbHNlICkgew0KCQkJ aWYgKCAkZm9yY2VfY29tcGF0aWJpbGl0eV9tb2RlID09PSB0cnVlICkgew0KCQkJCSR6aXBfbWV0aG9k cyA9IGFycmF5KCAncGNsemlwJyApOw0KCQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgX18oJ0Zv cmNlZCBjb21wYXRpYmlsaXR5IG1vZGUgKFBDTFppcCkgYmFzZWQgb24gc2V0dGluZ3MuIFRoaXMgaXMg c2xvd2VyIGFuZCBsZXNzIHJlbGlhYmxlLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCX0g ZWxzZSB7DQoJCQkJJHppcF9tZXRob2RzID0gJHRoaXMtPl96aXBfbWV0aG9kczsNCgkJCQkkdGhpcy0+ c3RhdHVzKCAnZGV0YWlscycsIF9fKCdVc2luZyBhbGwgYXZhaWxhYmxlIHppcCBtZXRob2RzIGluIHBy ZWZlcnJlZCBvcmRlci4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQl9DQoJCQkNCgkJCSRh cHBlbmQgPSBmYWxzZTsgLy8gUG9zc2libGUgZnV0dXJlIG9wdGlvbiB0byBhbGxvdyBhcHBlbmRpbmcg aWYgZmlsZSBleGlzdHMuDQoJCQkNCgkJCWlmICggIWVtcHR5KCAkdGVtcG9yYXJ5X3ppcF9kaXJlY3Rv cnkgKSApIHsNCgkJCQlpZiAoICFmaWxlX2V4aXN0cyggJHRlbXBvcmFyeV96aXBfZGlyZWN0b3J5ICkg KSB7IC8vIENyZWF0ZSB0ZW1wIGRpciBpZiBpdCBkb2VzIG5vdCBleGlzdC4NCgkJCQkJbWtkaXIoICR0 ZW1wb3JhcnlfemlwX2RpcmVjdG9yeSApOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJJHRoaXMtPnN0YXR1 cyggJ2RldGFpbHMnLCBfXygnQ3JlYXRpbmcgWklQIGZpbGUnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScp IC4gJyBgJyAuICR6aXBfZmlsZSAuICdgLiAnIC4gX18oJ0FkZGluZyBkaXJlY3RvcnknLCAnaXQtbDEw bi1iYWNrdXBidWRkeScpIC4gJyBgJyAuICRhZGRfZGlyZWN0b3J5IC4gJ2AuICcgLiBfXygnQ29tcHJl c3Npb24nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4gJzogJyAuICRjb21wcmVzc2lvbiAuICc7ICcg

LiBfXygnRXhjbHVkZXMnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpIC4gJzogJyAuIGltcGxvZGUoICcs JywgJGV4Y2x1ZGVzICkgKTsNCgkJCQ0KCQkJaWYgKCBpbl9hcnJheSggJ2V4ZWMnLCAkemlwX21ldGhv ZHMgKSApIHsNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdVc2luZyBleGVjKCkgbWV0 aG9kIGZvciBaSVAuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJCQ0KCQkJCSRjb21tYW5k ID0gJ3ppcCAtcSAtcic7DQoJCQkJDQoJCQkJaWYgKCAkY29tcHJlc3Npb24gIT09IHRydWUgKSB7DQoJ CQkJCSRjb21tYW5kIC49ICcgLTAnOw0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdF eGVjIGNvbXByZXNzaW9uIGRpc2FibGVkIGJhc2VkIG9uIHNldHRpbmdzLicsICdpdC1sMTBuLWJhY2t1 cGJ1ZGR5JykgKTsNCgkJCQl9DQoJCQkJaWYgKCBmaWxlX2V4aXN0cyggJHppcF9maWxlICkgKSB7DQoJ CQkJCWlmICggJGFwcGVuZCA9PT0gdHJ1ZSApIHsNCgkJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxz JywgX18oJ1pJUCBmaWxlIGV4aXN0cy4gQXBwZW5kaW5nIGJhc2VkIG9uIG9wdGlvbnMuJywgJ2l0LWwx MG4tYmFja3VwYnVkZHknKSApOw0KCQkJCQkJJGNvbW1hbmQgLj0gJyAtZyc7DQoJCQkJCX0gZWxzZSB7 DQoJCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdaSVAgZmlsZSBleGlzdHMuIERlbGV0 aW5nICYgd3JpdGluZyBiYXNlZCBvbiBvcHRpb25zLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsN CgkJCQkJCXVubGluayggJHppcF9maWxlICk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJDQoJCQkJLy8kY29t bWFuZCAuPSAiIC1yIjsNCgkJCQkNCgkJCQkvLyBTZXQgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byBzdG9y ZSBaSVAgd2hpbGUgaXQncyBiZWluZyBnZW5lcmF0ZWQuDQoJCQkJaWYgKCAhZW1wdHkoICR0ZW1wb3Jh cnlfemlwX2RpcmVjdG9yeSApICkgew0KCQkJCQkkY29tbWFuZCAuPSAiIC1iICd7JHRlbXBvcmFyeV96 aXBfZGlyZWN0b3J5fSciOw0KCQkJCX0NCgkJCQkNCgkJCQkkY29tbWFuZCAuPSAiICd7JHppcF9maWxl fScgLiAtaSAnKiciOw0KCQkJCQ0KCQkJCWlmICggY291bnQoICRleGNsdWRlcyApID4gMCApIHsNCgkJ CQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnQ2FsY3VsYXRpbmcgZGlyZWN0b3JpZXMgdG8g ZXhjbHVkZSBmcm9tIGJhY2t1cC4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkJCSRjb21t YW5kIC49ICcgLXgnOw0KCQkJCQkNCgkJCQkJJGV4Y2x1ZGluZ19hZGRpdGlvbmFsID0gZmFsc2U7DQoJ CQkJCSRleGNsdWRlX2NvdW50ID0gMDsNCgkJCQkJZm9yZWFjaCAoICRleGNsdWRlcyBhcyAkZXhjbHVk ZSApIHsNCgkJCQkJCS8vJGV4Y2x1ZGUgPSBwcmVnX3JlcGxhY2UoICd8Wy9cXFxcXSR8JywgJycsICRl eGNsdWRlICk7DQoJCQkJCQkkZXhjbHVkZSA9IHRyaW0oICRleGNsdWRlLCAiXG5cclwwIiApOw0KCQkJ CQkJaWYgKCAkZXhjbHVkZSAhPSAnJyApIHsNCgkJCQkJCQlpZiAoICFzdHJzdHIoICRleGNsdWRlLCAn YmFja3VwYnVkZHlfYmFja3VwcycgKSApIHsgLy8gU2V0IHZhcmlhYmxlIHRvIHNob3cgd2UgYXJlIGV4 Y2x1ZGluZyBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIGJlc2lkZXMgYmFja3VwIGRpci4NCgkJCQkJCQkJ JGV4Y2x1ZGluZ19hZGRpdGlvbmFsID0gdHJ1ZTsNCgkJCQkJCQl9DQoJCQkJCQkJDQoJCQkJCQkJLy8k ZXhjbHVkZSA9ICRleGNsdWRlIC4gJy8nOw0KCQkJCQkJCQ0KCQkJCQkJCWlmICggc3Vic3RyKCAkZXhj bHVkZSwgLTEsIDEpICE9ICcvJyApIHsNCgkJCQkJCQkJJGV4Y2x1ZGUgPSAkZXhjbHVkZSAuICcvJzsN CgkJCQkJCQl9DQoJCQkJCQkJDQoJCQkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnRXhj bHVkaW5nJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSAuICc6ICcgLiAkZXhjbHVkZSApOw0KCQkJCQkJ CSRjb21tYW5kIC49ICIgJ3skZXhjbHVkZX0qJyI7DQoJCQkJCQkJDQoJCQkJCQkJJGV4Y2x1ZGVfY291 bnQrKzsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkNCgkJCQkkY29tbWFuZCAuPSAnICIvaW1w b3J0YnVkZHkucGhwIic7DQoJCQkJDQoJCQkJaWYgKCAkZXhjbHVkaW5nX2FkZGl0aW9uYWwgPT09IHRy dWUgKSB7DQoJCQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgX18oICdFeGNsdWRpbmcgYXJjaGl2 ZXMgZGlyZWN0b3J5IGFuZCBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIGRlZmluZWQgaW4gc2V0dGluZ3Mu JywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgLiAnICcgLiAkZXhjbHVkZV9jb3VudCAuICcgJyAuIF9f KCAndG90YWwnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSAuICcuJyApOw0KCQkJCX0gZWxzZSB7DQoJ CQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgX18oICdPbmx5IGV4Y2x1ZGluZyBhcmNoaXZlcyBk aXJlY3RvcnkgYmFzZWQgb24gc2V0dGluZ3MuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgLiAnICcg LiAkZXhjbHVkZV9jb3VudCAuICcgJyAuIF9fKCAndG90YWwnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScg KSAuICcuJyApOw0KCQkJCX0NCgkJCQl1bnNldCggJGV4Y2x1ZGVfY291bnQgKTsNCgkJCQkNCgkJCQkk d29ya2luZ19kaXIgPSBnZXRjd2QoKTsNCgkJCQljaGRpciggJGFkZF9kaXJlY3RvcnkgKTsgLy8gQ2hh bmdlIGRpcmVjdG9yeSB0byB0aGUgcGF0aCB3ZSBhcmUgYWRkaW5nLg0KCQkJCQ0KCQkJCWlmICggJHRo aXMtPl9leGVjcGF0aCAhPSAnJyApIHsNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygg J1VzaW5nIGN1c3RvbSBleGVjKCkgcGF0aDogJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgLiAkdGhp cy0+X2V4ZWNwYXRoICk7DQoJCQkJfQ0KCQkJCQ0KCQkJCS8vIFJ1biBaSVAgY29tbWFuZC4NCgkJCQlp ZiAoIHN0cmlzdHIoIFBIUF9PUywgJ1dJTicgKSAmJiAhc3RyaXN0ciggUEhQX09TLCAnREFSV0lOJyAp ICkgeyAvLyBSdW5uaW5nIFdpbmRvd3MuIChub3QgZGFyd2luKQ0KCQkJCQlpZiAoIGZpbGVfZXhpc3Rz KCBBQlNQQVRIIC4gJ3ppcC5leGUnICkgKSB7DQoJCQkJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScs IF9fKCdBdHRlbXB0aW5nIHRvIHVzZSBwcm92aWRlZCBXaW5kb3dzIHppcC5leGUuJywgJ2l0LWwxMG4t YmFja3VwYnVkZHknKSApOw0KCQkJCQkJJGNvbW1hbmQgPSBzdHJfcmVwbGFjZSggJ1wnJywgJyInLCAk Y29tbWFuZCApOyAvLyBXaW5kb3dzIHdhbnRzIGRvdWJsZSBxdW90ZXMNCgkJCQkJCSRjb21tYW5kID0g QUJTUEFUSCAuICRjb21tYW5kOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0 YWlscycsIF9fKCdFeGVjIGNvbW1hbmQgKFdpbmRvd3MpJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSAu ICc6ICcgLiAkY29tbWFuZCApOw0KCQkJCQlAZXhlYyggJHRoaXMtPl9leGVjcGF0aCAuICRjb21tYW5k LCAkZXhlY19yZXR1cm5fYSwgJGV4ZWNfcmV0dXJuX2IpOyAvLyBTdXBwcmVzcyBlcnJvcnMgaW4gV2lu ZG93cyBzaW5jZSBpdCBnaXZlcyBtYWpvciBmb3JraW5nIHdhcm5pbmdzIGluIFdpbmRvd3MuDQoJCQkJ

fSBlbHNlIHsgLy8gQWxsb3cgZXhlYyB3YXJuaW5ncyBvbiB3aW5kb3dzDQoJCQkJCSR0aGlzLT5zdGF0 dXMoICdkZXRhaWxzJywgX18oJ0V4ZWMgY29tbWFuZCAoTGludXgpJywgJ2l0LWwxMG4tYmFja3VwYnVk ZHknKSAuICc6ICcgLiAkY29tbWFuZCApOw0KCQkJCQlleGVjKCAkdGhpcy0+X2V4ZWNwYXRoIC4gJGNv bW1hbmQsICRleGVjX3JldHVybl9hLCAkZXhlY19yZXR1cm5fYik7DQoJCQkJfQ0KCQkJCQ0KCQkJCS8v IFZlcmlmeSB6aXAgY29tbWFuZCB3YXMgY3JlYXRlZCBhbmQgZXhlYyByZXBvcnRzIG5vIGVycm9ycy4g SWYgZmFpbHMgdGhlbiBmYWxscyBiYWNrIHRvIG90aGVyIG1ldGhvZHMuDQoJCQkJaWYgKCAoICEgZmls ZV9leGlzdHMoICR6aXBfZmlsZSApICkgfHwgKCAkZXhlY19yZXR1cm5fYiA9PSAnLTEnICkgKSB7IC8v IEZpbGUgbm90IG1hZGUgb3IgZXJyb3IgcmV0dXJuZWQuDQoJCQkJCWlmICggJGV4ZWNfcmV0dXJuX2Ig PT0gJy0xJyApIHsNCgkJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oICdFeGVjIGNvbW1h bmQgcmV0dXJuZWQgLTEuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgKTsNCgkJCQkJfQ0KCQkJCQlp ZiAoICEgZmlsZV9leGlzdHMoICR6aXBfZmlsZSApICkgew0KCQkJCQkJJHRoaXMtPnN0YXR1cyggJ2Rl dGFpbHMnLCBfXyggJ0V4ZWMgY29tbWFuZCByYW4gYnV0IFpJUCBmaWxlIGRpZCBub3QgZXhpc3QuJywg J2l0LWwxMG4tYmFja3VwYnVkZHknICkgKTsNCgkJCQkJfQ0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnbWVz c2FnZScsIF9fKCAnRnVsbCBzcGVlZCBtb2RlIGRpZCBub3QgY29tcGxldGUuIFRyeWluZyBjb21wYXRp YmlsaXR5IG1vZGUgbmV4dC4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSApOw0KCQkJCQlpZiAoIGZp bGVfZXhpc3RzKCAkemlwX2ZpbGUgKSApIHsgLy8gSWYgZmlsZSB3YXMgc29tZWhvdyBjcmVhdGVkLCBp dHMgbGlrZWx5IGRhbWFnZWQgc2luY2UgYW4gZXJyb3Igd2FzIHRocm93bi4gRGVsZXRlIGl0Lg0KCQkJ CQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXyggJ0NsZWFuaW5nIHVwIGRhbWFnZWQgWklQIGZp bGUuIElzc3VlICMzNDg5MzI4OTk4LicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApICk7DQoJCQkJCQl1 bmxpbmsoICR6aXBfZmlsZSApOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQkvLyBJZiBleGVjIGNvbXBsZXRl ZCBidXQgbGVmdCBiZWhpbmQgYSB0ZW1wb3JhcnkgZmlsZS9kaXJlY3RvcnkgKG9mdGVuIGhhcHBlbnMg aWYgYSB0aGlyZCBwYXJ0eSBwcm9jZXNzIGtpbGxlZCBvZmYgZXhlYykgdGhlbiBjbGVhbiBpdCB1cC4N CgkJCQkJaWYgKCBmaWxlX2V4aXN0cyggJHRlbXBvcmFyeV96aXBfZGlyZWN0b3J5ICkgKSB7DQoJCQkJ CQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCAnQ2xlYW5pbmcgdXAgaW5jb21wbGV0ZSB0ZW1w b3JhcnkgWklQIGZpbGUuIElzc3VlICMzNDM4OTQuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgKTsN CgkJCQkJCSR0aGlzLT5kZWxldGVfZGlyZWN0b3J5X3JlY3Vyc2l2ZSggJHRlbXBvcmFyeV96aXBfZGly ZWN0b3J5ICk7DQoJCQkJCX0NCgkJCQl9IGVsc2Ugew0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2Fn ZScsIF9fKCAnRnVsbCBzcGVlZCBtb2RlIGNvbXBsZXRlZCAmIGdlbmVyYXRlZCBaSVAgZmlsZS4nLCAn aXQtbDEwbi1iYWNrdXBidWRkeScgKSApOw0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQkJDQoJ CQkJY2hkaXIoICR3b3JraW5nX2RpciApOw0KCQkJCQ0KCQkJCXVuc2V0KCAkY29tbWFuZCApOw0KCQkJ CXVuc2V0KCAkZXhjbHVkZSApOw0KCQkJCXVuc2V0KCAkZXhjbHVkaW5nX2FkZGl0aW9uYWwgKTsNCgkJ CQkNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdFeGVjIGNvbW1hbmQgZGlkIG5vdCBz dWNjZWVkLiBGYWxsaW5nIGJhY2suJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJfQ0KCQkJ DQoJCQlpZiAoIGluX2FycmF5KCAncGNsemlwJywgJHppcF9tZXRob2RzICkgKSB7DQoJCQkJJHRoaXMt PnN0YXR1cyggJ21lc3NhZ2UnLCBfXygnVXNpbmcgQ29tcGF0aWJpbGl0eSBNb2RlIGZvciBaSVAuIFRo aXMgaXMgc2xvd2VyIGFuZCBsZXNzIHJlbGlhYmxlLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsN CgkJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsIF9fKCdJZiB5b3VyIGJhY2t1cCB0aW1lcyBvdXQg aW4gY29tcGF0aWJpbGl0eSBtb2RlIHRyeSBkaXNhYmxlZCB6aXAgY29tcHJlc3Npb24uJywgJ2l0LWwx MG4tYmFja3VwYnVkZHknKSApOw0KCQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgX18oJ1dBUk5J Tkc6IERpcmVjdG9yeS9maWxlIGV4Y2x1c2lvbiB1bmF2YWlsYWJsZSBpbiBDb21wYXRpYmlsaXR5IE1v ZGUuIEV2ZW4gZXhpc3Rpbmcgb2xkIGJhY2t1cHMgd2lsbCBiZSBiYWNrZWQgdXAuJywgJ2l0LWwxMG4t YmFja3VwYnVkZHknKSApOw0KCQkJCQ0KCQkJCXJlcXVpcmVfb25jZSggQUJTUEFUSCAuICd3cC1hZG1p bi9pbmNsdWRlcy9jbGFzcy1wY2x6aXAucGhwJyApOw0KCQkJCQ0KCQkJCWlmICggIWVtcHR5KCAkdGVt cG9yYXJ5X3ppcF9kaXJlY3RvcnkgKSApIHsNCgkJCQkJJHBjbHppcCA9IG5ldyBQY2xaaXAoICR0ZW1w b3JhcnlfemlwX2RpcmVjdG9yeSAuIGJhc2VuYW1lKCAkemlwX2ZpbGUgKSApOw0KCQkJCX0gZWxzZSB7 DQoJCQkJCSRwY2x6aXAgPSBuZXcgUGNsWmlwKCAkemlwX2ZpbGUgKTsNCgkJCQl9DQoJCQkJDQoJCQkJ aWYgKCAkY29tcHJlc3Npb24gIT09IHRydWUgKSB7DQoJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxz JywgX18oJ1BDTFppcCBjb21wcmVzc2lvbiBkaXNhYmxlZCBiYXNlZCBvbiBzZXR0aW5ncy4nLCAnaXQt bDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkJCSRhcmd1bWVudHMgPSBhcnJheSggJGFkZF9kaXJlY3Rv cnksIFBDTFpJUF9PUFRfTk9fQ09NUFJFU1NJT04sIFBDTFpJUF9PUFRfUkVNT1ZFX1BBVEgsICRhZGRf ZGlyZWN0b3J5ICk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBf XygnUENMWmlwIGNvbXByZXNzaW9uIGVuYWJsZWQgYmFzZWQgb24gc2V0dGluZ3MuJywgJ2l0LWwxMG4t YmFja3VwYnVkZHknKSApOw0KCQkJCQkkYXJndW1lbnRzID0gYXJyYXkoICRhZGRfZGlyZWN0b3J5LCBQ Q0xaSVBfT1BUX1JFTU9WRV9QQVRILCAkYWRkX2RpcmVjdG9yeSApOw0KCQkJCX0NCgkJCQkNCgkJCQkk bW9kZSA9ICdjcmVhdGUnOw0KCQkJCWlmICggZmlsZV9leGlzdHMoICR6aXBfZmlsZSApICYmICggJGFw cGVuZCA9PT0gdHJ1ZSApICkgew0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdaSVAg ZmlsZSBleGlzdHMuIEFwcGVuZGluZyBiYXNlZCBvbiBvcHRpb25zLicsICdpdC1sMTBuLWJhY2t1cGJ1 ZGR5JykgKTsNCgkJCQkJJG1vZGUgPSAnYXBwZW5kJzsNCgkJCQl9DQoJCQkJDQoJCQkJaWYgKCAkbW9k ZSA9PSAnYXBwZW5kJyApIHsNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXygnQXBwZW5k aW5nIHRvIFpJUCBmaWxlIHZpYSBQQ0xaaXAuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJ

CQkkcmVzdWx0ID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoIGFycmF5KCAmJHBjbHppcCwgJ2FkZCcgKSwg JGFyZ3VtZW50cyApOw0KCQkJCX0gZWxzZSB7IC8vIGNyZWF0ZQ0KCQkJCQkkdGhpcy0+c3RhdHVzKCAn ZGV0YWlscycsIF9fKCAnQ3JlYXRpbmcgWklQIGZpbGUgdmlhIFBDTFppcCcsICdpdC1sMTBuLWJhY2t1 cGJ1ZGR5JykgLiAnOicgLiBpbXBsb2RlKCAnOycsICRhcmd1bWVudHMgKSApOw0KCQkJCQkvL2Vycm9y X2xvZyggJ3BjbHppcCBhcmdzOiAnIC4gcHJpbnRfciggJGFyZ3VtZW50cywgdHJ1ZSApIC4gIlxuIiAp Ow0KCQkJCQkkcmVzdWx0ID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoIGFycmF5KCAmJHBjbHppcCwgJ2Ny ZWF0ZScgKSwgJGFyZ3VtZW50cyApOw0KCQkJCX0NCgkJCQkNCgkJCQlpZiAoICFlbXB0eSggJHRlbXBv cmFyeV96aXBfZGlyZWN0b3J5ICkgKSB7DQoJCQkJCWlmICggZmlsZV9leGlzdHMoICR0ZW1wb3Jhcnlf emlwX2RpcmVjdG9yeSAuIGJhc2VuYW1lKCAkemlwX2ZpbGUgKSApICkgew0KCQkJCQkJJHRoaXMtPnN0 YXR1cyggJ2RldGFpbHMnLCBfXygnUmVuYW1pbmcgUENMWmlwIEZpbGUuLi4nLCAnaXQtbDEwbi1iYWNr dXBidWRkeScpICk7DQoJCQkJCQlyZW5hbWUoICR0ZW1wb3JhcnlfemlwX2RpcmVjdG9yeSAuIGJhc2Vu YW1lKCAkemlwX2ZpbGUgKSwgJHppcF9maWxlICk7DQoJCQkJCQlpZiAoIGZpbGVfZXhpc3RzKCAkemlw X2ZpbGUgKSApIHsNCgkJCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdSZW5hbWluZyBQ Q0xaaXAgc3VjY2Vzcy4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkJCQl9IGVsc2Ugew0K CQkJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1JlbmFtaW5nIFBDTFppcCBmYWlsdXJl LicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCQkJCX0NCgkJCQkJfSBlbHNlIHsNCgkJCQkJ CSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1RlbXBvcmFyeSBQQ0xaaXAgYXJjaGl2ZSBmaWxl IGV4cGVjdGVkIGJ1dCBub3QgZm91bmQuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSApOw0KCQkJCQl9 DQoJCQkJfQ0KCQkJCQ0KCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oICdQQ0xaaXAgZXJy b3IgbWVzc2FnZSAoaWYgYW55KTonICkgLiAnICcgLiAkcGNsemlwLT5lcnJvckluZm8oIHRydWUgKSAp Ow0KCQkJCQ0KCQkJCS8vIElmIG5vdCBhIHJlc3VsdCBvZiAwIGFuZCB0aGUgZmlsZSBleGlzdHMgdGhl biBpdCBsb29rcyBsaWtlIHRoZSBiYWNrdXAgd2FzIGEgc3VjY2Vzcy4NCgkJCQlpZiAoICggJHJlc3Vs dCAhPSAwICkgJiYgZmlsZV9leGlzdHMoICR6aXBfZmlsZSApICkgew0KCQkJCQkkdGhpcy0+c3RhdHVz KCAnZGV0YWlscycsIF9fKCdCYWNrdXAgZmlsZSBjcmVhdGVkIGluIGNvbXBhdGliaWxpdHkgbW9kZSAo UENMWmlwKS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJ CX0gZWxzZSB7DQoJCQkJCWlmICggJHJlc3VsdCA9PSAwICkgew0KCQkJCQkJJHRoaXMtPnN0YXR1cygg J2RldGFpbHMnLCBfXygnUENMWmlwIHJldHVybmVkIHN0YXR1cyAwLicsICdpdC1sMTBuLWJhY2t1cGJ1 ZGR5JykgKTsNCgkJCQkJfQ0KCQkJCQlpZiAoICFmaWxlX2V4aXN0cyggJHppcF9maWxlICkgKSB7DQoJ CQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCdQQ0xaaXAgYXJjaGl2ZSBaSVAgZmlsZSB3 YXMgbm90IGZvdW5kLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgKTsNCgkJCQkJfQ0KCQkJCX0NCgkJ CQkNCgkJCQl1bnNldCggJHJlc3VsdCApOw0KCQkJCXVuc2V0KCAkbW9kZSApOw0KCQkJCXVuc2V0KCAk YXJndW1lbnRzICk7DQoJCQkJdW5zZXQoICRwY2x6aXAgKTsNCgkJCX0NCgkJCQ0KCQkJLy8gSWYgd2Ug bWFkZSBpdCB0aGlzIGZhciB0aGVuIHNvbWV0aGluZyBkaWRudCByZXN1bHQgaW4gYSBzdWNjZXNzLg0K CQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCQ0KCQkNCgkJLyoqDQoJCSAqCXVuemlwKCkNCgkJICoNCgkJ ICoJRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIGEgemlwIGZpbGUgdG8gdGhlIHNwZWNpZmllZCBkaXJl Y3RvcnkgdXNpbmcgdGhlIGJlc3QgdW56aXAgbWV0aG9kcyBwb3NzaWJsZS4NCgkJICoNCgkJICoJJHpp cF9maWxlCQkJCQlzdHJpbmcJCUZ1bGwgcGF0aCAmIGZpbGVuYW1lIG9mIFpJUCBmaWxlIHRvIGNyZWF0 ZS4NCgkJICoJJGRlc3RpbmF0aW9uX2RpcmVjdG9yeQkJc3RyaW5nCQlGdWxsIGRpcmVjdG9yeSBwYXRo IHRvIGV4dHJhY3QgaW50by4NCgkJICoJJGZvcmNlX2NvbXBhdGliaWxpdHlfbW9kZQltaXhlZAkJZmFs c2UgKGRlZmF1bHQpOiB1c2UgYmVzdCBtZXRob2RzIGF2YWlsYWJsZSAoemlwIGV4ZWMgZmlyc3QpLCBm YWxsaW5nIGJhY2sgYXMgbmVlZGVkLg0KCQkgKgkJCQkJCQkJCQkJemlwYXJjaGl2ZTogZmlyc3QgZmFs bGJhY2sgbWV0aG9kLiAoTWVkaXVtIHBlcmZvcm1hbmNlKQ0KCQkgKgkJCQkJCQkJCQkJcGNsemlwOiBz ZWNvbmQgZmFsbGJhY2sgbWV0aG9kLiAoV29yc3QgcGVyZm9ybWFuY2U7IGJ1Z2d5KQ0KCQkgKg0KCQkg KglAcmV0dXJuYGAJCQkJCQkJCXRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlDQoJCSAqLw0K CQlmdW5jdGlvbiB1bnppcCggJHppcF9maWxlLCAkZGVzdGluYXRpb25fZGlyZWN0b3J5LCAkZm9yY2Vf Y29tcGF0aWJpbGl0eV9tb2RlID0gZmFsc2UgKSB7DQoJCQlpZiAoICRmb3JjZV9jb21wYXRpYmlsaXR5 X21vZGUgPT0gJ3ppcGFyY2hpdmUnICkgew0KCQkJCSR6aXBfbWV0aG9kcyA9IGFycmF5KCAnemlwYXJj aGl2ZScgKTsNCgkJCQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsIF9fKCdGb3JjZWQgY29tcGF0aWJp bGl0eSBtb2RlIChaaXBBcmNoaXZlOyBtZWRpdW0gc3BlZWQpIGJhc2VkIG9uIHNldHRpbmdzLiBUaGlz IGlzIHNsb3dlciBhbmQgbGVzcyByZWxpYWJsZS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICk7DQoJ CQl9IGVsc2VpZiAoICRmb3JjZV9jb21wYXRpYmlsaXR5X21vZGUgPT0gJ3BjbHppcCcgKSB7DQoJCQkJ JHppcF9tZXRob2RzID0gYXJyYXkoICdwY2x6aXAnICk7DQoJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3Nh Z2UnLCBfXygnRm9yY2VkIGNvbXBhdGliaWxpdHkgbW9kZSAoUENMWmlwOyBzbG93IHNwZWVkKSBiYXNl ZCBvbiBzZXR0aW5ncy4gVGhpcyBpcyBzbG93ZXIgYW5kIGxlc3MgcmVsaWFibGUuJywgJ2l0LWwxMG4t YmFja3VwYnVkZHknKSApOw0KCQkJfSBlbHNlIHsNCgkJCQkkemlwX21ldGhvZHMgPSAkdGhpcy0+X3pp cF9tZXRob2RzOw0KCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgX18oJ1VzaW5nIGFsbCBhdmFp bGFibGUgemlwIG1ldGhvZHMgaW4gcHJlZmVycmVkIG9yZGVyLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5 JykgKTsNCgkJCX0NCgkJCQ0KCQkJaWYgKCBpbl9hcnJheSggJ2V4ZWMnLCAkemlwX21ldGhvZHMgKSAp IHsNCgkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICAnU3RhcnRpbmcgaGlnaHNwZWVkIGV4dHJh Y3Rpb24gKGV4ZWMpLi4uIFRoaXMgbWF5IHRha2UgYSBtb21lbnQuLi4nICk7DQoJCQkJDQoJCQkJJGNv

bW1hbmQgPSAndW56aXAgLXFvJzsgLy8gcSA9IHF1aWV0LCBvID0gb3ZlcndyaXRlIHdpdGhvdXQgcHJv bXB0Lg0KCQkJCSRjb21tYW5kIC49ICIgJyR6aXBfZmlsZScgLWQgJyRkZXN0aW5hdGlvbl9kaXJlY3Rv cnknIC14ICdpbXBvcnRidWRkeS5waHAnIjsgLy8geCBleGNsdWRlcyBpbXBvcnRidWRkeSBzY3JpcHQg dG8gcHJldmVudCBvdmVyd3JpdGluZyBuZXdlciBpbXBvcnRidWRkeSBvbiBleHRyYWN0IHN0ZXAuDQoJ CQkNCgkJCQkvLyBIYW5kbGUgd2luZG93cy4NCgkJCQlpZiAoIHN0cmlzdHIoIFBIUF9PUywgJ1dJTicg KSAmJiAhc3RyaXN0ciggUEhQX09TLCAnREFSV0lOJyApICkgeyAvLyBSdW5uaW5nIFdpbmRvd3MuIChu b3QgZGFyd2luKQ0KCQkJCQlpZiAoIGZpbGVfZXhpc3RzKCBBQlNQQVRIIC4gJ3VuemlwLmV4ZScgKSAp IHsNCgkJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgICdBdHRlbXB0aW5nIHRvIHVzZSBXaW5k b3dzIHVuemlwLmV4ZS4nICk7DQoJCQkJCQkkY29tbWFuZCA9IHN0cl9yZXBsYWNlKCAnXCcnLCAnIics ICRjb21tYW5kICk7IC8vIFdpbmRvd3Mgd2FudHMgZG91YmxlIHF1b3Rlcw0KCQkJCQkJJGNvbW1hbmQg PSBBQlNQQVRIIC4gJGNvbW1hbmQ7DQoJCQkJCX0NCgkJCQl9DQoJCQkJDQoJCQkJaWYgKCAkdGhpcy0+ X2V4ZWNwYXRoICE9ICcnICkgew0KCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCAnVXNp bmcgY3VzdG9tIGV4ZWMoKSBwYXRoOiAnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSAuICR0aGlzLT5f ZXhlY3BhdGggKTsNCgkJCQl9DQoJCQkJDQoJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCAnUnVu bmluZyBaSVAgY29tbWFuZDogJyAuICRjb21tYW5kICk7DQoJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3Nh Z2UnLCAnVGhpcyBtYXkgdGFrZSBhIG1vbWVudCAuIC4gLicgKTsNCgkJCQlleGVjKCAkdGhpcy0+X2V4 ZWNwYXRoIC4gJGNvbW1hbmQsICRleGVjX3JldHVybl9hLCAkZXhlY19yZXR1cm5fYiApOw0KCQkJCQkJ CQkNCgkJCQlpZiAoICggISBmaWxlX2V4aXN0cyggJGRlc3RpbmF0aW9uX2RpcmVjdG9yeSAuICd3cC1j b25maWcucGhwJyApICkgfHwgKCAkZXhlY19yZXR1cm5fYiAhPSAnJyApICkgeyAvLyBGaWxlIG5vdCBt YWRlIG9yIGVycm9yIHJldHVybmVkLg0KCQkJCS8vaWYgKCAkZXhlY19yZXR1cm5fYiAhPSAnJyApIHsg Ly8gRmlsZSBub3QgbWFkZSBvciBlcnJvciByZXR1cm5lZC4NCg0KCQkJCQkvLyBFUlJPUiBMSVNUOiBo dHRwOi8vd3d3Lm1rc3NvZnR3YXJlLmNvbS9kb2NzL21hbjEvdW56aXAuMS5hc3ANCgkJCQkJaWYgKCAk ZXhlY19yZXR1cm5fYiA9PSAnNTAnICkgew0KCQkJCQkJJHRoaXMtPnN0YXR1cyggJ2Vycm9yJywgICdU aGUgZGlzayBpcyAob3Igd2FzKSBmdWxsIGR1cmluZyBleHRyYWN0aW9uIDxiPk9SPC9iPiB0aGUgemlw L3VuemlwIGNvbW1hbmQgZG9lcyBub3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uIHRvIHlvdXIgZGlyZWN0 b3J5LiAgVHJ5IGluY3JlYXNpbmcgcGVybWlzc2lvbnMgZm9yIHRoZSBkaXJlY3RvcnkuJywgdHJ1ZSAp Ow0KCQkJCQl9DQoJCQkJCQ0KCQkJCQkNCgkJCQkJaWYgKCAhIGZpbGVfZXhpc3RzKCAnd3AtY29uZmln LnBocCcgKSApIHsNCgkJCQkJCSR0aGlzLT5zdGF0dXMoICdlcnJvcicsICAnd3AtY29uZmlnLnBocCBm aWxlIHdhcyBub3QgZm91bmQgYWZ0ZXIgZXh0cmFjdGlvbiB1c2luZyBoaWdoIHNwZWVkIG1vZGUuJyAp Ow0KCQkJCQl9DQoJCQkJCQ0KCQkJCQkNCgkJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3NhZ2UnLCAgJ0Zh bGxpbmcgYmFjayB0byBuZXh0IGNvbXBhdGlsYml0eSBtb2RlLicgKTsNCgkJCQl9IGVsc2Ugew0KCQkJ CQkkdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdGaWxlIGV4dHJhY3Rpb24gY29tcGxldGUuJyApOw0K CQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCWlmICggaW5fYXJyYXkoICd6aXBh cmNoaXZlJywgJHppcF9tZXRob2RzICkgKSB7DQoJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCAg J1N0YXJ0aW5nIG1lZGl1bSBzcGVlZCBleHRyYWN0aW9uICh6aXBhcmNoaXZlKS4uLiBUaGlzIG1heSB0 YWtlIGEgbW9tZW50Li4uJyApOw0KCQkJCQ0KCQkJCSR6aXAgPSBuZXcgWmlwQXJjaGl2ZTsNCgkJCQlp ZiAoICR6aXAtPm9wZW4oICR6aXBfZmlsZSApID09PSB0cnVlICkgew0KCQkJCQlpZiAoIHRydWUgPT09 ICR6aXAtPmV4dHJhY3RUbyggJGRlc3RpbmF0aW9uX2RpcmVjdG9yeSApICkgew0KCQkJCQkJJHRoaXMt PnN0YXR1cyggJ2RldGFpbHMnLCAgJ1ppcEFyY2hpdmUgZXh0cmFjdGlvbiBzdWNjZXNzLicgKTsNCgkJ CQkJCXJldHVybiB0cnVlOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJHRoaXMtPnN0YXR1cyggJ21lc3Nh Z2UnLCAgJ0Vycm9yOiBaaXBBcmNoaXZlIHdhcyBhdmFpbGFibGUgYnV0IGZhaWxlZCBleHRyYWN0aW5n IGZpbGVzLiAgRmFsbGluZyBiYWNrIHRvIG5leHQgY29tcGF0aWJpbGl0eSBtb2RlLicgKTsNCgkJCQkJ fQ0KCQkJCX0gZWxzZSB7DQoJCQkJCSR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgICdFcnJvcjogVW5h YmxlIHRvIG9wZW4gemlwIGZpbGUgdmlhIFppcEFyY2hpdmUuIEZhbGxpbmcgYmFjayB0byBuZXh0IGNv bXBhdGliaWxpdHkgbW9kZS4nICk7DQoJCQkJfQ0KCQkJCSR6aXAtPmNsb3NlKCk7DQoJCQl9DQoJCQkN CgkJCWlmICggaW5fYXJyYXkoICdwY2x6aXAnLCAkemlwX21ldGhvZHMgKSApIHsNCgkJCQkkdGhpcy0+ c3RhdHVzKCAnZGV0YWlscycsICAnU3RhcnRpbmcgbG93IHNwZWVkIGV4dHJhY3Rpb24gKHBjbHppcCku Li4gVGhpcyBtYXkgdGFrZSBhIG1vbWVudC4uLicgKTsNCgkJCQkNCgkJCQlpZiAoICFjbGFzc19leGlz dHMoICdQY2xaaXAnICkgKSB7DQoJCQkJCSRwY2x6aXBfZmlsZSA9IHN0cl9yZXBsYWNlKCAnL3ppcGJ1 ZGR5JywgJy9wY2x6aXAvcGNsemlwLnBocCcsIGRpcm5hbWUoIF9fRklMRV9fICkgKTsNCgkJCQkJaWYg KCBmaWxlX2V4aXN0cyggJHBjbHppcF9maWxlICkgKSB7DQoJCQkJCQlyZXF1aXJlX29uY2UoICRwY2x6 aXBfZmlsZSApOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCS8vcmVxdWlyZV9vbmNlKCBBQlNQQVRIIC4gJ3dw LWFkbWluL2luY2x1ZGVzL2NsYXNzLXBjbHppcC5waHAnICk7DQoJCQkJaWYgKCAhY2xhc3NfZXhpc3Rz KCAnUGNsWmlwJyApICkgew0KCQkJCQkkcGNsemlwX2ZpbGUgPSBzdHJfcmVwbGFjZSggJy96aXBidWRk eScsICcvcGNsemlwL3BjbHppcC5waHAnLCBkaXJuYW1lKCBfX0ZJTEVfXyApICk7DQoJCQkJCWlmICgg ZmlsZV9leGlzdHMoICRwY2x6aXBfZmlsZSApICkgew0KCQkJCQkJcmVxdWlyZV9vbmNlKCAkcGNsemlw X2ZpbGUgKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkYXJjaGl2ZSA9IG5ldyBQY2xaaXAoICR6aXBfZmls ZSApOw0KCQkJCSRyZXN1bHQgPSAkYXJjaGl2ZS0+ZXh0cmFjdCgpOyAvLyBFeHRyYWN0IHRvIGN1cnJl bnQgZGlyZWN0b3J5LiBFeHBsaWNpdHkgdXNpbmcgUENMWklQX09QVF9QQVRIIHJlc3VsdHMgaW4gZXh0 cmFjdGlvbiB0byBhIFBDTFpJUF9PUFRfUEFUSCBzdWJmb2xkZXIuDQoJCQkJDQoJCQkJaWYgKCAwID09

ICRyZXN1bHQgKSB7DQoJCQkJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgICdQQ0xaaXAgRmFpbHVy ZTogJyAuICRhcmNoaXZlLT5lcnJvckluZm8oIHRydWUgKSApOw0KCQkJCQkkdGhpcy0+c3RhdHVzKCAn bWVzc2FnZScsICAnTG93IHNwZWVkIChQQ0xaaXApIGV4dHJhY3Rpb24gZmFpbGVkLicsICRhcmNoaXZl LT5lcnJvckluZm8oIHRydWUgKSApOw0KCQkJCX0gZWxzZSB7DQoJCQkJCXJldHVybiB0cnVlOw0KCQkJ CX0NCgkJCX0NCgkJCQ0KCQkJLy8gTm90aGluZyBzdWNjZWVkZWQgaWYgd2UgbWFkZSBpdCB0aGlzIGZh ci4uLg0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCQ0KCQkNCgkJLy8gVGVzdCBhdmFpbGFiaWxpdHkg b2YgWmlwQXJjaGl2ZSBhbmQgdGhhdCBpdCBhY3R1YWxseSB3b3Jrcy4NCgkJZnVuY3Rpb24gdGVzdF96 aXBhcmNoaXZlKCkgew0KCQkJaWYgKCBjbGFzc19leGlzdHMoICdaaXBBcmNoaXZlJyApICkgew0KCQkJ CSR0ZXN0X2ZpbGUgPSAkdGhpcy0+X3RlbXBkaXIgLiAndGVtcF90ZXN0XycgLiB1bmlxaWQoKSAuICcu emlwJzsNCgkJCQkNCgkJCQkkemlwID0gbmV3IFppcEFyY2hpdmU7DQoJCQkJaWYgKCAkemlwLT5vcGVu KCAkdGVzdF9maWxlLCBaSVBBUkNISVZFOjpDUkVBVEUgfCBaSVBBUkNISVZFOjpPVkVSV1JJVEUgKSA9 PT0gdHJ1ZSApIHsNCgkJCQkJJHppcC0+YWRkRmlsZSggX19GSUxFX18sICd0aGlzX2lzX2FfdGVzdC50 eHQnKTsNCgkJCQkJJHppcC0+Y2xvc2UoKTsNCgkJCQkJaWYgKCBmaWxlX2V4aXN0cyggJHRlc3RfZmls ZSApICkgew0KCQkJCQkJdW5saW5rKCAkdGVzdF9maWxlICk7DQoJCQkJCQkkdGhpcy0+X3N0YXR1c1td ID0gX18oJ1ppcEFyY2hpdmUgdGVzdCBQQVNTRUQuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKTsNCgkJ CQkJCXJldHVybiB0cnVlOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJHRoaXMtPl9zdGF0dXNbXSA9IF9f KCdaaXBBcmNoaXZlIHRlc3QgRkFJTEVEOiBaaXAgZmlsZSBub3QgZm91bmQuJywgJ2l0LWwxMG4tYmFj a3VwYnVkZHknKTsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfQ0KCQkJCX0gZWxzZSB7DQoJCQkJ CSR0aGlzLT5fc3RhdHVzW10gPSBfXygnWmlwQXJjaGl2ZSB0ZXN0IEZBSUxFRDogVW5hYmxlIHRvIGNy ZWF0ZS9vcGVuIHppcCBmaWxlLicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5Jyk7DQoJCQkJCXJldHVybiBm YWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJDQoJCQ0KCQkvLyBUZXN0IGF2YWlsYWJpbGl0eSBvZiB6 aXAgbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hpY2ggZXhpc3QgYW5kIGFjdHVhbGx5IHdvcmsuDQoJCS8v ICRtb2RlCXN0cmluZwkJVmFsaWQgb3B0aW9uczogemlwLCB1bnppcA0KCQkvLwkJCQkJCQl0b2RvOiBh Y3R1YWxseSB0ZXN0IHVuemlwcGluZyBpbiB1bnppcCBtb2RlIG5vdCBqdXN0IHppcHBpbmcgYW5kIGFz c3VtaW5nIHRoZSBvdGhlciB3aWxsIHdvcmsNCgkJZnVuY3Rpb24gYXZhaWxhYmxlX3ppcF9tZXRob2Rz KCAkcmV0dXJuX2Jlc3QgPSB0cnVlLCAkbW9kZSA9ICd6aXAnICkgew0KCQkJJHJldHVybiA9IGFycmF5 KCk7DQoJCQkkdGVzdF9maWxlID0gJHRoaXMtPl90ZW1wZGlyIC4gJ3RlbXBfJyAuIHVuaXFpZCgpIC4g Jy56aXAnOw0KCQkJDQoJCQkvLyBUZXN0IGNvbW1hbmQtbGluZSBaSVAuDQoJCQlpZiAoIGZ1bmN0aW9u X2V4aXN0cyggJ2V4ZWMnICkgKSB7DQoJCQkJJGNvbW1hbmQgPSAnemlwJzsNCgkJCQkkcnVuX2V4ZWNf emlwX3Rlc3QgPSB0cnVlOw0KCQkJCQ0KCQkJCS8vIEhhbmRsZSB3aW5kb3dzLg0KCQkJCWlmICggc3Ry aXN0ciggUEhQX09TLCAnV0lOJyApICYmICFzdHJpc3RyKCBQSFBfT1MsICdEQVJXSU4nICkgKSB7IC8v IFJ1bm5pbmcgV2luZG93cy4gKG5vdCBkYXJ3aW4pDQoJCQkJCWlmICggZmlsZV9leGlzdHMoIEFCU1BB VEggLiAnemlwLmV4ZScgKSApIHsNCgkJCQkJCSRjb21tYW5kID0gQUJTUEFUSCAuICRjb21tYW5kOw0K CQkJCQl9DQoJCQkJCS8vIElmIHVuemlwIG1vZGUgYW5kIHVuemlwLmV4ZSBpcyBmb3VuZCB0aGVuIGFz c3VtZSB3ZSBoYXZlIHRoYXQgb3B0aW9uIGZvciB1bnppcHBpbmcgc2luY2Ugd2UgYXJlbnQgYWN0dWFs bHkgdGVzdGluZyB1bnppcC4NCgkJCQkJaWYgKCAkbW9kZSA9PSAndW56aXAnICkgew0KCQkJCQkJJHJ1 bl9leGVjX3ppcF90ZXN0ID0gZmFsc2U7DQoJCQkJCQlpZiAoIGZpbGVfZXhpc3RzKCBBQlNQQVRIIC4g J3VuemlwLmV4ZScgKSApIHsNCgkJCQkJCQlhcnJheV9wdXNoKCAkcmV0dXJuLCAnZXhlYycgKTsNCgkJ CQkJCX0NCgkJCQkJfQ0KCQkJCQkNCgkJCQkJJGV4ZWNfcGF0aHMgPSBhcnJheSggJycgKTsNCgkJCQl9 IGVsc2UgeyAvLyAqTklYIHN5c3RlbS4NCgkJCQkJJGV4ZWNfcGF0aHMgPSBhcnJheSggJycsICcvdXNy L2Jpbi8nLCAnL3Vzci9sb2NhbC9iaW4vJyApOyAvLyBJbmNsdWRlIHByZWNlZWRpbmcgJiB0cmFpbGlu ZyBzbGFzaC4NCgkJCQl9DQoJCQkJDQoJCQkJaWYgKCAkcnVuX2V4ZWNfemlwX3Rlc3QgPT09IHRydWUg KSB7DQoJCQkJCS8vIFBvc3NpYmxlIGxvY2F0aW9ucyB0byBmaW5kIHRoZSBaSVAgZXhlY3V0YWJsZS4g U3RhcnQgd2l0aCBhIGJsYW5rIHN0cmluZyB0byBhdHRlbXB0IHRvIHJ1biBpbiBjdXJyZW50IGRpcmVj dG9yeS4NCgkJCQkJDQoJCQkJCSRleGVjX2NvbXBsZXRpb24gPSBmYWxzZTsgLy8gZGVmYXVsdCBzdGF0 ZS4NCgkJCQkJd2hpbGUoICRleGVjX2NvbXBsZXRpb24gPT09IGZhbHNlICkgeyAvLyBDaGVjayBhbGwg cG9zc2libGUgemlwIHBhdGggbG9jYXRpb25zIHN0YXJ0aW5nIHdpdGggY3VycmVudCBkaXIuIFVzdWFs bHkgdGhlIHBhdGggaXMgc2V0IHRvIG1ha2UgdGhpcyB3b3JrIHdpdGhvdXQgaHVudGluZy4NCgkJCQkJ CWlmICggZW1wdHkoICRleGVjX3BhdGhzICkgKSB7DQoJCQkJCQkJJGV4ZWNfY29tcGxldGlvbiA9IHRy dWU7DQoJCQkJCQkJJHRoaXMtPnN0YXR1cyggJ2Vycm9yJywgX18oICdFeGhhdXN0ZWQgYWxsIGtub3du IGV4ZWMoKSBwYXRoIHBvc3NpYmlsaXRpZXMgd2l0aCBubyBzdWNjZXNzLicsICdpdC1sMTBuLWJhY2t1 cGJ1ZGR5JyApICk7DQoJCQkJCQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJCQkkcGF0aCA9IGFycmF5X3No aWZ0KCAkZXhlY19wYXRocyApOw0KCQkJCQkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCBfXyggJ1Ry eWluZyBleGVjKCkgWklQIHBhdGg6JywgJ2l0LWwxMG4tYmFja3VwYnVkZHknICkgLiAnIGAnIC4gJHBh dGggLiAnYC4nICk7DQoJCQkJCQkNCgkJCQkJCUBleGVjKCAkcGF0aCAuICRjb21tYW5kIC4gJyAiJyAu ICR0ZXN0X2ZpbGUgLiAnIiAiJyAuIF9fRklMRV9fIC4gJyInLCAkZXhlY19yZXR1cm5fYSwgJGV4ZWNf cmV0dXJuX2IgKTsNCgkJCQkJCQ0KCQkJCQkJaWYgKCAoICFmaWxlX2V4aXN0cyggJHRlc3RfZmlsZSAp ICkgfHwgKCAkZXhlY19yZXR1cm5fYiA9PSAnLTEnICkgKSB7IC8vIEZpbGUgbm90IG1hZGUgb3IgZXJy b3IgcmV0dXJuZWQuDQoJCQkJCQkJJGV4ZWNfY29tcGxldGlvbiA9IGZhbHNlOw0KCQkJCQkJCQ0KCQkJ CQkJCWlmICggJGV4ZWNfcmV0dXJuX2IgPT0gJy0xJyApIHsNCgkJCQkJCQkJJHRoaXMtPnN0YXR1cygg

J2RldGFpbHMnLCBfXyggJ0V4ZWMgY29tbWFuZCByZXR1cm5lZCAtMS4nLCAnaXQtbDEwbi1iYWNrdXBi dWRkeScgKSApOw0KCQkJCQkJCX0NCgkJCQkJCQlpZiAoICFmaWxlX2V4aXN0cyggJHRlc3RfZmlsZSAp ICkgew0KCQkJCQkJCQkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsIF9fKCAnRXhlYyBjb21tYW5kIHJh biBidXQgWklQIGZpbGUgZGlkIG5vdCBleGlzdC4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScgKSApOw0K CQkJCQkJCX0NCgkJCQkJCQlpZiAoIGZpbGVfZXhpc3RzKCAkdGVzdF9maWxlICkgKSB7IC8vIElmIGZp bGUgd2FzIHNvbWVob3cgY3JlYXRlZCwgZG8gY2xlYW51cCBvbiBpdC4NCgkJCQkJCQkJJHRoaXMtPnN0 YXR1cyggJ2RldGFpbHMnLCBfXyggJ0NsZWFuaW5nIHVwIGRhbWFnZWQgWklQIGZpbGUuIElzc3VlICMz NDg5MzI4OTk4LicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApICk7DQoJCQkJCQkJCXVubGluayggJHRl c3RfZmlsZSApOw0KCQkJCQkJCX0NCgkJCQkJCX0gZWxzZSB7IC8vIFN1Y2Nlc3MuDQoJCQkJCQkJJGV4 ZWNfY29tcGxldGlvbiA9IHRydWU7DQoJCQkJCQkJDQoJCQkJCQkJaWYgKCAhdW5saW5rKCAkdGVzdF9m aWxlICkgKSB7DQoJCQkJCQkJCWVjaG8gc3ByaW50ZiggX18oICdFcnJvciAjNTY0NjM0LiBVbmFibGUg dG8gZGVsZXRlIHRlc3QgZmlsZSAoJXMpIScsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyApLCAkdGVzdF9m aWxlICk7DQoJCQkJCQkJfQ0KCQkJCQkJCWFycmF5X3B1c2goICRyZXR1cm4sICdleGVjJyApOw0KCQkJ CQkJCSR0aGlzLT5fZXhlY3BhdGggPSAkcGF0aDsNCgkJCQkJCQkNCgkJCQkJCQlicmVhazsNCgkJCQkJ CX0NCgkJCQkJfSAvLyBlbmQgd2hpbGUNCgkJCQl9IC8vIEVuZCAkcnVuX2V4ZWNfdGVzdCA9PT0gdHJ1 ZS4NCgkJCX0gLy8gRW5kIGZ1bmN0aW9uX2V4aXN0cyggJ2V4ZWMnICkuDQoJCQkNCgkJCS8vIFRlc3Qg WmlwQXJjaGl2ZQ0KCQkJaWYgKCBjbGFzc19leGlzdHMoICdaaXBBcmNoaXZlJyApICkgew0KCQkJCWlm ICggJHRoaXMtPnRlc3RfemlwYXJjaGl2ZSgpID09PSB0cnVlICkgew0KCQkJCQlhcnJheV9wdXNoKCAk cmV0dXJuLCAnemlwYXJjaGl2ZScgKTsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCS8vIFRlc3QgUENMWmlw DQoJCQlhcnJheV9wdXNoKCAkcmV0dXJuLCAncGNsemlwJyApOw0KCQkJDQoJCQlyZXR1cm4gJHJldHVy bjsNCgkJfQ0KCQkNCgkJDQoJCS8vIFJlY3Vyc2l2ZWx5IGRlbGV0ZSBhIGRpcmVjdG9yeSBhbmQgYWxs IGNvbnRlbnQgd2l0aGluLg0KCQlmdW5jdGlvbiBkZWxldGVfZGlyZWN0b3J5X3JlY3Vyc2l2ZSggJGRp cmVjdG9yeSApIHsNCgkJCSRkaXJlY3RvcnkgPSBwcmVnX3JlcGxhY2UoICd8Wy9cXFxcXSskfCcsICcn LCAkZGlyZWN0b3J5ICk7DQoJCQkNCgkJCSRmaWxlcyA9IGdsb2IoICRkaXJlY3RvcnkgLiAnLyonLCBH TE9CX01BUksgKTsNCgkJCWlmICggaXNfYXJyYXkoICRmaWxlcyApICYmICFlbXB0eSggJGZpbGVzICkg KSB7DQoJCQkJZm9yZWFjaCggJGZpbGVzIGFzICRmaWxlICkgew0KCQkJCQlpZiggJy8nID09PSBzdWJz dHIoICRmaWxlLCAtMSApICkNCgkJCQkJCSR0aGlzLT5ybWRpcl9yZWN1cnNpdmUoICRmaWxlICk7DQoJ CQkJCWVsc2UNCgkJCQkJCXVubGluayggJGZpbGUgKTsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCWlmICgg aXNfZGlyKCAkZGlyZWN0b3J5ICkgKSBybWRpciggJGRpcmVjdG9yeSApOw0KCQkJDQoJCQlpZiAoIGlz X2RpciggJGRpcmVjdG9yeSApICkNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJ fQ0KCQkNCgkJDQoJCWZ1bmN0aW9uIGNsZWFyX3N0YXR1cygpIHsNCgkJCSR0aGlzLT5fc3RhdHVzID0g YXJyYXkoKTsNCgkJfQ0KCQkNCgkJDQoJCWZ1bmN0aW9uIHN0YXR1cygpIHsNCgkJCWlmICggIWVtcHR5 KCAkdGhpcy0+X3N0YXR1c19mdW5jdGlvbiApICkgew0KCQkJCSRhcmdzID0gZnVuY19nZXRfYXJncygp Ow0KCQkJCWNhbGxfdXNlcl9mdW5jX2FycmF5KCAkdGhpcy0+X3N0YXR1c19mdW5jdGlvbiwgJGFyZ3Mg KTsNCgkJCX0NCgkJfQ0KCQkNCgkJDQoJCS8qKg0KCQkgKglzZXRfc3RhdHVzX2NhbGxiYWNrKCkNCgkJ ICoNCgkJICoJU2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBz dGF0dXMgdXBkYXRlLg0KCQkgKg0KCQkgKgkkY2FsbGJhY2sJcmVmZXJlbmNlCVJlZmVyZW5jZSB0byBm dW5jdGlvbiB0byBjYWxsIGZvciBzdGF0dXMgdXBkYXRlcy4NCgkJICoJCQkJCQkJRXg6ICR0aGlzLT5f emlwYnVkZHktPnNldF9zdGF0dXNfY2FsbGJhY2soIGFycmF5KCAmJHRoaXMsICdzdGF0dXMnICkgKTsN CgkJICoJQHJldHVybgkJbnVsbA0KCQkgKg0KCQkgKi8NCgkJZnVuY3Rpb24gc2V0X3N0YXR1c19jYWxs YmFjayggJGNhbGxiYWNrICkgew0KCQkJJHRoaXMtPl9zdGF0dXNfZnVuY3Rpb24gPSAkY2FsbGJhY2s7 DQoJCX0NCgkJDQoJCQ0KCQlmdW5jdGlvbiBzZXRfemlwX21ldGhvZHMoICRtZXRob2RzICkgew0KCQkJ JHRoaXMtPl96aXBfbWV0aG9kcyA9ICRtZXRob2RzOw0KCQl9DQoJCQ0KCX0gLy8gRW5kIGNsYXNzDQoJ DQoJLy8kcGx1Z2luYnVkZHlfemlwYnVkZHkgPSBuZXcgcGx1Z2luYnVkZHlfemlwYnVkZHkoICR0aGlz LT5fb3B0aW9uc1snYmFja3VwX2RpcmVjdG9yeSddICk7DQp9DQo/Pg== ###PACKDATA,FILE_END,/lib/zipbuddy/zipbuddy.php,importbuddy/lib/zipbuddy/zipbudd y.php ###PACKDATA,FILE_START,/classes/view_tools-server.php,importbuddy/classes/view_t ools-server.php PD9waHANCmlmICggIWlzc2V0KCAkcGFyZW50X2NsYXNzICkgKSB7DQoJJHBhcmVudF9jbGFzcyA9ICR0 aGlzOw0KfQ0KLyoNCiAqCUlNUE9SVEFOVCBOT1RFOg0KICoNCiAqCVRoaXMgZmlsZSBpcyBzaGFyZWQg YmV0d2VlbiBtdWx0aXBsZSBwcm9qZWN0cyAvIHB1cnBvc2VzOg0KICoJCSsgQmFja3VwQnVkZHkgKHRo aXMgcGx1Z2luKSBTZXJ2ZXIgSW5mbyBwYWdlLg0KICoJCSsgSW1wb3J0QnVkZHkucGhwIChCYWNrdXBC dWRkeSBpbXBvcnRlcikgU2VydmVyIEluZm9ybWF0aW9uIGJ1dHRvbiBkcm9wZG93biBkaXNwbGF5Lg0K ICoJCSsgU2VydmVyQnVkZHkgKHBsdWdpbikNCiAqDQogKglVc2UgY2F1dGlvbiB3aGVuIHVwZGF0ZWQg dG8gcHJldmVudCBicmVha2luZyBvdGhlciBwcm9qZWN0cy4NCiAqDQogKi8NCg0KDQovLyBpbmlfZ2V0 X2Jvb2woKSBjcmVkaXQ6IG5pY29sYXMgZG90IGdyZWthcytwaHAgYXQgZ21haWwgZG90IGNvbQ0KZnVu Y3Rpb24gaW5pX2dldF9ib29sKCAkYSApIHsNCgkkYiA9IGluaV9nZXQoJGEpOw0KCXN3aXRjaCAoc3Ry dG9sb3dlcigkYikpIHsNCgkJY2FzZSAnb24nOg0KCQljYXNlICd5ZXMnOg0KCQljYXNlICd0cnVlJzoN CgkJCXJldHVybiAnYXNzZXJ0LmFjdGl2ZScgIT09ICRhOw0KCQkJDQoJCWNhc2UgJ3N0ZG91dCc6DQoJ

CWNhc2UgJ3N0ZGVycic6DQoJCQlyZXR1cm4gJ2Rpc3BsYXlfZXJyb3JzJyA9PT0gJGE7DQoJCQkNCgkJ ZGVmYXVsdDoNCgkJCXJldHVybiAoYm9vbCkgKGludCkgJGI7DQoJfQ0KfQ0KCQ0KCSR0ZXN0cyA9IGFy cmF5KCk7DQoJDQoJDQoJLy8gU2tpcCB0aGVzZSB0ZXN0cyBpbiBpbXBvcnRidWRkeS4NCglpZiAoICFk ZWZpbmVkKCAncGx1Z2luYnVkZHlfaW1wb3J0YnVkZHknICkgKSB7DQoJCS8vIFdPUkRQUkVTUyBWRVJT SU9ODQoJCWdsb2JhbCAkd3BfdmVyc2lvbjsNCgkJJHBhcmVudF9jbGFzc190ZXN0ID0gYXJyYXkoDQoJ CQkJCQkndGl0bGUnCQkJPT4JCSdXb3JkUHJlc3MgVmVyc2lvbicsDQoJCQkJCQknc3VnZ2VzdGlvbicJ PT4JCSc+PSAnIC4gJHBhcmVudF9jbGFzcy0+X3BhcmVudC0+X3dwX21pbmltdW0sDQoJCQkJCQkndmFs dWUnCQkJPT4JCSR3cF92ZXJzaW9uLA0KCQkJCQkJJ3RpcCcJCQk9PgkJX18oJ1ZlcnNpb24gb2YgV29y ZFByZXNzIGN1cnJlbnRseSBydW5uaW5nLiBJdCBpcyBpbXBvcnRhbnQgdG8ga2VlcCB5b3VyIFdvcmRQ cmVzcyB1cCB0byBkYXRlIGZvciBzZWN1cml0eSAmIGZlYXR1cmVzLicsICdpdC1sMTBuLWJhY2t1cGJ1 ZGR5JyksDQoJCQkJCSk7DQoJCWlmICggdmVyc2lvbl9jb21wYXJlKCAkd3BfdmVyc2lvbiwgJHBhcmVu dF9jbGFzcy0+X3BhcmVudC0+X3dwX21pbmltdW0sICc8PScgKSApIHsNCgkJCSRwYXJlbnRfY2xhc3Nf dGVzdFsnc3RhdHVzJ10gPSBfXygnRkFJTCcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5Jyk7DQoJCX0gZWxz ZSB7DQoJCQkkcGFyZW50X2NsYXNzX3Rlc3RbJ3N0YXR1cyddID0gX18oJ09LJywgJ2l0LWwxMG4tYmFj a3VwYnVkZHknKTsNCgkJfQ0KCQlhcnJheV9wdXNoKCAkdGVzdHMsICRwYXJlbnRfY2xhc3NfdGVzdCAp Ow0KCQ0KCQkvLyBNWVNRTCBWRVJTSU9ODQoJCWdsb2JhbCAkd3BkYjsNCgkJJHBhcmVudF9jbGFzc190 ZXN0ID0gYXJyYXkoDQoJCQkJCQkndGl0bGUnCQkJPT4JCSdNeVNRTCBWZXJzaW9uJywNCgkJCQkJCSdz dWdnZXN0aW9uJwk9PgkJJz49IDUuMC4xNScsDQoJCQkJCQkndmFsdWUnCQkJPT4JCSR3cGRiLT5kYl92 ZXJzaW9uKCksDQoJCQkJCQkndGlwJwkJCT0+CQlfXygnVmVyc2lvbiBvZiB5b3VyIGRhdGFiYXNlIHNl cnZlciAobXlzcWwpIGFzIHJlcG9ydGVkIHRvIHRoaXMgc2NyaXB0IGJ5IFdvcmRQcmVzcy4nLCAnaXQt bDEwbi1iYWNrdXBidWRkeScpLA0KCQkJCQkpOw0KCQlpZiAoIHZlcnNpb25fY29tcGFyZSggJHdwZGIt PmRiX3ZlcnNpb24oKSwgJzUuMC4xNScsICc8PScgKSApIHsNCgkJCSRwYXJlbnRfY2xhc3NfdGVzdFsn c3RhdHVzJ10gPSBfXygnRkFJTCcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5Jyk7DQoJCX0gZWxzZSB7DQoJ CQkkcGFyZW50X2NsYXNzX3Rlc3RbJ3N0YXR1cyddID0gX18oJ09LJywgJ2l0LWwxMG4tYmFja3VwYnVk ZHknKTsNCgkJfQ0KCQlhcnJheV9wdXNoKCAkdGVzdHMsICRwYXJlbnRfY2xhc3NfdGVzdCApOw0KCQkN CgkJDQoJCQkvLyBBRERIQU5ETEVSIEhUQUNDRVNTIENIRUNLDQoJCQkkcGFyZW50X2NsYXNzX3Rlc3Qg PSBhcnJheSgNCgkJCQkJCQkndGl0bGUnCQkJPT4JCSdBZGRIYW5kbGVyIGluIC5odGFjY2VzcycsDQoJ CQkJCQkJJ3N1Z2dlc3Rpb24nCT0+CQknaG9zdCBkZXBlbmRhbnQnLA0KCQkJCQkJCSd0aXAnCQkJPT4J CV9fKCdJZiBkZXRlY3RlZCB0aGVuIHlvdSBtYXkgaGF2ZSBkaWZmaWN1bHR5IG1pZ3JhdGluZyB5b3Vy IHNpdGUgdG8gc29tZSBob3N0cyB3aXRob3V0IGZpcnN0IHJlbW92aW5nIHRoZSBBZGRIYW5kbGVyIGxp bmUuIFNvbWUgaG9zdHMgd2lsbCBtYWxmdW5jdGlvbiB3aXRoIHRoaXMgbGluZSBpbiB0aGUgLmh0YWNj ZXNzIGZpbGUuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSwNCgkJCQkJCSk7DQoJCQlpZiAoIGZpbGVf ZXhpc3RzKCBBQlNQQVRIIC4gJy5odGFjY2VzcycgKSApIHsNCgkJCQkkYWRkaGFuZGxlcl9ub3RlID0g Jyc7DQoJCQkJJGh0YWNjZXNzX2xpbmVzID0gZmlsZSggQUJTUEFUSCAuICcuaHRhY2Nlc3MnICk7DQoJ CQkJZm9yZWFjaCAoICRodGFjY2Vzc19saW5lcyBhcyAkaHRhY2Nlc3NfbGluZSApIHsNCgkJCQkJaWYg KCBwcmVnX21hdGNoKCAnL14oXHMqKUFkZEhhbmRsZXIoLiopL2knLCAkaHRhY2Nlc3NfbGluZSwgJG1h dGNoZXMgKSA+IDAgKSB7DQoJCQkJCQkkYWRkaGFuZGxlcl9ub3RlID0gJHBhcmVudF9jbGFzcy0+dGlw KCBodG1sZW50aXRpZXMoICRtYXRjaGVzWzBdICksIF9fKCAnQWRkSGFuZGxlciBWYWx1ZScsICdpdC1s MTBuLWJhY2t1cGJ1ZGR5JyApLCBmYWxzZSApOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXVuc2V0KCAkaHRh Y2Nlc3NfbGluZXMgKTsNCgkJCQkNCgkJCQlpZiAoICRhZGRoYW5kbGVyX25vdGUgPT0gJycgKSB7DQoJ CQkJCSRwYXJlbnRfY2xhc3NfdGVzdFsnc3RhdHVzJ10gPSBfXygnT0snLCAnaXQtbDEwbi1iYWNrdXBi dWRkeScpOw0KCQkJCQkkcGFyZW50X2NsYXNzX3Rlc3RbJ3ZhbHVlJ10gPSBfXygnbi9hJywgJ2l0LWwx MG4tYmFja3VwYnVkZHknKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkcGFyZW50X2NsYXNzX3Rlc3RbJ3N0 YXR1cyddID0gX18oJ1dBUk5JTkcnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCQkJCQkkcGFyZW50 X2NsYXNzX3Rlc3RbJ3ZhbHVlJ10gPSBfXygnZXhpc3RzJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSAu ICRhZGRoYW5kbGVyX25vdGU7DQoJCQkJfQ0KCQkJCXVuc2V0KCAkaHRhY2Nlc3NfY29udGVudHMgKTsN CgkJCX0gZWxzZSB7DQoJCQkJJHBhcmVudF9jbGFzc190ZXN0WydzdGF0dXMnXSA9IF9fKCdPSycsICdp dC1sMTBuLWJhY2t1cGJ1ZGR5Jyk7DQoJCQkJJHBhcmVudF9jbGFzc190ZXN0Wyd2YWx1ZSddID0gX18o J24vYScsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5Jyk7DQoJCQl9DQoJCQlhcnJheV9wdXNoKCAkdGVzdHMs ICRwYXJlbnRfY2xhc3NfdGVzdCApOw0KCQkNCgkJDQoJCS8vIFpJUCBNRVRIT0RTDQoJCWlmICggJHBh cmVudF9jbGFzcy0+X3ZhciA9PSAncGx1Z2luYnVkZHlfYmFja3VwYnVkZHknICkgew0KCQkJaWYgKCAh ZmlsZV9leGlzdHMoICRwYXJlbnRfY2xhc3MtPl9vcHRpb25zWydiYWNrdXBfZGlyZWN0b3J5J10gKSAp IHsNCgkJCQlpZiAoICRwYXJlbnRfY2xhc3MtPl9wYXJlbnQtPm1rZGlyX3JlY3Vyc2l2ZSggJHBhcmVu dF9jbGFzcy0+X29wdGlvbnNbJ2JhY2t1cF9kaXJlY3RvcnknXSApID09PSBmYWxzZSApIHsNCgkJCQkJ JHBhcmVudF9jbGFzcy0+YWxlcnQoIHNwcmludGYoIF9fKCdVbmFibGUgdG8gY3JlYXRlIGJhY2t1cCBz dG9yYWdlIGRpcmVjdG9yeSAoJXMpJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSAsICRwYXJlbnRfY2xh c3MtPl9vcHRpb25zWydiYWNrdXBfZGlyZWN0b3J5J10gKSwgdHJ1ZSwgJzkwMDInICk7DQoJCQkJCXJl dHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJDQoJCS8vIFNldCB1cCBaaXBCdWRkeSB3aGVu IHdpdGhpbiBCYWNrdXBCdWRkeQ0KCQlyZXF1aXJlX29uY2UoICRwYXJlbnRfY2xhc3MtPl9wbHVnaW5Q YXRoIC4gJy9saWIvemlwYnVkZHkvemlwYnVkZHkucGhwJyApOw0KCQkkcGFyZW50X2NsYXNzLT5femlw

YnVkZHkgPSBuZXcgcGx1Z2luYnVkZHlfemlwYnVkZHkoICRwYXJlbnRfY2xhc3MtPl9vcHRpb25zWydi YWNrdXBfZGlyZWN0b3J5J10gKTsNCgl9IGVsc2Ugew0KCQkvLyBTZXQgdXAgWmlwQnVkZHkgd2hlbiB3 aXRoaW4gaW1wb3J0YnVkZHkNCgkJaWYgKCBmaWxlX2V4aXN0cyggQUJTUEFUSCAuICcvaW1wb3J0YnVk ZHkvbGliL3ppcGJ1ZGR5L3ppcGJ1ZGR5LnBocCcgKSApIHsNCgkJCXJlcXVpcmVfb25jZSggQUJTUEFU SCAuICcvaW1wb3J0YnVkZHkvbGliL3ppcGJ1ZGR5L3ppcGJ1ZGR5LnBocCcgKTsNCgkJfSBlbHNlaWYg KCBmaWxlX2V4aXN0cyggQUJTUEFUSCAuICcvcmVwYWlyYnVkZHkvbGliL3ppcGJ1ZGR5L3ppcGJ1ZGR5 LnBocCcgKSApIHsNCgkJCXJlcXVpcmVfb25jZSggQUJTUEFUSCAuICcvcmVwYWlyYnVkZHkvbGliL3pp cGJ1ZGR5L3ppcGJ1ZGR5LnBocCcgKTsNCgkJfSBlbHNlIHsNCgkJCWRpZSggJ0Vycm9yICMzODM5ODk0 NzkzNzk0OTcuIFVuYWJsZSB0byBsb2FkIHppcGJ1ZGR5IGxpYnJhcnkuJyApOw0KCQl9DQoJCSRwYXJl bnRfY2xhc3MtPl96aXBidWRkeSA9IG5ldyBwbHVnaW5idWRkeV96aXBidWRkeSggQUJTUEFUSCwgJycs ICd1bnppcCcgKTsNCgl9DQoJDQoJDQoJLy8gUEhQIFZFUlNJT04NCglpZiAoICFkZWZpbmVkKCAncGx1 Z2luYnVkZHlfaW1wb3J0YnVkZHknICkgKSB7DQoJCSRwaHBfbWluaW11bSA9ICRwYXJlbnRfY2xhc3Mt Pl9wYXJlbnQtPl9waHBfbWluaW11bTsNCgl9IGVsc2UgeyAvLyBpbXBvcnRidWRkeSB2YWx1ZS4NCgkJ JHBocF9taW5pbXVtID0gJHBhcmVudF9jbGFzcy0+X3BocF9taW5pbXVtOw0KCX0NCgkkcGFyZW50X2Ns YXNzX3Rlc3QgPSBhcnJheSgNCgkJCQkJJ3RpdGxlJwkJCT0+CQknUEhQIFZlcnNpb24nLA0KCQkJCQkn c3VnZ2VzdGlvbicJPT4JCSc+PSAnIC4gJHBocF9taW5pbXVtLA0KCQkJCQkndmFsdWUnCQkJPT4JCXBo cHZlcnNpb24oKSwNCgkJCQkJJ3RpcCcJCQk9PgkJX18oJ1ZlcnNpb24gb2YgUEhQIGN1cnJlbnRseSBy dW5uaW5nIG9uIHRoaXMgc2l0ZS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpLA0KCQkJCSk7DQoJaWYg KCB2ZXJzaW9uX2NvbXBhcmUoIFBIUF9WRVJTSU9OLCAkcGhwX21pbmltdW0sICc8PScgKSApIHsNCgkJ JHBhcmVudF9jbGFzc190ZXN0WydzdGF0dXMnXSA9IF9fKCdGQUlMJywgJ2l0LWwxMG4tYmFja3VwYnVk ZHknKTsNCgl9IGVsc2Ugew0KCQkkcGFyZW50X2NsYXNzX3Rlc3RbJ3N0YXR1cyddID0gX18oJ09LJywg J2l0LWwxMG4tYmFja3VwYnVkZHknKTsNCgl9DQoJYXJyYXlfcHVzaCggJHRlc3RzLCAkcGFyZW50X2Ns YXNzX3Rlc3QgKTsNCgkNCgkNCgkvLyBQSFAgbWF4X2V4ZWN1dGlvbl90aW1lDQoJJHBhcmVudF9jbGFz c190ZXN0ID0gYXJyYXkoDQoJCQkJCSd0aXRsZScJCQk9PgkJJ1BIUCBtYXhfZXhlY3V0aW9uX3RpbWUn LA0KCQkJCQknc3VnZ2VzdGlvbicJPT4JCSc+PSAnIC4gJzMwIChzZWNvbmRzKScsDQoJCQkJCSd2YWx1 ZScJCQk9PgkJaW5pX2dldCggJ21heF9leGVjdXRpb25fdGltZScgKSwNCgkJCQkJJ3RpcCcJCQk9PgkJ X18oJ01heGltdW0gYW1vdW50IG9mIHRpbWUgdGhhdCBQSFAgYWxsb3dzIHNjcmlwdHMgdG8gcnVuLiBB ZnRlciB0aGlzIGxpbWl0IGlzIHJlYWNoZWQgdGhlIHNjcmlwdCBpcyBraWxsZWQuIFRoZSBtb3JlIHRp bWUgYXZhaWxhYmxlIHRoZSBiZXR0ZXIuIDMwIHNlY29uZHMgaXMgbW9zdCBjb21tb24gdGhvdWdoIDYw IHNlY29uZHMgaXMgaWRlYWwuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSwNCgkJCQkpOw0KCWlmICgg c3RyX2lyZXBsYWNlKCAncycsICcnLCBpbmlfZ2V0KCAnbWF4X2V4ZWN1dGlvbl90aW1lJyApICkgPCAz MCApIHsNCgkJJHBhcmVudF9jbGFzc190ZXN0WydzdGF0dXMnXSA9IF9fKCdXQVJOSU5HJywgJ2l0LWwx MG4tYmFja3VwYnVkZHknKTsNCgl9IGVsc2Ugew0KCQkkcGFyZW50X2NsYXNzX3Rlc3RbJ3N0YXR1cydd ID0gX18oJ09LJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKTsNCgl9DQoJYXJyYXlfcHVzaCggJHRlc3Rz LCAkcGFyZW50X2NsYXNzX3Rlc3QgKTsNCgkNCgkNCgkkcGFyZW50X2NsYXNzX3Rlc3QgPSBhcnJheSgN CgkJCQkJJ3RpdGxlJwkJCT0+CQknWmlwIE1ldGhvZHMnLA0KCQkJCQknc3VnZ2VzdGlvbicJPT4JCSdl eGVjIChiZXN0KSA+IHppcGFyY2hpdmUgPiBwY2x6aXAgKHdvcnN0KScsDQoJCQkJCSd2YWx1ZScJCQk9 PgkJaW1wbG9kZSggJywgJywgJHBhcmVudF9jbGFzcy0+X3ppcGJ1ZGR5LT5femlwX21ldGhvZHMgKSwN CgkJCQkJJ3RpcCcJCQk9PgkJX18oJ01ldGhvZHMgeW91ciBzZXJ2ZXIgc3VwcG9ydHMgZm9yIGNyZWF0 aW5nIFpJUCBmaWxlcy4gVGhlc2Ugd2VyZSB0ZXN0ZWQgJiB2ZXJpZmllZCB0byBvcGVyYXRlLicsICdp dC1sMTBuLWJhY2t1cGJ1ZGR5JyksDQoJCQkJKTsNCglpZiAoIGluX2FycmF5KCAnZXhlYycsICRwYXJl bnRfY2xhc3MtPl96aXBidWRkeS0+X3ppcF9tZXRob2RzICkgKSB7DQoJCSRwYXJlbnRfY2xhc3NfdGVz dFsnc3RhdHVzJ10gPSBfXygnT0snLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCX0gZWxzZSB7DQoJ CSRwYXJlbnRfY2xhc3NfdGVzdFsnc3RhdHVzJ10gPSBfXygnV0FSTklORycsICdpdC1sMTBuLWJhY2t1 cGJ1ZGR5Jyk7DQoJfQ0KCWFycmF5X3B1c2goICR0ZXN0cywgJHBhcmVudF9jbGFzc190ZXN0ICk7DQoJ DQoJDQoJLy8gUkVHSVNURVIgR0xPQkFMUw0KCSRkaXNhYmxlZF9mdW5jdGlvbnMgPSBpbmlfZ2V0KCAn ZGlzYWJsZV9mdW5jdGlvbnMnICk7DQoJaWYgKCAkZGlzYWJsZWRfZnVuY3Rpb25zID09ICcnICkgew0K CQkkZGlzYWJsZWRfZnVuY3Rpb25zID0gJzxpPihub25lKTwvaT4nOw0KCX0NCgkkcGFyZW50X2NsYXNz X3Rlc3QgPSBhcnJheSgNCgkJCQkJJ3RpdGxlJwkJCT0+CQknRGlzYWJsZWQgUEhQIEZ1bmN0aW9ucycs DQoJCQkJCSdzdWdnZXN0aW9uJwk9PgkJJ04vQScsDQoJCQkJCSd2YWx1ZScJCQk9PgkJJGRpc2FibGVk X2Z1bmN0aW9ucywNCgkJCQkJJ3RpcCcJCQk9PgkJX18oJ1NvbWUgaG9zdHMgYmxvY2sgY2VydGFpbiBQ SFAgZnVuY3Rpb25zIGZvciB2YXJpb3VzIHJlYXNvbnMuIFNvbWV0aW1lcyBob3N0cyBibG9jayBmdW5j dGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHByb3BlciBmdW5jdGlvbmluZyBvZiBXb3JkUHJlc3Mg b3IgcGx1Z2lucy4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpLA0KCQkJCSk7DQoJJGRpc2FibGVkX2Z1 bmN0aW9uc19hcnJheSA9IGV4cGxvZGUoICcsICcsICRkaXNhYmxlZF9mdW5jdGlvbnMgKTsNCgkkcGFy ZW50X2NsYXNzX3Rlc3RbJ3N0YXR1cyddID0gX18oJ09LJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKTsN CglpZiAoDQoJCSggdHJ1ZSA9PT0gaW5fYXJyYXkoICdleGVjJywgJGRpc2FibGVkX2Z1bmN0aW9uc19h cnJheSApICkNCgkJfHwNCgkJKCB0cnVlID09PSBpbl9hcnJheSggJ2luaV9zZXQnLCAkZGlzYWJsZWRf ZnVuY3Rpb25zX2FycmF5ICkgKQ0KCQkpIHsNCgkJJHBhcmVudF9jbGFzc190ZXN0WydzdGF0dXMnXSA9 IF9fKCdGQUlMJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKTsNCgl9DQoJYXJyYXlfcHVzaCggJHRlc3Rz

LCAkcGFyZW50X2NsYXNzX3Rlc3QgKTsNCgkNCgkNCgkvLyBSRUdJU1RFUiBHTE9CQUxTDQoJaWYgKCBp bmlfZ2V0X2Jvb2woICdyZWdpc3Rlcl9nbG9iYWxzJyApID09PSB0cnVlICkgew0KCQkkcGFyZW50X2Ns YXNzX3ZhbCA9ICdlbmFibGVkJzsNCgl9IGVsc2Ugew0KCQkkcGFyZW50X2NsYXNzX3ZhbCA9ICdkaXNh YmxlZCc7DQoJfQ0KCSRwYXJlbnRfY2xhc3NfdGVzdCA9IGFycmF5KA0KCQkJCQkndGl0bGUnCQkJPT4J CSdQSFAgUmVnaXN0ZXIgR2xvYmFscycsDQoJCQkJCSdzdWdnZXN0aW9uJwk9PgkJJ2Rpc2FibGVkJywN CgkJCQkJJ3ZhbHVlJwkJCT0+CQkkcGFyZW50X2NsYXNzX3ZhbCwNCgkJCQkJJ3RpcCcJCQk9PgkJX18o J0F1dG9tYXRpY2FsbHkgcmVnaXN0ZXJzIHVzZXIgaW5wdXQgYXMgdmFyaWFibGVzLiBISUdITFkgZGlz Y291cmFnZWQuIFJlbW92ZWQgZnJvbSBQSFAgaW4gUEhQIDYgZm9yIHNlY3VyaXR5LicsICdpdC1sMTBu LWJhY2t1cGJ1ZGR5JyksDQoJCQkJKTsNCglpZiAoICRwYXJlbnRfY2xhc3NfdmFsICE9ICdkaXNhYmxl ZCcgKSB7DQoJCSRwYXJlbnRfY2xhc3NfdGVzdFsnc3RhdHVzJ10gPSBfXygnRkFJTCcsICdpdC1sMTBu LWJhY2t1cGJ1ZGR5Jyk7DQoJfSBlbHNlIHsNCgkJJHBhcmVudF9jbGFzc190ZXN0WydzdGF0dXMnXSA9 IF9fKCdPSycsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5Jyk7DQoJfQ0KCWFycmF5X3B1c2goICR0ZXN0cywg JHBhcmVudF9jbGFzc190ZXN0ICk7DQoJDQoJLy8gTUFHSUMgUVVPVEVTIEdQQw0KCWlmICggaW5pX2dl dF9ib29sKCAnbWFnaWNfcXVvdGVzX2dwYycgKSA9PT0gdHJ1ZSApIHsNCgkJJHBhcmVudF9jbGFzc192 YWwgPSAnZW5hYmxlZCc7DQoJfSBlbHNlIHsNCgkJJHBhcmVudF9jbGFzc192YWwgPSAnZGlzYWJsZWQn Ow0KCX0NCgkkcGFyZW50X2NsYXNzX3Rlc3QgPSBhcnJheSgNCgkJCQkJJ3RpdGxlJwkJCT0+CQknUEhQ IE1hZ2ljIFF1b3RlcyBHUEMnLA0KCQkJCQknc3VnZ2VzdGlvbicJPT4JCSdkaXNhYmxlZCcsDQoJCQkJ CSd2YWx1ZScJCQk9PgkJJHBhcmVudF9jbGFzc192YWwsDQoJCQkJCSd0aXAnCQkJPT4JCV9fKCdBdXRv bWF0aWNhbGx5IGVzY2FwZXMgdXNlciBpbnB1dHRlZCBkYXRhLiBOb3QgbmVlZGVkIHdoZW4gdXNpbmcg cHJvcGVybHkgY29kZWQgc29mdHdhcmUuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSwNCgkJCQkpOw0K CWlmICggJHBhcmVudF9jbGFzc192YWwgIT0gJ2Rpc2FibGVkJyApIHsNCgkJJHBhcmVudF9jbGFzc190 ZXN0WydzdGF0dXMnXSA9IF9fKCdXQVJOSU5HJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKTsNCgl9IGVs c2Ugew0KCQkkcGFyZW50X2NsYXNzX3Rlc3RbJ3N0YXR1cyddID0gX18oJ09LJywgJ2l0LWwxMG4tYmFj a3VwYnVkZHknKTsNCgl9DQoJYXJyYXlfcHVzaCggJHRlc3RzLCAkcGFyZW50X2NsYXNzX3Rlc3QgKTsN CgkNCgkvLyBNQUdJQyBRVU9URVMgUlVOVElNRQ0KCWlmICggaW5pX2dldF9ib29sKCAnbWFnaWNfcXVv dGVzX3J1bnRpbWUnICkgPT09IHRydWUgKSB7DQoJCSRwYXJlbnRfY2xhc3NfdmFsID0gJ2VuYWJsZWQn Ow0KCX0gZWxzZSB7DQoJCSRwYXJlbnRfY2xhc3NfdmFsID0gJ2Rpc2FibGVkJzsNCgl9DQoJJHBhcmVu dF9jbGFzc190ZXN0ID0gYXJyYXkoDQoJCQkJCSd0aXRsZScJCQk9PgkJJ1BIUCBNYWdpYyBRdW90ZXMg UnVudGltZScsDQoJCQkJCSdzdWdnZXN0aW9uJwk9PgkJJ2Rpc2FibGVkJywNCgkJCQkJJ3ZhbHVlJwkJ CT0+CQkkcGFyZW50X2NsYXNzX3ZhbCwNCgkJCQkJJ3RpcCcJCQk9PgkJX18oJ0F1dG9tYXRpY2FsbHkg ZXNjYXBlcyB1c2VyIGlucHV0dGVkIGRhdGEuIE5vdCBuZWVkZWQgd2hlbiB1c2luZyBwcm9wZXJseSBj b2RlZCBzb2Z0d2FyZS4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpLA0KCQkJCSk7DQoJaWYgKCAkcGFy ZW50X2NsYXNzX3ZhbCAhPSAnZGlzYWJsZWQnICkgew0KCQkkcGFyZW50X2NsYXNzX3Rlc3RbJ3N0YXR1 cyddID0gX18oJ1dBUk5JTkcnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCX0gZWxzZSB7DQoJCSRw YXJlbnRfY2xhc3NfdGVzdFsnc3RhdHVzJ10gPSBfXygnT0snLCAnaXQtbDEwbi1iYWNrdXBidWRkeScp Ow0KCX0NCglhcnJheV9wdXNoKCAkdGVzdHMsICRwYXJlbnRfY2xhc3NfdGVzdCApOw0KCQ0KCS8vIFNB RkUgTU9ERQ0KCWlmICggaW5pX2dldF9ib29sKCAnc2FmZV9tb2RlJyApID09PSB0cnVlICkgew0KCQkk cGFyZW50X2NsYXNzX3ZhbCA9ICdlbmFibGVkJzsNCgl9IGVsc2Ugew0KCQkkcGFyZW50X2NsYXNzX3Zh bCA9ICdkaXNhYmxlZCc7DQoJfQ0KCSRwYXJlbnRfY2xhc3NfdGVzdCA9IGFycmF5KA0KCQkJCQkndGl0 bGUnCQkJPT4JCSdQSFAgU2FmZSBNb2RlJywNCgkJCQkJJ3N1Z2dlc3Rpb24nCT0+CQknZGlzYWJsZWQn LA0KCQkJCQkndmFsdWUnCQkJPT4JCSRwYXJlbnRfY2xhc3NfdmFsLA0KCQkJCQkndGlwJwkJCT0+CQlf XygnVGhpcyBtb2RlIGlzIEhJR0hMWSBkaXNjb3VyYWdlZCBhbmQgaXMgYSBzaWduIG9mIGEgcG9vcmx5 IGNvbmZpZ3VyZWQgaG9zdC4nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpLA0KCQkJCSk7DQoJaWYgKCAk cGFyZW50X2NsYXNzX3ZhbCAhPSAnZGlzYWJsZWQnICkgew0KCQkkcGFyZW50X2NsYXNzX3Rlc3RbJ3N0 YXR1cyddID0gX18oJ1dBUk5JTkcnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCX0gZWxzZSB7DQoJ CSRwYXJlbnRfY2xhc3NfdGVzdFsnc3RhdHVzJ10gPSBfXygnT0snLCAnaXQtbDEwbi1iYWNrdXBidWRk eScpOw0KCX0NCglhcnJheV9wdXNoKCAkdGVzdHMsICRwYXJlbnRfY2xhc3NfdGVzdCApOw0KCQ0KCS8v IE9TDQoJJHBhcmVudF9jbGFzc190ZXN0ID0gYXJyYXkoDQoJCQkJCSd0aXRsZScJCQk9PgkJJ09wZXJh dGluZyBTeXN0ZW0nLA0KCQkJCQknc3VnZ2VzdGlvbicJPT4JCSdMaW51eCcsDQoJCQkJCSd2YWx1ZScJ CQk9PgkJUEhQX09TLA0KCQkJCQkndGlwJwkJCT0+CQlfXygnVGhlIHNlcnZlciBvcGVyYXRpbmcgc3lz dGVtIHJ1bm5pbmcgdGhpcyBzaXRlLiBMaW51eCBiYXNlZCBzeXN0ZW1zIGFyZSBlbmNvdXJhZ2VkLiBX aW5kb3dzIHVzZXJzIG1heSBuZWVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBzdGVwcyB0byBnZXQgcGx1 Z2lucyB0byBwZXJmb3JtIHByb3Blcmx5LicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyksDQoJCQkJKTsN CglpZiAoIFBIUF9PUyA9PSAnV0lOTlQnICkgew0KCQkkcGFyZW50X2NsYXNzX3Rlc3RbJ3N0YXR1cydd ID0gX18oJ1dBUk5JTkcnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0KCX0gZWxzZSB7DQoJCSRwYXJl bnRfY2xhc3NfdGVzdFsnc3RhdHVzJ10gPSBfXygnT0snLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpOw0K CX0NCglhcnJheV9wdXNoKCAkdGVzdHMsICRwYXJlbnRfY2xhc3NfdGVzdCApOw0KCQ0KCS8vIE1FTU9S WSBMSU1JVA0KCWlmICggIWluaV9nZXQoICdtZW1vcnlfbGltaXQnICkgKSB7DQoJCSRwYXJlbnRfY2xh c3NfdmFsID0gJ3Vua25vd24nOw0KCX0gZWxzZSB7DQoJCSRwYXJlbnRfY2xhc3NfdmFsID0gaW5pX2dl dCggJ21lbW9yeV9saW1pdCcgKTsNCgl9DQoJJHBhcmVudF9jbGFzc190ZXN0ID0gYXJyYXkoDQoJCQkJ

CSd0aXRsZScJCQk9PgkJJ1BIUCBNZW1vcnkgTGltaXQnLA0KCQkJCQknc3VnZ2VzdGlvbicJPT4JCSc+ PSAxMjhNJywNCgkJCQkJJ3ZhbHVlJwkJCT0+CQkkcGFyZW50X2NsYXNzX3ZhbCwNCgkJCQkJJ3RpcCcJ CQk9PgkJX18oJ1RoZSBhbW91bnQgb2YgbWVtb3J5IHRoaXMgc2l0ZSBpcyBhbGxvd2VkIHRvIGNvbnN1 bWUuJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSwNCgkJCQkpOw0KCWlmICggcHJlZ19tYXRjaCggJy8o XGQrKShcdyopLycsICRwYXJlbnRfY2xhc3NfdmFsLCAkbWF0Y2hlcyApICkgew0KCQkkcGFyZW50X2Ns YXNzX3ZhbCA9ICRtYXRjaGVzWzFdOw0KCQkkdW5pdCA9ICRtYXRjaGVzWzJdOw0KCQkvLyBVcCBtZW1v cnkgbGltaXQgaWYgY3VycmVudGx5IGxvd2VyIHRoYW4gMjU2TS4NCgkJaWYgKCAnZycgIT09IHN0cnRv bG93ZXIoICR1bml0ICkgKSB7DQoJCQlpZiAoICggJHBhcmVudF9jbGFzc192YWwgPCAxMjggKSB8fCAo ICdtJyAhPT0gc3RydG9sb3dlciggJHVuaXQgKSApICkgew0KCQkJCSRwYXJlbnRfY2xhc3NfdGVzdFsn c3RhdHVzJ10gPSBfXygnV0FSTklORycsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5Jyk7DQoJCQl9IGVsc2Ug ew0KCQkJCSRwYXJlbnRfY2xhc3NfdGVzdFsnc3RhdHVzJ10gPSBfXygnT0snLCAnaXQtbDEwbi1iYWNr dXBidWRkeScpOw0KCQkJfQ0KCQl9DQoJfSBlbHNlIHsNCgkJJHBhcmVudF9jbGFzc190ZXN0WydzdGF0 dXMnXSA9IF9fKCdXQVJOSU5HJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKTsNCgl9DQoJDQoJYXJyYXlf cHVzaCggJHRlc3RzLCAkcGFyZW50X2NsYXNzX3Rlc3QgKTsNCgkNCj8+DQoNCg0KPHRhYmxlIGNsYXNz PSJ3aWRlZmF0Ij4NCgk8dGhlYWQ+DQoJCTx0ciBjbGFzcz0idGhlYWQiPg0KCQkJPHRoIHN0eWxlPSJ3 aWR0aDogMTVweDsiPiZuYnNwOzwvdGg+DQoJCQk8P3BocA0KCQkJCWVjaG8gJzx0aD4nLCBfXygnUGFy YW1ldGVyJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSwgJzwvdGg+JywNCgkJCQkJICc8dGg+JywgX18o J1N1Z2dlc3Rpb24nLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpLCAnPC90aD4nLA0KCQkJCQkgJzx0aD4n LCBfXygnVmFsdWUnLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpLCAnPC90aD4nLA0KCQkJCQkgJzx0aD4n LCBfXygnUmVzdWx0JywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSwgJzwvdGg+JywNCgkJCQkJICc8dGgg c3R5bGU9IndpZHRoOiA2MHB4OyI+JywgX18oJ1N0YXR1cycsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5Jyks ICc8L3RoPic7DQoJCQk/Pg0KCQk8L3RyPg0KCTwvdGhlYWQ+DQoJPHRmb290Pg0KCQk8dHIgY2xhc3M9 InRoZWFkIj4NCgkJCTx0aCBzdHlsZT0id2lkdGg6IDE1cHg7Ij4mbmJzcDs8L3RoPg0KCQkJPD9waHAN CgkJCQllY2hvICc8dGg+JywgX18oJ1BhcmFtZXRlcicsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JyksICc8 L3RoPicsDQoJCQkJCSAnPHRoPicsIF9fKCdTdWdnZXN0aW9uJywgJ2l0LWwxMG4tYmFja3VwYnVkZHkn KSwgJzwvdGg+JywNCgkJCQkJICc8dGg+JywgX18oJ1ZhbHVlJywgJ2l0LWwxMG4tYmFja3VwYnVkZHkn KSwgJzwvdGg+JywNCgkJCQkJICc8dGg+JywgX18oJ1Jlc3VsdCcsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5 JyksICc8L3RoPicsDQoJCQkJCSAnPHRoIHN0eWxlPSJ3aWR0aDogMTVweDsiPicsIF9fKCdTdGF0dXMn LCAnaXQtbDEwbi1iYWNrdXBidWRkeScpLCAnPC90aD4nOw0KCQkJPz4NCgkJPC90cj4NCgk8L3Rmb290 Pg0KCTx0Ym9keT4NCgkJPD9waHANCgkJZm9yZWFjaCggJHRlc3RzIGFzICRwYXJlbnRfY2xhc3NfdGVz dCApIHsNCgkJCWVjaG8gJzx0ciBjbGFzcz0iZW50cnktcm93IGFsdGVybmF0ZSI+JzsNCgkJCWVjaG8g Jwk8dGQ+JyAuICRwYXJlbnRfY2xhc3MtPnRpcCggJHBhcmVudF9jbGFzc190ZXN0Wyd0aXAnXSwgJycs IGZhbHNlICkgLiAnPC90ZD4nOw0KCQkJZWNobyAnCTx0ZD4nIC4gJHBhcmVudF9jbGFzc190ZXN0Wyd0 aXRsZSddIC4gJzwvdGQ+JzsNCgkJCWVjaG8gJwk8dGQ+JyAuICRwYXJlbnRfY2xhc3NfdGVzdFsnc3Vn Z2VzdGlvbiddIC4gJzwvdGQ+JzsNCgkJCWVjaG8gJwk8dGQ+JyAuICRwYXJlbnRfY2xhc3NfdGVzdFsn dmFsdWUnXSAuICc8L3RkPic7DQoJCQllY2hvICcJPHRkPicgLiAkcGFyZW50X2NsYXNzX3Rlc3RbJ3N0 YXR1cyddIC4gJzwvdGQ+JzsNCgkJCWVjaG8gJwk8dGQ+JzsNCgkJCWlmICggJHBhcmVudF9jbGFzc190 ZXN0WydzdGF0dXMnXSA9PSBfXygnT0snLCAnaXQtbDEwbi1iYWNrdXBidWRkeScpICkgew0KCQkJCWVj aG8gJzxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICMyMkVFNUI7IGJvcmRlcjogMXB4IHNvbGlk ICNFMkUyRTI7Ij4mbmJzcDsmbmJzcDsmbmJzcDs8L2Rpdj4nOw0KCQkJfSBlbHNlaWYgKCAkcGFyZW50 X2NsYXNzX3Rlc3RbJ3N0YXR1cyddID09IF9fKCdGQUlMJywgJ2l0LWwxMG4tYmFja3VwYnVkZHknKSAp IHsNCgkJCQllY2hvICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjQ0YzMzMzOyBib3JkZXI6 IDFweCBzb2xpZCAjRTJFMkUyOyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9kaXY+JzsNCgkJCX0gZWxzZWlm ICggJHBhcmVudF9jbGFzc190ZXN0WydzdGF0dXMnXSA9PSBfXygnV0FSTklORycsICdpdC1sMTBuLWJh Y2t1cGJ1ZGR5JykgKSB7DQoJCQkJZWNobyAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZF RkY3RjsgYm9yZGVyOiAxcHggc29saWQgI0UyRTJFMjsiPiZuYnNwOyZuYnNwOyZuYnNwOzwvZGl2Pic7 DQoJCQl9DQoJCQllY2hvICcJPC90ZD4nOw0KCQkJZWNobyAnPC90cj4nOw0KCQl9DQoJCT8+DQoJPC90 Ym9keT4NCjwvdGFibGU+DQo8P3BocA0KaWYgKCBpc3NldCggJF9HRVRbJ3BocGluZm8nXSApICYmICRf R0VUWydwaHBpbmZvJ10gPT0gJ3RydWUnICkgew0KCWlmICggZGVmaW5lZCggJ1BCX0RFTU9fTU9ERScg KSApIHsNCgkJJHRoaXMtPmFsZXJ0KCAnQWNjZXNzIGRlbmllZCBpbiBkZW1vIG1vZGUuJywgdHJ1ZSAp Ow0KCX0gZWxzZSB7DQoJCWVjaG8gJzxicj48aDM+cGhwaW5mbygpICcsIF9fKCdSZXNwb25zZScsICdp dC1sMTBuLWJhY2t1cGJ1ZGR5JyksICc6PC9oMz4nOw0KCQkNCgkJZWNobyAnPGRpdiBzdHlsZT0id2lk dGg6IDEwMCU7IGhlaWdodDogNjAwcHg7IHBhZGRpbmctdG9wOiAxMHB4OyBwYWRkaW5nLWJvdHRvbTog MTBweDsgb3ZlcmZsb3c6IHNjcm9sbDsgIj4nOw0KCQlvYl9zdGFydCgpOw0KCQkNCgkJcGhwaW5mbygp Ow0KCQkNCgkJJGluZm8gPSBvYl9nZXRfY29udGVudHMoKTsNCgkJb2JfZW5kX2NsZWFuKCk7DQoJCSRp bmZvID0gcHJlZ19yZXBsYWNlKCclXi4qPGJvZHk+KC4qKTwvYm9keT4uKiQlbXMnLCAnJDEnLCAkaW5m byk7DQoJCWVjaG8gJGluZm87DQoJCXVuc2V0KCAkaW5mbyApOw0KCQkNCgkJZWNobyAnPC9kaXY+JzsN Cgl9DQp9IGVsc2Ugew0KCWVjaG8gJzxicj4nOw0KCWVjaG8gJzxjZW50ZXI+JzsNCglpZiAoICFkZWZp bmVkKCAncGx1Z2luYnVkZHlfaW1wb3J0YnVkZHknICkgKSB7DQoJCWVjaG8gJzxhIGhyZWY9IicgLiAk cGFyZW50X2NsYXNzLT5fc2VsZkxpbmsgLiAnLXRvb2xzJnBocGluZm89dHJ1ZSIgY2xhc3M9ImJ1dHRv

biBzZWNvbmRhcnktYnV0dG9uIiBzdHlsZT0ibWFyZ2luLXRvcDogM3B4OyI+Jy4gX18oJ0Rpc3BsYXkg RXh0ZW5kZWQgUEhQIFNldHRpbmdzIHZpYSBwaHBpbmZvKCknLCAnaXQtbDEwbi1iYWNrdXBidWRkeScp IC4gJzwvYT4nOw0KCX0gZWxzZSB7DQoJCWlmICggZmlsZV9leGlzdHMoIEFCU1BBVEggLiAnL3JlcGFp cmJ1ZGR5JyApICkgew0KCQkJZWNobyAnPGEgaHJlZj0iJyAuICRwYXJlbnRfY2xhc3MtPnBhZ2VfbGlu ayggJ3NlcnZlcl9pbmZvJywgJ3BocGluZm8nICkgLiAnIiBjbGFzcz0iYnV0dG9uLXNlY29uZGFyeSIg c3R5bGU9Im1hcmdpbi10b3A6IDNweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyI+Jy4gX18oJ0Rpc3Bs YXkgRXh0ZW5kZWQgUEhQIFNldHRpbmdzIHZpYSBwaHBpbmZvKCknLCAnaXQtbDEwbi1iYWNrdXBidWRk eScpIC4gJzwvYT4nOw0KCQl9IGVsc2Ugew0KCQkJZWNobyAnPGEgaHJlZj0iP3N0ZXA9MCZhY3Rpb249 cGhwaW5mbyZ2PXh2JyAuIG1kNSggJHBhcmVudF9jbGFzcy0+X2RlZmF1bHRzWydpbXBvcnRfcGFzc3dv cmQnXSAuICdpbXBvcnRidWRkeScgKSAuICciIGNsYXNzPSJidXR0b24tc2Vjb25kYXJ5IiBzdHlsZT0i bWFyZ2luLXRvcDogM3B4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ij4nLiBfXygnRGlzcGxheSBFeHRl bmRlZCBQSFAgU2V0dGluZ3MgdmlhIHBocGluZm8oKScsICdpdC1sMTBuLWJhY2t1cGJ1ZGR5JykgLiAn PC9hPic7DQoJCX0NCgl9DQoJZWNobyAnPC9jZW50ZXI+JzsNCgkNCgkvKg0KCWVjaG8gJzxwcmU+JzsN CglwcmludF9yKCBpbmlfZ2V0X2FsbCgpICk7DQoJZWNobyAnPC9wcmU+JzsNCgkqLw0KfQ0KPz4= ###PACKDATA,FILE_END,/classes/view_tools-server.php,importbuddy/classes/view_too ls-server.php ###PACKDATA,FILE_START,/classes/_get_backup_dat.php,importbuddy/classes/_get_bac kup_dat.php PD9waHANCi8vIEVYUEVDVFMgJGRhdF9maWxlIHRvIHBvaW50IHRvIHRoZSBiYWNrdXBidWRkeV9kYXQu cGhwIGZpbGUuDQoNCiR0aGlzLT5sb2coICdTVEFSVElORyBMb2FkaW5nIGJhY2t1cCBkYXQgZmlsZS4u Li4nICk7DQppZiAoIGZpbGVfZXhpc3RzKCAkZGF0X2ZpbGUgKSApIHsNCgkkYmFja3VwZGF0YSA9IGZp bGVfZ2V0X2NvbnRlbnRzKCAkZGF0X2ZpbGUgKTsNCn0gZWxzZSB7IC8vIE1pc3NpbmcuDQoJJHRoaXMt PmFsZXJ0KCAnRXJyb3IgIzkwMDM6IEJhY2t1cEJ1ZGR5IGRhdGEgZmlsZSAoYmFja3VwYnVkZHlfZGF0 LnBocCkgbWlzc2luZyBvciB1bnJlYWRhYmxlLicsICdUaGVyZSBtYXkgYmUgYSBwcm9ibGVtIHdpdGgg dGhlIGJhY2t1cCBmaWxlLCB0aGUgZmlsZXMgY291bGQgbm90IGJlIGV4dHJhY3RlZCAoeW91IG1heSBt YW51YWxseSBleHRyYWN0IHRoZSB6aXAgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSB0byBtYW51YWxseSBk byB0aGlzIHBvcnRpb24gb2YgcmVzdG9yZSksIG9yIHRoZSBmaWxlcyB3ZXJlIGRlbGV0ZWQgYmVmb3Jl IHRoaXMgcG9ydGlvbiBvZiB0aGUgcmVzdG9yZSB3YXMgcmVhY2hlZC4gIFN0YXJ0IHRoZSBpbXBvcnQg cHJvY2VzcyBvdmVyIG9yIHRyeSBtYW51YWxseSBleHRyYWN0aW5nICh1bnppcHBpbmcpIHRoZSBmaWxl cyB0aGVuIHN0YXJ0aW5nIG92ZXIuIFJlc3RvcmUgd2lsbCBub3QgY29udGludWUgdG8gcHJvdGVjdCBp bnRlZ3JpdHkgb2YgYW55IGV4aXN0aW5nIGRhdGEuJywgdHJ1ZSwgJzkwMDMnICk7DQoJZGllKCAnIEhh bHRlZC4nICk7DQp9DQoNCi8vIFVuc2VyaWFsaXplIGRhdGE7IElmIGl0IGZhaWxzIGl0IHRoZW4gZGVj b2RlcyB0aGUgb2JzY3VmYXRlZCBkYXRhIHRoZW4gdW5zZXJpYWxpemVzIGl0LiAobmV3IGRhdCBmaWxl IG1ldGhvZCBzdGFydGluZyBhdCAyLjApLg0KaWYgKCAhaXNfc2VyaWFsaXplZCggJGJhY2t1cGRhdGEg KSB8fCAoIGZhbHNlID09PSAoICRyZXR1cm4gPSB1bnNlcmlhbGl6ZSggJGJhY2t1cGRhdGEgKSApICkg KSB7DQoJLy8gU2tpcCBmaXJzdCBsaW5lLg0KCSRzZWNvbmRfbGluZV9wb3MgPSBzdHJwb3MoICRiYWNr dXBkYXRhLCAiXG4iICkgKyAxOw0KCSRiYWNrdXBkYXRhID0gc3Vic3RyKCAkYmFja3VwZGF0YSwgJHNl Y29uZF9saW5lX3BvcyApOw0KCQ0KCS8vIERlY29kZSBiYWNrIGludG8gYW4gYXJyYXkuDQoJJHJldHVy biA9IHVuc2VyaWFsaXplKCBiYXNlNjRfZGVjb2RlKCAkYmFja3VwZGF0YSApICk7DQp9DQoNCiR0aGlz LT5sb2coICdET05FIExvYWRpbmcgYmFja3VwIGRhdCBmaWxlLicgKTsNCg0KLy8gREFUIElOICRyZXR1 cm4NCj8+ ###PACKDATA,FILE_END,/classes/_get_backup_dat.php,importbuddy/classes/_get_backu p_dat.php ###PACKDATA,FILE_START,/classes/_migrate_database.php,importbuddy/classes/_migra te_database.php PD9waHANCi8qKg0KICoJX21pZ3JhdGVfZGF0YWJhc2UucGhwDQogKg0KICoJSGFuZGxlcyBhbGwgU1FM IGRhdGEgbWlncmF0aW9uIGZvciBib3RoIGltcG9ydGJ1ZGR5IGFuZCBtdWx0aXNpdGUgaW1wb3J0aW5n Lg0KICoJDQogKglWZXJzaW9uOiAxLjAuMQ0KICoJQXV0aG9yOiBEdXN0aW4gQm9sdG9uDQogKglBdXRo b3IgVVJJOiBodHRwOi8vZHVzdGluYm9sdG9uLmNvbS8NCiAqDQogKglSRVFVSVJFTUVOVFM6DQogKg0K ICoJMSkgU2V0IHVwIHRoZSB2YXJpYWJsZSAkZGVzdGluYXRpb25fdHlwZSB0byB0aGUgZGVzdGluYXRp b24gdHlwZSBpZiBub24tc3RhbmRhbG9uZSAoZGVmYXVsdCkgb3IgTXVsdGlzaXRlIE5ldHdvcmsgKGF1 dG8tZGV0ZWN0ZWQpLiBWYWxpZCB2YWx1ZXM6IHN0YW5kYWxvbmUsIG11bHRpc2l0ZV9pbXBvcnQsIG11 bHRpc2l0ZV9uZXR3b3JrDQogKgkyKSBNeXNxbCBzaG91bGQgYWxyZWFkeSBiZSBjb25uZWN0ZWQuDQog KgkzKSAkdGhpcy0+X2JhY2t1cGRhdGEgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIERBVCBm aWxlIGFycmF5Lg0KICoJNCkgSWYgbWlncmF0aW5nIGEgbmV0d29yayAtPiBuZXR3b3JrIHRoZW4gc2V0 IHVwIHRoZSB2YXJpYWJsZSAkbXVsdGlzaXRlX25ldHdvcmtfZGJfcHJlZml4IHRvIGJlIHRoZSBkYXRh YmFzZSBwcmVmaXggb2YgdGhlIG5ldHdvcmsuIE5lZWRlZCB0byBhY2Nlc3MgdXNlcnMgdGFibGVzLg0K ICoJNSkgSWYgbXVsdGlzaXRlX2ltcG9ydCBpcyBERVNUSU5BVElPTiB0aGVuICR3cF91cGxvYWRfZGly ICh1cGxvYWRfcGF0aCBvcHRpb24pLCAkd3BfdXBsb2FkX3VybCAoZmlsZXVwbG9hZF91cmwgb3B0aW9u KSBtdXN0IGJlIHNldC4NCiAqLw0KDQoNCi8vIE5PVEU6IGRicmVwbGFjZSBjbGFzcyBpbnRlbGxpZ2Vu

dGx5IGlnbm9yZXMgcmVwbGFjaW5nIHZhbHVlcyB3aXRoIGlkZW50aWNhbCB2YWx1ZXMgZm9yIHBlcmZv cm1hbmNlLg0KDQppZiAoICRkZXN0aW5hdGlvbl90eXBlID09ICdtdWx0aXNpdGVfaW1wb3J0JyApIHsN Cn0gZWxzZSB7IC8vIE5vcm1hbCBpbXBvcnRidWRkeS4NCgkkZGVzdGluYXRpb25fc2l0ZXVybCA9ICR0 aGlzLT5fb3B0aW9uc1snc2l0ZXVybCddOw0KCSRkZXN0aW5hdGlvbl9ob21lID0gJHRoaXMtPl9vcHRp b25zWydob21lJ107DQoJaWYgKCAkZGVzdGluYXRpb25faG9tZSA9PSAnJyApIHsgLy8gSWYgbm8gaG9t ZSB0aGVuIHdlIHNldCBpdCBlcXVhbCB0byBzaXRlIFVSTC4NCgkJJGRlc3RpbmF0aW9uX2hvbWUgPSAk ZGVzdGluYXRpb25fc2l0ZXVybDsNCgl9DQoJJGRlc3RpbmF0aW9uX2RiX3ByZWZpeCA9ICR0aGlzLT5f b3B0aW9uc1snZGJfcHJlZml4J107DQoJaWYgKCBpc3NldCggJHRoaXMtPl9vcHRpb25zWydkb21haW4n XSApICkgeyAkZGVzdGluYXRpb25fZG9tYWluID0gJHRoaXMtPl9vcHRpb25zWydkb21haW4nXTsgfQ0K CQ0KCS8vIEN1cnJlbnRseSB3ZSBkb24ndCBhbGxvdyBjaGFuZ2luZyB0aGUgTmV0d29yayBwYXRoLg0K CS8vaWYgKCBpc3NldCggJHRoaXMtPl9vcHRpb25zWydwYXRoJ10gKSApIHsgJGRlc3RpbmF0aW9uX3Bh dGggPSAkdGhpcy0+X29wdGlvbnNbJ3BhdGgnXTsgfQ0KCSRkZXN0aW5hdGlvbl9wYXRoID0gJHRoaXMt Pl9iYWNrdXBkYXRhWyAncGF0aCcgXTsgLy8gU2V0IG5ldyBOZXR3b3JrIHBhdGggdG8gZXF1YWwgb2xk IG5ldHdvcmsgcGF0aC4NCn0NCg0KDQokdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdNaWdyYXRpbmcg ZGF0YWJhc2UgY29udGVudC4uLicgKTsNCiR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgJ0Rlc3RpbmF0 aW9uIHNpdGUgdGFibGUgcHJlZml4OiAnIC4gJGRlc3RpbmF0aW9uX2RiX3ByZWZpeCApOw0KDQovLyAq KioqKioqKioqIEJFR0lOIFZBUklBQkxFIFNFVFVQICoqKioqKioqKioNCgkvLyBERVNUSU5BVElPTiBU WVBFLiBWYWxpZCB2YWx1ZXM6IHN0YW5kYWxvbmUsIG11bHRpc2l0ZV9pbXBvcnQsIG11bHRpc2l0ZV9u ZXR3b3JrDQoJaWYgKCAhaXNzZXQoICRkZXN0aW5hdGlvbl90eXBlICkgfHwgKCAkZGVzdGluYXRpb25f dHlwZSA9PSAnJyApICkgew0KCQkkZGVzdGluYXRpb25fdHlwZSA9ICdzdGFuZGFsb25lJzsgLy8gRGVm YXVsdDsgb3ZlcnJpZGRlbiBpZiBleHBsaWNpdGx5IHNldCBvciBpZiBhIGZ1bGwgTXVsdGlzaXRlIE5l dHdvcmsgbWlncmF0aW9uLg0KCX0NCgkvLyBTT1VSQ0UgVFlQRS4gVmFsaWQgdmFsdWVzOiBuZXR3b3Jr LCBtdWx0aXNpdGVfZXhwb3J0IChzaW5nbGUgc2l0ZSBleHBvcnRlZCBmcm9tIG11bHRpc2l0ZSBuZXR3 b3JrKSwgc3RhbmRhbG9uZQ0KCWlmICggaXNzZXQoICR0aGlzLT5fYmFja3VwZGF0YVsgJ2lzX211bHRp c2l0ZScgXSApICYmICggKCAkdGhpcy0+X2JhY2t1cGRhdGFbICdpc19tdWx0aXNpdGUnIF0gPT09IHRy dWUgKSB8fCAoICR0aGlzLT5fYmFja3VwZGF0YVsgJ2lzX211bHRpc2l0ZScgXSA9PT0gJ3RydWUnICkg KSApIHsNCgkJJHNvdXJjZV90eXBlID0gJ211bHRpc2l0ZV9uZXR3b3JrJzsNCgkJJGRlc3RpbmF0aW9u X3R5cGUgPSAnbXVsdGlzaXRlX25ldHdvcmsnOw0KCX0gZWxzZWlmICggaXNzZXQoICR0aGlzLT5fYmFj a3VwZGF0YVsgJ2lzX211bHRpc2l0ZV9leHBvcnQnIF0gKSAmJiAoICggJHRoaXMtPl9iYWNrdXBkYXRh WyAnaXNfbXVsdGlzaXRlX2V4cG9ydCcgXSA9PT0gdHJ1ZSApIHx8ICggJHRoaXMtPl9iYWNrdXBkYXRh WyAnaXNfbXVsdGlzaXRlX2V4cG9ydCcgXSA9PT0gJ3RydWUnICkgKSApIHsNCgkJJHNvdXJjZV90eXBl ID0gJ211bHRpc2l0ZV9leHBvcnQnOw0KCX0gZWxzZSB7DQoJCSRzb3VyY2VfdHlwZSA9ICdzdGFuZGFs b25lJzsNCgl9DQoJDQoJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCAnTWlncmF0aW9uIHR5cGU6ICcg LiAkc291cmNlX3R5cGUgLiAnIHRvICcgLiAkZGVzdGluYXRpb25fdHlwZSApOw0KCQ0KCSRkZXN0aW5h dGlvbl9zaXRldXJsID0gcHJlZ19yZXBsYWNlKCAnfC8qJHwnLCAnJywgJGRlc3RpbmF0aW9uX3NpdGV1 cmwgKTsgIC8vIHN0cmlwcyB0cmFpbGluZyBzbGFzaChlcykuDQoJJGRlc3RpbmF0aW9uX2hvbWUgPSBw cmVnX3JlcGxhY2UoICd8LyokfCcsICcnLCAkZGVzdGluYXRpb25faG9tZSApOyAgLy8gc3RyaXBzIHRy YWlsaW5nIHNsYXNoKGVzKS4NCgkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICdEZXN0aW5hdGlvbiBT aXRlIFVSTDogJyAuICRkZXN0aW5hdGlvbl9zaXRldXJsICk7DQoJJHRoaXMtPnN0YXR1cyggJ2RldGFp bHMnLCAnRGVzdGluYXRpb24gSG9tZSBVUkw6ICcgLiAkZGVzdGluYXRpb25faG9tZSApOw0KCQ0KCSRj b3VudF90YWJsZXNfY2hlY2tlZCA9IDA7DQoJJGNvdW50X2l0ZW1zX2NoZWNrZWQgPSAwOw0KCSRjb3Vu dF9pdGVtc19jaGFuZ2VkID0gMDsNCi8vICoqKioqKioqKiogRU5EIFZBUklBQkxFIFNFVFVQICoqKioq KioqKioNCg0KDQovLyAqKioqKioqKioqIEJFR0lOIEFMTCAqKioqKioqKioqDQoJDQoJLy8gQUJTUEFU SA0KCSRvbGRfYWJzcGF0aCA9ICR0aGlzLT5fYmFja3VwZGF0YVsnYWJzcGF0aCddOw0KCS8vJG9sZF9h YnNwYXRoID0gcHJlZ19yZXBsYWNlKCAnfC8rJHwnLCAnJywgJG9sZF9hYnNwYXRoICk7IC8vIFJlbW92 ZSBlc2NhcGluZyBvZiB3aW5kb3dzIHBhdGhzLiBUaGlzIGlzIHdyb25nLiBzdHJpcHMgdHJhaWxpbmcg c2xhc2hlcy4gV2h5PyBJdCBzaG91bGRudCEgUmVtb3ZlZCBOb3YgNA0KCSRuZXdfYWJzcGF0aCA9IEFC U1BBVEg7DQoJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCAnQUJTUEFUSCBjaGFuZ2UgZm9yIGRhdGFi YXNlLiBPbGQgUGF0aDogJyAuICRvbGRfYWJzcGF0aCAuICcsIE5ldyBQYXRoOiAnIC4gJG5ld19hYnNw YXRoIC4gJy4nICk7DQoJDQoJLy8gU0lURVVSTA0KCSRvbGRfdXJsID0gJHRoaXMtPl9iYWNrdXBkYXRh WydzaXRldXJsJ107ICAvLyB0aGUgdmFsdWUgeW91IHdhbnQgdG8gc2VhcmNoIGZvcg0KCWlmICggc3Ry aXN0ciggJG9sZF91cmwsICdodHRwOi8vd3d3LicgKSB8fCBzdHJpc3RyKCAkb2xkX3VybCwgJ2h0dHBz Oi8vd3d3LicgKSApIHsgLy8gSWYgaHR0cDovL3d3dy5ibGFoLi4uLiB0aGVuIGFsc28gd2Ugd2lsbCBy ZXBsYWNlIGh0dHA6Ly9ibGFoLi4uIGFuZCB2aWNlIHZlcnNhLg0KCQkkb2xkX3VybF9hbHQgPSBzdHJf aXJlcGxhY2UoICdodHRwOi8vd3d3LicsICdodHRwOi8vJywgJG9sZF91cmwgKTsNCgkJJG9sZF91cmxf YWx0ID0gc3RyX2lyZXBsYWNlKCAnaHR0cHM6Ly93d3cuJywgJ2h0dHBzOi8vJywgJG9sZF91cmxfYWx0 ICk7DQoJfSBlbHNlIHsNCgkJJG9sZF91cmxfYWx0ID0gc3RyX2lyZXBsYWNlKCAnaHR0cDovLycsICdo dHRwOi8vd3d3LicsICRvbGRfdXJsICk7DQoJCSRvbGRfdXJsX2FsdCA9IHN0cl9pcmVwbGFjZSggJ2h0 dHBzOi8vJywgJ2h0dHBzOi8vd3d3LicsICRvbGRfdXJsX2FsdCApOw0KCX0NCgkkbmV3X3VybCA9ICRk ZXN0aW5hdGlvbl9zaXRldXJsOw0KCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgJ0NhbGN1bGF0ZWQg

VVJMIHVwZGF0ZS4gUHJldmlvdXMgVVJMOiAnIC4gJG9sZF91cmwgLiAnLCBOZXcgVVJMOiAnIC4gJG5l d191cmwgLiAnLicgKTsNCgkNCgkkb2xkX2Z1bGxyZXBsYWNlID0gYXJyYXkoICRvbGRfdXJsLCAkb2xk X3VybF9hbHQsICRvbGRfYWJzcGF0aCApOw0KCSRuZXdfZnVsbHJlcGxhY2UgPSBhcnJheSggJG5ld191 cmwsICRuZXdfdXJsLCAkbmV3X2Fic3BhdGggKTsNCgkNCgkNCgkNCgkvLyBIT01FVVJMIGluIHdwX29w dGlvbnMNCgkvKg0KCWlmICggJGRlc3RpbmF0aW9uX3NpdGV1cmwgIT0gJGRlc3RpbmF0aW9uX2hvbWUg KSB7IC8vIFVwZGF0ZSBob21lIHVybCB2YWx1ZSBpZiBpdCBleGlzdHMgc2luY2UgaXQgaXMgY3VzdG9t Lg0KCQlteXNxbF9xdWVyeSggIlVQREFURSBgIiAuICRkZXN0aW5hdGlvbl9kYl9wcmVmaXggLiAib3B0 aW9uc2AgU0VUIG9wdGlvbl92YWx1ZT0nIiAuIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyggJGRlc3Rp bmF0aW9uX2hvbWUgKSAuICInIFdIRVJFIG9wdGlvbl9uYW1lPSdob21lJyBMSU1JVCAxIiApOw0KCQkk dGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICdNb2RpZmllZCAnIC4gbXlzcWxfYWZmZWN0ZWRfcm93cygp IC4gJyByb3cocykgd2hpbGUgdXBkYXRpbmcgSG9tZSBVUkwgaW4gb3B0aW9ucyB0YWJsZSB0byBgJyAu ICRkZXN0aW5hdGlvbl9ob21lIC4gJ2AuJyApOw0KCX0gZWxzZSB7DQoJCSR0aGlzLT5zdGF0dXMoICdk ZXRhaWxzJywgJ0hvbWUgVVJMIG5vdCBtb2RpZmllZCBzaW5jZSBpdCBtYXRjaGVzIFNpdGUgVVJMLicg KTsNCgl9DQoJKi8NCgkNCgkvLyBBREQgSE9NRVVSTCBUTyBVUkxTIFRPIFVQREFURSBFVkVSWVdIRVJF Lg0KCWlmICggJGRlc3RpbmF0aW9uX2hvbWUgIT0gJycgKSB7DQoJCQ0KCQkkb2xkX3VybHMgPSBhcnJh eSggJG9sZF91cmwsICRvbGRfdXJsX2FsdCwgJHRoaXMtPl9iYWNrdXBkYXRhWydob21ldXJsJ10gKTsN CgkJJG5ld191cmxzID0gYXJyYXkoICRuZXdfdXJsLCAkbmV3X3VybCwgJGRlc3RpbmF0aW9uX2hvbWUg KTsNCgkJaWYgKCBlbXB0eSggJHRoaXMtPl9iYWNrdXBkYXRhWydob21ldXJsJ10gKSApIHsgLy8gb2xk IEJhY2t1cEJ1ZGR5IHZlcnNpb25zIGRpZCBub3Qgc3RvcmUgdGhlIHByZXZpb3VzIGhvbWV1cmwuIEhh bmcgb250byB0aGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgYSB3aGlsZS4NCgkJCSR0 aGlzLT5zdGF0dXMoICdlcnJvcicsICdGYWlsZWQuIFlvdXIgY3VycmVudCBiYWNrdXAgZG9lcyBub3Qg aW5jbHVkZSBhIGhvbWUgVVJMLiBNYWtlIGEgbmV3IGJhY2t1cCB3aXRoIHRoZSBsYXRlc3QgQmFja3Vw QnVkZHkgYmVmb3JlIG1pZ3JhdGluZy4nICk7DQoJCQkkdGhpcy0+YWxlcnQoICdFcnJvciAjNDU0Mzg0 OTQ5OC4gTWlzc2luZyBvbGQgaG9tZSBVUkwuJywgJ0ZhaWxlZC4gWW91ciBjdXJyZW50IGJhY2t1cCBk b2VzIG5vdCBpbmNsdWRlIGEgaG9tZSBVUkwuIE1ha2UgYSBuZXcgYmFja3VwIHdpdGggdGhlIGxhdGVz dCBCYWNrdXBCdWRkeSBiZWZvcmUgbWlncmF0aW5nLicgKTsNCgkJfSBlbHNlIHsNCgkJCSR0aGlzLT5z dGF0dXMoICdtZXNzYWdlJywgJ0hvbWUgVVJMcyB3aWxsIGFsc28gYmUgdXBkYXRlZCBhbG9uZyB3aXRo IHNpdGUgVVJMcyBpZiBhcHBsaWNhYmxlLicgKTsNCgkJfQ0KCX0gZWxzZSB7IC8vIFNpdGUgVVJMIHVw ZGF0ZXMgb25seS4NCgkJJG9sZF91cmxzID0gYXJyYXkoICRvbGRfdXJsLCAkb2xkX3VybF9hbHQgKTsN CgkJJG5ld191cmxzID0gYXJyYXkoICRuZXdfdXJsLCAkbmV3X3VybCApOw0KCX0NCgkNCglpZiAoIGlz c2V0KCAkd3BfdXBsb2FkX2RpciApICkgew0KCQkkd3BfdXBsb2FkX3VybF9yZWFsID0gJG5ld191cmwg LiAnLycgLiBzdHJfcmVwbGFjZSggQUJTUEFUSCwgJycsICR3cF91cGxvYWRfZGlyICk7DQoJfQ0KCQ0K CSRicnV0ZWZvcmNlX2V4Y2x1ZGVkX3RhYmxlcyA9IGFycmF5KA0KCQkkZGVzdGluYXRpb25fZGJfcHJl Zml4IC4gJ3Bvc3RzJywNCgkJJGRlc3RpbmF0aW9uX2RiX3ByZWZpeCAuICd1c2VycycsIC8vIEltcG9y dGVkIHVzZXJzIHRhYmxlIHdpbGwgdGVtcG9yYXJpbHkgYmUgaGVyZSBzbyB0aGlzIGlzIGZpbmUgZm9y IE1TIGltcG9ydHMuDQoJCSRkZXN0aW5hdGlvbl9kYl9wcmVmaXggLiAndXNlcm1ldGEnLCAvLyBJbXBv cnRlZCB1c2VycyB0YWJsZSB3aWxsIHRlbXBvcmFyaWx5IGJlIGhlcmUgc28gdGhpcyBpcyBmaW5lIGZv ciBNUyBpbXBvcnRzLg0KCQkkZGVzdGluYXRpb25fZGJfcHJlZml4IC4gJ3Rlcm1zJywNCgkJJGRlc3Rp bmF0aW9uX2RiX3ByZWZpeCAuICd0ZXJtX3RheG9ub215JywNCgkJJGRlc3RpbmF0aW9uX2RiX3ByZWZp eCAuICd0ZXJtX3JlbGF0aW9uc2hpcHMnLA0KCQkkZGVzdGluYXRpb25fZGJfcHJlZml4IC4gJ3Bvc3Rt ZXRhJywNCgkJJGRlc3RpbmF0aW9uX2RiX3ByZWZpeCAuICdvcHRpb25zJywNCgkJJGRlc3RpbmF0aW9u X2RiX3ByZWZpeCAuICdjb21tZW50cycsDQoJCSRkZXN0aW5hdGlvbl9kYl9wcmVmaXggLiAnY29tbWVu dG1ldGEnLA0KCQkkZGVzdGluYXRpb25fZGJfcHJlZml4IC4gJ2xpbmtzJywNCgkpOw0KLy8gKioqKioq KioqKiBFTkQgQUxMICoqKioqKioqKioNCg0KDQovLyAqKioqKioqKioqIEJFR0lOIE1VTFRJU0lURSBO RVRXT1JLIC0+IE1VTFRJU0lURSBORVRXT1JLICoqKioqKioqKioNCmlmICggKCAkc291cmNlX3R5cGUg PT0gJ211bHRpc2l0ZV9uZXR3b3JrJyApICYmICggJGRlc3RpbmF0aW9uX3R5cGUgPT0gJ211bHRpc2l0 ZV9uZXR3b3JrJyApICkgew0KCS8vcGJfdXBkYXRlX2RvbWFpbl9wYXRoKCAkdGhpcy0+X2JhY2t1cGRh dGFbJ2RvbWFpbiddLCAkZGVzdGluYXRpb25fZG9tYWluLCAkdGhpcy0+X2JhY2t1cGRhdGFbJ3BhdGgn XSwgJGRlc3RpbmF0aW9uX3BhdGggKTsgLy8gJG9sZF9kb21haW4sICRuZXdfZG9tYWluLCAkb2xkX3Bh dGgsICRuZXdfcGF0aA0KCSRvbGRfZG9tYWluID0gJHRoaXMtPl9iYWNrdXBkYXRhWydkb21haW4nXTsN CgkkbmV3X2RvbWFpbiA9ICRkZXN0aW5hdGlvbl9kb21haW47DQoJJG9sZF9wYXRoID0gJHRoaXMtPl9i YWNrdXBkYXRhWydwYXRoJ107DQoJJG5ld19wYXRoID0gJGRlc3RpbmF0aW9uX3BhdGg7DQoJDQoJLy8g VXBkYXRlIGJsb2cgcGF0aCBPTkxZIGluIEJMT0dTIHRhYmxlIHdoZXJlIHRoZSBkb21haW4gQU5EIHBh dGggbWF0Y2guIChnZXRzIGFsbCByb3dzIHdpdGggdGhpcyBwYXRoIGZvciBUSElTIGRvbWFpbikuDQoJ bXlzcWxfcXVlcnkoICJVUERBVEUgYCIgLiAkZGVzdGluYXRpb25fZGJfcHJlZml4IC4gImJsb2dzYCBT RVQgZG9tYWluPSciIC4gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCAkbmV3X2RvbWFpbiApIC4gIics IHBhdGg9JyIgLiBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoICRuZXdfcGF0aCApIC4gIicgV0hFUkUg ZG9tYWluPSciIC4gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCAkb2xkX2RvbWFpbiApIC4gIicgQU5E IHBhdGg9JyIgLiBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoICRvbGRfcGF0aCApIC4gIiciICk7DQoJ JHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCAnTW9kaWZpZWQgJyAuIG15c3FsX2FmZmVjdGVkX3Jvd3Mo

KSAuICcgcm93KHMpIHdoaWxlIHVwZGF0aW5nIGJsb2cgVVJMIGluIGJsb2dzIHRhYmxlIHRvIGAnIC4g bXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCAkbmV3X2RvbWFpbiApIC4gJ2AuJyApOw0KCS8vIFVwZGF0 ZSBibG9nIGRvbWFpbiBPTkxZIGluIEJMT0dTIHRhYmxlIHdoZXJlIHRoZSBkb21haW4gbWF0Y2hlcy4g KGdldHMgYWxsIHJvd3Mgd2l0aCB0aGlzIGRvbWFpbikuDQoJbXlzcWxfcXVlcnkoICJVUERBVEUgYCIg LiAkZGVzdGluYXRpb25fZGJfcHJlZml4IC4gImJsb2dzYCBTRVQgZG9tYWluPSciIC4gbXlzcWxfcmVh bF9lc2NhcGVfc3RyaW5nKCAkbmV3X2RvbWFpbiApIC4gIicgV0hFUkUgZG9tYWluPSciIC4gbXlzcWxf cmVhbF9lc2NhcGVfc3RyaW5nKCAkb2xkX2RvbWFpbiApIC4gIiciICk7DQoJJHRoaXMtPnN0YXR1cygg J2RldGFpbHMnLCAnTW9kaWZpZWQgJyAuIG15c3FsX2FmZmVjdGVkX3Jvd3MoKSAuICcgcm93KHMpIHdo aWxlIHVwZGF0aW5nIGJsb2cgVVJMIGluIGJsb2dzIHRhYmxlIHRvIGAnIC4gbXlzcWxfcmVhbF9lc2Nh cGVfc3RyaW5nKCAkbmV3X2RvbWFpbiApIC4gJ2AuJyApOw0KCS8vIFVwZGF0ZSBzaXRlIGRvbWFpbiAm IHBhdGggaW4gU0lURVMgdGFibGUgd2hlcmUgZG9tYWluIGFuZCBwYXRoIG1hdGNoLiBMSU1JVEVEIFRP IDEuDQoJbXlzcWxfcXVlcnkoICJVUERBVEUgYCIgLiAkZGVzdGluYXRpb25fZGJfcHJlZml4IC4gInNp dGVgIFNFVCBkb21haW49JyIgLiBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoICRuZXdfZG9tYWluICkg LiAiJywgcGF0aD0nIiAuIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyggJG5ld19wYXRoICkgLiAiJyBX SEVSRSBkb21haW49JyIgLiBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoICRvbGRfZG9tYWluICkgLiAi JyBBTkQgcGF0aD0nIiAuIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZyggJG9sZF9wYXRoICkgLiAiJyBM SU1JVCAxIiApOw0KCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgJ01vZGlmaWVkICcgLiBteXNxbF9h ZmZlY3RlZF9yb3dzKCkgLiAnIHJvdyhzKSB3aGlsZSB1cGRhdGluZyBzaXRlIFVSTCBpbiBzaXRlIHRh YmxlIHRvIGAnIC4gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCAkbmV3X2RvbWFpbiApIC4gJ2AuJyAp Ow0KfQ0KLy8gKioqKioqKioqKiBFTkQgTVVMVElTSVRFIE5FVFdPUksgLT4gTVVMVElTSVRFIE5FVFdP UksgKioqKioqKioqKg0KDQoNCi8vICoqKioqKioqKiogQkVHSU4gU1RBTkRBTE9ORSAtPiBNVUxUSVNJ VEUgSU1QT1JUICAqKioqKioqKioqDQppZiAoICggJHNvdXJjZV90eXBlID09ICdzdGFuZGFsb25lJyAp ICYmICggJGRlc3RpbmF0aW9uX3R5cGUgPT0gJ211bHRpc2l0ZV9pbXBvcnQnICkgKSB7DQoJLy8gTm90 ZSBmb3IgYW55IGRlc3RpbmF0aW9uIG9mIG11bHRpc2l0ZV9pbXBvcnQ6IFVzZXJzIHRhYmxlcyBleGlz dCB0ZW1wb3JhcmlseSBpbiB0aGVpciBub3JtYWwgbG9jYXRpb24gc28gd2UgcmVwbGFjZSB0aGVtIGxp a2UgYSBub3JtYWwgc3RhbmRhbG9uZSBzaXRlLiBUaGUgbmV4dCBpbXBvcnQgc3RlcCB3aWxsIG1lcmdl IHRoZW0gaW50byB0aGUgbXVsdGlzaXRlIHRhYmxlcy4NCgkNCgkvLyBUT0RPOiBhZGQgY29kZSBmcm9t IG1zX2ltcG9ydGJ1ZGR5LnBocCBpbnRvIGhlcmUgZm9yIGFueSB1cGRhdGVzIGlmIG5lZWRlZC4NCgkN CgkvLyBUaGUgb2xkIHVwbG9hZHMgVVJMLiBTdGFuZGFsb25lIHNvdXJjZSBsaWtlOiBodHRwOi8vZ2V0 YmFja3VwYnVkZHkuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8uIEJCIGRvZXNudCBjdXJyZW50bHkgc3Vw cG9ydCBtb3ZlZCB1cGxvYWRzLiBVbnNoaWZ0ZWQgdG8gcGxhY2UgdGhlc2UgcmVwbGFjZW1lbnRzIEZJ UlNUIGluIHRoZSBhcnJheSBvZiBVUkxzIHRvIHJlcGxhY2UuDQoJJHRoaXMtPnN0YXR1cyggJ2RldGFp bHMnLCAnT2xkIHVwbG9hZHMgVVJMOiAnIC4gJG9sZF91cmwgLiAnL3dwLWNvbnRlbnQvdXBsb2Fkcycg KTsNCglhcnJheV91bnNoaWZ0KCAkb2xkX3VybHMsICRvbGRfdXJsIC4gJy93cC1jb250ZW50L3VwbG9h ZHMnICk7DQoJYXJyYXlfdW5zaGlmdCggJG9sZF9mdWxscmVwbGFjZSwgJG9sZF91cmwgLiAnL3dwLWNv bnRlbnQvdXBsb2FkcycgKTsNCgkNCgkvLyBUaGUgbmV3IHN0YW5kYWxvbmUgdXBsb2FkIFVSTC4gRXg6 IGh0dHA6Ly9wbHVnaW5idWRkeS5jb20vd3AtY29udGVudC91cGxvYWRzLy4gVW5zaGlmdGVkIHRvIHBs YWNlIHRoZXNlIHJlcGxhY2VtZW50cyBGSVJTVCBpbiB0aGUgYXJyYXkgb2YgVVJMcyB0byByZXBsYWNl Lg0KCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgJ05ldyB2aXJ0dWFsIHVwbG9hZCBVUkwgdG8gcmVw bGFjZSBzdGFuZGFsb25lIHVwbG9hZCBVUkw6ICcgLiAkd3BfdXBsb2FkX3VybCApOw0KCWFycmF5X3Vu c2hpZnQoICRuZXdfdXJscywgJHdwX3VwbG9hZF91cmwgKTsNCglhcnJheV91bnNoaWZ0KCAkbmV3X2Z1 bGxyZXBsYWNlLCAkd3BfdXBsb2FkX3VybCApOw0KCQ0KCS8vIFVwZGF0ZSB1cGxvYWRfcGF0aCBpbiBv cHRpb25zIHRhYmxlLg0KCW15c3FsX3F1ZXJ5KCAiVVBEQVRFIGAiIC4gJGRlc3RpbmF0aW9uX2RiX3By ZWZpeCAuICJvcHRpb25zYCBTRVQgb3B0aW9uX3ZhbHVlPSciIC4gbXlzcWxfcmVhbF9lc2NhcGVfc3Ry aW5nKCBzdHJfcmVwbGFjZSggJG5ld191cmwsICcnLCAkd3BfdXBsb2FkX3VybF9yZWFsICkgKSAuICIn IFdIRVJFIG9wdGlvbl9uYW1lPSd1cGxvYWRfcGF0aCcgTElNSVQgMSIgKTsNCgkkdGhpcy0+c3RhdHVz KCAnZGV0YWlscycsICdNb2RpZmllZCAnIC4gbXlzcWxfYWZmZWN0ZWRfcm93cygpIC4gJyByb3cocykg d2hpbGUgdXBkYXRpbmcgdXBsb2FkcyBVUkwgaW4gb3B0aW9ucyB0YWJsZS4gTmV3IHZhbHVlOiAnIC4g c3RyX3JlcGxhY2UoICRuZXdfdXJsLCAnJywgJHdwX3VwbG9hZF91cmxfcmVhbCApICk7DQoJDQoJLy8g VXBkYXRlIHVzZXIgcm9sZXMgb3B0aW9uX25hbWUgcm93Lg0KCW15c3FsX3F1ZXJ5KCAiVVBEQVRFIGAi IC4gJGRlc3RpbmF0aW9uX2RiX3ByZWZpeCAuICJvcHRpb25zYCBTRVQgb3B0aW9uX25hbWU9JyIgLiAk ZGVzdGluYXRpb25fZGJfcHJlZml4IC4gInVzZXJfcm9sZXMnIFdIRVJFIG9wdGlvbl9uYW1lIExJS0Ug JyVfdXNlcl9yb2xlcycgTElNSVQgMSIgKTsNCgkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICdNb2Rp ZmllZCAnIC4gbXlzcWxfYWZmZWN0ZWRfcm93cygpIC4gJyByb3cocykgd2hpbGUgdXBkYXRpbmcgdXNl ciByb2xlcyBvcHRpb25fbmFtZSB0byBgJyAuICRkZXN0aW5hdGlvbl9kYl9wcmVmaXggLiAndXNlcl9y b2xlc2AuJyApOw0KfQ0KLy8gKioqKioqKioqKiBFTkQgU1RBTkRBTE9ORSAtPiBNVUxUSVNJVEUgSU1Q T1JUICoqKioqKioqKioNCg0KDQovLyAqKioqKioqKioqIEJFR0lOIE1VTFRJU0lURSBFWFBPUlQgLT4g TVVMVElTSVRFIElNUE9SVCAqKioqKioqKioqDQppZiAoICggJHNvdXJjZV90eXBlID09ICdtdWx0aXNp dGVfZXhwb3J0JyApICYmICggJGRlc3RpbmF0aW9uX3R5cGUgPT0gJ211bHRpc2l0ZV9pbXBvcnQnICkg KSB7DQoJLy8gTm90ZSBmb3IgYW55IGRlc3RpbmF0aW9uIG9mIG11bHRpc2l0ZV9pbXBvcnQ6IFVzZXJz

IHRhYmxlcyBleGlzdCB0ZW1wb3JhcmlseSBpbiB0aGVpciBub3JtYWwgbG9jYXRpb24gc28gd2UgcmVw bGFjZSB0aGVtIGxpa2UgYSBub3JtYWwgc3RhbmRhbG9uZSBzaXRlLiBUaGUgbmV4dCBpbXBvcnQgc3Rl cCB3aWxsIG1lcmdlIHRoZW0gaW50byB0aGUgbXVsdGlzaXRlIHRhYmxlcy4NCgkNCgkvLyBUaGUgb2xk IHZpcnR1YWwgdXBsb2FkcyBVUkwuIFN0YW5kYWxvbmUgc291cmNlIGxpa2U6IGh0dHA6Ly9nZXRiYWNr dXBidWRkeS5jb20vd3AtY29udGVudC91cGxvYWRzLy4gQkIgZG9lc250IGN1cnJlbnRseSBzdXBwb3J0 IG1vdmVkIHVwbG9hZHMuIFVuc2hpZnRlZCB0byBwbGFjZSB0aGVzZSByZXBsYWNlbWVudHMgRklSU1Qg aW4gdGhlIGFycmF5IG9mIFVSTHMgdG8gcmVwbGFjZS4NCgkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycs ICdPbGQgdmlydHVhbCB1cGxvYWRzIFVSTDogJyAuICR0aGlzLT5fYmFja3VwZGF0YVsndXBsb2FkX3Vy bCddICk7DQoJYXJyYXlfdW5zaGlmdCggJG9sZF91cmxzLCAkdGhpcy0+X2JhY2t1cGRhdGFbJ3VwbG9h ZF91cmwnXSApOw0KCWFycmF5X3Vuc2hpZnQoICRvbGRfZnVsbHJlcGxhY2UsICR0aGlzLT5fYmFja3Vw ZGF0YVsndXBsb2FkX3VybCddICk7DQoJDQoJLy8gVGhlIG5ldyB2aXJ0dWFsIHVwbG9hZCBVUkwuIEV4 OiBodHRwOi8vcGx1Z2luYnVkZHkuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8uIFVuc2hpZnRlZCB0byBw bGFjZSB0aGVzZSByZXBsYWNlbWVudHMgRklSU1QgaW4gdGhlIGFycmF5IG9mIFVSTHMgdG8gcmVwbGFj ZS4NCgkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICdOZXcgdmlydHVhbCB1cGxvYWQgVVJMIHRvIHJl cGxhY2Ugb2xkIHZpcnR1YWwgdXBsb2FkcyBVUkw6ICcgLiAkd3BfdXBsb2FkX3VybCApOw0KCWFycmF5 X3Vuc2hpZnQoICRuZXdfdXJscywgJHdwX3VwbG9hZF91cmwgKTsNCglhcnJheV91bnNoaWZ0KCAkbmV3 X2Z1bGxyZXBsYWNlLCAkd3BfdXBsb2FkX3VybCApOw0KCQ0KCS8vIFRoZSBvbGQgcmVhbCBkaXJlY3Qg dXBsb2FkcyBVUkwuIFN0YW5kYWxvbmUgc291cmNlIGxpa2U6IGh0dHA6Ly9nZXRiYWNrdXBidWRkeS5j b20vd3AtY29udGVudC91cGxvYWRzLy4gQkIgZG9lc250IGN1cnJlbnRseSBzdXBwb3J0IG1vdmVkIHVw bG9hZHMuIFVuc2hpZnRlZCB0byBwbGFjZSB0aGVzZSByZXBsYWNlbWVudHMgRklSU1QgaW4gdGhlIGFy cmF5IG9mIFVSTHMgdG8gcmVwbGFjZS4NCgkkdGhpcy0+c3RhdHVzKCAnZGV0YWlscycsICdPbGQgcmVh bCBkaXJlY3QgdXBsb2FkcyBVUkw6ICcgLiAkdGhpcy0+X2JhY2t1cGRhdGFbJ3VwbG9hZF91cmxfcmV3 cml0ZSddICk7DQoJYXJyYXlfdW5zaGlmdCggJG9sZF91cmxzLCAkdGhpcy0+X2JhY2t1cGRhdGFbJ3Vw bG9hZF91cmxfcmV3cml0ZSddICk7DQoJYXJyYXlfdW5zaGlmdCggJG9sZF9mdWxscmVwbGFjZSwgJHRo aXMtPl9iYWNrdXBkYXRhWyd1cGxvYWRfdXJsX3Jld3JpdGUnXSApOw0KCQ0KCS8vIFRoZSBuZXcgcmVh bCBkaXJlY3QgdXBsb2FkIFVSTC4gRXg6IGh0dHA6Ly9wbHVnaW5idWRkeS5jb20vd3AtY29udGVudC91 cGxvYWRzLy4gVW5zaGlmdGVkIHRvIHBsYWNlIHRoZXNlIHJlcGxhY2VtZW50cyBGSVJTVCBpbiB0aGUg YXJyYXkgb2YgVVJMcyB0byByZXBsYWNlLg0KCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgJ05ldyBy ZWFsIGRpcmVjdCB1cGxvYWQgVVJMIHRvIHJlcGxhY2Ugb2xkIHZpcnR1YWwgdXBsb2FkcyBVUkw6ICcg LiAkd3BfdXBsb2FkX3VybF9yZWFsICk7DQoJYXJyYXlfdW5zaGlmdCggJG5ld191cmxzLCAkd3BfdXBs b2FkX3VybF9yZWFsICk7DQoJYXJyYXlfdW5zaGlmdCggJG5ld19mdWxscmVwbGFjZSwgJHdwX3VwbG9h ZF91cmxfcmVhbCApOw0KCQ0KCS8vIFVwZGF0ZSB1c2VyIHJvbGVzIG9wdGlvbl9uYW1lIHJvdy4NCglt eXNxbF9xdWVyeSggIlVQREFURSBgIiAuICRkZXN0aW5hdGlvbl9kYl9wcmVmaXggLiAib3B0aW9uc2Ag U0VUIG9wdGlvbl9uYW1lPSciIC4gJGRlc3RpbmF0aW9uX2RiX3ByZWZpeCAuICJ1c2VyX3JvbGVzJyBX SEVSRSBvcHRpb25fbmFtZSBMSUtFICclX3VzZXJfcm9sZXMnIExJTUlUIDEiICk7DQoJJHRoaXMtPnN0 YXR1cyggJ2RldGFpbHMnLCAnTW9kaWZpZWQgJyAuIG15c3FsX2FmZmVjdGVkX3Jvd3MoKSAuICcgcm93 KHMpIHdoaWxlIHVwZGF0aW5nIHVzZXIgcm9sZXMgb3B0aW9uX25hbWUgdG8gYCcgLiAkZGVzdGluYXRp b25fZGJfcHJlZml4IC4gJ3VzZXJfcm9sZXNgLicgKTsNCn0NCi8vICoqKioqKioqKiogRU5EIE1VTFRJ U0lURSBFWFBPUlQgLT4gTVVMVElTSVRFIElNUE9SVCAqKioqKioqKioqDQoNCg0KLy8gKioqKioqKioq KiBCRUdJTiBNVUxUSVNJVEUgRVhQT1JUIC0+IFNUQU5EQUxPTkUgICoqKioqKioqKioNCmlmICggKCAk c291cmNlX3R5cGUgPT0gJ211bHRpc2l0ZV9leHBvcnQnICkgJiYgKCAkZGVzdGluYXRpb25fdHlwZSA9 PSAnc3RhbmRhbG9uZScgKSApIHsNCgkvLyBJTVBPUlRBTlQ6IFVwbG9hZCBVUkxzIF9NVVNUXyBiZSB1 cGRhdGVkIGJlZm9yZSBkb2luZyBhIGZ1bGwgVVJMIHJlcGxhY2VtZW50IG9yIGVsc2UgdGhlIGZpcnN0 IHBvcnRpb24gb2YgdGhlIFVSTCB3aWxsIGJlIG1pZ3JhdGVkIHNvIHRoZXNlIHdpbGwgbm8gbG9uZ2Vy IG1hdGNoLiBhcnJheV91bnNoaWZ0KCkgaXMgdXNlZCB0byBidW1wIHRoZXNlIHRvIHRoZSB0b3Agb2Yg dGhlIGxpc3QgdG8gdXBkYXRlLg0KCS8vIFRoZXNlIHdpbGwgaGFuZGxlIGJvdGggdGhlIFJFQUwgdXJs IGh0dHA6Ly8uLi4vd3AtY29udGVudC9ibG9ncy5kaXIvIyMvZmlsZXMvIHRoYXQgdGhlIHZpcnR1YWwg cGF0aCAoaHR0cDovLy4uLi4vd3AtY29udGVudC91cGxvYWRzLykuDQoJDQoJLy8gVGhlIG9sZCB2aXJ0 dWFsIHVwbG9hZCBVUkwuIEV4OiBodHRwOi8vZ2V0YmFja3VwYnVkZHkuY29tL2ZpbGVzLy4gVW5zaGlm dGVkIHRvIHBsYWNlIHRoZXNlIHJlcGxhY2VtZW50cyBGSVJTVCBpbiB0aGUgYXJyYXkgb2YgVVJMcyB0 byByZXBsYWNlLg0KCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgJ09sZCB2aXJ0dWFsIHVwbG9hZCBV Ukw6ICcgLiAkdGhpcy0+X2JhY2t1cGRhdGFbICd1cGxvYWRfdXJsJyBdICk7DQoJYXJyYXlfdW5zaGlm dCggJG9sZF91cmxzLCAkdGhpcy0+X2JhY2t1cGRhdGFbICd1cGxvYWRfdXJsJyBdICk7DQoJYXJyYXlf dW5zaGlmdCggJG9sZF9mdWxscmVwbGFjZSwgJHRoaXMtPl9iYWNrdXBkYXRhWyAndXBsb2FkX3VybCcg XSApOw0KCQ0KCS8vIFRoZSBuZXcgc3RhbmRhbG9uZSB1cGxvYWQgVVJMLiBFeDogaHR0cDovL3BsdWdp bmJ1ZGR5LmNvbS93cC1jb250ZW50L3VwbG9hZHMvLiBVbnNoaWZ0ZWQgdG8gcGxhY2UgdGhlc2UgcmVw bGFjZW1lbnRzIEZJUlNUIGluIHRoZSBhcnJheSBvZiBVUkxzIHRvIHJlcGxhY2UuDQoJJHRoaXMtPnN0 YXR1cyggJ2RldGFpbHMnLCAnTmV3IHVwbG9hZCBVUkwgdG8gcmVwbGFjZSB2aXJ0dWFsIHVwbG9hZCBV Ukw6ICcgLiAkbmV3X3VybCAuICcvd3AtY29udGVudC91cGxvYWRzLycgKTsNCglhcnJheV91bnNoaWZ0 KCAkbmV3X3VybHMsICRuZXdfdXJsIC4gJy93cC1jb250ZW50L3VwbG9hZHMvJyApOw0KCWFycmF5X3Vu

c2hpZnQoICRuZXdfZnVsbHJlcGxhY2UsICRuZXdfdXJsIC4gJy93cC1jb250ZW50L3VwbG9hZHMvJyAp Ow0KCQ0KCS8vIE9ubHkgdXBkYXRlIGFub3RoZXIgVVJMIGlmIGl0IGRpZmZlcnMgLS0gdXN1YWxseSB3 aWxsLiBUaGV5IHdpbGwgYmUgdGhlIHNhbWUgaWYgdGhlIHZpcnR1YWwgdXJsIGRvZXNuJ3QgZXhpc3Qg Zm9yIHNvbWUgcmVhc29uIChubyBodGFjY2VzcyBhdmFpbGFiaWxpdHkgc28gdGhlIHZpcnR1YWwgdXJs IHdvdWxkIG1hdGNoIHRoZSByZWFsIHVybCkNCglpZiAoICR0aGlzLT5fYmFja3VwZGF0YVsgJ3VwbG9h ZF91cmwnIF0gIT0gJHRoaXMtPl9iYWNrdXBkYXRhWyAndXBsb2FkX3VybF9yZXdyaXRlJyBdICkgew0K CQkvLyBUaGUgb2xkIHZpcnR1YWwgdXBsb2FkIFVSTC4gRXg6IGh0dHA6Ly9nZXRiYWNrdXBidWRkeS5j b20vZmlsZXMvLiBVbnNoaWZ0ZWQgdG8gcGxhY2UgdGhlc2UgcmVwbGFjZW1lbnRzIEZJUlNUIGluIHRo ZSBhcnJheSBvZiBVUkxzIHRvIHJlcGxhY2UuDQoJCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgJ09s ZCByZWFsIHVwbG9hZCBVUkw6ICcgLiAkdGhpcy0+X2JhY2t1cGRhdGFbICd1cGxvYWRfdXJsX3Jld3Jp dGUnIF0gKTsNCgkJYXJyYXlfdW5zaGlmdCggJG9sZF91cmxzLCAkdGhpcy0+X2JhY2t1cGRhdGFbICd1 cGxvYWRfdXJsX3Jld3JpdGUnIF0gKTsgLy8gVGhlIG9sZCByZWFsIHVwbG9hZCBVUkwuDQoJCWFycmF5 X3Vuc2hpZnQoICRvbGRfZnVsbHJlcGxhY2UsICR0aGlzLT5fYmFja3VwZGF0YVsgJ3VwbG9hZF91cmxf cmV3cml0ZScgXSApOw0KCQkNCgkJLy8gVGhlIG5ldyBzdGFuZGFsb25lIHVwbG9hZCBVUkwuIEV4OiBo dHRwOi8vcGx1Z2luYnVkZHkuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8uIFVuc2hpZnRlZCB0byBwbGFj ZSB0aGVzZSByZXBsYWNlbWVudHMgRklSU1QgaW4gdGhlIGFycmF5IG9mIFVSTHMgdG8gcmVwbGFjZS4N CgkJJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCAnTmV3IHVwbG9hZCBVUkwgdG8gcmVwbGFjZSByZWFs IHVwbG9hZCBVUkw6ICcgLiAkbmV3X3VybCAuICcvd3AtY29udGVudC91cGxvYWRzLycgKTsNCgkJYXJy YXlfdW5zaGlmdCggJG5ld191cmxzLCAkbmV3X3VybCAuICcvd3AtY29udGVudC91cGxvYWRzLycgKTsg Ly8gVGhlIG5ldyBzdGFuZGFsb25lIHVwbG9hZCBVUkwuDQoJCWFycmF5X3Vuc2hpZnQoICRuZXdfZnVs bHJlcGxhY2UsICRuZXdfdXJsIC4gJy93cC1jb250ZW50L3VwbG9hZHMvJyApOyAvLyBUaGUgbmV3IHN0 YW5kYWxvbmUgdXBsb2FkIFVSTC4NCgl9DQp9DQovLyAqKioqKioqKioqIEVORCBNVUxUSVNJVEUgRVhQ T1JUIC0+IFNUQU5EQUxPTkUgKioqKioqKioqKg0KDQoNCg0KDQovKg0KLy8gRklOQUwgQUxMOg0KDQov LyBVcGRhdGUgU0lURVVSTCBpbiBvcHRpb25zIHRhYmxlLg0KbXlzcWxfcXVlcnkoICJVUERBVEUgYCIg LiAkZGVzdGluYXRpb25fZGJfcHJlZml4IC4gIm9wdGlvbnNgIFNFVCBvcHRpb25fdmFsdWU9JyIgLiBt eXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoICRkZXN0aW5hdGlvbl9zaXRldXJsICkgLiAiJyBXSEVSRSBv cHRpb25fbmFtZT0nc2l0ZXVybCcgTElNSVQgMSIgKTsNCiR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywg J01vZGlmaWVkICcgLiBteXNxbF9hZmZlY3RlZF9yb3dzKCkgLiAnIHJvdyhzKSB3aGlsZSB1cGRhdGlu ZyBTaXRlIFVSTCBpbiBvcHRpb25zIHRhYmxlIHRvIGAnIC4gJGRlc3RpbmF0aW9uX3NpdGV1cmwgLiAn YC4nICk7DQoNCi8vIFVwZGF0ZSBIT01FIFVSTCBpbiBvcHRpb25zIHRhYmxlLg0KaWYgKCAkZGVzdGlu YXRpb25faG9tZSAhPSAnJyApIHsNCglteXNxbF9xdWVyeSggIlVQREFURSBgIiAuICRkZXN0aW5hdGlv bl9kYl9wcmVmaXggLiAib3B0aW9uc2AgU0VUIG9wdGlvbl92YWx1ZT0nIiAuIG15c3FsX3JlYWxfZXNj YXBlX3N0cmluZyggJGRlc3RpbmF0aW9uX2hvbWUgKSAuICInIFdIRVJFIG9wdGlvbl9uYW1lPSdob21l JyBMSU1JVCAxIiApOw0KCSR0aGlzLT5zdGF0dXMoICdkZXRhaWxzJywgJ01vZGlmaWVkICcgLiBteXNx bF9hZmZlY3RlZF9yb3dzKCkgLiAnIHJvdyhzKSB3aGlsZSB1cGRhdGluZyBIb21lIFVSTCBpbiBvcHRp b25zIHRhYmxlIHRvIGAnIC4gJGRlc3RpbmF0aW9uX2hvbWUgLiAnYC4nICk7DQp9DQoqLw0KDQoNCi8v IExvb3AgdGhyb3VnaCB0aGUgdGFibGVzIG1hdGNoaW5nIHRoaXMgcHJlZml4LiBEb2VzIE5PVCBjaGFu Z2UgZGF0YSBpbiBvdGhlciB0YWJsZXMuDQovLyBUaGlzIGNoYW5nZXMgYWN0dWFsIGRhdGEgb24gYSBj b2x1bW4gYnkgY29sdW1uIGJhc2lzIGZvciB2ZXJ5IHJvdyBpbiBldmVyeSB0YWJsZS4NCiR0YWJsZXMg PSBhcnJheSgpOw0KJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCAiU0hPVyBUQUJMRVMgTElLRSAnIiAuICRk ZXN0aW5hdGlvbl9kYl9wcmVmaXggLiAiJSciICk7DQp3aGlsZSAoICR0YWJsZSA9IG15c3FsX2ZldGNo X3JvdyggJHJlc3VsdCApICkgew0KCSR0YWJsZXNbXSA9ICR0YWJsZVswXTsNCn0NCnVuc2V0KCAkdGFi bGUgKTsNCiR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgJ0ZvdW5kICcgLiBteXNxbF9udW1fcm93cygg JHJlc3VsdCApIC4gJyBXb3JkUHJlc3MgdGFibGVzLiAnICk7DQp1bnNldCggJHJlc3VsdCApOw0KDQoN CiRicnV0ZWZvcmNlX3RhYmxlcyA9ICR0aGlzLT5hcnJheV9yZW1vdmUoICR0YWJsZXMsICRicnV0ZWZv cmNlX2V4Y2x1ZGVkX3RhYmxlcyApOyAvLyBSZW1vdmVzIGFsbCB0YWJsZXMgbGlzdGVkIGluICRleGNs dWRlZF90YWJsZXMgZnJvbSAkdGFibGVzLg0KdW5zZXQoICR0YWJsZXMgKTsNCg0KDQppZiAoICRkZXN0 aW5hdGlvbl90eXBlID09ICdtdWx0aXNpdGVfaW1wb3J0JyApIHsNCglyZXF1aXJlX29uY2UoICR0aGlz LT5fcGx1Z2luUGF0aCAuICcvbGliL2RicmVwbGFjZS9kYnJlcGxhY2UucGhwJyApOw0KfSBlbHNlIHsN CglyZXF1aXJlX29uY2UoICdpbXBvcnRidWRkeS9saWIvZGJyZXBsYWNlL2RicmVwbGFjZS5waHAnICk7 DQp9DQokZGJyZXBsYWNlID0gbmV3IHBsdWdpbmJ1ZGR5X2RicmVwbGFjZSggJHRoaXMgKTsNCg0KDQoN Ci8vICoqKioqKioqKiogQkVHSU4gTUFLSU5HIE9MRCBVUkxTIFVOSVFVRSBBTkQgVFJJTU1JTkcgQ09S UkVTUE9ORElORyBORVcgVVJMUyAqKioqKioqKioqDQoJDQoJLy8gVGhpcyBlbnRpcmUgc2VjdGlvbiBp cyBpbiBwbGFjZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSByZXBsYWNlbWVudHMuDQoJDQoJLyoJYXJyYXlf cGFpcnNfdW5pcXVlX2ZpcnN0KCkNCgkgKgkNCgkgKglUYWtlcyB0d28gYXJyYXlzLiBMb29rcyBmb3Ig YW55IGR1cGxpY2F0ZSB2YWx1ZXMgaW4gdGhlIGZpcnN0IGFycmF5LiBUaGF0IGl0ZW0gaXMgcmVtb3Zl ZC4gVGhlIGNvcnJlc3BvbmRpbmcgaXRlbSBpbiB0aGUgc2Vjb25kIGFycmF5IGlzIHJlbW92ZWQgYWxz by4NCgkgKglSZXNldHMgaW5kZXhlcyBhcyBhIGNvdXJ0ZXN5IHdoaWxlIG1haW50YWluaW5nIG9yZGVy Lg0KCSAqCQ0KCSAqCUBwYXJhbQkJYXJyYXkJCSRhCQlGaXJzdCBhcnJheSB0byBtYWtlIHVuaXF1ZS4N CgkgKglAcGFyYW0JCWFycmF5CQkkYgkJU2Vjb25kIGFycmF5IHRoYXQgaGFzIGl0ZW1zIHJlbW92ZWQg

dGhhdCB3ZXJlIGluIHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSByZW1vdmVkIGR1cGxpY2F0ZXMgZm91 bmQgaW4gJGEuDQoJICoJQHJldHVybgkJDQoJICovDQoJZnVuY3Rpb24gYXJyYXlfcGFpcnNfdW5pcXVl X2ZpcnN0KCAkYSwgJGIgKSB7DQoJCSRhX3VuaXF1ZXMgPSBhcnJheV91bmlxdWUoICRhICk7IC8vIEdl dCB1bmlxdWUgdmFsdWVzIGluICRhLiBLZXlzIGFyZSBtYWludGFpbmVkLg0KCQkNCgkJJHJlc3VsdCA9 IGFycmF5KCk7DQoJCSRyZXN1bHRbMF0gPSAkYV91bmlxdWVzOw0KCQkkcmVzdWx0WzFdID0gYXJyYXlf aW50ZXJzZWN0X2tleSggJGIsICRhX3VuaXF1ZXMgKTsgLy8gR2V0IHRoZSBwYXJ0IG9mIHRoZSAkYiBh cnJheSB0aGF0IGlzIG1pc3NpbmcgZnJvbSAkYS4NCgkJDQoJCSRyZXN1bHRbMF0gPSBhcnJheV9tZXJn ZSggJHJlc3VsdFswXSApOw0KCQkkcmVzdWx0WzFdID0gYXJyYXlfbWVyZ2UoICRyZXN1bHRbMV0gKTsN CgkJcmV0dXJuICRyZXN1bHQ7DQoJfQ0KCQ0KCSR1bmlxdWVfdXJscyA9IGFycmF5X3BhaXJzX3VuaXF1 ZV9maXJzdCggJG9sZF91cmxzLCAkbmV3X3VybHMgKTsNCgkkb2xkX3VybHMgPSAkdW5pcXVlX3VybHNb MF07DQoJJG5ld191cmxzID0gJHVuaXF1ZV91cmxzWzFdOw0KCQ0KCSR1bmlxdWVfdXJscyA9IGFycmF5 X3BhaXJzX3VuaXF1ZV9maXJzdCggJG9sZF9mdWxscmVwbGFjZSwgJG5ld19mdWxscmVwbGFjZSApOw0K CSRvbGRfZnVsbHJlcGxhY2UgPSAkdW5pcXVlX3VybHNbMF07DQoJJG5ld19mdWxscmVwbGFjZSA9ICR1 bmlxdWVfdXJsc1sxXTsNCgkNCi8vICoqKioqKioqKiogRU5EIE1BS0lORyBPTEQgVVJMUyBVTklRVUUg QU5EIFRSSU1NSU5HIENPUlJFU1BPTkRJTkcgTkVXIFVSTFMgKioqKioqKioqKg0KDQoNCg0KJHRoaXMt PnN0YXR1cyggJ2RldGFpbHMnLCAnT2xkIFVSTHM6ICcgLiBpbXBsb2RlKCAnLCAnLCAkb2xkX3VybHMg KSApOw0KJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCAnTmV3IFVSTHM6ICcgLiBpbXBsb2RlKCAnLCAn LCAkbmV3X3VybHMgKSApOw0KJHRoaXMtPnN0YXR1cyggJ2RldGFpbHMnLCAnT2xkIGZ1bGwgcmVwbGFj ZTogJyAuIGltcGxvZGUoICcsICcsICRvbGRfZnVsbHJlcGxhY2UgKSApOw0KJHRoaXMtPnN0YXR1cygg J2RldGFpbHMnLCAnTmV3IGZ1bGwgcmVwbGFjZTogJyAuIGltcGxvZGUoICcsICcsICRuZXdfZnVsbHJl cGxhY2UgKSApOw0KDQoNCi8vIFVwZGF0ZSBzaXRlIFVSTCBzdHJpbmdzIGluIHBvc3RzIHRhYmxlIGZv ciByb3dzIHBvc3RfY29udGVudCwgcG9zdF9leGNlcnB0LCBhbmQgcG9zdF9jb250ZW50X2ZpbHRlcmVk LiBETyBOT1QgdXBkYXRlIHRoZSBndWlkIGV2ZW4gaWYgaXQgY29udGFpbnMgVVJMOyBwZXIgTGVhcm5l ZCBCYWNrdXBCdWRkeSBtaWdyYXRpb25zIGhhdmUgYmVlbiB1cGRhdGluZyB0aGUgcG9zdCBHVUlEIHNp bmNlIGl0IGxhdW5jaGVkIHdoZW4gaXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4uLi4gaHR0cDovL2NvZGV4 LndvcmRwcmVzcy5vcmcvQ2hhbmdpbmdfVGhlX1NpdGVfVVJMI0ltcG9ydGFudF9HVUlEX05vdGUNCiR0 aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgJ1VwZGF0aW5nIHBvc3RzIHRhYmxlIHNpdGUgVVJMcy4nICk7 DQokZGJyZXBsYWNlLT50ZXh0KCAkZGVzdGluYXRpb25fZGJfcHJlZml4IC4gJ3Bvc3RzJywgJG9sZF91 cmxzLCAkbmV3X3VybHMsIGFycmF5KCAncG9zdF9jb250ZW50JywgJ3Bvc3RfZXhjZXJwdCcsICdwb3N0 X2NvbnRlbnRfZmlsdGVyZWQnICkgKTsNCiR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgJ1NpdGUgVVJM cyB1cGRhdGVkIGluIHBvc3RzIHRhYmxlLicgKTsNCg0KLy8gTWlzYyBzdHJpbmcgcmVwbGFjZW1lbnRz DQokdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdSZXBsYWNpbmcgV29yZFByZXNzIGNvcmUgZGF0YWJh c2UgdGV4dCBkYXRhLi4uJyApOw0KJGRicmVwbGFjZS0+dGV4dCggJGRlc3RpbmF0aW9uX2RiX3ByZWZp eCAuICd1c2VycycsICRvbGRfdXJscywgJG5ld191cmxzLCBhcnJheSggJ3VzZXJfdXJsJyApICk7DQok ZGJyZXBsYWNlLT50ZXh0KCAkZGVzdGluYXRpb25fZGJfcHJlZml4IC4gJ3VzZXJzJywgJG9sZF91cmxz LCAkbmV3X3VybHMsIGFycmF5KCAnY29tbWVudF9jb250ZW50JywgJ2NvbW1lbnRfYXV0aG9yX3VybCcg KSApOw0KJGRicmVwbGFjZS0+dGV4dCggJGRlc3RpbmF0aW9uX2RiX3ByZWZpeCAuICdsaW5rcycsICRv bGRfdXJscywgJG5ld191cmxzLCBhcnJheSggJ2xpbmtfdXJsJywgJ2xpbmtfaW1hZ2UnLCAnbGlua190 YXJnZXQnLCAnbGlua19kZXNjcmlwdGlvbicsICdsaW5rX25vdGVzJywgJ2xpbmtfcnNzJyApICk7DQok dGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdXb3JkUHJlc3MgY29yZSBkYXRhYmFzZSB0ZXh0IHJlcGxh Y2VkLicgKTsNCg0KLy8gTWlzYyBzZXJpYWxpemVkIGRhdGEgcmVwbGFjZW1lbnRzLg0KJHRoaXMtPnN0 YXR1cyggJ21lc3NhZ2UnLCAnUmVwbGFjaW5nIFdvcmRQcmVzcyBjb3JlIGRhdGFiYXNlIHNlcmlhbGl6 ZWQgZGF0YS4uLicgKTsNCiRkYnJlcGxhY2UtPnNlcmlhbGl6ZWQoICRkZXN0aW5hdGlvbl9kYl9wcmVm aXggLiAnb3B0aW9ucycsICRvbGRfZnVsbHJlcGxhY2UsICRuZXdfZnVsbHJlcGxhY2UsIGFycmF5KCAn b3B0aW9uX3ZhbHVlJyApICk7DQokZGJyZXBsYWNlLT5zZXJpYWxpemVkKCAkZGVzdGluYXRpb25fZGJf cHJlZml4IC4gJ3VzZXJtZXRhJywgJG9sZF9mdWxscmVwbGFjZSwgJG5ld19mdWxscmVwbGFjZSwgYXJy YXkoICdtZXRhX3ZhbHVlJyApICk7DQokZGJyZXBsYWNlLT5zZXJpYWxpemVkKCAkZGVzdGluYXRpb25f ZGJfcHJlZml4IC4gJ3Bvc3RtZXRhJywgJG9sZF9mdWxscmVwbGFjZSwgJG5ld19mdWxscmVwbGFjZSwg YXJyYXkoICdtZXRhX3ZhbHVlJyApICk7DQokZGJyZXBsYWNlLT5zZXJpYWxpemVkKCAkZGVzdGluYXRp b25fZGJfcHJlZml4IC4gJ2NvbW1lbnRtZXRhJywgJG9sZF9mdWxscmVwbGFjZSwgJG5ld19mdWxscmVw bGFjZSwgYXJyYXkoICdtZXRhX3ZhbHVlJyApICk7DQokdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdX b3JkUHJlc3MgY29yZSBkYXRhYmFzZSBzZXJpYWxpemVkIGRhdGEgcmVwbGFjZWQuJyApOw0KDQpmb3Jl YWNoICggJGJydXRlZm9yY2VfdGFibGVzIGFzICRicnV0ZWZvcmNlX3RhYmxlICkgew0KCSRkYnJlcGxh Y2UtPmJydXRlZm9yY2VfdGFibGUoICRicnV0ZWZvcmNlX3RhYmxlLCAkb2xkX2Z1bGxyZXBsYWNlLCAk bmV3X2Z1bGxyZXBsYWNlICk7DQp9DQoNCg0KLy8gVXBkYXRlIHRhYmxlIHByZWZpeGVzIGluIHNvbWUg V29yZFByZXNzIG1ldGEgZGF0YS4NCiRvbGRfcHJlZml4ID0gJHRoaXMtPl9iYWNrdXBkYXRhWydkYl9w cmVmaXgnXTsNCiRuZXdfcHJlZml4ID0gbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCAkZGVzdGluYXRp b25fZGJfcHJlZml4ICk7DQppZiAoJG9sZF9wcmVmaXggIT0gJG5ld19wcmVmaXggKSB7DQoJbXlzcWxf cXVlcnkoIlVQREFURSBgIi4kbmV3X3ByZWZpeC4idXNlcm1ldGFgIFNFVCBtZXRhX2tleSA9IFJFUExB Q0UobWV0YV9rZXksICciLiRvbGRfcHJlZml4LiInLCAnIi4kbmV3X3ByZWZpeC4iJyApOyIpOw0KCW15

c3FsX3F1ZXJ5KCJVUERBVEUgYCIuJG5ld19wcmVmaXguIm9wdGlvbnNgIFNFVCBvcHRpb25fbmFtZSA9 ICciLiRuZXdfcHJlZml4LiJ1c2VyX3JvbGVzJyBXSEVSRSBvcHRpb25fbmFtZSA9JyIuJG9sZF9wcmVm aXguInVzZXJfcm9sZXMnIEFORCBibG9nX2lkPScwJzsiKTsNCgkkdGhpcy0+c3RhdHVzKCAnbWVzc2Fn ZScsICdVcGRhdGVkIHByZWZpeCBNRVRBIGRhdGEuJyApOw0KfQ0KDQokdGhpcy0+c3RhdHVzKCAnbWVz c2FnZScsICdNaWdyYXRlZCAnIC4gY291bnQoICRicnV0ZWZvcmNlX3RhYmxlcyApIC4gJyB0YWJsZXMg dmlhIGJydXRlIGZvcmNlLicgKTsNCiR0aGlzLT5zdGF0dXMoICdtZXNzYWdlJywgJ1Rvb2sgJyAuIHJv dW5kKCBtaWNyb3RpbWUoIHRydWUgKSAtICR0aGlzLT50aW1lX3N0YXJ0LCAzICkgLiAnIHNlY29uZHMu IERvbmUuJyApOw0KDQokdGhpcy0+c3RhdHVzKCAnbWVzc2FnZScsICdEYXRhYmFzZSBjb250ZW50IG1p Z3JhdGVkLicgKTsNCg0KJHJldHVybiA9IHRydWU7IC8vIE5lZWRlZCBmb3IgaW1wb3J0YnVkZHkgc2lu Y2UgdGhlIGZvbGxvd2luZyByZXR1cm4gZG9lcyBub3QgdHJpZ2dlciBzaW5jZSBpdCdzIGluIGFuIGlu Y2x1ZGUuDQpyZXR1cm4gdHJ1ZTsNCj8+ ###PACKDATA,FILE_END,/classes/_migrate_database.php,importbuddy/classes/_migrate _database.php ###PACKDATA,END */

Anda mungkin juga menyukai