#!/usr/bin/perl 
#
#
# еڤӳƥӥλȽǵڤӥե񤭹ߥޥ
#
# getdata [-t second] [-ip IPaddress] 
#        -t     ꤵ줿ÿsleep֤ˤʤ
#        -ip    ꤵ줿IPФƤΤ߽Ԥ
#        ̵		/etc/opt/nec/wbmc/servers.conf¸ߤIPƤ˽Ԥ
#

require "/opt/nec/wbmc/adm/z99msv/plurservers.pl";

use Socket;

# getdatacron̵Ǻ

$msg = "";
$msg = &Delcrongetdata();

if($msg){
	print "$msg";
	&writeDataLog("$msg", "getdata", "$WBMC_SERVERS_LOG");
	exit;
}

# Ǥgrtdata¹ԤƤ뤫ˤĤĴ٤

if(-e "$WBMC_GETDATA_PID"){

# ݡ󥰤ξΤ߼ʬȤλ
	if($ARGV[0] eq "-t"){
		exit;
	}

# ˼¹ԤƤgetdataλ

	if(!(&readDataFile("$WBMC_GETDATA_PID", *line))){
		print "IDǡեɤ߹ߤ˼Ԥޤ";
		&writeDataLog("can't read pid", "getdata", "$WBMC_SERVERS_LOG");
		exit;
	}

	kill (9, $line[0]);

}

# ߼¹ԤƤgetdataPID

if(!open(DATA, "> $WBMC_GETDATA_PID")){
	print "IPǡեν񤭹ߤ˼Ԥޤ";
	&writeDataLog("can't write pid", "getdata", "$WBMC_SERVERS_LOG");
	exit;
}

print DATA $$;
close (DATA);

# ץˤڤʬ

$flg = "";
@ipadd = ();
$sleep = "";

if ($ARGV[0] eq "-ip") {
	$ipadd[0] = $ARGV[1];
}else{
	if($ARGV[0] eq "-t"){
		$sleep = $ARGV[1];
		sleep $sleep;
	}

# servers.confϿƤФIPɥ쥹

	if(!(&readDataFile("$WBMC_SERVERS_CONF", *line))){
		print "server.confɤ߹ߤ˼Ԥޤ";
		&writeDataLog("can't read servers.conf_1", "getdata", "$WBMC_SERVERS_LOG");
		exit;
	}

	$j = 0;
	for($i = 0; $i < @line; $i++){
		if($line[$i] =~ /^<SERVER\s+(.+)>/){
			$ipadd[$j++] = $1;
		}
	}
}

for($ip = 0; $ip < @ipadd; $ip++){

# ƻ뤵ƥФξ롣

	$recmsg = "";
	$recmsg = &getServerData($ipadd[$ip]);

	@getdata = ();
	@getdata = split(/\n/, $recmsg);
	@port = ();
	@server = ();
	@netstat = ();
        @systemstat = ();

# ƻ뤵륵ФξνԤ

	if($getdata[0] eq "OK"){
		$server = "";
		$server = "on";
		$j = $k = $l = 0;
		for($i = 0; $i < @getdata; $i++){
			if($getdata[$i] =~ /<PORT>/){
				$flg = 1;
				next;
			}elsif($getdata[$i] =~ /<SERVER>/){
				$flg = 2;
				next;
			}elsif($getdata[$i] =~ /<NETSTAT>/){
				$flg = 3;
				next;
			}elsif($getdata[$i] =~ /<SYSTEMSTAT>/){
				$flg = 4;
				next;
			}
			if($flg == 1){
				$port[$j++] = $getdata[$i];
			}elsif($flg == 2){
				$server[$k++] = $getdata[$i];
			}elsif($flg == 3){
				$netstat[$l++] = $getdata[$i];
			}elsif($flg == 4){
				$systemstat[$m++] = $getdata[$i];
			}
		}
	}else{
		$msg = &ErrorTreatment($ipadd[$ip]);
		if($msg){
			print "$msg";
			&writeDataLog("$msg", "getdata", "$WBMC_SERVERS_LOG");
			system("/bin/rm -f $WBMC_GETDATA_PID");
			exit;
		}
		next;
	}

# NETSTATμ¹Է̤ɬʬΤ

	@ipportnum = (); # IP:portֹη
	@portnum = ();	# portֹΤ

	for($i = 0; $i < @netstat; $i++){
		$ipportnum[$i] = (split(/\s+/,$netstat[$i]))[3];
		$portnum[$i] = (split(/:/,$ipportnum[$i]))[1];
	}

# SERVERTYPEˤڤʬ

	$type= "";
	$type = $server[0];

# ɥʳξ硢Ʊ롼פΥФIPμ褹

	if($type != 10){
		$group = $server[1];
		for($i = 2; $i < @server; $i++){
			$group = join(":","$group","$server[$i]");
		}
	}

# URLɬפPORTֹ渡ʥޥåʤ綯Ū50090Ȥ

	$webport = 50090;
	for($i = 0;$i < @portnum;$i++){
		if($portnum[$i] == 50453){
			$webport = "";
			$webport = $portnum[$i];
			last;
		}
	}


# ƻ뤵륵ӥportֹ򥵡ӥñ̤ڤʬ

	@jughttpd = ();
	@jugimapd = ();
	@jugpopd = ();
	@jugwebmail = ();
	$j = $k = $l= $m = 0;
	for($i = 0;$i < @port;$i++){
		@jugs = ();
		@jugs = split(/\s+/,$port[$i]);
		if($jugs[0] eq "Listen"){
			$jughttpd[$j++] = $jugs[1];
		}elsif($jugs[0] =~ /^imap/){
			$jugimapd[$k++] = (split(/=/,$jugs[0]))[1];
		}elsif($jugs[0] =~ /^pop/){
			$jugpopd[$l++] = (split(/=/,$jugs[0]))[1];
		}elsif($jugs[0] =~ /^http/){
			$jugwebmail[$m++] = (split(/=/,$jugs[0]))[1];
		}
	}

# HTTPDλȽ

	$httpd = "";
	$httpd = &DeadOrAlive_1(*jughttpd, *ipportnum);

	# IMAPλȽ

	$imapd = "";
	$imapd = &DeadOrAlive_1(*jugimapd, *portnum);

	# POPDλȽ

	$popd = "";
	$popd = &DeadOrAlive_1(*jugpopd, *portnum);

	# WEBMAILλȽ

	$webmail = "";
	$webmail = &DeadOrAlive_1(*jugwebmail, *portnum);

	# SENDMAILλȽ

	$send = "";
	$send = &DeadOrAlive_2(25, *portnum);

	# NAMEDλȽ

	$named = "";
	$named = &DeadOrAlive_2(53, *portnum);

	# LDAPDλȽ

	$ldapd = "";
	$ldapd = &DeadOrAlive_2(389, *portnum);

	# FTPDλȽ

	$ftpd = "";
	$ftpd = &DeadOrAlive_2(21, *portnum);

	# NFSDλȽ

	$nfsd = "";
	$nfsd = &DeadOrAlive_2(2049, *portnum);

	# SMBDλȽ

	$smbd = "";
	$smbd = &DeadOrAlive_2(139, *portnum);

	# NTPDλȽ

	$ntpd = "";
	$ntpd = &DeadOrAlive_2(123, *portnum);

	# SNMPDλȽ

	$snmpd = "";
	$snmpd = &DeadOrAlive_2(161, *portnum);

	# SSHDλȽ

	$sshd = "";
	$sshd = &DeadOrAlive_2(22, *portnum);

	# TELNETλȽ

	$telnet = "";
	$telnet = &DeadOrAlive_2(23, *portnum);

	# chksvcλȽ

	$chksvc = "";
	$chksvc = &DeadOrAlive_3("chksvc", *systemstat);

# ǡι

	if(!(&readDataFile("$WBMC_SERVERS_CONF", *line))){
		print "server.confɤ߹ߤ˼Ԥޤ";
		&writeDataLog("can't read servers.conf_2", "getdata", "$WBMC_SERVERS_LOG");
		system("/bin/rm -f $WBMC_GETDATA_PID");
		exit;
	}

	$flg = 0;
	for($i = 0; $i < @line; $i++){
		if($line[$i] =~ /^<SERVER\s+(.+)>/){
			$dataip = "";
			$dataip = $1;
			$dataip =~ s/\s+//g;
			if($dataip eq "$ipadd[$ip]"){
				$flg = 1;
			}
		}elsif($line[$i] =~ /^<\/SERVER>/){
			$flg = 0;
		}

		if($flg == 1){
			if($line[$i] =~ /^PORT/){
				$line[$i] = "";
				$line[$i] = "PORT\t$webport\n";
			}elsif($line[$i] =~ /^TYPE/){
				$line[$i] = "";
				$line[$i] = "TYPE\t$type\n";
			}elsif($line[$i] =~ /^GROUP/){
				$line[$i] = "";
				$line[$i] = "GROUP\t$group\n";
			}elsif($line[$i] =~ /^ONE/){
				$line[$i] = "";
				$line[$i] = "ONE\t$server\n";
			}elsif($line[$i] =~ /^HTTPD/){
				$line[$i] = "";
				$line[$i] = "HTTPD\t$httpd\n";
			}elsif($line[$i] =~ /^SEND/){
				$line[$i] = "";
				$line[$i] = "SEND\t$send\n";
			}elsif($line[$i] =~ /^POPD/){
				$line[$i] = "";
				$line[$i] = "POPD\t$popd\n";
			}elsif($line[$i] =~ /^IMAPD/){
				$line[$i] = "";
				$line[$i] = "IMAPD\t$imapd\n";
			}elsif($line[$i] =~ /^WEBMAIL/){
				$line[$i] = "";
				$line[$i] = "WEBMAIL\t$webmail\n";
			}elsif($line[$i] =~ /^NAMED/){
				$line[$i] = "";
				$line[$i] = "NAMED\t$named\n";
			}elsif($line[$i] =~ /^LDAPD/){
				$line[$i] = "";
				$line[$i] = "LDAPD\t$ldapd\n";
			}elsif($line[$i] =~ /^FTPD/){
				$line[$i] = "";
				$line[$i] = "FTPD\t$ftpd\n";
			}elsif($line[$i] =~ /^NFSD/){
				$line[$i] = "";
				$line[$i] = "NFSD\t$nfsd\n";
			}elsif($line[$i] =~ /^SMBD/){
				$line[$i] = "";
				$line[$i] = "SMBD\t$smbd\n";
			}elsif($line[$i] =~ /^NTPD/){
				$line[$i] = "";
				$line[$i] = "NTPD\t$ntpd\n";
			}elsif($line[$i] =~ /^SNMPD/){
				$line[$i] = "";
				$line[$i] = "SNMPD\t$snmpd\n";
			}elsif($line[$i] =~ /^SSHD/){
				$line[$i] = "";
				$line[$i] = "SSHD\t$sshd\n";
			}elsif($line[$i] =~ /^TELNET/){
				$line[$i] = "";
				$line[$i] = "TELNET\t$telnet\n";
			}elsif($line[$i] =~ /^CHKSVC/){
				$line[$i] = "";
				$line[$i] = "CHKSVC\t$chksvc\n";
			}
		}
	}


# ǡη̤servers.conf˽񤭹

	if(&writeDataFile("$WBMC_SERVERS_CONF", "servers.conf", @line) == 0){
		print "server.confν񤭹ߤ˼Ԥޤ";
		&writeDataLog("can't write servers.conf_1", "getdata", "$WBMC_SERVERS_LOG");
		system("/bin/rm -f $WBMC_GETDATA_PID");
		exit;
	}
}

# ǽ֤񤭹
$msg = &WriteTime();
if($msg){
	print "ǽ֤ν񤭹ߤ˼Ԥޤ";
	&writeDataLog("can't write time", "getdata", "$WBMC_SERVERS_LOG");
	system("/bin/rm -f $WBMC_GETDATA_PID");
	exit;
}

# ꤹ

$msg = &WriteCrontab();
if($msg){
	print "ν񤭹ߤ˼Ԥޤ";
	&writeDataLog("can't write cron", "getdata", "$WBMC_SERVERS_LOG");
	system("/bin/rm -f $WBMC_GETDATA_PID");
	exit;
}

system("/bin/rm -f $WBMC_GETDATA_PID");

exit;
#-----------------------------------------------------------------------------
# ȽǤδؿ
# portֹ椬ʣξ
# ̾
#   DeadOrAlive_1 - ʣΥݡֹĥӥλȽǤԤ
# 
#   DeadOrAlive_1(@serviceport, @netstatport)
# 
#   @serviceport ӥportֹ(WebФξˤĤƤϡIP:portֹ١¾ΥӥportֹΤ)
#   @netstatport netstatμ¹Է̤portֹ(WebФξˤĤƤϡIP:portֹ١¾ΥӥportֹΤ)
# 
#   on	ӥư
#		off	ӥ

sub DeadOrAlive_1
{
	local(*serviceport, *netstatport) = @_;
	my(@flg) = ();
	my($jug, $j) = "";

	$jug = "on";
	for($i = 0;$i < @serviceport;$i++){
		$flg = 0;
		for($j = 0;$j < @netstatport;$j++){
			if($serviceport[$i] eq $netstatport[$j]){
				$flg = 1;
				last;
			}
		}
		if($flg == 0){
			$jug = "off";
			last;
		}
	}
	return($jug);
}

# ȽǤδؿ
# ̾
#   DeadOrAlive_2 - ӥλȽǤԤ
# 
#   DeadOrAlive_2($port, *netstatport)
# 
#   $port				 ӥportֹ
#   @netstatport netstatμ¹Է̤portֹ
# 
#   on	ӥư
#		off	ӥ

sub DeadOrAlive_2
{
	local($port, *netstatport) = @_;
	my($jug, $i) = "";
	$jug = "off";

	for($i = 0;$i < @netstatport;$i++){
		if($port eq "$netstatport[$i]"){
			$jug = "on";
			last;
		}
	}
	return($jug);
}

# ȽǤδؿ
# ̾
#   DeadOrAlive_3 - ӥλȽǤԤ
# 
#   DeadOrAlive_3($system, *systemstat)
# 
#   $system	 ӥμ
#   @systemstat  ӥμ:ӥξ
# 
#   on	ӥư
#		off	ӥ

sub DeadOrAlive_3
{
	local($system, *systemstat) = @_;
	my($jug, $i) = "";
	$jug = "off";

	for($i = 0;$i < @systemstat;$i++){
		$sys = (split(/:/,$systemstat[$i]))[0];
		$stat = (split(/:/,$systemstat[$i]))[1];
		if($system eq $sys){
			$jug = $stat;
			last;
		}
	}
	return($jug);
}

# 顼ȯδؿ
# ̾
#   ErrorTreatment - ԽȽǤǤʤäФν
# 
#   ErrorTreatment($ipadd)
# 
#   $ipadd	ФIPɥ쥹
# 
#		 NULL
#		 顼å

sub ErrorTreatment
{
	my($ipadd) = @_;
	my($dataip, $flg, $msg, $errormsg, $i) = "";
	local(@line) = ();

# servers.confǡɤ߹

	if(!(&readDataFile("$WBMC_SERVERS_CONF", *line))){
		$errormsg = "եɤ߹ߤ˼Ԥޤ";
		return ($errormsg);
	}

# servers.confФȤɽǡηǽ񤭹

	$flg = 0;
	for($i = 0;$i < @line;$i++){
		if($line[$i] =~ /^<SERVER\s+(.+)>/){
			$dataip = $1;
			$dataip =~ s/\s+//g;
			if($dataip eq "$ipadd"){
				$flg = 1;
			}
		}elsif($line[$i] =~ /^<\/SERVER>/){
			$flg = 0;
		}

		$msg = "off";
		if($flg == 1){
			if($line[$i] =~ /^PORT/){
				$line[$i] = "";
				$line[$i] = "PORT\t\n";
			}elsif($line[$i] =~ /^TYPE/){
				$line[$i] = "";
				$line[$i] = "TYPE\t\n";
			}elsif($line[$i] =~ /^GROUP/){
				$line[$i] = "";
				$line[$i] = "GROUP\t\n";
			}elsif($line[$i] =~ /^ONE/){
				$line[$i] = "";
				$line[$i] = "ONE\t$msg\n";
			}elsif($line[$i] =~ /^HTTPD/){
				$line[$i] = "";
				$line[$i] = "HTTPD\t$msg\n";
			}elsif($line[$i] =~ /^SEND/){
				$line[$i] = "";
				$line[$i] = "SEND\t$msg\n";
			}elsif($line[$i] =~ /^POPD/){
				$line[$i] = "";
				$line[$i] = "POPD\t$msg\n";
			}elsif($line[$i] =~ /^IMAPD/){
				$line[$i] = "";
				$line[$i] = "IMAPD\t$msg\n";
			}elsif($line[$i] =~ /^WEBMAIL/){
				$line[$i] = "";
				$line[$i] = "WEBMAIL\t$msg\n";
			}elsif($line[$i] =~ /^NAMED/){
				$line[$i] = "";
				$line[$i] = "NAMED\t$msg\n";
			}elsif($line[$i] =~ /^LDAPD/){
				$line[$i] = "";
				$line[$i] = "LDAPD\t$msg\n";
			}elsif($line[$i] =~ /^FTPD/){
				$line[$i] = "";
				$line[$i] = "FTPD\t$msg\n";
			}elsif($line[$i] =~ /^NFSD/){
				$line[$i] = "";
				$line[$i] = "NFSD\t$msg\n";
			}elsif($line[$i] =~ /^SMBD/){
				$line[$i] = "";
				$line[$i] = "SMBD\t$msg\n";
			}elsif($line[$i] =~ /^NTPD/){
				$line[$i] = "";
				$line[$i] = "NTPD\t$msg\n";
			}elsif($line[$i] =~ /^SNMPD/){
				$line[$i] = "";
				$line[$i] = "SNMPD\t$msg\n";
			}elsif($line[$i] =~ /^SSHD/){
				$line[$i] = "";
				$line[$i] = "SSHD\t$msg\n";
			}elsif($line[$i] =~ /^TELNET/){
				$line[$i] = "";
				$line[$i] = "TELNET\t$msg\n";
			}
		}
	}

  if(&writeDataFile("$WBMC_SERVERS_CONF", "servers.conf", @line) == 0){
		$errormsg = "$WBMC_SERVERS_CONFեν񤭹ߤ˼Ԥޤ";
		return ($errormsg);
  }

return "";

}

# ǽ֤񤭹ؿ
# ̾
#   WriteTime - եκǽ֤񤭹
#		ºݤΥեκ֤ȸ
# 
#   WriteTime()
# 
#		 NULL
#		 顼å

sub WriteTime
{
	local(@line) = ();
	my(@stat) = ();
	my($stime, $sec, $min, $hour, $mday, $mon, $year, $errormsg, $i) = "";


# servers.confԽ֤μ褹롣

	@stat =  stat "$WBMC_SERVERS_CONF";
	$stime = $stat[9];
	($sec, $min, $hour, $mday, $mon, $year) = localtime($stime);
	$year += 1900;
	$mon += 1;

	$mon = &ChangeNum($mon);
	$mday = &ChangeNum($mday);
	$hour = &ChangeNum($hour);
	$min = &ChangeNum($min);
	$sec = &ChangeNum($sec);

	if(!(&readDataFile("$WBMC_SERVERS_CONF", *line))){
		$errormsg = "եɤ߹ߤ˼Ԥޤ";
		return($errormsg);
	}

	for($i = 0; $i < @line; $i++){
		if($line[$i] =~ /^\s*RenewalTime=(.+)$/){
			$line[$i] = "";
			$line[$i] = "RenewalTime=$year/$mon/$mday\t$hour:$min:$sec\n";
			last;
		}
	}

  if(&writeDataFile("$WBMC_SERVERS_CONF", "servers.conf", @line) == 0){
		$msg = "$WBMC_SERVERS_CONFեν񤭹ߤ˼Ԥޤ";
		return ($msg);
  }

return"";

}

# ͤηȽꤷοͤ򣲷ˤؿ(101)
# ̾
#   ChangeNum - οͤ򣲷ˤ
# 
#   ChangeNum($num)
# 
#		Ѵ

sub ChangeNum
{
	my($num) = @_;
	my($renum) = "$num";

	if($num <= 9){
		$renum = "0$num";
	}

return($renum);
}

# crontab ѹ
# ̾
#   WriteCrontab - crontabν񤭴
# 
#   WriteCrontab()
# 
#		 NULL
#		 顼å

sub WriteCrontab
{
	local(@tab) = ();
	local(@ptime) = ();
	my($hour_str, $min_str, $day_str, $month_str, $week_str) = "";
	my($crontab_str, $sec, $time, $msg, $i) = "";

	$hour_str = $min_str = $day_str = $month_str = $week_str = "*";

	if(!(&readDataFile("/etc/crontab", *tab))){
		$msg = "եɤ߹ߤ˼Ԥޤ";
		return ($msg);
	}

# ˤ
	for ($i = 0; $i < @tab; $i++) {
  	  if ($tab[$i] =~ /getdata\s*-t/) {
    	    splice(@tab, $i, 1);
    	}
	}

# եɤ߹
	if (!&readDataFile("$WBMC_SERVERS_CONF", *ptime)) {
		$msg = "եɤ߹ߤ˼Ԥޤ";
		return ($msg);
	}
	
	for($i = 0; $i < @ptime; $i++){
		if($ptime[$i] =~ /^RenewalTime=(.+)\t(.+):(.+):(.+)/){
			$hour_str = $2;
			$min_str = $3;
			$sec = $4;
		}elsif($ptime[$i] =~ /^PollingTime=(.+)/){
			$time = $1;
		}
	}

# crontab ʸ
	if ($time != 0) {
		$min_str = $min_str + $time;
		if($min_str >= 60){
			$hour_str = $hour_str + 1;
			$min_str = $min_str % 60;
		}
		if($hour_str >= 24){
			$hour_str = $hour_str - 24;
		}
    $crontab_str = "$min_str $hour_str $day_str $month_str $week_str root /opt/nec/wbmc/bin/getdata -t $sec > /dev/null\n";
    push(@tab, $crontab_str);
	}

# crontab˽񤭹
  if(&writeDataFile("/etc/crontab", "corntab", @tab) == 0){
		$msg = "/etc/crontabեν񤭹ߤ˼Ԥޤ";
		return ($msg);
  }

# cronƵư
	$rc = system("/etc/rc.d/init.d/crond restart > /dev/null");
	if ($rc) {
		$msg = "ưμ¹ԥߥ󥰤˼Ԥޤ";
		return ($msg);
	}
return"";
}

# ƻ뤵륵Фξؿ
# ̾
#   getServerData - ƻ뤵륵Фξ
# 
#   getServerData($ipadd)
# 
#   $ipadd	ФIPɥ쥹
# 
#		 ƻ뤵륵ФΥǡ
#		 顼å

sub getServerData
{
	local($ipadd) = @_;
	my($port, $ipaddr, $sockaddr, $proto, $msg, $recdata, $getdata) = "";

	$port = "50100";
	$ipaddr = inet_aton($ipadd);
	$sockaddr = pack_sockaddr_in($port,$ipaddr);

# ץȥֹ롣

	$proto = getprotobyname('tcp');

# åȤ򥪡ץ󤹤롣

	if(!socket(SOCK,PF_INET,SOCK_STREAM,$proto)){
		$msg = "socket error\n";
		return ($msg);
	}

# ͥȤ롣

	if(!connect(SOCK,$sockaddr)){
		$msg = "connect error\n";
		close SOCK;
		return ($msg);
	}

# ƻ륵Ф˥ǡ׵

	select(SOCK); $|=1; select(STDOUT);
	print SOCK "getdata\n";

# ƻ륵Фǡ

	while (<SOCK>){
		if($_ eq "last_data"){
			last;
		}
		else{
			$getdata .= $_;
		}
        }

	close SOCK;
	return ($getdata);
}

sub sig_handler
{
	my($msg) = @_;
	if($msg){
		return ($msg);
	}
}

# crontabgetdata
# ̾
#   Delcrongetdata - ԽȽǤǤʤäФν
# 
#   Delcrongetdata()
# 
#		 NULL
#		 顼å

sub Delcrongetdata
{
	my($i, $rc, $msg) = "";
	local(@tab) = ();

	if(!(&readDataFile("/etc/crontab", *tab))){
		$msg = "եɤ߹ߤ˼Ԥޤ";
		return ($msg);
	}

# ˤ
	for ($i = 0; $i < @tab; $i++) {
  	if ($tab[$i] =~ /getdata\s*-t/) {
 	 	  splice(@tab, $i, 1);
			last;
 		}
	}

# crontab˽񤭹
	if(&writeDataFile("/etc/crontab", "corntab", @tab) == 0){
		$msg = "/etc/crontabեν񤭹ߤ˼Ԥޤ";
		return ($msg);
	}

# cronƵư
	$rc = system("/etc/rc.d/init.d/crond restart > /dev/null");
	if ($rc) {
		$msg = "ưμ¹ԥߥ󥰤˼Ԥޤ";
		return ($msg);
	}

return""; 
}

#-------------------------------------------------------------------------------

