Microsoft.Linux.SLES.12.Kit.x64 (DeployableResource)
Element properties:
Source Code:
<DeployableResource ID="Microsoft.Linux.SLES.12.Kit.x64" Accessibility="Internal" FileName="scx-1.6.8-0.sles.12.x64.sh" HasNullStream="false"/>
File Content: scx-1.6.8-0.sles.12.x64.sh
#!/bin/sh
#
# Shell Bundle installer package for the SCX project
#
PATH=/usr/bin:/usr/sbin:/bin:/sbin
umask 022
# Can't use something like 'readlink -e $0' because that doesn't work everywhere
# And HP doesn't define $PWD in a sudo environment, so we define our own
case $0 in
/*|~*)
SCRIPT_INDIRECT="`dirname $0`"
;;
*)
PWD="`pwd`"
SCRIPT_INDIRECT="`dirname $PWD/$0`"
;;
esac
SCRIPT_DIR="`(cd \"$SCRIPT_INDIRECT\"; pwd -P)`"
SCRIPT="$SCRIPT_DIR/`basename $0`"
EXTRACT_DIR="`pwd -P`/scxbundle.$$"
DPKG_CONF_QUALS="--force-confold --force-confdef"
# These symbols will get replaced during the bundle creation process.
#
# The OM_PKG symbol should contain something like:
# scx-1.5.1-115.rhel.6.x64 (script adds .rpm or .deb, as appropriate)
# Note that for non-Linux platforms, this symbol should contain full filename.
#
# PROVIDER_ONLY is normally set to '0'. Set to non-zero if you wish to build a
# version of SCX that is only the provider (no OMI, no bundled packages). This
# essentially provides a "scx-cimprov" type package if just the provider alone
# must be included as part of some other package.
TAR_FILE=scx-1.6.8-0.universal.x64.tar
OM_PKG=scx-1.6.8-0.universal.x64
OMI_PKG=omi-1.6.8-0.ulinux.x64
PROVIDER_ONLY=0
SCRIPT_LEN=705
SCRIPT_LEN_PLUS_ONE=706
# Packages to be installed are collected in this variable and are installed together
ADD_PKG_QUEUE=
# Packages to be updated are collected in this variable and are updated together
UPD_PKG_QUEUE=
usage()
{
echo "usage: $1 [OPTIONS]"
echo "Options:"
echo " --extract Extract contents and exit."
echo " --force Force upgrade (override version checks)."
echo " --install Install the package from the system."
echo " --purge Uninstall the package and remove all related data."
echo " --remove Uninstall the package from the system."
echo " --restart-deps Reconfigure and restart dependent service"
echo " --source-references Show source code reference hashes."
echo " --upgrade Upgrade the package in the system."
echo " --enable-opsmgr Enable port 1270 for usage with opsmgr."
echo " --version Version of this shell bundle."
echo " --version-check Check versions already installed to see if upgradable"
echo " (Linux platforms only)."
echo " --debug use shell debug mode."
echo " -? | --help shows this usage text."
}
source_references()
{
cat <<EOF
superproject: b0128f43a0849b3c99ac707b3978abef81787dc0
omi: 9f4a212e06656dcd6b0ca2ddd34f181623965b28
omi-kits: fe4166a75a974293ffad26526284aece905c6be5
opsmgr: 05401d35c9c45ad84de6eff7ebaf90e7e6615b40
opsmgr-kits: 329545760488b3f919cd6a8dbae6d253e39bc33d
pal: 06c611367b1c31b3b6a6b65a9f58117fe54a9e95
EOF
}
cleanup_and_exit()
{
# $1: Exit status
# $2: Non-blank (if we're not to delete bundles), otherwise empty
if [ -z "$2" -a -d "$EXTRACT_DIR" ]; then
cd $EXTRACT_DIR/..
rm -rf $EXTRACT_DIR
fi
if [ -n "$1" ]; then
exit $1
else
exit 0
fi
}
check_version_installable() {
# POSIX Semantic Version <= Test
# Exit code 0 is true (i.e. installable).
# Exit code non-zero means existing version is >= version to install.
#
# Parameter:
# Installed: "x.y.z.b" (like "4.2.2.135"), for major.minor.patch.build versions
# Available: "x.y.z.b" (like "4.2.2.135"), for major.minor.patch.build versions
if [ $# -ne 2 ]; then
echo "INTERNAL ERROR: Incorrect number of parameters passed to check_version_installable" >&2
cleanup_and_exit 1
fi
# Current version installed
local INS_MAJOR=`echo $1 | cut -d. -f1`
local INS_MINOR=`echo $1 | cut -d. -f2`
local INS_PATCH=`echo $1 | cut -d. -f3`
local INS_BUILD=`echo $1 | cut -d. -f4`
# Available version number
local AVA_MAJOR=`echo $2 | cut -d. -f1`
local AVA_MINOR=`echo $2 | cut -d. -f2`
local AVA_PATCH=`echo $2 | cut -d. -f3`
local AVA_BUILD=`echo $2 | cut -d. -f4`
# Check bounds on MAJOR
if [ $INS_MAJOR -lt $AVA_MAJOR ]; then
return 0
elif [ $INS_MAJOR -gt $AVA_MAJOR ]; then
return 1
fi
# MAJOR matched, so check bounds on MINOR
if [ $INS_MINOR -lt $AVA_MINOR ]; then
return 0
elif [ $INS_MINOR -gt $AVA_MINOR ]; then
return 1
fi
# MINOR matched, so check bounds on PATCH
if [ $INS_PATCH -lt $AVA_PATCH ]; then
return 0
elif [ $INS_PATCH -gt $AVA_PATCH ]; then
return 1
fi
# PATCH matched, so check bounds on BUILD
if [ $INS_BUILD -lt $AVA_BUILD ]; then
return 0
elif [ $INS_BUILD -gt $AVA_BUILD ]; then
return 1
fi
# Version available is idential to installed version, so don't install
return 1
}
getVersionNumber()
{
# Parse a version number from a string.
#
# Parameter 1: string to parse version number string from
# (should contain something like mumble-4.2.2.135.universal.x86.tar)
# Parameter 2: prefix to remove ("mumble-" in above example)
if [ $# -ne 2 ]; then
echo "INTERNAL ERROR: Incorrect number of parameters passed to getVersionNumber" >&2
cleanup_and_exit 1
fi
echo $1 | sed -e "s/$2//" -e 's/\.universal\..*//' -e 's/\.x64.*//' -e 's/\.x86.*//' -e 's/-/./'
}
verifyNoInstallationOption()
{
if [ -n "${installMode}" ]; then
echo "$0: Conflicting qualifiers, exiting" >&2
cleanup_and_exit 1
fi
return;
}
is_suse11_platform_with_openssl1(){
if [ -e /etc/SuSE-release ];then
VERSION=`cat /etc/SuSE-release|grep "VERSION = 11"|awk 'FS=":"{print $3}'`
if [ ! -z "$VERSION" ];then
which openssl1>/dev/null 2>&1
if [ $? -eq 0 -a $VERSION -eq 11 ];then
return 0
fi
fi
fi
return 1
}
ulinux_detect_openssl_version() {
TMPBINDIR=
# the system OpenSSL version is 0.9.8. Likewise with OPENSSL_SYSTEM_VERSION_100 and OPENSSL_SYSTEM_VERSION_110
is_suse11_platform_with_openssl1
if [ $? -eq 0 ];then
OPENSSL_SYSTEM_VERSION_FULL=`openssl1 version | awk '{print $2}'`
else
OPENSSL_SYSTEM_VERSION_FULL=`openssl version | awk '{print $2}'`
fi
OPENSSL_SYSTEM_VERSION_100=`echo $OPENSSL_SYSTEM_VERSION_FULL | grep -Eq '^1.0.'; echo $?`
[ `uname -m` = "x86_64" ] && OPENSSL_SYSTEM_VERSION_110=`echo $OPENSSL_SYSTEM_VERSION_FULL | grep -Eq '^1.1.'; echo $?`
if [ $OPENSSL_SYSTEM_VERSION_100 = 0 ]; then
TMPBINDIR=100
elif [ $OPENSSL_SYSTEM_VERSION_110 = 0 ]; then
TMPBINDIR=110
else
echo "Error: This system does not have a supported version of OpenSSL installed."
echo "This system's OpenSSL version: $OPENSSL_SYSTEM_VERSION_FULL"
if [ `uname -m` = "x86_64" ];then
echo "Supported versions: 1.0.*, 1.1.*"
else
echo "Supported versions: 1.0.*"
fi
cleanup_and_exit 60
fi
}
ulinux_detect_installer()
{
INSTALLER=
# If DPKG lives here, assume we use that. Otherwise we use RPM.
type dpkg > /dev/null 2>&1
if [ $? -eq 0 ]; then
INSTALLER=DPKG
else
INSTALLER=RPM
fi
}
# $1 - The name of the package to check as to whether it's installed
check_if_pkg_is_installed() {
if [ "$INSTALLER" = "DPKG" ]
then
dpkg -s $1 2> /dev/null | grep Status | grep " installed" 2> /dev/null 1> /dev/null
else
rpm -q $1 2> /dev/null 1> /dev/null
fi
}
# $1 - The filename of the package to be installed
# $2 - The package name of the package to be installed
# Enqueues the package to the queue of packages to be added
pkg_add() {
pkg_filename=$1
pkg_name=$2
echo "----- Installing package: $pkg_name ($pkg_filename) -----"
ulinux_detect_openssl_version
pkg_filename=$TMPBINDIR/$pkg_filename
if [ "$INSTALLER" = "DPKG" ]
then
dpkg ${DPKG_CONF_QUALS} --install --refuse-downgrade ${pkg_filename}.deb
return $?
else
rpm --install ${pkg_filename}.rpm
return $?
fi
}
# $1 - The package name of the package to be uninstalled
# $2 - Optional parameter. Only used when forcibly removing a package
pkg_rm() {
echo "----- Removing package: $1 -----"
if [ "$INSTALLER" = "DPKG" ]
then
if [ "$installMode" = "P" ]; then
dpkg --purge ${1}
elif [ "$2" = "force" ]; then
dpkg --remove --force-all ${1}
else
dpkg --remove ${1}
fi
else
if [ "$2" = "force" ]; then
rpm --erase --nodeps ${1}
else
rpm --erase ${1}
fi
fi
}
# $1 - The filename of the package to be installed
# $2 - The package name of the package to be installed
# $3 - Okay to upgrade the package? (Optional)
pkg_upd() {
pkg_filename=$1
pkg_name=$2
pkg_allowed=$3
echo "----- Upgrading package: $pkg_name ($pkg_filename) -----"
if [ -z "${forceFlag}" -a -n "$pkg_allowed" ]; then
if [ $pkg_allowed -ne 0 ]; then
echo "Skipping package since existing version >= version available"
return 0
fi
fi
ulinux_detect_openssl_version
pkg_filename=$TMPBINDIR/$pkg_filename
if [ "$INSTALLER" = "DPKG" ]
then
[ -z "${forceFlag}" ] && FORCE="--refuse-downgrade" || FORCE=""
dpkg ${DPKG_CONF_QUALS} --install $FORCE ${pkg_filename}.deb
return $?
else
[ -n "${forceFlag}" ] && FORCE="--force" || FORCE=""
rpm --upgrade $FORCE ${pkg_filename}.rpm
return $?
fi
}
getInstalledVersion()
{
# Parameter: Package to check if installed
# Returns: Printable string (version installed or "None")
if check_if_pkg_is_installed $1; then
if [ "$INSTALLER" = "DPKG" ]; then
local version="`dpkg -s $1 2> /dev/null | grep 'Version: '`"
getVersionNumber "$version" "Version: "
else
local version=`rpm -q $1 2> /dev/null`
getVersionNumber $version ${1}-
fi
else
echo "None"
fi
}
shouldInstall_omi()
{
local versionInstalled=`getInstalledVersion omi`
[ "$versionInstalled" = "None" ] && return 0
local versionAvailable=`getVersionNumber $OMI_PKG omi-`
check_version_installable $versionInstalled $versionAvailable
}
shouldInstall_scx()
{
local versionInstalled=`getInstalledVersion scx`
[ "$versionInstalled" = "None" ] && return 0
local versionAvailable=`getVersionNumber $OM_PKG scx-`
check_version_installable $versionInstalled $versionAvailable
}
remove_and_install()
{
if [ -f /opt/microsoft/scx/bin/uninstall ]; then
/opt/microsoft/scx/bin/uninstall R force
else
check_if_pkg_is_installed apache-cimprov
if [ $? -eq 0 ]; then
pkg_rm apache-cimprov
fi
check_if_pkg_is_installed mysql-cimprov
if [ $? -eq 0 ]; then
pkg_rm mysql-cimprov
fi
pkg_rm scx force
pkg_rm omi force
fi
pkg_add $OMI_PKG omi
if [ "$?" -ne 0 ]; then
return 1
fi
pkg_add $OM_PKG scx
if [ "$?" -ne 0 ]; then
return 1
fi
return 0
}
#
# Main script follows
#
set +e
# Validate package and initialize
ulinux_detect_installer
while [ $# -ne 0 ]
do
case "$1" in
--extract-script)
# hidden option, not part of usage
# echo " --extract-script FILE extract the script to FILE."
head -${SCRIPT_LEN} "${SCRIPT}" > "$2"
local shouldexit=true
shift 2
;;
--extract-binary)
# hidden option, not part of usage
# echo " --extract-binary FILE extract the binary to FILE."
tail -n +${SCRIPT_LEN_PLUS_ONE} "${SCRIPT}" > "$2"
local shouldexit=true
shift 2
;;
--extract)
verifyNoInstallationOption
installMode=E
shift 1
;;
--force)
forceFlag=true
shift 1
;;
--install)
verifyNoInstallationOption
installMode=I
shift 1
;;
--purge)
verifyNoInstallationOption
installMode=P
shouldexit=true
shift 1
;;
--remove)
verifyNoInstallationOption
installMode=R
shouldexit=true
shift 1
;;
--restart-deps)
restartDependencies=--restart-deps
shift 1
;;
--source-references)
source_references
cleanup_and_exit 0
;;
--upgrade)
verifyNoInstallationOption
installMode=U
shift 1
;;
--enable-opsmgr)
if [ ! -f /etc/scxagent-enable-port ]; then
touch /etc/scxagent-enable-port
fi
shift 1
;;
--version)
echo "Version: `getVersionNumber $OM_PKG scx-`"
exit 0
;;
--version-check)
printf '%-15s%-15s%-15s%-15s\n\n' Package Installed Available Install?
# omi
versionInstalled=`getInstalledVersion omi`
versionAvailable=`getVersionNumber $OMI_PKG omi-`
if shouldInstall_omi; then shouldInstall="Yes"; else shouldInstall="No"; fi
printf '%-15s%-15s%-15s%-15s\n' omi $versionInstalled $versionAvailable $shouldInstall
# scx
versionInstalled=`getInstalledVersion scx`
versionAvailable=`getVersionNumber $OM_PKG scx-cimprov-`
if shouldInstall_scx; then shouldInstall="Yes"; else shouldInstall="No"; fi
printf '%-15s%-15s%-15s%-15s\n' scx $versionInstalled $versionAvailable $shouldInstall
exit 0
;;
--debug)
echo "Starting shell debug mode." >&2
echo "" >&2
echo "SCRIPT_INDIRECT: $SCRIPT_INDIRECT" >&2
echo "SCRIPT_DIR: $SCRIPT_DIR" >&2
echo "EXTRACT DIR: $EXTRACT_DIR" >&2
echo "SCRIPT: $SCRIPT" >&2
echo >&2
set -x
shift 1
;;
-? | --help)
usage `basename $0` >&2
cleanup_and_exit 0
;;
*)
usage `basename $0` >&2
cleanup_and_exit 1
;;
esac
done
if [ -z "${installMode}" ]; then
echo "$0: No options specified, specify --help for help" >&2
cleanup_and_exit 3
fi
#
# Note: From this point, we're in a temporary directory. This aids in cleanup
# from bundled packages in our package (we just remove the diretory when done).
#
mkdir -p $EXTRACT_DIR
cd $EXTRACT_DIR
# Do we need to remove the package?
if [ "$installMode" = "R" -o "$installMode" = "P" ]
then
if [ -f /opt/microsoft/scx/bin/uninstall ]; then
/opt/microsoft/scx/bin/uninstall $installMode
else
# This is an old kit. Let's remove each separate provider package
for i in /opt/microsoft/*-cimprov; do
PKG_NAME=`basename $i`
if [ "$PKG_NAME" != "*-cimprov" ]; then
echo "Removing ${PKG_NAME} ..."
pkg_rm ${PKG_NAME}
fi
done
# Now just simply pkg_rm scx (and omi if it has no dependencies)
pkg_rm scx
pkg_rm omi
fi
if [ "$installMode" = "P" ]
then
check_if_pkg_is_installed apache-cimprov
if [ $? -ne 0 ]; then
echo "Purging all files in apache provider ..."
rm -rf /etc/opt/microsoft/apache-cimprov /opt/microsoft/apache-cimprov /var/opt/microsoft/apache-cimprov
fi
check_if_pkg_is_installed mysql-cimprov
if [ $? -ne 0 ]; then
echo "Purging all files in mysql provider ..."
rm -rf /etc/opt/microsoft/mysql-cimprov /opt/microsoft/mysql-cimprov /var/opt/microsoft/mysql-cimprov
fi
# Remove directories only if scx got removed successfully (Other products might be dependent on scx)
check_if_pkg_is_installed scx
if [ $? -ne 0 ]; then
echo "Purging all files in cross-platform agent ..."
rm -rf /etc/opt/microsoft/scx /opt/microsoft/scx /var/opt/microsoft/scx
rmdir /etc/opt/microsoft /opt/microsoft /var/opt/microsoft 1>/dev/null 2>/dev/null
fi
# If OMI is not installed, purge its directories as well.
check_if_pkg_is_installed omi
if [ $? -ne 0 ]; then
rm -rf /etc/opt/omi /opt/omi /var/opt/omi
fi
fi
fi
if [ -n "${shouldexit}" ]
then
# when extracting script/tarball don't also install
cleanup_and_exit 0
fi
#
# Do stuff before extracting the binary here, for example test [ `id -u` -eq 0 ],
# validate space, platform, uninstall a previous version, backup config data, etc...
#
#
# Extract the binary here.
#
echo "Extracting..."
tail -n +${SCRIPT_LEN_PLUS_ONE} "${SCRIPT}" | tar xzf -
STATUS=$?
if [ ${STATUS} -ne 0 ]
then
echo "Failed: could not extract the install bundle."
cleanup_and_exit ${STATUS}
fi
#
# Do stuff after extracting the binary here, such as actually installing the package.
#
EXIT_STATUS=0
BUNDLE_EXIT_STATUS=0
OMI_EXIT_STATUS=0
SCX_EXIT_STATUS=0
case "$installMode" in
E)
# Files are extracted, so just exit
cleanup_and_exit 0 "SAVE"
;;
I)
echo "Installing cross-platform agent ..."
if [ $PROVIDER_ONLY -eq 0 ]; then
check_if_pkg_is_installed omi
if [ $? -eq 0 ]; then
shouldInstall_omi
pkg_upd $OMI_PKG omi $?
OMI_EXIT_STATUS=$?
else
pkg_add $OMI_PKG omi
OMI_EXIT_STATUS=$?
fi
fi
pkg_add $OM_PKG scx
SCX_EXIT_STATUS=$?
if [ "${OMI_EXIT_STATUS}" -ne 0 -o "${SCX_EXIT_STATUS}" -ne 0 ]; then
remove_and_install
if [ "$?" -ne 0 ]; then
echo "Install failed"
cleanup_and_exit 1
fi
fi
if [ $PROVIDER_ONLY -eq 0 ]; then
# Install bundled providers
[ -n "${forceFlag}" ] && FORCE="--force" || FORCE=""
for i in *-oss-test.sh; do
# If filespec didn't expand, break out of loop
[ ! -f $i ] && break
./$i
if [ $? -eq 0 ]; then
OSS_BUNDLE=`basename $i -oss-test.sh`
./${OSS_BUNDLE}-cimprov-*.sh --install $FORCE $restartDependencies
TEMP_STATUS=$?
[ $TEMP_STATUS -ne 0 ] && BUNDLE_EXIT_STATUS="$TEMP_STATUS"
fi
done
fi
;;
U)
echo "Updating cross-platform agent ..."
if [ $PROVIDER_ONLY -eq 0 ]; then
shouldInstall_omi
pkg_upd $OMI_PKG omi $?
OMI_EXIT_STATUS=$?
fi
shouldInstall_scx
pkg_upd $OM_PKG scx $?
SCX_EXIT_STATUS=$?
if [ "${OMI_EXIT_STATUS}" -ne 0 -o "${SCX_EXIT_STATUS}" -ne 0 ]; then
remove_and_install
if [ "$?" -ne 0 ]; then
echo "Upgrade failed"
cleanup_and_exit 1
fi
fi
if [ $PROVIDER_ONLY -eq 0 ]; then
# Upgrade bundled providers
[ -n "${forceFlag}" ] && FORCE="--force" || FORCE=""
echo "----- Updating bundled packages -----"
for i in *-oss-test.sh; do
# If filespec didn't expand, break out of loop
[ ! -f $i ] && break
./$i
if [ $? -eq 0 ]; then
OSS_BUNDLE=`basename $i -oss-test.sh`
./${OSS_BUNDLE}-cimprov-*.sh --upgrade $FORCE $restartDependencies
TEMP_STATUS=$?
[ $TEMP_STATUS -ne 0 ] && BUNDLE_EXIT_STATUS="$TEMP_STATUS"
fi
done
fi
;;
*)
echo "$0: Invalid setting of variable \$installMode, exiting" >&2
cleanup_and_exit 2
esac
# Remove temporary files (now part of cleanup_and_exit) and exit
if [ "$BUNDLE_EXIT_STATUS" -ne 0 ]; then
cleanup_and_exit 1
else
cleanup_and_exit 0
fi
#####>>- This must be the last line of this script, followed by a single empty line. -<<#####
ad` scx-1.6.8-0.universal.x64.tar =[lq<Dsb /ǁpH^/t(L'"Es-gwzcMq Hi _>O'm|ĹTu<AQ2|"{^]3רk^Ϯ4K+z5tl7</-V~o|YZ\//]Q{r}aaaX_/-4Sƥә~'36%hyk0yxNӂ'Eԏe?s'uq?A1L=}~_W_+ܼbv.ֹu+K&:|qe6[bl]??G>w5?35GkSSރ7"~~"C71j?N_:??ERBW}IoQ>>R;?j>?6NҺ{NS)<߯T/ޢyj#K
/Q'|QW OQUڟTU}woQ/(o,*sRc~ߧUK`w9jzU|Gjw}.oPܫ5j:_#z~ӧ.Rmej*5ߧ};@헩jJϵoijsjj}@헨PC5߷p)oSҿ#.k>q7`n7E 92ܟj~h9brRިqk}Oxz~ܩS;'"=ھT[&yqvRsiqjBe5-ܷ;',Yg@ 밝;v!v9Jh
PFA{#;6a+Ә{XbYڵpgsWa"@ƽ͕6̟}>3Fxdcxmh=OzUcF sԵ]Q{fÚ:[R#7wYUL4Y9,wH4R !K."FTqь6 m5s1~[+ؑUnn5Hz9)!m/]}~[YͅPeKvt"0۴{I.0Cb%PDy;}9{D,p,pk<CDxk!PcqM=dҹwwى4<+mwy@砪DA]D@a
fVHyNsi,c;\jZ*|qgw[+Qsj☝+=48^tXݼbBUY7+(bXnvf6GFzIb
Ufy.۹bJ~yI7-%[Π]b^X*,c}7woA[3Q3@"ș=!q!;j4;jkQA
A :4i3l{n{NN)JٮmRnh1jPCC0ѻ!/@}Dsዹ2Țf;W.F2Ilʀ\p[P-L4+ ny+6|#:aIe4q
S~\,R){J24`#Ě@>G'73VYYi|UKØG&ԟA81Lf)LD^h9`CWv]<b⏲T$o7DeMCf1Shv@Le&q9Rfp(a K朠ݣxq1b>Ri~V:
avKpjZB#E&Yi.^F<:ƋO@r;
aXDf>*g9 E`%@nFQ!U}Ʋ_R-Z4RAn3Gj
X"}h{R8M[X\R\R ʕs( Y&zv6_y}n5u)qU0)g[Rmsj--{%lGp4Wxf({ rڈ@
Uِm^Z2 -'A>zrHz cQ'Eyvԅy>Н@I5YOJW5'xӤ2)A,e?aQ,
$`\mb={ȟW̴< *E~Sͦ:N,SB+Q1ߙFy
|5jj&(I@JIhO
HU@o q"fI6so2]SL"r2$eBs($5G02
UZcN
#K!!
P藋mbxM\"/>8bVKI.'ʢrQg| 0.hŲ4khivdB3be]\ bW F,PDW].+UK[GcHx~k,
V\LqgcX5J\qjƔrCEx2O
~m[+پmy黔\ie@ᇚaT*^* ZA<bŽY _Z(54AT7>aKgaE$@m_`Xj$(7%dyU\_|BS⏓kTc yh7 y%FPd@\nV~S$Z}\i=+J\Ue;E?Y6m@O/
g)\)LKRDD^c<EH䓎OX78N7YdfnL|Y\EcBI)8SNcn{EiTtO7UWjs?$!7MN1 PSAmm+0(=Q
iRCJ{m
"Œ~I ٵkkKo=(h~h.x!Yfl ؟*`5ҷPBRA_OVAyc˺$GKW6f\^/^My"ťK֮gt*0hX&dيmU'K19 >lE+E(C;tgl#B&AFE
dmJ .Ŀq`;O?'1H
"b̡\gg#L!lP;IiZccׯ ,&g&]$AZ,{g3cY[xb\t3<{!^Mz5-WSـE ; ,3g}ic?ħmِݭ{ۻxUzZX]R~*
POټ?S$|6BO <#q)!i`?NUq%x{)[-2!f()WJb
829ޗslܗG-<u9+8w*nd
$.kⲚ+RL1HHͲA
Xݖ"b ቴʹiK4l5,F1^?EKpAO}Hŕz[iEteDA1Jn6O]T[ΩCF6^')8-D jj
2(lyl
<<4AOtTv7tQtӈ6E(aV+|ao>^[r)CcqDhvBӮb,G.{LuF|xW|хum^r}]SOPGa_μ:-} $]U>hF "txʠTiK.W騺nB"bs$27ؽ|A:R|3@S
M%9)g'M.&Kh{jc<j:hACXf
o^tЛ]rg54(&7ęTW8wgz`9
Su^NWE,f!&6p>̖(._-j~&K>HWߘ웘j뫸 }~0*-
eT3ӑF\4j3|YQzh im;yxbزW_Ka"ⳗJiw{ŖZ\Ԋ}Rtt Xs*x\.V<(NEqu=k&6=cpi87_KTnBOA:{AFmU[dcSEfKOPݝ
Rga
US,Aq̓R*^˹#Yh]4#;\/Ffm:+axwOpiEaDgqD'/}6U[f,4S7}WFJ
?5* WLky7]`P&z,AYZ1̟3͉d{km{:0ʾd>/ӃSOj١LI)N
nkM&ū٢k'<+Č<8髻]J㝷ك<S_᫅@ ZN"8/nxcU\U3On&`>AWh@pYĕku9E[DzU6fa_#IJb'(";Wos=9-LV)IOgxENSj,aUxеa4oÂ0Z+|N0=; c
IaO]y4Խ\7 n
2]Z\橞[q"5D:f8ݑNPGѤa1zuD;aKv.9Ɠ
*Ac^IwoQ&uqo7F,ٸ)$,O~X,i>*6,?48|FDBrFělQBL웒x!k[t]/~QRFu|nThM]wdu,4gg2óivxށtf9hviX*MVYAo m&20т=*ٔ6EHB'"C?^4#y|z$zᣠ6ENH2<ޗ1̚Zx"i'δ:H*UyzߍvߝfkNT͉zE<CߋS$h{P- Y[UieZBȈs>H6윓l=*mB幞6CtK'
7 {ƞJS~(ʼU~~ԝ7p?1"tUEGgrA%o_ψ5z"cV-]@+%rE"%\>bM'ujN1D&dYΥ"jQCq=H-=9;"7nps}:Rx#3D
p]b)UU;Uuf@\|3.Ahucw5^P#YKrq*&Zc7c@忘H0|abԄt<ގҧ@3ЗFUy(BYyK$s4$`@ׁ~ʣFTUU!n!}|BF,
h3HOFd^j*hĜ2~/À}$5/ C7=쩲DX/ŝGG`l'2*~D
iң s0xp>f}ABW>^&E>D&\rq+'\L3>y䕋<y䕋W.N^8y䕋W.j*=y䕋W.2m0y䕋W.N^8y䕋crj/X+vQ x> &٭
[;OiA'
Q`ʧ7ՁMSE*@BKjJmPv E6)JTX3I"w Qnl5Hpn/((
("(V@ڻF1bi)+XbF{4}wg~33|7s|?$δARX1'\ߵ:OЌ0 Tga ^}eY^g'qמ&Aj'Iu+hɧ4(W=^Jhfa::mCеp˭#][["N'Y|;:umN틳dlPr]n@Us3sM_p$T #(InYAÃ-lSLm"l+f4Ai){5q1|JϢU"/jNS@Gh/,[@~eDI}%YPGFM9i
-q8ұ%#ΐ8)Nt,h-%3Ҷkf*mSD^"Oі->4`~ުF0;C:r 5:ARs1\&owk,ހsZ#PUab.c3ԽIlpXX]=՝L2Mp\9,"ͦNSՉWI: N%$%,J7S jVsn Y=No=ym¿YΩ
İ;1Nv'݉ذ;1Nİ;1N;6NӰ;а;1Nİ;yyo@q?U"|T+㴽< p1%^}m<-jm:w;J̈́6d\RѲ>Eiʕ6PW/wbvRz59F]T9UUudܡhQXJh/JE"pm6\Dò1,eeE"pm6\Dm6\D.]pm6\D.
цhEtIpm6\Dr vUo ;w*Ĥ8@SIMzrѩici'b}J(h=ζ ɰ͜{]U3ܞ(\/Xg4]<8wւTek"{eHmЖ^HFq*l֕!*:1/չ"FX˶=}{c/WP㬣Lɂr2r3 lA#E(qNE7T֊2T8Qjꌔ[:)U{ H]=m!E8i J ACRYO%ۈ
HϿE_B Xi Hpa~p>γ]Tc±M9\B-OY8v|j]hm<7#Ý[\JIK?zۥzzR(b(Kr"(*
*a<&pBLJ/,*+s3a'<E$Iq8NR%hVE9qEhJ E`dqQVhdD'xdI@yQ(\dTH&X\@",ki4Ab18#0
'(JXi8(8LA9DRYVTkB)(H/+bb,N1UH%2P
&A F@8+J$WDq4EQU08DYdi9%DF!DYfdZb1\(dQ882(ð,,"( SҌ͊8
MhZD! (XN@ZhhnNⲄ
$*I"pcIZJ@0ee'9VDT!Ix$8%4(PJ!x )a9GpYd
~
$ "A"
WHMd8yG)YyCgE"Fb GeXp%@A`8IHƔ0F~S,O<tBQQ+
,2䠈2("M+28'$+,t^$TN4Ɠ<J`S4*Hp8R9E
24G$M/AC%
eZ5COPq0CXA%QQq`tgA QáSЛ)HJFD011Y}TQFID"D^D "8*Q$YayYh7,p'$ EEJ)bI%D%q@Q["qbyuUh꧆IjK?I~_ۅu27.ssW'6ɜ$ |[~
5hRMp+'w)Qi+n ST ~,ɉr<d%foD_?(gT94IVbӽOnͲ"fMPiJ4pzJ.Mb+<cw - @`@{'!P@jh h`~ P
x Ba>^@80AIqRA
x* ]ݵr:Trk/@eU\A!A ef8bGsPs\vir_5?{=fdGa
1֥CpHx0=ZeNYMNHRxYY'HioAQJX2,TNIoZroU\PUlSzYI5V8yy+J϶ȓ%$vl!: U0=%If[=-d;N]L]ǭRhB:KiE%oB\n&BuB!o4"&& @X8$hR?Z<jFǧ JKbrT6*όQ(?6
ЈGV))ߏå/:ozL)坳9<-6MeҚo]dOvMw?1{HyH~4~ʒBcÎ;>h}N/{i[w>sBfKrJI1jPTY:B^Rxe-sxUm,o݆sGy8y}R>]{O:}Z;L'co}vŐ?uwSRV)?/J+;4v[В2wG?+mZ{dz]~97`֩n¢FV]_9}VfԭmGBƴ9trtg1UV$\yKtݲZ&ieU~֣Z?fJl=p륽ϯ^=qSG~]vF42͟{d
{g/?@ߝ^!O"*ԭڈ#Ng=fEʭrqr(<qʸ}|>Z<y߽}r9M(ua%:ev^R#̸SaV3_էӈ/xp_[=~W9Iiקceƛ7'fgwք6,5= ejWzFN~;o͝jױl盷űo}nmu4~Нa/p?_Ϳʻl(L|yE雷M̳r9y} rңmޔ:PceygcΤ݉nvK{f|{iߩ?vnw
PϙSό~rs|JfyAnF7^I~zJ滏EVlh8g,:<\d'909U}ٷSNTvF8ݳ͘pƿthm6=o`R[}״m 3_lPU$ؘKMp=<hу+``c|9]xV+?ʣ93xS>>]I}1bb7-lFO>s*ţkCOLU>^41ӾwLml}F,|r*_||Scf\%;-?Bgkǭ|jHƺn[T {nJ:xzsNk[WuV킰D1>Xfa']XV-\<)瓵ד;}?]VSjz~ރGzMRagx&/noړ|srzQYcܝO<ߺ%{]dKJn3rٳټ:{o~㏟
il;a쭃y~=uw=w<kGr5{'7(\}UYwrU+6>u\D{oz@
:xdMC^?O4ީIQuRmn=-%DYUyJ+
jkݤv_z[Pjz+wY3_={}kojb&#^ZtӨ}>n<tӃ{y7sn`
{Nɇw=2?/y[t(xA^oqm[nM<N7?$lj۩QwVtk
26z]>~^>}c}`ai;%֢.5;ԋܰ>OLK<sUc-Jif._[Mke֗[4[}0hJ#P6?Z|fyXRawZG6xw҅'dU5n+~v7a3&nTA}[ҌیH=jTKX<9Bޱ)5BN
1wG-Z}Һzg/krpD"cfl۶m7ƶ۶m۶m;_1]Ϛ>}fM#jadP4Kh<34R4+RaR8Kzvs?5wHаihuGS'n6TO<S7xF
h*[jTXsrC#kMOxBoJu٭zsx=<5I;WK0Yxw2yxB əQB#.,A
Vu-Ld^Kqqcam$B/t> јTE$ímAKf̙TwOJG4FɰHf&F22,&9S.B%-fV,T l*ZJwSE%{B?ELCH)=z<2ucto"R<`/45_J#Hboxwu;2.y%s7?+KN
ԙ3P.PjC椹/VF=ڦedƁBTEn/{rr2W-ahhH~cڜqq,~4NGS`0^.dj/W;
C
ljI]߇hT\{U47<ttwo<1nZE^z̏?]HͻwS6[ǥ/'Ď9KC'?j,J|ڜ.۾[7/ igW929*FbPRˤlV[A$gP+6褭J$S:tCQ~%qLi:!,iYXC#\O۵7BJۤJQMOL,ƪ183|`&bߠ R
iljf]!1͐lr֏5TvڵWYwܠ*p쯻p,@'D@%7{hȞIzoCs#Rb,!WIEHmŌ I4|"IսccV*2RڌGV G56;Iꦂ/$BvJ&UUAmFװi7"B(
ǮsXQK),4ƃ0ޜE$5 [n"`*?gTQFH,9ÊC-X/ }:<W S//TgJ,`4W3#d9ʕ[
b]3?4!@\8~fF@ I˚leSUEțnj!/Eԃ7ei#.CYH_[Pu$
iVP6y,k;k&0-EolژYxcii@-f?b7(Յ{i?G?pQhڢҮdtBs躋dc|'U*emU^+X
L*ڌGxzܺVX<<$cct P)]q?+T'fFU6}[||eoe]t13UQar;]Ż}Mv)?+Qw[s:>Uo30uu7Ua)}w1[ٺR3Cd;sLFVe&Ivy[ثaLROuI㕴{_*"";R[luןan;.}}g%bK]Χފ#~i\.Pp/Ǻ[$N$gו1[cS1ew"t/);MEI])g2q٧yic7zwF;k+hn.ЖEܧ5pm$5%627swS ~_-d@dq"|N
og̕sA+k'G\c3F፱ﰆe'D=셣sPH)ʇUϴۃB&Ea
W] OןW'~*{=еuO~D=<o[L}G&^]4#"ɵpe
XOf..kfM4+PM(g!zg@ڮZ$ЎՋ=?E8gkS|rܚ\4U89#s/fh+ř{{Opͯ}.^
?~PD#GLK 7;iDV;
DER@pqLrwܷ\6ȹ>uM]w|lUӏ3!<BĿ> E!${͇']Tȷ%KPY*svnXT)9xVzy~~{tpɩvx*/8|}K6znU1.u<5xҾ{Zs:sɚ~ar~r{ua,E^ђұBt^MTQpŷpkwtu0qq_p+ce[q"F<3C=[߂yzuTtmyo"3jq3u36^2<}/q,ȟn0rw2|UFW۰r|=[u"}5c+qv62 l_35ĹHPO <l:әxe?RĻ7Xeؿr=``BXx~XZVՉ6}j+{#3˃iR&P.r΄YBb}BxVNv.(˟/gxP,$bAvaMh:$QTضOrST][xy!8WVP2TjJ$1+W:x\PH"m"9Ab)&VQ~W*[/,ڱ5ү%wƄIN'zlŇ۸%d߃S*ņBFGR^FQJmHk1MC (QT1.yuG7>ns'TfiymsaA&=S>j"+IXa bCCKxEZ*îE2X^+T %q?mBDD+uvbd&%f)f4g]T{iI~0+X*á?ku -M`ۚ[jGfaB;RX -F-o;X1Aj,)GDJÑ.qW[F$yt%RCZqw+hfh7#H~)X#9J>9nRl4_d~`FeHbDK2RnE L,@颜G
=bOEf
8@&ԩ
rOtDHJ?-U$@p)-J8q)&q++erH٫cD--n!f>W#p+yzO=d'9\17`_N$Hw[@I5+xUk*UXsIGOƗAc.7+bSeN%m&k'!36_j!×_+q>L503"F2*$4ă.:Vi$)NrlsZ|bH%Z jJHCm$RaxhCD̛X[p$&
-yGSQj?k\:LJnf\'j$$張j Lv( o0/8"Hơ2-k}-ͦavMsLHẇW m{}{Rrz6|
O#7s%/Ż){1u!ן7iFGiMM/@&feF2噛զv2AokngCvތ}g"8%8 o]he:xSD8zF7NTm2Ȳ؝F:Wnзw/oo_
.;
cDE`LX'J/'n*?Co=/+Tu(P'`
_~+m
/n
n_GufӴ֯{3_?vzsוpӟ__7
\
$7ǿ-ei>8:?~9B,_Z7g{5B'o>i^ȿ7(։8%!a5U孻d/̫a#)_"X:?s!nd;NzyO|M̸;n|j|M|4+tз^}~weVҵ7oGJׄ={/+-^e{pZtkbHVL~ |~{w]uoNK~~~M_~oxBwG/'q=%_f~%~5 e)~EiDhrs_[cQZPe2~{GTO}<w_`w!_HW+>wXSK"%)>Rv~ _oߦ6qoYR)r|_?
_'ܵz}ט=Bt^JUߊ?tYaB|C9P:dd2ꀯOC&2]"8ZNC<8P&d9[3d\C)bdY[y3e1)zm2#`g`L7Z_%
VWBbMy(`>cY^9BG0>os}l_
(/y}8>x?n.CKkB7l_<5»cdFA3B(>oYBke<дyJLEWguw;t
bVχu}[tLo7wzyׄ;V5V
cyk2tb2a%Ɛ9{ƧZ7i%tCStc)si8#wLmLdp
LA"L ȈpA<M±!ea JscGoN?}W=V|_: d@|<82}}y
qrq(
G+ߧvڄ._iM&aM+' yaᲤbz}U&