build: Always build in C++11 mode.

Change-Id: Id8c26bc5951a0b60c4f2f0868ad0167b2f0d56af
Refs: #2103
This commit is contained in:
Yingdi Yu committed 2014-11-02 16:03:47 -08:00
1 parent 31ad44cf14
commit 906c2eab6d
16 files changed
+176 -55

No files matched your search

Executable
+9
View File
@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -e
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
for i in `find "$DIR/.jenkins.d" -type f -perm +111 | sort`; do
echo "Run: $i"
$i
done
+39
View File
@@ -0,0 +1,39 @@
#!/usr/bin/env bash
set -x
set -e
cd /tmp
BUILD="no"
if [ ! -d ndn-cxx ]; then
git clone --depth 1 git://github.com/named-data/ndn-cxx
cd ndn-cxx
BUILD="yes"
else
cd ndn-cxx
INSTALLED_VERSION=`git rev-parse HEAD || echo NONE`
sudo rm -Rf latest-version
git clone --depth 1 git://github.com/named-data/ndn-cxx latest-version
cd latest-version
LATEST_VERSION=`git rev-parse HEAD || echo UNKNOWN`
cd ..
rm -Rf latest-version
if [ "$INSTALLED_VERSION" != "$LATEST_VERSION" ]; then
cd ..
sudo rm -Rf ndn-cxx
git clone --depth 1 git://github.com/named-data/ndn-cxx
cd ndn-cxx
BUILD="yes"
fi
fi
sudo rm -Rf /usr/local/include/ndn-cxx
sudo rm -f /usr/local/lib/libndn-cxx*
sudo rm -f /usr/local/lib/pkgconfig/libndn-cxx*
if [ "$BUILD" = "yes" ]; then
sudo ./waf distclean -j1 --color=yes
fi
./waf configure -j1 --color=yes --without-osx-keychain
./waf -j1 --color=yes
sudo ./waf install -j1 --color=yes
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env bash
set -x
set -e
sudo rm -Rf /usr/local/include/ChronoSync
sudo rm -f /usr/local/lib/libChronoSync*
sudo rm -f /usr/local/lib/pkgconfig/ChronoSync*
# Cleanup
sudo ./waf -j1 --color=yes distclean
# Configure/build in debug mode
./waf -j1 --color=yes configure --with-tests --debug
./waf -j1 --color=yes build
# Cleanup
sudo ./waf -j1 --color=yes distclean
# Configure/build in optimized mode without tests
./waf -j1 --color=yes configure
./waf -j1 --color=yes build
# Cleanup
sudo ./waf -j1 --color=yes distclean
# Configure/build in optimized mode with tests
./waf -j1 --color=yes configure --with-tests
./waf -j1 --color=yes build
# Install
sudo ./waf install -j1 --color=yes
sudo ldconfig || true
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -x
set -e
./build/unit-tests -l test_suite
+15
View File
@@ -0,0 +1,15 @@
# For Ubuntu platform only
language: cpp
os:
- linux
compiler:
- gcc
notifications:
email:
on_success: always
on_failure: always
before_install:
- travis_retry sudo apt-get update
- travis_retry sudo apt-get install -qq libssl-dev libprotobuf-dev protobuf-compiler libboost1.48-all-dev libcrypto++-dev libsqlite3-dev
script:
- ./.jenkins
+24 -12
View File
@@ -9,20 +9,13 @@ from waflib import Logs, Configure
def options(opt):
opt.add_option('--debug', '--with-debug', action='store_true', default=False, dest='debug',
help='''Compile in debugging mode without all optimizations (-O0)''')
opt.add_option('--with-c++11', action='store_true', default=False, dest='use_cxx11',
help='''Enable C++11 mode (experimental, may not work)''')
def configure(conf):
areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
defaultFlags = []
if conf.options.use_cxx11:
defaultFlags += ['-std=c++0x', '-std=c++11']
else:
defaultFlags += ['-std=c++03', '-Wno-variadic-macros', '-Wno-c99-extensions']
defaultFlags += ['-Wall', '-Wno-long-long', '-Wno-unneeded-internal-declaration',
'-Wno-c++11-extensions', '-Wno-nested-anon-types']
defaultFlags = ['-std=c++0x', '-std=c++11',
'-stdlib=libc++', # clang on OSX < 10.9 by default uses gcc's
# libstdc++, which is not C++11 compatible
'-Wall', '-Wno-long-long', '-Wno-nested-anon-types']
if conf.options.debug:
conf.define('_DEBUG', 1)
@@ -32,6 +25,7 @@ def configure(conf):
'-fcolor-diagnostics', # clang
'-fdiagnostics-color', # gcc >= 4.9
'-Wno-error=maybe-uninitialized', # Bug #1560
'-Wno-unneeded-internal-declaration',
]
if areCustomCxxflagsPresent:
missingFlags = [x for x in defaultFlags if x not in conf.env.CXXFLAGS]
@@ -46,12 +40,15 @@ def configure(conf):
if not areCustomCxxflagsPresent:
conf.add_supported_cxxflags(defaultFlags)
# clang on OSX < 10.9 by default uses gcc's libstdc++, which is not C++11 compatible
conf.add_supported_linkflags(['-stdlib=libc++'])
@Configure.conf
def add_supported_cxxflags(self, cxxflags):
"""
Check which cxxflags are supported by compiler and add them to env.CXXFLAGS variable
"""
self.start_msg('Checking allowed flags for c++ compiler')
self.start_msg('Checking supported CXXFLAGS')
supportedFlags = []
for flag in cxxflags:
@@ -60,3 +57,18 @@ def add_supported_cxxflags(self, cxxflags):
self.end_msg(' '.join(supportedFlags))
self.env.CXXFLAGS = supportedFlags + self.env.CXXFLAGS
@Configure.conf
def add_supported_linkflags(self, linkflags):
"""
Check which linkflags are supported by compiler and add them to env.LINKFLAGS variable
"""
self.start_msg('Checking supported LINKFLAGS')
supportedFlags = []
for flag in linkflags:
if self.check_cxx(linkflags=['-Werror', flag], mandatory=False):
supportedFlags += [flag]
self.end_msg(' '.join(supportedFlags))
self.env.LINKFLAGS = supportedFlags + self.env.LINKFLAGS
+9 -9
View File
@@ -26,15 +26,15 @@
#include "config.hpp"
#ifdef _TESTS
#define VIRTUAL_WITH_TESTS virtual
#define PUBLIC_WITH_TESTS_ELSE_PROTECTED public
#define PUBLIC_WITH_TESTS_ELSE_PRIVATE public
#define PROTECTED_WITH_TESTS_ELSE_PRIVATE protected
#define CHRONOSYNC_VIRTUAL_WITH_TESTS virtual
#define CHRONOSYNC_PUBLIC_WITH_TESTS_ELSE_PROTECTED public
#define CHRONOSYNC_PUBLIC_WITH_TESTS_ELSE_PRIVATE public
#define CHRONOSYNC_PROTECTED_WITH_TESTS_ELSE_PRIVATE protected
#else
#define VIRTUAL_WITH_TESTS
#define PUBLIC_WITH_TESTS_ELSE_PROTECTED protected
#define PUBLIC_WITH_TESTS_ELSE_PRIVATE private
#define PROTECTED_WITH_TESTS_ELSE_PRIVATE private
#define CHRONOSYNC_VIRTUAL_WITH_TESTS
#define CHRONOSYNC_PUBLIC_WITH_TESTS_ELSE_PROTECTED protected
#define CHRONOSYNC_PUBLIC_WITH_TESTS_ELSE_PRIVATE private
#define CHRONOSYNC_PROTECTED_WITH_TESTS_ELSE_PRIVATE private
#endif
#include <cstddef>
@@ -83,7 +83,7 @@ using ndn::Exclude;
using ndn::Block;
namespace tlv {
using namespace ndn::Tlv;
using namespace ndn::tlv;
}
namespace name = ndn::name;
+2 -2
View File
@@ -57,8 +57,8 @@ public:
ndn::EventId expirationEvent;
};
typedef boost::shared_ptr<UnsatisfiedInterest> UnsatisfiedInterestPtr;
typedef boost::shared_ptr<const UnsatisfiedInterest> ConstUnsatisfiedInterestPtr;
typedef shared_ptr<UnsatisfiedInterest> UnsatisfiedInterestPtr;
typedef shared_ptr<const UnsatisfiedInterest> ConstUnsatisfiedInterestPtr;
/**
* @brief Container for unsatisfied Sync Interests
+9 -2
View File
@@ -44,20 +44,27 @@ InterestTable::insert(shared_ptr<const Interest> interest,
bool doesExist = erase(digest);
UnsatisfiedInterestPtr request =
boost::make_shared<UnsatisfiedInterest>(interest, digest, isKnown);
make_shared<UnsatisfiedInterest>(interest, digest, isKnown);
time::milliseconds entryLifetime = interest->getInterestLifetime();
if (entryLifetime < time::milliseconds::zero())
entryLifetime = ndn::DEFAULT_INTEREST_LIFETIME;
request->expirationEvent =
m_scheduler.scheduleEvent(entryLifetime, ndn::bind(&InterestTable::erase, this, digest));
m_scheduler.scheduleEvent(entryLifetime,
[=] () { quiteErase(digest); });
m_table.insert(request);
return doesExist;
}
void
InterestTable::quiteErase(ndn::ConstBufferPtr digest)
{
erase(digest);
}
bool
InterestTable::erase(ndn::ConstBufferPtr digest)
{
+3
View File
@@ -82,6 +82,9 @@ public:
bool
erase(ndn::ConstBufferPtr digest);
void
quiteErase(ndn::ConstBufferPtr digest);
const_iterator
begin() const
{
+2 -2
View File
@@ -82,8 +82,8 @@ private:
mutable ndn::util::Sha256 m_digest;
};
typedef boost::shared_ptr<Leaf> LeafPtr;
typedef boost::shared_ptr<const Leaf> ConstLeafPtr;
typedef shared_ptr<Leaf> LeafPtr;
typedef shared_ptr<const Leaf> ConstLeafPtr;
std::ostream&
operator<<(std::ostream& os, const Leaf& leaf);
+3 -4
View File
@@ -57,13 +57,12 @@
#ifdef _DEBUG
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread_time.hpp>
#include <boost/thread/thread.hpp>
#include <thread>
#include <iostream>
#include <ndn-cxx/util/time.hpp>
#define _LOG_DEBUG(x) \
std::clog << boost::get_system_time() << " " << boost::this_thread::get_id() << \
std::clog << ndn::time::system_clock::now() << " " << std::this_thread::get_id() << \
" " << x << std::endl
#else // _DEBUG
+1 -1
View File
@@ -148,7 +148,7 @@ public:
std::set<Name>
getSessionNames() const;
PUBLIC_WITH_TESTS_ELSE_PRIVATE:
CHRONOSYNC_PUBLIC_WITH_TESTS_ELSE_PRIVATE:
void
printState(std::ostream& os) const;
+1 -1
View File
@@ -57,7 +57,7 @@ State::update(const Name& info, const SeqNo& seq)
SeqNo old = (*leaf)->getSeq();
m_leaves.modify(leaf,
bind(&Leaf::setSeq, _1, seq));
[=] (LeafPtr& leaf) { leaf->setSeq(seq); } );
return make_tuple(false, true, old);
}
}
+10 -10
View File
@@ -94,9 +94,9 @@ BOOST_AUTO_TEST_CASE(Container)
{
InterestContainer container;
container.insert(boost::make_shared<UnsatisfiedInterest>(interest1, digest1));
container.insert(boost::make_shared<UnsatisfiedInterest>(interest2, digest2));
container.insert(boost::make_shared<UnsatisfiedInterest>(interest3, digest3));
container.insert(make_shared<UnsatisfiedInterest>(interest1, digest1));
container.insert(make_shared<UnsatisfiedInterest>(interest2, digest2));
container.insert(make_shared<UnsatisfiedInterest>(interest3, digest3));
BOOST_CHECK_EQUAL(container.size(), 3);
BOOST_CHECK(container.find(digest3) != container.end());
@@ -139,31 +139,31 @@ BOOST_AUTO_TEST_CASE(Expire)
scheduler.scheduleEvent(ndn::time::milliseconds(50),
ndn::bind(&InterestTableFixture::insert, this,
boost::ref(table), interest1, digest1));
ndn::ref(table), interest1, digest1));
scheduler.scheduleEvent(ndn::time::milliseconds(150),
ndn::bind(&InterestTableFixture::insert, this,
boost::ref(table), interest2, digest2));
ndn::ref(table), interest2, digest2));
scheduler.scheduleEvent(ndn::time::milliseconds(150),
ndn::bind(&InterestTableFixture::insert, this,
boost::ref(table), interest3, digest3));
ndn::ref(table), interest3, digest3));
scheduler.scheduleEvent(ndn::time::milliseconds(200),
ndn::bind(&InterestTableFixture::insert, this,
boost::ref(table), interest2, digest2));
ndn::ref(table), interest2, digest2));
scheduler.scheduleEvent(ndn::time::milliseconds(220),
ndn::bind(&InterestTableFixture::check, this,
boost::ref(table), 2));
ndn::ref(table), 2));
scheduler.scheduleEvent(ndn::time::milliseconds(270),
ndn::bind(&InterestTableFixture::check, this,
boost::ref(table), 1));
ndn::ref(table), 1));
scheduler.scheduleEvent(ndn::time::milliseconds(420),
ndn::bind(&InterestTableFixture::check, this,
boost::ref(table), 0));
ndn::ref(table), 0));
scheduler.scheduleEvent(ndn::time::milliseconds(500),
ndn::bind(&InterestTableFixture::terminate, this));
Vendored
+12 -12
View File
@@ -30,14 +30,14 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
"""
import os, sys
import os, sys, inspect
VERSION="1.8.0"
REVISION="8b796c068b3476c699246f84311031f0"
VERSION="1.8.2"
REVISION="a01aa13963437a19e5d8748cf2afd71b"
INSTALL=''
C1='#.'
C2='#-'
C3='#%'
C1='#/'
C2='#.'
C3='#)'
cwd = os.getcwd()
join = os.path.join
@@ -54,8 +54,8 @@ def err(m):
print(('\033[91mError: %s\033[0m' % m))
sys.exit(1)
def unpack_wafdir(dir):
f = open(sys.argv[0],'rb')
def unpack_wafdir(dir, src):
f = open(src,'rb')
c = 'corrupt archive (%d)'
while 1:
line = f.readline()
@@ -128,8 +128,8 @@ def test(dir):
pass
def find_lib():
name = sys.argv[0]
base = os.path.dirname(os.path.abspath(name))
src = os.path.abspath(inspect.getfile(inspect.getmodule(err)))
base, name = os.path.split(src)
#devs use $WAFDIR
w=test(os.environ.get('WAFDIR', ''))
@@ -152,7 +152,7 @@ def find_lib():
if w: return w
#unpack
unpack_wafdir(dir)
unpack_wafdir(dir, src)
return dir
wafdir = find_lib()
@@ -164,5 +164,5 @@ if __name__ == '__main__':
Scripting.waf_entry_point(cwd, VERSION, wafdir)
#==>
#BZh91AY&SYZ˜"ñÿÿ¼Hÿÿÿÿÿÿÿÿÿÿÿÿ€†"¢§PÀ#%‘#% >Xaänöº#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%篬Ž6 ¾Ü�®½u{l2µ =Ú½¸ûÜ^�ê�}k³RõŠå}ÙóÜ®|æ¹¶ÛK,£»ÞòëK¯}>å…õËu¨îoeaHvÙmnØîÓ£§£×»Q{Ü÷½Õm꺮�ï7 o]so6ðÞvŠÝ¹ëÕï:#-}<öë¾÷{á×@Ô_|l¾î¶ñ5§�o¸µ3Û>»ì#%#%#%#%>„û#%#§¦ì€{>@ }óç¸K˜6³��—ÝžL½Ûíco`PtÑ£CYïv Ð¶ž…yÙÖ…±ª[GG{¯Gªq% ¡@ ‚ÚC­R•JCL¥*°#-zÑTkÖêv£¾ßv×^—Ö/M�6·¶Þ÷KÓ#%µŒ‚;:Ó©]µ¶o·ªv[ZÇÕ2¾<vúúõ÷o«o¾³•ÙÝ„¯9w>íÝ<ßw{×o³l¥µ¸ûïž_cß;wzõyîûíÅõ×hä#%ú3±�@#%]Š(룦ÙíÌï}Þòzú:Š)ï{ª%ìi(�—¹ÜôÀëEU é¨�@Ð7[¶k_N�ï¬×VÙ½Ô#.{¶·{;ß{æû{Ü…Of‹ÛÖ·±£çØ_^êùÝÐ >sN�(øÏ{+[kÞí#%ówrzß|ïUY#-Ïy^ØñÓëÝŽtÔ#.!Z;îñᙯ¯Œîzïªçm×˯›W¬û«ªl}ÏvÕî3]uõÞÕÞé÷·½Fï¶àÃÚwÝŒ÷¶>¾@µ×7·Ï3ݹ4IäzR™óÑÖ¾=e²½ê)P­ªåÜÍñžîç>Þ÷{ÖÖon¶ûÚÉ�™óëRÉkës¯¹ËÝå]åí^ì}ïT{Öù5€#-÷¶÷Ïž}ﯷy¼ðöÏ èÒ�¡CÖP#%¡]Sˆ�&•eÊ®ìÝ�«qï=zh,ÆMuµÞs¯ ¤ê«šÕ0îÔ'uWƒBìd­€#%ß{Þ<@#%&½õ˵ö¯o�½Ù÷zú‰Ï¶ûy½ïzµÝ­ŽÝƒæ‡¸¦ê»›‘:äºètøžžì÷w9ëÕm•¬]ïb!Ýp{ÎÖ÷gy>öð4ë¼ #-½Üœ:˜­yÇ»}±ÒŸ#.¾¶òíõãìï{u.ßW×}½Íî·sÅΟq»í‡ºÛ«‹Ëì{Ö÷Þ½<öúÏ3ªéît¤Ÿrî�îçO1Åá¼ÝPv±¾ðú§yñ7nÃö¯�½7cï@0}këbbª]yG¯}ÝáC`îMQ<Ø^ݹ[®÷ièõ÷ ÞÎrNë¹Ýݾ½…×g‰êîîØë“ES躥 ²¼ÁÝÕ·¯uõÐûÏ­^Ïí ‡q�Ý·®½æ÷¡ô:n÷#%Ð=æ+·œŽž÷€ ïa™z£Ýñ›wª#%}d¡[9'ßqÍ@Cݾ½c‰U­¾¶»ëκn{g½£]u8]·cERK—k›­¤K#-Ù÷¸®�}pvlô×K!®ºkÞw}Wuç¯6>÷ÊîÖæ|ôÏa¥éïg¶»8‹´k£)uÓ×o½Çvï]Ï@>½^ûjwkòë½ÚÝçeøÜšA#%  Ð#%@&&@#M€3C!õ?Q©¡é#%€#%#%Jh‚DÂ#%M ¦„ôÔSƤõ6™4Ô6I õ€#%#%4#%#% ‘@€%?ÔÈhM£Ñ”Úž™M=5�zCM¨#%õ#%Ð#%#%#%#%'ªRD#.dh§ƒJzž¦šžh˜¦F�SÔ4Ð#%Ðõ4 Ð�¡ ÓC@#%#%$ € h2hÈL ¦�14ÚG¥0i4i£Fš#%ÐÐIåPI¨ˆ #%šdSÐi2z(Ÿ¦Tô50ÄcM2=HÐ20 F&Oÿ¯žÿfÛjíÐO÷r\­ÝÚ¹´Z×u?Wm©]ˆ¦ß¶§@™!$V£+f{ÕV«óííÛU¯Ùü?OÍ=~jIýéX¸X!ëQŒ;Õ#‚*)LS\MeÎ82nÛÇ.¯ï>±ÿ(œø—Í!°8 ЀïU m­ûóÍÝ¿˜™ÛžW #.±Œ*ˆ›{ºyª§ˆ› W‹¨©‰|\,båðg3¨#%š}ûèú!Â*0(Ȱ‡®ÛjUFµmÖ¢Ûf`$@º¨@DyÁH¢§0 Ð‚#%Š!!”A±Rt¢ e€ŠD‰j‘Y�Ñ#%S¤X@��#. &bXÌÓ£©Y¢$¥H¥Œ&JlÅ5¤¨je5BBi-JŠÉA„FP$Íe#-d¤¬Ê±„¡cBi…(64‘“b-¢)%-)–¢A‚Yi-$‚`Ê"FÑmIª ib–&¤b‚’QM"F&™±hÔj›V•m”’²X”&I’*-@J¦ÛF&lÍ4ÕL²Õ*[5I%HiL’I¨¶djFkE¤#dÓ(,IF‹&¤‚ÑJU&±‰‚ )1)±C©›„#%R!ŒÌ@Ca’dJ"L,›d�#KŒšRDÈB’“-"AQ)IjÔ&Ô#-"¡‹#.(¥ `F™’$Ò%±1±²e6ŠI-")"h1dRFIRŠ)™Ò4ŒM†$Â@¦ÄT–6‰ ²#.FJ*6"#-I�¥* $Ô”RF@™™š@“2fb“Y”¡¡,b$"©6�$“FÁ‰2bÊSÍDSB�¢¤€J&ƒH“6¥–e(Á‰Hi4²Mšf4¥ŠM™�ed™‰$U#%ÍK$*$²Í‚–fˆÚ2†ÉD%6h’š´ÐhbiŒi‚5&JI ¦JY¨ÒYR¢ÅQI¨‰‰3” ¦�#%ÂHÉ#-0Ñ$J#-5¡¨f²ÌÒ,™#.R´›&5’-I‰&’�%#-"Ø6,L ™b†ÈšLÍI£A)°ÌÍ$2#-Lš-,bÍMŠJQf“Q)bL²*HÙM1 h� Å&HÃ$Ì6L#-&eC!„VI•„6‚ɲP$¢L¢B)¦‚2™HË‚ÒR©³Xب„È&D¤ˆ­¶4“5‘CI�$†64†H bj5”ŒU$–“#3E&Y$ÂÍ"#Q¤ÈFTf�Ùj¦µ´–Æ2TÐ-%ÊHM’”LQl–‹,�1”Í4Ù)J-LŒlÛ�#.›1”ŒÐ2Í-~•n��²´†BYFBkÔV-&Ƅ̨¦‘FÉh*˜´ª‘6#-,FSIÊŒÒT2Ô%¨²)¬˜Ôe•EabdÌjZi±#.‹ ̦ÛMdJ²²*–ÃXÓeYQ”ªÅ*ÒZB³ek5)LÙ…YŠÈ‹£MJ‰-2Š#,Q±XØ©š-“clU™l[hH©(ÛcQ°Y(Ö"%Q�¨4UŠ¢¡š�µˆJÉ#."´Øe4”R ¢Œ3R‰M©Tj6I6ŠÈXÕ4™[VmZh#E„[FË"fÍdI�ššP¤™¶Ùª)³54©–Ò©i6©B¬©”¤Úšj-,Š*)lÖfd’²Å¤¶–Ód(µ4�‚@Í�%Å2†! AL“•£jLL–,ÊV-)4بəA¤¥ (¤S*"Å ´²Ò Fš)’›ÊlÐÆ‰ B¢Å™!�š6jK‹&“,Ò`Ù#-D”4‘`„Ò&ÄERQ‘ Ò4Ê-L´Ò)+a3` É¬L1³-B)S4RE")´d,Í£E��Š4#.ˆÒZP‘IƒhRËA„‘&6˜M%#)°d¶33Rˆ’Mš”dÛcJ¦f,66R“dm&QelQ!˜Y(”I6RK Q¨ÊFÌÒ!*k#6*#.ÌÙh¨ÄؤÓQ2ÄÑS-©e-É’ŒÙ ˜–"cBi”h£#YI²R†&"jI-*„ب¨ÑFªi0É3D”šE¢˜#%ØÉ%‹Ùi¤’¤ *5’a¤¥™#-�­6´j-²ABe…h" "²kc ()5JQ5b±”ÌІÅI%L*J$´l†ˆ²ÊÕ*š‹F1%dÔSKRSAD•,’¤¥)J6ÑUm”Š,”i*Œ%%‹dÒTXÚÙ˜¦Q³M`ª†’fÉ›ˆ„,ZfJ£“¥2ÄÚ¦ˆ¦fSYˆ¥-F±¬�†Ã$Æ€Š#)Th¬É,l€h"ŠL"J´ ¢Òš¦VJ�¬V6Ó1¬–²@VŠ¤Ô”Q˜¥dfŠ4Ј„Ť¦#-2Ø‚‹FÅ´lR›m% Ú ¬`2j*$+DͲËQ±´Xµ‰$¶¥²ÈieaTbÑLØÛf¤¥eFŠPÒl©±´†Ñ¬›I¶J6Émš”Ì£I´hR**J4Z6ÖÙµi£5 &ˆ“fQhØÚ A¤Ù¬ÚŠLS*ÒQb´m±h¶Ú6¨e’µ‚-SR²Ø›)bE¤˜Á²°²”Y#f•A3D’e$ȈZ’´ËTÇÇý¥^–þ?Ƚ/å_ë=‘°µXI¬×6ì%%¤ÿmþM™H¸a”ÈŽÕQ&%Ra?±?ÛE2áÿøhùJPØ$\AÈŸöçQ”lþ¬�^ÙéH¿IÆCtP¶ Cd£J«Jê’MÒÄPwfB¥Ïøª~�°‚ÔµÝüµáøÙeßñ¥$É¡‹»*˜¥�ÕÜ…ˆˆò;Hˆhž‹£¸—Yøïf£S�¸˜OU¸ÏÝ!SºqÖÅhâcQ cŒ<|V˜÷j(ä6Ú¢ZUUYe\Dorõ3YQæÉKL§Dk@ªî†Ö•’¨ÊafRG%5æØ2¨)‘TQ‰i–[5¢‚¯‚½ž�òzõ7¦ÞÂæå£bÑlÁ-¾—^HóRjï~ÝåØóº¡þ/W¿�³.nRns�íç^!éÅ:EAÿ¹卯f0íTH8“äÅË–1=­e DEøÿe–NÝÕ£0´¤Mê�}(¡¨0xçR¿¿œ�VªÉ-ʄÌP`Ìõ Ý–‡&™v“_Y¯¦ÆM�+fe>� ´Ü”={\ÛýZü#¤‡®-Í8]¨"0¡ùíæó$×;¢î4W74šB’¬’lXÚ?…/ªUìµzZ•ásÉ�²&Zd‚ÅV … JEÓPÌd�÷²Á�°•íQ è0ŠV8ç‹Ê”‡‹_â6½ç¥îµu,´Ôv(Æ5ŒŒ|>w»¡– º†#-î‘VŽX‚7ªT®#-=È@n\¹&î»ï¾òb ßÛ×�ý+éw‘5_‰w·N·I²_'|�ó›S‘’˜¯ÝT�ÚŠÇì­1éOú¯L,ðU&É'}f4#-°�¬.D�¨Àn2Wò�1ž#%ÍTDDÐÆ%É…V’QøSßhhäMŸÖퟧ:™ñˆbPJ2!׉Že„us#-¥QLq½s±æjœ)þÝj•Ï…_6L„�oC¡#±Î¾·êC_ÂÇG”�Š€2KE?‡ Œg›„3ªP°Í=n�N¸~rˆ˜Z2í¯V6ŠÅÙªÄÝIÞXR‚Á/=/WåŠ0ôIQ:kE›5#.BÆç±—S+áÌÜϦ÷‰j@’Ò<òwóû­÷»¯aŒ™¦É1šü�b)àföQ0æë‹2—Ї ”¨¿úÜoÔHÎÒt‡Ü™ +m5øúR¦4d»>ÿv÷»©´Th¯ÉdÞ+œ¬j¿Uå5}Þá¢Óìêû^oöû}ßÞí}/k´G-Íkº»b"‹0a*ON\¯·×Ýöõmo&„Š[B�yV š'�… -%!&ÇÓDf�@îrØÅÁxã(ß­5Ìø¸¤¶L%jÖí[‹ ¤P9 ¤Ù#.E�ípch² pô»|u#-ÿ<p°#+_;žÚXþM–~ Æ.¥Ý;§š’‰ _ý#r®¦ùK©!M(Áa·K±dÜd)7ª ­pF´­–ˆå¥ŒF�(Aî ”ÃMiM™ ™¢¥šO£#-*‰¯…Øœh°4B‘gwZ² ¤1T¤Zëaɼ•H¤xU%»Däâ WpòÄ#-Ù£&ZKª•Š(ÍJuªS«FˆoœÄ^#-"³Ç­By3GŠ×Ó…"wÕ7áRüjŽÉB|áøÝËéð©óÐ>îÇ»Àü"VéõŽÒòìøò‚?|>áH ùgW‡ØÂhEïú¥|dT=�‰pJ$R4(‚§{‹”~%vÒV �„gÚÔaÚŽn#Ó~7Göß[ïºhþß~—Ñ¥Ù›(ã�vfþÿ¶¹3L˜¡èÐ)Ñ(üwöK§ÆZk/ê×l!€SIÁ†‡ Ñx%XÛ±¹H<xÂÉlƒײ!²³ ìË÷U.„8†Í×ôQSnkÍò£ã»ÃaxI £ËþÂv�¤�,©åÉ!ã8úñ�|öݶ|¬ÅC¾ÜI�ö¿,ecßi©3è©¢ø­“36ɾz9­¤!Q½WdÑÙíˆO‘CÝe|ä(ô¥% Æ âɳ‹ƒ)õò©0æ©_À”ejOQ`_ÀÝrtÒ4\|¼ÇcŽÇ'}Ôþvž�·äçxáp’3†ZCQçs1›síP8ú~‹MsΈÖ�…j¦nìe´ÄîªEøûê߃C–‚’’Î{¼¡ÿLine truncated
#BZh91AY&SY�ÉLt"ïÿÿÿ¼@ÿÿÿÿÿÿÿÿÿÿÿ�†¢¦x€�#)!2„Xaé\÷x¬#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)/ºúÕ=[Ý{{žÒá¯Z»må˳]9y›o�3ÏZÝ»½õ÷SÒû5Km»¶÷מ£ß4àÖLÕ—sª_^/^Ü&.ëm˜}+Üe#):z{·¡íªì÷ºìUg­•:vÚi>{×�˜×ÍÞçÁï>jWlúûí÷Ɔ»·}Ýw½öpôYÛÆÞÚîÇ>ï¯m¼Øv,¶uÈ#)#)#.#)#)yì#)ƒÉl€#È(MÛÞœÀYÆ`Ë'F]Ûg¹î¡ ƒ\ê¶#.Bí©¡I#)×Cvf(’ªR]íÒOcAT””•QZÉI#.7 mƒËmªéíÜ<z÷޽[vÎìê¬d¶hÒMyU,j¦zS/ݽ{wß};}ÛºÜ{|ûŸ^ÖY}k¼íŽó7Zö³Nì»[Vónßb¾÷s­¯WÛ¶hä#)R¦Æ¨#/¢‚{$�Q‡•›™Ü»¯3Æ€#)¡{w³%¶d‰k{Û½Ûp $UPÞg»š][i­Ž™½º'¹ÚíÎÞðÉÞ·‡[½n÷ÝæÛ·ÎßYUH’:lVÖíÔš˜×mòÝom;gps³:ÉßõOkl®õãxß{Ü÷ÚµÞÞõXZcÊžÜצ¼�J@#/U&ûÞ<™5õöó½=P®“۽Îo³¾òv}{Öw\ç{ÛÞíu=鯽ï5>÷w³×¾ÖiÛ{º­gº»Þì}ëÜ oJíâ®yžíÅv;·‘ëÛ6÷¼jöª´¥¼u¶Îí¾ª•B’n7nï}Ís³ïžï]{çÝÙïI^ÞÎ>ÙãåÛ4¸·Ý£]´wvÙ]Ëžî6½ç]½wÓ0zOžó{ÌöoƒÛƒtÜÓ€P¡P ” Øwf²i»r޶#/¹u´œçFæù=öò<º—Uó½ç•ÛÒ¥8­¬Á¥—¶ÆJ�¾,¶Þ|sß4PSß\èT#)‡ÞÍîå}ÝÞw¾>ûÛ\àxï¾îñ{�D½Ø[®�ºÓ›ïmµowbn£#/6Ï^—»µÙÉ«�ɽ¾ïuWÑ_{®ó>öñ2}ëáô€Õëï®ïW¯Q×»Ð=öo©_}»°zµ»j[}híîç½÷}öíÝ.·ºÜ÷[Çw®u·´ßl6µçw9á{[NOrÙµäﶪÒ6önæPO¬Ó•,ë}x>&ƒ ÓCê¼5[Œ´ØÕ÷lóž{ÞÁð¢@iñ#.:ù¦�}s{¸>ÊvçNÞös›Ó›Å[Ÿqœ«ßmn÷w½ÙõõióÎ7½'ßX}÷»A·\¥Ë)¥ ¢ûío}bù÷T‰õ½€Å„)õ¡îÈè)¥³%Ú³Þó»°6Nîwž¬i¼û[ï¼à2BÍT+g!÷°ãå Ó‡·¬vîw4=.s›¥soº�YÝÖÝé½´(ªH½vâv‹·*�Ù÷›šìçÓݬ«¯s{¬®ûÙïww¯¾õÞ;_ëßN¥_z·fçÞÚ÷n©Nœ�;ÞÝäS½ŠÓªÕé^¾Þ2Ýv{ÞíÉ÷šûìKQm\¯#½zÝä݃êø´%4B#) #)#) É£@#)&�L&¦ž©£O(PÓMSÐÔšši�)�'¦�5£M©é=!§¨hz�¡ê#)#)#)#)#) ˆ‚#)"b2#jTü§µSÍÒ™êi”zFÔò�S ¨#)È€#)#)Iê”’ ªj~Tª=¥6§¦¡§©£Ò#)#)#)#)#)=@�#)#)#)‘#)� ¦šM#)M`M&OL�žQ²ž“iP#)#)#)&¢ €€#@&™4 éSõOh¦Ô�eêÕzž¦›Ò›P#)#)#)Ð#)#)û|Ûú¶ÛWtI?³’wV5sZÍßom©»%‰£á¶Ôå)) ŠZ$‹‚¢#){V@åöüòÎX?æì¿eB?8ý0LØã©‡š.$…5dÆ •ˆƒŒÅ3d�‚o�ç÷ŸAÿ´“ŸRù¤ :‚]X�A#)»/¾_ Ý„sE¾M̺Ôq·ª¥ŒŽÒ8æœÈó+¹IŽ0zË|-8Þ]Y‰ÔÁt>±q/eBœJµJ”ÄâqQa³[à’;Æöu8@!ÿÄð‹¿äÈx±!4…(ÒDa†*„¨¥"CJˆÌ�Jƒ@Ä"›*„ˆ® ‰ÞI#)iD(ÞE(#¢UH€û! °¤ª8šÂ•¤#/AÔ  )æUÛ%€P`ÌJC3LH„È…Í£fh‰)©±‘2RŒÅ-¤¨je,P4$&�©Q´”DJ™¢l¡l–JÌ ‹ L)A±¤Œ›hÅI)iª$%–’5$‚`Ê"F¶“T,šliblŒPRJ)¤HÄÓ6-�SU¦ª¥$ÖXŒ“$j6‚𥫙³4¦©,™fª%M±1³T’T†™’I5Ì�HÍhÔ„lšf‚‰(Ñd´�Z)J¤†lb`…‚‰šLM6(`›)°L ‘ f*d™ˆ“ %²@‘KŠÉdI�„)%%6)2AQ)Iµ j 1¨lІ,L(¢”��%iDÆ,LTl™M¢’e¤‘4²4‘’T¢Šf¤*iM†$Â@¦ÄjK#.›D�l‚‘&**"#/É�¦l`’MIE$dBDÌˆÍ I™31’³)�¡,b$"HJ“a I4ÒÐbLš,¥0lÚ#M"�¢¤€J3A¤I›RÍ,¥”†“K$Ù¦Q 5,RY‘±£+$ÌI"ŠÀ3c,�¨’È*#/Yš1´YCd£2›4IKZl„Êc $jL”™…2RÍF’Ê•L ¢“QdA%() FHi‘¤H4– 5¤Z¬„34‹&aJB›I²E²E£I2I(J,”4�`"���“,E#.‘6k1“RXÐJl2™¥1 #.…¦MRÆ,ÔØ¤Ê,ÒbJÙ$…”T‘bSL h� Å&M)&a²lš2d*#)„k$ÊÄÃh,›%!K&Q�Ši ÉL¤eˆÁi)TÙ¬mˆL‚dJHŠÑ�±¤™¬ŠLhÂHaQ¤2@KÑ´jR1EbKI‘™¢“ ,ˆ”!ŠY#)Z4™ eFi#.›U-m ¤ª(É© k%ÊHÚ)’™&1¬–‹4HÓLÓM’”¢ÔÈÆÍ±(Щ²ÊFh¡K_‚­Ñ²V�ÈK(ÉMbÖŠÅ¢£BfTDÓl–ƒTÆ¥ªb(lXŒ4¤IÌld1¢¡–¡5E‘MdÈle•E¡bdÌjZYŒ�¨°ÌÊj³F™ Y©¥°Ö4ÙD–Te*±MZM¤+6V³RRÃm1B™b´i©Q%¦QDe�¢±¶f�²Ufj�V*J6ØÚ6 %CDB¨¤*#.±ª5 Ô†Ö!5’E´Ñ ¥QH&ˆÃ5(”Ú•F£d“hƤ,jšLÚµ›Vš±ašÆË"eMdI–šaI3j¥¨¦ÌÔÒ¦kJ¥d­J˜ÛJ™JM©¦ÔÙlR#.lÖfd’²ÅÁ©-¥´²ZšFÄ@`i±¤£H„Q°�D1mÉ0)µRD¢Å2šÆÒ“MŠŒ’h4”Â…ŠeDX¤–cBi¢™)“ÊlÐÆ‰ CbÅ™!ŒR³RX m™dË,Ì!#/RÉ�ƒ ±QFÆÄ””dh4‹2‹S1³¤¬i„̓FM‹ lËP)¢„±DE")´d,Í¢Å��Š4"¢4––H¦`´)e ÂH“�šJFS`ÉlB’Ò$“f¥š¨Ò©™‹#.Š”Òl�¤Ê,ÑV(�Ì(’‰I$ÙI4•%£)3H†•5–lme6V*16)4Ô“,É¢¦[R2e-%%²$”K1 Ó(ÑD#.e“d¥ LDÔ�‘h¬FØM‹EFŠ6ÄVšL2LÑ%&‘h¦#)6)"±`Û-4’T†£Y3#.%,Èl…hѰ†Ñ¨­“F„Ë#/ÐDEd¶* c ()5JQ5cXÊfhB¢¤“i…ID–��ÑY¶©‹2j,Q‰+%¡¥4±¥%4IRÉ*JR”£VÄ¥"‹%+e%�²i*,m¶f)”l¦²¨i&l‘I±a�B"Å‹LÉC4`ÚL‰L±"Õ(�0™Kf"”j6¢ØªHB¡’c@FÊj�£i’X©#)ÐbŠL"MZPQiMR›IQ[ÆÖf+%¬È#/Ñlš’‹Å(#4cf„I �’˜4`ͱ�‹hØ¥6ÚJh‚±€É¨¨�­6Ë-FÑX±kI¶¥³d4²±*ŒZ)–*¦¤Ò²Œ£E(–LYR¢ÒVM¤Û%dÕŠM¥3(²m�EIF‹F¶Û5­4f¡²X‰*eEF° Z#.&¥³VLS*ÑDUŠÑ¶Å¢ÛhÚ¡–Mkjš••DÙH6’cÊÂÊQd�šTEÌlII”“"!jMb̵L|>ó~i¯éyÛÇð‘{ßÍ\«E½fý;i6N£#ý¿òþÞS´W d]j¢$LLY¢ÒE˜pÿ«ýT|#.¥)°T\AÈŸúgQ”lÿ©ö�+Û=i÷é8ÈnT-ƒ²Q¥U¥uI ¦é Dn�™#/·ÿ5_Ͼ!kÒîƒÿFÃû>û®ÃüëI2h•ÌäDL³¶»Yb"<ŽÂ #.¶nà]uø^Ì?v§;q0ž¶ã?¨…NéÇX;£QLC§6íˆéTf¥5F�ª2Ù$”¤©�·_Bðjck´ðb­¡Ø£Â¢5Š UwCkJÉTe0ÀÙ¤ŽJ’5äØ2¨…*(Ä´ÊÍh¥P5W³Ñü½Jô·³ÍÍFÉk1Q$âQb-ÀFiw.Š‹u@(þó«ÝçlËÙ¹I��¼ëÅ4â�" ÿïCýª0+1‡j¢AÄŸ6.ZÑ1íÃxÑ#.-WÇýº4=þÂv#/…•µÚ*�6P…²P€§†t+üs’ãLãPºˆÑˆí}[ï ÿi<;ð:N¤¥!V&CS‰MõlJ=i¦Žäâ+kqeœÿ7ñgH \Zšp»PD(aB1¼Üó®ît]ÆŠæå&�¤ÊDUCBWœŽÂyChJ;sÑ§Ó ¡�ì•(*H#(k‡=?#/\‡nÔØ28¸o}up#§²®ó@’�ñkñÛ^éé{𮥷³PhmØ£Ö21ðùÞÞ–H‚ê4|:EZ9`ˆÜZ©R² ä 7n\“w]‡uÓEA½ê·žw÷/š«H(¡ä•š%€‰³[5¸�ND”Å~uKꢱü+LySÿ5é‚eƒÿB©6J®YÆ*%¡x¨È I+ù1�ϳ iuÔÎ%É…V’QøUkÛrú#/ç÷EÏèñé™ìâ£Ær2?f_ C<ᎲB8ãzçÿRƒ¹5NÆ¡ßÆ—dÏ>5~Ä�±qC¡.çíí}ËP˜Îo¢÷Ìå!³P‘ö`rÆw¸C:¥ ÓÖèÛAÙÙW0´d;Ò×¢ÆÑX»0¬MÖ/R„PX%ç¥ãèü1F‰*'Mh³f ØÒƒÆçµ—S+áîß¿ZÄ›#.KHíÿ—!¾ŽëØc$4Ù&27åúí221ÀÍì¢aÍ×e/)Qì´½ÅFv“¤8ÆäÈÈY[i¯ÙÒ”cB'ë!î.êm+Ç3,›Ås]He �¡»¬ªJ]§<0=–¨™ÿ³�wîÄê71)¬‡$LÀÅ¢šÑ`Æ# Rzrå}�_?·ª¶±¡[B�yÖ ’'ˆ… -%$"˜K<P4€«µËcIÌŽ2�ø3\σ�%²aj#/Î,³$©±6„ؘÀî5Œ#CÅ TX]Q4£¶ôõ挃þ‘¢è)€,šùPöÍ�åDå’¡„DJÚÍ›éjõ(�µïï´ò76êo„º‘‚…4£†ÜîÅ“q�¤Þ¨.´BÒ$¸àPj‹{)˜²#¿¦kJlÍFd@îª-¥Q4í»¿‡—,�ªJgoeYRLHÀ]ë²áͺ$cb}¤e|¦x<C%¨÷b#.²µ¶–œe‘L„5|HÙæá¶ºk#/ÓÙÖDVxvT<Y€Qâ�µôáF$Nú¦ûª_…Qš‘Ñ}ÎS3–»{��ÚG½W'²¬äé•Z …WµÍòÂ?ÁV‹S:Ð¸í»™áW'h#.lÌ‚MˆZ�ÆÕåPý¤óÚ˜†‘�¦Ã¬!açž7?Òú_}ÓGúzô¾m.¨l8ã]Y„?ÇÒ¹3L‚4‚ÃÉ XŸm½§"úr‡±5¸uì‘FÀ*”Ð!¡ÈiZ¬mØ�\¤<ad¶A�ëÙÙY.ÞðÁx#/åÄÈq0”ÝM6á¯GÊ�ŸCay¯õ'h L~²XG=ñö«>^3ßa·ÊÌT;ï’Lq»óÆV1^75&}U4B?->Ó36T ¿sž ª#!slÏdª¤?¦Bü†”<ªô©‡«(uÉ=Rò‡x6Ÿ£WÍüIFY¨è_Ún‘õÐh¸ùyϳwkŽÇ'~jKOWáÇY/(yå…ÂHÎl4cLine truncated
#<==