#!/bin/sh
export LC_ALL=en_US.UTF-8
# The pipefail option is now part of POSIX (POSIX.1-2024) and available in more
# and more shells. Enable it if available to make the SDK installer more robust.
(set -o pipefail 2> /dev/null) && set -o pipefail
#Make sure at least one python is installed
INIT_PYTHON=$(command -v python3 2>/dev/null )
[ -z "$INIT_PYTHON" ] && INIT_PYTHON=$(command -v python2 2>/dev/null)
[ -z "$INIT_PYTHON" ] && echo "Error: The SDK needs a python installed" && exit 1
# Remove invalid PATH elements first (maybe from a previously setup toolchain now deleted
PATH=`$INIT_PYTHON -c 'import os; print(":".join(e for e in os.environ["PATH"].split(":") if os.path.exists(e)))'`
tweakpath () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
PATH=$PATH:$1
esac
}
# Some systems don't have /usr/sbin or /sbin in the cleaned environment PATH but we make need it
# for the system's host tooling checks
tweakpath /usr/sbin
tweakpath /sbin
INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
SDK_ARCH=$(echo aarch64 | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
verlte () {
[ "$1" = "`printf "$1\n$2" | sort -V | head -n1`" ]
}
verlt() {
[ "$1" = "$2" ] && return 1 || verlte $1 $2
}
verlt `uname -r` 3.2.0
if [ $? = 0 ]; then
echo "Error: The SDK needs a kernel > 3.2.0"
exit 1
fi
if [ "$INST_ARCH" != "$SDK_ARCH" ]; then
# Allow for installation of ix86 SDK on x86_64 host
if [ "$INST_ARCH" != x86_64 -o "$SDK_ARCH" != ix86 ]; then
echo "Error: Incompatible SDK installer! Your host is $INST_ARCH and this SDK was built for $SDK_ARCH hosts."
exit 1
fi
fi
if ! xz -V > /dev/null 2>&1; then
echo "Error: xz is required for installation of this SDK, please install it first"
exit 1
fi
SDK_BUILD_PATH="/usr/local/oe-sdk-hardcoded-buildpath"
DEFAULT_INSTALL_DIR="/opt/poky/5.3.2"
SUDO_EXEC=""
EXTRA_TAR_OPTIONS=""
target_sdk_dir=""
answer=""
relocate=1
savescripts=0
verbose=0
publish=0
listcontents=0
while getopts ":yd:npDRSl" OPT; do
case $OPT in
y)
answer="Y"
;;
d)
target_sdk_dir=$OPTARG
;;
n)
prepare_buildsystem="no"
;;
p)
prepare_buildsystem="no"
publish=1
;;
D)
verbose=1
;;
R)
relocate=0
savescripts=1
;;
S)
savescripts=1
;;
l)
listcontents=1
;;
*)
echo "Usage: $(basename "$0") [-y] [-d
]"
echo " -y Automatic yes to all prompts"
echo " -d Install the SDK to "
echo "======== Extensible SDK only options ============"
echo " -n Do not prepare the build system"
echo " -p Publish mode (implies -n)"
echo "======== Advanced DEBUGGING ONLY OPTIONS ========"
echo " -S Save relocation scripts"
echo " -R Do not relocate executables"
echo " -D use set -x to see what is going on"
echo " -l list files that will be extracted"
exit 1
;;
esac
done
payload_offset=$(($(grep -na -m1 "^MARKER:$" "$0"|cut -d':' -f1) + 1))
if [ "$listcontents" = "1" ] ; then
if [ tar.xz = "zip" ]; then
tail -n +$payload_offset "$0" > sdk.zip
if unzip -l sdk.zip;then
rm sdk.zip
else
rm sdk.zip && exit 1
fi
else
tail -n +$payload_offset "$0"| tar tvJ || exit 1
fi
exit
fi
titlestr="Extended Build tools installer version 5.3.2"
printf "%s\n" "$titlestr"
printf "%${#titlestr}s\n" | tr " " "="
if [ $verbose = 1 ] ; then
set -x
fi
# SDK_EXTENSIBLE is exposed from the SDK_PRE_INSTALL_COMMAND above
if [ "$SDK_EXTENSIBLE" = "1" ]; then
DEFAULT_INSTALL_DIR="~/poky_sdk"
fi
if [ "$target_sdk_dir" = "" ]; then
if [ "$answer" = "Y" ]; then
target_sdk_dir="$DEFAULT_INSTALL_DIR"
else
read -p "Enter target directory for SDK (default: $DEFAULT_INSTALL_DIR): " target_sdk_dir
[ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR
fi
fi
eval target_sdk_dir=$(echo "$target_sdk_dir"|sed 's/ /\\ /g')
if [ -d "$target_sdk_dir" ]; then
target_sdk_dir=$(cd "$target_sdk_dir"; pwd)
else
target_sdk_dir=$(readlink -m "$target_sdk_dir")
fi
# limit the length for target_sdk_dir, ensure the relocation behaviour in relocate_sdk.py has right result.
# This is due to ELF interpreter being set to 'a'*1024 in
# meta/recipes-core/meta/uninative-tarball.bb
if [ ${#target_sdk_dir} -gt 1024 ]; then
echo "Error: The target directory path is too long!!!"
exit 1
fi
if [ "$SDK_EXTENSIBLE" = "1" ]; then
# We're going to be running the build system, additional restrictions apply
if echo "$target_sdk_dir" | grep -q '[+\ @$]'; then
echo "The target directory path ($target_sdk_dir) contains illegal" \
"characters such as spaces, @, \$ or +. Abort!"
exit 1
fi
# The build system doesn't work well with /tmp on NFS
fs_dev_path="$target_sdk_dir"
while [ ! -d "$fs_dev_path" ] ; do
fs_dev_path=`dirname $fs_dev_path`
done
fs_dev_type=`stat -f -c '%t' "$fs_dev_path"`
if [ "$fsdevtype" = "6969" ] ; then
echo "The target directory path $target_sdk_dir is on NFS, this is not possible. Abort!"
exit 1
fi
else
if [ -n "$(echo $target_sdk_dir|grep ' ')" ]; then
echo "The target directory path ($target_sdk_dir) contains spaces. Abort!"
exit 1
fi
fi
if [ -e "$target_sdk_dir/environment-setup-none" ]; then
echo "The directory \"$target_sdk_dir\" already contains a SDK for this architecture."
printf "If you continue, existing files will be overwritten! Proceed [y/N]? "
default_answer="n"
else
printf "You are about to install the SDK to \"$target_sdk_dir\". Proceed [Y/n]? "
default_answer="y"
fi
if [ "$answer" = "" ]; then
read answer
[ "$answer" = "" ] && answer="$default_answer"
else
echo $answer
fi
if [ "$answer" != "Y" -a "$answer" != "y" ]; then
echo "Installation aborted!"
exit 1
fi
# Try to create the directory (this will not succeed if user doesn't have rights)
mkdir -p $target_sdk_dir >/dev/null 2>&1
# if don't have the right to access dir, gain by sudo
if [ ! -x $target_sdk_dir -o ! -w $target_sdk_dir -o ! -r $target_sdk_dir ]; then
if [ "$SDK_EXTENSIBLE" = "1" ]; then
echo "Unable to access \"$target_sdk_dir\", will not attempt to use" \
"sudo as as extensible SDK cannot be used as root."
exit 1
fi
SUDO_EXEC=$(command -v "sudo")
if [ -z $SUDO_EXEC ]; then
echo "No command 'sudo' found, please install sudo first. Abort!"
exit 1
fi
# test sudo could gain root right
$SUDO_EXEC pwd >/dev/null 2>&1
[ $? -ne 0 ] && echo "Sorry, you are not allowed to execute as root." && exit 1
# now that we have sudo rights, create the directory
$SUDO_EXEC mkdir -p $target_sdk_dir >/dev/null 2>&1
fi
printf "Extracting SDK..."
if [ tar.xz = "zip" ]; then
if [ -z "$(command -v unzip)" ]; then
echo "Aborted, unzip is required to extract the SDK archive, please make sure it's installed on your system!"
exit 1
fi
tail -n +$payload_offset "$0" > sdk.zip
if $SUDO_EXEC unzip $EXTRA_TAR_OPTIONS sdk.zip -d $target_sdk_dir;then
rm sdk.zip
else
rm sdk.zip && exit 1
fi
elif [ tar.xz = "tar.zst" ]; then
if [ -z "$(command -v zstd)" ]; then
echo "Aborted, zstd is required to extract the SDK archive, please make sure it's installed on your system!"
exit 1
fi
tail -n +$payload_offset "$0"| zstd -T0 -dc | $SUDO_EXEC tar mx -C $target_sdk_dir --checkpoint=.2500 $EXTRA_TAR_OPTIONS || exit 1
else
if [ -z "$(command -v xz)" ]; then
echo "Aborted, xz is required to extract the SDK archive, please make sure it's installed on your system!"
exit 1
fi
tail -n +$payload_offset "$0"| $SUDO_EXEC tar mxJ -C $target_sdk_dir --checkpoint=.2500 $EXTRA_TAR_OPTIONS || exit 1
fi
echo "done"
printf "Setting it up..."
# fix environment paths
real_env_setup_script=""
for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do
if grep -q 'OECORE_NATIVE_SYSROOT=' $env_setup_script; then
# Handle custom env setup scripts that are only named
# environment-setup-* so that they have relocation
# applied - what we want beyond here is the main one
# rather than the one that simply sorts last
real_env_setup_script="$env_setup_script"
fi
$SUDO_EXEC sed -e "s:/usr/local/oe-sdk-hardcoded-buildpath:$target_sdk_dir:g" -i $env_setup_script
done
if [ -n "$real_env_setup_script" ] ; then
env_setup_script="$real_env_setup_script"
fi
for cmd in xargs file; do
if ! command -v $cmd > /dev/null 2>&1; then
echo "The command '$cmd' is required by the relocation script, please install it first. Abort!"
exit 1
fi
done
# fix dynamic loader paths in all ELF SDK binaries
# allow symlinks to be accessed via the find command too
native_sysroot=$($SUDO_EXEC cat $env_setup_script |grep 'OECORE_NATIVE_SYSROOT='|cut -d'=' -f2|tr -d '"')
dl_paths=$($SUDO_EXEC find $native_sysroot/lib*/ -maxdepth 1 -name "ld-linux*")
if [ "$dl_paths" = "" ] ; then
echo "SDK could not be set up. Relocate script unable to find ld-linux.so. Abort!"
exit 1
fi
executable_files=$($SUDO_EXEC find $native_sysroot -type f \
\( -perm -0100 -o -perm -0010 -o -perm -0001 \) -printf "'%h/%f' ")
if [ "x$executable_files" = "x" ]; then
echo "SDK relocate failed, could not get executalbe files"
exit 1
fi
tdir=`mktemp -d`
if [ x$tdir = x ] ; then
echo "SDK relocate failed, could not create a temporary directory"
exit 1
fi
cat <> $tdir/relocate_sdk.sh
#!/bin/sh
for py in python python2 python3
do
PYTHON=\`which \${py} 2>/dev/null\`
if [ \$? -eq 0 ]; then
break;
fi
done
if [ x\${PYTHON} = "x" ]; then
echo "SDK could not be relocated. No python found."
exit 1
fi
for dl_path in \$(echo "$dl_paths"); do
\${PYTHON} ${env_setup_script%/*}/relocate_sdk.py $target_sdk_dir \$dl_path $executable_files
done
EOF
$SUDO_EXEC mv $tdir/relocate_sdk.sh ${env_setup_script%/*}/relocate_sdk.sh
$SUDO_EXEC chmod 755 ${env_setup_script%/*}/relocate_sdk.sh
rm -rf $tdir
if [ $relocate = 1 ] ; then
$SUDO_EXEC ${env_setup_script%/*}/relocate_sdk.sh
if [ $? -ne 0 ]; then
echo "SDK could not be set up. Relocate script failed. Abort!"
exit 1
fi
fi
# replace /usr/local/oe-sdk-hardcoded-buildpath with the new prefix in all text files: configs/scripts/etc.
# replace the host perl with SDK perl.
for replace in "$target_sdk_dir -maxdepth 1" "$native_sysroot"; do
$SUDO_EXEC find $replace -type f
done | xargs -d '\n' -n100 file | \
awk -F': ' '{if (match($2, ".*(ASCII|script|source).*text")) {printf "\"%s\"\n", $1}}' | \
grep -Fv -e "$target_sdk_dir/environment-setup-" \
-e "$target_sdk_dir/relocate_sdk" \
-e "$target_sdk_dir/post-relocate-setup" \
-e "$target_sdk_dir/${0##*/}" | \
xargs -n100 $SUDO_EXEC sed -i \
-e "s:$SDK_BUILD_PATH:$target_sdk_dir:g" \
-e "s:^#! */usr/bin/perl.*:#! /usr/bin/env perl:g" \
-e "s: /usr/bin/perl: /usr/bin/env perl:g"
if [ $? -ne 0 ]; then
echo "Failed to replace perl. Relocate script failed. Abort!"
exit 1
fi
# change all symlinks pointing to /usr/local/oe-sdk-hardcoded-buildpath
for l in $($SUDO_EXEC find $native_sysroot -type l); do
$SUDO_EXEC ln -sfn $(readlink $l|$SUDO_EXEC sed -e "s:$SDK_BUILD_PATH:$target_sdk_dir:") $l
if [ $? -ne 0 ]; then
echo "Failed to setup symlinks. Relocate script failed. Abort!"
exit 1
fi
done
echo done
# delete the relocating script, so that user is forced to re-run the installer
# if he/she wants another location for the sdk
if [ $savescripts = 0 ] ; then
$SUDO_EXEC rm -f ${env_setup_script%/*}/relocate_sdk.py ${env_setup_script%/*}/relocate_sdk.sh
fi
# Execute post-relocation script
post_relocate="$target_sdk_dir/post-relocate-setup.sh"
if [ -e "$post_relocate" ]; then
$SUDO_EXEC sed -e "s:/usr/local/oe-sdk-hardcoded-buildpath:$target_sdk_dir:g" -i $post_relocate
$SUDO_EXEC /bin/sh $post_relocate "$target_sdk_dir" "/usr/local/oe-sdk-hardcoded-buildpath"
if [ $? -ne 0 ]; then
echo "Executing $post_relocate failed"
exit 1
fi
$SUDO_EXEC rm -f $post_relocate
fi
echo "SDK has been successfully set up and is ready to be used."
echo "Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g."
for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do
echo " \$ . $env_setup_script"
done
exit 0
MARKER:
ý7zXZ æÖ´FÀÓ¼û€€€`! ÛóÁÕã‹Éð] ¼}•ÀJ>yÂÌ&£O‘DF@�e�[0}ßÜl¢w–L… €²‰ÞñÜ]‡>û“ŽÛ)_`I⻥ŽË`ñ[5ñœh09.‹p¸â´“ïRs”˜(ÍRo훦Bo9æ½äòfß4ÃVƈ.�pûʸV1J‡™åïü
&BCœò!Ï…}@Ììi¬õÿdl³Ùçh‡A 4Áló«Ÿ£O0W–ÙæZ·#Geï†�»¢±Ž!s�ç¾ãqòz…ÿ‡>O¨äÙåBrÉyÆL‘'¿ë ]y D*;<Šÿ`œ4ôÚïYn—ê¡ÐS[,Ö�E²Â=,:¥Ù[’¹q.æœ�ôá¡d
RDš…Ÿ£•–õuŸNìÀ³•Cí�¿ÃÍ7„'2#ÚQ逇Sàë©b99”7=ÕMt>"ÑÑÉmp^Á+SéˆJ£`(;èʹð†êÒS2GK›‰oXKŽ¡¤¿›°ü<RˆzŠ‚ÔÏ$£3¿úâC�¶ X?PñTÓ@sõ
k厕âçp:‘fxÐk0¥&J»ÜŠA©ËÀ®c@æ°×&÷yxJÍ*ÉeQ·2ZŸÚðŽ”"6n줚™E'¾&åOsßül½áå‡n^“P¢Ø{³^%p†faPlޏ+ÀÂ�ðŠü>ýnÉ÷ÐèÒ°ÎrÑõÄ
ó–>è‚´ÓMÎÝkÑú¨O…ôX8MÑ_r›H�.‡�Ë¢›«¶C¥YRJë[ìsç¥p¼q¦òöÎzr9TZSWéC¿Ñ?’Á’Iù°ÖðMvSõl%ÖPD;óîÄt[JÇÈHùu�`x<Ò¯|Zu…úés;G�®�šGßS±‰�Š”F¡ŸÇ¡¯>|?€Û<ø].#/ãdé>õê÷ºH¢,
JZ™g7ܤçtAg{ ªl…ƒöÍ•ÞFÄSëþ†ØAIAÙx|ÿYQ™'Ìüx±Ë ¦ eW¢BVíMÔ=ѸPbfZËÖ¹<䯪ɋq>ï[W? Qs/ÌâK?úó‡0Pñ ÔÃ%Ç$ór§d¯Ÿ®µWµ�¥·ëSÛE¸„J܃gÄòTä,›E $î^�]ÎvaH�ïñ¤wXôiâKïîŒ�éCƒª¡öòWî×9õ oP€w®Z5Îl!ýÚ6ìipÝvÒ/Hp¸ -ËA÷Û\ë;ñ_ª<Ð ÖÏ”¢â1“ݸÑáãBd¼Üxyª±˜=�xWêÆâÜë�b×eeKc€÷qx¼• ‘¶¿\†ùˆq°2vôVtjÕ’‹®äjáÜ)×þ öõ¡?1›>vüI W±×&‘Ú’¯Š±Ón½/lÁ[ÊÀ¢îÍÎÍñ Ja5ƒ‘Î é?žŠÅ6é©:4·9ˆÅaÀ$Žk©àÌb”õp9l´lX óß-ÛDùƒóÀeCÛä& ;�èsÒëB´Í]´–äña%‡9Î}Δ:¨dŒz7 ε—w»ç¿6„w«¼
V«D—J+’ 0ÐôqüžR†à›Nb…‹ ?ÛVçIHæ@ÝF3¹OØfb—')ó*jbnˆ…#ÊŸtÁÝÇ5e¸bR5$„®5‚y 9$æ èXÃ"‚Éñ£ÿ%:ëª}´s¶žqý>,“Þ€c1@�6n=�º‘!‹ø›ÇÁiSÞ…ØRl�£ ´Ó¸#dc¡68uq®„?'û28^¿]?ÉÖ¤<¿à”6œ™;ÓyQ¬6�@8âJùÄ^ÂÂü8q®·Abx.€�þ�ƒEËbo/¡ÖÔÑ ¤ÍÖrY
±«LBNë¶@×Å–E~Õlp‰}+H={IëAÞ�™Ì ¬¥xƒO½²iIO0Oz&�V]›ím°B÷מ«@«Ó3áÁ¡Š§Ë ,¯’}óøÑpƃá¹#᳌vWšhXm˜¯W&<ž&Oi*
º¸öE$-çÅö<€Jö*?¡ÜTÌTØ%)ÎçÌï_†€gúÇÐ…UU#„�ŸœQF=>@¬Ü ÎC>{PEìP8ô!:Tïëbè9ËçWÙ$DK¤ ¨Ï™Ûé³¢` €Ì‚"Ø ‡�ÏHŽíU0)°]œEf¤T
q“ܬ
Ígô�î*RN„íbhH�@ù,>82Yý@ZÉ¿3÷ÓQø)?‘õF HؼÊÿ˜ÖÙ@®ô†ð¡‘Ú|!÷+3—’ÀÜ4˜Ë�<(1+ü¼TfpõDNx1ƒ×½dô/¿¼/\ÅñtfÕ×¢"<¤EìÈ€U¼…=úõ96ìæ‰²X':t Vï>EœðGÒïêoã�ðÜGMFc-+%Š�±À€ÐqÏYHÎo¸ùØHû¡ßíŸ)Ü@¿4Tÿ±e+”fì+2µ:‡¼�t—¼\¬S]BõÏôäÔ5í\"Ú"(¼¡ÔQVì6#Áá'"uä+AïÄ]Z„Ö8§6 ÿIÔT̺ÕÐÔ®Av
Ê#¼¥.1zäp¿¹±ï©.žj¯¿?9Êy½.†²CP–m'çXÀéí×’æÎý0Ud„‚wN†„B2ï\Wøþ,=ÕµÏ-©”çkXž@[çP“�ŒÕKäÛS’ÊÂyhz·\Éþ¦ñÕ¶1…ß:K³=ŽJN¹…Àžw°qg‡²²Éú)û�¼YVÿ’ç];š�r1žo�Œ›ÿ•Ð�Ñ3…ÚÙ¶ (v©Ð�¦V`K—ïrnïÄl&ƒûY¢‹"Éä²;�
‘Ï:¬šì'ÇÓ=£ã\Å^AæC’Žº˜Æ`›
¢]_^@›Ñô«±YJÞuËeíËHIöïØ›ý!êzgÒøO«áÝÖ×ÅfvZl†GEÂÛTÙ(aÚœ8Á¢“Ç{Ž�ÅBØ2DVþ\y¶êïyÓŠ‚ìý¹P.G=¬l8>‹Pš à‚ΫHýkçž ÅÌlJãÐ>dÛòÍÒÖ⃰õË3ßifÃlå_ƒ#€ÜT/ B`}‹®ãœÎJ¨Ì¦ójHfÚH”#¬`åâb‹<�=t•&‘´Ì(ù쪰ÍÐmTòÚ„§(ë�n’i—øvÛîì¹´ÈðÒ�¨3ì¼sMEPä5>'@Lµg{§ÍP9 ,‚ˆüܜήhÝÈ~Ø´»CíÌô]±äPŽ¢©+oÞôû8\ÒïIç4EøãEóãÁ=žÔ ¹1ã¼á_Ƙ8E›îàꇮ_¯Yi/�}÷ýÍ‹Î!ô_ۨݞ¡\&yêÔ¨Ô¬×MÃ(9h¥�2&û”Ä6”P•žÞæ¢�<–‚%Wƒ™´'�YlÙ‹ºå{ð¯g‡6*&¹“ßß×÷â¸¸h^Šh6s6é)z†€çKhCûư˜ZðáH›{@Vƒ„�
¯3MüÇùPPIèRuñKË� <£ÂíŒ4ÿñìž4‡ÄØ~™ªb®—j,—‚q/+ˆd�@{—‰Žˆ„NR×sS–|ña=¬-kÍÖì’|þª'ªj”á×´�)œÖ!¤�‘$2É¿è>ª0 ÷ ¸]ª²A¡ìçÐrMU·‘ Lh8g<”·[E1™xÔœƒÑ4C,&æ�8)½äžð˜/Ã,]È‘–PÏ•ç÷/ì4o ôÆ2ó.óåì@^jã5WF•ꦥ·lÓËìr¥,¥u/¦=‹6ûU‰õJxx¾#S÷f3pÕ‰m¦ÃU{x�ÔÎ1 î4�““%Ü$Ÿ5éÀÙ0V
¼›•Ð’æz§Æ®�v«¡
Ä2ü'¾
¹œÝrCŒ¯çp�;–f«ë(F‡¹JÌUÂz…¯MÙw¬kÀÛOîŒ$bðIµe˜
`¥,û=,g˜“Õ¤Æ*\c‡´™’ZZ²º»šº¯ìÀYa¾ÉmïKзß|/A{o™¸
g#?/+õç5–ĘÒÛ!|NÞÕ/+³¨SÑgëa}Õ”P›ö}Ð^Ã¥KO“-@!_^4ÏfGË?H̹)gH3ÛGA‚ϺÒb
Å ¤�ׂêëHø›>z�Šy©mEOä3Êb}Zƒ8”¿sƒþÛÚÝÛqPE+r<æËŽnN¿3¼ŸÞpÈŒoI,¡Ì%x_Ð,qÝ�]
ý¤Î4öèø…½²ãåôÐýµN”Â…]�Ê_spfþåTÕ�9Ïrž²ÊÊ,r[Œ«æ@ËÊ$TÍ®Qv'ó}›ð–Ø‹j4Sò‰%{-´¨)qR“Bh„ðƒàéÅUÖ×é
k„�}U{~íê3žf&´ñ”¸ó!ÕrÇ•«Š%F«=?k„�C3ˆïéô:�•-æÎCW�‚Ð5QËÇg7P�i]QQÞû‰n•‡®¹¦6Ôká*×Ú袲}èÿ÷åÆYMÌ,jŠûŠÞ4 mœï~LÒ"‡Ð×C
(i؈êˆJ!Ô«ÊNVŽ:S–dT[^qyQR°µ~¿ Š.OJÐᓆHǺžþæ2S‰#ÎLÇñ“jÁu§“œSØ»çê'þ�gK.Ù–\!,ž»iÓ¡�ZÌtöè¹qÒææ©1ð >6úÀ��¯Öž+å$í¬bÐ\x€ŸžA0 Î/L@š-AÍ¡<÷PAe
ð»$•Oc¬ßÑþŒò»†%¸ôúä(=½Z›»V9-à”‚k×úƒ è§9®¤~¤N9Ø%I‚‹ùò$W{N5
¼&OåæßÐõ6ZÍÑÖ#\M=n†‚èh¼h#ÌVfÈAHç®dwúcžÃ³
(;GB„þBÁEèû]‰{óžs‡
pM³þȨÕ�bko§§—ÕI+�¸™°n\JóEZäpœÑ:±L‰ªc0�nŽ0y,$oF3Î
Î?h?™ìí‡.ê×ùe¨¾f×-“Œ†×sì4G—IO=:µCøN{ذ/eˆÅçº-"'^þ™ ¹6Œ¹íZÞ}Uˆ�2�>Ê�¤Ù‚WëÞš¥0
PJ�Xû¶‘¼G°*S$’|ÔFî73ÝþÙë6þMõÉK…pØý„j’%„äUL7ü_?ÓC••›eE¿çà´„ëa´†1+Ü}iƒ“ö^,«*FTÍp툄:¾s‰ý‡r¶ÒåÃM†%ôLßðtsÕ±[g
ÍA˜‡Ô»—Û²OŸcvlÁ¨Êå+.™"QªŠ0سRf‰Œ2*öâñc±ªq{1 æ”ÔQ:ÐîÝ’^tÖ>‡›n4ºW@QúÿÖÿU#ŸÔ#„@ưÆNßEí^à8±2†ÍCǰVâ[Ž«r†x«½·×a©©_òjªåt°™¯$‰r{ª<Ûç³6gê G=��ð�1sw´¼f®²Æ^=Ž0*ûNÀÛÌ}¢PÌ¡°h§YÀÜ/$×\dr7¯¯AŸ·D}—‚ì—!zL{)�wZ[QÄid}ò´&•‚ÌGQº¤&ú\¸-¸Ñeya>ŸÔ}):ìFpjé ²N-b!iä¿Á÷ò9RÆ*ì‰â£LžûS¶‘Iv/¤ý®ô?ËnÌp_ajªIµÐ�;�Â� BŽªnçÚLÜZò�ô+êj’:^¬�–ÞŒ¸`OhÝŒšÌ{�V`‚‹÷ÕcÅtª"(öyiÞµµN¬¸s0ž
“XT˜¥êbÿÓnyÒ£yÂç”.�çt¾,@ñbhö9äÖ°z†ð-
ƒI„(_‡r(·ÛPrÊéŠ ¿ÇòùÒ³LÙÆ’�\«4Âë{¹BO¯KíÁCÉ$ãÉïê¡ìP�ÂØj”JUØ‹§î^c=š$Úäc¶ Û*‹$åY¨�p~ûìiôm°<$ˆT‰ÐPùÈ8€DK‹ÁÊTõÁ8ï3kÚ^féPÑEmä“• Ô4Vï´º{(3[ƒÚ ¤Ù¥Yôž;År&1�‚
Ô„þ°¾Ë Ÿ7¶\ ¡Mˆ_Cô˜%�ZZÏŒö�F„U:¾–ñé~ö„7Ä%ÕL¾�ÑÞQ[æ‹`<:óáˆÎ¦¥•óƒœnz§#$@çrÝ#|bÉzǰÏ\PÒ&Q¦ûÇÓ§ðÖèkµî'1wаÅ$ã±Thö—Úv¥žÚy&ªÛî0ôìƒH¯Â½ü+ÈáìYJ†T§¤!+©ó94d¾ìT–]–¾Õ=>ámÄŸÀˆÛ¾×®aÖk͕ɨB€"ÄOÔ½t7WÚ"lvMTµóv ñ‹Å·(ùZÐs~%`í‹Ä‚
ÚÒå´Mü+#"ñƒt÷tìzÐñßÊLÌùÕZ>>¯ø8”ëî¾c$0ùsÓÀ©ŸS?mE× wå¾P‰û;gŠCÜM˜ÅF`Ͳ2´2¹}a;Dˆ¯e"Ž˜Yç~õÛñÊ¢ço¡½˜2×
PšEíÑNÁÜ쎔.gõêç½VU—°EIøÄ-O¤ur‘³xW^è7äMòóßYa<
á+
ƒ ñ6èË„X NõÃ}—N{£W²*úoÆràE�Õë�CXù�5@Ë&µGz]|Ïß6Èd>Mƒlë®.Þª¨,E5¾!ì
^ÿÛã€ñƒ¡å;mLÍ3
‡k~9I¦íç'ƒ�G¥Œ€˜ÏÄ4¡�ô‡Gƒ`CœÁé{bP0RŒ3¦ËgV
üÕíÊÐɦ*®â�æ>8¢3¦Æ¾+òvh Y¤ÌÕ„IŒ@™ñàãZm53®@ñˆ°ÚßÛÞÜÖˆÓ«Êm5ÝËÚì3Þ‰÷$šû[b`XˆlþRb…àG¨fi¶%Q>.áÕÅfW¾'¡Ó~]Ä4ª±u3
ž×Òºš–$‹†²]ªÃîògaVµìf¹P˲Jt3~C§RÛúÚ¤¤=Ð…µ€=ReÜ[rî9*,pßÈ•Æk
¶êï±Ó*ð϶´!�ŒPcaE_8QL<–‘
e[ÓG/€öþ+où` z6]¹ëZ´LD¶q¢=?°ÂÚŽ¯UªÀ5-u˜7d@(•ŸaU¤ÎÏ÷~>&}�‡åWÐ’ÔÅý¤Ýʱw„ZþkeÆ–,WÖ{�Tw¢¤åä´ÕÈҼݟѰŸZ1åÅ0H±$Yqc|“º‡ÊDÎ7MÀ\“øi
Fd?áÔƒ˜<ÅÞ0«ŽÆz:Tuá–�hÌÈÒ-íÑ÷RÖ z$±XªÅ{¥Ãõ]Ôî�§]«ÊEöÓÀ•šf?™”a¢pV¡ëªÃ»Rs'fóߘsíËçd�ÕNåO=ïe©<ÎU¶Œ}3w :]/qbªxrnÈ̦ Ê�ã®Â˜›BÒÌMR2P 9šÉÇ•2-!¶‡Ž¾4˜§Ô\A¢ø#½¥tIžãQJ##ÏnÎr@GáÔÙX‰ï³‘ý�3N>çžô¼Eæ¶]°ƒ™YwABh“ßZxIÈ"‘úNÖáØ‘µˆ±ø rßûJ®afCˆ™ë²éÀ/•·ŒÀÂ$X\Y ÓB׃ÿ~s�Ÿ ¯�CðCq5ÂÖÆÊ¨,9Ý»HÆG9ÞáW/Ñ„¨@ÜÊJ6ø¶hÊ`
ÐõÎ'ïñ¡ºVT¸ÁÔ±¢~¾4îµJ©‹C ²éÌoOµ¶†ß·1œ¤ç
úµ»úöìp£•B cѨˆÁBM[¶ç£o;%‘¸°åJñ¬¬£³ò*ä¸iß`t²Å=<ÝÛ’ä:¹b6‡erTÚc(¥3]®�³§(d�ͲE}tõX3ÇIí
ß4õaЬ3*8+Ž›}àóc=§EÝ<˜w_Q†Í‹×^OâSã1·Õ]À�ÊGójíUÓó´ÿ�µšlê«ËO:ï„2ÌNÐ µÁ�8é=gM�å‰PÜdùd‡Yè¦(lÊ’bޱ—Ï* œ£Êy.> JáAµ/B—1Å]Ñ€¾¥f‘F5ô\ƒ}Og"ý°°4Ñ(\ˆ0‘k/*õ©ÃgTJÖ�®&Ò�6Ea�øJ³9*˜�w9ZTÃôÏ3ˆGD‘r‚2>pR90E‚À‡´Z«8q‚jÓqØZÄ-q~”0�,
ž�‡ÁvPñNÎ]IÁT³lPANÃÔ’Ÿ^¢�ÊnSy¤‡¦ðrÝ÷Òx2Œ(ˆÝð9K¥P‹w²À_.…nîܘ)4°ä šÎ®äôë×ËÓMzJâsÀ6eÁ‚¹ÔŒìþØŽSlx½AüÈ4D‰k󸸇3¡wR>&ð�¢Ž+�ì
N‰ã£~‚Dï×VóGr·:Þ;¦¿ø×³™è¦4bµÖ¨aüéÞòÁ{Ö¡Š6
G5nÁ½¨>â½^¨†¤�ùU#Ðf> ÛÓ`˜“¬*�|¯a[oΡL1²Ó<.•S7û¬þ*_¾
ÛWcò