#! /bin/bash
# 2003-12-16, anders@bsdconsulting.no
# Requirement: Perl 5 in /usr/local/bin or /usr/bin with MIME::Base64.
# MIME::Base64 too. So install it or get Perl 5.8!
#
# Encode a file with base64:
# cat <filename> | ./fix.sh encode
# Decode a base64-encoded file:
# cat <filename> | ./fix.sh decode
#
# Directory for "fix-it" tools:
fixitdir=/opt/fixit

PATH=/usr/local/bin:$PATH
export PATH

greet() {
	echo "Fixing /etc/ and /etc/init.d startup scripts for `uname -sr`."
	echo "This process locks down startup scripts so that there will be no unneccessary"
	echo "network daemons running on this host (an important security measure)."
	echo
	echo "For updates to this script, see http://anders.fix.no/software/#unix"
	echo
}

ckp5b64() {
	# Check if perl is Perl 5
	basever=`perl -V:baserev | cut -d'=' -f2 | tr -d "[\'\;]" | cut -d'.' -f1`
	if [ "$basever" = "5" ]
	then
		echo "Perl program is Perl 5, great."
	else
		echo "Error: Perl program is not Perl 5, exiting."
		exit 1
	fi
	# Check if MIME::Base64 is present
	if (perl -e 'use MIME::Base64;' >/dev/null 2>&1)
	then
		echo "Perl 5 installation has MIME::Base64, great."
	else
		echo "Error: no MIME::Base64 installation found for `which perl`, exiting."
		exit 1
	fi
}

baseenc() {
	perl -e 'use MIME::Base64; while (<STDIN>) { print encode_base64($_); }'
}

basedec() {
	perl -e 'use MIME::Base64; while (<STDIN>) { print decode_base64($_); }'
}

perlfix() {
	# $1: regexp $2: filename
	cp $2 $2.tmp
	perl -pi -e "$1" $2.tmp
	cp $2.tmp $2
	rm -f $2.tmp >/dev/null 2>&1
}

footer() {
	echo
	echo "If you want to enable any network daemons (you may need it for what you use this"
	echo "machine, edit /etc/startup.conf and reboot or stop/start the relevant startup"
	echo "scripts."
}

initsconf() {
	sconf=/etc/startup.conf
	
	if [ ! -f $sconf ]
	then
		echo "Initializing configuration $sconf.."
		echo

		touch $sconf
		chmod 0700 $sconf
	
		cat >$sconf <<EOF
# Configuration file for network services to be started up 
# Anders Nordby <anders@fix.no>, 2002-06-19
#
# Type YES with capital letters to enable service.
#
EOF
	else
		echo "Hm, startup.conf exists. Did you run fix.sh before?"
		return 1
	fi

}

checksconf() {
	# $1: variable to look for
	sconf=/etc/startup.conf
	if [ -z "`grep \"^$1=\" $sconf`" ]
	then
		return 0
	else
		echo "$1= already set in $sconf. Assuming you have set it to what"
		echo "you want.."
		echo
		return 1
	fi
}

fixss() {
#        # $1: startup script $2: base name for configuration
#	$3: eventually "YES" (if it is to be enabled)
	sconf=/etc/startup.conf
	
	if [ "$3" = "YES" ]; then mode=YES; else mode=NO; fi

        cd /etc/init.d

	if [ -f $1 ]; then
		if [ ! -z "$2" ]
		then
			if ( checksconf $2 )
			then
				echo "$2=$mode" >>$sconf
			fi
		fi

		if [ -z "`grep \"^\. /etc/startup\.conf\" $1`" ]
		then
       			head -1 $1 >$1.tmp
		        printf ". $sconf\n" >>$1.tmp
			if [ ! -z "$2" ]
			then
		        printf "if [ "\$$2" != "YES" ]; then exit 0; fi\n" >>$1.tmp
			fi
			tail +2 $1 >>$1.tmp
			cp $1.tmp $1
			rm $1.tmp
			echo "/etc/init.d/$1 patched.."
			echo
		else
			echo "Init script /etc/init.d/$1 already includes $sconf."
			echo "Assuming it is properly patched.."
			echo
		fi
	fi
}

fixsendmail() {
	cd /etc/init.d

	case `uname -r` in
	'5.8')
		badmode="`grep -- '-bd' sendmail`"
		frommode="-bd"
		tomode=""
		;;
	'5.9')
		badmode="`grep -- '-bd' sendmail | grep -v -- '-ODaemonPortOptions=Addr=localhost'`"
		frommode="-bd"
		tomode="-bd -ODaemonPortOptions=Addr=localhost"
		;;
	esac

	cd /etc/init.d
	sconf=/etc/startup.conf
	if [ ! -z "$badmode" ]
	then
		cat sendmail | sed "s/$frommode/$tomode/g" >sendmail.tmp
		if [ -n "$1" ]
		then
			line=y
		else
			diff -c sendmail sendmail.tmp
			echo
			echo "We want to make sure sendmail will not run a TCP daemon, most servers should"
			echo "only spool their mail and not listen on the network. The above diff should take"
			printf "care of that. Do the changes look OK to you? (y/n) "
			read line
		fi
		echo
		if [ "`echo $line | cut -c1 | tr 'A-Z' 'a-z'`" = "y" ]
		then
			echo "Great. Disabling sendmail network daemon."
			cp sendmail.tmp sendmail
		else
			echo "Sigh. Yet another loosely maintained sendmail installation wild on the network?"
			if [ "`grep '^SENDMAIL=' $sconf | tail -1 | sed s/' '//g`" = "SENDMAIL=YES" ]
			then
				echo 'SENDMAIL=NO' >>$sconf
				chmod 0700 $sconf
				echo "Adding SENDMAIL=NO to $sconf to be safe.."
				echo
			fi
		fi
		rm sendmail.tmp
	else
		echo "No problem with sendmail mode in /etc/init.d/sendmail. Great."
	fi
}

fixinetdc() {
	cd /etc
	if [ -z "`head -1 inetd.conf | grep '^#SEC'`" ]
	then
		cat inetd.conf | (
			while read line
			do
				echo "#SEC $line"
			done
		) >inetd.conf.tmp
		cp inetd.conf.tmp inetd.conf
		rm inetd.conf.tmp
	fi
}

fixinetsvcss() {
	sconf=/etc/startup.conf
	cd /etc/init.d
	if [ -z "`egrep 'NAMED.*=.*/usr/sbin/in.named &' inetsvc`" ]
	then
		perlfix 's@.*(/usr/sbin/in.named &).*@\tif [ "\$NAMED" = "YES" ]; then (\1); fi@' inetsvc
	fi
	if [ -z "`egrep 'INETD.*=.*/usr/sbin/inetd -s' inetsvc`" ]
	then
		case `uname -r` in
		5.8)
			perlfix 's@.*(/usr/sbin/inetd -s) &.*@if [ "\$INETD" = "YES" ]; then (\1 -t &); fi@' inetsvc
			;;
		5.9)
			perlfix 's@.*(/usr/sbin/inetd -s).*@if [ "\$INETD" = "YES" ]; then (\1 -t); fi@' inetsvc
			;;
		esac
	fi
	if (checksconf NAMED); then echo "NAMED=NO" >>$sconf; fi
	if (checksconf INETD); then echo "INETD=NO" >>$sconf; fi
}

notrouter() {
	echo "Creating /etc/notrouter. Remove it if this host is supposed to be a router."
	touch /etc/notrouter
}

fixsyslogdss() {
	cd /etc/init.d
	perlfix "s@/usr/sbin/syslogd >/dev/msglog@/usr/sbin/syslogd -t >/dev/msglog@" syslog
}

fixdtconfig() {
	if [ -f /usr/dt/config/Xconfig  ]
	then
		cd /etc
		if [ -f /etc/dt/config/Xconfig ]
		then
			if [ -z "`grep -i xdmmode /etc/dt/config/Xconfig | egrep -v '^#'`" ]
			then
				echo 'Dtlogin*xdmMode:       0' >>dt/config/Xconfig
			fi
		else
			mkdir -p dt/config
			cp -p /usr/dt/config/Xconfig dt/config/
			echo 'Dtlogin*xdmMode:       0' >>dt/config/Xconfig
			chmod 0755 dt dt/config
			chmod 0444 dt/config/Xconfig
		fi
	fi
}

fixinetinitconfig() {
	cd /etc/default
	cat inetinit | sed s/'^TCP_STRONG_ISS.*'/'TCP_STRONG_ISS=2'/g >inetinit.tmp
	cp inetinit.tmp inetinit
	rm inetinit.tmp
}

# =====

pnettune() {
# nettune.gz 3.22
# Download from: http://www.sean.de/Solaris/
basedec << 'EOF'
H4sICGlPvT0CA25ldHR1bmUArVprc9vG1f5M/opjWmNJrkgC4EUSErtRVHnqtnFU0W6baTs0BCxF
VCCAYAFSapq//X5+n7OLK0HasieKnZGxZ58998sCz58N5a0fDuWy+/w3/Ok+p4O3nk2hSNMsFCdr
Gg0siyzDMIbG6dAckXluj8b2ZETuMsqc0Eno6iGmgy5vvcjSZZTY9CcRyv5sQH/7P/c+EAl9K6PA
SXz5nRROOPDEa9AWP3/CI7rMsTz6toD1voudxB08iCR6GLjR6jWf8JtKCg==
JoYidYeJOxt4w9nIzIWm/mu94Id+ipX8sdowE4JsWqZpbA+Hm81mkEs0nGkJK2JyQu/TpAAEmR9K
B+c8Qp/CvZddf0H/pN7HLHRW4mOPnr2i3iwLf5z16N/fULoUYZe1JqAm6r1f+pLwJ4xScijHJfko
U7F61tOED35KZnfh81nQKFBTWKQn0yju8V4Hu6P4RBNezC6uB91UyJR6B2aPXhWEL15oAiNnWSQp
uVG48O+yxEn9KKRFEq1ICg==
N0sEE6ROEOiFNIqCE8I2KUSpj0dHynjQtPBQH9xPtPY1CR/Cpw+2HzIjHsuy8mEydTBrUUL/fnhX
6PEfB7+8u3o/n11dfrh5+/6nX5VI/2jqsk7w6qerWa4sIBXyeGLhZEEqu9cX7//4apjJRAWfrX7D
L0z+JkuAmFAg7pyg0jQUDABo0UnSHh2lG+HcH58o5wijmkGO5DLaHOdcl6pXm3JeSTH7/u9XF39+
ZarfHZcV/OpQgULow7pr5M9Kr3h/eT18e23Tv9xeVwRS1NCMBhozsgU20492YrGyVpEX+DDd0TH9
orbB1bIkjiQMznAs7jBKlEqdmtAFLT9IkTcOTBu6XvuugNdQljNZ5Qo=
OrCQmrCZokUF0yIaDQYHoU2Ot/al8GjtBJk4ksc53V0Q3TqBxGlKepsMzeQJ4XSlyhbgTxez2fX8
b1c33/84u8pFgg+mIkzpViyiRBR+p7ZqEV4dmN+A1F+k6mHJ7tZz5fOaFeqLn8mgPjTePLJH/TvE
HuKg29EWOaiU+DH0PDrI1VY9/1jKf/Bdb+dJJsdVt8Pb+2yZNga2dn9tBNoJwUNVPqLJYEpHhUdY
g+kxwcLObbQWnFbyFIDjj1yOgM0QNJOB+ey4G8k1tKAzHEf7/4i5PJTDfw2Gw0P809nc0+EvFCc+
9HtgvjQN+vXwY1cHx4HaTv0gpcnUaAQy+IxIRkB1PM9nb+ZITCJXSAnbKN5BTCJc+0kUrth8YPVb
qkmRA0VhgIwMAcpNMk04r8DuqxVHL6fOteMHzm0g6Gjj1ETWnqa47T9QkSSGBUIZz51txcZO6i7J
NEaTs3+a1ujffdPao1Tee6QUatPD2fR3M06lx4zxGGUq5WSyHrHfau2fqGXevMrgDIhbf/EIbkCB
gJMZMjwIEpR/4ckBzfwQ/jBco8iDIpMZDn9U27niPAo=
RsgQBt4JbYSGDKLoHnwCjZV2L5JQBHxOFohBt6MEfPWxpZK+Q0NNO/SS9TB1Y7iBuEtETIeVOtq+
MVaO0dGq/q8K
CxxQpUx9Xs/oG71vCJmqYEAFkSbOMftv+jVc66VZQ84JdQxW1qsl28vr3HZx0M+pF9CMpzJkp/SG
EkgQLFu4bieP6aO7KPKOc3qVossV1FBodlMssiRMsIeJla/8nY5unRJPC64zfQ5RHaMBXCdks6o+
hFM8alJunhyQseo4wBBBIyjv2kGZV5DcD08rfz4SD66AM4fpca9bZ7GsTs2tFuebXEV1clWtkaOQ
kEOhahj91aaXb99d3lxdzK5eFkEhs8UCPKo+ZfbTO1rAVT15wgwhoB/JS6JYDgYDBQYPnDPgPBE/
z1fOw/znjmmd7VwwOqZhjbGrqQmhNNGP9hhdp5m6bC9/vHlZzwBWI/qdOA584dX0woVJ12zkT07Z
qajr4OdMZEJqVRX1eYgMr4KrLQVNcBqzBDHhuwklgq2vsGSVz3roj3a1VHiMPwg8Kpz6OddvYtUY
Cg==
r1Q5+tNVnMIIaSKclJNw4YA1iZw7h5Ndexck6jxBHEOfXPl44fdP3lt5eNmGVNZCKmXT3IqA+wbV
yMFue4yDyAnapnmiZXK78PF/XK1WJ6TaqdsoSzWX7P3KYxORJk4oVahy1+2vBIhkpwOuz0qfTsTD
yk/nSHIiQV805xHHd4LOCAPeHhJUpw7mvw6NSxI/noOFpCLqdMZnhtFed0sCs77eOsJ56Ez1erel
v0KSXnensvZIRCwRlDYxtPsFzJCTRokv5NOAILeae3PtW08GammHlGwFELoZhs77Rs46n4Fxmzg5
DJILphMu2whU53agHGzwRNHgVyXWc6RETLXhhkMexR/dEjzUx+T+qD1LwslJzSJ0m93RkBaIWx6L
qp+GjzH9XNGX7mV1xu1FZwF25r4XCL3e7u/OmqXkCQl2UlXVz2bXSTu7thNRU/hhLvq+JNQWnaxm
7jjjtChp/HmASj3A2AGQ56ei/EG2Jf3w/gN5vnQhU/J4onrVPIISqajgVH4i5ky8SrP52yI8tYfm
NroXqCeBvxZVfJ9aRp1i4YfzjQOXsuaLIJPLinB6OqnI+GBNV64jKe+J87jBPJVOz812Q5CtRODH
21Jtxd3umGgLSaNP0e8VmZTIW86rnbOshnnMfq9jvmyGup8oSQGm56bu8pBFKvph9hc91VbVqeYh
p7TENOIunfAOkwK34TxpDehteshXRRv1T08lM/6Lnt+LhBx8gpm2HXfxUjViyljVFUjpee4qnosk
qZWNifIVrIGTjZN4c5m48wTpXnidjlnkjBUPPRIhEUbhPEZO7Iys0ym3Y5n3qeW2k6E8uoMaa7t9
aZtPMnaRtVmmPb7T5pDOzHOrSQxR9oijiVvZ72x7+vXj6S49mu1OQwkw3S1BYcbySi0RgVg7GIvy
5IeeomoqanrwEIMuMOa3SeR4riPRfZjKiBUReiHs7jx7ZfBfvQTEOAo=
vXkazdle1fZOtd2/CxE5INWHAMLo5NulwN5igXmrNmHHVnrCqs5knX5F4yRxnaKf0/AdbsKRKJww
a1CMNMSoSInMhWqW5x7stsqC1F9GKyWrYrPbsI3WQb9UwLSlAYWgNdDPhZnuUEG/UwC0dFBb2sOY
puh+WVffaHC5aD7ynFl6iro94xmqV9zsRaw1j7hdvX3cvus/kug7ZqlYi1Bi7hiMVK6/GoyP7Xx/
n7KQ0wmGhJNijvOi8DClDTskmp9cpxSrQRXpLFK3sJULlpd5+ZVEucKXRFC8PBLymO8T1cVHdcOi
zL1wXL45HOyJoE+5Pl+V7xdi6az5wgT2iANRnVW74jlBv5FqYUsRCg==
oZHMyOGrexW0CR2FpSJ4TB/QjXBkFKqrKU7xqwhsL/E/+TlJ2JxG7bawmW5evPhUGtF7n2y53OmV
PMp86jcM4rktSqlbFkOxoh9DikIBPYbQlK/u8ZJshQBRgEq9rpPxxWKJEzuh7+qt7AjaUeoADhcy
38s5k0Jf00fow8IK
RWHiiOrdA4N9uNb6JZ5dub4gfjOUY36RtomS+71635v8vtwMe7PIV1uF6z7ccRWX0mMqzfDoBDga
mqfgxIkUy0+QsUTMxXsidUMtpSxvcPjbyx+uqch8fNmb6iF7H/pWFiXzS7W8G2DHSc2c/OXmbO3P
5X4nHlIa6Xus936KjHqkXkvW3jQufLlUb9RSXh/ScamyDzB/WNyNB4+kyiNd3Fwj8SwiDfr2WuUV
FZGcQtqzF7e3p1X30dnTj2/1yXlVra4dn3PQ6cvnJV+QJNqGRXP2+73A9YJdh80vNVlQHiS4LrBo
8HYMFEo2/qfruDhOjVf69AKqbUkctLMH0O1v5YlXOteyGIcouBFUB+vlb2IPGVMEmoGbN5dkmpZV
RtT3ArkTqUZxsvLvlqiUCcqofpFRVobSJHEU+K6vKkWJAVPf+qF+3brxMQciaBD6ujxIrQ1msIx5
vt8nmbnLvXlpd9vw5eGyF6fUHZK6Uty7NzNS3e4R3z1z5v3wh+tjrnNx4q99lEQeZ5hC13R+b9Vo
nBEXiTNnYtU1S/ofqTcIljE+J/O1og2zACP56xdmzal/T31k8X3uvA99znwzdN3zSp6Kzn97V52l
r+dpH3qLp6KX3/ihF230IMbCqOugpb9x0o6aLfRThN+6+ZQPadPqK6Ut2vaslR/KjQzfvEtlU2xA
2XSS++3Rq9BzdRyZ09HZGD6ych4G7Ax0/YcPJP3/6qaG8yO/cd2JUrFH07GeVNWtq9oJqN1zWu1s
NUFi12Xk3idoATA6A1OVTk8F2r6btvLczyIQ39zSO1QsG10wtwwIDBW+9YsrDlcXSZ5v0/kEbjPm
Kkdyjb6NuLUDzH/45ZvEpMZtaNF1QPcNvDPk9vU071SKlwbB44n+NAMon/hahb9qGSzTVfC8yUVp
efQRAo1/l1iql7/pD3+V9Jforv5Z0gGe3Yi1ry671TdKOz9SKr9SUvcSie7SubN5jCPu1TjxIE3p
oqPjo45qVqjGKVmmPTqzrUkD9UMMa+qWkMECRyVHZEaFgYZk7XtYVtNP46so2Gbpu0vkcTfIPKFN
A+nYp7f5MAo=
PiZDHG9O7cnYNpvSJa7+Vqb/mmofyWwBmec1IJNMlsY2rAYQO1oO1tp+Vm0HFPQBRZtGY/ssi1UW
L32Ox2hPfe1S6y2rPpCTwo4+r3X0aeNoNvDUtk4bR7NRW/umrX0Te9KUmNkr3ple3hBiV38lwL2/
+nWB6kO/K78qUEnEGpy1zprsOMto8ghvJrGKMSwH0R1BbOmggCof3wIbF2DjoWmRObFHhj2efiXY
qAFmTNiBRsZXglnbYOOzr+fMbIGd2mPrK8GMFphlj053ZYHCjNsldBvyvIZo4ld7cm5b5y33KZoX
ubNfoSNV8Lk4sbujvznePuescY4J65zaxujr1HBawzLIGtkI1Ml4Xy7c0d52uWrpbpzdX782QemK
s9QpNVd/G/qwzUIZdaMhItCw7IlpG83EeQG12XzPyO+c1LCBo2of/fEHKRhr0A9t9AuaR90m1m6p
tPVaNptUhxvnZMBmE9tqOrv+yCFdItZbH6OIBy7r+fs5/gaImfPTPOon2H0nUkp8Tg8LvT1zb4dc
Bbc5gdLN8/NzVZXOVbptWeJGLIJC0QESH1eP4kNU6SZ+nOrBgavHNvyogjdMNjRy4rgJjx4M44/u
WLarSmM3stUYu0ctGzFjB6XG17C5mnVU3uY5Cg==
I5JM0eFpNvmRmjopvm/VMbM4EV4xUeXj1B6NduRijNjbgWrBrZGC1RfG+cuNbXijBj9Wfj+2ra/K
S1aOdYZgHKL0WBbnuAn4/w8i5XM4+O//Aejop6mfLQAA
EOF
}

pfixmodes() {
# fix-modes.gz 2.9
# Download from: http://wwws.sun.com/software/security/downloads.html
basedec << 'EOF'
H4sICAxdLj8CA2ZpeC1tb2RlcwClVllz2zYQfhZ+xUbmJJYnPKxY7liuMk3jpMlME2fstH1wNBVE
giJqEmAAULInyX/vLqjLlfLQ1g8yuPd+ewAHj+KpVLEt2AE7gOBtNoRc3oWVzoR9Ood+dAb9JOnH
yVl8/AySH4aDZ8PBGaTc1sLAq7saAq/5eqUENjWydpGnvmzFLuQtHLbnCM8/vdFlyVUWXTcqenn5
roeymTSjCf4oXgkIkklLSDMI8HAO9SKbsA8vPr4ZxY01calTXsbCpUNiDwPiMHFXa+PAn5uK21tI
+n0M4lKV9+CEdSKDXBsYRP1wEJ0hJy1EeguuEGBF2hixzKA2emZ45YUFTwtQYgFGzKWVWqEahg48
+6uxbpks8DTVJpNqVt5j4vCHdIU3a0QpuBWgc8BcL6/RN2KnjYBrXXIjLWRaWPXEAWoZ8bmRyNpA
OW0cSlc1V+jYu331OxKUE8qRKvl6q9a2+tEgOvZiJXfCPKUEUuEDCS3o2qGViKUUUHfSeKRDM+mC
VGwQ3ZyGZ+OvAzLRA4vCo9CenxMD0Rr3AM9HPQDWEWmhoetBtU1NkCOuGN4qwT46NA1l2oXj54/7
a5XO4SZQL6SbWbEO/qy3Eb+TDo7RobA8Zcxo7Uax76f3An05DTU3hKrPyEIhjEC2JfwFRc6trhbX
F/PMNPnnVPz8q7xkrLF8JuCwB18Y4F8b029EHGLDwU0YrA2MIbyCH7GznrcxtQo=
Pir2jTFy0Q1+6rJFIUsBM+GQYiH4sjbw7WoIKcu0V2wBD1IPdOeqBz6h4PLDxxdXv2CWnTkCLhyE
d+cwF2aqrRg50whiZT3IxLSZrQmG1MtyytPbNa3pQaMyvf6+2Y5k3CMSls7nj2efCwGbaSWYLWTu
YIKzY4BCevv+AkI4njBE+0JTZ/Ky1AvfROvOyyltbmZNhZ8RkzncQHAAj0aQwJihqPJevEeWS+Zr
lxaUN2CpZVWXglSxmAsalbRArNvGFXyOodPAkEeppJO8hJgIGAiaqbkrqHUtGqX14I1+/boqj4/l
EYQ5zLmJLc+qWCrrUDdehR/hcNntOHNprHOyamH3AT/YBwHiCAHNBDnabp/gS/Jt+HB55BzByZ4C
n+JkYCp7O+gGQoXaq0p2IdQtherYhTE8fuylWZuPZ62j7G7HvmT6JlkpYmgj+tkWWDbWUgRrN+qG
ruslNmNF82yEtSCMwd2HIPuZofkC6StixBMLSruCioQaacEV1rhFEeu3Ah2bORNz+HQIIS59/Ez6
iU9y+ZX04VOP6uTuawEl0o1UCC/rBB7ZO4wQgcdfdIHAgp6FC++m5Tvd4F4mb1ThZaB2S2CjtSPl
CaWexfbe4r+jHa3TJFnL8MYVayHEYGZETdv09PQU/E0kpzFeD60peB5j1rFqsFNJ3lepsynhqkqs
03I2jWSxACFeQzHajU9PTuLZPuu7tCgIurgwSytaa//DDutg43e2cRgMBt+RXEnNTA1I/o7UZhZ3
+a9fXj/EoTVZzffEu1d7O9x9WhjBLnHZqKtibm2KsqZyW/z/HlfxeKt8/2y4h5IPKRZfFNm2kxVQ
eqGgrHf1j/YZeNiRhPF/VPXNfHLyr3QP4J20KS7i3GlcGrjQjK5guUM5XbhASyhaCg==
v8Y9wUE11RTfeX5r45bB7YfXVs6b0kH7EkMOPsZo+fMM31FLkLbjxDr4acVHHW5s4eIjf0RzjtZ9
dLQ9tjLDZZ7LWUTt8QlvUL928vhP+t5Z/FF9S5L41NtlEdlfZ0srxPRzb+u6jlbmiDrXZeYJFFal
nONTfzQVnvakc7XZPujLVfh0xKbwd0DC/gZ/cpNBdwsAAA==
EOF
}

psecmodes() {
basedec << 'EOF'
H4sICBldLj8CA3NlY3VyZS1tb2RlcwDMWXtwlFWWv1/nS7pDgnQ6HQgQ4CP5kDiCyMP3Iw0E5NGB
8PKF2kk6CWTMyyQgzlhF67A1bA011WYisDWZqSa0TtaNilu4xW5R1bF2q3S3nN0ellHKctfeNuOC
MlW4Mi4zi/b+zv3OTd80D/3Pab1859xz77nndc8992bvquBqw2WI8Z8L/wlhCMNbje8yIX56QPYv
E5bIF9VijpgFrED2GESXvxi3fMbz0E5nmYoS/pr8NbR/8Xv0Jadh/jjl0WHhQpO/8pQw3roEwM10
yPj4TuFCc36j/HXTP4t29fYsam9rWtTefEtv1y2LmfYI2sO8qotlzOc5HrRCtCIee4MmM/18GlyK
5me4jL9TNfo0ElhM/M1AI7vNRqtEszXaPLQb0eaj3YT2PbSb0RaQKmgk/xLHF/J3G9rtaHei3YV2
t8brXg2+j7/387eGvwG05Wi1jK9CW6PNW4dWh7YxR4d6tE1om9G2oG3l/m3amAfFlT/l84Kc/kn8
LUabzPAUNK/45t90/s5Eq9D656BZaHMZr7rK3Oqr9C1Eu4XhW7X+pTnj7sjB77mOjCvQVmr4arQH
GF7L3/VoQYY3fAu9H7pGv4G9ENQCVdlWGkPGjmv7ZY1+Xw59nTCnIy5chXOd2N0kXL37eeNOk/vG
tb1cm/848DMa3gy8QcOfFK7HDmh4D/A+DX8G+CUNj2D+Vg3/sTArDlPslDjy/BT6mRr9RWFsiVJM
+pz4+TnmF2v0I+B/WMORS7YPa/jroL+j4W8K
cybi2wiw/v+A8fdq9H/E+GMa/i/C9cQelo/2/r87+dKwfE4O+QDyPqyN/xj83tXwT3Ps/0fQ7Swd
Kcr16Ica7ga/ZRruBe7V8GmQz9Lw2bDfQNZ+xjzQd2r0hUpfpi/F+sc1+l1KPq/IfA58HeydIj/5
5F416jF+TBu/baI+Ri/kC2j0Z7H+Yxr+I8TbnZp8PwE/LdEaL6jcXyL/N36lcn2JzL/GMeByH1c6
49/B/EFtfhLrndTw90Hfp+GfgO7X8M+AxzX8c9gvxuuRfF/C35Gsv10u5f+5Dj5JGL4kRDvs+N81
BetFs/xc08G/XsMt6HdWw+Gf7Rc0/GaMP63hS0Bfo+F3gx7R8MBE+7seh/yDWfu6aH+OauO/j/kp
Daf9eaeGY38+OsL6o8v1M+i7T9Mf++3Ri9r4I8LY2sx05HDXa1hvj0b/e8gT1eRJYL1ajf42RK7Q
8F9jPcon5bzeh8KQ9QHJg7h3YT89tkAbfw74eQ2/ANyj4f+r8huvn4F87Vl6nnui/fJs0G/V6Asw
/95x+Xe09O3o6WzsEKHQ4vADodDKnl2dDzZ3hVr2tPWFwl3NLaG2zlBPY+eOlttXd+9eHNodwsjW
9t6mXa0Cg0I9LTvaevtaekQo3PdMdwv6mhv7GkVXd0un2NXZ3tb5pOho6eht6RPdPW2dfa2itzfc
2NkqOhrb27vCtHxL524M72vs2SF6+3rC3c8ILNnWJ8LtXb0toj28s+vpThqHMaK195nOMOhdTTS2
paenq0e0trbv6t2JhTt3t/V0dYpQL3j1OYrtaGsWjeFwS2+vFLa5ZVzcbmdyYx8pSoO7nyYrkASN
faKnBUgLidXW2UydneGObihOC+/qaOx9kozQ2yMFDe1ubN8FxVuBCKmwZso63ZS3rybzybV2tUm2
Dtc90H23gDmehE0fCG5csTwY2rh69ZZVW0Nbl68IroLJax/ZsLxu7UoRwmyHYWsPJAx1dEEC6AFe
PeGdMEZbe0tnl2iC2NCsr7mro7GtU0irhXd2dDWTmfBPKLzjriWhXb0tzUKZzRnY0gcxGttbpHDg
J63TikV7qaevq120sh9bpYtJ1TVQta2ju319uBuekHZwNIX5YGUs3NwGCZX/+3rwvwjVb964clXt
ts2rQsG1G9Yvf2DVuK6h0HKyh1RThFD8hna39PS2QUZNJTCGnuDU3dTzpGiHzzFWxUCIbAkGNB4C
73Kkh2VEqxNVIY5W6VmKuCvVINeOO0wychwVho9h3r52px7fsm3DQ6Fbb7mDesPctXbLytrQkluW
SiLU3o0oCy0GZcLM7ATnmMRBmbeMa0Zr0n3Vh/j6sVxVRYDXqZrS/YO+L5hOtYa3aMO7TzH+hJMm
ngCvijyGsf9NBSPXLFcwzp1tCg==
Rk53KRj1zk0OLHPNllIHpnO4UsGoSW5QMPLzCg==
BSM3rmeYzmXbgWUNMLuMYZwX9yoYuXcNw3RuLlQwaqASBSPPuRWM2mKWgqHXgwo=
Rk6bqmCcLzUK
hn0mKxh5uFDByJlbFYz8vk7BOBuWKhi63K1g6LhYwTjPSxWMWmOegnEurVQwaqSZCg==
Rn3pUTBqjWoF45y8T8GoafMYpny/WcE425cpGCl9roLhx3oF47xbpWCcRUEFw/73KBg1y80K
Rv1RpWDUskUK
xjkcUDBiYJKC4WufglFb3KZg1JHTFIwaZYmCUY/6FYyz/34F45yuVTDOuE0K
Rv1czDDVxlMUjFi3FIwztU7BiNtbFYw4n6NgxOr3FIw7hKFg1K8z1P1WnPRaIpUXC5QK
oyBV2XjvUF6sluB0ZeOdCNZD6cqmfS8tsFxxM2bGzYAPl9lDZ830nshLlvBFRB5dusfs9B662L5S
1iAiUVHmiggf9b+6sMH12uSjYmRyQ81IWWTa3yyMTcVF+NBwWeWzb+Fmdh639NcsMe31+1JzXl+Y
mj2yMDIN48rO4+b8FqrRwaqYBX4G+JlRL4pasfl5w6kVtgLeG/VVpQAfSroq92OcB/IUMp36DlAf
zTXk5Xhzr/P1/pK+4Oft94qSAa/wHfSKUhhrJ49r52+Hod4ytPaLjxMxXD4PpcymaCRekwH/IskP
kQl+NK8JPEUSdIKJFvPWZFJ2U/S5t1Oe585eyZP5HgbfbUP+hp0BMfmLqD8AfnNJ560D3rlx1KOH
IkM1GehYkLQrifemqNlQgW8g6rUMoifNymi/10LRuHk5ycDjSw15YTYK
hvzhbthmW9RnxTCmlvrjPrpUG+6kaRHPFdQ34CN9AqTL8n5/hL7zaQ3MrY365j4M3KJx36BPLGfN
JPEhcr9cUwyeNqv2o6+a17qB1rgWz7yazJfPe8PgGzH+Z35szYX5sVrw8MQqai6Ozo94Gb6gwecZ
LgR8nGDHvo0euRbWRCwXvlyRiSXnR0pT7khpBLsZ/iw3nIcGmtcQdUe8A14rgDkm+ZfwUxgLPA/9
NdRPfQGx6Y/wRzHxSkteAeKVL2PDoX/VjzWhYwH21bZ+X6ONvv9z1jLco7Y1mHLH1sAPsMWmS/Dj
ImyDwaR9dH/KPLqfZSug8UOmZaTR72X+NC+FeSn0Jd2x2lPAscG3DfiOVIPXWdaHbHIJ8nmhq5dj
9x2igU8rjzk0alcOAH9Tww8Df0PDB4G/quEx4H8t5eI4TNuVcfTFtTHDwGM5Y0bQ9/OcvmPoO6j1
Sf+i74U05Oa+wbRddQB9B7Rx0sfo+3Fa+txwp03rMI+Nov85Zw/IfXs8BvthP9L4H+asfwJ9uzW5
Ce/RxhA/sk9HTh/ZaGdOH9kpnNNHtnoip49s9Qj17c1klrI/tuk+G5P+irVNjQhJB9wI+EaGg4BL
GF4B2M1wjSuROS/5JTKfysfRROY002oBv8i0j7lvM+ZOUjxB/1eGNwL+LY89w3yGmbYF8N8x7Tcy
19mxxkjcyi9PZH5N+FGcHdBjbcxfuTNlipLn/snZ0pj7lCZ3hyZ3G3geZ54neb0mpnUB3s60N3m9
p7BeAdZ7I2e9iL5ezr7Aft5Uea194Utk7pXnGubMl7GUGojZkZIUcs6Y3GupAVonZsq+Ndh/tZDB
MPms2Zv5+i3nDNlUjP3uQ9wNIg8OpEycj9jHyMkLDeeB+FDcP4T+mOD9PUfuZ5y1jM9k3MP4NMaL
GS9l3Mt8pzh4g4fxIqbbPN6ds2coRvPT2Tw5qOXMQeQxr4p50iFlhqPMp9jRr/59OvciQ9Y47yTG
oP8Vpv8V5XTKT2PIT5F4hGTy8F48DJuMMn/KD272x+AYcD0nUF/MXzVMuZFzOM6gojTl06RtmU7O
LPrPfugN3MP4B8C9wIsZfw94OXDSCXmg8hjbSPnMYrnIV8cCotiXhL+gw5F+r6Mjxi5x9CouIprK
TwHh6cKZwPGTtXPOOtOVfkmzCg==
/Iv+xDaSeSwylM3vznk591nQHlZzoP8JzPm9o0v9Xmdu0bmkSevX/1CL5YuaHFz71N+Beofyiv8a
427gc6gA6/B5PfcA5t2jzuvT5t4zwO8jf+NbxTUHyTUCOd5muR5UtnJxLQbaKGjFoG3U7Djlyppk
Lk7M+jlX1gf1llMf1BfQmnQmxv1Hj4PvK0nsm4BwP+zYz0KdZYklEeHC14AfC4cq9p5IzccedUdK
2Ac+Zz8kzlxH77GA2PhVVu/EaeAZR++Nv1N6p8yqA8zTcz3b09hRnA8cV8OQ+1mKHeixLe4/chl4
kGos3nPHKA+hrxdjTHxX9SMXMG2Yae2goYYpuh80D9Piyey+PaFk8F0lDrM6yzikmJL2c2qSJuJb
rdU/dEb7Nd4jo44M60mGmE/6FzVLg7dfwhs/1PJBgeP/jb+KIj/hezCaPdMvU02ENZX82A8bk6dJ
brkPjI80GQ5rOekk5Ckk3BsxhnNyGZ3BU9NOneeB78+T3+VZjxjQ1+Xxo/2yLnOlTtM4H50vluHi
sxKwC/A5w/kDHtWJo4i1hZhfCg==
3xXGKxInYRefWjvX75AvouysYgW0WU69FvHpuQdjd3GdWKpqGdjVf0rawxr3Y1TWnZP2o98HXT2w
g491vaB0Ba8m0hf0Pzj2zy/W+A5kzzkpj+ca8mzS7D+gxVMJ50jaW6PgW5KVd9JZJa8rK28J+h/r
l7nHkGfqbRh/fHbi5CfuyIxIfJTGvk39aXPMizuk55VZe09jvTLUz16s52VaOa6LnpFZiQ9Bm8q0
QqZZi0B7bVZmDLRpRAPPFVeT33V9+U9cQ/4FLH/xNXgWaP1R9st4jA1l4y2qnbPRdLb/JPfTHj1O
MTiV9Z6YHyutgNjwfm5+VOsclLG84beUK1UtyrE3wHI+kKt7QBT+od8/Sv4v4xiPppy70NTFwI/N
rjkAvJzsuhT4387eux/4dOAzUqbtB1zGcAXgqQzbgKcFhNlJa9C9iseV85jpROf9mEw752Yp+7RM
y6VnmFbOtBs0Wopp05mWW9fsy6lr9mk+2afZfoDH6HbyXCP2S7X1pdwqD9D+Sdu2N0du6ivPkZf6
rKvEEO870ctfPaZGYzR3fmQG3V+G/E0jWh1ZwPWeeZVYRL4qmsv5Ts//8g5xE8YMz6qJQwY/x8SA
OivpLhmzLUOPiTG3jIuSMdsSjr8sMZX3IPJ6FWIvjP3j57Xpfjadc40fecnkNfbrazD/fRxzpXHK
1bwGfFlFfekF8lyvOrLAKj+6zCpX/MlvyBeFyBfxJOI3q3P+Dyivv4wGHQeHy6pOpvItQW9YqNnz
4qjZ8c3n7yT6DuVbVHGXPO+1FzwfazDHzFHDn8h8PWYLg+ZSXmVfRyCrL01+nGdx3rSafXwPD4iC
FpJlFLTxM9stzyO55wJCfNTv5ByKt8Psj0kq16h8AL8d6eez8CqxfTgntvXzcSSp5RXY4o5T7vH3
kKucuXVfqDPXl/h6nhY7qMUK
liRlTqm7kJRj5HvBTG0Mapm6cxrNr9GId1qjTdZrCg==
Le5tx251fI+Q71VzrpL71mDMYfVexX7d/0m+pb1d1f2M6Af57cp5t6p7YQD5DXluTjLfsoG/4axX
OBP4rcBf5fW7qDbB98RV6vaVE+v2Qr771P1Sq9s92bq9sg+07/OYRybWyZ6vqE4ekrWS50+o3S87
dVPdL0jmK+8AlftAe2jiHcBzXuNxTuNx4Bo8BkBbrd1tDqj8oe5x6u3M8Ys1nlfA/zeo7aoxP8x5
CbW1EMf8+ttf2QK042j1wvCPoO1HOwvcj+8o2jKH7j+Ndhit+VrvhepdL8f3iMW66bnn3nu4c5/B
vRK0cud+EPz6eu+H9L6q+NN9NG3aJr/RTVbvA1wDv3vatMV7pm2dMW3PB6aNu0swk66KPUZ5OTk/
cTkJOtZdego=
cwhPuROX5bsB6s+rxO6HmH8u+9YqBj+R57aK2+Dvrozb4MdO3Ab/+Xo6sV5R0ml0fuIS5LgE/02a
ERGVSifqQ+508dmBnFDnOWWKEsiNu0ri4sS6z7FFKliTcXRoXJ4qFiWxYsvN4/Kd92yqM0XRkJ9q
x8Qlp8bOrj8pkUmreBmS8RIQ1/FL5OL8WFDzTS14XUy72U+2Ld83R23bTEPeVJBi16pS7+6A71b7
j9ZWb66A506U13X/sF/dc8IeaVt6P5hohwJtrw/vzWS2w8dBokOmC/RlXeWcVNAS+rvMBJsdsDyq
3rzOvMIr5hVbzttNIvOFmkvjU4sSn6U3Jj6TNllgV2vwTc6bSLiY8FNBG/s1+KKWCzQbGF+RDZLg
iTF/2Y+64Rv0n6npf+m70D9JOjlxfAEy3zhgi0L5BgecYmTIFiWjCyIlpBP7FpoHN8u519Xt67Hv
2rfaG3ar8qt6W0dfM/XR2zr1a/qVQ78Z30K/ke9aP03mioBY//tvIfPePwOf1F2Zw6tw91q/Rz+D
cBbvP41z+D3TsnAOBUHfTXsO+8yFfVZF+2weeMT9RxUPnFXrdygefBaDR4PMb+9h354xG6wPHF7h
qDwH1q+NOrm2Wv2dZwzjIvFY91SutwA35bz5n+L38f/i9/Em5EKzPJH5D+19PBjzV/pz3uN3a3y6
wecJ5vNv/Ab/ENP2AH6Eae+M5yjkB83f3ZD9qW/h77zvPr/Ks8Wmswvzz+OMOU+5he6VOEeXMf/z
Y0FL4xOh9c3sWRO7w2R/5MQNasF1nyqfE9/3sA5yWBHZ4Axs4Ph73X9nY0cMDPsduYboLo34wPmd
l7KdOHkZfWNmSspEeg7Z1q3y7xC208d2mKAHzuMk63FpFPcpeY46Z6tH81kMPjO/2WdfHfwzOBMv
5OhRrOmBqm7dqW+hR/Ofix70HTKdv5NAF5PrU5veCg==
UrLGNTOoOT3y78O27eev16HlV4NWzH0V/C2n2muYaq8yvVa/OcntBNqI872iHtvP9eRFtAt8F4rr
f9eQNZrMQ/LuW6G9NQ3q4wLC/RHVoFyH+LS71Qn97Zz4wR8bklSTD02Yn9Dm63WMSXuEeal3G1m7
yrox2EyytSr+abPZjh1oH39niRU32Kmsbuoe/pPx+TS+uFq9sfwF8/DyfeE5Td+4/s4O6uda3fW0
0o18iTUjehySDJDRdvFbXY7cjp2lHJbB82Q+/kTyG7PjxQ3uI8sa8pzaPOJVf1NBX4HWN8n5m9yY
h/cG7uzrStTfS0Bfm7N2c3ZOs5qDO+86U82BvDM0Pw6z7aYoXSlOed7xgFj7pbZWgR47/8/aFcDG
cVzX5fFoUTTtUjQl0LZgr2TSpmLZZFFFMAg1piNKpFLFEmTZFey44fF2jzxxb3dv906i6qBSC6dW
W7e4qoLCtCp8Jq6Cmgo=
jVMYSFE7JdEYbRwoCSEIqWAbxVVhZaFVAyJRCg==
oqXFvj/zZ294PFE02sCT+fdn5s+f///M/j8zHNEehowfxO8tBJ8oDdHYt6hxzmKck83Fhje3FWmc
Dby3e6+UX7FP31PXxogYec8Vrd/1S/Vq7uIYt6ly7pF893SL2Yp2P5D6q+y5k/1h/h2nPWCyPZrn
PPaifgZbpb97WX8t+h4P9z+NOtOt0d2Nqblim3mC7JHPg89q58G/vMSGXh9qBW6rHP+wweMQvgHF
f1fpGxYvDpKcNnAsWiMGvI5xFigG5HGq2K9JfSNUPDcr6B1fIFu6a2rxp3KcU/M8/lnee22UZ+W0
hpKMO6Azs7XYRmfj5KOLbxCNpUWNpYTYmsY4uQPfPKyL5Y5iNEa0N1nPcTXfy9E6Ls/4NvMZn1jj
2qrXuOr17J2Cii0vrHln4VRLh3FZ6HTPtsL6EwbvsTWoe1qgueO8uMtlNqHOTq1OjT35R2b6jMGf
LT+zHPy5/J4Lel3ie77vnQWKWyN5sz/2OOh8Y33yBngaPBMrtUzESu1/GiuZk7FSWylW2nguVuog
Hk6t7zNoD2L2keIQ+Hr02iNFC/pbo+aD4gt9/7DQMNSu8yP3RwZ/eAZ00O+Uis2Xfx9q75uQ7Hh/
5IVTrUPwhfeslfcX6hpKbcW5GejvqrDZPt2eWs6BPp1fIo58Q5tX+h7CmnPiXHXwn+ksdxp0iK9z
Ys9g+o586XsGPF8+x/c2BumuAX73yrW71FKOl9rYXtsZ1w7cRsbdxzjYZalj6XlDdDb8QqGV9hAH
j0Rnw+L7OzhOe5ctvG9JcoLcX8Cc7qPyH0OnV6DTD6DTq9DpLHR6DTo9hTYVfQ6OSH2KPaR7qvT5
YiFutlfZ10us02dWsT80Ie/K1TWU4+Zc1X5PL9aNBXkvKjlfdRbxsKbjm5fEnBn8HYpLzomz0nLl
W0ZztCM5jzaPzoJevEJjs6QfzRmSIY2ps3rO8Hg6z8iz8K9Ndzwyj3b4RgzN0Xk5bOhe2q9Q5/xq
DTgnvhvT5FP9SH6DB/up/jT8ZbIl6n9uzdTCCg==
64Ov7Eiz8dOgs599SN7fM7R90YGfye/CwL+S/OF7LiCWuXZqzTszbOMvqthCv5dTJYcJtP/J8rVj
YFbKYuD7BXmPgdbst5af+RxfYH1t5HV5FnyW9fMwjgGu83qq9qip74vE62W0wTjvR0xyQ/rSMl5Q
/hfXLVNd1Pul0+Cram/8gVX2zf5R/a8WQOuS6Hfg1uXl/bJ863+lIPocmEfdmyzfP1LyRfzJ94sG
3p9ZQbe6/aPudelLivMIvpsycI31+LG2l7+hhq5uos747fdwB3LL93AHArmHO3BI3c/VzuDU/Pgy
f7sXIIcF9inf5e/3If4eL9zu7OobyB/DEM+1/WRmtqHvvsl4OV5u6FvHvt9aeVe03IiydcibVVl0
r2wF2kVJ+yxoT+Pr/aNC3LjvTvUn47Mt5Fcgb8e4f/cy4JXanEOO79+f4/tXno1Pr59sGMIIphWP
Ys5MNrxSRv/fLAB/p/7Rp4P+11M99mGWyRV+zIWV7i7r3zuytbvU3vKk2dCm7vPKb9ejdE9a3Vtj
3CbGPUz3ry8JGkOd0b3KyaG1sF32iYfuj6k9p6nFm4wbiPZg0A7l/8HlN3gP5mOel72F1s2JE5N9
jTG11873ON+C4ldzXiB9NbOtLOM8ISfGtdDZL9vgmPLZrsVN8vFori6Q/Gcg7zfemzZ4jRS+In9z
H6/4rGZzOS79QL0t6Qo=
ZfETpeOL6r61tga0yTs3dXfB9nj+bcJ3d/fE8jOg5XSvgM8PQBv1TxUw/67VqAP9PH6tw4xX48uC
J3nHnmOcCXz7P6JYheNF+j1LcBV/+9Gffyf+rggb3e0QXyv0zXf2dn9B3p1casvVOoI9f12dDwuZ
d5jtd9K/fg7GNkB76YCH2pfeiVzM03oWxRayfgvbxgMVv39qXo1D3fOMRfdzzLj0z8S3Qa17z8zK
72oUa1TTv4vvYSkcjZdjkqi/abqTK8vjNF/fUHd9YdOzIl44UctvJ32NQ77xWmeKhOc7NO3Tgkfa
izEbr9HYtL6vdYjfN7m8ubqcZME2FuHK0vZi5Tv4JGof5lPo6e4V9PRwtZ6IDz1ul77d7rvV3T31
7ageD8kZ/B88X3XuV0N3//YpdGesoLvoHPMUfAXwaIi/rXls6rr0L6RdKb+Bzwa1e15LdP56n7Hr
tdo63/WaFq9t5PFdpzssai/2/8sGNDneMXatEX997VRrEr7Q4jHhd8tvjXjlZemZ/Grp3PpErd/y
7HaJb3I32amMfzaZ0i9OlGTsvOtNjnnuaMtV/U7At24H/3v+j/wznVs/WCX/n2H+zzP/2U/Bf1GP
M6/G5b4r291ann9/WeC9rJmOjkYxR8Va3NHyKei216D7XY1us0a3fZV0B/V1Qp6tFwdn+Gwd9N+/
FO9o035/eCku95DFXozsy1xtHA65PkS05L3gXQ/S2W0xbjQSjBi2bkaeEc3j9wPi7kQFpvPc+dXa
kx6v9Rn916i9bgMqxq+a/xdQ97VqH/7fRbyu/Ph+8feFE5ofL334/uNn1lNM1m/zN3n+U6zjwm7X
0blD7JGCvt9E/INOq7hTQvL4gknrb3e0BwtcIUZyk2NV5fD5/ltrH5tZHR+NSm6kZ5bd32NdzfG+
7oO6zDohs1Lbm+9dWyqf3uVxTv9TJCP2sYtVczB+oUXuq12Q8+0XN8Ar8qd438Avd0+F7FfdAN6C
TB3gkxqeZP0bjB9m/NeLbWYL8IcYb2n4DuAPMD6l4XuA38v4UMP3Ab+b8Yc0/H7g+xjfr+EP0b5J
jfpDwG8jPOzjJOL2HaVmYx1yE9+ydRsqf1fYQvHNhsrdq7iId6YWv6PuYvHvKfbrP2bf/5+4vF2v
j3J1V76H6fK9mBPrUGeay7q4zT9wm0tM8z0u38bl/8jl3498+L0dXeV9UyGvSy3L98Q2Xewzdn5L
2xPrh9/rAPc3tHbxN/UozZVza6YuQh4vTLYlZgtiXu386SneFwRt+beh4u8edl6ncsZvYnwz8Fc1
/IOMB4WdH2n49dr5BN2njm3gPTV1Ho/6Xy3El+6Rkh8gz9x3vjoBWsz3Hva7C7PC7472EPmsaeq0
tofIZ1lTJyebuxfVPiL42V7FT/0GHuvj4Aexr78FMjm/fnMP+v5yAf4A3e2bFWdit+6bQZ/nWtUZ
2a2nZ7A+T/DvD7BGF9bTPOzDOiV4f/6MlOsXCw3mRqKDNjGss4WShLsBnz4jz6JPToBP1R5tdhMN
9c1YPofNOp7DcZ7Dd9xb09e/sjjP6ejAd8UsbhQx4cKs+O5V9mYre9lkI8PW7N7SluOLn1wiO6K4
+go=
2VZ9R+MH9Ri35PnwKcHz1IJ+FlNsNtXfu6m95pD4nhT2aGYol7a7+cQH9HeBv2Zt+XG91XGl3jJJ
hqdXvq92Ur+vJu/dFfeyj3tT+sLkv/a1tPHfaNL3gva5SnFj3Zs7ig9PNpt15Ae+uUO0maO1WN1p
ovsZ4KHrEsqxrtMe2g0+59H3zVtLGMOG6Extao765zhV7Kct9c0lP/GpxX9Re/8lscd+YtXj5LOd
ON/zmJf+1PBEn/H5mzV8sAHtLEnxNL/sXuHr4vxC2dmT+n03piPm8pKz8+gc6bbn7o01z+t5j0W7
T/dzgun8ncZzSfo/v4f1ay/J/eo+WX5Vns/fqLInknUL33+8WSWTImTyzWqZtKr1ehV3Im/j724D
f392Wt4RiZGPtZLPXKP9DrT/A7T/9irbV8efRnnpPs+mGmcrD9U4W7m/xtlKm/r72qr299Zov7ZG
e2Uz9aQLupNc1u56aDZl0lkSxv0ddY9Aa3s/lZF+qtYlMeeKzU9/SLA8Ay2ZFG9ObjTWaTysqdwf
MpVNxM9xXFF9hkV+eZ8h38sw6ppKM/XlxkL9dGM59vT81djTczrfb0R3svo0XJ+h71tW0fM1egu6
rV6KmXGiNxMTD0Sq+h16ffR/89P2r94n7D6SCLrDhJXpTrthLuE43U+Kt5vSjm2sVPa8mxh2bDPn
md5wLpF2TSoxPdf0E8mxxIht0stZw4nQ7jU7wybDeD4EkmDzpSe8o2Gm/4gV5FPZxHPJl4E5YFrp
AEDSc3O2mwupi5fFW4kHdx062L/vi8/seVaH+/cc4AEkQi9z9DlJ7UBvNml/fm963wo=
+Cdd+yi1e9JKp1KUZzwrVDkXyqe+TKpBQzU6w17zWc8MPMcZxuhMwhJzAm8fNRXXpheYREZUMO3x
dJgLt5rHvLyZyYc5M7CT3hE7MIePmaMJ12oS7V0vN5p2R0iQedfymuSjjIZxVEvETRdxs9UEg+hh
i+z715858OyeZwd6zfSI6wVExXMsM+2mPDMFVoTcqd4zn9934GCvuTPhPpYzxQNjppfP+fmcYDRk
DS0Ztxi4fDgsGp76TUMU5URbvDxmkv7Trk3dZhI5+glFA+i0pJw6e7Z5hBL/6TwdDdI52+xyNSlu
MVMJULckW2tNwwgdQ+R6WjL+PW7Sy/iODVKgEBwTXYe9nSxj7ut5d8z1jromPZZlPtaZfGyrqmRI
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
E/CONxJG/IS+5zlUWvW7GzqACg==
ltXrTqVTXlgL182vHNcuyw9DqtW0KJSwQ9LtUnwoJBL92ydeAojuXMbvPggb2LtvgOuDxYg/MplE
Mpmr/o3+w2TCWVav20UYV40L8xm9XpjQYN92nFGEdChHaJqG9Lv90M5bHvTlIb5Mi3i2dlkunXRy
4Yrl3p3LPUzx2uV5y6/V1u3F5Ak9suwaZZApio3bleVyx2qUwXYEUeTLyjKZXjfvOLXwv2kH3jI8
pnlvHpOh1rjDY72CgZrj7esR0r5dmZL2Cg==
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
rEDu3npLlMpO6VAhtLtaqYETQiw39zoFSQo=
CxctSMM9EYST687hQA627gZ7dNWGYZLVfkFP+KnXatptFzmC7Ya/0xIaAN/GuClakuLKgnI3bAF3
n2LFcostmY1QNB1wTYtuSoG2DrsNuHdoj4dlsKwM7YLdNWyfb4LbbqmK/QYXivaX2l5LzEB3qgo=
r113m85MpYPWgqw2l6PhOWIdziEtcqUeOAzl8NYLFYFVN9tzWuAOLCcbRGaheTPSYaIAeaUitEwU
Zn0pOBWcQQfRKadVsafnoUKSJNEylMghK/AspeqyZCa2sIrRVyXjo1FnT1Q2fISywSMEUn5yy77J
gihs37OtcIPo+gbR9Q2i6w9HdB2u3cXlmge8WzeFSz0TA6H847t8aXPvbXd6MF43UuWebGp4pGd0
NJ3NpTMjyfzunWFuoeIpjZxUyKRzg4HCjFNs4ajYwu0hUikrq8kMp3NDgVbFK0I3n1EK
uYxUGExnBgKFuaIcNVQFucX5yo5WcVZq9PeMjkBuOpeJGgo=
npIayoYhMDbQaNfhArbMHVQtzcK/IBs9r+wbGurJZNKZXDobXr8G42Goke1fbCF0o4JWR8/oMPiR
WehUnRK1cMhvwHB4/UrNgcycvHw2Df+yizKh5aPyyiN6wzAzuEVZys+MRvJ9zwzSPcwMdvNM/zBa
hrdY7wP42xt16wYWX15lR/pIVjdA9mpVff/i8jL3g+zHbWB15bican6/fuO07P7uPQceVpk9MOzb
1h/JjlifS+eyugZ03eC+LW4+Zn+Q/e5h5dssGD8kjc8FeXLA0Otmj02YC8/Moj45U0J6ell2ALsb
PrmDXXIHBmVvG9Y71GzTDR7WqE0weSjW1IjQ5UnAMS10Ffg6O8rywp6WXXwzwNWVwOjc4mdEDfOB
t6K+VtnX8zVG+dy7k/l2PXmg0TyULzfc5FCyLXf8JbPJ8eRgKpfMZbBF2AtE1QblxkzrMExLkvc4
MIMq4gw6ub9VqVZaFcdL9kF+tdiseH3b792R7B1IZe4UIiU38LkiVS7CCz5lz9e9+ZpK4Q2SwiBQ
8GpINZ1qMRXMfQjrXxR0ShOnYVqgJLfaEik5yKfk3CMlX+apYK6vZkCo3aDyMs2K1GwDtGVxG+ds
lZLQjeDXD/+HgvLi0B74LoAU3q0qLU6DBbbTgbIwvcVZfcorL85GB0S/XQ4WkxuTnxvrT2Uh3Tf2
f9+dtNPBKXa63Kg56Xqj0YRpUnpHpbMb692YTMNrPC2Dl/AVkoZelU6l0gfyQ/uzEpRKyb4qdrVk
XymZ5CYl+w5kNvR1XDW5+HB//u8CYhQTe134MSEeO+sRKtYVo1jZVbku6sfHVFwMjxUUE4mpGBoe
1hHKMyhdKVRcKC6XSGRsDQ/5G43odT8lf58h68OYm4y77aV6YsKPxwnRR/JWFYuT8bgMXWM15eG5
MU0PphMyTreM9NZoens1vQnQm9D0PqrpfUHTmwQ9XCecIL21mp6j6cH3PB7yNyZx+oz39RrU9oRa
s8NjXP+91lJK26EerjWq9UZNz/fLw5re26An18m66H057Ae4ljs5peXpet/S9GzQs6+j9z1ND+zH
IzHWRe9MMMeTa2pyXS1aHx7Pkt4StfaDR+xSRA/9d16oGGxcrcnJdbkFrU6TfPh8eF2Mbcr4Zm8X
+17S9MC/Mu65rIveq5oe+A4Pa6rLfXsz1MMYKR4rXu5S31tUJq7WuuEwnl3bpb4/CD9mLf9QV4aE
MY46rz1vf6W+ppaQxBHQS7zS5Xm7xn8f9PVJeo6ifv5PRO9xaO/g4vqMJfy6x17Edeguequ0sQT+
vvl7mvOzGP7/AOnrWEBkkwAA
EOF
}

pnddconfig() {
# nddconfig.gz 2.13
# Download from http://wwws.sun.com/software/security/downloads.html
# (part of JASS)
basedec << 'EOF'
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
BdBGRMIQIZnaDuuzQb/HJwW6K5sW6vUK
iF2HNp4wAokr6wCmRGJE4tkOcCvHjB/cyrFmrqPF0JkTJV/LvgJAg4pxwm2oQHqiUMFchSWqwl7B
VuDPZISZEE/eqWfGxpWUBqAasgMvB6IW7hAts0PVhbrBJnWueFaykTli4ELSL/6pZqIDeqf4uLDi
CIHMHA0OkYJCcnk0vAJjiLZ6luvHHiaBCIsEAj4mSusA2Zyg96KQQ1z/QNEykimGdILz2koQxrsY
uWDS+MIDoGgJgOrKN/mtkXL9NUJT8OsJedhhe1+s2BUhq2h3aYZzzQF9s2yA0lkZKusrJfAUq029
Gn6YieBX8MQVMwo=
yTVs7mh0HhD0MC6EMrlPSnjgt1BuynQPs9QAYaOzqEVdCOZZNskK
Jlghk7hYQ1Q/z6ZC/VtsbjT7aAaLsEobW1//+PUGnkJQkoDNOJR4TtkhBZUQJVNmbUuG8EXVTcGB
rserpGhlZq7ikOKl3GhO1eRivIyMNlnHs6lYp4MxqxsfC1JmKaj31NMZm9qFilhLaVXj4NeTlqs2
gsHCHIjVY8eWTCo7mPyBC1hYeYe1Q9qrTKEQkXJ0QGU0trpFZocxEepFzPGg77imfM2qGwAK
gUdFVCfFcq6NeBGKl6okkdZP2hqoyax1LW8hkImjNc0wiZGDTRVOe2zlgANhOiamGwVOht2wDaFi
siTD92fGTTDp5vb+7YWYbNC2SlhSdVsemOTxFcS7WLEb9T5XIwU6kSpK6Q5JNkgQ0qNWMSeCwcbC
lu1EA3NrCEAGUd8XvKyfrdCMIru5j8O1x63SadKrrYNWtoFk0yxrqOppTl1LonI1T4kQpaBzf/+u
a+iM1vf6znKVmHGDnpvMKBcYuX6ArANFpiwVK+y2S1JjG62/QmNBpGDpBCGEtAZzKrNnRC4Tcm2K
P24noo2OU6bUMYHf2hx/Y6OFq3daoKFV6J3jyEm2i8zo9NQQ1pBmDF+YXJmbTLHkBUbiN4i3P09/
G8DXrYTTwf9JbhNJ3DynhgbWNvFgeYy2ewbZ1oKrcaaWhnmPUSheE5S5u4NhaMaTwN6iRQ10JJw5
1ksp/Jj8743wQ6W8su93X+xO+BTZH6ifB84HPRkyMFIMwYr3LC/KPjPUQ3R62rRFMBoil7fb5A5G
J0jJBqqNTwbnZ9toukMUYTyI8si2C/wc07oK
HWtEpHCM8ba5c8mRgrxFYE+CFAYRVR5LOpN1YgJjKEE1NGpM5REj9zShCcQ6rb8loUdvmuk8RhaU
ZAaTVpbOvtr5Ixm5DAJIEigM2ZyN8qL1MLZCQu4bZqYyy9O4GKeG4NWdWW7WcsuQnYSpltjlNka2
dMeWHyGFBjvVBoKlKAIyVgcBPNNRbBLLBgOXTzbAygo=
Vb3zWlAXS65lfYOKgk4ReBIpcP5PP9xtAgdUsB9qSq946OERsPjYxseQUqHnUvPUiUx4lIGMJZzv
zgIM3LG+hcAQCCgNMgo=
2Ao=
qpWjgGOWpKmzaJ1Y4c1jMulIxpSdHzsybN0jRUhIcXPw1RrkBdW22uJDPr+3bp2Pw/V+AkMzuSP1
W67YoQK2WmLDLDPqG3FwoBPHtW1q8QMzUpf9tD3k3nrz8UKMBifnohP72uuKk8HJqeiEyn3wgC17
ufeyBa2mHbAOM26fDYejdqsJII+3WYzeJnAaiBxC7n4S+0AK
/gk8wC70DlFB/uUQdKVEn1Ct4LeZyrFchx2/Glw2GeVenUg6MTnjNDtCLw4nY04UCRqlzoVBNako
iB1tUdT461Z2Bxs0BgEAburEKiY6jI9Hr8/emGHQlHl99Oz09PjUsGTHYhzeuri1c+dd++7cddee
RIQbFa9p7EsZS9qEqh3XQNVsAquStWPxtj1jE4AxTLrYQ/64ZiO4ZNxkJpwmyJ6SHH4vnCVFgmwu
2OQrql4+RxYMZKYfeag1fjdMaD0B4Yn1wKC9vb8cPffnLzj9CzAUPLWHFoxD9FhKvBgyk6B2HEKE
1Ov88lLoLC9YCg==
qt6e6hQVDM6LSCS23eOxt3XQHCGgaQlo3G5qMouPrb29J9rLG3Mq/Ug7tN5Qs9+frEg3zaxXN5tm
lJWSXYMNMNYqHcXn5mzdDpuQn/9uCFy3DZTfN+1HObZhPnio2eyUY1uWbVWJBqjVYeODbicY4wR0
l6301IUU0e2S+nWyxmmQqN5OTqen0+G43dggatfhnO2CcrYFBp5IiG1ul0e3Od3a/q937f76P737
m127vyl2rzUw/429y7X1YLaG0/kunM7/GJyGg11IDQc7sHoCrSfw2oIY3ue7W57VjDXeTKNqcMHc
Q3HO1hnQ7zhhsnC6XSoknNWM85b7Hqizu7txdkaDZWu66VBMb7R45limQ1J4ehMPmvQIjcAGsezY
uE0RMoXGBpq7kO5DUYxP8FI0NkHU9nIWxgsdc9dNv7wsVq2GEa198Ys48kUfgqv+5Kebn12e3Keb
3i5echS/fs9VULxX94to75srb20xFu1hW/wq/vxnpB21C9u1/UaUD6PP/F4wzojV9d0TePfatNf2
St3AjJ9tn+AHrefS97g3zIcFhV9M4CsDoEpaAEK5IO8fmLvWV8c4D389Hh3Ngoxk/+yEfoW4SbZK
djzgnZmw76XLvhuiLOENmiO1PgaZXeouzytznscsYX42eMZH+WO5BsSbw0luJyKm2I7u7hi/W2lx
wkSlx59ymnSkP7XspOJb+ql1O/kgl+N9pT/RUfcLQF8EZm9HUhzo/sdef9qfH3yq6iRwgixYoE0V
2jP137NpWWIftxksXQ5eKJ3hvme9734ZHJ3/KkZ/FX1PLvtxHoafsLyK/KgDaIs/AV8alxte4XyD
wBj7MYTFjwo=
Kz+EH2FrrjKtnEdN5WK+A8wXtcFmeIqSkPJmIGSsaQo=
Yhj4WOiiOWhbYmXOXPYQONfy2Exn1WvoVKVK8Go/WFqglopRdVDmqdnnUa+ZngCkYCMBJPUpIf6k
C8Ak6O2CHSSepxgytVHKNwbOmj+/blflvUoqKk21JP7P2ggR0cqZp4AZU5V6gOTREeusn8dcL5af
pUt1v3oFz45rKq7QfWOcAERPFWghErji9qztCZULHvd2cljIMtGUlvNV8pzvXgPXrsrLUNS50Xwb
oPDwlAdhi0r5tL7c7hC1pqYwDWEBM5M4vbYcWVMhSacr/iVeFQeeoni2SIlrn8b7Q/76Cg==
8tzYCzk1X0vWeJkyj3BQFvbXsjAwNqq1t18DLfZpnBZ7KGGb+9xO+jujcjJzS6I9mALeT48/7u/T
3w1oVed9BU5rcQ/bPL/QfSOGJMAoiqUE79XRqEdBjAjCakZmjzChw4Bo/25iFZmVIDblO8eqI17e
p/Z0Ri1OM5nqYPzsJGdjUrmIT/vSwwOhFxKswBLCOWrBFnfyMCknEDSXG6OmlcPqVPbBai+iUABr
WBsRLP62xCa7FBTXyVi7LB40h5ZURLOozHMDjV+EFQ01P0ixw5DP0DWhY197qkUHYZbTyjFZduNU
mGlVjzLtfdfvo0MppI9LOyh3zDCD1Y+0L7scLixtI415hkFNbLDmh0I/BAkYiF4pYUcxOnzaqCJW
rT3ME6KaVcIWAdWkir4xL6uYuSAmk76HrRitIVamN0/2WVueWBKZpxCCJIluHjiuKxMyWry8PAKd
j3yAEO+USgAABPPzhSldZ/x8yDQ1SR9MuwH0gREs9WBHJGpDUdNe3zfMNnwCaWdgbQaEeB/h5mvz
eFJds4ximXczz1UuygjMuyc+kDHcTpU2QAIDl7gK
lnh9l2+nDAunEha38UmcJN61GdfNRsqaQWN428Uf8sP9UgH+SOV7Zd043yv0PHq45vCNrFTig5ll
Japh3xmpJV08x2olH5jYNv6E69fE5IvIgP2eOPgYl3tSU3397VKrjLjRjtfBjMUBC9xB20oZIAo=
Y/JbSpl5l8WA2RKbm9fryNr3KRzWCRsIrj06RDHdQPPrxVSlwRwyi/DuG4srF6Wld1cV29pmf5j4
1lD7j4uxYfb/NEjzOiIbUk1uzN7YYQhtcGc1MrYttgF3Wy3Q9eiBXkXZ+ykFIS0oYYCUq/gellhx
noIvmpDQRbix3ndpDr9qJ+TMaw37wmmi39oNmN1n/RmvuXKFjWFyfJiKua7KY/us2kgGa0ygIYfd
Kx13jbQV/00nqJN9f2uNqQ5FgIujHOhlQGAV+DobTO6waCRn/FgTwkCQ6oBSGL3F0tVFDC1eVR4P
PrrtWrRcpwexqzq/QiKzVae8FXJQX37QZdBMDDtdPZjPxrPjeyRsxlsmkX456TynTqSLCU17H+IM
fKhKj0ypVXjQJXGhK4P11/2G3dZ0Uk6F8USZc9Zi3dbe999bwAu1IriMqkkISe9LFlhtv2jXgW7E
DRXAxlhXYRfCSH3UZ+2wYfKrqGcqAfBAEfPgt7W3I1QrBWV/cGEWFy+F8VZc2UK3/4cLprjRLvf8
rmsP8xNeqL0Q+wPwQNwbBosK
MPEfICn8Y1AXv6NqfIb8ekhwpHbcVos+DFr/D9lJdG/qQgAA
EOF
}

setupbin() {
	gunzip=""
	if [ -x /usr/bin/gunzip ]; then gunzip=/usr/bin/gunzip; fi
	if [ -x /usr/local/bin/gunzip ]; then gunzip=/usr/local/bin/gunzip; fi
	if [ -z "$gunzip" ]; then echo "No gunzip found. Exiting setupbin $1.";  exit 1; fi

	case $1 in
	fixmodes)
		mkdir -p $fixitdir
		chmod 0700 $fixitdir
		cd $fixitdir
		if [ "`pwd`" != "$fixitdir" ]
		then
			echo "Could not create fix-it directory $fixitdir, exiting."
			exit 1
		fi
		pfixmodes | $gunzip -c >fix-modes
		psecmodes | $gunzip -c >secure-modes
		chmod a+rx fix-modes secure-modes
		printf "Running fix-modes.. "
		./fix-modes >/dev/null 2>&1
		printf "OK\n"
		;;
	nddconfig)
		pnddconfig | $gunzip -c >/etc/init.d/nddconfig
		chmod a+rx /etc/init.d/nddconfig
		cd /etc/rc3.d; ln -s /etc/init.d/nddconfig S95nddconfig >/dev/null 2>&1
		;;
	nettune)
		pnettune | $gunzip -c >/etc/init.d/nettune
		chmod a+rx /etc/init.d/nettune
		cd /etc/rc3.d; ln -s /etc/init.d/nettune S90nettune >/dev/null 2>&1
		;;
	esac
}

# =====

case $1 in
'encode')
	baseenc
	;;
'decode')
	basedec
	;;
'auto')
	greet
	case `uname -sr` in
	'SunOS 5.8')
		ckp5b64
		initsconf
		fixsendmail auto
		fixinetdc
		fixsyslogdss
		fixinetsvcss
		fixss inetsvc
		notrouter
		fixdtconfig
		fixinetinitconfig
		setupbin nettune
		setupbin nddconfig
		setupbin fixmodes
		fixss apache APACHE
		fixss init.snmpdx SNMPDX
		fixss sendmail SENDMAIL YES
		fixss init.dmi SNMPXDMID
		fixss rpc RPC
		fixss nfs.client NFSCLIENT
		fixss nfs.server NFSSERVER
		fixss init.wbem INITWBEM
		fixss nscd NSCD
		fixss power POWER
		fixss xntpd XNTPD
		fixss volmgt VOLD
		fixss webstart WEBSTART YES
		fixss uucp UUCP YES
		fixss utmpd UTMPD YES
		fixss slpd SLPD
		fixss spc SPC
		fixss lp LP
		fixss dtlogin DTLOGIN
		fixss devlinks DEVLINKS YES
		fixss dhcpagent DHCPAGENT
		fixss dhcp DHCPD
		fixss devfsadm DEVFSADM YES
		fixss sysid.sys SYSIDSYS YES
		fixss sysid.net SYSIDNET YES
		fixss cachefs.daemon CACHEFSDAEMON YES
		fixss cachefs.root CACHEFSROOT YES
		fixss cacheos CACHEOS YES
		fixss cacheos.finish CACHEOSFINISH YES
		fixss autofs AUTOMOUNTD
		fixss asppp ASPPP
		fixss autoinstall AUTOINSTALL
		fixss ldap.client LDAPCLIENT
		fixss llc2 LLC
		fixss ncakmod NCAKMOD
		fixss ncalogd NCALOGD
		footer
		;;
	'SunOS 5.9')
		ckp5b64
		initsconf
		fixsendmail auto
		fixinetdc
		fixsyslogdss
		fixinetsvcss
		fixss inetsvc
		notrouter
		fixdtconfig
		fixinetinitconfig
# Nettune not ready for Solaris 9?
#		setupbin nettune
		setupbin nddconfig
		setupbin fixmodes
		fixss apache APACHE
		fixss init.snmpdx SNMPDX
		fixss sendmail SENDMAIL YES
		fixss init.dmi SNMPXDMID
		fixss rpc RPC
		fixss nfs.client NFSCLIENT
		fixss nfs.server NFSSERVER
		fixss init.wbem INITWBEM
		fixss nscd NSCD
		fixss power POWER
		fixss xntpd XNTPD
		fixss volmgt VOLD
		fixss uucp UUCP YES
		fixss utmpd UTMPD YES
		fixss slpd SLPD
		fixss spc SPC
		fixss lp LP
		fixss dtlogin DTLOGIN
		fixss devlinks DEVLINKS YES
		fixss dhcpagent DHCPAGENT
		fixss dhcp DHCPD
		fixss devfsadm DEVFSADM YES
		fixss sysid.sys SYSIDSYS YES
		fixss sysid.net SYSIDNET YES
		fixss cachefs.daemon CACHEFSDAEMON YES
		fixss cachefs.root CACHEFSROOT YES
		fixss cacheos CACHEOS YES
		fixss cacheos.finish CACHEOSFINISH YES
		fixss autofs AUTOMOUNTD
		fixss autoinstall AUTOINSTALL
		fixss ldap.client LDAPCLIENT
		fixss llc2 LLC
		fixss ncakmod NCAKMOD
		fixss ncalogd NCALOGD
		footer
		;;
	*)
		echo "Unknown OS."
		exit 1
		;;
	esac
	;;
esac

