Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 583890 | Differences between
and this patch

Collapse All | Expand All

(-)a/CMakeLists.txt (-23 / +56 lines)
Lines 24-29 Link Here
24
option(OCIO_STATIC_JNIGLUE "Specify whether to statically link ocio to the java bindings" ON)
24
option(OCIO_STATIC_JNIGLUE "Specify whether to statically link ocio to the java bindings" ON)
25
25
26
option(OCIO_USE_SSE "Specify whether to enable SSE CPU performance optimizations" ON)
26
option(OCIO_USE_SSE "Specify whether to enable SSE CPU performance optimizations" ON)
27
option(OCIO_INLINES_HIDDEN "Specify whether to build with -fvisibility-inlines-hidden" ON)
27
28
28
# Use boost's shared_ptr by default on Windows (as <VS2010 doesn't have it),
29
# Use boost's shared_ptr by default on Windows (as <VS2010 doesn't have it),
29
# Use std::tr1::shared_ptr by default on other platforms
30
# Use std::tr1::shared_ptr by default on other platforms
Lines 116-121 Link Here
116
    set(OCIO_USE_BOOST_PTR 0)
117
    set(OCIO_USE_BOOST_PTR 0)
117
endif()
118
endif()
118
119
120
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
121
    if(OCIO_INLINES_HIDDEN)
122
        execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
123
                        OUTPUT_VARIABLE GCC_VERSION)
124
        if (GCC_VERSION VERSION_LESS 4.2)
125
            message(STATUS "WARNING: GCC Version < 4.2 - disabling hidden inlines")
126
            set(OCIO_INLINES_HIDDEN OFF)
127
        endif()
128
    endif()
129
endif()
130
119
if(CMAKE_COMPILER_IS_GNUCXX)
131
if(CMAKE_COMPILER_IS_GNUCXX)
120
    # Enable a bunch of compiler warnings...
132
    # Enable a bunch of compiler warnings...
121
    # http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
133
    # http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
Lines 165-171 Link Here
165
177
166
else(USE_EXTERNAL_TINYXML)
178
else(USE_EXTERNAL_TINYXML)
167
    set(TINYXML_VERSION 2_6_1)
179
    set(TINYXML_VERSION 2_6_1)
168
    set(TINYXML_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}/ext/dist)
180
    set(TINYXML_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}/ext/dist -DOCIO_INLINES_HIDDEN:BOOL=${OCIO_INLINES_HIDDEN})
169
    if(CMAKE_TOOLCHAIN_FILE)
181
    if(CMAKE_TOOLCHAIN_FILE)
170
        set(TINYXML_CMAKE_ARGS ${TINYXML_CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE})
182
        set(TINYXML_CMAKE_ARGS ${TINYXML_CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE})
171
    endif()
183
    endif()
Lines 190-210 Link Here
190
    # Set minimum yaml version for non-patched sources.
202
    # Set minimum yaml version for non-patched sources.
191
    set(YAML_VERSION_MIN "0.3.0")
203
    set(YAML_VERSION_MIN "0.3.0")
192
    include(FindPkgConfig)
204
    include(FindPkgConfig)
193
    pkg_check_modules(YAML_CPP yaml-cpp)
205
    pkg_check_modules(PC_YAML_CPP REQUIRED QUIET yaml-cpp)
206
    find_path(YAML_CPP_INCLUDE_DIR yaml-cpp/yaml.h
207
        HINTS  ${PC_YAML_CPP_INCLUDEDIR} ${PC_YAML_CPP_INCLUDE_DIRS} )
208
    find_library(YAML_CPP_LIBRARY LIBRARY_NAMES yaml-cpp libyaml-cpp
209
        HINTS ${PC_YAML_CPP_LIBRARY_DIRS} )
210
    set(YAML_CPP_LIBRARIES ${YAML_CPP_LIBRARY})
211
    set(YAML_CPP_INCLUDE_DIRS ${YAML_CPP_INCLUDE_DIR})
212
    set(YAML_CPP_VERSION ${PC_YAML_CPP_VERSION})
213
214
    if(YAML_CPP_VERSION VERSION_LESS ${YAML_VERSION_MIN})
215
        message(FATAL_ERROR "ERROR: yaml-cpp ${YAML_VERSION_MIN} or greater is required.")
216
    endif()
217
218
    find_package_handle_standard_args(yaml-cpp
219
                                      REQUIRED_VARS YAML_CPP_LIBRARIES YAML_CPP_INCLUDE_DIRS )
220
    set(YAML_CPP_FOUND ${YAML-CPP_FOUND})
221
    mark_as_advanced(YAML_CPP_INCLUDE_DIR YAML_CPP_LIBRARY YAML-CPP_FOUND)
222
194
    if(YAML_CPP_FOUND)
223
    if(YAML_CPP_FOUND)
195
        if(YAML_CPP_VERSION VERSION_EQUAL ${YAML_VERSION_MIN} OR
224
        if(YAML_CPP_VERSION VERSION_GREATER "0.5.0")
196
           YAML_CPP_VERSION VERSION_GREATER ${YAML_VERSION_MIN})
225
            # Need to also get the boost headers here, as yaml-cpp 0.5.0+ requires them.
197
            message(STATUS "System yaml-cpp library will be used.")
226
            # Don't bother doing this step if we are already including the boost headers for shared_ptr
198
            include_directories(BEFORE ${YAML_CPP_INCLUDE_DIRS})
227
            if(NOT OCIO_USE_BOOST_PTR)
199
        else()
228
                set(Boost_ADDITIONAL_VERSIONS "1.49" "1.45" "1.44" "1.43" "1.43.0" "1.42"
200
            message(FATAL_ERROR "ERROR: yaml-cpp ${YAML_VERSION_MIN} or greater is required.")
229
                                              "1.42.0" "1.41" "1.41.0" "1.40"
230
                                              "1.40.0" "1.39" "1.39.0" "1.38"
231
                                              "1.38.0" "1.37" "1.37.0" "1.34.1"
232
                                              "1_34_1")
233
                set(Boost_USE_MULTITHREADED ON)
234
                find_package(Boost 1.34)
235
                if(NOT Boost_FOUND)
236
                    message(FATAL_ERROR "Error: Detected system yaml-cpp version ${YAML_CPP_VERSION} is greater than 0.5.0, and therefore requires boost, but a boost installation could not be found.")
237
                endif()
238
239
                set(EXTERNAL_INCLUDE_DIRS ${EXTERNAL_INCLUDE_DIRS} ${Boost_INCLUDE_DIR})
240
            endif()
201
        endif()
241
        endif()
242
        set(EXTERNAL_INCLUDE_DIRS ${EXTERNAL_INCLUDE_DIRS} ${YAML_CPP_INCLUDE_DIRS})
202
    else(YAML_CPP_FOUND)
243
    else(YAML_CPP_FOUND)
203
        message(FATAL_ERROR "ERROR: System yaml-cpp library was not found. Make sure the library is installed and the pkg-config file exists.")
244
        message(FATAL_ERROR "ERROR: System yaml-cpp library was not found. Make sure the library is installed and the pkg-config file exists.")
204
    endif(YAML_CPP_FOUND)
245
    endif(YAML_CPP_FOUND)
205
else(USE_EXTERNAL_YAML)
246
else(USE_EXTERNAL_YAML)
206
    set(YAML_CPP_VERSION 0.3.0)
247
    set(YAML_CPP_VERSION 0.3.0)
207
    set(YAML_CPP_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}/ext/dist -DYAML_CPP_BUILD_TOOLS:BOOL=FALSE)
248
    set(YAML_CPP_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}/ext/dist -DYAML_CPP_BUILD_TOOLS:BOOL=FALSE -DOCIO_INLINES_HIDDEN:BOOL=${OCIO_INLINES_HIDDEN})
208
    if(CMAKE_TOOLCHAIN_FILE)
249
    if(CMAKE_TOOLCHAIN_FILE)
209
        set(YAML_CPP_CMAKE_ARGS ${YAML_CPP_CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE})
250
        set(YAML_CPP_CMAKE_ARGS ${YAML_CPP_CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE})
210
    endif()
251
    endif()
Lines 225-249 Link Here
225
    endif()
266
    endif()
226
endif(USE_EXTERNAL_YAML)
267
endif(USE_EXTERNAL_YAML)
227
268
228
269
if(YAML_CPP_VERSION VERSION_LESS "0.5.0")
270
    set(YAML_CPP_COMPILE_FLAGS "-DOLDYAML")
271
endif()
229
272
230
###############################################################################
273
###############################################################################
231
### Externals ###
274
### Externals ###
232
275
233
set(EXTERNAL_INCLUDE_DIRS ${EXTERNAL_INCLUDE_DIRS} ${PROJECT_BINARY_DIR}/ext/dist/include)
276
set(EXTERNAL_INCLUDE_DIRS ${EXTERNAL_INCLUDE_DIRS} ${PROJECT_BINARY_DIR}/ext/dist/include)
234
set(EXTERNAL_COMPILE_FLAGS "-DTIXML_USE_STL")
277
set(EXTERNAL_COMPILE_FLAGS "-DTIXML_USE_STL ${YAML_CPP_COMPILE_FLAGS} -fPIC -fvisibility=hidden")
235
278
if(OCIO_INLINES_HIDDEN)
236
if(CMAKE_COMPILER_IS_GNUCXX)
279
    set(EXTERNAL_COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS} -fvisibility-inlines-hidden")
237
    
238
    execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
239
                    OUTPUT_VARIABLE GCC_VERSION)
240
                    
241
    if (GCC_VERSION VERSION_LESS 4.2)
242
        message(STATUS "GCC Version < 4.2 - symbol visibility hiding disabled")
243
        set(EXTERNAL_COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS} -fPIC")
244
    else()
245
        set(EXTERNAL_COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS} -fPIC -fvisibility-inlines-hidden -fvisibility=hidden")
246
    endif()
247
endif()
280
endif()
248
281
249
set(EXTERNAL_LINK_FLAGS "")
282
set(EXTERNAL_LINK_FLAGS "")
(-)a/export/OpenColorIO/OpenColorABI.h.in (+4 lines)
Lines 55-60 Link Here
55
#include <boost/shared_ptr.hpp>
55
#include <boost/shared_ptr.hpp>
56
#define OCIO_SHARED_PTR boost::shared_ptr
56
#define OCIO_SHARED_PTR boost::shared_ptr
57
#define OCIO_DYNAMIC_POINTER_CAST boost::dynamic_pointer_cast
57
#define OCIO_DYNAMIC_POINTER_CAST boost::dynamic_pointer_cast
58
#elif defined(_LIBCPP_VERSION)
59
#include <memory>
60
#define OCIO_SHARED_PTR std::shared_ptr
61
#define OCIO_DYNAMIC_POINTER_CAST std::dynamic_pointer_cast
58
#elif __GNUC__ >= 4
62
#elif __GNUC__ >= 4
59
#include <tr1/memory>
63
#include <tr1/memory>
60
#define OCIO_SHARED_PTR std::tr1::shared_ptr
64
#define OCIO_SHARED_PTR std::tr1::shared_ptr
(-)a/export/OpenColorIO/OpenColorIO.h (+6 lines)
Lines 279-284 Link Here
279
        const char * getEnvironmentVarDefault(const char * name) const;
279
        const char * getEnvironmentVarDefault(const char * name) const;
280
        //!cpp:function::
280
        //!cpp:function::
281
        void clearEnvironmentVars();
281
        void clearEnvironmentVars();
282
        //!cpp:function::
283
        void setEnvironmentMode(EnvironmentMode mode);
284
        //!cpp:function::
285
        EnvironmentMode getEnvironmentMode() const;
286
        //!cpp:function::
287
        void loadEnvironment();
282
        
288
        
283
        //!cpp:function::
289
        //!cpp:function::
284
        const char * getSearchPath() const;
290
        const char * getSearchPath() const;
(-)a/ext/tinyxml_2_6_1.patch
Lines 1-7 Link Here
1
diff -Naur tinyxml.orig/CMakeLists.txt tinyxml/CMakeLists.txt
1
diff -Naur tinyxml.orig/CMakeLists.txt tinyxml/CMakeLists.txt
(-)- tinyxml.orig/CMakeLists.txt (-1 / +6 lines)
Lines 13-20 Link Here
13
+    tinyxmlerror.cpp
13
+    tinyxmlerror.cpp
14
+    tinyxmlparser.cpp)
14
+    tinyxmlparser.cpp)
15
+
15
+
16
+set(TINYXML_COMPILE_FLAGS "-DTIXML_USE_STL -fPIC -fvisibility=hidden")
17
+if(OCIO_INLINES_HIDDEN)
18
+    set(TINYXML_COMPILE_FLAGS "${TINYXML_COMPILE_FLAGS} -fvisibility-inlines-hidden")
19
+endif()
20
+
16
+set_target_properties(tinyxml PROPERTIES
21
+set_target_properties(tinyxml PROPERTIES
17
+    COMPILE_FLAGS "-DTIXML_USE_STL -fPIC -fvisibility-inlines-hidden -fvisibility=hidden")
22
+    COMPILE_FLAGS "${TINYXML_COMPILE_FLAGS}")
18
+
23
+
19
+install(TARGETS
24
+install(TARGETS
20
+    tinyxml
25
+    tinyxml
(-)a/ext/yaml-cpp-0.3.0.patch
Lines 1-11 Link Here
1
diff -Naur yaml-cpp.orig/CMakeLists.txt yaml-cpp/CMakeLists.txt > yaml-cpp-0.3.0.patch
1
diff -Naur yaml-cpp.orig/CMakeLists.txt yaml-cpp/CMakeLists.txt > yaml-cpp-0.3.0.patch
(-)a/ext/yaml-cpp-0.5.1.tar.gz (+448 lines)
Line 0 Link Here
1
diff -Naur yaml-cpp-0.5.1.orig/CMakeLists.txt yaml-cpp-0.5.1/CMakeLists.txt
2
--- yaml-cpp-0.5.1.orig/CMakeLists.txt	2014-01-30 09:45:54.000000000 +0000
Line 0 Link Here
1
‹¬ìiQì}k[9²ðù~…†™3Y R«¯Ìe—’°K d2™$n
>1¶×6	LÞìo«Ôm»ÛnÛØÆ<ìVK%©ªTª*•¤+q^^WµÚ:Ýð6ؓÿ™Æ‡Rx±ß~òM7ùN?„9Œ;Ü÷êʸë;ÿC¼©´¦ësÑhŠ:4EmêòA¶8ð>íGû{A>Wyúo¿ŸÌ^©Ñll4/›ªðá»n?ú;”º^›þð
ô÷‡ý¡ªàçžÓÿûï¿_‚Äž4L³Yªœ6–’dòìf•¼ŠýA¾R1FcÒ'cjDUÏk¢Y’¥r©yE¾”šg)gÃ_ú rÖlÖ6Ÿ<ùòåˆ:‡WÕú铷¥O¥„ÕN^WË%U2%ûöä¼T)_œŸÔÍ.Ju£W~ß9<Ú=ØGˆ«ƒ@Ú_OÎL¹–ü\wÖÃu]U³æyùûVsµ¹ýê5¥ÌY*Å+¯öv·ß‘4euéQҀ$ãÊÑÎqë9Ø{¶ºd*
2
M¬	^O¼þMðòMX*UTùB›•í3£>mÿñÇ6¡T6õçeq
3
¯—Z4}]¯þŸQÍ<UkIâÊ»­W{'Û¯_Cxß~<I~òj럇d™.¯öy¿»ï½~ï_oo¿$ˬÏ{²üÃ×â:¿m½ÁÚ
4
ßØz¾A-€!Ëæ¤iØە"LTkÍRµÒfï6‚šq¼”¼ì´ôé›Ý½g'Ç{GdyÇ')p"*šÔD½Ã£Zn,“ƒýÕ>¶öwŸ¶A¨j¥Y/ɤRRªrIÖEý*ÍzzQ*ëN[Éúúo䅩˜º(Â0d:Ü÷YÔKXýfÒ¨£—[‡;ÏNövŸHüŒFÿ9àaSh}’ö¡…‚žJÈrÒ©£3£šìÙì0ì¡Óϟc¯m'·jµ²iÁØzýzoçäÍþ.Rzkïäé.0Í±™bè¢Rúlê
Q&²TI0˜öª¤êÕF5n’ßKÈ´ý·¿åÑwÞЕóV¶
èÏSY¿h<I{óD'yä¯|þõ÷£
Ÿ®nˆFí2°k8Ÿþj²/W<°HÚËWG¿o·uxL–ñ¹Õ?+P	Æê•féÜ ³4ÈʓWÏVs<—€9~y¸³õ¬/$`ܲYožÕÐf´fIõ@Þ#˜P&¿‘}A0?óÕ6jÓuT½¨+ÓX#g«?4ˆkÕ¬"Qíè@p6;Žþ$×I+ÏYNeؓ–þñGpRlåÅÞÁSÒHà“åF]=y/ÖÿÚZÿóãOòµ³îl¿9<Ú!µ	2ó$mLôˆ³,R«—>‹¦é”Ìׇ™QRiØHé°>ɵ<MìéAA¹k»Ð묤¢>—6å†Aù‡°61L¾V欬?k÷xÿ ÓÝÎãÄüôàh
5
Ÿ›FCœš•£ã­ã70ÒSl’¾¦?Q<÷dËwsçSŠåûfKå“
6
‹u‹u%
,ÖÛÔâ7ƒô6½Ï+Ó=ٟdÆ×Jf<:xs¸½sòl÷ðÛ óê(ùÓ¬vàUôIM¨OØð§Õj£Iwþýf¤R?ˆ6×ÉîþöޛgÞѷ쌛ÎWVE,•²U^Þõ̀=”{[OwöNŽÞ<¾û°“€f-Èb%ÙržAíüÙ[?óS	¼°€¶_mýkç”Û“­Ã헻Ç;ÛÇowŽH­¦~.ñ”ÎG- Y໯_ì懶éÀ8zwtxp·T;«VLµán8Ë=¹ò5-‹úùgÿgütuáíî>w’.áª`ØþðõõáÁ?ôÉþÖ«o'ÏööV}O.@Q©Ö‰´“Á[ võKƒÀ»N簎¤…»ûÀ¹{{'¯w¹ð¸{¼»µ·ûçêB'Ïvžo½Ù;Σ/_„,oo¢8ïE°Åö6iԌ*	0PíoW»}ðêõîÞÎáÉîÑɋý7 Ö„,'%JÚ£Z2-è æpëð]»!ËØyègƒè*©T›äL|6De˜–Aøî.ó=yõúàð¸NCÀ, )×ªõf2Ëeìíîÿ‘tò:sò|oëEZ:1Œ¾TëŸD½z䊳nðš’îæuRìîþ	ŽöŸï¾xs¸uŒšïñ»×À>[ûÏH'Gª³Â›<~:éäДh˜Lŏ¾Ïr(`Þ¶ûf×½-˜]—׺¸8—çíîñËg;0¦žØ¬dý´_nÈöÒ?èùGÀjA5–;Î9Ùùãøpëäà5vÿñÚ~‹¥OŽwŽŽwžAÁ·æ²YøZ¡‰t¢./OTj$Ä`%üʔøFìÃ[>
7
ù„~
øákOâ7’½|=ž±Á¢\&…ÐÖkF‹
8
êiëo+Õõrµrjÿ@î.0ßRt PPfõü¤)ê§PŸ6òâôÔ?¬`¡U¢€*Ð1u¯ƒÚВg¨÷Y7ãüúÁ´sf&’ÎÎ>¾-ý‰‰Ô’övÈØ&d'ƒe(„*°ò«Õ¢F×-›Þ¸Ñ)·ÙìzZºoÃ3¢­ÛÞs£GÔ¡N^,Ö¾'b•lŸ‰Ê©!˜+«–£Ñi*ÿïõÇ5òäÕqú½ßd¥[¿o«ñVƒÇjÑl©•/“Ô]º´]…Þ™º(¬m›J¡²¦L„RÕºFðWe&Ô£‰ØP‰*°vÀq[8×q“£¸(7豴َ"vs%“±F–!C:„R¡›·Íê›àèŒGÑN&½VTbÙ"Ž-qP€¤´Ï™h}VaŠ¾ÞTK*ȅ8(cGwr/y—öñ‡¯¶]©7åÙÛ9:"Ì¥Ôfj+³Ï·`‚?Ù9<DŸÏѐ­³Öä*©VÊWD|0€p4÷Z—d%ؒ&íjËG-}¯¸‹Í]<¶ï:ó* ¸nºTù(o9W=–0B­à´pòYÔIk®M…3鳶ÖV!PàãÒéI5˜I&8Қ9If>#ù©2Á/6*M À|ÒjÅ·¤w-*-[[¡UÕ·ertŒúùÖ^2	AjýþvÒU6ÉßA3#¤rºr¸ózok{'"‡W¨4_g¿µi×ÂLJ€Ìc÷,˜WᡶÌ3΢9‚[Q¶…d¢¼Ùò_fTdC°Âv·{:ÔÿpüÁ Ó%+ø/J³H$®WÏ{ô=lˆ‚†¤,•QÓèӖ”„…
9
|ÁDÐæèã­Ã;ÇYAbŠìV#¿'OÞrò«ü_D½‚3]Ù|6åŸG’æͳKó—®ÚBüÉí2'ȀF;¼[зm:Z¿ÚZ'ÐCs	Dk4Ð,5Ð]Ȫ4—Gk‚ßôýÀ	ÏrMàžWØL_~Ü<+5“MœÜ4:\%Néçæ\‚ °¶ÌÐÁï2p´fؖpåE®0<3õhvˆõŽZ
}l°
œŽ¾«ô¯¼Ý:Üß݇ì…:]›®=¶u	Šc·]ݲ°E-Ï,Zïè&E¦ßÐPŒjÄÅë­ã—kÐs˜,Í¥QMÄ`#gkç@ÀïL“ðuËÐ2ÑFýŠtÜEÙ0Ç_ûþÖö{%ËÈîْ0²Íú–Ëi• ‹ïî[«éhéÑá›}ÐÝvH&1³ô(¹	àLÕ 6Zûý÷<”(ùF,eI¶—úÇñ9ã/_iõréQÇY†¿»üJ6©ËI„iÝN¬lZˆ~þ¦¥a©ê
¯«5SGµÝ>òúðàõÎáñî pÀtûÑÑÁMÖx@˅ag²ÜnC×a1Ü勶þØ>¶Û:FÇæ›c`@äMÔ×{ïÐ*H%0YæZ•wͤšü@ážQ:çÊÔ]0tCY•âäõÁÑqfÈMß4%R¥cpV›³£•‘9¯¶\_ Ðc–Hª•$÷ɐ´p~[mYzƒ¸áæ_»€­ó£µ@Ì@tÆëÃÀ݁Bïxçø½à)½Ùßý#x¯·­÷¦-Ž¡ã¨;äÄÒFM¡{Á*VusbÝð˙·É**M)¸oäû{ïiÒ®ÙVe3<OjŸN“
10
‹&…ty´§€¢EÌÔÌn\È6úVp=³(ýtôN-·¤ðð™Ú§+þ§µê4Ñ:F‰ÿJâ<FùCü×,>=ô·¢i‚Á_ÿs]ü’wÇy¾ï?ÄÍâóÓO?‘·À-x\ZjÏÎ`05Ò`(7.jÖF‹¨±^+‹&¼çÉ¢˜d·BÁytÝڍ«FӜ¯‘æ™A“¬bx®YGW²&ÈæÒÛ Ïª_*åªÐÖõزj’zWJ1¹ª^]­<N—oêÕjÓ.ÜÔ{Š1èºm肔«
11
ì£öt–8ÿ}‚ÐҒ³Až£]
K4çlÖúEZuþÉLØÎ%¥[?pJ'KKØP(^±0.ÐÝEà¥ýÓjËÒß ÇÕÄoM.jiKëæ¼
12
ÝÀ’-Üǝêt‹"Ջf–(»Y< Ç{ŠîZ›'
ó8A$`˜A•¤‘à[…ÍKWá%.‰Ùˆ>Q¹j9«SⴌÊ5@ä#ÛºÎcMøŠQè´Í^Ù¯6Í&A[_¥ßl^‘¦Ñ¥êEx£ù¸ªUr~¡Îˆ~‹;ۅ=ã>]ò,FSi˜™Ê‡º=ó¿Ïƒù?‹ÏvµvU/ž5ɊZEo|Hþ	cڐ§ˆ×¯Mý¼Ôvڝ™º‘Wä´Èè5׍!՘¨34g׬´Q&m
13
TeS”¬+N€-\»Z‚œV@ Gíz PŽŠF£
14
‚àPRç¦ÒLâE¶‚‚rù(-±¼j+Ñ$n)¿­W6Ê
¥fÝ G[!ŒµÔ…mh½.—ÎKi
XÜö¾±”ˆ¢5ÛÎ5r^Ë¿í–õ¥4ÎÖ¬³¸^’MHlX—5ìÇôþú]Ƕ¯ÖÙ<Øô"´™¢ÈÊç/gédÔîI©±_Ô+Pem­aö­Ú­SR0{\-—«_°km/k¦®cx%$N1ªM\ôÐÔ¤	H€Z‡ªé«ÆNÒ´Üv8/aR«;u¬Þzlq’@Mëëî&pÌñËrtðüøíÖáÙ=BwÆï»Ïpa~랗×úÞÈq¸µüŽ<'[ûïÈ¿v÷Ÿ­‘?^â*ÔÁáÒî«×{»;–˜õh»?…rèrÙÛ}µ‹«ýÇ+LAí‚A
À^ín¿„Ç­§»{»Çï֖žïï#Ìç‡dìÿÃãÝí7{[‡äõ›Ã×G;iÅþîþóC¨eý?0iíCÙù—ˆ^‚ŽU-m½ÖbûÈöÁëw‡»/^“—{Ïv ñé´lëéÞNRtj{ok÷Õy¶õjëŎ-uP—0[Ò:òöå&a}[ðÿ¶u@7là<®A/ÛEßîí¬‘­ÃÝ#DÈóÃWkKˆN(q`@¹ý
15
¢šä(YðùÍÑN y¶³µg=лû9òm<LÉwüÓ5ÿc¨èÄëÝþw7x°ÿgñé¢?ú'ÎcÐßåôŸÉ§‹þè÷ú{ôŸÅ§‹þ=“¨ãûºžß½ÿ¾ì¿Y|’0š_ÿQÈý%	8œ¥\Âe£_q}³}{ò®u«´6teë·ôÿ¥¥}qn6É»ÖÚø3ÓPõ’ØÚí׶’ÍwukÐ0§0vÃop×ï`YÙ¬ÿè^bþÇÒa²¯Ì¤½’ll’õ½¾&=øFÖËíÕømŒÃÂ×»?|í´þÛԆ‹ä¿¨•Ð8±:®ÿAt/àüaüÏâóä	¤ñÉ4՚ò_ÎDÓÚóó…l½Þ%çÖ}P®V?YúÒÒ÷éxèÄeØIÒÛ¯~)Uͺç¿áғœ‹ReeuéëÒ#øÿT‰jæK×aìV[?kõÒ9nÑzמּF¼5¬Æ>&ï	©joYæm”É°NÞ_®‘+|JÐٞ.H˜sJ!(67å‹tAáW’$½FÁ²²ÜnáòêÏ	¨FSon*t ýò‹-òž~܍_lzBùÛÊêϪ\†î,w,+i±L®5Ò8«Ö›g Èþ^X	ûø~9AÉòÇ÷ÜÖ(m×ôÔÓ.…ˆ‚2~w™æY½ú¥ñ÷¤W6·óq£vÑ8;‘B}Zñl‡m:ÿhY~iÊåêy[­—õrûtä¨i®¬f’Þ/2W˶ÔgDír?ÜýœÐæ{»Ñ¸¨[¼Æ%aZÔü
16
7‰…öm²,¯Ú	Ù>.=ú¶ÔæTœTR/ØUÂEé¶ç.l•*ŸpÔÔ®šgÕÊãYƟ'Iׯc·¯Ë?¤‰ýâ±ÍŠG0Y™Š2H7ü@¾÷;Ȇ|4y‘ý`&ú±CY¬©ùÅÖӝkü:ñ¥ú‘! £¸m5å»Hg2ёÖ
Y¹ÀE­|oª -êP‰¥j
17
ZB"©UK•¶«ÒîB|!]m‘¤^O x¥ú¥5ÀÐçLj«\†S1Ïêϝr?2òÞkujüdéTÆ?",-Ds…¢£²ú«V‚4ëÐQ@ƒh´=èIS’áÕpüè䓜–¹1ѐ—„@WaÈ-—¯ˆ.ű©›J9ùQÂÊY’UªÚüÜUÙ!¦'aÅ|Ålmâ¢Y]·Ñ»õÕÄé#åӈ¶èíÓWºI vL{ßÚКõ
18
 ø-]®¬¥°2xftõç,S¯WëkD	\µlɐ®Vm˜º@ÁŽmËj·Ê¶¦úO9³FÌg­Šñؓ̚-€o˜&•°Å˜V«Weٜ§Uåwlºíw£Q:­àbÈõ/õL9Xeýʎ»îjù‡C²ºKje˜IIC‰²¨÷!.´¼ëH\HOäym-xyú6ZØø	DõOy¼vU
oz«&6Þñ?}…Z[ªA¦
|ÿ_Ëøð?Žë1»'G{¤ý”0w|QiÅÌ÷¯¢»ß2%{†ý­,xœ¾zlWË«i”® àj×Êãö»„ïP¾Úí†m€­i´‹V™9‘ØIô‹=Ý3M
19
Çɶ́¦e*·#µ•³=Ñ´‹v×Õü5"/š$ò.×æBW—q™L¥f§OؖåójqôsŸ>Yùàl"Y’œ6øó§„A¥8ÿ.‘íÖ4ìœÓ‡f}Ø/å9Ë˙zщÉ-ædQ¶DoFh+æmÍ:mÀIÁÁù®Wkv­ó*™>-þºæN+ÒÀ|uN 7¸À2æ@îÙm¬$Õ¯¥µwÉMœÍ²]Z®VL¤Â&›VÞT¶°E+½ Óì6/üù8Db˜ÑMjµÔCüΈÿ„B«Eo°ý…/PïYí­˜ª+ µJ!±Úˏ¡DfZ¨éä€Ê§gä1‚°YZ@’U떨$&dÕ,}60;Wª7ð‚Òd.ñ µÕ¶¥’DЀ€G…uÍré¬ZÕIÕ9Ì@õ+«â8j¤,k= BñªÂ!ºA^‚d€	GË)LŠ_ÄÕßÉ[#>%ڙ©£ÐŸ
20
¢´£{öäȊÒ\Î^%Ï2Œ×OŒ·8 ›“à«ÐÆ°•A:&cւfe…&Š’!Ø/•
g¥N,Uזå•É¥²"œ¤9+­‘÷PÀŽ%;Ü1c¯°nñe"0Ò¶œÑ*93l{Z0|-~mA|Û)„†MÝX]‰þ¼„þ¬"ÿϤ¼Îÿ˝ Ëÿ°à!þg&ŒüïlüZIÎ4³7ìæ«t›
21
n›=iojL³u¶h-ui€T’ÕK’~ÕÊÚî2FÓFc3u`Ü6ZæS4þÛäŸP׌ǥ¬çüO>ŒÿY|†qçv^¡Òc}•eSÏ{|ã–÷È	ÜIûlÜ[ZJ¯E]œ7L²Z-“3Ñx^*£•ñªÚ8@\‚ë祥´ˆõÓnÕO+èf™ Öl"ùé'xø¼Š0Ó¬5(•LªÏ¹l±hc‹¿¡k"ý…Qulϗ5œ/—Tìv²vÚ¢âe‚ŠÍôºÔÆȾZúº”¼Û\zô¹To¢ºþ¹ZÒä ò,
v<l®Xƒ;ðJÔ?ý=øÖ·ÌNE¯$z²`ãz¡­¥¢¢Îªõ“f!ôDïì‘U|‹
22
'Iœ÷,ÊÓ§w-û­Ò†©­¸ù)܈}%j“®@¶+DÞ¶ÉVü®XX¥dýFAí¢iWPš`ttÖ}tèªjÛ·{U¡W’Ü?w;Þ1|-¨ æú
ƒfr†E»7;—ÊØu։±#(`êu,i6p}š›‚£¢½ÆS<—2CÚ¹IV›‡h)¶)ä7Â2•—RÑb ‚]‚¯jÍT옵¦%$&8ƒW«¶g¸}ÝBÈàR¥/{Tà{ý)šÿ[ºÖ¤ê¸fþgžß3ÿSïAÿŸÉgRófÅ÷&s$ڮͫÐ"ÎX‚~.xÙ®¤õ#Édÿt7 ‘²í×CLƝix@¶ü.ȓ™ŠÓy"7”ÈÎÀCÉM¼¦£k'Û"سíU\nκfÙÔÖ=¹æ"0fÁ¿že§Š"&")ó'o“2É»}sÙl1ÅJš-…2ÇóM‘üÏXí©ã:ù°îøOßöÿÎäó ÿäÿ}•ÿp©‰‘|­,¯¯¯§GÍl’¯%½IØr*ʋç,lðQkVx
p›ÇÕO¦ÒXi›as7­íÿ˜µÿßóœnÿ¿Cîÿ™É§s}’¾}g^€wdïJ°Zפ¬³½+KÅ|9µR;+<¯Ãó“l‘%<kÏeßٖüÃ×" ßF;	?9Ö¨g!ᢲŽoxZ¶Òoí„̉h}ÖZ0º,019Â˞ŠZ·¹H;û¼.IU­Oô :úù?ÜØÿ5“O!ýƒ›f=ÝW‘ðïFíjì:Ë´æyú;æAþÏⓞkÛ¸j,¥?mX~úûL4Î@ö--í‘_É㝄#/=Ûy¾»¿ƒIVü¾ØÙ·çÝ=^²›åO¶ÞìcäÇÒ*ë óUAp§ÚHT³š¨úÍ¢’;°*&IÂO)†Ô_ú‡ÊãN*~®J¦¬!^´ÓM¹¹_öåÂìšýò7»òWëÏÇø…ÐK‡ö)sù˜üœ™Ë•$ójBÕQYìdђ*voü_ôÕô­&EuU4¬¶Ã‹ôš¿>ÇЪ4¼•Þ©?þõ1ŽïǛPËyœ(–øôìO)ß:<^Y}œ¨Õùæ÷O4â§æ´„6Ñ `í&PË'Ú`Ð"Fk.…m²MMb¹VҘĦ8ý«N̎Ìϓ’þ•¦ÀZ€ïßluJucßþ
^§­øÝÔ¥h–ΏÅéÊòÿ6–W“ÿm±\mCI*êh˾[-nX#'­ÍÔX€A(g1€#&ÍiŸWó,Ý÷ø~&ßw;8³ÁögšŸTó1;$ÚtįõŽ¶·ö¶-
23
ÖÈÿ6ÖH+i•z­å«XM	Ž[;ÐÌÊö¯m§YÛµ¤\’iQ›ÌÒAz_Y¨—7ºk·âãÈüçñ°ÔÞùw*XZïGêÕPî&+ÈlEO]9¹p.j† ¯DmX‚¾Úz="A‘
24
C[ÑSWŽ §¦öÛ9i&^
25
0™£ß¿ï̱«k™	÷¸Ž²i-+ÛÞ§Æã¸Z}™3 ¯ä°EЯ‚Tü—t~±î*ZÓgÚü™´äã؍n‹§î7ï?®uõ©;¡Õ‰‚ôžn–œ)ƒ)ê}«Ïɗéd±Û­à‡¸êŀÅéÔqݑ×ãz6}o¢›ö}Äîö²U‡
óCbud”Ú›1‹±µŽˆèîõ-WÒGÇô€A|¯1}ÝÐna:1Ä.k0G¬´f‚ŽMR6•N*êÁ°&t†,ÊÉ:9ÑØ-ÁK´w[yÞӏyõ- F²±I™•’=@}¥]Úv‡30KîU¯Êa#Ìý±`B·†¸ÀëPº±ð~“}ìªÜfօ™ÙfwæNåÿoX0÷¾3ÛÅÅöô‹•´ÀbM…st+cR´ A]±7¿üjº’”YíéY	ÁÔñŽ¡ºf	Š¥VÿÆ
26
:¦jW-p6SQ†
 ¦A}­m_<N<^í-‘âªv•UMy¼tºÛ‹7üØ; @7ÂÖ)‘¸q6g‚­´¼
27
v™W_œ×L¬v [<&ØYÝ83—ºtŠÎíÕ÷›ý¸”oè×ÇXhUø3MR5<ûã[;{jaY×âIêZL{†ëbIãá׆Ý	»òøûRŒþ·ª(‚‰Çiµ;—½Q£&”Œäk’uÿhu)Y+¶~ú”>D¦¯³GG'Ysúm«ôkð•TLþ#æXMªÃ¢ï,|\-‚€ÍZíe×Vµï[8뒩Ù`_¾O´ÚDE¢Q÷¶RKÖó¬g%ûÉ48}Ä(Ïÿmüœô²‹·­°+v (Tˆ¦–º€¼ÜÚ¶·ƒŒ²³`høóxXM¬€^S« ³Iúµ½Ûùã5ÞTÓî]R¬o?žìï¬t5=“å›}ÑÍãßÚÙ³ÃÃÞ́û¼p„äÇHw^»~xQya*)ÿہPª4´ónæµÍjS”W‹êûZ؈þct¸Á…=
[ù1}ØÜlùqÖÚÍLZ˜b{%;öÚ>Ü€\-À§ˆ Zài1·šTýsúdðóõ$9%3ä=±×睜XoôÉ	F'œœ¤>éBQÙ¸jl4š¥Ïd‹ÖÒ*“uŸ	
\ÿacŒw¯ÿûñ_³ùt‚¼rçâ¾Òp“sW>ô		xøSgzƁû:)é 'ÉA;³ù$û¬[×rY>Ç#i ÙÊÈ#\|0i@U–@"Ú4Ju£.š¸ÛÂöãQ:ÛåÎLúÎî~”ËÞ}®R’ç[²<ÛóŸ5$ï]ý9ÛDszÚXÎ¥HŒ\È'—ÊŸr)Y7)îÙ(è×:AÐ*ëÄÄm0½=|^®~™L/RoSû¾'êõ«|O·/ê室WU3 ïlOz»ÿÞ_#à {º¾s^k^ÝFχìBo‹÷aüý´\UŸ¦È“Ö<fHo嶹2͘{t–{8RÏםÓ~¨²NÚuå>šMñc·ú’¿ªð¬ŠäÇYݘ‰ ڀCú½=Ê‚mqK~`¿µI¡@õ¶ô_æÊög”¤$‡*`†Ã+Q!Oëâ¢R­¥VmØBâO‹åm_!º*ö$ÓN>TZm’Z±Hœö†8mœ‰Ú`¤6þs·qô¡ªåj} Ù:¼£Ÿý8ð«mÜ&IZ€N¨h“ ´o=H[±¬óÁ‹OE]¨Oä@Šs1yg¥²®›ÜX0ڏà&ï¯ðü áÆûuܛmó‡J«i›‰@´U&?“*»)€¸ß²•ÜΤ1^5Si,à6XD•Ê…¥˜;›síuÆÐ,2“Á–o’1Ÿ¶hêÇ7¹ù©`úž¹ü*0NëZÑÂ8ÔåS#뢈tË[ƒæ†³«FI’|yûo
28
–uѼ¨›Â²ƒf“Q¥b2T¥*	æìM»¼I¶,§$Ù$ÛÃÇNó`2ÌíÏD\4K.úÚa£5’²ùÚa¢µ,­åè[áì‹âÿUér>$ÎÓª¼
29
8Šâíà÷úé·Uw©ò¹R\–iœ<Tâø)“Iö½qÅà!«ˆâ1ÊîǕN#6I5Žµú½jå=*=H/ESXãÂ3ƒç’$¶÷8ú°<€Ü_®Á\otÿ$mûˆµMøPù;ùÒN˜Zåt²˜BŠ*Ž[ð:mâ"‘ú¹I‰ÐC—¤ÊbšlW‘Û/çƒÝ{åÃ?üzùÒÁÿ9î 4EY®’kD¥JmÎ¥éõCh½åoáH®´éHCUô#&v€wDÔÖE³:ÓatÇӋxÞhµ^‚*iŒ‘(O’¾	uSÚ~¨tš±I:uå$§uÕ?·—LŽâÝfÃÎ|¤u>lO¡D~ÿû¢Š‡:cs™ìaÀSäáÍú’W}<«^ÈbÚ¾`֭ٞMÓ¨&êþC •jeýCWÁåë«J¥˜ÕùÊÍ´œfF‚	ÜbWI ß¹¨àªð÷Cw­4ìaµöïËx’žv5«ºøëêC³qu.«åFr¸úcOÀËJÎÑMâÇ	ò³|Œsœ.0SiÅèNòŽ‚fÌÿÿ:Y¡„t¡”,R	¹	Zåæx‹_7‘žY†:¿(7KëØ©•¾˜@ÿÖ s€GDëÙZI÷›¤|α• lL¹cc»k†·gª_ƒ®~¨ê«ÚáYÕCA¾	!¾vz =ÝMówÒª¾‹ßº8¸åÙÚjÌdî‡HˆÃ"ÜõÃYÛª5—MÒ¯°}9Ö[³Ë6¨åès´6Ž V‹7I§y8žºkɎ&{ðÉVE§»V¦5—'oZ[cbô­Ží–*"È5î(4»
30
Š¹ÎðÔKŽˆéÛöë§Çcë%LÂD[>CB¬¥ä:8ý·z‘™#rz[jžÙÓmfI¨N:V=-̐ÿv£ —îVP`OLò?pî5Q		yr>ʔi¿­%ë[H¼VÙMu“ Wn“Þwx[r&ªl),…øîÌúiåꮼÝʸA#Ž­kûК¤øk,5<Ó]”‚éÓë1#'n4š¦Œ‚÷¬aÿ»%Š0QÉzCDۛbã¿×ãb܅ʛØ!Ã2C—,*ü´:Uªßlâ0x¿
3~&i‡Ì
31
c¢èkG£Û"(BδÇÖØH¤ÕLSÿÍá©3Efڄ²±‰“’Äû›ub'CÒ®|¨¼ >ڝ˜ÔpÈwù¹»PÓH£`@'¾àÙ,%Ɵ™Œ:0¥&„«ñ´´\ÞDý¢VBzûôê_¥ŠNÑ:iW!z\º,ñÓýœ”‚&MíŸåzÌ|€‚‰’Ykî;ºÁöª€ƒÉ££veyh•2èÃO…nöa;xèuí2ßÅ-–,l™‚
+U>‹2´¤)N»Ú–®>«ª-Õ֍2¥ÚàÕՃ¿Öߊº!¯/êê7¹îV ±j_I‹æ5KÀ”ë4\§þ HŋF³z^¸|5v„ÍiéóàÐÇågÕzµyVä“lÁˆÅy©<ØiùB”GñšµC5šæ|Ԁ¢B1Dx¢¨7O*Ձ½Ørƒp€U½Tã­À8O/Ô'Ó$+ÏKå²Ñ«ƒ"eêŬÕYªßpƒþÅÿs·v6Rg¨PÊIâq‡ùNxC<¾,ž‘—Æú@
32
^È«Ëä¨\ªÕL½ˆe†Ç'¥Î
1ʆÇèuÑJ8d½9ŸywUISÊÆóWá^23Pø¥2>³ŒÄNŽ«õŠÐU²Ì|õ¡rtï	(Ê®AàòŽh4É[Óh~Æ2R£ylý×ђ§qVª
‡öÄÑÖë×i¨éŒ³IúM+*8{l’Îñ¡Òš	lÜ©á›$•Ó˜’äM‚R÷CÅ
33
Ñ4„<›ÄŠ2L#$m›¤P4%yì¨Ù´²&Ih‚MâvA¶ƒ»òÀÁš¯ÁŽ¾î:؇J:6ɏÕvõвëf²°HH'br‹ñIYhyÞJ YÿëèC%%ü&ù)!i^!9:ÞÛ®Vš¢T†O^­Í\œF~)Uš¿!ZÎMþL~fîÜuV‹ÓyŸt¯OzÐ'±~/x£·lôL‹mwðšøì-pvûûoèMN2á÷ËÏD¥dÊöªYÇϤÿÓ4&IÎMSíâ#*ìöÂ׈·F‚5ÂüãÖ¢Iê‡QfùÄ֊±l…q™­óg£’ž›æYµhµ #áÊ9:Ù¤“
znœØ8«^”5F$€h©œÚ+®$ü÷q¤VRt“äj¶W߬)ÍW°Ciâí³m¥3u#Êå+’~á
34
8H×äeÅ¡°?•ÇMR«6%Y©—š¤ZÁÍy6&$¿›o9±w4«s0Æ÷äº&fóv5·ï¾•ÔØJQ3AéVÈÞ×AP«ý®€e¯_å¿~m½ÑÖú«éÅëè»0µ–Dy’ÜÛîéV›ÄÉ$*ÓkèIí¢d6¤ÛG¼`c¶×‹àÁÁãë{2R#?T:‘]œ—G$:JÀâß­è’ÍI(<K.e\<T¯¯¯¨Lßi×g±˜8ªÕ¢ÑÉßeüCÃKÊ÷Pr͊6€ª¡¨w»¨s=¼¥¥š®nw¨~¸ë"‘òÉ®KÔI7÷´
35
/¿+bÐпúýkп
36
^»ÝÜ$í¾®µVê­g 6é÷—].ɽø^t»–A$@“Ax+n¿1=¦+	'ÖÜîŸÍ–uúïKÊ
«tû±L¾Ô;GWMˆY*O’ò$ÍÙ쨘OäeþQjÔ/ÊU)ÊGÆsÍc`ôP¡Û¹ÐõTýXMvc/éÈ×Ù2ÂßVHèÚÅÉ;§õa¿FTo¬PªlNŒðC‘#悪Y΄¦æ8é<@ M˜àãn»q®¯²HtjIÅû{e±~4!6î•f‰,ë°¬=x…­çc*àLR]Òka™Å
37
CÄB¹žI½‹$Å°s„Ç,EÔ±à‹CÕÇ'Ší4|ÆRäjËîÔP¢fô›JÉG8	R$ ÷«•­†*•lg?\:.ùp¹í|¸ÜràÇüñažSøá¿gøvÀúë‡åȇ— |¸p¨PðýÆÏ'}'ݯ™íÛd:5zã{>"„l'²kó“¤RϚÿº9
38
Œ<½ áªIžƒ²k›
39
?VV7Éå
40
µ7b¦)x)æåIћ¨ŸØ—'«VS^±)iaügw¼ªIAÌi›ñsҎnÌÖðÈô%ÿB
41
±ž´Úö#*êãpY$_ÚÆåÈÖ
–J{ÔW¤¤wOÀëžñÒ0õã«Údø«H #
½5܁].Wó&¾âðê´ZÕòʌ¹I<xÖP²• <„TÞNmÁï×÷ÝJ{yb\4dÖ ~yŽ±lñgÛèøsf «Å9rÉ¡$…9QD´O0ÿ/.¶çrÿ6ö 8&?}ND)^ùŒèi·þ§¤õx¸m6¹kRíÏ©¯«0š`ÕÝñ݆(иþ•$;õñù'´®%?Bz6í/H£Ã™¸À~ý5{H¦ÿvéHíÎÞt|¢t† ¦w÷<M›Yϋ9ö¿=ãtß|Aü–½Êú†»=Ó4#FSØ=	ųÝˤ‘*ýÚØÙaÞâŒ(îC‘u“}]´$–!T‘vw=ëD%¿{·µ{ŸúF'×ùë7Ì
42
`ã|¨ ‘_ºÛuš'ÿÌ6ô±ó>Ô,G+ƒÆC΋:ʾÜ>x
43
¡ft—ÞS¬ƒh±™
44
<wòæ&QíHÍ>Ìy[ní‰ê:ºÂàׅÈÏÖ¹Ür¿Wm6â´AÓs1Ýáfž£{à°Îkk,¤g'·Ãïx2Rg¤­íñpC¹h,B_qŸD'ÉäË­4Q§nôw°G>Xnêᡧ¥Š¨Oh¯{ªn¬VT%ñD‰Fó—D뼨4J§0iՙ¨ÿôÛJ×Á嫯²ZÜáモ4ù°|ôâ÷†|6vŸëÏêüòÓî¿ýµm°vÆEåôöúõJTH©At©žß‹R㷘VªªP¾"òŠ`ÜH݈Fµ1ÔI6–¹(ƒ¶†wE”ª×«çÄÞºFD¥t.ʍ5ò嬤ΰAÊPº0z^ªà½4àÁð3<ÁouÁ<ڔñ˜*{‘d‡¶Cë. Ùö@„Š6±h–Nñ‚{¼
ílüT©~)}jֈ¹TÆè†Ð8۝?›3snÒ*Då
45
E{E”I
£g.ê¸T‹”uz=iß>¿Ø}Qþk÷ÅaMñÚ<×Lü±_ýóí¿»/¼Ïzûégy~éí¾ø'ü;«©«§W¾}þ—t\xÿOïKæè)ãå¾-/_<¿Ú}ùôLqxvÜÓ?+ÿü,ž~Ö/ÎʪôôLž—›ïÞ^þµ·ý”C¹ÿÛOîÙî‹K¦ø¿O¥óîóî¾`Úñò°ú¾«|:}wôô˟üó¯?ÿø³¬ÎŸ_¼sÞØü‹Š·º
46
í©É¶çÍé;'ºÐ/ÊúíïŸv_<¿øߝ–ÿ<N!ïÙ»óK¨C—åùïWïþ8´mEX~;—å?á´±l^ì—ÿ|{ø¶ãÏ£§‰ÑÔãüùö¬,ßþÞnû·àhÿL{grûéùâwÀÁïW¹ÿê.vƒÐ팂9dþ(ð#nWËՊµ8â‰l@µ¥¯Mlö`.©¿1ËÓn–E­V|¼ãòæÀE÷
47
ü7t±š6`²‰ÛƒÀéãšîi…‹0ۛŧ¥n/Ãô*b /ô$ß½zž¦™,t¡ÄŸòª	Þ5h/;oá™$¿Á€ãm®†¤f½hIŸ’ÛâܔÇ*¹Wý2f¹Öö9„t˜æŽV4×Þ>EߙÆ~udԔ­¥†@éu-¾càòº6ö)–;evh4”¥†@ãu-¾càñº6ö)v„ZÖÈh,(5J
ÆëZ8|džAãumìžqk
48
“À :>|³ƒN3øÝL¿ŸoíÙVšà8ù±œ|·s„©0Jðë*ùÚ?°­£´Ríd>Øǔ랫ڿϟۯ8¶iøՆláZ¨ZûO¯[óYUá
·[}sçkfþ¸ýí|LéÄKqViÈå—%´&êæ»b%¤°£¦÷ïKn›yÁfãâhÕõäî»+šÃLk÷ãCecc#ûǾþ#{2¡ÖçɁ‘-"ÞØw^Êïz•÷f,Tk>Ý{YJۅÒ_íÜ=OÙæÌHëín<¢îjã†M‰äôÕí³)né,ç7s+h­ÒK–[ÕÁûLsÏ$ÿø¡ùxq—:Ö[Ú;þøðêì<TZ?I'­ÙFX+à±ý#@&åæëºQ¥Æ8!¬-h_s7¥öÁhA¶áp7.|Å7˜Ë¼Èñ=î…QfÊã-›¡¶2;ø»@/wŠ~[ÊcèÈÜ"vÚæ’È4‚¯^ƒ¸¤TÒ)æ¯N©œæPÙúÕÅt¢q–.å`d€¹]t‹X+Oúf¹NF­/FOô~bkÝÃëðòÒ\‚"p ¦‚Ž~+}8Ðmhäµy ×抻Þs¶F@²Æð—‡À!Æð
49
Õlö”xõ§Ïö^œy FSG·±j`@ßBCöØ6¹b­ˆqÓ«Õ®…ÞÛP‚9tDÞÏeè¿î=B>•Êå!ð8’D³)Ô§¢.:|ˆâè	-—K§è*/âù7ASÑ 4"r']¼‡6H.Çzöv¼ž·$½c©Ýó¶'á{’P¦ –É›g‚žJ²(܄âT›{^­+“=Pÿ¸šLdQîzNêO#NìR´k°4úfOó÷W­¦smq©ÒsqqF±¿lÖEÂNcž˜ÔuR
50
Ÿ^5N77ßì'wÝï<;ÙÙvr´óï!·©¤1A¹¤¾‡]Iî¤g?ҏrp“¿Úzm6†
ԕ9y§?"®Ù\Ýfªñäì‘P±»ÿûÖÞ­ý헇Ð0ðÐâŠù’\‘Zëx'ø@&ÈolNzi6™n'÷v·ŽFîcräJ¦‹×tþÏކþµÕÏËJÚ/DϊM[ù	/g_íêv¾Ë«…1ÜX=ÜâG»4ëÙöÁކ’æ ¶BCsÝ9Ihßb{V,ÚóR·§hµ%=ádž:Ô•ÞLeÑh¶¨‚ù^˜æ^+i%ÝWŠWZ°~-¼,îQ³~Õ¥°µ>©
51
RՆTðO‹ö{U¡S¨I£=J°ô·¿%ßˆMu¶’`6EÔ¥25\cÿ‘˜VÕIoTK¼µp‰X"±(•Þ$vüÛ`̒Æ8ö}-êÞ¢ -k6ðr•Õ|yŒÿ`Üoژñے/™`w³ømÚ>Ì÷Ë/¿ôð,!Sš¹¤ü4›ø(Húï-0¾zeuuƳøêpU¶“_–ý"geLgìÙrs7m«ŠÇ_"éFY=Ø%?þ˜-ôk~Êa¹A2!ÞKÆ÷ ïWò’ÎmGiÙvÐ{ÿ%‡`‹î–_ÖzKææÁ<Õ£¶øë…ɉ÷㝣ã>Ü5&?õʽce_ÛÊ릙ØD|"* 	Ø¥Åb«)•‡“„Pv£ú	ŠwtlšI™0ә°
Ú ü…5E@7ø[[Ô¥ØÍ6:÷Ð%
52
Äw{ŠÞ›$›·³ï	ªM¯òý‹$ÙgÈÐݬþ’x`ÎÌ$;X4wºÝÃÇiÓþõŽ÷6ŸgВhé{0QÊ0Á.c$ZÒuìycãlՉëy§±U q_HROk¦$WƤ	]ªÑéšu¸q;	SY뾯m­=P’12$óŸóŸq`¤¡ú81:àFfl:°>Ž	*sx¬bˆÄ”qÁuš–B¯m	ÎÀ´éàë\ÔÆÅ{ŽmÐÈÀð.©ŠÆۋ‡Ñ–ex
HŽï^Ãëò@ œ‘[“¿¾½›tc‚ë`*Kºq0•^òœbÊvó¼t9õÒXíõÚ§k,s£®†ÏcË_»†~W›0&¸Ìe{kÉõãv2sù%öÑ>’Ø>Ý¤¶Í5l,Yš¿ o­sŠÚ˜Œ–»ãm
Ü)óу¹«œ°Ã˜`‡§°I7׺h¢,ùïìá7© 	Æ,_ªXôŽ3ø2Aø9M´'¡´ðR#œ…ˆÍsþ)º<§úxóÑ ›yT2.q/¿é‹ª‘GNÑ](ýz1àס
53
íÍQ•½#£»&=іnBüì]"ª¸	Òzoúܗñ4ˆ‚0P„^­ÂÛ&ÚµŒ'ç»/“°²~Ýn碅̜««jDі=Á³ÝC“$Œ#&ӅʎˆL@Qmê:hv-{ûíx »KÍ`-7bwóG`®áb¨M¯uƒÔ셞0Ð79%™FFGîDÉôØóB÷Ž0Gš™-ÚOã0gþ𲏞Útèpòb,ÆêÝb¯Oç‰Ñg‚ü9Kh'	ä"I
ZÌXÅÎPÉeß$½ì{¼v¥'T`ÃèI‚ßãAȜ҆ŒÛˆ£AΞ kÉ#”DŸä˜ 2ýÍÀ³ëÙ£-¬›D¥ˆ&1=¨®(2@³š¬}7&üìyð-‘uè9BWÃÇð#ä·þ4wd˜ù­ñV“h6p“j
54
yDé’liDUÇþ݂m°Öë8P2»4Û¼qàônÉ[KbÀ*)C#–ÆS´2›!;07Ö»q°o[dzXó;÷¾è[ŽÛ)£Jïì>+¸^ÀQOüu#‹î­8¯§I¤
z.:Jo«H¹(YGÇ5†c¿°ˆ°®¸qDY’Dj­´ÛerÐ@—Rox1¶;’N%é£Ám‡çÚ³ž.-gTÕ:zO|jªJAzÆ2N^@o­»ô­£oÝfïHJ÷T/ù5QT
55
»’ëMg]<ٝÐ3äL|"Éã5¨,™MÚÀ^];ËEF­u.õÊÁ7 :ݲððyp™kQ‚	MÚfóºg ¿œÜXé.³4hI¾‘.E¦Ënøú‰MHVÝð9}—.¦§Çµ–é~M2þŒëߖ–þçá³xŸ+q^^WµÚ:Ýð6Ød‹'&á‘tåöæuPJ}×%øøžý¦Nòl?¾ãæ0îp߇oBYÀ=ú?„Þ¼êë?8CS¤Ñ¦> d‹ãö÷‚|¾/Åx„Ùyµ{|¼sˆ!!G'/O|ç©Ã=‡žÛáÎ	cÏvNÂ-ÐHGév´åûKßCAÔõÇ)»“¤¼^9yu´}òûÎá*ùÿ¬´SO^ì¿Ù>9±1Ií';S҄W»û‡üÛ¯ÄMÊ·sÚ¤Uòä	y±½MµZµ¶Är­.Nϩڐþ4¦º|…“"L|Ã]ú>“cé{ÐþJñÒR'VE-Æ}‡3üŒ²0)„U…œÙÑ¿hü÷oÜ°ŽAãŸQ—úÔɏ@„ËÆÿ,>0qøc@×ɋý˧^oé_—l´2u¼€c¸'URó 
56
"²W—’h¬âM>-rª×ôFYÛmߙWé1l=™[{Ç훗[ûÏövV2aP)ü$’ÿäÙÁöÉÑñÖáñJ>ýh{koëpeùï vѵ¤®Þ’;ûÏZåžìï$C½–€Éȏ”`a…Úq|îÐaÑRØã¡06÷hÑ~d\#"O?v¦|34·ŒÄC±ÖÜ %Že¬È:’&vµ‘ôfÜr#…¯[G‹/\/’NlXì›Èg†‰Ùɖ[ï}èGBFžïREœíjf"äÖ{ïr®h°Ø¥Bq)Bíú›Ž¤¸õÞ² £ÀU.¥\*O¸÷§÷q¨d`xÌ$cAÄbËp6ã¾T=½yâ»bðTÍQÕMýŒÒ˜
57
ÆØl„ÂÜ£F2’rŽ'©á!o<fŠ{={í↨	'tîjKJÇ7×/3Äì$ÍÍP)ÏÝ+ô¤çsC£f²f0À
}iÏgo|W…¡7C‘2ˆ ÏëÀ´#$WF1éŠJŽ9À@iR_É
ü‰…OåýÂ÷©ˆG9̯Šûži>}9ž=¿—{nÁªOV™ÆÖW½(’<V,ô˜~}Oó›ñψ]|셡Ðq ´tW€rÇ]çfÚþ3{åæfØ£Q‚ۏ}î…FPßÐÛÄÞìõŸ›aOG̋aÐ*áJû:äÐ؛Ü›$1tA9Žù±#hkß½™3bââmø®ã—­)÷‚h¾¤Ø )r$óCáF’T†3wÎDý ID<ž@A̘ž™LjO”F݂.ž36&歙±/˜b‘ãz^ g°ìt0çE½ÐÓ4¦‘‹1ZLBÛY¼s¡T*rO{^èºRÆ·†¹ÛYßs4bŽ
58
täPA½(R:ó$çnAÌ7BÉtR¥´Ýx“˜-'&ÎnAžæŽ
59
}K0_;A0ôJÉ,¤Ö­#(`Òw¹v
.#Sj|Qt³ÂýE(¡RRKíKÏ1‚‹áW™=E†,‚‘㮣|G“Zgœû¾³8Òž`œÀÆß9_˸}çs|†J:2ÃÃXªó¥sŒíï	âÈs&ºñ”qâhø¬	ñ(§ÒÍ`pQ{· ]”ežÇ‰ÈÐH†F
!¹*„rljb_s‹ˆÒ@øÞ3÷Bu1Ž¢Ðñ]­bMµÔWtèuÇ»±à.A­@íÐ:5ß÷Žê¿ç‰@y¡Ã˜F*™7ŒýwwÂR®#Ïu9gg(s‡ÔAîFìIÈbé˘ÅQfœÀàœ‰óÿtÓ#Ž©ë»^ìù"0Â:0kº©¥a$</ŽÀÞµ2Ž‡pV,\ „fšS&¥
60
¸«Ii7b©áº	ÜJe,]P•™
61
†âЫY÷$l1Î5‹bŅkTKn&¦»ø(r…¯iȗ±„Cfh÷Ó=	ߐBKÐ{œP¸Z!h„jhkížÄhxÊ×>ÖaBÃ4êù¡:èûnÅÅ]¥
£QºRúaàgv·0á)yQ =Î}í¹ CFÓ6s::xdXà
“‘çÑPøL
½þx·0árãø*Ž\×WP5Ù¸‰Å^⧾ˆEh<é1ßç4V¡ž”¹uÐãj«ZR'tDDÒjhÙz¨bŠRÐy•Cu,|Š¡
‚{Ë ”b‡…<¦¾rc<3Ù}4‹±ïÇ3Üç‚1”ù“ru,´™f¾

}b—
½¦|wVÖuà›ÐHºÜåW>|ÐðÝÁ‚¡\Ïq̵¢aL1YÛe@”Fþ‚ånáÚ÷Å曝§éÉúPïÛ҆wKÁMä*׋ýÈWu‚™m²¹c¨Œ¨q=©b?ad8‹5:òn<†VÙY8TR(×xܓ1nä*fv*cw†
62
åTP	ZŠH7¢~ȵã¹jxeJbp“Ìt8¦\Í£(òOGÃ;f0íÌ!Ƙñ´ö%3®Ž¥Å”»38nf‘1FÑԑCqìhíNb>žÔ$2‡óÂX;€¯€ƒãæHoèMÖ3˜+æc`Aià.\úÜъ…“ð¾ÃµŽù¡q#!r`¸	/–ŒŠÖþÛSö®^ý|ó=F¸Ë"êàøÓÈýB¿2N%žâéi92ÃIlÆNº_èwÏs´ñ\Ÿ{Z„žF“8Kg$ƞKsjè÷='ò#¦YàE®ö„4r:ìdäÊÜX§Ó>¾E #í¸>Ó!5tøPŽ™ÍªCÑe!Ñ/5S2t=m¨ç›(œÎ·æ³XÆ£@ðÀ0ב<à.Õ2¸];ùNbÙpÄ2EìêÐ1aÄ̔-Åê1‰e퇔êˆj_Shêˆá½d·¢®,&–ã(Ncár&Ælj~¢‰h%‰e¥Gëº¡%ó¸ë͜—ï>–½ˆ	PÁ”áÔÑ÷‡÷GMѯ>~ ð­[AƒBþƦ’ñ|ålQì(ˆßì(äÉøò¨”w•9¸½Õ•rbϑnÊ)¯œNy×ŝ¤’„¾Ü
"°®„Œ¦éRiÊ?î&•´Ç÷cîùÜa!5Îð{‘æcʙ7÷Ð4¨DÅ£®XºÃt€§-•æ͋4
*).¤ã€–ÇMÌãFÍàڝi“rA‰A9×ґ¦¥Ã\a¼ö¡Î¯*· ÄàalhÄ].Tē°øۂ#ŠŒÄå®}°Ô›rç,³%†‰ŒFžl̸c˜Œø|Ììwigҍ¥ˆœr'’œzᔝçÄèK'}¹<Ô®«
ÃÀޙò:€bãnI»uë±ÿf”±—­•G}S©ŽuëvC–(ÔmÝ×íW†>Ì0Ԅ {̓Þõ@¡Ì6/ém¯”Ä[ UûÑ$̔I…ñ‘MžB42¦M Í1ü¦Ìy˜bæÍ?6…yHã¥÷Fé0T^,DàNۇ96é’BŒù§w•Iý\9]2.$!d |®Î=*“±+¼yجtÿáøÂPÁeĒ© p¹\xÍl!	aX0O@¢Ê=i3µÈóY)`Iˆ8b‘§´ê–ò‚ äa0µ èYéYIˆPáZ}Ð0…¯<ϝöV˜Bô9á1òU¤tì™ÐQ‘‘šNöPœ©ø,ÜÄO\™vÃ(‰ÃŽR̸<ðœÈ›„2åµÈBöjmR1ÇW*”&2\SáÉyعþ@ȑE+õ@÷–¾1
63
ŒQ*þ£y“šã››!µ9XÑÐS!¸±¨„\Þ4óЂúžˆ¤.Å¥;GÈyóôMƒ¸„…4vXžˆ=Ìúíô©½ ô
64
„1^䇡ǝÀǓäýI8@æ_9]Pz1åPɼØ÷aiN§14':è‚Ò‹Í=O‡BD®©ÑÑD®ŸUsAé0{¶¥Šd )u§ØíÆÚß!Ù4è¥<—ªPû:r"Æ#›xaM¹û@¯LïˆáI¼®¢d±òæí´e)êóê
°5¹+vb2$±Š‚PKI˜È(EuqΎîx Y—9ÍxFqPç#íâ*̝ò@²<É\¦^L™9LhŽ;óS ®#âɺvϺ¾ˆ#I
“½É±žÚVšáÐÂ8„o…d
3“JxÒ4šåQw# ysýÞɘê=ó©1‘«ƒôüY7¶ÌŠ–w”d4`¡ÎBm@ÉçQ0´SqN”ü;J­¤OÓLKå†:îD6ÎR—¿£”‰¢Ðø’1…û@£8bb˜[ÝçJe¿£”AG`$]‡*îƁǍ£Õ‚iæw”2R¸Ê“®1:v¸b¾îÔC¦¤€ßQÊP0a™C©Ï„§‚@ùþ,­Ù‰èÙw”2Fr׏]Ѐ;!üĦ¶õà2£PF€®º™KC'f®8¾™‡Ë—¦·Þ1äjóÌôžc‡ÔÀœ\g²®_Gú¡ÆgÒÚ¿å›D¸h¹ÈD"òåø"pŒp5Ã8dó‹æ‹‹€‡(ã(ö¡v9íK.o9ø偋¦ÀEèª*f^IKNù†3³ês[\ăˆê `”K¡G+No÷Ü»y䢅YˆºµMÇÂñ”tbí‰,iöÀE£‹™¡ØësQø®ÐNJÁb‹¸bžYí3‹ãč…òuƌY~¸Çýf–Pré8*Œc탾Ì<ß¹ÝUÄf™_fÁÓU™2mTDЇ‘^ؽóažßaf¡Òe*4ŒÅ”‡*˜Ú*øÂ
65
y[ú½53‰û¡S¾çh×w©z0“úñÁP\t‡™E§8,ˆXì0t·{þ³Ì/³pÍ]ÊBá:<`BF±TC/)ÜÔä¹U÷éØûû#'bêñ€31ÇøC÷_"‚ºÀmSœSáŠp´3žnæ?]8|®ñ}Ç^#s¼2þ¨û¥Gd¹qD‹/F•Ò8‘Ö^é6ٍ9Ôn}Þ7ÄS»±/M¨´äžòcÇc3—÷sˆ–0¦šq×9(Ù\NJÉ)\6·ph®aÊçR9!wDÇ2-ìtÒ{ÑiOÈ8Tʧ2’šjΦ*tD¶pf‡ó—â¡g4Q0ÚQ·w- [£á.™G\…Ìx3-ó|åä/„g4ˆe¨Ï"*xèû‚Nað~ãØDŽÒnä‰8ŽŒGÁ”˜þdp¿pS'Ž5XIž+@!fq?õ„6@Ýe;žì¶hìƀß@ÆÎÍL҅?t
66
|l¸Ž|ã#kÉhš/³›˜¨
67
ù‰ãÈUQJ–¢<Žªµ	‡ÖB§7ç-$*5ócÊhìyÔðÐUÜxCŸ{ü€Ê<WJßs"JZ*6ZÄÄT´„…De@ýX+_*ÍÕøÐg»MOXLT*ã2ú±ð<퍚1•9!QÉ\a¤ñ@JzÌÊ~8ÚZô*ÛÎØ(
68
ÑeÃÝ8tÔð‡EO9ÞpžÍ®i܏-
puqîûŠ*mÜ>b²Æ£Â5Ìc,pµCÕhG¨O/°ò¾‘Â<påCAA‰ü›Éúaya|Ó …RLpO†4¦’:†9ž7	çú¤~Þ\S™+¨«Š<T‘äTű˜„‰3-Ù3–"tL c.=©Ô::Šö–§íÅ8ÕaˆgCyŽ¢Ò‹Œï®ÚÆÇþ
¥ò?Vá®çrÎgBu?1‚¶¹B0W¹	3Ú5h·§ö,(ÆW8>Ԁ‚£„F¸“àñYh7Šqú ÇxÚçaè2/?ºÙ
69
ÍƯr|ó¥/°{¤@žLuәsa¯+ü=М³ˆE:p}9’Iíè™E@>¡ãZ¥§$ST0WOc1³ÐÂ2tê•ò„£=®C„2Ž)„[án_½;y2¸†…&¢Ò÷<¦\»þðñÇ3“7óæۙÂhÐTiháRmâÈmSî,ÅþPôYH2pG9ìÞ(v͙œÙºØ¼_ª9Ùú1^×aìy&òX4ü¥ßØÙîÒ~Ð@.GƒÈ	¢›uÌJïYHl3n ]/bB»*ÔÌÜÚ¼:o~œÉc[3é:‚êÀxÌó%¥½Yôò¬´˜…Ä6s¨a`ĺŽCu3É&²éÛŪ!w(œ¹¡ã¹šsԒ9Y÷Xp£v×â:“2ԎãIÆ=ÅâÈZ=PkÖÔÒa亾E1gÂ¥T+3	³ë–R»«Ôb4ÄPy*ÜHdžúžŒ'±ì–Ï2»«Ô’,<×a¾öO„Jq1Úý4s#äæÍý4jE:txä›Ø÷¥Ñ,f«r÷ÁK5
jy®ÅAGa@/äÆ7ó4¼ÿ4ˆ‚׫PÏÂ0Žhív¦píÓQF"
70
…âÒ7~†ÌUZÇ×Ï¿†· D‰Lh<¡˜ZD̏}:	ç؜(rJ߅Ú
$e¯ýth¾‰2o®ŸiE¡šrÍ5î
ÒX@D¹í9Å£±t˜P®¡F1‡5ƒØï	ÜÁ9';LíÞM—™Àu@a®÷@cŽ:–ó.Ó£‹¢¾oŒ—n$cíÙA4òÎüºtÙü {…`ö‡A…œÆ`QÞl¿ã˜êÓ]ºÔãXù£®Ôҋ¼(\ÿf“þðCaa<–·rºÖ¾g\®”ËP)st0éc1þ>·Û w\'òðq_z¡Ë˜á³/ㅼ
º„ÂHjj¨z:6Òñ†ÞÄ=K}쎢_;Ž£MäR¼:Ò ·f±ßàýíó¨Ã•Ç™2ڃA<üÉ ³Ôzï(úU¬\͵KƒÀñü›€ßÊV÷ýºą-ih(ofóMI‡½£è®
71
œÐø÷%¨§\ïf-SRUï(úí^K.¥r%r6üŽËôßýFy^ |"Hû¥J-ûçw%öö®yž›ÜÖ5T,ž¦Zz¦¡x £™íAy`•…b®6:Œy¤}¸ƒxñC	Xe
72
¬â+_»xÉjìAÁ
73
'rùØ]¿u÷>²J,=—ûU¾ë TBg"!è(0fíá¶X%ôTìS&¢ˆŠÈ#éxïa•…Y¹µ{›£¨G&œ€šÀøÊLbCä]b•y[¡¹-VQÆHã
74
€ÑÌ|%=17PÏ3?ÝaŽ¡!×wýÀ¡f›PÉÄQ=pÄürDì2ÏÄ&dÒSŽ
75
sÄ$4»núÞaŽ 1“`ß
76
ª$
\—MÂr×-Ü;ÌLº‘Rœƒë1
l1Âi>wkB˜·È[›5b8Š¾ï3톣r¾÷”·½z—9‚ÇŽf,Ò(æŽ/¹væ{OøGL™#Œô}††'"/”2ð#g
77
§ÛúöÕ+Q+&Oß7÷½Úz=€$øv,•L„±
78
¹Ê砞-ŽæóÞr×Qé+ßQJ	ŸÅwBzijòFf¸au†ÅC¥‘ñÝȓpIÃÀ£‰üɍÝÙ9‡§„J—› Ð!àP<¢Š©Ñ4ìɋÁéO_ÓA¥ˆ`Êý”»BiÎ}ÊÕ®0ßsˆ1&|Oǁ0…	7‰;£¹€¦;»Ì!ÆðxÇñ˜ŒŒ”Œ·ó&‘9Ę+ÆCɍˆw}íËá:œÁ\1‡œùÆñ/#—j/ô(mç½Ã˜Ž¡Ú~0<׉†Þ–1É?Rhï­©“ç—dž+„rßs\E¥FéIhããO=$»þ@æXòXó(v…ká)´c—&=÷=ìÚÉWˆØ¡!$]Ï=ϛš¡6ù½T÷“d®ãæcLÈwuÄ'áñ¹¡Ì›{WÆm’L2îû<
79
|c<GåñwÍV³˜—É­ÎeŽëE‘‡‘
80
Cfbx¹Àí(ƒCÑòŽ’Lú&PHE?æŠz^›Û]U®w”2Æ8¡á¡ aÈÄ Ž&¡eÌR—¿£”‰¤Kµ*é{š»w¥7µ™iJ*û¥u½X(JÝPs+æép´“$n_3¿£”	=ŅŽ@=`Ò8‘ä"ž¡Í4üŽRÆ26ši	øÉ}O±Ž™‰èÙw”2"Š"ãŠHSE2v}>↷ÊLKš¹ž#_„ŒFÚ
äÎëYMXÌè®[÷nÜ4¢kì…bãÀ<èø,v¹'hìs6aH\´X\ä:ÜWiDžÁkiÜ©9]F`°.Z(.Ša¨	Yj‡Ê˜iGLÝá
,÷—‹<Îs"Lp˜Ï|/ð§
º€bfaV}n‹‹<&5„ÿ<È RᔗЋf!궸H1*£Èå‘+Dè„Ñh'Ýk.š·µ±[ã"Oî1:Q,˜ÁCÓ§pUÝ}bµ;Ì,ÔD¨ñðØñ}ãùÃIDåÞcƒþ3KÌ}ÆÒ1*Cá†SóîÞ»ý3‹ãFÒ5&’Ô€Xñ¥ŽÕ”÷†Ýuóü3‹Æ÷U"íD¸‡Ü3áƒ>ÞfÜw½ÀóÀÜV~›PÄCïï»7Ì2okž·æ™ñ(UTÄTIé‹ÐĊ>0˳3‹ï9aƳrdq%µ3üÑÎ÷ñ(€
Àd2ãIW+è)Ü|qéÆq¥`Q Dû¡?šƒïž/ñP1å®ôŒëSùíÜÇC$Œ!}æj7–&f!£Æݳ“"Xèqn„4®J¡ŒPÃïâ¿Ã‡‡GJSf@@)ãø<ð¦p¹à¡EsIîÇ¡ÃB¥}Î]:	i4/fÝØæXE±ë1Çó£(dŒºfªBgAd‹ÃñÌ.M5‹”g˜ù|sý¢£Å…Ë™àÒ¦|£I½åaSÿ7Bjêé0¦:vc&EÉphwí]¦¸?HI2
81
º.w…3j¬äÉ
82
ÓÙë(´ÛqýˆkQ¡èh§Ç&Lg¼H—›0
83
] I¤×’‰õp6ÂtŽ³ð¨Ñ4öAÂÁ…¤î¤ÇËÂǝÝ]x(Åcűôc×\ŒvÈØÃ)ÓÙIrÌe‘ûŽ1<Š¢@L!ŠëaÃ|ôke\Å=¦}å:¾v@)žÂ¢èïƒ~‡ûÜq£ØõMèI폶j÷p(ÁÖÁ<³Ý*µÂS0'Pw´Ø‡“n‚þ8VÏ
=׸^(ïfÜÿp¼À(ègBz^…AÀc¼Pù#žíû°SýFÜϘ¯©„	×õµg¢0Ò7sœ> ôGTǍ”CapêIOÎÀA{÷BgîÁ~%ê²8?d‘ŒB:|lÕ«Ü+Vñã*Ô4sVRmÎÞãý÷‘U¸ŠŒ¢”F††Ôí‹ÑΪ»Ÿ»î#«hÊ|éøèê(SAMDª, ÀX˜µ‡[;sÆ1¡ÊØ7*
84
YȘR“ˆRY@VY˜åÛÛK£X‡ÒŠ9‚ÓHŒxòúÝg•y[¡¹µ½öÀ¸$òYl„t\Á§põã§;ÌÌw”ð{JǑ¦ŽGƒŽ¸Ïa¸|/ÄûõB¦˜2¡¹Ù
85
ûý0}ï0GDx7ˆqcj‚0ŽüX	1ÚÝé÷Ó½Ã!bÇDžDL\ù2F<YãÎLó¶y[:’ùÌ\0F_F*¼áðÂrļ-ÊݚfɏHj|H‡<pÄ}æ*0‘2Ì^xª<Ð(n%H­ÌeœHoŽñwÛê bÇu£š5wngËÌýD?gÂó|.cáqÇç#Þ65©Áû‰~:âÿ³÷­ímÜHºû5ùmûllÏØîåvÇÉd7±gãÌ^N4\-ŽeQCQq¼Iþû)4ÙhJe¢$ÊiÍ8¶ø64P¨z«P¬&ÆXžÒ”#“Ï’ª?D÷{ˆÜ:DåiKÎç1¬/ØÛFѯ¢û‘°Êç´µ–Pê9÷ß6ñÁ^k\ÞÓî×ÆG¦Là^ø©Jo|—×Ðý«M¯Vþ'±w;•_Ý}“ÌgáágáŸëßéG·Ia=þsy@«wa¤Û~å’ÁEmNúÚç0Ì×f˜1Ðè´½Lb®²Â«w<"oCDzæf‹°SR¥Ã˜°£àηêp.~8ó
³J×/ROL`Á`¨NŸ/Ñé&êy]¶a˜×ÍŠ
86
繇)-\Á’s*íèãu]Ãa˜×æt°l0͎øCýúì
87
ØÕ5
88
lÕ0G£,¨m†8Œ¯‰šrºvÖВèµÆ慭
H:&7cæi$òmó0̗5›9¦”"„±Õ„(
89
žÕ%d…ž)sJËÕ«ñ«ÚG[ÍΕҨ’©thöÚ¹åƒh¼×¢!uÒ¥Œ°`"¨³Éø9Ofí
e1¡”TDÒHÕ¬µ¢±u¢Á€Gºà”¢–DK„PþbDãªDãÝECr1üJ"8–çÛ{N[±ž°¢q	¢Aµ•F‡€°®Pˆâ|{ì/ˆFœ{[ó ï*82g£k©OÇ»Xyå+<Õuw
GHûè5!F…`
a³‚xÑs-™DãD#ÝͦÔEIDÄñM§#¢q=EpKl^‚¾Txy—ê7~•ÉÅÒ¾¸œ@†½NFĸÒR1ôÚ`æk3ÌÄ:åÓP³à#Ázi¹
Ã|iÃ,˜Œ1¥–(ƌ—œ¡¸‰Í5—’34óúeƶÎ*
f9¨`8ÞÄ%e—’34óÚÃl˜e[ɂâˆ{¬ô&¶_JÎÐ0Ìk³· ¯Á!Êݖø”öôñÖj®Ù0䭑zM
á<‚¶a6oý†©k6Ì,Zš2¸%fšL`6oâܨa˜·k˜eBªH±7&2‘^\¿ù"’
¯ŸhlUî!öžjn0(À„wŽ µSLqÄé”8ë¸âÎú ‘ÇÈ 7Á5.q‹Ø N[$N¸ŸAÒ¨4%L]§ÙtXi§­§¨¢“„k‘aØ꺄¯qÚ:qòk®w„(̈́Sç=ÒèÃdƒ8m8E¨0ZHâ5a̦6qÀÒ¢‹1™ƒ8mDœ±ž{¼õ4"!QÔçÛ#ze,{ûw‰ÿÄ	Eâ„3¹t ,aÁ®(Ø.qÚþÝèq"Á“"0q*4Èuz»×¶IœÞó÷V‰“ˆR,eÀÈcF‰2x§Aœê¯ô2RMeT{¬·×1*~M7]^˜(\§4ètZ²D‚`/¢s°ƒ"x™B	шëà¨TG™%×p1gÁë+‚ÂG…´e“tӑâR^›¼âAß¤Ò CAõYpWõŠ°KOŸÛÀ¢Ñ ‚×W½pT:8X2¬
•›¸ð²š¼¾"H¢•X(-–‚SŠùúÛõ®ÆÓ¨4çƒn«
¾°ÖÚ{ „4Z®È–-h½ÏgÚ"˜ö¿ùèh¿@#U‡-ׂïÓÙ9ƒ¦Ð´Ñ9¢}t‘E$q°Û“tôޟÑ3ˆ`òˆ•"FjA±
90
\R‹1ßwä½?ðeÁ´mÅø@µÁ\ƒIðF®¿@7ˆà ‚AO‘r2`-$–„sB׿i#t•°+Ü6Uq{4±q\yDžvAZ‚õ—pÓó ×@4xÌQf± …ÆëœÁ^iv
Š†TŒÒeð‘Â\àë|÷®
91
á⃣ƒhlP4ÒÁsäLô Zpê7¶5äòƒ–ƒhlP4ҒÐà¤õÁ0î"›HÒ¹¢`â 
Í©‹Š`OŒsRiÅՈFmoM”ˆ½ÕL&ˆäZã6q,çå1Ìm‰¿¢ÁI¤	É"E^s‚ÙØ2ë¥:kÉÌ ï QsÔ$£pFon—Í ×Z4Úb°ˆÌá@6A„µ
Êö…¼6¹ð>¡­Ú´ÅY0”i¦‚Â,D©ZÛp
"8ˆàDЅ(ˆ‰’#Á†°öM¾ÛÝDðŠ`Œ.Z"#r±h‚Tt"x¥)¶ƒ^+÷Àc&AÜZ.ƒKθªÛA¯•J˜S^j˜koÏwaå•Fż†"H±¥Z(Ž¡3uÜX–äU¥Ø"x­DÛ½BÈ$½¢ø¸¡Ü3¤ë¼kCƒ^©‚ȱH¥ŠBÉ$‹V«í˜¹jgwëÏ%D°AJ"7F#ƒâ+á¶sÕb“6ö¿>ºU"ˆ0f/½Á’#­‘ºDøŠÝµdsÁ‹ŽrD°ŒÁd¢YtaqÁA,pÎ,ӈ1$¨÷Ô)#׿$v«è®çÁ&W¹áê:mô²AÍ9!ÁሬÓ>¬½ecÛAl¯Hl¥Á
92
qq †é¨©g›_ýZô ¶ï³Øz‚5ÖxÁ­
93
*7våו®_bû>‹­f*R(V$R‡Qè/pÍ{Û÷Yl}@Ä
94
-
95
\Sì¨6¶çôR×ɱ}ŸÅ–Go,Áé –ŽÚÍ]•v¥këƒØ¾Ïb-'Zðȥ՘GÀ3Ûb±}ߏUÄv=±54‚‚ñŠ[©0gQmìÈÁ«\gÄvkąˆ-vDep4”¹õèÚ^±½¶Ç·b»fÜVì­ FL÷FmîÎûíÛ­?òuÛ5`T‘È„°¬¡šo즞k$¶ôŒƒë&¶”:§œ{'}$˜­ÏÌÄö/¶ŽsÇP¤Ä­U·þù=›Üéñ¶Œ¬s‰Ê¹³—*ó›ÖH	AÂÁW`åVX®úÐýçî~̌·œJ¦(U[âÑ»m*ØÐ&“?h÷Ë¥"¡ˆ¸ .p#ÞÍCÙЋ?h÷S͂@’ɘ´HIÞ-W¯WÞiÇË{Úý>"ðp•A#¬¥pĽc<¿Z_k\ÞÓ	7ð—÷HPÄß-Ñbèþót?·.IǔbC(—~íîßüãí؅u!©úµÃL4–F¤¥ÁÂ0ç5_ûÒÛa˜¯Í0S,#‰>O`”"æ*ˆô0Ì:̖¦ó ¼BST$‚¼ÛAÐÝ=óEÍ怐sAâDŽ¨ˆ¿ãqçÒÇqنa^#‹ÈcÅbéÜn•ÂOƾ[Î慘Ýs†0óRË2-xˆ.´&võÃ|î†a>Å´%VÇt4Áˆ
96
!Õ¦ýً0»kÿ0̽Òv1(ÞrŒŽà(œg3†ù*‡9e¤3@s«y¤8¬úêùͳZ|õjü*ÏT¨
97
\*†£“˜É
ã†HyՑ³A4¶C4„ Q”t†!ë5£ïvÏæÃ0ƒhl‡h £Áю:ÍDk½v ö‚B7ƒhl‡hhæ‰
98
ÖÛ4ŠŒ¢`/F4®zÐ ï*ž#ÊMtŠB­.¼ãa_¦ë	Ë — Îi©”£ŒxÃã¢Þ-Oû’æ¹÷³¢ñîG¤%È%šFo1æëg5n…óq}b×M4¼CV!ƒ)–À3´ò’^`øêæZ23ˆÆ»h
Ç	áI/™pÄzJ/‘†¢±Å¢a˜6Ȃ˜óÄr±\{¥²>䵙8øU&_LHûâvC¤œCþ‰³<È°v:þ0Ì×f˜™'†L„Ò‚óཔ—°ëbæKff7œ1„#"Š¸p¾ô’K̆yýè!ŽœÇ¬E†Xi£Ï"ºÄœ¡a˜×gç‘zd±vÂP&,R2œ/½äs††a^_i"¨jâMT>xÄÌù’Å.ÖìnM æš
³ˆ„‘v iB¬5È«Mäë_4»Zkü‡a^È"RLg¤wX*TŒç©Ã¼ÃL”•ÞㄲV!‘v•^¿ù"’
¯ŸhlUî¡òsá­D‚kF¬#âÌqzOÅ)†Œ^B41Ú¢sf]b¸g§­'&” Ê(Æ.0ƒÑ…y(›+
â´uâd¨!ž	)…°’çÅ;Þ®~…á«Aœ¶Nœ¸‚zÖ	/”òJœïLK“
â´uâ„<å3%	•Üxeý&–Ê.]ŒÉÄi#âdqôÞ¥ÁÜ!PQA®¿«l»œ¶íß%þG'†sÎ)e£Ü†ð⥛ÌAœ6"N‚*‰ò‚¯] ½ãÛ/Nïy„{«ÄI)Ãvc«µ8¼ëµƒ8
â´w’Xâ"WF"‰¸V×'u¡”kºéòBDấAKNIKºD[¢ötý-Wƒ"¸$Ñê¤Á	Â	œlƒ¼ìŜA¯¯Z,Ÿ³Òq<SHÈóNx5@ƒ^_ôÒɘ!ÈìÒÚ_Xjû.
"x}EP#d‰w‘ ­°MG…óYhDðúŠ h?G)²Âc,1W̄-°¼ÏgÍ"˜–ÛƒQ
99
F¢±J°h‘Þr|ŸÎ´D0ÅI ØY'xä”iI‚¹v"x}ÏÎD°=o'PË}òE¤á9Í/Ì#Þg÷ý^™½n"¨mŠÄ ÃÕÌbI$=ßef×Aßïå·ë&‚|C¬ZI£$qÁ"8ˆàeŠ`Жziç„Ò¯„ÕFè6*aW¸mþÊþâöhâ¨E”Bª˜ÄN{v	7=¢q
DÃ(Ò|V\9dÄ垇4ˆÆ¶ŠFi‰P)Ó@«CЛ8ÐÿŠ‚£ƒhlò¤¢,×4E± 1ÉÏwã•-ÑØ h +œ ”Po˜Zjå.Q46LDc“¢™cÜQÕ>:eðƢ՗äDcƒ¢abÔH°Œx¯ðæ’Z.…anKDøý
æµ%Rq©c´RDÇÅvjm?Yêý
!	X+<Q8*b5ðŽA4ÑH…!á©TÑ 5'ñk
ÝäjÀûl„¶jӖP†é)ð’©lÁA/Q]Š+=eˆJiÁ'ßÄyUWšb;ˆàµA$¢g*(§„5è;âæÙ]|yÁk(‚Yæ\: Ä!‰…j}C¼}ÑêA¯¡2¦±”i”74s¿ñ­ó¥Ø"x­DP‚¢Zb¨e)¿±“®*ÅvÁk%‚4lÛ`˜aÁ-Á÷ëŒÁA[.(h+¤ÆNÊ×O…Û¼˜]ك^’*l‘–§u”óAã°±ÝÓW-‚[–á ‚íêˆ@Òê¸ç!M]ÿ<±k+‚øŶ­AÃAü˜$BRé#f†û÷Æ"x-DIì%µiƒ©àY´öÖÕ­^ »ž›\•P^·^QEÆ9Ɯ¨hƒôîrÄvÄ纉­±Þ©õ‘s¨÷ëßì¶ÕkуؾÏbË)#ÌRδ2’FÀa/Ö¯±}ŸÅ6"'6ØD<æÒs‰A¦\óÄö}ÛÀ¸·ÆQª±
100
(m,dkŸ2¾ÕëäƒØ¾Ïb«uÒXê‘öŒŠ‘ܱÝÀÚú ¶ï³ØrOµ§…@ë2Ûúe€÷øXÕAl׌$” i7Æ2i7w¹ÒÕ	.†3b»5b«­'TYÉTrɼåJ];m{YœyÛ­Ûà°ó1eî)ňâL³ðº}b»õG¾b»žØR$‰ôZú ¨Ã˜.7@±ý£g\7±•Æ›è²ApýÀÈns$aÛ?´Øþþá­pàG±ùøãv|žóøÉó$ËÏ>üðçñÈ7?|æ’û#È÷ѝÑÁô£æЯi™Ž§f?Iô­Qô!ž.)U¹T͏æ¿ìì´©<„KB Ü8䬧RJxíUôJׂY埬U‹ÄVíVJ+Oˆ Ík)A•µx¡FsD$;ºw)A•µÄh£'`½¶!2,êÞ¥UÖ"ãڒpA°éÞ¥UÖ¢„6VsÁÓšÒà™óZJPe-Œ¦[Á%ŽG­Qœ†y-%¨²–€–RiÉCˆZÇ
›×R‚jG_9+Øb,5ŽœZՍ~ª¬…:¦‚GB!‰ŠÈ`Œçµ” ÊZ,¦QZD¡÷	·(¤›Ü絔 ÚZ¤$àÿPæS€²„™n¾” ÊZ´ãæžâ–§C¥¡¬«¥Uւ]:D{.°A0§Ÿ×R‚jß¾,y2–:p#-3Ý» Z¬=VH¸`i€ÿD#ítrª•dLQZGÚÓN’PíÜçZ[ڞÄ,Ab÷´{—T«-•ñx¦e’˜‚)Á¥Ó–¨²¤%Œ®ˆ‚råZJP­­Ô˜Gèg˜EQx)mWK	ª/ÉHÂ4]ƒbô‚uš¿ÕJ²`„vÆÖ{D¹Ô$ ÚYI,Ê0-E=f]• ÊZŒ¦4.5PØõˆ±ïj)A•µï±1Qì°&Œsé;mY‚j9Lpˆ+îÁJi–H‘7Ý藠ÚÑYgåžsص±«¥Õւ4&NzMA\Kk-éj)@µóE“ÎېÖ9@Aލ~	ª¬…sÐN‰m:ÖÃàFóZJP=çŒÐ‰ª"„ñ=ç_‚jµ¥ƒþF@ÒÆ@5™Á– Z£°†.á`z;á£îz¬UkKi¥óÜ`Š$´žÐl+KP­E&˜£€¬+A“™µe	ªµ/2(1hÝN‰º÷Å
101
P­$#Š,‹Äc©UìýÊT;úaΩ´Ú耴º’G¿ÕJ2%Dƒ¹¥44@U:I.@µþ‹ÖŠæ]ô)uHê¸e	ªû>DãÌ:ïÁ'–B˜®–T­ÇŒt\ÆW;©0Ï:¹UÖ⨒ÔkÎÀWŒ„Y7+KP-·ÄÑ
102
qÔà= “¢®ÇJP­Ý‡©#b‚ÃFC:¯Õö˜]¥
çQƒŽ=cgÅJP­†Áž"l­“à¤`ì<Óç/Aµ±Á–¾ÂVº¾Ó–%¨VócJ=ÖÑQÂÓü®NÔ Úw1Â#E	Ãé­£†)AµÚ¼ ˜mø°·RÁlwÙß/@µsß	/´ƒ»ÅÀyT¡‹” Z6î(¶…‘V
103
Ø£PRt2V‚ªßkàžS*<g0Ñu¶b¨Öîë€%`D€#evO.AÕ±¾@„‹š1…fëæ~	ªµ•ÂD£·AQtÊwÚ²Õ¾‹‡ÑõE0!à_®ýTÍ`±C¦¹#ÈG0íÈèÌ`—¡Zì€v¬hD‚)X«N' ZI&ppN¨Á2Réx÷$ Z͟n9ç$yôJPpÜqþTÍ`EPÁrÄ(£f;ͱ‹T¹BÔ`+1R@î:=V‚jم54èt‰HZ8Žˆì$¹ÕFHP`ܺ(¤U:P=îøX	ª/à±À)gÞFCêyrªÕ–&t#ÓH(ê	]ßi˜TS΃øxª5øDÜ묓KP-»ÜƒŒÆÍuD”uó¥ÕŽKR–‚ÎÂ
104
˜$ñžu2V‚j5ŒŠž@A’‚´²€‰å/AµÆ{MõZR+(ñ«ìñ Úw±Ü“À´±ÜUh}Ïa
105
Pu¾Ku{3ô
106
ÃZôq˜e¨ÖV*þvZ…æÀV‰UJå5¾Të¿HΉœ	ʽQœ(Ý­¿” Ú¸%ã¤ÁŽH®™çÆÛ͗TíYXe¤Õž0½Bež\‚ª%;«÷q´4àeI^†j£
107
˜)sŠK%eØ}×c%¨ÖVR'£ÊDæ	JãÐÍýTE òyðˆ¨ôˆ˜¬“KPm-Q+I€Ÿ`Vqö^P-ëó„X)q+£,æ”ñî]JP­ÓØP‰À,Šˆ'TdmY‚jk	èIº®^GtE㘹eªÕ–$ÅلrŽDN,SÊfmY€j5ŒTÂʤ†)hÒ躛•%¨¶p1‘r0Tàג£
108
%¨Öîc”>pTL®„E9ƒ¨UGáŒ%D‰†ˆe`2¸®–Tƒ¥Þ
109
èo	f<¡í)AµÜRŀ4p;㴌[ø ã–¨–[ê`“±¢^`
cÏl¼Õêd¸Ò:-~b
110
l‚ǼŽ\‚jG[­ÑD!J40I®r¶Õ²‹¨ÇŒ*Ϙ8‘û®ÇJP­ÝK؈¬“FKâ@¨r®Õ珐S«
111
@»y'c%¨Ú{'8·³)CL°ÐÝ|)Aµó‡ÃŒÀ>HC<?¸c%¨:ÚCÁ<ç•r<#Y֖%¨:Ò+À´ÊU¾E¢c}%¨:çÊ	ê%¥YŒmd†w=V‚jç‹0jASYì€KP›W
112
P­Œ˜8&‘c‘;
$¿“±T½.†5Nò且Š*™³:PmÆ%{%Èeá,{I%¨:¯…ÓÎGq ë=Êy}¨VÃ8›Ì.qF%8F<³‹T+càáR^¿Ô#ÃmǓKPm!²jEÒɜ“ýú~ªåüF¥ó9¤FŠ;…MÒòç/@µ’LèB$¸ÑéÚªtmK–äTËÆÁ_މiå&r+óÚkªeã&®Ágà”H‘–ŒD7÷KPuV']È£÷.zÁÎY7¨:¢è)ç^£™Æíuι*AÕў6Â괕!¸ÃO.Aµ|Œ3äÒNrM€ÛiÌ»›/%¨V[ÂÔW.Eó’GÇ;/©Õ®ñE ÚÀ꽶0%¡êÖø
113
Pí¬Ä4% F@NµgI¿w³²Õrì0èA0ŠDƒ@rt	ªö+™0Q[0x¨ £ïæ~	ª­t!؉­ÍÎ
Ò}®ÕÎ}²Š
114
A³”˜DtŽÂ• Z¿Rb%à‡‚û@\©–+Aµö„qÚ"ïÀF„õ9½¨Ú¯UÔÑ%ŸN929¦Õê1PQÚ2p (‹´ñ®Óc¨š)¥³,	uX›szKPíèÃ|Ã!
.ì„ȳ²ÕòdK™ˆÌJ$)Q)°ƒ;ÖW‚jµ¥O·Ð`†‰˜¥cÈCÇ`KP­¶$V€5K
115
jÄx‘×,JPuìØ0qà«HLڄ¢ºZJPuF·@4F­¡£<“6¯W– jž,‘‹˜Km)Ìïh‘™'/Cµª—#j¢Â¼µã0¨ZÆ¢!ÜY=0U]œk)AµzL
116
f<ÑÊÁƒpÑt¹ÕŽ‰éö0ÇA猃7Y• êõ}
117
—Si3æ‚t:¹Uçö(F{àà¦R¥}Ç-KPõú>ÒhéTÀ8"
118
Žq×c%¨VƨP""«¤àħT>—e¬U¯%EDÚ̀ƒ:QËl‘Pí¬L·ce¡«£u†)AÕ¾˜&JF ޒb¯1°ÕNÆJPµ¶4±”á¬=¥È€?”3î
119
Pí»° iß0¸.ˆ/©ÕÖBaV kÑÞsÍ»9JPõ
120
/‹Â弥܉H8îF¿Õj˜ˆ<Ç^Q˜ÔG‡m×c%¨vôYÀNP뀥£c´9²Õjþ´p•sYm=òç\¨vVR’r…pTñ”Œ
121
.^7+Pm-0³“¢²˜EMÂwãR‚j½$”rÐTÅ œŸ\€ªùI©Ú)ãMŽˆÁÎd>¶ÕrKDÀ‚öà`ãÁÝB&û•%¨Öîs’¶¶"Y„b¤ÞÚÙýTwA½N»
÷6¥"‡¼–T‚jçs:‚: «Z"ïƒÊó¥ÕÚJ£ÙŠ9xŽŽ Úw±)…ÇKöÖy	î0ÎÞkªÕüéòv'ÀØâvûtK¹*Aµµ¸ÀpPÂ
çž÷|¬ÕÎ}–®åÐí鈪cJ%¨ÖŠi­’ŒÐ/ŠEE\Žô– ÚZøÙÐ`©)틒†)AÕù–àÅd°8V—’ó)¨6o¨$†‚Ù`ÀïÆà°vøT7Ž
åV! ĈLxŸAT€ª×_˜s0·Ñ§%|£éfe	ª®Å(dºJ…[¬÷ÚåZ–¡ZÿŃÿã0è‡,×`ås|¬Uû/Ê:ADLÛÍg”æJPµ_Ғ„Á$™\âµ	N.Aµ¶’"€p%gŒ	&g— ÚÑWd‰{A•b˜¥åœÌ“P5·$ÃÀ
122
 íÚÁ äsH
123
P5·ÄƒJg‚cb±õÄg¯UçZ[î,vÈ`æ`~ ˜On)AµÆ9nˆçÔ++•¡NÔ ÚØEÀ*h&žcǀz‰ì¿” ÚwñÈy `IŒB>D-:
S‚jGGCÁ0Íud|ÛٗTÑ-"†vz¼+hŽu^­.AÕÞ«IÒ^p%ˆÔ}~ò2Tk‘Ó‰€Ò§ÌPã™SçÝè%¨šÁZFò2pÌA£ àz™Á.CµïBPÀ)äu{ÚT^­.@ÕY?‡™"œyJ¹Ìg” Zͯ±µéÔ7pR)w8í
124
î4ª¥¨C­#ņ!ä]èfe	ªö‘UrQaÚGð‡¹·,AµóGÉÁÂsɍrŽšþÌ®e¨š{E(¸Q€v›meªµ/Lè(eJwG„+Dèz¬Uç18—JEm@v¥'})Aµ¬O¥óëÀߎJIôNfÏ¢Õ²‹ 7ik
^±È¹Ö%¨v址„2iÓê‡
125
[ç³P-ƒ•Ê¨§>¹[^ÃélªŽ¢%Ø8Pp˜PãòjBªÎ»H÷-y‰`ˆ9ðáŽÁ– Z_	‚5šZ¦môLö¾XªÏÄ
126
渒R+Š"LÃ쉠ZIŽNhŒ˜õàq-¯fž\€ª}1/x`Ô9– Äˎ]” Z>FÑ<-®ËÁÀæÌ®T닙`ž €˜â`F,Éùü%¨ÖVB|Ð¥ðt'“ËžE	ªŽÂkê8Å.xdÌñäT;_¢~âÓéo„ƒ²
127
’v£_‚j£pB112Rz‹T@4çô– ê•'‰
128
‚ÝrqÇx§ÇJP­æOÎ)µ–)ê¬ôŠâ콖 ÚZ‚EhD€ÎñB#ždWKªåc
129
˜="=R^¦3š:ÿ¥ÕÎ-™àQíÁo”É#îæKªÎµ Ò‰–x‚é¡òªh	ªåü–3*8r‚1	íU$óäT«Ç¸n‚A… £…ÒVä•÷T;_q`àÁ¼‰‚…γ(Aµln:ÈD‚Øbá,7™õ• jï•X’ £\΁/Aµ£Ï01(l¹#NaLL7.%¨Ö"ƒW
130
Âj`b#åx_ùdãTÛcÀ‚Àÿ¡ «{(¯]” Ú‹A‡%¨Fì™Î’÷Š– jO<bÆ]‚“J„¥>ŸÙU‚ª³A¿ƒq£¹²V
131
3ˆJPíèJbéhó"g©• zmIœsFàH“‹"}¿»¶ÕÖl8ì.@YHÉ ó»T[næV¥]­T§:I.AÕY70¼ ³”ç)`GúSg—¡j=&x:%9€zw"¹ye	ªåcQ+B8¶Ú ¬Å(¯#— Z<Gª,
&:Êø+AÕ«<X"‚°@»=W¡Î+AµÆ€<1é”t“èÉ»ŸJPu´ÇGRNsȜϧ êl´4zª#3$zÝè,r	ª}c"A
132
KKAr	HmÞ][‚jka"&˜^C™×´Ó–%¨:¢H… élÉÀ‰7àzeÎ_‚ªýJƵfQi§2ûØxª}¤ãÐ'"Ràx\Ç|BH	ªµ•Ü-ªL›èª o¼Î™ö¨ÚG†y-€Ð¥#뙦Ìò!)@µ™ñt
133
#bÊSpŠ1÷ùìŽTÏù©ñ†§”GKM>»£Õ®&ӑFø'¸+wïR‚ªm¥Ö@ìµGXk™ ÙK*Aµ=Æ8laFš#“öd/©UgªèplˆQnP÷'ƒ-CÕD„†ÀœGRóVúóÇ
134
P-O†ÎNá¨|ˆ
135
ü¯Ì”JPm-œRƒ	Ø\Ä S—¢³b%¨ÖVbëÁ1ð'.-A3救T뽂WŠ—¦4%–*Ÿ [‚jká>PŽA±«hpÊÃ9j]€jõXЩ¿Á!"p‘vÔ䬛Tí‹	«¢%@¸%#b˜Ê’T£ÓƳ´‹Zô1º|®Bªf}A(H{¢“ÉûÅTÍ`ã’sX'À榺ú}KPí|I'@ YPŒ!º¼ƒ»Õúbœ(`
ܘÀ…=é£p¨V’%ȶ1åk[æS&j§ùKP횅e2ž––\o¡òÉÆ%¨–ÃP^)‘@P‚…®]>ƒ¨Uó1°…J`æY+šwr• êx2è÷`l`BYãÐá>ž¼Õ¾¡¬!¨DàwàßQ™w– Ú¹O
0-ÁÊyA)Ë;ìJPíÜO‰3Ž	(]­0Fý‰:%¨V[Ò:òÈc
üs-r&d	ªõÅÚÓøµÁ`'0ôO>½¡ÕŽèZŸöÓD±5RÛ|2X	ªÕ0ÎR…½2T1FS†%ëïLY†ªó.€k¥géœ1Ž¸9¢X€jßÅ2”怀wê-Îy¨vô9
136
>݅…uŠ³‹rNo	ªÕÉÊJG#J››DdAR“óú
137
Pí¬„naXó(Hépa™oe*Aµ’ì€Õ·óÂ1’›ˆ¸?‹`ªžû‚%O+íuZäËsªÎ‡I±ïVL
wÐ÷ˆåHoªå–À±•
œ)ÎãJº¼[°UÇ`mº|CIIÆíDoÅ
138
Pí»`,<²éáyÐJç|˜TË.@J¤AÐrŠ¸å6GH
139
Pí¬”1Õ…µÕ
140
enY‚j¬Ã4¥pH˜zVJc­ífe	ª}§ƒCé€bšx‘3ºKPíÜGȜHjW"ì¤Öù]JPulP\Ù(À™Ž‡±Ë·2• j¿t®Wà:8L¯;Ç`KP­_÷PŠ8$ÌÐ|¾eªí1AœÄDî|Ԟ³KP­Ý§F
141
®ÒjŽÂ@ñS^bg÷PíÜOáèÀ"
142
RE-¢3ùv¹Tk+#	é®2­¤à¡€"α¾TëK×Gb.PíTÖü%¨vô)ó
a¥uéÒÊnôPíè«tLžv·KFŽÇ¼›£U{|^F	K'™ïò”ôøe¨V[bÃ9¸ÑpšîB§4ÇùKP­æGÄXMªD½"“Ù"— ZtÛn"Œòt€É9ð¨V[Š”²ïœNw`¶·	ù|ÎUªûœ e÷ÂÇFXé|?rª}­HJuÅށª’àÕÙþ¾¤e¨–Á¦0;°aIA\QKóºYY‚jç>k"óéˆQ†¬ðª?á°Õ®¾EWR%ÿ‘‰´ºò9$%¨ze¼9
143
144
$°`”Ë«Õ%¨ö]Îs­ˆ„%¹ÇJPý:2tI:ù,ü¡>~	ªeãFYè†8”a¢¦œvv¿UsK$ț€q:1‹ä[eKPõúèZš.ÅÅHRânÞ¿_‚jeL	‘.^)$S)ÖÚ±¾T›©’ÎÅ6!÷k¡s¨[8¦Õ¾‹Åàe#Àþ*"i¤{x—¡ZI†quÁ)E-‰Àð…òy·`ª®ErXEX"ˆl¾e¦Uk~+!^ιB!æ½	%¨V'GælôÐ'0·“ióÙP%¨Ö³ H$wf„Qi‡aN.AµMcºæ‡º¾pÄåìôTíñô¤u|	M•TxŸ×_JPµŒyðeDŒ+-Ӓd>% ÕÚý´a#ÇÀëf$ø@;I.AÕك2Æd¦cÆÃA9ï¢U[dæ°uVi‘€	†ç»lJP­EvÐïélªìVýNáT͓¡G\ºfQž¤IæS4KP­_‰¼Ï”zM
á<’oe*AÕk)	ч`šL Á/Aµ2F™G›bo´•HŸ÷¼— Ú¹ï=ÕÜ}Ё	àݤ?ªUgA;®¸³>hä12ÈÄ|cªÎQ`AH˜\>*Sݸ” Z¦¤¢“„kPWiјŸïà.Aõ±>͵ã—f0AzïµUGFI¼ÏޖóÆKP­N&h=XAëÓ]¨Å¼ïµÕúȑ8áŒC.…[6Kr	ªö+=	!§۝¡N畑T;÷cH7ŸË€aN0J”É«<%¨:k¤š¦‹Vµ×Èz›{¬Õgj‰Dº§* 
145
úæü±T«“	шëà¨TGYΈ(Aµãâ£JgdKàE2]ƒ*û½	¨ze´ …VZ&F½"¬Ó–%¨VÃG¥Ã[•kCeÇ`KPíèÇÆBéh±$—gÖW‚ªsGA„´ÖÞÃÐh9x]9wtªåc>z–2R@ïbO•À9CµÕÎJ£-rD§4‘ÄÁæ»Ò
146
Põšxºa[§ãñ—ÔbœóaJPõª(lm0—é,«àÌ¦UgÝ å@!‚±Â`~9¡9>V‚ªßˆŠw\hdJ´>æwY†j£Ö1-â3‹x¨!¦À:S‚j#$ŠQ£>RB˜<{|%¨V’nyŽœ‰
147
Ó0Ç}^ã+@µ³iI(¸@!
ã.ò|^_	ªƒmJ¹[iÅ¥´žOk,AՃ—Â$ðm¬N„þŽÔT+c$Rd‹EŠ¼æ<€±ïd¬ÕçgT F’øÎ¦ÕŽKŠaÁ HLèïM(Aµ=ÆX]ÍTP˜åÕýù0%¨6¦bZ*–<i`p !ï²)AµãÆÃ`©N#M*¯‰— ê5¾ôT ‚¸Ï0“oÿ)AµzÌ£t´˜& ´Lð9S¥U¿‹¥8Fàa梎ÙV Z³éà7„ŒAéˆ@|Ì2V€jùXÊs¤2eËT¦Õyå½U珑ȍ%%ƒâ+áúü±e¨V[bÌðé
†™¡Ó
	¶,@Õ+#é>0ïÎ¯·¨_Y†j=qfL:†À¸{pŒÌÅT뚀V'$8œ®C]¸ó±ÕÎJƒâ<‚š2LGÎƒéfeªe}mlÝ/¸U!ÂÌç)• ZûÂT¤"Ëè°10
;ûR€jß% b˜¸¦Ø1îøX	ªæ–ÞX‚ÒéB!é¨ÍўT;_,'@è"—6ÝXáŒt7_
148
P­ÇGS7¯¸•
149
ó´Í5ïY†ª#$é°GGDP&]RÈ\ö,JPí|I‡YX°ïš`¢¸7*Ç-KP­$SS–¤à9CuÞ[]‚jm%u,‚'̹wÒGÌ+ÛýT˔8wƒþSél×ï}[†ªó.„5‚oýA°Âýž‘TëW2ã-§’ÙR[âQg‘KP­ŒK§ˆp(".(xu¦¿ñ³U¯ð² Òeh’1™N撤›•%¨V[Frʨa-E:;§Ó–¨¶Ç$2:oà/ïÁø¢¼O¼U³>LˆŠ”cM:j,ï)Aµ|LsaÓ6‡t·a\»œ
U€ªy²DŒ$!5ž@I@ñMæÉËPí¬¤ÉA~1§+‘O;)AµïÍ!qd*"èø|ÿKªµ•éæ‡Rþ!8 HL>ªÕk`‚‡‘áBûþž÷T+c2e„Ç䛌¨Ru’\‚j{ÌÅ LðU	ŽÂyÖé±TçÄÀ±·Ð= àÁcÍ>r	ªÂá˜2ш/˜"ó	!%¨ö]qˆú”%l²^³œQ‚ê£ÖélT—½DëœEP‚ªÙ¸'*Xoè÷È(
150
9׺Õڎ(71ÆG¨é¦nôKP-‡Iw +`)ôãÐEyOb	ªžû Ù¡J4>Åò3‡)Aµ=æUÈ`PóÐñ:ý˜}±Tû.Ž§cˑL·08b=Í玖 ZςipäA`¦ˆå2bÙéäTí‰#å2ðßHœåA浤T»*ê‰I7È:žïe¾ó±U×Âá†3†08ۊ¸`s-ËPíÜǑóŽ½EŠQÚè|ÃTªÎ¤Yp‚¸t¦3æò½Õ¨¶ÇBJ×$æw::Å#fò	T¨:‹€çN”Xb­A>ŸvR‚ªm¥b:8#½KǙ snO	ªeÊJo‰qBYÐ'"‘üŽ] êÞt‘«·	®±àÞw£_‚jc}„[¼„h’Öt³­,Aµ2&” Ê(°àÜfp>¬UÇaLºËUJ!¬LGŠ/AÕ^RÔ+è$¼PÊ+‘÷ò ZãӅLIB¥¡U6ß)\‚j5?ŽÞ;¢4t‚V™¹e	ª­´ãœ3“N´SÊÆ|B{	ªÎQT4å1^»ö#tv¿Uï¿;—6 h“R+r®ÕÎ	þ/q‘+#‘D\«l÷KP-çžB’Z$éÔ¨=ͬ¯ÕgÝê¤Á	ÂIº-kËT-É"uº•é¼)Ï@õJ™%yªå–Ò ©† g0°IÝïy/Aµì!K<.¤¶ÉÁËñ±T;.(‘œvƒaΝbýý/%¨V[£ŒDc•`18ÕiËTqvÖ¥x>eZ’w
151
— jÿ%PË}_i¸ANç{xKPuA’Qd¸¢šY,‰¤ý½	ËPí|q5Ä
152
úÀ);ßÕR‚jم¶ì`:rÀ%g;{I%¨V’qÚ.…LÇJì´Ïû_JP-»H7p;åÑaÅ8E9¾Õö˜HZ,»DLÇ óÞêT=_”å:eR,(x+’÷ªËP-‡±Â	J	õ†Ù¨¥Vù€T§ÄÒm4öš²•Éw>– Úù¢£Fš€}`Ä{…³æ/AÕÞ«¶D*.Ó@RD,?{¯ËP-S’ú´;I§e«a :¦T€j{Œ	N)àÐE͉E9Î_‚jßEB¤G4ÈòJeÈÙé¨:*6B¢§Áü³)ڞ³¡–¡ZI§$ån9%€Ã#ÞÉX	ªe}È2çь…*÷X	ª•d¦±`pmPÞÐFȶÕÚJ‘n%Zb`–¥ižc°¨vý%št¶DØ߂N²ºõ—T½òNCX!~¶“†òlÅJP­ÿ‚-xs–'‚¯œç¬›T;÷}Hpsžšý—Tk‘9Ã$’J13<ßcU‚jg¥NGm:ûSÁ²9ß²Õ®%©~0ÆéŒQ“ºß»¼úV€j{ÌzOÒØ>rŽõ>ǔJP-秌0BªÁG¥ÑŸw£— ÚCN8l°‰@P1—^ä“ôJPu.÷ր7¤A D‡XŸ·U{|àK=Jw®ŠQÞËS‚jÇÅ¢… á̔ïà.Aµ2f0èuUܘt‘dŽ” z/‰¤™JCìíÂmY%¨vôv>&¯c[ÖÍýTk_xr^KDÊÝkwºvö¥UgBz=» xº#›£=¨PË­°š?nþçá÷ß=ÿæñ“ç?>~öã³TûŸÇ#wö…O濵_Kß:ð£XøÚïþ˕þ¼1¯öï»ÃÃûè€?Nññž9ðûaòʸÉøèÁÞ¹ë÷V0Ö¤¿¥àí߈Ì~‡Ì «L0Ìk!àïaÉ(û—màýÞús3rMIZxrÆsé ´x>{™&ÿ}M~nÜþ±³9p4»éƒ½›Þ:œ˜¯L3>páÃû§:yù8ý£}p
153
?‡ƒé\ˆN<ò)”?:xñùÂ'.͖Éôó?<0¯ÂÑ¡q¡Ió¶ùµÏ£ƒýÑAhŽ¦~ggöåæ?ŽÇÓpǍࡅÏ?j¦á—éÝù÷ÒOši;;óéߌ§Ÿd~i>ýtþÄWãc»Úb}ú4•Ó?:	ÓãÉAúÆ÷ªº3×4¿·ÿmÿ3ëµæqzí…úÃÁñ«æÇ7‡¡ùµùj잁œMï¥=>}òäxÿ^ópdŽî5ϜÙ7ø;üsþü«}ì{s8ÿþŸ4¿÷MËÿ˜B%>Äùû|o&/›ôŸOV<`ÜÞxò|Útÿ(پ̝¶õéËÏï5¥7/8]\ñÑ£ö
ŸßÝi‹»Ó–y÷^*áN*ånW̝y!ðÁì+wºo6¿þ¾ÜÌÜÀþeŠîSí,cV[¡CڇÆðT0¯>j^OF „'?¹;õ^Ú¯¾MÝ^ûÎwOAé¦@Ȳ³ŸÂ$ 7»‡o~²²0•u‹‚GW”„t­b҃wn¦Î:·ýðîªb[©_«ÜöÉõžÍ£µJž=:+z¦R@XSÎ?™=7‘»oiÉ|&¯×–ùÃk¶æ¬J×÷Ù£«
154
ê´ÎZEuŸ·õ3·n•Ë­ÿýÄo3»r' kwO>ØÖ>ûò\¹.™ž~Ž†‰™ÎÞdyúwš¯Už5­\œñóŠÛÏÌTHRKe^µ÷û?û¬¹s¢xsª:[¨Ê<HZ'}×ÎþõÑGé3óbþü£ýd>>í‡ó·ŸÏd}öù¢j|[coÔ4öÆÓÖt²C>pû0–Í÷c÷²ýî_fÄb§9³=r™_€>üà×?˜¡½4]€<ݤ;'mÔü<šLÍ~“<æéèÚãWðøl¶Ìº#µá£ÓVáÕsãÒۏí='û坙Unÿ›xKÇ)nÂ4K!Œ›wè³[“èNuå-?YQõ,WÚڈ…·^bu-™©ÔŽY)ïÒ3ó²ù6Íi]]£æ–éD«Êäk©µÅ6ûÇKÄc½÷èxéB]÷æå­û2áŸÇ|ˆ%™_û*[ž™ô‰¶¿Ã(Ì^?E:
155
ÿγ3ÔËë®Þͨ쮙E®ì©Ù—ßÞSÝ?Ú:ÿrÜôNÑâB½¡…ƒ_ªyöÌ'¥r“ã¹³“3Í£½Ï®àóíŒþ7@§?i>›ýþÊürg©ÖôÐpeNuÃìãS¬$‚ó³Xòè3ôÉèÓ'ŸŒþüç’×0ŠwFÍçŸ-¿é¼ðÂWú¶·ò3#.'iÐY
ú4蟎>ùG¹AÝOÇњó;ݾŸþñ÷Þ=(ðÀôó{ñÓ¾ÔÇÿý×Ǐ~|üÕNsç`<ñ¦«âîÊRûï?|ôãß~×4;]û‡æ§Ñ[Z·hƒ'ƒg¿ÇcX?À–Ë۔Ʋ—…Ipã‰?K6=†¥¸qzTáíÑë1¤—9=OþVò§“ãp¦Qj‡ågxéñäÓ¶µŸ/uÃ'g?¼ø¦Ÿ|øAçŒÞ¯$yXyøä«ïß	¿ÜÝýð´ëÑÌíŸì~¸,M³¿Òž¹75p›Ãö¯;³úzo´îÌ>~0+ûIøeÚùwæÕÜm=Ü²Ùè?ÿêé£çÏ~|øÏw …]üwn¦ß|م"?ùjOˆbqOþöÝwóã[J,{ÅB~÷íÃg땺Â/(ûìÑÃïþp§@½Ï®ã,Î^®èñ̇má+o«d5½^YÇãX ÌÅâ¾ø×wnòwek4¹À]O÷ÕÓ'S!s=ҕ5'˜³g¯n°´þ÷ʌÀg›ªãìõ¿ô©<µþ—Î%Öÿ.ãçÔú_Z®ûp,*ÉHç¯~0sŠ~8>x¸¿ŸésAFŸ\ùâõðsîŸÒü?¯ï›ÃÑǛª#ÍpÎϘÿèôú?—RþKÃ7Հ³~þàó¿8þcæÚ`#u¼MÿÌNëAð ÿ/ãçÖ(¤U'O¿zÜf$=ÿËsA¾$”ô\>RŸcüÕãçê!Õϑ‚qCè‘~(D¦7ïüÅ¡Êföeçù÷Ï=ÿÏÇ?Üm~û­¹“?}þ͓¿=zþünZ„Ê¿¥µ!š>™ðý·OžþþYÃfßÏO¶ÝMéVß<zԎ'Ó£ææBRËÍƍ' sûoš#0‚¡¡ØÉ´—YÒV!3åƒv±Lâ˜)é³£d“C”Ó¼Þµ[RÇ\Åø—æÿÌýۜxëü'ätþr˜ÿ—ñÓÍÿ¿>üáÙãª4@ÅWß'0¥”µ@M×\îø—æÿx¹áóêp?lDœ=ÿ© l)ÿ“¢aþ_Êϲ\÷Ÿ<9HŸ|0[s{fÒü)üBžãæ3øôæýf–Fá¾y=š„݃›³Ÿ™W¯Þ4ÏÆG&ôïá ùf2Š1¼¹ùÉ,9àt™dVæÞd§i@HàçVó—ñ«ÐLŽŽæ™Ÿ_ì4è‘
156
À/Ítš2öÌÏækWýĎvÌdû}˜GísÁ7߬ª™Îj†×žŒœ9ØÉ­þr|44?À·ŸÉ¦“ñhÚü8z&Gùã'áuó?cèÿ1/Cè€3ÌþÎòƒß‡iÿõG{Pù‹qóèØö>œî›ƒ©i¾œÀ[­z6Žùך&
áNipš¦í_èàüAÛ§³Níª=UÎÒxæRèr)J­j%ï„æ§Tl¿eÝK_oš¿ç×þi±é÷š´ñ¿màÂ}£R‚Þ›Uþ÷Uµ‹Yí‹ï4¿¦÷H¥÷‚õû¼Š¾|x,¿æìÍ¡¶…Oºï*•?üZQhƒœµä$$‰î86XkÕ읒óû÷ïç7­˜bóÏæ݂™m^5“Y…Š’÷lÚ|7>5Ìď@~WJŸšk.q:JRCТ;Í?<Ü7oRÒÖRˍKóc'-RŒ^†æΫÑÑÑÝ9öàÁƒ¥ö.–Î亥¿€×÷ÍѾyÕ½ê…ôéJc~k>R“SÙ4Å!J/5&馌τÏ
157
%¦ÜZJ£BÛßÖÒ[Í×ãýýñë$‘Éõoö
ûIé=[øêGϞ½åî7‚gn5Ï@ŽÚä™i3vî©w|¹…ù¢Y¡nS9Üº^nŒ
158
ßGò>¡'çÃÍOKºzq>ŸÔ¹Y+íÀ׺"¹7ÿ·ºÉâ—ó§¬Y©Š09=H·š¿NÆþØ==<žÀ“GÁç™8š†W©hîãÃ0£8>Ì5þóÚ:š¾›Wø—æèe˜Z³¿_ø+}aô¢y¶7G¥
159
V¾íôÚÃg¾ý¶y8™ö³¶ù-µ»ûñÇ¿ýÿý­ÿ82vøóüyYgb–;«ù<mQŽo÷}àk¯ÍQã&£C`¯>#öMcš—!4£ƒOÞ¬œüxn¦r]†Æ%NdŒ§{aÒ=ÓºAGÁ[x=šîº	&åj𠻇z)tÆl~è5~37ž™Õ<<Ájò—ÿkÊ5í‹ÞXù
160
s[·’×¾Éèh/­éîœî×£ªxeþ1ž4ûÁ¼8^`sC5O²€ÎlµX÷Žíï,9¹å7¸å]õ:s³y|0r všÝ›íhø‘o;þÁîî1ôán7Á¡ÐûéÁÝ]›Ú·»;…¿4üóíîäg÷Â/M8r³gA>ýÇ4`övw'‹Ïu/-އ&ÜÞ½ù—ñkÿæÆîÍf/$qþÁíùCÿlwÁC ŸŒS_Þ¾
žúúöíüÔtîÇы½´5±¹
ÓâþŸîüÛ핽07³`éF½šûqÚz|0«r¾y%ƒÀâÿ¾2oš”¢EñT;S6&}3…ÒfþB™ÚΘMQ˜³?>ýê)áX'Eû€xl/€Ï<5/ŽÊ/@èi­sè¾7SèÎ7Àú'ÝIî#vŸ¨“í<¹éñ¤}̙¼éì´ÿÍÓ¯ö÷¾zøðû‡ßþÇÇýøcýñw0–LJü¿þß«ÿ÷âáÇOãÇ<ü÷Ïü×ÿ•ÿ#žþãø«ìßþàÓ_Šp•+‡_^í‡ÇÜ‹/Æ_>üê賓
3 cÀ%†Ñ$ŸyG.õ´ô¤zä;·õǽ¤#^%uêŽõ
’žîpcÇ?­7
 Ü`'ɄÆqÐþC?ÏÇ8Z©ÇÈ\oþ돿in´­r0Ž/ÃÏ @ï¥îÎN	h×G{æp‘üí(´m¼1_³NMi'á*^¤+·V–îF·ß³Ö'~o%éÿèéß~óí“æ×_v	L>¢ÏÏMŒƒ^‘}IIž{9o·ª4š“?å*è{å¦Ë(R¹ˆ4¿/“˜ÎÛÊqãý1´ýòõ׏ùeþ<íÜ˦Ó7Í,—§ñ“xÔêa᝭|Î_c& NüO“]2'øä+IÐk°4¡	Æí5/Û&OÑ[iË؍LúfkvLsp¼¿?KöXÙ Ò3û)„/–™Ýkùì¢{›§ô ¾‡¥·Ê-~ØÍóªÓx5{ã{móóCí«Î1½Ÿ[W	,ìËìÚÌÞjÏý¤ÞÁ]äÒ;½Çz‚…î4|¥×JdÏ?n|ºJÐG?G.t†tþëNC™b]•IÕµ$kÆqOLíhÿþtaä[ “/F?C3á;ö&ªdÛ¼í¿à«ãWf²ˆï¡ãv>J?­X4Íýãªù/³ÿTSóÕäAá‰gÇ@›[D“S f8cŽ?Œß˜ýæ©yyê‰D	f¯ýý·§ Ã1€û	b
161
1љؽÑaÛZìŒÃ?^|«ûÍÑËãÜDà®ßQ;:QGG^g°˜³,±UÞE¦Ü6qØk`=@èÌ&0FÕ_Îh>£
z¿ÜB5é15¿´rü€ucӞ8…¦<à݇sþqB,¾K#c"¨àƒ14ˆ„
GÓÅñÿÒ¸—LJ)~
162
Žtzâ‰9poŸÑ=zÍþ¿
¥ê>ƒÿ¬Ö}K‘‚ç¾<LœæCƒùÂ;Œ4÷»ùFtofòÿe& N ø?Èn˜L@¿á_ έÑJVlü,Âþ‚^<«d‡âõZm?Q9˜‘½n›“™7k9žñUˀNUOw€õ®ªþk3íÉM󷃗ã× õ'#cÁLïÞ´@;’ò†îå¢_œ:a§ùq|ø(í«{p¸8œIK$[øhƹOê_šÏšïǓðÔþ#åÃíÞ¤Œ·ñîR=鱕qµ\Ñý5Åñê‚÷9E=ùø/i¾|ú}IÜxÖíìMô”dúz<ÿ÷ÜÞô=õLî¾É;Ý_p„ÀÙkRT)„~¹þæ§Tó½Tå½Uèj’µÍ*¹—JŸÞ†‹Åg"ñh6µ¡ðýUn-¤ÇDúo쏁Ø7Í7{.RÓîÎnþ4ƒV•8·‹û`&Ißô’¸ï	’4ÿ%Ž÷}ªúó3Ÿ\QÝ\wd,=ݹR¾=À!92m§Ýþ@ôLË|`MO	jK™ü’/ë™OÊ
èBRý{~×n{Oÿe»ûàÅþ›Ã½»E´…º	åÒI7œ?›´™oÚ5˜Î²÷¾Ú윊ÝižàFòåÎ}»ÚÝQ³ü½…ÐõîÉÁ4ÂlýKØß|=žìû³yûI~n¥ÀuažÝ›_Ïûégîí‚+¼»kà…? …vc³€$þLáÏÏð-‚)6ôþ<?ßÁŸ¿.‚¿0¿#Ôþý·ÙúÃí0—:Ÿy_Ÿ|{pjÌ^òó]ÿÛî/ÿ¼¿ª$Ñ­s%ç»Nðй!mf{ÃÛ!J|·WZ·šƒ0JÁ¡Öl¦G`~pÁ?[WqÑÀÎÿ™¢³'`Œ;øË7-émë8©€‰ããÉÂ'ÍIii¾Þ¿êõf¿U;Íâœ|°-¬ÕHóŸ[)¦ó×{·4NQ´îÙ[-˟¿ê‚=›#˜?Ø>¶Ð
þ{³øsëDÿ¬
Òń;e§¹¿;µ&'ýî»å~ãW•Ö…#’‰Ù±´9pr¾fÍÿöåB%æKáIÑ)ùYTfQÙÍ÷Òô=ñÈîtöÐÉ©¼0Ö'žÎ¯Ð"¢³	_ƒ¢=aÊvo>~u8E‹ËÿN~çL¤cåÒµçÑÞøÕÌ<õMz´?:<ur‰Y˜V5kn|>ïMût2‚iԇg»t“¾oWo+’Ü®ªAž
163
Ú¶¼áT¡é…F9:êâèªNã՗;ûþªvϗš^&´scÞëòd—Wª'Ôë§Ó_\èÊUßÆo«¼›œ'ùU8£ôùlýxàäh:_š»×L¿¤îÞjž¥©”c½Ð¶kÌË9m›N¯_ß:/ŸG™W¶n>ûÿõë§OÓHMÒh¥¥«½ññ¾O¸Ñ‹ƒD”NõEî’y¸åõÌX`õ0×@FÎ0)]\.íÃjðšÚ>¦ÙÔîÆZ¬­¬oɉx[¥üd¥WØýÞy¥PÈÊ"Äb<1e
͂Ší1`ãɋÓáÄù¿fO¦èîۚ(OÄ+o¤‡ç\úd攋Qúëdô3¸V];ډ{Â1ê—o5ßìÁ÷?Yaz»yTèA;@×?^~ɅÂW6L/¾ß;•~#íÇHîN’•oSȦà=0¨‰4LË°²7Z¬4¼S­a·"x±‚W0J¯ÞÜ_˜·š/÷m“˜]¹¯n´®2pŒc˜`G®W8ý€¬.îQŠÅË;Ãv’ꎸ߬Ùs•2[ËøÈàNâ{6ƒzSñ‘!­ÞI¾ÖŠÕU‘ù³àãÉéÅ}ޚ¤…:>½|ÞÌK¹Äœ‰·ßï_õÓÿ³óÅçó&®úº8O_ÎÜÎužê•¶Ã¡Ìáêls¹!Ò¬nÉÛF´™éºb±¶¶Ø½sS²²ÉY==<::~5s(ÒFÂ6G,9£ãýã6e%—º{“¬´î7˜ôõÁ/+kšë›¯“õ]ÈÃØÉ.ÿ.Øñg¾ïO<v¦û/;×huñ_ç!^]øü§`»'#æ{2û2¾ÌBñC8>êñ·´­£'XÛ|•ñÞ©Ù¸“$¯ûp…ï+;g¡/ñ‹Y™}i'ËY%´²svoŽÒ
164
¼uL¤¿]Û¸	¥ü´@Úó#­?Ö=Ñò¯\ñŠ,Ùù»ó°Kǧc -—¾×óÿE,{÷xf7?µ¿ŒîÏ]ºUºPv„š‹’çwp¿õN1dB‘±ÌW§trâ㕕Ì	Cs;YƒÛ·šiÒÑ­§ÕíÒ䖣¿½Üû·Otþí¥¾¿½~×ϧÞíó¿ýŠt™©ÿ­æéñô(͝¶n¼¿ÜIýѝ3° PÀqnîÜ]P*;¼×ÞkãNæµys£w…1é×Ìö¦Óݏ?^PöÃ4¸ÕëîÄOÎnÍO¹=÷$½kÐâgËmZ€S³úßV·kõ uîϲ$œ„%9X_:è¼R°²üÂ(E–áÓép¢æ^Š­nä\!uo¼;¦v
œE. ë›Û³Øë²w2{äv×!m,¤{*0îAûÒaá¾ù{÷PÇ=4£,«Û˜	˯mHl§
.Áû¦÷Ûicað[¿¬ÿkýŸ~¹w”΄/„ÄWª÷ιéôûé@¡vØá›Óɛ®‰4œúø‹·ÙÎ»é*È;)$tÀñK®J–ï¹<ƒ·„jþé¸=ÉØÏÄ/›ž¦û„󭆬ó~ÍÃmü?LKÂoëݛ“`|ZPZFf’œ™íêÚôIáJ¡¶¦·rÀ;¿å§<=al½õ…èÊêRp??ZGDbÞՋ³$IG;ûÒän‡õúë¿={údÌâËðûN×Y«'}çiütªÉ;à«A/Žü½›Ÿ´ûÇiÙïuhüøàv* €ò¹3>H	 ‡ã£p·]´üÿ{[öQ»Œizu]р­`î5váe~mtÜÂDÑ_0·ííüoW6Ÿ3Ò±öÕtn÷¦[xâ$RîJÕï2ù
¿YsD²7ÏמriŸãÖAΑä~Ig	&2”¿ñ۟“O9r.?þ2„n-~¡’Ö­O÷ú碔ÓÉèpûS3]ȊM;­ÓA}ù§HY…j—žþ­O(èTV¡¤i¡¶-¤f©‰¹I™¯üží¾×a£×g~×å:É:Ïw+«©¯O¬/Tèö[¬¥Qèϧ±µÍOŠÎ·G§’*–tëd¿ûÇ­6Š¾ðÔéôŒ/q²¸¾´ïåôŒÒ–ÞûDq}i?NÌh¿ðš«»Hœç?ñŸŸÙ˜ÕeËSË®''=ÈöÉwXQŠ:UÊòä:UnSx¤Ø[}Ð|EÕúÔÚÄ	Ô¬ÕúŽíŸêÃSE-¬ît,ˆËÉş?5öØùé÷IÀþèhzò÷>üŸ3G¥‚w;7à­½’èw3{·OJ09¦'àÒs%1cõ§“@ÒÊàø`qSJb”;3FyF£3¤^gSß֗¶Ñd¬­j&)àwOOUz+7.aœrcfØü;]6äM‹ï{:™¥]ãénV• »õÕΒ´Œ¨3½‹Ë>_,è¤>|ÑñÑî}wŸ/>ûêۚµ˜ø>{‘ÑÁý6J±Ø¤v­¨µÊ'ܬùÊë,xÒ{¡-Í;£ÎnXst|°Ó¼Iù¯ó—¡ƒÌdºw*#h§y5N;Í^g¼NGm{±{³u-áåÚþX`KYe|9âÅìþĝ`”ÓK·`ïk/pq³sV,WeŠÜgñôž‹½;OÝéµÂÂjL”¨ûç[Ʋ#Ç}NTJMþçÒ°t/Øc 33rþ{Λj{¡×‡ã…þ=íÅ¿êýÕÛþ³jÿÿìôÍwöþÂ]ÚÿÅpþÏ¥üôç¿õ£^¾Õié§OGó»/–.oúðÄ1é6'í‡ãƒt¤@{-[{Èö?¥
165
零§›§œ _ŠH*û^Züü(_ÏÖþ2»£­­ðƒ¶‚I˜&UôArêÛOÓáu@RµíYv|ð{.œÛ›Ÿ#>¿Lâڬ쏚p·ÿâƒñKøn{£È'ù³YÖñg‹
¼:1ſ؛î47ï6nƒ×{&Wþ“þŒâ³ò»ÚÚÒ\¾¬%ĐÚ<;·í˜Ùq¹¨zJ,j?o÷Õçãq—Šé[»øÌb#æmh¿:ëØ?ÿyÖ©cgÿþ=)ÖúãOº=ºs·½wヴZ=û2ôJKÏÒ'm	݋‚ðQú×ì@ÑÖ¾¥ãQɃtKíÍg[Eæ`áB¾bqó½3óoý8^,;Ýå|³Û\3ÒâÁy«˜·vV	]UI÷ÔÿgïkÛÚƕ†ï¯åW¨éu·°4ïºíyx/ç´Ð-´Ýöâr…xIì¬í²»½û£‘dY²-[vBÚsÙ-{4’F£Ñh4š1­&,p6x+nËüÍ8Â·Åñª
o%(_´Å¼%±·e‚”hïÅ­F!öOœÝs*y(fÈ8Y!¯‘xʔ…ˆ)þw#k¶7ƒŸGôð‹ îbxþŒô7¼BÏôÇd¶›š»Ãö}²ƒ!io¸¯¦umS²S0Ñæõ=AÍ냃Ý0Ä-™OÆ¶áʨ%ñRŠoqYAd(0åÏ[¸jBˆAÅ%Â㾇ƒ[Œ•«j5yø»¤8kñíÐ)U96†ŸNêp·Äއ,fŠüÄyÃÔ`ÿßÒMﮇ߅þá¬:­OœÐZ@:çpXê;	¡Íë<¢ª5—aÅ{˜ì™ð9uÕe7yÅü4×器¾K‹p÷^ÓêYåiÝ=r=¸ºq½’wþÞÈrnÀ«·ˆ
166
167
†@CÎjc‚G¸7·9}²Õ!ȘeÁœT°{€	õÇPø¼çN0kO›Q(²þö!3­ˆyØ+«1?ʢͥátØ@6ðÉVRñB_³í,óºÎÀž^ÁG˳ݩî¶/,.pë”WùÛh3ïMÛÎÜâ"Œ”	ÙÃBx>8.»
168
—^*Ê=â9½
kŠß5UV—:ýðjѵå„Ý×d˜¶Ñ'¦Þ¸×GDc踒'Hº‘?§¹D§tæñ­Åô	¶Õ (‚1žðÀ„š*èèқóÔkÌ;Á³Xm±…%ð3*ÑYC¿%‘ˆ¥­+Ž]žû1ôI”Æ‚`.í-,U˜#gë#½3D_£è½±‚du}"¦Å¢Ñ⋢¸Pt^hi8¤7gúñvR>äïJ4ò„‚jóEŽ‚ ÃJrA6ÛUÈKD1’H%Þh³-…Œ¸8gœ³£iµÁ
¦Œ‡o
169
¶Ø‰,èûŽ£k
170
&sUÃÅ¿Í6	Ì.ü¦ÈN×Av;…âi‹ñ§…¤€ŒIšüQÄ“1u„,ˆˆak¦­SlÛÒ3³Wô]ÏôøðÊg!ÚEDÚw´CŜj!t 
171
o5b|{rÂðÖçbÝ÷\…<ïmòÖÒ	¾DÑ[S¼`ߥJ:)¨ˆxQPš½ÇdûDF7yK–h!*WѸbØÛL¾_ÏÝò$ê­Ô†—ªëg-oFʲ„B¬¶¹f¯(^öҜíÀ©8‰–Ï·øË4f¸\¯r
172
ó‡æú`êÍLÌ2Tl…W^ÖÃe|õH/ŒPRÒì°«P;‹^˜¢ûˆ½.™åc¾ShóBø¸Ð^ó\¥2•J¡&°çC× œG*fPô¢`CS*s§òS—>‚ˆR:l„¾*Ô{Zfâ超:ÎЯh"+(¸¶˜bEŸ!ú°Z¡©GjE!4û<0ßhCØ­Bì-*û€ºÃ2½ÿ„{ßýÏ~Êæñ­Aƒ¨L%b‹Àªh%«ˆ¶	¥+`¸Û鸘Á^ÉJ*ºüÓǸ=“£.¾[ñ'hßIÖPŠör%i¶“Ø‘æ¸+Äh”7ú¦1h¹˜þÆp–ê>-õ›ém_¡SË·ç2LÈžÀŸ—Áuèž6®™@‰øû"¨%ËÑVhǜEÍF.¥•í8Æ9nèm-Ž+?„b—ºÊÔ³Ë=›åz:‰zB¨‚õ°yôβ½$ù剨ÔPD5„†ÎCê OW•j¼
173
a¥@Åë'š<êL¿“kÓ±àèsÍ!1ÕëuY¯(5ف¶ûìöCÍQþ¸&iáS¿¶æšó^Sçn‚§Ãô	ŔÇ^2Hö	u=B-lŠá烠Ú"SmCÍ†<jqóä£Ðmý¢³¥VIGC¸µSIi(Zõ&¿ÃE¢Ãt?|_l½ ª#Dˆ‰ânG: 'SøÚÜÈDÏæÂ<¨ç33ÑÇkAdѤé0Å#ÄVtÚH§}ü­XËX¡hP˜vÁQ³I}>frÙ)‹äYb„…HÂ,éù’…¨˜ºL­X%;¡ÆAÙ½„q’ÍæH…ép}ƒÏق:Œ‚®3³IØÐV/[‹*T‡´œv¸îÁ0]CÃUQÆ­p®wˆµS©¤ð7Ω‹N2±ÆÍU÷
174
H!Öv¸=§rD£¥h81ºLß`èèöºø˜2I®¯®\(‹G¡M,-¹/\„%ÄÒr½Ï@¾¢õMó¹÷ý‚wÏéæúEÝÕØ;îzÆóȆ¾b/ wÜýÚ~‘ÿ-Ÿlÿßeäÿ¬Õ¶ÚíDþÏfõÁÿwŸ0ÿß9ä</“ý¯pÁ¿Ü±ÙÔ9‚&Ê6JžFQ߬­päÈÏu5”§ h<WUè†:ô¨Sá›Rõ1oR°•Ô lǚ Ã¸Â¥:pRØ´‚ª¾˜*¾mÑÂ,ŸJµL­Š#c0µX‡â~Œ1p1`i>‰1X1\Ù.†±RͨT®“`¬¨Ær~1lí¨!:¼X	1èŠ/]Hwš‹œkm„Í!A矸Øtč|Üb‚†Š÷ZH&æ”ÛŠ(HýÊb¯%¸Y²ó)ñ®É»V$tÎc2ªV$4~`*´ ŸUN4HwýR·ÔÇ­TXA–t¯¬4*•‰ôL늦Š‹–Ú¬hê+.W1 12	_§ 4ÍÓ}£døv´’$\œT¸z
175
\:íÚŝ9T°¦L¢ÐƒH,mÍU€¶Œƒ;ب*‡¤‚Ɛ|wTˆíX„SNŒ˜ba=mb0ÑÂ÷ @V×ñä$†P;éåƒW\Kb@‚æYî(±2bdϏ̖oF‘hù|Äà¤á‰{jĸ¸*5”;aÄ ¢‰«øVÄ ÄèÄ<&b`bhTGˆ”ÙK!•Py0"WP|4²`;Q/7‚ضÜYî ƒlEÂ&:ïWY£ƒw@4íŒ^TÕ¹«à­4ðèð\në€cp‚ÊéGÛ*p'
Xßàí4ð”6DB)vˆ«)`úz#ɝõÆ Ä(É'¯1˜f7ÅÅ@[2hšJ´%I ä)jr+R=è¤PÏ7cb#?¨Œ±|5	­:ÆÀkIðØùa¬€´r'c Ê¸ñ£ˆˆ2l‰Y׉¦xâ$N…«+p‰³5¸ëBÞA™ZZ49ýˆKnŁ•ã*Vð\Êá“
176
)xN9LRa:1˜úw¢I/oáb#PUaR.é ñ³š *c§/1؈{ÔԘåH#ÔJŠÎ=bàm<m¢u¤‰Ÿq2+"Æ$ã€!VDŒPÚ9AlT•f³*mJ¥Ì¼º:¥bæy
177
ûe%õ¢õˆlÁ¬S`ã*n‚‹ìiößEÆ~€O¶ý—<ÜڊÛõûïR>1Û¦ûÓȒ^Êp”ò2¤ÂKG
178
†Á%al‰è‘Ÿ|ÄBɾ2
J†¡ØÂptz‰x7¥± "{GûÃg‹  £0ø!£W|,ÍçH*gr!ÙS
179
 žÐ‘β:ÞÍÇrxýü_ÌÙ|r棝ˆÿÒÚj5æÿ2>áùO©³Ÿÿ–sŸX\—„HAq‘s1aÒ#<b7»ÙL\áqØqW
180
cÁo&Ó ôRÞÝÀöpÿlªPPTÂ8µlªÚ;.EóUÖáìbÑï«¿p,ÅÔõyÛéŽ\g!͓és7j<¶‚éÀò‡Aôáý›ùð°É:¶ýž˜ªTEàSÿÁ”xéÙ+Hϸu$ö$	Cžsœ±àÝdoŸùžš-Ò!Î	gHvùõ¡–qgڇȶ@_ÁV²HÓ-8áP:t:Âm^©xG
181
ª’ßĻÏeÁÈ(=¥ß¡õPT~NM•'Žhz¼Ì®Ÿö*ÜE¸=é)•›zì§êáeÇ8Ž4¾¨Û´B«å²Ö­þǽQGÞþ¯¹•ˆÿWm´ô¿e|Å'Mã	u=8MºÚ=??|±òúk¨ï¢¿lQØ÷5Äú [¨Û@):Ýy¾@xÔ^¥—µ´ã;:W¨â¬®í ÷†B}	ÓùèÞ\±×ð‡ôR‰=
182
Qï®d,ë,=÷*ÃʅSܽÙ.­fô‹Èxñ䟘6ÿ|»aMìçÑ&>[Pöüo6µ¦:ÿëÕVý!þçR>¹&
™,„[®‡­Þps8™äÚa¾êóÕH¥Mp‘RâK†à¼¤-éy)Ú$‰Ñè!|re*Ö”ʯ.^¿?ûtNk!»ë¥6„FJU›ÀÚõB×.¢ü€ªH#®Ù}š–2zîm¼‰¬™r°U҆§krmêkJZoêö_QÚ²p¬jC¤`‡Ø¯q0úŽz¡ËM†ˆï·ˆ×ÂFÑìÝp°= D9ðAðTö• ]SéêÝ$¿ˆ°£›››‰¥R–5sêÜ8cÁeב›×X¹Öt^ɊݦGf'•Ü'ÃC,òÞ<bAséU"è%Šž¬†Ùæ?ÑlóªH?’çÙ<ñC¤ËÿAéW«k`JÅÍéZrù”姑A¡¶×Zs4×vÞÌM¢e*Yw'L·Zü|MÓDŠŠV2™úë®Õ»Y­U×Òӄ¾éoÆ®sƒgÃ!š¡ñí?1ë^#â×êo12T5€µß4Ã5?Q¦®+S´cyƒBæßµc>(¤×º=¨Á‘Zùo=Ššú0ÙC@m'¹t‡<æJÖ(gzZ囦G‡¦WmîPÔrúÄ­6nôRÊu½™†È*¿}Ín§6(ÑàR5¢¾Èe­„'`í
\ïÞGBœÆA#¯ 
183
Ñ4Â0菈ê¼Êj¡Ï•Í›…ìà%íZ_ÛÑìà1{@òõûïí€ô=¢øxvUѤõèÙ1"_Ó§ÝjÌï}†Ð¨¿‘Þ…¢Vo4[•T P&ýnè:8ÊõLs³ªÐ“輂l>Š·KÃL¬©º©o·	ïJ>è—tU‡ ê·É”ÈÝ ÿ‘ž‘G#K±±ƒsº4 ‰Gt_ŸbbJŠŸR‰ç
Íó–æù–æy­¦{ш&³žY1ÊR/’ôá5åþsš2˜¼%)迱ý FMH™õßK˨÷)©¬ìÕؚ&šÏãòÿ˜Zoÿ›éWUåÕ°jÊ#ª`5•G
x´­<j҂mÚð”8r«dê¬Æ@}ÔNqq0
184
¤Ì`ð
185
ç2¤²p@“Ê^r²9 	Ú_¢Vü…ϲ²ƒŠ±MøƒTɸC×u!ú­icÈ$Zí/l¤¬†³£¡üÅ	ôÕô¥¹k±ÖKp§ïJ¨C¼ŽR%y»ÃæQD¦úŽvŠñÃ0zVŽt4}šB?ú¾T7:¤+Ã^|‡Â±/i@ci‚âÑà=`ö4EwŠâÑ|Àšvò”  ù3‡ë¨­¥à.‹&ûr„Udv—Í˿搉ÌÊD‚óír
ÈD+1˜¨úµ½|Çîoðy
™ãIaÊB²o¹òâ'Ô³!½z6m¤gÁx‚£ìé½²ƒ±}@˱.¬æ†ýfO©\^ŽÂ'‹¢L}іÑÂyʚɛˆñö\wd0¡èoŠ‡sA{Eƒs2Þ#vؐ×ÂÝiàB+÷]ç3öà䣐âZS¢I>\6ê]õ,²Ia
’J¥tá1{Í7Ø)JØãÇ2‚ô.…*¬ªË¾Ç5'“N…ÏÿRÔrÝiÄ×êk¾\@‚r«1¥eâ HÓ¾#k4‚
£°„•l%OÂz·ƒêñÓ
186
a@K"¨ál¨RO×ú3ÿ;Ó]%fw¯*Ò2,3K”iÍ3ú§Ó1öìž2÷Ê0À¯µÍÖ:ª­£MÇrÈOÛ¬£
ö«zW#蝹Öo¹Tdgƒ‘k‰Ó‹ÍÖÀ¬TŸÞòŠéK…§âRa6lë¼OpÁ«¿gõ#²P€¼vÔâ'/fÔîVs»[WK=æ‚ú8I#Q5ã‡«‘=¶ƒðýÎGÛ±ƒY>ÞfïÆb·âÓ+—ºíøp4æ™){¶c×k¹éñøq—–‡,ŒÇýîqÇ?9êîïnN~|ùò²²Ž$‹OGӓãџ'Çï'½ÆûIwܯY?º¿|úÑ?9n}îïï}îŽïZ'Çÿ$ÿ†“Þloö˧£?»õ&yÿÏyoãó½ª8^ŸÒòÝã£ÙÉë½a¯A¾×›×¿8ÿüÜ=ßûÜ?ŽzöÞ°;?ºûóÍþ^ƒ”ûÝÚ߼Óã»Z¯ñãu·þó5Àž×>Ҏ×ïݟúñúgçæúçó½Û_~ú矿üô˨7>šþ\ÿ@á!]µ>õ]ҞI׆ö|¸þ¹¾=폦ýOoNŽ¦¿À»ñûÑ/ã£*þ<¾#uôGÝñÇÙÏ?½§m\Vô»~7ú…¼#máãÓÑ/ŸÞÿ	íøå|ïOëx{Fê©ÿòi8ê~ú(Úðó§¡Ñé°7n
»û{·Ý㏄g¿œ7ÿuY1Il0pv’­z˜ðö&„¥˜ÖÁÜY¦,ý¸O]–¾{•pŒX¦4“‹jÁ[ËAèÓö²ÖMmÁÁƒÇuF4ë)äõˆÖ®&ÝihnPàá:\)š•9£XŽ=¦©1o‡voXh4%õ»p­Ac‚¡EÑYhBÄ*&²Õâ	gûxd_–‡CþgÒº)i6$1ƒ<’¢Ð]Ã>]có豤 8njpÿS÷&Œû>EàC˜ôñ8Ìik93Ô³<;‘îM=¼yéÀÔ·ªñA($ØÉ¢l*%#ÈêÙXGd©ÜJp%dSöñ¿‚ÆûW÷%	e¿¬ªç:oŒu Ξ6ú5cM
rVsÒdûûïKB(X‚WŠ ¾‹¡ü¢6€Ç[Pf옽"|SdØþ²vÐ.™(;hoõvÐþ—´Á[ú°Ä×:Ú84Î	zxÈ÷èÙî3´žYπÚÃÎ$ b6×:|äz‡Voøu';Ž’_\½?ÜÝ­$–§MyJÆw¼ÎlK)£WtÂàñf£¡o*]ïs"èi¤Îj
187
¹
188
ˆŽžNôd“‰Â½287<ÿ2åÛBl¹?rÈI²ý“=-ŠŽø5{P)Ië[å¶JM¯²z^²byšFú†œM¾ÊÃua]ËåéW³yŸFX¸‹¶ð	¿²òÎÏ&XVÙ Jx)í˜ÎGÍÈ,É0²ïkÉ5Ev<‚EÇþA*ÿ‚È–µÌYDN;¶q¢U*OKäâ%´1%ÄÊ70Œ¤[ÁB–26,:ˆÒCêËÒSa¿~G~þÇO¶DÅѐÐÓRâ‡%â>qàâlj¸fLÒLükÅâVòJòåæjº²iU«H$YI,=)€Ì°®¥ù)g‚™VôŽÕN*’/[/ïfé/­ÛU—N1s[•´‚RáHYI3’W’r<üPò¨¼&0é½Q­¬:ZÚ:¾(5d‘à®>rÛ1Ó´ƒf²
ú͇ÕÍ`E+‹¥ïfóÌhù°ƒšÒ:L¨1™ÆªÇüŽÝ›×_f¯y©›09ˆ(¥œj«í¡é ¥º(Ü<yÏÄ	¾Áx©ãt€½Ð!t?¤wK숺_è±H=kìäóˆPÒH3G=›àÑO³WÍÕïddkáá-͸Bh7¾¢ÆåÂ>¨o¼’ZpÀ#þëJ:q¤@k¶†£	"~Þy¸gg‰±,;w¢Û÷ê&u4oou¶µó/yzß¼§m˔íxaô2-„áŠèÂ
189
‚h?W¿ƒ›¿k@·”‹±àˆNWŸŠ„@ôË
190
$nñBÝpúM¯òSqÊP=&O¹Þ)n2²«¼Ô¦{“¾6Ã;vGóetñ’ûE†åxXSÙݾEî³"8h¢t±–<‡.Ó÷<WQˆUþ˜¬DvCÁAHE¡m”R´)tŽá øa0:°ýˆènÔɞ°JôÁ
191
Mï$ï)ü™)£k™DqóéWpJ—"*ŽC܍$¨õ«P鴌QK,ú,Z™)Ô4H•xRú¼$R"É"LckbZ:ýöAEp [ò‰@ÌaV›¢+sÆ­$^ƒÐEçªJ¹ñ#ñ}`Œ$¼X¢ŠÃ=Š°0\!(P”w®/P<éÒÔ[½+ÂvXâ@øjŠ!òÅ&hIÂÁ¨ÁÓ܌¡1ä9ÊJáùê­»Î=ÐPyb§¸·¬¤¿sàLAXYÌ'q" Ž'€L'ö¬$ªMøŠq8Â,°X3Y˜<d[ޞxlŠ0ôX#h<þ§iQՙŒ ð¥UÂ-‰ â$%:ÄNȁ¬ôãÕQ=օ5’=)<ߢCF	I¶åg3@O²@䕂%YÍaá"UKç3tSB~TÿQ¨,k<+[´åá´d¥uS1T5Ó	³Æ1B¹Ãìa »šveà6:ËÈßtcP‡n¿JPö£W‘AÕԂݏo† ÷üš„Sp®h•î‡œ¡_û“ÿKŽæ=O°¼øµF-ÿ«Vm=Äÿ[ÊG»=%Ôq¸mU¢¢³«êÿ0ÿm>Yó?
192
ڏñÿjõvµÕNÄÿkÔæÿ2>¹)à1¾³`ÃkP
193
þ·äø¡j^&œôxQüfQßí©–{|W¿J¹Gàr.èDf€&ÀŠSιÞZÞ
zÛ;¾µ½´k`PV²é܏gèÜõ-MImà¦a{ö`YÄ0c±uSîÖ1êj®˜¶2Ôß­k§E¡…¬Ï×ÚRÕÍúVGWÐëÚúx3Í­|bš$t6#g:ALə>„2t¿m9¤—ù´€õ¾G$„ë ÷D‹?wï´aÒ²û<×Ѕ}=ߓ–ýOñ-úÙ%ïg˹ÁX‹Ë¡çÖȈ°ž¢â·80¨UO‹ý!é㵋ö§]<ZJì#Ë	,´çYŸ2Ø73¿¸ß6K²fÕ`ªyáœÄ-à(#T \Y¹R3è[-¯o¹ËA-§gŒr9=ëtòy';å¼ó¤Äé4]M˜G;q)áµÅ´Ótèéiç$z.6™OÙÐ÷FËúµŒÞd±}Ý ?õŒþ(@½Ñ±{=»7&¬.²ráX\J¶Ë.àÊÿV¸@I…*Ž¤´‚%
©IãeðrÂ-†brNd³¼¸uÜޔf?qvÏéN)d98]į€|… ßpÄVjûýô¨˜´Š$“A2^ˆ·™Bt®]Ìۘyö14If÷k¹Ý¯í~Š6V ûzãNmí[^ò³ú¢+Ù|å`Y³½ü<ÂàU’Á:_ŸÁ*œ];ÿê՝jc§^Ց¸2!$Ȉµ’Ïh‹æeÕb€o7­Žmß_[ ÇÍC±ëü
194
ô¸öમ?²Æ†<KÀŠGp„!ÒҌ°4]$·Ë.’t¡0›K›bÊp¸½!¿¥nE‰#ж´Á¨&%N§Þ44—±.%tùè~£¥&gºìn1v
195
ïájaqy…R‡ÔÂsÕ#Ë)m•ô]NmjÒÀ†Kt/Z¢3›0c–¡«.5ŒPxõ‘Œ\cOÒH5»„ÿ
196
3¾Ôe™«Ò­Ù
197
´ž·êÕjm£ºµQ×éÍjç6r±ùUWëfUëù›aêlÔL1iM©i0Q„Áœ'š?Å~@,¬1ž%sy1S‡Ö–ö+¸$õªÁt‚=ôÚu'Ö®?¦„‰í@ŽN•Åx5ƒ†Õò¶gù78èZ£Q†±J×°tÓ£j†Ð4¬žÛ0û]­1¹žO°,žç'Oaë©3²ìïzøxyŸ#å?—»4§i}£šá£G•ËËçÏÿþ›ü$?œJø”4ïï¿ùwue05šQ7äì¹¢/{¸çŽñ9œë™¯'‹rþúþÌG3lyèÖòQϳ'DWé³P57_¯ß§ÞlÓ [´É:•62G®÷Öõ0ˌû»N¬7ÈÙ¼§ógÖ¨EJ"¤%=h€voŠØú4ìó4¿ö°76¬Àß¼t¤aF¨Ý ò`ŒÁ/ÄW^P³Ú³ê¶~®±Rø„²(­³“71j¶#&bÑc²ÖcoÄ:ï¹ôê¨ÅríhúãœùŽÈ։ÒÛö‡°§ÉF®€[¿»aëzŠÑhíMä‘)áA<$TÛÞîÐèEéÒQË°ÝÉÃGmpÉ13aݒÓK›spºKôƒ„+vœ%µ+p8䥞޼¼ÃõË»íÎå]W«C¼)Ïi1^và—ù¹}
 ª§ýß!ì÷ô¸îª}òς Y—^ÆÒm±Måµ{۟=¾¬ ˜åÙ¸¿©Cõ-*ôºÀuÏzl×ýL‹)°ñÆ"ueØȺ°ñÝÆó¿
8HØ­D&{šJ» #¥[«6U“‘eë-ôlê0âq§gäO,Ç'Óә!*×ËÒüÜ%Á>‹¬¦T±™?÷.ÎÎv€~Ûh¼2ê¤è-X×¾DߺPàš‚;õäՖùñC]£ÈM7Øè[ð°ˆS!MÜ¡ÎC®w½NfR£=·Ž0h•ñúFµ¹Qמ"Lì¡b^ø̀\YËëûêèøì`4<ØÝ}»{òãîî»çÏ·Ÿÿ$-~µ­©3i}úeüËõîîîÙÀiÕZø§ÏÄ»?·~nŸý>=¸nþó{òþì⦍‰Ñ"ßÇ#|¸ß»¾¾v÷vü—Ñ[Ýú3ag1óÀ·ËØ=à…(}²&vttGŽYh²èrñøw}·ç‡I1©SV×ýÎý3Ô%\Vˆ!Ë EÏûáQʦÚñ,Ï%¡n\²g(44Z¥ÊP=2woðg"6‰å¬=´&­Àh÷–_CÏöz#ýy´Ùþ¯z¨‘ÅL†N‰y¼•áŒKnzêéæ[ZγúöÔOÔ¤ÝXæӷɱzÆÆH‚IÀ襔2'ƒxºþдi!tJÛ:•¤5®ªÝ6›ÕÅºí¼¡‹€ùØÔKM½ÜØ@±ž;rõzSõîèèðpo/Ãjà;ýöì/ƒ`†˜	õ=떼4زÖŖõƒC¶DÄöϱùÉK]³Í\òqPV*ƽ¤À iЊA¬lgÑOlRÏõŠ:xÔ5;Ó,
198
ºpãlfA…$oŒÒ
199
Ÿ·ÓG] Zë_l\TÌÚy—æˆ:Š
200
êV'0ŦöÄùìÚ=cóB]³Í—y6«(w4Ó·9¿VÂò±Î6š¦nåéÔµ
ò¿ÖÞ_éÚ£ÑFàùÂ
201
Ø_+×ög¬ßní=[ëÀ*aXc{¤ÏÀr0[z—`	ÕïC¦u¥«pj±_+t¨OõÙê OÖè†(¾èvuçS;ÀèI}»®ßô§WԆâ”zÞ»3k„ά›b8ÁD”aÕ:)†mâ|zûI³Sm¶µ†Ž¡=1å&;7IXæâ&	OnJ+v/ܔ^Ñ|ܔŽ³,7¥c›‡›&žÛŸöŒô¿V]uã&ƒ“¦ßLõ'@oÛ̓Ü&f™µ¢}8®ÈtÍÉ=(‹áœxb9IåÄêf5-‹qS­Ik¹$m6×&õ>ŽŒ•6¡iî©hg6MëízQëN_´UÛlêµ+ôª¼~(	I7[ÚÂܬJo Ž…5 ÛzÇuiZ‰.öƒM´gõn¦šÅÁêðüÔrz3´GÖLèöÿP£ÑÙh’&ûa%~ã^ÁUÀ²nõ|¿FXx„VTúús:5^d;ñ­«Šªµvªµfm„~ÖI\ü#<îkË}²<¬|™voÈàᰈhLIJuÁGmw#÷
lauºW¯Ç"«ï4j_ƒ`»È§ÙKF3Év©nӘTõ\R5uÍ<ÈUê#R5vj[÷Aª#+KÞ|p ]‹ÅFº„,m—-ºs"?nҖr-hêõž,h0fe³]¸“ý‘åû›“Y^+)2j[ԋy#™‡›g¼Îº¿É·zYi4[——ÎeeMèzìi·†² sˆí0¦N-:­ŽŽLê@üñ—ˆ§þ{”ç„ÌÎÑZ›DjŸu´wöV¼kE÷s÷Fnï朧§@'NA\Óʖîzn¾~*âL™(³°ÞŸÎÕ¾åâZ'ºà6-y6->f6/£–
202
XÐøô[‘nz:Ô
203
le8¥cœ{šÚŠ®²ÒÓçò]ö>ëÃ@/i …¥›_/Cl:Â[·¡­¸Ý„*Þy.ÙD³âŒVúJ Eýï3üÂ$ÄHˆG‹Åå¬ëtŒ4¦Zº²£+µÔ¢8UrŠtT17Jý]wŒ/8|ÑÛZÔÝ/R0dClxdǪâô(í“ãzDO¡t–e¨Ú¤hM´iè8ög[®«(t¥„Ü€Œ*ù¢ë	àQ´çaëfhyd+ŠÍ‰WÓD€Ñì„Á{²5¡UÇE×£ÙdH2ù1}†ûk&ù_X]×éqƒm8ŒëF>Çk‰ñã¥vô»0}sÜAh4ò±áÛÑ_’{Çe0!ÀÁ€¨´<Kæ-͒ɔÛä
204
åíÐïYÜ/Áü¢QåhÊÝf/ïZûäG½N~T·àG‡ü¨íÁ_ð¢º?àÇ6üØCô½{}<«•uTƒfÀU%?váG§…˜;c§zyguä/Ûhþ3 äxMåk)$‚º?Š“†+:jpwÄÅ&c¼+„Ä›cÿ'wœ! !,ßú×;;'§wߜ\žïï¾;¤Ôè…[„X™¢/õ\$²ºÞŽâAIÞÄEfV[*÷`²–6wø6ҝԿVöfˆO…æꍤ34p§Þ¥ƒ ¯_¯âøAõ%£1©J¨î &«xF ÊP-3qjuÕݑïÒµ%k/úœöh¤bÖN«vKâ­¢Kv[+Ÿ¿Ìb$XYƒÓÕúýÅ-Y賂Žô²kЏq?ŸþBàŸã‰å•˜Úewé¦Þ™Ü*‘Á"^ÒÐ!M?¨ÖŸúÛQZzG¥2(.ÖÐrÞyx`ߙS;w«¬<Ù>Û _2Çì’~Ùù²tVžˆßˀâÈ×õÚўôp<	f.µóC é&*ÜMʲhÓ¦P2\:Íå
ŠìËoãþÐO²Pîì	Ñ2¨¨Ó–™Œ7۔<š]²fà<{<†˜Óðé3[hsÛ§î\6P³a՛6ië°oÂ_d–šPì&aÙ+ØBÍRs„4ZåѦ¡ü–E! ˜Ì&J(³Ë˜6/7êƒn¹¼Ázs”‘Í¢-…6à.4uu¡
-Imù~xw¦X̌¶v‹»òÕW4öɉq¤(4´%ck"7i]Þ^¼B>øÒô/8Üðü€%ȤþˆùåÈïÀKQTT˜ZŸÁ2Îà¢ÐUùΖa	Ó[YÃ!ô§÷Ü´r_Ìù©ÐŽô¡üf	%Š&·¨Ð}`³‰õšoŸßã	ѕÚ@ͺ-îï.`ß6¿?|w¸{qxpE¡NÞî_œ|<4Ü8W:u‘ÈÑF/DCϽ2›	RˆÅùº.>6%¼žµWÅæÑ-͈¦õJ? [eԌãÅî±4Œ´\bé>¢5÷°FÑĈNdy3B‡×–Ó/íxÓÖ]Ñ\`@1é[4è†\"çÕ¯seQ¹–O}¼«;Ödò|®vå°°¤IAÔô´A˝eÊ gd¥*4-á¼½a`R–茹!E£_§¢Ã”Õ—èLÂíÑë‡lÇ\zJÕÓµû™RãÙõp*Æ¿ƒÑÔõ°ÿ8¿J6F>!ΛNu¡›ŠË¢êhår_Y;^âÎg1Ͳ™0©P¥ãi»À¤3µ¡eå[‡rºuø®f[çg^zqJ%®4)*h¦k$Kó|åsÏ©Gæ©Ô©ÁN××Ìê¤U‰U§èDm˜r§=Ø󥪩œ$ôöØë’ÍÝØüÂu[{á:1}æ磹ø"½p.s¹é±ÄyçOSßƔ§–"R*×=@4Ð㘶 *’/Ioˆ{74JZíNt‹ÑÄ#¶;š¡[8mñ­¸¦·<ŒhÃÖÑ	DÉpnÖâ]·çC׆DG0o|Ùx@ŠŒ~<‚弨4ÖðÄvÓX¶|]‘čìÔņ¼øßzMbŽ„z|ç•:4Ù«àÛ(AxÖN¬¾e•ÙŠ…5D[*±9{œÜœÁžìÓÉÅë«Ó³«óGG'?ñYÊòQì$wGFíi0æRà¸ÈŸˆú¡¡”.we—-èNG}˜]/aeŽW}RB>>˜­}wRqí39>~b§x
205
Æ;¤ÉuQ*šD‰ÆwL8›èµ{ûý̑¯ðäuS2‹Õ·W$Պ…Á5'SéèÆG°"!·×›zw0MïÃG+Ã	“m*‹¢ÑRc+rÄ ùY¡ã†´ØÊ÷ÀÐ]53&őV8 D’³ÏØólÒ?挙qmOé=žúÊgŒ„ØéÐ#¿B#aêdöõ•ýûT׋ëê÷¼)1ÜU$Õ||G³öcš~óˆíâ>'9šg£Ò·#˜CEvL^9˜cc¼¹:P÷Væy2fÁÔþ…gƝ5ÝØ$:kóÊu?@ì®\1#]I鿨æ>	܊ dâ
206
Ï]c҈Š¸·6
207
\¢gѓþõK‡~ŽëˆH¨Ë€üï¸Î\eÌXië:c܏B^¨æCæpgƒºU\:u²:‰¯¨áÉßò/Ôq–’5¾¨çìV1·†!¦Áw	ñ/™oŽ/îf´´“ÖÒ22Wý/œÛiÄ-ÄÃ}u<¹e¼O±âܛŸtB—V»'	
ûEwî;h­®Ýy˜¬£)ùéX¬[köXƒ ÛölÔ4æÛ_›ºª†A0Ùyþ\2€iú‰ÞâВ]ãÔÐÊðfÌ¡d+Ã¥1“˜­7`Szæ$%À婚Åý5…ûËHÄò^AÿÁ"1òV¢t-$u·q4ÆcahÐj¡ Ó‹­"sµa»â­$ZâòjV‚M½ÿÿ¼>Ô`»+“$®bR3m‚ªån,4ÒVÛiv‘‡¦.ºr±„Ù…µ—zx£ŒK†
ÙÐÈÊàJ“°h7
7˽#9±l“±oÉc_,nä–6Ä¢&(ˆÅ§”dSÆ`b”œ«•ýYß·uÙÅi”)œ8K®Y#×N¹¢“¶tF
208
Ìã¸ë{AZ¢
g®Ž¥JËCgå-ÉÅN¢VèôMmÆæD˽å­3‡¡üõlä£Ẅ2JY~<Ywl`Oc:Æü¦ªßM~Ž¶-ɋO"ùnÿwÜq
209
’¼ì)MÅâõ©_‰Ò¶úVÖmòÌÒLG*¤±}ï;"ÂK‰å²·{“,Ëè_Mö4L
2lf|»Wž¿«4šÏÇÌ[’ï]ÔÝpgTPdk¼îsÙì×
210
<.+Ê£4›´†‚/¶!¢e­.†AžÓÿ.Ppòû×Ê?ÏÏNُ‘}ƒ+úê~%ພ	!—ψÒ%aê?×ø5l	§Â4·†¢¾å‡§WgGWç‡?^½9ûTÄ©\vÜRÉ·$—B¥û̌n<Ûrw ú]Í\;P]¢¨¬ý§îú´iDt}p#fíJ×|fŸê
-C>ë>+hòëp¹²¡-v¤<Ç6¶œÛTa¨ÓP;<ºkð¢še{­^Ýè²±íDŽR ¦×DMÆ´:¥ý7´Åƒ7i#]h',b‡€Ú‚Úñ»ÁxB“F_'y¨ùdP"Kñ$ŠQ:×?£(¥û8 ÅI
Ôz‚rËk)ŽÂ
oq¢_’2‰Š3ˆ/eW¥K´‘Lك­¹_EiQ¥wV4^Ö3Ý£u/éÒê͗óGÇ/ÑbóUÌ^í©£âû¾ˆ®‚¬iàn0z“AàÏYÊ0æÕȧ+7Ù³”w1¿òÒ¤ìþw‘’;1Ü%{ÿQ”¥G9vÌBÓ	Ã_َ5¾+¦’ºt0¶ ”‰Ó×åÔGŽ‚åϬhåZqÊ]x–="¿­uò ”#ܓ¬Ó‡lÒ=AsO*.̧n€wÐ	ê⑍?cæÅ
ÙQw
211
ò€c‡h6F´‡s×ï.Ž°ñÈyƒ!lÙÔ{-vḘEi[vöP”„RÄ7áZaÆæ‰×©LITÈ/J¨µ—éœêÄZWh·Ý)ëØJ4‘Æ¥1m¥°²ÊYßMÛXȱ(tò3lXä9ÄZVH鼆tÔãmc!–œ0èîûŽÌîÑӉßF¶„Ñ I„ð–Ât+
212
#%/Ö¹B±P—Ú9Õ=
213
%S¬…<4–Ú¿È|šEÑa‚1Y–Ú5¡<±-V!ÇƒÎkˆ«zEB®Ç‹”
214
¼ž@bbL+õ+=|7ñVÉ"+•üôøçb6)Àa¹J˜Þΐ}"ª7µRš8¤IY¦“ü¯%Ʊ^ÊÉÐgÅÐå"k\Ûʸ;¼ìø$d3jZzÃ+֑<
ÂM™…Nû:¾:!vœ7)¹d5„  —NqÄáçE!~Î"¹Ð;Ãã¬yH^Ú׀¹e±ílÐëYnòAfΨ1oc7W\?fòáhͅ
W¯¬^Pn²—½Wjz|ïOõŽV3ò~[àЬèá.¶¼`ÈNwi†MEìh×䈭ŒÝŒ´€·C;0R‘7¡Bkn¾ßEÑ{ÓÔQšÌݶàz¼'ÏÌVäŒüÍsz·t$wÉv_à²càåQ6“ˆœ^eNóEÅm;‰väd#ÉtœeScªe^=¸ÚwÉv¡›±bÄ/¼báY”2½(‹*òª
215
_Î995û’®BI±*;§¾¬|YùŸ‡Ïؼ6z“ÉFu³µY{Ž{Þs=ü|Bƒ£Àw“¼Ÿ§ŽjµÚn6üÞj·èïj}‡Oc«µ…jõZ£Þh·ÉoT­W›íöÿ ê¢:™õ™úå‘¦tq{pl0ÈxÏú‚Äï“ÏÛ鍦DþVäVV¢CmÑ[=ύ½
216
¹ç9u6‘_ý`»D´`küjeűƘ^¬FûÊ_+ˆ|¢‡,]xP”C§6 
217
,ø­®Qpøü%þ‚;±D±ÏëÝӃ7‡«•¿†ÔEbýe÷wZ$CšGŠ×!KW£ä5üÐóíî;æak	|y«4s%,~ÚÙ³¦pS!*•D7֘tNø“?ÙÁðÇ)‚è­åÝh	’–, ;è|©zw¸qup¶u~±Kˆ“þÈÀÞWþQYGÕt¨óýÝ7»ï9Ⱥ“e™Ñ4¨š†¦aÐð”·g§‡ò³/+*MacxN><¿0! 3e)Ø¿ž~xófUƒeA‹~®<Šf>LyšìýÔaSÄ*¥êêw ŠÖV×֛¡Ò{J¥Ç:ыƒ§hI	ûüÍqΕKŠ†LªÏDþ
ä	ø@ELÕ1õk 7ÝÕmž±ìΪ ô06;wPÒVáÍÛ¡%ª^y…cøÃÚ(¶ž;
Ð? 
218
—‘ÐjR½=ÂD¢Uà
‚B\2ÛXÁ¨}2Œ\-¯•e¤üþ{F1 %û›j¤uQƊhò+Ô³„PŸ¡DõBq„ÔA~Êþí_÷„Q!V€9ÞÚ%Ž2àtŽÔA¡ø.ùŽEXûƒC’Ú½›"5Çåte
219
qé³ÐŸ$
áJÆpû| 9qáísú€Ñ¾ów|tùÆKøB£Àkõ?ŸZ€ö—£ÿÕÚÕ6$"Wõ¿Z½ú ÿ-ãérр›jP‚G&0×{,‡lB-±=‚T>Žê‘§ñ9þƒÍ-?o‘Åwuê^\by…‹Å—W,èmïøÖö°¡¢BóŒ šQĬÀ¿°ƒŽ={0`—þ4m_ÀrÚqê‘ÿqxQ“‘ÿÂ-0õeª9Cîl·!£Š¤È¯bëumCÈZsë~ÕÙh´ÚÑæ+£ñn,s¼‰ÈðìžådLˆâH÷Èæ•hïÉzîގÓ<×Ѕ}=ß°Ð)¾E?»Dtül97k‹eÎë8R‡º½XºýE9šˆ–¾Åiïö‡dh®]´?íšÙ
F–Xhϳ>—$ǧESZè4 ê*?^˟Íû\‡ÊÍXi
¤ÄÂö­ÊàlƸwJ^ïÍéظ:vÊÑqá:H+9ý
220
­G­{ÕK	Ó\cÌc›½z,Kß5ží™zÔ=ô¥ðÄ4žoY³(¿'Eí˜nWl
k/S§3à­ÿ¬ÍAŽ@-Ê®÷MœoiµY¸²'œ/nÝ·7¥iTOœÝszœe2W¶ìF£p¯t)±õ8Ðwjûhßòúàb_nûQèP>!çE¹GÖlo?0\g™â9°•—zu§ÚØ©W
Á'¤ËØTfc‹: ƒÕþ£Õ±íûk‹´¿|[C£µ-}ÃCsíAü]d—e‹E—8X"«D”k;¢n/“ô+ú·³Ô2leM—£øÏ».œ3kRø68ˆaلŒNG44úOdÅڷNJ»oNvÏW5GTß>ÛÕb»É=Übì²ËÔJÐr`)Æ*eÄuÍ^†®yf‹zµZÛ¨nmÔµû±{¨ÔôÀbñfýùˆT­ëEP ³Q+\ ùÌMqfËïR7r>Q&fÉÛû<±°¬S÷«út‚=ôÚu'†þ˜Þ´­lÈ.ñx¡@·÷,ÿ]KëW8g·uìýµ»m_£ó¡k,‰–2Ø·ÞÖ¤Xd<¤‡OD1½n¿ëáwö±÷ÙÌXP+y@’æ1%¡~*——ÏŸÿý7ùI~8•,HÒ¹¿ÿFäßÕU†7lQb5#bɑEÅöpÏãsp52ÓTÊá*SÕÖg>šaË£¹^{ž=!Ê{ugÈB7ÆÈv~Ÿz³Í%Ê/@I’Æ=G®'Ùuú{dÙ¾áQ&èTö¨Í˜³"-õx¢Á>²7‘?€½>¶|H¡¾œ×¶ÀsØ
221
üÍFÌyP»A–”1ÿW?˜Ú³ÑžP¿ÒÝÏd¾^ãùZðiHºbQžy¼@®hGSEÄC#J0öÆ0èç=w‚F~©D÷ë¾`õ(kÙþpÌC9gR¦¶aˆÆÖï4ìœu=Åh<ãMä™ãõá.gm{»³yinˆ´rýmòçM»e̽ô *…w—¥¾Š–l®ˆÃgɓ—rL8uìžÛÏcª?¨ÈêÛ}*¤6/§õvcא á¤çæiuaE—]à¯Ë€üܾ u»1«
ñÂ~Ï´¢»jŸü³àžò¥gÎÏ,YŽa•×îmöø²‚†–IÜ×-‰I=/L8dPzW°ÉÜ}ÖcÆÜg¦Õ6Þ@ž˜\ãxXы6¾Ûxþ÷Ò&”8Wz;6,æ4»TyµÔã%¼ÃúpO>Læ"îsL,Ç'Rؙ±pT÷Â1ç.ê“M»©¯Ô¯íZ–Öžð6ÚWí:iÀ-šã^öá{‡–g»S?‡sa™9ԗêÑK”¹>ÏW‘žã\˜dêÕæFÝÔ{b÷‚i®‚¬²k;–7Ë]}ßWGÇg£áÁîîÛݓwwß=¾ýü§œ…¸¶5u&­O¿Œ¹ÞÝÝ=8­Zÿô9§Ô»?·~nŸý>=¸nþó{Ræì⦍IN©ðá~ïúúÚÝÛ=ð_KtkìÄ"é{`÷€óf’O2}œë\ú]A¯ÃƽçÃÍ0‡AjÈé”Õu?c"f$£æsˆvˆö›S0‚í‡ :!²pq¥L8¹]kd<Içw3þî	vƒ?	
222
‰­øÄZldÐÓaèÙ^o”"¡òÀþ3ë¯$VÏPLÝø·L½›Œ-Hõ텸}yVߞšZ¹Ê]1IXQÍǑ^­Ô4¥Ð	њÉ~l¡þn¦ÑÑ
_i†ÐžEÌãêf2vV¾Âàõܑkê:R½;::<ÜÛ3U¿ypnÐw‚bY£Qß³nÉÒSN¬/þš0Î}p\¯O֞þ96ó(©—´¹Åø%¦Já`¡‡ñY!
223
;eA–r¾„èÒ8sÛå">Øõ’6¶Ø
224
¯Ž´;¶&‹>«[ä݀û8]Zœ¿ÿ}´ÎÀÙ#V¢õ\Ô©oEÆäÏ®Ý3²×ç7ÚéÖ;›µ¢À±#/`Ýhvš¦Ê¢Á†Võ'¨e¸uÄ
225
tíÑh#ÐEw)§-_ېÙvèÙ¦zéÀÛ#S¾>˜Ž-c'«ß÷°¯ƒ.7©ùhnÛ{³ÕAŸ¬Ñ
Ù¿¢/ï ê|j=©o׍7à=óãì÷îÌ¡3ë¦ÀéƒñQˉ©µÅ%hM½šj³}úr¢§C{¢ŸE…ô݉çö§=­^z^2þÍÔÔmâMc»y°\O‘„PÄ>œ|pý.ìã2ñÌåy³Uݬê®*ÜÇJ_d´šÍFçõr]\æ®ÂžXE†«ÞØ®—¯b¾¾ej+¨·j›MSÇA˜É”7Éøo¶L1óC,Ó¥ó
‘ñÈØs\ׁó¼.öƒM´gõn¦ˆ¿X½žŸZNo†öˆÂáÉÈþ?Ôht6šäÇòÌ£Qf#÷úșé˜K=Àº(r	‡(z5ÐõP­µS­í4ëhÃôîéßøBNî±VøÉò°Èö4Sí enL40ëӄz`£¹×h`k{¿½TåÇ®¾Ó¨ý;Ý.òGpn=šIG#Ê(.tNßë¨Ü]E£ÖØ©m}ÝQ;²ÌWÎi-?[žmuG]BÈîˊérLĸVñ¿G­4C$æŸ;ÙY¾¿91Õ^聄©Æ`¼~ûõÜ¡—4™ÚY÷wÜV/+fëòÒ¹¬¬•t¸wCkïÆZ[Ô4¸.¡rÙ°¾K½~Á|2Z›d) ?ëhïì­x׊⫱l7¥nré<e¦µÜðj"SÁ<R#ŽÔ5æ&žt¨ð¨Æñ„ù»{3>]žaÈަ6ékk-tK
™ÑŠâ£Q¿²r\]Ò{ၫ¸úž¸:JKÍvӂŸMØ9~(›U‘8„D8ï<w‚½`Vlö,ÕûÞ¢wÌó=%Ég»Ü¾Y†LðlKgºÈ´Ã.œ¶V’Ù£Š
ÌR=ÒÌSfZ¸ßÉ©š
*àé Ìñ£Lô/a’¯°¥ZŠ
226
ùÂpué»Óî"ðޓr¼ú¶éÀ>ã˜Ö\EáU4d‡Ã&ov¼Ø÷<lÝì-Ïê¾7ݲ!Ìû a¨-C«Ž‹®G³Ép-çÈO.Cà¾~÷XbZD7Â/¬®¿ëôMo>¶J_/7
227
yà³9~i:'D6Ã\ÔYCEӕŒ-ہvyú‚‰g;Á`õ²ò\®£[×õ3óÀ‹œÒ_–%4£«Å‡~Ϛà~Á)µÛĨr4å—6/ïZûäG½N~T·àG‡ü¨íÁ_ð¢º?àÇ6üØCô½š}…<­R_ò¢¸ªäÇ.üè´È\'T/﬎üeíœvÒ5d¢ÿØ}súf&·¢Tï—ÌÓY=Š%4Jaurú‘¨^W‡dØÞRºÒ{b’¹•MYR®%|.¥šÊ¬vÙ¼åD\³ù}é…nÄöfȅëÌÐmC‰HŠÜ©wé VÌ7Vì`ãNƦWÊÅџ¡Œ½nü@bä»pÞ¼Äy`F9Eæ0þ-XÒ¶£d[ÑNÛËM¥‘(«8¶îB±å]Ršp9CË2MÆíÈ,|Ž'di(&íÊ.¿÷yÞcœ«o›~	´þ4n—r™Q»Û‘iöï<<°ïÌØb©öÔ"Wva»‰L+Km
228
229
c7ß0ädq½hË2k´#KäáxÌ£±´Ëæ=(ÇT&ßù ¤$í§Kǂ4çð'`ãSóý¡;ΰ}ÇëÛÙ¢y#,ê]âðµå9Ìéd2~e¯{ĹֳÇcHÿbgi”%z§ÚHt¯l˜ô”ÃaÚ·Nˆá/"¼g=iGFEP’ô¯¤%1Þ?¢Ò»Ð'v-®_Û1­ƒlLÙA‡Iç–ÇøÆø&LÖ1ÃÂçu{—ÎX2'bïfVÅZ
ãw˜Gœnßw”Õoy¨Â¿%ë:EûäĈ”÷ºý*ëøãù¦&PzïÍÔåÇ2G›‰dÑ®NÿžI\/}Ä®ñ=?29UÌä‚ì¶úÍ^™N‰ý E‡Œú³ ‹íPݹ	ø=ž`Xjͺ—cn³€‹šæzë¯=ˆŒ¾qCïûÃw‡»‡WÔD|pòžôüäã!K®šzãí¢ ÁÐsoÕ,ã‘øT¶CàK
230
íè¬ÀBq¾°®‹ñœªsVl¡Åòǖ†?ŒzœÏ[÷Æ»ÇÙÜñˆ¾Âqv)ÍQ®²»±¼¡×kš©Úˆ=æÚòXs&=’8‘çØï5Ww¬ÉäùMÈdHiW@¸¥_˜´%7¹ýµ€÷\kuŽÜeŒòUIÊ°Žš™âKæÏøZ#[|'À/‹t–™ú:¯ÛÄx¶A/›„2t4u=ì÷ôáU3{âõfy–!©ØOˆP]hz¯AöÂe·fG‘%WGÛp¾-Åï]·ò׌Ž5²ô†2K›ŒzæáÃ2½ÛR$ºØë’ÝòØ,]»t,ºÅŒ•ÙÔc¼ÓžÅÓ4¾!(LÚ¸U_ö¯M5¦Þh†uþuY³>º^0$ŸYýó!2Zá;l6–óÍ;­Œ$/þ·^›óH°“ÄwúQ":t×uG -ã[ô
¬‘Ï”o¶9\½-«ÌŽ Äiöbð8¹G€­Á§“‹×W§gW玎N~âûƒ”½!Áó˜b_“]‰ôûz³˜F¸eÎbŽ‹üé€,¹•¼+ñ~w×^ áiêÝ騏n1™=pmEñw›Ußvz=>†{Í0£úBáþÚ?Ô
KÙ։V=çœH5žïe÷*Åæ[¨[›FÈÌǸðY³-+,ž‰—z˜q[äözSÏ˺ƒ$åãclë–_Ç2Չ­È©oîwÀŒÎÖr½ùJΑ±ÃËB†&Žôì3ö<»»™c¨fî)¤€ÿ=žú9ÈY{5[š…³’ØwQ?cVZª÷Ü|ZËý×õªÄp‰]ß>OÙ3š¸¥^yÖ\V¨Ð"AI—Hz±…; W‚؝‰“1‹ÿÿ/<3"ÿRvs¡Â`óÆ!ꙅ2”ïÁƒ1ш8F/ãP{©.§[‘K™ÌâR•W,$×Wx§.Që©kÒú¥C¿—°uDtþˀüï¸ÎD£*l7Ì"E[G
231
#*,ÈIՈÞÝ£j—N(	â+jxò·Åu]ì3Y^sÖõ"׶åÅ5Ä4#øKæðék£Ú”èg'­ŸE¥àRn†>HÁeJÁí4¾0žúsu}Ý©9¯½çíb“¾lîørnû;;,f¿¡Åam Õ5CVý0YGSòÏ"D·n­™.µb¼ÜFÍ8˜Ô0&;ϟKF8|y’}ìòmPéñ7N¥¥]Äؒ¼0é|)ºx,×󫮉Fü§®‘;)e	ãu£tzõ¸
ÖxÝXà²!öò4֏£dÔë{½¨ö͆l*Õ.81mÜøýFDd37À3:âß*ïÂYꬃIA…®—±€-fe”Ëq(+zK)!Â&£
¹’ðž‚ÕˆN[ö}Dk,Õ-™+Íóíl•Ïf~‹êB$ÖýH›û	kúÙ8Ɯm¤ÝÇæ¹M0õû6¹ÂÈE¤ëRƒÄažc֔Τ¦
232
b¨X.uY‹þâuÉ­”Á
/æѳ_³1^rôb‹'ïN±!ÙÂn°Ä&dçØÀS#kƒ±¨#ž°.ý¶gñ,ÔIa¡Ýþï¸Ù`¡¥Ú9-Þ¾ì
ã¨=lõ­ü0xePgmª–+6bÌwDí*¬æ”µcþÛGY¬OB59a¢uX¥gF
233
÷jX-=±×Í#§,{<jÉñ­v´¦ÒWh¶(7nà–i¬g®ÌsåRZ`‹,ÀÌ
234
F–_”¥ÿ}+=+7Âÿ<?;5½ÎmߔÝø]éì{^‚.VHרµ‘Õ>çVåVòæNš3uы•¤kWgG”GoÎ>ߨŒù$KNÓ(·¤›8 .ì3Ÿ
235
#yø
šqMƒËg… [´åbÞ6™ÍÊdžµ=Σ@¬UÚðzŸ¢ŠÍØܓs)–â,/ËEQü1w!ÖQÜȸŒ;èbG²¹wK±ò_“-6ȗÐ)ëå]ÎòÏãäçFG•B0š1ü
ÆDeŠbîj3d.zœêÊ8I‘HÍk)7WÅ1
p/(@} üT¸
236
-–æÐüj=~˜N£¦¦È	+K´¦Šh.I·ÆIÞà·ÆR¯¥i:™÷Ã"U‡k9’BÃ5œ”g_"ý'vi,[¢7ÆFØ÷E˜fdMwƒÙòç”lüzÜ}§ĭ¨×J‘±ûßEFîÚ»h*öþ£¨Šrl˜GB¿
237
#fَ5žÞ&â~¹©¹²Ö˜.¥7*„Õ8p:,õ‹À»`ËpGÊ^ÅÇý³ìùmè¦ÔYnøØ"Ãþ$ә¢üÀ?ÉÎV4ÇÐK˜áò©àt‚ºxdãϘÝ>†4ʨ;9JS'ƒ Bþ÷Ð"ҁ_Yîâ[<È}±’8w¦—¶˜ªr•	#-õܹ#-ž…Ï:˓âú
[vØ@›ð‚mÙe9Kô­ë›±Á«³¨0¾0]EiÀâE÷QQµË|øt!¼ÈµànEX¿Œ×¯Ò—#Ç{Æ•;a„yH³ò‘Ø£¦Â¾l?ÿ¢1ÆÉ [~¿@¢D1]ši•ê’æ¤YH´o”4êåð(Ò¯9uæôÏþ¦©ÙýaP$¡@ga!c¿Iˆ3¨{¶wJ»-—Spøfp¹ŒË5u1.¨ßНŽäM¬°	uð¸˜Mçѽ:›œ’?V˜Éqûú¹ô­Þ¬øzþÓKudéH~¿”åÌ]»:KvùeÌtIɗqylñ¢Bl¨B70yüŒ]:KvêöH=ыK‚ëßRÀ,–!Ä.4ôC)ËKMRÍî/™OAÛÙ ¡;îÓÍ:ä.æ>÷×B·–Ì4b[Á“¬^P|øý{ý©©•u™“oïñÊQI)iyÁÐÔÅgž%©xÓÆ®kJÜÛ¡]ÒésÉ:Pä\MÙü„Œµíûõ©NXÁà²;‘—Eò
238
îIç{™ö^ޜ¤»Qºþƒë;’3·äî`è-Ö)íÃ]nþq+¯á؇«ä΅(*Í¡P’À“×Æ(Hü«u$¿]:Úûîh>®c>âK
õhnŒIqÔÃ,N/YL-sÜ,Ïy_©L·Šß¼À[Ôø²òeå–ùªnô&“êfk³öÜ÷zÏ»¶cy³MòpAuT«Õv³‰à÷V»EWëì;|ÚíFÕêµF½Ñn“ߨZkכíÿAÕ՟ù™úå‘¦tq{pl0ÈxÏú‚Äï“ÏÛ鍦}²z„œŽÿ°²²âXcLc2ÒUg…‰[|”zˆy]õ†–‡ˆìs!+꯿¡—¨²»·pxtüúäŸÿzóöôìݏïÏ/>|üôÓÏ¿XÝ^®‡öï7£±ãNþðü`úùönögµVo4[í­Îö÷Ï+/Vx=ýðcß²C¨ïY>n7¹¿×Ôñík‡lþh¾ë[µÎËØâ+²2’_l©ˆ–	©ÑïvHkŸ½|M@ñ‡\µ‡ƒ‚|Ùô0`^m¢ïhè9j ï‘|4ÂZäNRÁSRä×êoÚJX[{ésãðã‹T0-póBÈÿ•!Å×[•‹Ù/«/ìX/ìï¿_G@-ôýKÒêØ
239
­þþ{‚^Œ)€’ W¯Pý·9À««!øST½#Øø5×Ð߈=¯Q4Í5S<5†g@ñÔ#<uŠ§'„¦­ü&ËÚäxÜÚàM(h'Mpªî(ÏàÓ?ºIÐZ´u‹P8«(aô¢ou]ª/±KyL“‰+Æ8…É#@
240
·H’&úF8Ñ×a¾™B€0,IªJ²>–„iāõVk}ž_j×cß"Ôª¯£Vƒük’äe«Mþm‘òo›Õ¬]Su-µEðÁˆqRD"xN"‚¤ˆ ­¸«¸«5¥ÕH)P#j¤@¨“uR N
241
ÔI:A\7 ªDu‚¨NÕ	¢AÔ ˆQƒ jD
× p
× p
׬J-j’MR I
242
4I&)Ð$š¤@“h’-‚¸U[ܨ= z@”†è‹¬¡±¨£?(Bì:À	…MRªž"ۙLƒ¸vÌ&Ddá%Âô
243
À")kV)²Mzã{umM摦Åäí–,§éKøcµAÔ:†Êö5¢Œ5‰z'[bšgžž'À©
…€V# tMM®ôµ¸&[0J±h°…劬ց Ý+F _íßâ!¡].#“‘Uɦ!vg•ýAÚ6,ÚýD6QS›PMBۄXˆ²Ô×Úə¢y…ªè)ç_m²æ’eþ1ÕᓭOGÝIÇÌÉS™Š'Ò¥),ː²ÿï	sa¦ÞÍæpÞ:röÿµ­V5¶ÿßjW›ûÿe|žØDîþٛ7‡û'g§ç»ûÿºz}Õ®ïÕ­zõjk¿sxU«^uvÛWÕ½ju{·Ý^yBÊÂYoÉâ+¤zÄPôW¯Þžï_}<|O„¨þáÓ«ãÓûWWk0óÅ7*Mà	ðöäôì=yüê%Ý9ü-AÒGk`^?ÞßGþt2q½ÀG•‰g]-ä‚Ý–(â$ÛÍËÿÖØl®<‘ Vž`§oV ÅÜ`ò¯¤DèúØ^¥ØM‘uoÚPdʆã+z?
;Ó1PA‚8¼.ü|օ“ÙzÓk=Œ­ºž“‡° ?‚EùQoDÚ Õrm\kv“iwd÷vH…jÈBKë>ÆÁþÔSߑՏ-Ýô”=q´äJßâè¡K/¤«jq;¥…Ýi#ÿví>z7õ‡±¶¤7V&²ª$°N‚Uúò=Z`XÝI!¤l<)`¸t‘
244
•Ó.ñ#‰g¶”çù!µâWqLlX¿¬pö&.9Ótó?Uþƒ'J÷ùÂdÈýVK+ÿ©¼Tåk«ºõ?¨µ°d|þËåúø&l¿¸€œõŸðnÂþßl´Öÿe|Rìÿà
,˜`XYс@VåýÖèÚõì`8–—@XýˆÜºÅÏ<L“¦^»Žc¡1\‚¦)\áP›~†V@»G#úІÅ{ÏqÐÛDƒ©ÃtÒv]üÄãÞbo•nzC×|yf=C?¼$Ï@? ?ÉßÏþ|FÅ1/ùЦ•ÜM–ü…•¤À®®Îçúýž6cƒ¢Ü!(’•GòÁBàŽ¶äî˜ü^£«¶RÀ_…ç/§g9>Ù@ŽWýÍ.¾¶Õµuäo’•‚ý!žñfӒ¼½>¬,Р€,á#²<¡`•ƒAC¯¡Àöðh¦i#AMDž·5}3Kàä­,×$C9èìJýAÜÿ_‰‡¿¢
&¬tâðÝá}ËÇôÑ&zOA}
245
KötèÁýŒ°Ð}Ä‡wïßï'”þ½<Ù·&v`Hsû‚reكEú½•µ¢X/$–R‘ó²®mÇ2“ö¬	…Üä£ûH•OÈf,”ðÓ.ùEÃE˜@£–Úå¢Æ€ò’Ö¼¶ö‚U§hº´µ\|ü_^íìPóDH<pâxJï¬#xÿyCŸÅjƀ›'~x}Q¦‰ÌT¤ žå<d'µ]ÒQl)J„ïHg¡\Ò^Ñ$Òx†ú.)ÄP¥ß½và$
„ÎÄõ}i¦Žû¡ÇMQdÁ)ǽE«uƒIK<wÌ0ð(Å¡wÂs˜FÏ¡
›Ã`<Z£C#Ùúù>€*Ԋ0 Ã
´\g„?©NŒ(ùYÌ R¸>ôe=|€}úȕž>xH±IÏ]žºƒö%âÊÇ1V§!†A70é…=ŠÏxBOw°J[¾ö\þF¹•´˜`íß6C€¢JÆXx8Â-J,ŽxŒ<9·¸@/¨jŠ_
246
C’VÁE@…ÀKwߘû“¢ÿõmØ
247
۟±¿ 0Gÿ«nUÛqûO­¶õ ÿ-ã)wÒ°§º~<:;;Ñß«|í#¢H|ŸH\Øm³¿6mÿ¬é(&lønlýî‚CMyh;ôa=\îë-’›q*¨/ÖõkËéRè!}Ãm’Z5¶&`Őër1²jQø+êÍIÖp¶$½°®ý́Mt,Žõžð’¿¥
248
X$á¼­<~\QT¿¶Šl*aE_$čl¼òi"ñ¹eNöüŸÛôK?yö_2õãû¿VëÁÿk)ŸÐþ{pò¬Jϋš~‹—ü7·úRé =!b$Ëäû‘‰6*¨n*„"N€¨$\GTö1‹ß#Q:’v,w¹–”%¤"؎…-åÂø…$'õb’ʼ;eq¶øÚSá¿ò“"ÿñØ^ ñïòåµ¹•°ÿÖòq2Aºñ^Áþ²h~QœÔ·€9*•"2Y©§bÓ^«ÑÓi°ŽâF®ÐiÕ!ŏ°òÞ©¼„b!{CQÀ+Þ0À³ª––'Q¨šR)È­±Ç^å4›ô
qz‰†òï€
 SZ ¦ãI¾’^G6úpàzW`8Z›[Á|ø|Ӎü—æ÷ü+AŽüoÖkMUþÃNèAþ/å³Pù-!ÓQìhHøFHš4“Šîü—*Õ.ÜsúÇ*‹Úk9½¡ë]ˆýÁöØ<·³_L}¥ˆ”c%äújSrš)ZvvÔïÑÊÄɱ¶ƒÆW¡(ŸQ!LWê„Gy渽é˜|9'œp!þÖònžš=›C.ô)ÿ:ŠS”-{prËÛd¢wž;ñW+•°}!ú
249
ä/²ëßٖ_¢J=‰à^n-§jnåUêNّÍL¢M©€ô„ \¶d?¸av«ùÅÒg7~®&ÒR¤
ìœc`É»æ¾ïì|²lÿ}äzJ0¬ÜÀ!çªu“ç¼f4€:
9 ¿±–so£¬¦½µ&_“à¤zC‚ÿs2gu%ƒÀ¼¦bæ•êȪiŠDqVª`Hšrû¿–•l7±Ò‹Ii­Ü¡¦V¥Ïäéþ4Ù×$’|ŠBˆzv!H[M©QBaV§hbTcŸ™‹vÔÇ_²˜8â·blKƒÙ[×áh€­|¿èÊ?˜íZíöºV`/¬k`ìÐ.PÆE7}®‘Ý›Œ¯ñÑèÿt¸ÿ¯v­ÝŒŸÿðڃþ¿Œ©jÏR	–úfØ£ØfAJh¡ÛE„é1Ԓ©[¦’?F"&ä@ѦZ÷„JÒUß"þœ>”âD9ÕJÃ~gâZG Ãl•Csìòÿ­Šj–n'¹E>•ä[“°isòHºÏœ«~M)ÍÄõ#çùszù“æàÞ
‘ÂÜcGà»vݾ£ËÆ+¢?¢¸ŽqðÆòšm%§
250
ÊU	ÒØë‘ÛµFÈǔýâ=ÇÁÙ4˜Lƒ}B\³zøöäââðýÕÛÝӓwŠ–ž¨1Q–B¯££qpÞsÁ)û˜Ö6&Q3[ÅȚ=¶ŠV¬Í¬÷QJÅ{äAnµ´”{#»²PKj…„G׺ˆS,áù}ðZ¢7ع†…Q…¦Ñ-ÉNœ.#&Rªì‘}H)΀ëôbÁ±çN'ìr½îQ¸D»_“¤5ˆ^D)?Ò¤8Qsïe”aʼnüќ̱¥°N’¾óð¾;ƒK‘š¥ŠÕIV¨2•&Šik·u“±· ù=„•Šþ¯øÆ8ãȅӫg·Ók?p§Ý.[}¼tfý°Ò2oܞ5¢[6îU|hC²w1xŽ>²Ð5Lƒuäz°&‘ïc·ol4‚£™tŠ%w&B1aûÅWÙÝò;ˆ§î†Y!iL÷×nm¡âð	3@$v°dû¯€³ïàÐÃNžè±+àì{v"bØÉ=vœ}ׇ–ú…oÓãw{ÉX÷ñ„°ŠÑdWɘûÔ·Âêõqڃ,v3ê<±<;˜!w@؏°1¯×Òê&ûâ½Ù¿ˆµ¾Áv9½±§øbçFàüA\1
251
(Œ/qc“XÑ/+	Βõã¶å„)zWìÛSž¯N˜–’¢•l&<Å)ªFÍ #£oH4›y[ă§hþdR‰w›E(›PU½î%ÂthÒ:—Z{_•IyÕÇE˜QVTKòN’Il‘"’!œRâ(«ýþÔzÙ<~‰$5®†r!¦ô›m*|7¡ÙU½Ë‚úü´£ÂX:ނ”»÷J[^[>·@Qg1坒KhߒõÜiÄ«äèG'Vù+§¼ÙØØP^JP¢å°ba!Òí_$éÓF<\ÆûÛïÍÍMúòQ|æ’5U;séz[l$‰<!˦fúˆ(§ø.ˆÆTݖ¬¥ÅSIp!-/™äJMoBÝa\¹?´Gý}w
252
™ßàpC+|ÉÞ¤‡aç“0&·Ø'QÌᷝø+÷De
ª¤Ç×d³Gü-[q/\µ]|–©,iÍù5£5•ß*™3#ªŒ­{„¡–Ý©˜É"eٜ`.ÉæP2Éæš^„J¬YØû~Ùû¯,öþ¢°·1[3và…B†à
253
~GÝ¿¼çøÂxù|	Ö,3±HZI)‘13Õºo9J‹#Soˆ/~•—¾ 4x7
辊·ƒn§˜Úwù
OäÃUóº%;/LiÆ8؅X7¯7×áÚ/»fΰpO€u©`e±ðè*µ3IÆb‚ô€â[q6g·°4Ó1dFbØ´aInKy³.\Šo•5Á<Zg¢:&Y!“aîÊÂÐ5ÉÚÂ7­ŽÇÇIïy±ø¾¥Ö¾Yhup’½`¶c˝’
ãNƠ̂ߖ/+ÑOý|	³È”(Bð„pºtRÚ6‡~ǣťèàÉåŠ5é±Q“à7°©tSÊe#ÆÂ`iÜR@vœŠDP_œœí0AMþ'¢d3œ‚Ë(x¥ôÓJ°náfwd97ëô¤¾€ð$>7/Oϼ‚ìÉ N£µ-™Q åÓE^QßÃÒ&2שôȄÙzTJrfwÊjPd†Ç‚C¶VF{ôRÒ*ވÇJ`IPr´½_ššµy['LDrv‰õt…óA´ˆOI®Ú‚tKÇ:Ò2A!’-F&”[½Sævšî5Çä0enK{³º’ Â‹¢šïS†&‰ë>´‰±#X&Uòä*”Ïò)%n¶„ú²¢ƒÜ.è·¦n•l£Ìƒ0ŸBCÄÈ÷³[*¼ºçTb®sÄ$fþJ[ª¹ÊHl?Up»‘3SÿÕÙ¢5ǏcN+tã:×à
Ÿ2dÊq,…Š'ʗ'¢`²•(!`Ú>3U·P‹Ÿƒu§!øB‹›È¾¢meÇÓó68KÆê—N·ûVnCþß äþ…þQ\ÍUÊ<¬Q
254
ïbÌU"èaîghŒ;³ña6Âçgc¤}<LÅ%œcµ5%ˆö0éÅçaÒÏ=éá‡Eøa>~
ð¢M%Ó}8ê”jÀ\†’Ø°¶êÄÊß³Y'½µí:º&gv¥3Ùz֝§jJçpBÄK'æËâ6rV¸¬
©½)>ð)rL‘¾j~µ³»RÙEö֕ºÚ×_
255
K¯u‹²ý_kJ—PH¦Òƒ>j2•î“û2EÍçÌB,4ÿ~Kiž"›ÆÅ­§³la‡õ:	Wˆ÷º†ÁÏsr™+Ù}yðϪ‡u(´ÀzqŸ~+EçÂüN#¿Aíføx3¼FáC¶uä»cŒÆ®‡A,ÀÅþ	;ê?‘ ¤:ýâ$¤·_<üÇÔ&sÞ­Gó"¼XbF“l3¢ž
256
©WIÁ¹]nB2¤¹Y*úcˌªp"žš]{Öè<ƒ¾+âhñ@Œj GÉØQÂ9`™"j*­©{©a^ã»$SIý¯Þ±¼:q|C|—Šï¬dãKGçö‚Ì0
1Þ£GJ¿Sf'‹qSâîa'Fî—}wŠßýŒ½‘kõ}‡ñ	.Y¥Ç‘ ¯rS'ê#Ÿ„½^	³°~Ϛ`"µwýžm+Ë×q<´µ-*â뚒+\@Iû؂ý¸Ûف¬ÛSˆâ)ðò!‰£R»òzm=eIŒîS®Çz¢Y%¥¶¼Œ5ö
ÍQ5ʈ$¡ZY0m¾Î
257
!þÈ´3ÖK+Æg¼hyê:¬våÝȲì‚üe¾`©ØÏÉß#üãÔ%3&Y	aÊ­2$V¶a²mÙ&°˜&M!ӚÁ7ŚÄÙ'»5(½!©Š£¢	‹¨0ñëº)픮8¤Š7øh£ÇˆuXˆŸãD uu
258
Q¦Å$Œå+m‚¶ºxàóú%#žE’‹££éhñóN­1fÊIW	·Èʪ§Æd¦‘¹OD›º&'âð±8ÐC×£¯Ð?ÐÏØ?uéß;(QT¬ç/4õ²ze¥8‚´x¨2°–Ê‚h׸¶ÏP‡™<(ÍX˜wBŠwI*?žWHû+§g|1gÐû„‚£hì3hW¦©r“Ð3íèP@‘jÀ•&Tçl0˜«cg§´î³£#“Ž9z00é˜Ë ÝÚ¸cd×qšÏ\»xÿá6áh÷Íù¡I¡^V‚¦Â5èd–È%L:ªÔýHáƕ°=ñ‡p‰‘ìƈ.…®q€†ØƒÄÈÓî:²üÆé ÀE×ögz4Ýrü[U
259
>›Ð¸¸ 0а
260
®ôbf3iÄòê¢TYÆ/"bxäðhɇ
261
~­þ¨è9bÊëkFêZ¡×Syv÷œ-m]
UZNI½/Ö#&ÌxŠ,øUHÛÿ(TI^ÛS¢+џoý띝“ӏ»oN®ÈÝó˜bÞª/%xº+Ӝ¥‰ˆNI³ÉíQ¡ôíN1ÜÛ)„4ÏÜÔ£ÿÓdäþù‡´Üàî¿>{¿Ðэišñc­•>(7‚aã͆PÁR­ì@’ùBó+,dËO¾‹ÝcÃÁK4ÂtEAr؟özØ÷cq‡!óD@ŠÂbÄÙÙaˆÂ4”,QQ™% ÷?"Îë4äÌZ¸t ŒjÞyöØòf,ej¹º"ÓN¸NiQ|²ƒ!!ßÀ¾‹!›Ð‡
262
â5ý8„#,Âãl€S<±y€Òôå&¨HÄ4e|Ìxœài¥²¶f¶RñxÅO7.n	Ž…=
263
U’dt¾˜fq¥0P5˜DLg¶ßQVvnå•wö$be"bóš!# S)µòu=EÏ¿ƒÀß=¿Gm'Õò\ù¿Ê56Ú£=Û!³÷)êÒß
264
/žÓdéä)åG@¹rÁ]V€5HÞ²‚
265
éùýåÿÐç¡A¸’&;ÿK½^‹ç¬m5Û­‡ü/Ëø˜dxÉM×2²IY?5	:Ÿ+Tr‰Ì+ôKÛbûÇ0÷è
òPœ#¯Vé÷¡ÐMÙÒʟÁ<VH1zÞw{Ì-¤Ê¥ì·É›oÓÃÜ"c˱'Ódï%j"ÿ{ìÔ`“&!M–,¬|y8³·»ÓÀåOA¯	+¶é=ßór(°ÀÇö™)„¿æÖ	þÞv‚ðÕ4Æ6<¬óG“ØÒ¤¾Œ/2ôm-ìþ#¬‚ÖòÇck¢y‡
266
*)"a¯ÆȦ0ôðǙŽ±g÷®×ü@Á^íìôíkòµV¹/Á(*&Q-"—Ĥ¨âœÿOåD‘ÆG“àFÝ!õhF´Iû`Œ¡ÑÿG#D(êÛ¤b8][t
267
Ákß,¶?ÇqæŒXy¢Šˆ¡Æ»ÁCÔÒ[› êbdõ`Šá¾ªfñV›¦ÈÏl…`ÏMF£€feŒIJÖÜ|àìÌ/
268
xFVÎ<•Jn±ô„'J±ì¤&4Ìå”>¼áŽ2qÜ+ä È‡’²#KÇÉ4ó„äE[YãLC½7Ç)®ÄòsòÇã+šlÃÉ!_$tJªÆÇ R¶²)Ú¨ÈzÉKӌŒb_˜¶•uV±.¤ŒŠ®ßRì]ãn/ »±v8“£x,ßÜac*+sÐJóq‰µ.aåï¿Ï¹‘kqäO)—ŒW‡®"¥œ)kF’›$Dã҈)ÏǼ4·ÒÞ(EP“_Ä]ùÔAÐƪfÀÀÄéGŽ`ýHr8ÄÛN:°K¢a$¥ØúŸ %ß´hÝÃîéPp¸üëKk/M‹;W{)üC~²cM&؉K€ø?]U`Õ09çR2ˆÌ•eQœœÕ{yMÉ¡‰Æ¿J‘rQ]û#lyoY§>YÀ r©/ŸÑë+JD—¦ª';V³8i#Ú?½*ùÓ²“{UÞ¢ *=•Wd›p›ÈU÷e%·3RõÚ"
269
ýÕ$ð~ ï_¡	ëdÅdѶ‡¦IÂҁg9þÓÄX”2hõvh÷†´D„±=bj1m"ô©÷ý£GõÆ«qŒ´ÔG þ…ïäŠLp¦r ¬4u)¤ðÑÀ'$@fa¶ŽFݲÃᒼ`h/Ä0ÑüÞ\ìXts'“¸m3{Ö/:A—b_þpzøÓ»Ãý‹Ãƒ«ÃӃ«óÃM.}ã{»ûN¹ýòœ’{„6î€î§?{@^Ə(4|d;¶?ä$¤ÌÒß
ӇA¾&lã%Ôã—!…##ajÞî^ì¿&=8~öá0½áLëa`[wԓ„<OfP|n•6šâ¯^ªwØU°!¿&2õ‘–¯Ò©Hw¬h9פ­ckF–¯ÏdgŒ±C]Aɘ<Ew†,–/ÄeŸA@h=ÁýußßÁÙ/Âà•MFtÌf­?.l79œ4X+–Qª’±ûu*”‰
270
žµZÃ'¾¸ÇF5j„²%f}z”æ'“0¤0V,KS’Í€ù¥ík$ì²Ú!%
)ЖwzSB™/,Žé-Έ™xæóL”|̱ꕨŚ픒m‰ö7J{䜱†ˆ­vÁVP]*Ù¾YRjO‚…%w.ñ<Ö?¼DµÔùT͚;’HS›ºQKŒ\Úª‘ anø
271
²ÙøÔ\(‘u#71µlâþæð…תËô)¤£Ä–ªo;s@»"XÖla¿b•¼²0îêÀÆ_Šú/))j£îæeÃ.×[°*G½Tý·ÅmÅ¥Z8÷…^Í)˜åþ¾)‘ž»T·PCešg,ï9?XP׳z®rÖÿð¬Dâ…Ð[0ÑOqʲ„ÞJ6î…õ5r}•º¹»Æûϑî¹÷‘~a¯}Ewºû÷¥›ì,ìÞ{¨¦Û6èYÐØC¶Œ¥Ô¸"õ¡O@}H¤ÊÒ´OŸ¼HK™q4³¥ñEƒ6k…cF:óE·:^Ó¤N;b
¹¬£…Íj|ˆ˜*—¸_ԘܼSµ‘âRÜ.lš¨T‰tlD$åR
272
Ù&à0BO”éÙG)Üø®~4cÉ܄¿QBB‰3Bc«Ð…|î·¶O¨qMöŸv0D·dcûÌG–ƒ©MaêGŒaHìÍkzÇ0"9{°–=”Ã{Ҙ¸Þ¯Oqn¿(ÆÐì=’	´a‹ÝµÄþ€‹S–Nƒ}y…ŒýÒ61û1'J<£wŒ21©‡}é$ˆßèºO¤»@˜!‘Vܜ
273
÷ê¥öð¹¯Ožÿßpudûÿ՚Mò0æÿG>øÿ-ãóÄÝhê.织W¯¯Úõ½z£U¯^míw¯jµƒÃ«ÎncûªÚ!CW­îoï¶Û+OHAÛÁ¥Ê®Š+ß_½z{¾õñð=½Q´*ž^Ÿ~Ø¿ºZƒ@â¬Ã
x¼=9={O¿z‰š¬¼€¤Öà°õxùÓɄì}T™xÖõØB®Óâ=£z†o“¨±Ù\y"A¬<ÁN߬¬H‘“À»"üлQý$¹¡[ç<ɦé]6õFTý+{Ì°ÿJzô™´Ùõä'´Aòƒ1»ÞLé3ÎTWMŸˆó^ %ôÂdyáëÍ_ˆz0­£cv,ðåù_”ŠQ¼p×uº"ÚN¬T¨³¥‚·ëLæåVõF„ÊKu¡	YµlºuTÝú@Cù¿ä#~Baùv§î
qï"¿ðë)̜†ø+232oÕô,*ÎN÷ÀâɎ„RJÂ—5CŠ#¤”è^ÕNT,ζedä!Ž²¾9.î!Üc	ÃÙÀ'¬0º¶Ãï}Ä«·
âoSbáÒW©IÆY!É!ö*òH/¹Ê‡Ì?^°¹Ç§Ò™’æÈÈÜóæEªÿÏÞ·?´‘#	߯á¯hØïÀÃò\œ#`f¸I dæö’|þhÀãöºí<v&󷪇¤’ZÝnCvfñn»[R©T*•êQt߄7ù–CW;¶ÿ:¦èFX’)14|IbËÈûâ
[×NÁƒd©ºÎ_
 å¾KÈèù[¬»•~©¹jÆ°$T
‰>XG½	UÊJº"ïX¶ZÑßíJ*lØÆ(¯Övï4ˆÀ/BÍi›-”û™`QŒuÀë\iÀäºÅ!zò³Ívøx˜æqjP®z݄Ä
ד„-þ
Èg5$WS÷áñ3òPhƒ:®£y/ÅsÑd]ŠÀºšŠ¼(#$’v¢t%­uº, (¯F‚)´žš)
274
áPgèȦÎ+*‰EÇyWÇ<9ŸŒäŠš_	JÞE2KÎÅ%Œ™›Ö驤ºN´åBwUå`
275
/ÏBe֓ǠJïMî&u•žÌtd’0yîC9À4<Sëׄl’ùŽHY
†Ý òS?FÉå ÇŠ§ bp”£
½ã¢¦·æ§GóÑèaª‚Šµ±¨‡wÈI?<×ôeN23l)Ç'yFqUæÔÆzº èmØͺUV†öÑÒ"¼ÉM,cö‰%y;(-GüZÑ´±alÑÛüíX€•£/J‹ÐµÂ¤"´ˆ…1—UÃÛÈ-©Âb3%p¡-4ÿ˂v¹Ba+>cflµtƒ‘|¨“|—Ÿ…ÏWú:þ­Ñ\E‡Qk…?ÙL‰
ê£_0^“£öà±úg+a~F“´/
276
|k-‡ƒKª{ˆ’s˜“-8?ŠN¬Þñ2ˆ¼²Wˆ¨`
Ÿó—o¡*ð©ìâ!?AâI-†ýNàôùǕs&¹þ¸‚MŠPúc¼LtX±\‰	)¥ªY²Rï÷îžÑj£kmŽn6\y’wwtyX¼oà±8WµÖ˜®dЂM:`x¥;W´â	_è»n¡tµ°2D¯€3ö¯¦ã8_Òz±õlƒ¤ž¥Ýš-î¥À®:ØÒºlÀkŎâ~ԅI뎾DhSFÜI,¹Ù2»ývÑGõ£¸>7ÁÔ	k„)"^Ü?ú韫-÷c7gàKíácRÀe
277
¨AJ}èõ*—ßúÒæ?Å÷cˆdrñ?î7×Vû÷W›w÷·ñÉÅÿ iwn¨”Pæ>èÚ¨HwYéfº0"sG>OÜ$O3Š #ﲺ)^”o²ìÇCö2ö!IšpãôËAûõËÍ­ö«öÞQgë‡ÍƒÍ-Å¢gQóóÎÎÎ6íhtdÚåM	ã5‚ÔwrW3ÀÓÂÔýl™Ñ-ÃYíQ
ãb؍…u
278
żðÖ|{o¾ýb¾}Uß`_¹dY!¾{qJdS‘)ünD¥³åOŒÝRãiïìpSÇ_FÉr:Tô¾|?8Å6¹­æçm,}lǒ·þ±Õž<\wËó!ò|Ë-À±|^#Ë=¿=¿Øã¶[ŒšôKm†¥6`:·ÿ†[c¨…¿Õü–V„šóDmÊ´L_'ÕÁÞv¶·›tm­ûÛÙnïÔ'Bª
279
®6wŠ@šg}Õ É7£³'/Ôìf»D(É©‰fÊä×ń£ä§¸§ÈõݓŽšÄÑS›FÕبa RIºÖÆ\´Kbn2ͬòß5þ{Ÿÿ>à¿ùï#þûØ£™UIS«º•Õû^±5§Øïí}ç­O–ø­#%Ü3’îòª¦YC¸¼ø†q.S»>Nµ­ SÌV“éåIӝ!lêûdwˆ[J˜~ªÙØìŸnž~T|#®¡ïøEC^¯¯ãÙ­ƒ>
#þyÖfåeеÏÌ»¢0¬ á‹"Z4dÒGJÂÀ…9ªZĶê–z¹ðÓhÕІâ/âÓ¨—¨ÿñÐÓ¥%¬ªgIVuäÅ­03tÏïþÙ3Ñ¿l›à…À›s‘U^ÇÝQ
ÓKðlÆÙÇqd3~ë%ˈ¥ã·pˆ}W{-3vµ<ï`ey™^Ò/ØYj-=ŠE´".݈tI3fäBî<Ã]á¬GÀ•©Vy„ ­‘&ê>U¬îQnfÕèÇÕqÇÙ¶·Àø7Ðn¯—œ+u£TÎ,{4íå¸dEà9ü§Ó”³5Øqx;Ä´ˆŠ·kB
[LjÜg¦ê pCÁ£0G²ä–j)	bOC\¡ØP:5ðBßô&9ŽŽŒWƒ³Z°%
7ÿù±mIAE™Bìºä]Í@ÉmEüRcZ^ýêLÍFôHoóp¬-¨öÄ«F£>	([%PµóP­®Uˎîf†5üøO®¾÷´ðÿnãÏ»™’¨º§˜ô†-›ÂY’…ZèiÁâžú
!æ(P¡Yƒ|Ǻ©ËÍÏßòÁ>¹4ᚎÆ#Þíªƒä¼ýyžC€‚b]iô<jp:ÙnŸlÁ¢õÜ«ZÝHµYl}åU¬„Î$ð'Ã
ª!u¢~Án2€"<	ѹ£‘NôX¡0îŽ.Îƽޗèƒ:’£	ÕÊ(¢«Ê`˜î"ü'çÝ>¹Ÿ¨CX±ÈŽ:´¤Ï R±0º‘ t3œ?ûç#Û¾«†ñvÿ4ŒoóBB±2¬h±Î‹^Üÿ°?|›>&ôÁ§[6}ÝÄv°Â^:z­Hy÷0Øb¥J uv@Zه“ê+uP­\•á­Xú(>æØ÷Ȏø‡¨…ˆŽÇggÉÑ	Ü^B¶.øAÎê\K‘•’XÍN!g.T/>P«zîZÆc$ò–§¥’&5ý¶ù¾®äºâö—–¨`NîÍË>›rrb•s«@‚6÷ú$ÿ¢VÉÑþöþ:/T¨¤ýå&f|ÖkÏs•UéšÔ÷wŸ5[ݧv¦ZÝ¥¥’Ë,/•\EŒ«æßvÝE×8a_¯oj™È»þÂÄK¦‚ƾ]ވù”oó‘<É:Ï×µv£éfþ
280
·n—õ_ÿ	iézóï½ç]‚[I_„R ˆ‡ÉßÇ	('¦üi˜‘Èt‘|ÞF´·ŠÐ£¹æêÚý=~ò×øøä49›L!ˇsïÞq&èŠÜÚTOŒ¼àKÈE3£Ûә@Ö<©»@è.ktœkô'ó–Õ~Èw9Zÿ=>ã¼é²
281
hº9#*Œ2ž>©IࢨIX^¦_uG(·ÓåʵÑbTãúËÑ*ì4xÀ}ïï6Íf
282
OABP¡©4½UH­LáÕE]Ìp…3ž“›P¶uicW£Ù×ïV„jeÖ¹°„ÞÏ顂¦‘{ÇГ8—éI¥(
å#-âÚ®] IËyevî’õ¤lŸðÊ!ŠW‹/p$BØ-H49f Áhx½ËËà2ùj¨4åã
283
ÈP¡TžSJ¶z³c+OWz–³Žºså‘%núÆf.BíR±z&;Sôh
ʋ’ÕNÅqg˜Éé
iaÎض¹øJøÊü—Ž1!m¢–ó\…¿Ÿ_r9©c=D-큳*è
284
`ƒ?˜þilÌ÷ð6;ú’ŒfŠú[XpwɹƓÉõT‰Ù
`ÚãüÒP½(ð4\ÀƽY7÷Ï5íþ
285
ÒÙB¥¸Zi|>·°.„H\h
z•Þ¹•ÞUªÔw*õ+Õ9uF•ê:ÃJuŽ:ÇåuJ|rÂñjõý»‰'¡›‰Í&ùbƒÞPQ£=‚±iWAêë
286
¡€Ï¤ÓŠ¿ðŠÚ	hÚ颦
R?\a~ÓyPAE`,‘Eµÿùyï°®ó¶kQû4¼êÑêʚ"éäd%z¸²V¿w»ƒÈŸ=Ý0©¸-€&wTÂ'ýò_sœSs«ët§›µ|:žiM»s¬òWXåâY²¥5Œ÷ÛóÑJ»§8i÷ç
287
Çb·¸És§gjÒ¦†g¨‚)1)xiŠïÔâ`$`d¡Íxþ±@!6óïþge<¾“Mòkȼ¼Jj…$Ø¢ú)µú‚è¨)‡Þ€*)Þî×R¾¨p?P¸_Tø8PøØ)ü‹/M_¥…­-~üÚáÙt璯¦_a9O3éTËêÉLˆ×gÐ*%m”‹pî/‚~)ec¾q—µ@;Y2êœè¾…X·ÞjnáLÕ¯ˆ–rôx¹Wgåå$EIš¯uŽYt¶_'5Fó©a=Ȝ8–ÀµºŸŸ¢{§sˆHpùþ£H“+©é|~ö)fŸŸ£É¼Ò—sA9Lðœ®V€è†nðvíõ#‡¹¾.C{3Õ7F÷eºŒÑõö‘G_´RËËË}Cýub.Ȋo¾Îðf)Qi't£ŠÈá¦ö­<:ëoàeˆvikv.<}Ô̚Dúaç‘Ë©$”ÉZþ”Ø©äYq
288
W™xRa~d»r–äsg®ªàC᎑é”5&àG
¦pHÁŒ[ò`•£7}2-§BÎ=[F~¹|¹Þ™»PóM´ûÀã_¨Cæ£5¶ö?G1 —2~mRlÙx^8¼!ø->“ü~ÿø͵Ǐrþ?«ÝùÿÜÆNjÿ÷æh÷åáãÿMU÷ÿ¯BªdñzîLÈHC®KÀ)Èqgbšøv–—×~à<¼Ûj8÷Q
秡o]LD½€«”fÑÿ$·"öÅMÞy´~»ÛÅ
©¢ÜF+èP¼
289
7xPw[¾ÂyÍkà
290
G.·…ëž›r­ý‚|ëšbZ«Èƒy*ökøhÿÿ<¸·_ó™°ÿ?|üø·ÿ?|øè.þï­|J¼|'ùëZ¯ÜR\uv"\£É{
‚~H>îôL~çñÒŜ~݀aà§ë©çÊ-öàÅl‘vo»ï=ã2Ó&éB*ç3}¬‹«ç˔\ŠV›VYjېZz'\3X¿™¯ÿ×pýæ‚=º¦Ÿ×öžÁ SmÍ&_áîÞO›/w·;?´ÿ»ÎZ[vþ)VK„açÅ'8,d 2˜”ÚéjÂÊÑL"WEk«¯ÎEÝIH:kú¾A²Qà‘áu~?ù<ŠàLJ¡äý"ZÅÅ`Ö)qé8â#ÁAՇI6îVL〻®ÔºÂN¨¦Æ1¸
291
¨VV¼‘dµC\óÈ`Z‡LИ±CöÊa|QEx"ÛQ=㖏tl›A:Æ9R%!{kW!›Ñ'#8#¸bÌâã}å-ëmä‚7îw¡ß礫1-8þr&Ñ
ûÊÉä¾o—%1è2;'ŠU_€Æò$ùfowk»
/
‘‘µG^A-O]+ÆDþDwßhÒÏQ`Ð2£Ïcö¡³&92ˆŠ^žN…|
ô[Òˈ<ÃÔozõD¼r܄[WG§õ¶Û:xxyÍË®M/Õ@Èw·ãu÷¤¤;éu-?º>`aF@¿hksWrQ‚%µÐí/D55㗐zïg(ëK=Q:„cŸ:HDÙ¿NFSò‡¸¯ÖËE`}mwk˜ÏDV!YC¢ŽtŠ§e3z£âæ+ÝòÓ|—¦2îr¹Šääuš:oð釓ÄY—š1æìڊ7"NJ©dî3‰ÅvJ–È8 ¨FY}€“ž§ý~̖ùƒ\l9ú’ŽÕ4Áñ:À98í'³Ø6ÿ1n÷dáÒ\XÂ;Ê»ÏÍæ+h©plÏ©·çäËc÷åçåh!o#LyD½¿:õúîËMçåG÷åçå™ûrËy9t_n;/çåªÛlä¼\k:/Ñhʼsß-Èwî»wòÝ;çÝwâÕwΛ=”'—çå¦çKçe{MÕnªBjÊÐüïåaTû‹Ûړº¨ô:\é¯\éµ®ôWYé³­ÄKv÷5‡ªÆÁ2œ2o‚ežÈ=ªxœ¸çIÊÏo¤ííÍ×m௬`m;Èÿ翛PûšÏ„ü/÷ÕÿüóŸúuwþ»Ñÿþ÷ë©Õ¾Õ«ü¡µ½Ãä\‰üA®G•m¸¡¬Ô†J³ñw7ü£µ½~ɲ¨ÇÑñ¸âÁY¤–³’^ k†Žp—p	¢ˆçY9öÔF˜Rea¿>ëö’•™à	^usÙÍNf༌ÆԎ!À!®ñîìø€aÄüV»*y“nìÃBÍ¢{n•FÁîªr«èÙ<¡]= EfÖG¸Rãì/]è>™°ÑϹwÃwý¹)Gaý³ËúÓV}qñʽ /Xµá4¨¢¨ÜöfopWk;†¶ÿ!ѵ°	þgÚîö(iބ^5dª7F@å^~N‡§UZ·€Ø!-O18Ɨw£§ÎCَƒEDìYA¿j͓}ÏÒÈà<Š_¨KÌr=p`"'ÂÏ6oYqCƒqƒT ˆ&Že,½z>7WÕ?%Ù5ï«Ô¿‡êß#õA¢Déwê¼>׈Úß·ÿ»³à·ÓüÜl7@…:
|QÓËõóÖÚHRöÁ¤yõ÷ƒTõà½ø«Âv½ú¤†âTÀˆ´;ï>¿P|±d!4™¤Ç‚«ˆl¦h½§'X¾Z¿ËËËsˆTL1vÕs»?iép¿+++7Ùï®­8iEYäg`€§àØéɇv4üRé-/ÜÔ)S….Ÿc—nÓôbüÞ}QÒ¢Jý¬ß±Ói†8¡ë¹ÆWɊ¦ä?÷÷¦¦b‘‰òR¥Ý¿L³ë4]eíÎ2ƒ{ûþ—¯
ŸY»Èœ¶ëÊ,æùzãý×ÿÿWÞ}uΎö°eý²à`‰ã/­ïž¯ÿÇü³¥ÿÓè¬Ìþ¶¸P«¿}÷¢GJ#¡€ÿN#fŸ_¸ÎŠíš`ÑöôZ„_Š†ã^’q&“•h+AѧX‡{3±"JDýä#e+1…ú_@*iDo£÷Ñ/Ñ×è/Ñ|´ÍF¿FÑ»…èÝ\ôïÑDÿO7²ÛÇcÐ1&ž< òŸGÑrô²{“¥ˆ•r`&OK+^;˜Û\7ó¢=é(‡ c^Çÿ.S˓š
M›EkŠ*fA°Èþ2¿8ûëÆ»…wsŠ×«qùùºóª”§NA}¡8aWÌó)Fã†IS.¢jÝî>”óUÖ}­bÿ’(Þ»“óî9àX¾/è àى°Ýª(Û.¼[˜âX¬º˜æþŽ„Bn^ÐËÖEz9¨*6ò@––' ­¤«ISœƒgIÿˆèõYp)9¾ÏU/=øΘÀ{É.:÷OÐBdfÒuWkk[풒9B»´Ý5]÷#Lm -÷-ç‹9ä8„o
292
¨5¯ß‡^¿Š¦þ/¸þ×Ðk”áámˆpðf1÷†’wªWóþ+HªžÏúϝðPâ×0iïTǁ~ŸØ¼MuaFü´¤ÛñMͪ«|¿µbûîSé¸ÿq²;ÜDìÿV>öíÿ=~pgÿ+}ÿ³»·ÝÞ;Ú<ÚÝߛöè
293
UÿÐ÷AÕlü»i‰u$ÛòŸ\ÜÚ¥®1ÜêC¾»~Mý¡üuöESYݛÑ"CފxÀþÉàZfc,:ž×†æX¢™É³Íö1{¯-D¸§°˜ òNïŒõ(=J¿Å(Rwˆä“g<Ê£§‘áäÑ}‘»ã·^þ!þ™\¦Ã/7h>‰ÿ7W}ûïGkßñÿÛøØZ?=M¾;MFq·§i!l.Â÷‚ënû„Ê’°1G©ùΈ°ÃõõËdxžÔœ‡óÑð"“q@.;ƒWX¶õnÅ<Öhxbæíòµ¾èÖ¡£|¤d_ó]ŸÉÔÿa€óðúú‰b2£¤ÓÇÄ»ºL	ÒÉ)>Œ˜“¢ŽÁOêæ_e+Ý>f¥Ã"ÎÙj‰N’4vˆ•Ñ39^ó4(zÄq)‘|hCN{ »Ï¿Ö'Àÿq)ߤÐþß|Ðôåÿ‡›«wüÿ6>El]ósûž»À”ó/’JbʘÊ_‹¶zi_3°=d§È±p0xÖƆ"j¯Æ¼SÜBBĠؗän­ñKQ•9¬ÀAš¢^‹Òü³¾‚õ߁X7Å&Ø>xð('ÿ=n®Ý­ÿÛøTëˆ&‹€Sˊ7îj(åK©…6£X_Ç$.º_DoñÎ|­©³èe§›m³.‚˜4Ô3Ì;/a{=|ž%?Wæ–ÆPCŽâ›è̵;ZÁá
294
µ:ÿºmûMŸK’\«‹Dnï,XXU'"Œ„óòaóÞKÊbüiñ#	‰#ÄrÊ?P·ìº(ìýÞQ'/®'=E\¼qæG‘ÎÎ+D
295
u.vɳrÒKય5±6;"qýax×ÞI꿊NÕËxP¡–™!®›KíÔþZJ#ñyÈ=W†¢º„B€ÿøÜ?²xõÂk¢^pÖK¼¤é¬8O‰Iá4e¯‡Ìļƒ·°yª/¿À·ø;Ðpò@–P¢2© Äúš9~TMr¢ªBȆÊTë—H¬Ã>ÏZä1Ì©ÐLmEeùÚê!»QƒBg¬iìuÜfÚÁ›v“ªÚáè5/ŸLi~.âHYg†=¥á!4”óóâá[SöýòF7³ÜWsU~K©AƒË!¦;ÀÅúº9B-‚‡+’¢ÊÍ
296
Òɜç<ÐüÿBóÇišÔ¦•|©vl²îhy}üÜñZàU–(àOC¸¸—‡c¨ˆE4ÝþïH0œCŠ…‰3
297
ôé,i•@ =FÚô뢤IA8b½x…”¶+ÄhXè§ç©—EY#u©“ÐY‘¹.®Œ¿ëcîš8›€­	$ˆ-_›/ê“ã¾ía¿?åaËÿ$tWg×ÂV1žxÿ·¹•ü-c0Î.:ÇñɇZßè9ë‡ývôÝb¤Ï‹ßU>ÀUg¨H|ñ<`-“¤R›Oހ0j"Hž¼T_ħ¯Õèqð–k‹©³¸™7ªñà¾ËzlÂà‡äK#¢¯x^)À¦¸
298
ø¥*ÕYY»²d]x (?¨õ÷Q
©3JQ wî ªœEB1š
ÖÇÇÙÉ°;™‰ÄYD$¢ìRD
ñhcYhZ†+ÏϑÄR,τ“PŠ÷“
‘B¸Ã/Ì
s«bhî 5ˆ|äíÑ3g3iuG³ÏÄÚn--uEJjW:lxÙe­Œä.‡‰°:÷DWDßÙ2Ùþs̹à7Š–é„Uˆ•dÍRª>&©eҖQºØD¼lÉ7‰^ؘk¹Çˆ\ž;/3¶;9¸9ø{׌9曍Fêjì‰ñ™>6ŠºÛŒÀmÊ;%‰—%û˜%Žð†æöøv^½‡\™ó6ôˆ\êéŠsªSrÀ,Y	n=HíÖˇÊÚ<‚AÔ‹‡àq€ãaUùS@n©O«˜ÓÓD35«Â…UâurE€Vš
299
î3$0q®ÅAÝ\<‡#ëåt.2À^>Œ	ýiñ[|ôôiÔåpsf9”³Ø{@úBãÇD¤¯0^º î{OÆ
JÀŔõ'´“(¸ÿÓ÷¤7r8)þ烇ýøßkšw÷·ñ©p¿o.çàúªìz¯ä^ßw/=÷Zï„8SðZO\ö«­Àþ Ë9æhaE×~` %˜ ñxÏßÔÇýíd0ºÀ;:`U—ý1ä¾Ø¬·"Tíƒ10¦‰¤"ìP¢Uà÷<ð~sàÃæM¡È)I†éPƺ|öӛqŸ-ráFäدÁ~Û…ÓÑ~;=ƒ/¹«‹˜ªÀ²zmÒ÷”…Z¶¢)P‰’KŒ:µiдž,{N‚ ”jj\¬Å‡¨{s^§´'ÂBñ§o˜ECoé/ƈEÂb"4‡ò^*Nøj-f° §Ç&oö`bÞÀuŸŽN=yl¼_æë*C¼Ò@$¸ö¡{­-$›ÉC±´>yøÚsìیÜ$œî
300
1cyÞn•
HŒß‹º2„sõÚ[^v	eƅӁK¥±“Ýœx Ž¤™:¨r½JìºtV©P䏫ä©KŸD:¨'Éiö#Ê©À·ÕŽpòaíIÌ¥#>"ÕçòNUÝ·ª©¨’Mõå)^bjÌj¾¯iK!ÙÃR'[³EaHÉ)ü˜'Í36J¨§Ò™„ºgý˜aW£[eɟw'œA,£Ó™±¤ƒŽÐ[{V‡qc‰ÖÖL¸½\õ“´×KÐ'5܍ƖZ	M—á!4BQÚÕð{;²Î7¹X¿‘<£ÍòdJ¬ß3ó©ÏI\H SuE$Ðb™Ó¶íœ•é‹P•5(¸%&w®œ”¶#iIñuÆ-–?èêIp&âKp¡‹}±pÁ*D0‹qÀˆÙõp§Å>™,$Êû‰?ÝÁ?ηáÿyµ¹–³ÿ\½;ÿÝÊGûîío·;ðŸov_n·¦u½jý?ž'hÈjLÏ/âþi¯ðìŒàÁÈsý¨zL‡Áã/eÚCÑEþÒ2Œ{ݓ
æ ¾‘ÒsÐ6:‡R`c»Cþö[î
—Ž´]<gqqäÎ%çIÊÑÑ*®aB¤å‹äN” ÂçÏ{•«gT÷úDzð(‹OLSõ‹<Á„{X®Ý±>5PŸƒa÷£Õ×srXPúoi
w‘ðmðƒ~]A*(/¨9w<ÿdk‘V¾0ŠA˜¾‰¨£eüÔ-¿Ë5kñÒÊ´T,°Ìâ«Ó"诽ö(YÕFd„AhHvo^l°|h
301
°òޞ2ZèSí„ö¸2ÿÖ;ØÝç:Ÿù©nÆh‚ü÷àñãf.ÿçý‡wòßm|ŠÜønLÇ?•”¤oò9"’‡àú:îÿ¯â~|.ϋ	Æ4?Ñ~†…çDÍ|_|مhÝÑ}FF–yHìuýÊ09£ÁÎ*¤ö’O:ˆ¥Uª˜Í¨È—iúa<અði*€rӃ1`Ù#­‹OèZ{ŃåÉRÜB4…ͱóº¢ýžwítnj«mÍäÍEýbÏNΡêwP£¹+Ý1š0ÍÝþRԟm¥ã>¡Jÿxk±óžÆJÏÉ@áÊÔڈVf¬ò¨ 6‚Kt
`ÈR¹;z†MI{| ÌmPñB#^\dS«e*„Äê—nÖÿ0Æî‡5Gâ1«¡„ICx
302
ÑYWž`æ#f<}rýDdC þ¯™ˆ&y¥S™Ý»‡-5t›J¬¥ŸùúZ’-†²ˆÎQþF$AŸ‡žåºö$W06P!ZíL~»¶Ð2Ö6U¦||¹â°#ìæ4`b¸tfzÅYc„0pЃÎ.Wò|Õv4Vì²) R­P-5²f1…†AvhxŽ¬°i—câánŠ€†à¸
sÌ Ûû9±ÇâHôãœ	‹»ãöoŒ‰ÐÒ&’_!øl|óâ1+([Ý:oedÚàÆf8Sh„¢±©P¡¯ùфðÀ|
¯‡$Ç°k·Ò.À;MÑî®w¢à®nöhr%3eÉéÅñú‚¬åª²Ëåÿ›I5Aþ_{”×ÿ>||çÿ+Ÿœþ·ýS{ï¨réœúwºê
303
í/1³©ô¾—ñ`c5°1Z®nøžüIüÇS'Ÿê[WLò’ºÖ‚ìS"•å´iÔ·#¦G³½;"ÙnŒµ¯ÉÑþPÚp4|ÎqBQ‚Ô4g«w)Æaʟñ¢_´KØҒ€¾}
´ã¨ñÔ<?ÍÃ<zÑêX7"ÿ”‡ðù§6=¼ö'9­ÎK-gúoJ܅Vq{¬¼%ސÂvžÏ—!}mñ´€šU7"½%·Äö,v×2ê”,ðÛòÿÐþ¯$é[ÿÕ|ìÇÿQÛÿ]üß[ù„¶,˜ÿ°®§¬ˆÂrü)Í!þå>õï‡5¾6+˜$ÿ?xìÙÿ¯5Wßéÿoå3mXë“`êÓâà\^cëëÞ¶æ§l©?H3þ6L?ñ7ˆÍ¬¿Q^*2,³öé{­ŸÎ³S’Óû<?»"~ˍÖÀN°(nå*}ªó0¢Ñh¨ƒ%j7Z
304
ˆKð×Åsø˜ËÔ¤ª¿rÒA)H=´pºŠ±ßsÛ9C¦Ø•a‚X„ú\3/¨F[´$ÚV?VeðÁú'éàd‚€ÀŽÍ0¯[~‹-¾—šoæKØGÍÂ@Ê%ãÁ)˜Ã«bäFWœL™±¨JèÔÛÔ3ü¹î5¨•›Ÿp~48\ø†¦OM1eCÔÂ	8¹°±CB¸º±R˕îrHŸ~rJJ¸ËöÊjiS‰{Xš|ƒ]4óJ—Áì¾þ™¢†öÿ䙿ÉÀDýßýG¾þO	îöÿÛøª¬~Cl;DXx
305
ñâLKÕ¢¢ãË4>
í Ýþ`̗EnÊ5*#4ë؋-éØ'z¡
áwhÛéj¡Etð‘.E«Â´ÓÆH&_CÆ;énö’Ï#}ûiâ%OrCôÃ'ßãÓÀ»Q툇¤ò0Wr¤¡ñôªýš.¥¥±áüªˆ»˜ "Øm=í1x†ILjeÏ8sõÚ4F¨7C.О7¥“:¾&MÕc!Q嫜¦'Ó@ÅQ(CíT@Ó ¸g„î…G†KòŠ™QÁà2Yb`g˜^þó‘*L¤ÖÛ0ŠöÿrýÇτýÿу¦ïÿÿhíáÝþ+ŸŠÛó4F|1¼çNuNGïyv÷û~k¦UË9Í(>÷¤’~AÄpGwqÚMƒRñ¶õuú+ÝÞ½7>ëd;%ÜilvK]é7¯=ûÆ$­‚Ë‘šc
`"ï3Bï?gíÃå
v”VKºõ è`M»þC(ð»X¶ítÙrö¡î÷»ï¢<?Ÿ¡Èô"Ã@
306
§Ø³|L1‹b†»­	'RÿO†Ãt¸Â%Áƒ…‡I!st™ª¿ºéŒÍ14*›{ƒ•ˆ_n`ýR4²1´°‹”šõ’ÍÍS Ü¹(®Ž÷×ìt€‘¸>F°¸x¿§Êð.jåCìŸÉSåÁkПf˜(Û®Q…âxD†™ëR6뿏“1ä¢v¨-‡Â"Nƒ"¾S™ÌÕ¢ÎJp¦Åø~}>ÂõN®â¦Ê I>XgXâ:V[_ßÞ=hoíþÔε«Ðð)‰>$ɇ)Ðp¦D|֋3KÀ@ƒý´O$˜
’“îY7¡èqª©ã1ð*Šž4 É>ô‰k~]j)ÉA™ŽäUa9}¹è6Þ¹L-úáG»¾
307
$jw›¯®â·A“œ»~ÿ:ïY4Œv®n!ù›Ú-BÐh‹V¿þÑæ÷²úQ|¨íð#§&ôËtÜ;…$ëéegO‡—ÑÂeü¿Š×\vûép!ªõºÔ¼F“a¼¨?¾<FÎÀ…;ŠÉøP›Y|iüþgŸ±a1	‡ä*ä§Õnø*;__Dv!w6¾?þì³¥,oð V0P/D·º¿ƒöëöæQ{»ãvLô<£8c}Û¤˜[ WÜǤ x8\ŒØm…:0]úhEýuÈĹíýŠÃã¨y¨þ©}p¸»¿šìü¸³/”1ŸzŽ_mþçþéûš4¹RK©èýh{=úûE‘2A!¢OA·öÜ[7ri•/£Á09ë~^hDŸpSæÇQ7‹8j]rªp-pA½—ÀÊßJ«û
308
«jmjŒ+ö’_T3:ü‡s>äQ?óÉ¡.Nƒö‹¯¾oiGI¶YyR7u2ê̗±þWZÌÎxm̑\?o	ˆDI	I›¯ÕHG8A™wɖŽGÕD*†àJ2ghÍËðtî]nÂ.÷§Ðã_õ:ÿ†¨ãfÌ'êÿï?XõÏÿVïìoå£í_t6·~œÖòwêŠ
309
›_%ûÝi|ÜKrö§j¾Ú¡×=–È†1h<Rl®Ô#8¼€¦":ژ!3[³2×#¶D˜/pf~™1Æ·¦|ìlsD:OdƒBñ£¢Üߗ”NÞ«ƒ’6é%
310
zù¶ûž”AЄú±*iqY®ÖÂÖí Ãc¤³.­5!b  3¦Í(ÒŽøÓ£ˆÕÜ\Íê•÷Þ¼|Y`Sä#Ø´ÕaK
!KôrMâ^b•çNo5§9ف^IÕ©‹#sÒìxÑi‡ÉR‘.êá%_Á4KáFCEÙgjàìiQÃLî#ËѪ|±P¾Û`S>$å
ÎX;_©¬?ZÜà¹mÍ|mI+Û©ÙÍ·f°ÿ䟂ýŸæá–üÔ$úûÿ£Õ»ü¿·ò‘ûÿOê8°?uä§ékÞI¥€{;[Ë̽°TpϊT»L.p‚l–
H8°éÀøHù º€”ò"‚q¾‚”0­˜`Fd…€"i¡D\˜ /à€Ôf©/{Þ¾w-äò[<àÁ3mqÝðžoZ ®µ°W,Jؾ¸paB¸çíÛ9™éÅ·fŽÿŸÀþ?LΓϷiÿ×Øÿ=ºóÿ¹•ÝÙhÚÃ~?jõ"SŽa™g3‡¹ý£î´?“	¿:´¿oÿw§ýêõÑßĺS”Šì¿VlM×JE…µ‘¯Óü«Í£­Ð®9®pIÕ¸AVUÿp[8ØÜû¾Í-Äø÷µ64ÃoD%)Hšâ¤“N’T×vk¡^Ù(ڜ›ÿ—ÇÝ~Œ×べ0ûD41Ðø|>J>×u”(§˜:ãaoÿHŸ>W¨zâlªþ´$~l vy®êÀ‚æÉZûå ¬–¿^«"ȐWqsoû6`\ºˆ‡íÿºqïÁæý­¹ÓÝç÷þîÿ7¤û‡Ï„ýÿÁښ¯ÿøðþÝùÿV>úüOŒdÊ£ÿT•þx§þÀá\زda̎CÎz6s/é/­ÀðK$ä$-H T£ €bDŒýMmDú«ÚºõWÅû#P‘bFbpº@K$ÅÅÏÇ=%û$ŸÃ$3mìµß‡‘†q÷üb¤D•Oñð4ºŒG'IÕú©ª:€§(<Å'£d˜Õe]]-£(/R
311
†˜?–;”§r`a±e¾jùÎ{bÅ6ñb²¦Nßînøwê
Ê†]5¯Ñdi©UX¸¢¨SÜ@EA¤¸jRߦ£Jä͖A¶–ü»›––>´¦¥¶\@Su˜Ž‡'ÉFj_©¾ð¯if7RÙÉ ùE§…+W¿(¡õÈgé“Æ¿›ý÷º§ô¬¼Ãj@¿é+|ž|0UŠQZ¥µýAµd7Øþ R«6u÷Ïo]ûƒýáÍ´³ÙŸ€òª
í¥£›iè0ùû4$¬‰N¯h½,BŠñHÜrU{ÑS¤x´ÆÄUð¹í÷'S‰	ßZ úûÉÿ47ÓG¹ü¿ººÖôãÿÜÙÿÜÖǑÿw_½~y¥3À4ÿÈç€9Î:ìº*‘ý3rÚÜUت}Ö®þ}œd=£$šàVG†å8ßS$#m:½ôL•ŠÝOZ	UÖQ™Øýⵋ­Þ›•›Î‰iùFá•i3xÊ»`•îB[b`üZt«æßñ!ˆ›EæóîǤÏgŸ(>»Ðæ袛`¾3zE¡sœŸìa‹ÉàÔ/¿¼J^'²è'°¸æòQ
ZT8ÍÒ>XhcõHUñMÀød˜‚e6z÷|‚º_¢‹ø#$º¥ÛÓÙ?×ýtÑ=¹€â›/ÞüÛ¡ZI''j0gã¤ÂÅ~M£â´h o¿j¿zÑ>0½¥æühýjÌ	~P¼‘YK> ÝÈé,'KŽÏ·<4ç<å%ñoÂ4àQr(926@¨Çy ÈI°¸¿©©¼òÂñ.¤7z„ºË§ºxê£wÃ"Ây>è#ƒÄ)C€%Ⱥ÷•!\Úì
312
ÐïÁy­]ž¾VÆfÑÄND¢‹z]î¹.Ó/ÖÕö1>X•zЌŠ'eÎÉÏcÁäxµ|ž0{Îy® ÖþA¨Š:·”ßÜÛU€ZA½ý£P
8‰Ô8lÿW¨¹D
7O7pÛü wÝg•©õàÉ:rPt¹éã5!ƒ¸øÔ-ß?Qü>β±¢»ÝŒÞ#-ëÁ¬ðŸÃjœ¦QÜëEêu„t˜E‹Ç‰Úf’EjO½Sý+|û˜s4ã›K$+
î•(¿‚R"Êñ¶·Í÷ 1^_OÒ³¬ÍfÁ2œØ{u¾WÙ,½±`D £Â´‰½—vI5Wb·Mû¢”VµJÙäšøÈ÷"vⱸEǤXz5#ZõƒbPÀb¿&„@BT´!h@.;ÿˆžÚG•`Þ^àr5“±°Ï
313
˜+Za-ÀQªv{&7²îû•ð^ƒÜà[—ŒËd\v™Z±L;lÃWƒE¾8êuG£®ñþ—œXŒ<áóïãîÜýH́€˜	f¢=°þ†àÞ£¨—ôÏGÙJ´{­€ã›êk6È9š¶tp¿Æ¢ªºhžïìEª1u~âUÒëf£•+ÎÚ¥™ª…é%ÔTýÜÆD>ƒÎœ™¤¾1­¼åi֐ùóŒÏÅT«©½&…OÐ[ÚÉhB !ˆBjy`ÂRò¤¥«öäkŽl‚"ÕPAzvÞûtT¼9*à!GKÜA½Û„:È%Äìx¨sѤ–ßI<Îp5BvxX‚ø
314
“vO!€||¦Ng¸B¨ÙɤÅã[ÔdQN/[äBé«{§Ñ}kØ¿ò' ÿÕñxnÌ´\ÿ»võ‘Ÿÿñуæýç­|&„aÊVšç)ù<ð<"ÔA#ŽBîm({icz.ŒIˆcto=ÚÝ{ýæ´)
J¬Q8Ž3Ee†çŠ'ž¢™Dòcòe³×K?©Æ¾R]¾HþópoG½ñÃ;È~Ó ÙwŠïáöæëø†ã‚xEˆÙ¸4ÊMñ){:šNx·¤}»Ÿ‡	ùØïöÿ¢ð8®ƒ—jÏø8¨é@Gq€aÃã2ý(ƒ2Q04àÇÀ‚NŽ !¶rå‡Úí^C–$<tÕ rÎiª #­%@ZŸ)G†°°¢ïÿ`‰"Ӊ,£€j+U“CeAÏ	“ø<ڍ.“¸Ïò©:ö~‰þW1(‰û-ÍîE%Ձ"‰îh!㝣!ªö
315
]‘4Qº'ü"Z¼Œ3#l(tÓou›7Ã8¦}Y";'Ã!ÆA€Æ×£9Š”à––qt¹&[æ:$Ot¦ˆ¼¨F¡'ôwWç}2¢ð%t,ZÝXòÅÙÙ¼Äìq¬Û‚׿ø‘‘¬P9çôùÉ×+´ãþ¨Û£…¹'“˜ÄâE(qiÕ4Ò[ƒOéPMÿtÃZ֯ጄSš[AAJ$"ͽÈS%§·ËE¿òñ¥ˆ¼ðâ|üE
Gf"N-`°´~‚eM ´q’ ÇÊúióåî6Ʉ&F‡nžqFñ^@ùÓK¡;Kq™4˺Ç=Íã&t´»G]é~9v5ÿjr,+d IϧŸ.bXL½äŒ"–cˆ<C¶pŒ¯:ؗâÂøô9œ\apr	îՂVÑ.$SŸÑQHÄF"åä–mï9ávѕ•xsqçpœNT-8£È—&¤»ÔÞÖhUZ+Ò¨>B®'¬ÅýS¦F(HH>²€/Øe¦ƒ÷ähÒÐjÉWŒ–èÓÙpå¡s>òŽK© <Wgˆ!Dt?ƒ¥mø(¬DjW°>%
316
TÞ»#tԂG¨4¡ù(u°J]Ð4êƒXÎe©:ê÷ғ0õ¯ÓÁnÒf¥?(Tڊ‹ð¡¯êì¯&ò“Æñ1d«Ò»
"ô,ù$®¹fÝèôL֐ÀÏ]È¡$’ÚýSEí¹ØIÚ_ö)‰o®ºé1‡³Q•Ð’­¯»Ñá4æjlÔ$3>±nD”VÒYûó@µžPÞÎúŠ¾?%øs}™‚Æ ›Åš“å<›ý™Ãè†ð;…ÙïPÍ#;ó1b›:¼#` ù+.¥ó“ú`¡qt¥ÀØ‘*êFgÔKFn@½°ÈBbÿî2(ŒÏΨYÄþxÃ¥'̀,ªPÛ¥Ç[Š«u€ztlWÁXƒ{-ýcÁRքN°žnýûdôÄù;å÷Dø°¨sIå8c1ù\ñDQÊ<¿/zº?¤´É¦ÏQ|^ÖÕQ|î7tiouuŒ÷"J œqS>†Áò%ÜþKLÛ£<Å%´	òN©Tx–9Óq!/¼[Xµ¿ðnnÁoð¿ÆéH÷f‡:èñvfZHK¯¡¬n@ӔxX•¶œv,ì/Œ¢ÀÝaŸ„-¦‹<=Mʔ2~ڛ½÷öÞëíÿØÞGo[âý¼2Š®ÎÂ&P+.·èeŒ8‰šòàílx!™%j}¸Ü3;,¼¢‚8ÜO²ŸÍë£ôE¢@LúÎÄa³€(qZŽâãðBñÍ?^˨„÷îQ_
317
Ð9¥Y™å'AqÖ¿°Ë-N¹”ë–Á…½7ֈ&‡ï<$ÌO„×E£(†RŸÜööð:Dw”“¯gµ4?±77m
318
G’OÝL	H½Ïˆ|±}èGÁjÏS:n]r¾3î
319
Ga‡Õ¯Û/¢/I|ÑÀV©K!°á…1M©êò¶ÒDž"C=Õ5ÛÄ¥EP—ÅÅPLÇ%aÃSˆ³-‚È5¦7BO¢ÈÊC¿Þè5;ݪv3%^$½õh•¯õŸéJÝ]€†XÔxñ·:6Žâc®Bwké°{Þíã©C½~Aû8yꯒ„{)4&¦Gý™£C˜ƒÐ-;DŽ.§B­»’¬ÐÓfࢡgLÒ
€ô,…êð|ay¡-<_ÀÇëõ9nr¹Ö:lªÿRÑs}-ˆÃ¤€`žö—q@}‰ŸaÔ'Ü R›êT\!†Ýãñ©§‹<ú@«NR´ÒŒ¾¤c8»ep€ˆ¡S@aÌíÑ`TnŒÍb‡ ]µ[˜Cš|SúŒÄÙ¤"g#$¢t
320
¼…KxÀyqD!&“ï)<tÃt0ìÂ]Ù	˜Kf0™E}Ç/Èз¤ÙPÑÔÇà-Fþ’WAžâToéXv·oô©f[çôPl£öð¨55<xuÌ¤€=í¢Î,i:Ñô’O\ùýSžGu|çô*¢d—p?¼&AW•7">[bLnù¦¶¼Úp¬¯ïíïµu(8¢çƒäLºcs[Nz_›wªØ¨rFáuê o«—f	ª
321
¬Š­Áºh< x^Quꢄ‹n#Õà`9Ïz|5K @ù¿£8ùé@a”FÆQòé‘ÙA´|].?8ª	;9ߎ”¤f ¯ÆHfbEÓÑß^·#¸6t M€[*
322
¯ŽJÑ1µZQ¼ÏtÍÈu†Ä‡/wÒaÍ¥ƒÝ½íöÞQǰߣçÖ~Ïm,Ò´”!xñrëG0UƒyG­‚š¯6_‡kªå5z×Y#Î×#­È¤ëûa÷‘°qõA:»L:˜Û¡fn’Öá>ªM²>@
323
nÒƵ#~æ¡ÃÔjmÓ:<‚û}¹I¨
BñH62>ù@NÒGU-ê¢y—Æ
324
Š3¤ Z–¨°³°eòP	1ƒ×ƒÂ dÇ̀^"šàtqžôÁ\j)T³›Œ@ªG²z\5èh}ù,$G:f¡Æ¤$T (Nžk–|6ÈћÌƯÄÛ4pNµ|=¯qò,Zä& íInAȬ°k
325
[ž7"0

mÁIëhÝ©æ±ÒæKÑSÑ4?ˍ>WIíÚ¹ZxjÐå0©„*•[PJT
—SK̟>+«ÉÇ}ˆÎ(먩å$
326
E–³åxŒž&Eîx*±$ØTºùý¦dK²œ0·‰êj[õM™œ³LHìò’õ]‘\Ô 
îé‹E»k™ÚQ,gŪØûp%š¡-«Ëf,L¹M1§=¾êŠÓ3ŠFŠ¿˜ãü¬÷â'´hºÅæ^p)¸;¶sòUÂu÷øÊk`v¢ÎÑïxUÑ;Á‹Py#_Þ°—K>Ç´×Yn7ÚfÌP$½ú¨‘Ýʟx|‚]’îqÕ©¿îÒôôdš#<)7ýqÈ.L (üzsžz1/»Ì¸ÄœD”Œ¡i ï„
ÚÇlá:Ö¨œzˆ‚yšÝɎšéoÖ·¼á,Оˆ¹2´?	ébæ^X’ÍI„m’—luҎ`ӪԐáŽì	÷ÈN)È8R`>²óãKó4êoäæ(êñâ_L:æ)|'å#S⸻ѺU.6Õ#’ô>ÆÝh»Œ˜¸­ÍY0“&…@¹/äôv™;8B³	4©x†&ëëýq¯×Ñv¥†ù+Aë êÀfÑÔÖ£SþU›‰~k{·»û)±ÿ¼±`“ò6åò4ïòÞÎGûÿnmîíµ§þ=eµ?²ïÿÓnš…€Ù'(Þ¹E”è<H\+Øx ~ÎÉÀûù0†¹…ñÇ áqˉÇÂ
327
Ç&£%îè*4¸&om^Í58nd÷v÷ãóíLjJþ:ã…Ø{iú!‹>¨]·½ånjt'^7´OÁ¸µ˜Å{‘Îé¨//Ì&W‡´¡¨¨ŽðB;†`“z“_"%ª4"%5"J!†š.wx´yôæPA±
dþÂ׿\ÖQ†XmM§ù
328
šN}_²Ò¤S'µIÞ‚7:Ž5’•<kOõµ&Çg×·|Fžm«Û>dè©E|¢ÍGm£¸k³î‡¼órÿg%¼üØ>Pãæ_
329
?øCÌݳ¨fc'm§¦§¯ÐÜֈ8ž=œyîÙté7®1™éåT>ãѕ¨{y ~Ë=#ù±Î•„ªÌÏ5½Ëð\ù@M˜0%×BŸ/AmQ\MƲףâA\M“ì+äEWQ/̌èì_¿ïÖ`”Бó5KÑÔd5¡1¿÷wû U~Âb7“¡®ýY1®là‚¥¬âæD‘‚cvóؖ~	Õ]kØlÓK÷ˆŽWv3i•«|á¼ç㬝È%
ŒÄ"í`¨ ‡yd¶ºÈi"îðe?Žè'Æ<ÜñSøgxwKs2Ó`Ž:*cÿ´É^C}Wp2sTÖÖ×°Ç&R>ö‹îcm—g’¹Û†ÞhGï
330
š36vâ…c|è=Ï7㘊ç.A:FsâYθM²c²WO<«*ñÆ·üÊ¡M˜b‰­šýލ¡,_é¡ÞÀHx}	Td=Hé²ÅŽ§Hæ¨j,ìFpIÞퟥzíxw¾žoPKó.Å+çŠÛÜ£Œ÷Ô,ž
ÙFæ•rI|Ãê* œ•þ¼©iGGPÐ<ΝÇÃc%rï%h$>çv&¶ô
½Ë´òY9¦•à¿õåîs£Ÿ‚ó?™lސè„øÖ<öÎÿ›Þÿoããúò´»§Ï_¨ïã9Ù+´ìÀÊ´´S],›”¡}ndð|ŸwO¢‹x0 õ)Ûë¡	ÞiªK’Az—
“$\ÄY’­³¢vÕq3v-øn
ív½‡÷¹B/‰O¡Ýã^Üÿàt¾€¥Ržm¼†—þƒ´a8ôÌF ùEÃ%vˤ«!cÐSˆÉ´[\|œ~LPNZ™qÂüYtÕtü1Ü9âÍk*0Od|á{ÙY:îŸî¥}Œkóô8ÂÄKâ¢CјT¨qƒ³´w
331
ꘝý—ÛØd¬Tœøí5PÕMۙkȃòZ¨ï¦·Lƹ‘¡¯iû~lN«dð¸ˆo+B$§šGø[_ïR¹;SìDDîÅ4TžîÃΉénƱ(¶6؋>\ì5Ðbô—ÕuòÛËDAZ`öG£&Ìô˜hÁòájÑDÐÀwŽ6ßùéýSïnv¢´5ŽMŽ³ãv¤d—î	„âx®«MpÚÕ
332
»FßW‚?íËÐ֋ƒö揓¼a6]…5~8PÄÌ5§óØÞßêìîu”,õró€}ÙI1´Ö´I!ZnQ²i§™ÔüèyT£èPgliŽï™ídŠJ.ê3.†¨²E}·`­–Fùüjƒz®oÜސ_}8Ø¢¿6Ä·L†ŠOANÀb-|g{zÌúÎÓQ‘¢CþӁ¥[j¾ý5`±.é⫇jTZz´j]_¤TñδôÌàV½•v÷·0Ü"YáN€nêñ)”Oã˾U,ͪ„H[~ˆé²#¤²ÚÄym ªø‡¶w®<â{·"IϞ[ÒÅ1^ê§Hˆàω>2ÆÓ"ÂE:ã0#˝ôTÅ#í~7íªnïïäVµ¥µbu—›ÈŸ¬kçUØ „a`{ð;‰>vc±\1˜Ös­r‹]ŸõKBµ!ÃÊé:’øˆá
qCö\È!Ä<tåeA}+Ékéʪ™¦Þ‡×֑¼¼
øŠ¾4Óu}ŸEmݎÃÉt[äÒE1}9¬š0D²{yÎ=¤¿Ï>ÕÏö-piÆON•œz¢M0aÿÏmZÚdËõ‹b@ǃSÒ·`}³~Ážt™šÖNJgSôÈû£™e¸ËøsÍyÑðÛ캐jŸ2ÑB^rl¶¦Dû2/³OçƒÀÀǝV.ã‚xǧ0ğ¨°wåh!ÏüYš×ò»b%GññnWXBzBËtÜíhóp7ÒöoíîïéÀMí¢IB°]o¯Ø]îS¬ívu|icŒ¤
333
^R4*‘<[N%ï$P2w-—ôƒVK€äÐY„9²b…º‰Gyð1ä$CÞ]싧¸÷)þ’±å/šÅZÞC7'88R<„îyÝ$j¢œ&Á°nFéJ”šrÙ¥@ Áˆ/h翽¿wԜ¬³l·|Ɠœ¨žE£®äcO‚°¸ÝI†'αPyå=ô}Lž¹kC‹êÒȪÅýÀìùˆÓ½´$kšHÍ
-@Hv;ušgÏZ Úr´ÚP\¢¿ E<ìq"é)¾žC毅¶xéãù=½Ëì݂“îWOÜDrürjp~ߤ¾ÂiŸlÝÜí#˔žßr™ç±_+åہ&£ý„=á¸ÒØWíbf£åÁ0…¨Â´%[¶¨Èðòˆ4j;“jՀ•à!Zk¤±ŽâEô¬ÞîF5ïŸ^fŠ˜ºˆê$ªBoOsÇEßF¨àù‰€öšqáüª™'öèœP(”ZŠVÙTyÆç­'é¥v}ëåîëu͆«c“V~/WEéÍ¢µ"j
z5~Ã=ÜËa™¹žQÛÒÃӚŸ5–D¬{ÍÆáÑÁÝtÜÈtTžŠÕüT8™„ግ⮵±`7ü­¯Iþ´Ÿòû¿›1ž`ÿ{ÿñãG¾ýïÏïîÿnã#íIÑuàéjþ¡­€sf¿sœ/;l±¸íDƒË­ö_A.`܍0Ž|å„Fôc»ýÍ-±ÜæœÌUA0Rmö°A§~[DnUÄáâTÖ°9å	ÖÖ_Þ=!nˆþÃZ•c`z¤cä’ Zkª¯R‰cއ4XšÄuü
334
'‹š¶Þ€M /bQ¦j€õÃÕ¦ÖЛžúŠýƑBÎÅ`chr¹‚î¯ÞVA*|ʲZƒ%Èòtñ†È
335
¶ã„•¥˜>N›ŸX©%pÀG—>ãøLű Ø’^²6‚"AM©N
´r[%ÐBnÞ3¥TE8Ë¡ç&¾hL_T@òÙSh<Mzݓn:v4g°~-°z:ě
336
"¨"\ӌ58)¢ùŠG5ÍapðÊ/äÉ¡ðï`ÌVjMTÕôS:Wâú¢-&‹ô÷J­MÎzòôÝÕ=9¦ÒѺrtTã`=!O`Bzxâ!¸BŠ°@íϨµÔƒÿ²¾ÈöÀª¦pá;}DÉ{ÁØÈ`î¯Æ ÆAê‡Ð-¨JSÐÂrŸÈ—½žê“yž»Ú[NŸ8»§:/ªœqáÄϦIŸU´*4	1…L¬[»®ÔK²1‹Î(ðáæ
-×58̈ñ®nÓ¶õ€%ߔq¡ü7ŠÏo+þsíÑZNþ{Ð\½“ÿnã3ÁÎ+ ÛT5ý
337
9&ù†îdœœÕò¹£c‡ðÙdI–WtÉæôlž`3HÊ»lïþz&d°S¿SÀžn|AÌÂ¥¶R÷æ<w_®Ã}¸÷¤ÿŽ¹Y|s°ºWÄ+ا&ë(¯Í¦í¯oµPS^nïmwöw@ò~±y´ûªs´ù½‰‡ž'…”¡Ðè±'`oóšGSâ‰…„¾]ðº.vÓ!ë-¦8¼*¬“\€àƐ߱ÄÒ֊›îîv:?lîm¿lØè™mê9”½3Pf桧Ðԋ¹·w3a"Žæ=lc¶a]¾²›©'ˆý{@]‹ EPNX‡ã³³îç)–€,äÚ
338
åÊCѱ`S”Ѧ½oý¾óóîѝ½ýÎᛝÝÿö‚èi<ݪ—|Éþ[þ߫ͼþ§ùàÎÿûV>RÿƒLnzåÏÕþdšŸR5Ï´ÂNëöݲ6‚,6p„˜f:¿5õÞ}®û)âÿè­qC'À	ùß>¼ÿÐçÿ®ÝñÿÛøÜBþ·RÏ"4œ½O3â²Á\q7ðûÒ2tÿAª/¬ýˆ0eÃY÷D»cãXìÄóî§Q–\ª©Ò֝=#T"ÕF”®HÃ¸P°L•©‡âÿæ¼HH1Ž,ä?
339
[•)°Á$&Ìd:`•U†:a	›ÓäÜPœ^7 ´ôA]Ìw–p®6Úºíï=’Á¶wÚ[G»?µ½Èb­™€Mªêê!jfŠ¢ÿƒ©àþ°$,?‘>Ô^òLâE'ÖÏk¦0-C0ÿ”˜lw*ԞÕ-eP”Êú[PìºyÈ$¤£«Jóº0Á‚<*qßGÐýÌ=—,ñ…p8šýdãÂ<Ï[ۈ(¥ð@ÙÜhuø]D¢ÓþÿÁgbЂ«¸,®¹*ÔϸÜü½%„ûÜ]a<>pIÂPÎ
l¬îŽ¼
¹Ã‚ãÆ0èQcüAÌ&²BhØ"삍yþò:}Ë$Ë£‡”‘¿6.
340
}td€ý9Fœ‡ ë¹
î³n"þð($
¢W·ecíˆÐ:Ёíì™mñ¹Ž+®Ÿ-ªžäsn¼pZ){h2(ØDÊ(Ïh0êUde8?$6éž_Œ¢‹ø#&ßH{)ç gÏ]L\Æ)<4ntV£ÌÔèÆx•‹
341
7À.sfˆ9–,Ÿ6_¾ñ·IÒ~iÛ­p‡:˜hq€Ò¯WÙ÷9ìuÈ{ÆF¢kó8šnF+{šEyۊ—@K³ÏLƒ%Dñ.ƒ„#–•r6iAå‘j*°„lÓ- Ì¥W´„0¬Œá†ÿªÏrÄïÉÑ}ߙ’‘29ü-?¥6¦PhNeÄ!9©Çɬ#Ž=Nî¡ÙðDNÏ@)80BnWsŒæ.ÜG­fL­LÝÍæñ}]:ÑÏ\3{?PÆᅰO1ñb0ù™ÿ1	N9R±™ëºB	†¢MôAùšô¨g2
342
è¨OŠõ‚­T¦,Îٔ“ÜìÇ6OØ43¦ùöWA\è(äå$ÇÂ#¸ñQô³mMº?òße–ÕÈ󳋡»BóË1½lHx¼•6;¤“²

Pº™øö,Á®¦M8rۆ=äRj-Jæ"›œÙúèƒ.Ÿ×NÇý~ªÃ_À™;Ÿ_D˘ö7I.3ÈPD›l¹¬ñ5Bþ®¡`
343
ÇûUi¼„ÈK©ü
344
dŽ»–ö¸¼¥[ËkÐzUb·ëF	žwnŸäÈt!Ò÷B׉È6˜Ö¨ÃÙ}ÂÙM¡i oîJ¹ÂÙnŠƒ®¶›4ª®‰²p×ÆðO|8V»2¾€Hwk¸¨kto&§˜A½a6¬‘4hÂ>ÙÔÛ( ¢nèpÿUûè‡Ý½ïYŒ€úSßŸÓ Ÿ‹Å³ùrwó°³·ÆÃoPïö¶~Ø?°/
€°ÜÂLg7€3֠Ī§
…	«¯¸¶%Á8`›7¾´Í':ã*Fuû¼”t£ú'¶ÄKˆEj3Ÿ¥q¹†ìòÒтm…Ùv¾Õ‚
345
(‰6¿Ï©‡‹—^ÞFLÒÁDÓ0JŽ[ƒg¡¢Àôoz¥9;ÚBŒžª3H¬ª*ª/¶Ìò·:äsâÒ·•oÔ½5æÛbïž8g
£Í8+5ÞÞþ^çðu{kwgwË9lMÑÆa{ko{óàol[eÚ)(ÿú`÷•Wš÷@ÌƉPñž[{×zœh8V@,¿-´{ÛÎL£U„ÄÍWím9ã­[¾2E4ÖÐ
346
u‚µæ¯Œ´g­,Eã7ϹÔÈyŠè%ã‡UíC~lmÎ
347
ñºÞ:¨yBØp®¢%ïv¢.ûEoÉ1üx!˜šª{/µöPt"DX¿·Çœ“ƒ8úRçË Ù>¬UpÏýˆAäòãÈÇ!‡ ›q&È$ì\ÿL«3á0ƒòx¯•EV"µÁË"Œ¿+;‘ù\ué¢M"ä_A;£\Ë
>*á
h’8 ãI?êözÉ9dœ†¾ß}§³‘ïÒ[°»Üe<…ï¾›ò` r*¼Ñ½~¹i
348
îñ6ša9/‘ñ›CÌčï<‰›kðø‰þ4)xތµg:ø¥pV{œœÄã,‘²£‰$WÓwãM•TÕ™'Ã!gfè3U×R25þÌaï-}&`P3àb{ga¡.àÍð?îè9E`¯±/‘*ÛÙÉ!–@Œ"”ƒŒÍc:˜Ÿè†¢Z‚à~õlþîŒÍg¾š³Ó^c»žåŸ€ÔR
349
ØAT”Yøz¨Èô®q1Xà \Ýè"‘؏(1ÙUŽ–$~¾Õ>9Œ#%D-?µP¯¬ØH»zÉbü2X;h‚`ƒõÚ3©Íjäã—&åt‡P21®#‹R—ùu”?ÝÕY÷|<¤|ÖÅnê¼Ôë>{°çӁûQéKùÙä•o–Ùªxè7Ë݀±Æ"¨¶ðë0ʅ
x•€»ÎCŠêCƒ‚û/kÝú;ç&\Î
350
1ßI4›–³âuïäo¡oÞ$_‘¦"é>k¶ºOû­îҒR’BO_Z¶"p¡vÎ$\|9\܈`¦<aìžw¥9ÌɅÔr“Í…+iÿ§}°Ï¡×`¿ÇÐÊ@Ÿ´N@9ª:jÉ·YÇïGs=Ç訚ÍQȨ
351
5Ì$‡£EûBñ¶Éá'ۅ‚J¬Bð(¡­†t
352
-&„fJ6@èƒ+‚ërt§-õÐKe_	Š«	sbrù¸E’b>º‘8ÞÙdC{«¸d±ôÌ;Ä`û囹¿QWÚÍ'7ª„
Žx—~`o'&
353
7'	«¾ÎÓ~_gŶ§H£	Mԋ6Þ*·t¿óÆû‡ˆZ²ÿNFp»5ÿŸ×üüV›wùnåcüÚGG»{ÓûÿLWííÿs™\¦Ã/2#™[o„Œãûª•tð2—fi<¤Å¶¥ÄëóäEŒ¬wæÞ(Q
bê>û¼x9ÚðªøÉé)Dl¹ì|¤»a“8üF(Cå3ÐaqJ=‡’0úèFÃèi¼
ØÀ8CØÑ<ݶ"{D9"쪳¿çÊO6æ#%vòO–¡¸WÅJí++ãÜ"]ԑ“#' ÏÃÊÇîp4V»ìo¹‚;º„Í?ɇ毕g‚]¨Û‰09ïkI¡‘Qs8Øõ¤\܁zM`.bng1P·uGå¿"$[äªa™„qS`ü<?€å
=³²Es1,æIÇi¢å¾”íè)-À5ÉjÑdÊ´Í«Ã\žJ£_*Ñ÷€'D
ç5€'Ù:Ÿ÷5kºÔŽ¼ÜBK;=çi%SÄB8‹£(£“LÓëoùÇÑI/Ák:y$Î%?¤ÙÔÓW7—&pðbÚéœ0P눱Ž‡tt=S•ÓßÊqrޅÝÑlþe‚9ꖖºœ÷4é©sJ´Ø¥D~¹òpAŽ’0ð·jMY_Þ0ƙ”ì*PŽó̬#¯cá°à”_*d!c’ý«¥Þë~ð©9R$Õ=ïS ›bùô³3%H«£Xú©Ÿ³‹î GBó ù²æ æ¿^d֞6jϝ‡§ˆ¦íExcˆHÌ_n ªUyŌeC/$1äzËíÀ!@nqܞrsIö<ÊÁ[÷Q€1—&o:Aç[‹u•?!ùOSêœv;þŸÍG«›yÿÏ»ø·òùýü?"¯UÃê»øZ!í¬Zºë”þßC$A“XYkDZ+MÚXú=5Ií¢‹§¶pÙ¼¶Æԅ<¹íè„8[짣EP7ëtœ oQqú|Jr¹:ç@tɑýéŠÁgÍÈ09#—P(Iz!î—tAô}yƒ²|£Íž4Ä<â-®§ÇO5õ/Q×ZãÙJ`à‰å՗⢥”Y€7Î4£à¼ëӎëV>[e55%Ù¦gèBѶBbj3ð"ÛQÞé¬VJg"/Èdmït‚ø†æÉP
zR4ŽYÈ
354
î×àÂ6ɇ¯Uø¦fê±bMD,!j¨ÅŠ˜\¬ÆRô„ôc>"K³vÊ̺Ži‘‹Cqâ5mÍã0Ÿ9ÉyÉDÈí°å6ҏ›¹Ýb¾˜>ù»g¼°˜m«ç¬@ÇDÆòڋOqh†a*ßÜ-V1ÑYr+¥M5Ɨ5
W°y*m
ukJ1ä|b±bʚàP[?»Ãx¨+ÃՀÁ¸Š	´j[4¢/gÄ£BÖòfïǽýŸ÷Z¶‚æ'ª¨Ó=En(g(oö~jìî춷s×1x+¡ó¯ÕàrfÜÿfø]Åøž{’{@ÞË	á!›þySÏÎërH]5:÷®ª:DŸó’bzßTǒËxÔ=˵gërÄ,Åwû9.ãÓuÀ«êò·W÷çÃøX-¯£´"`b²`ÖgùΠ‚ŸìÞÅ#·®9\§“;Vb/1맋}%ð>M5™<–¡D
EA
355
,‹°_É:ÔÒËR¸²ø)dGT`Åg¶9Ϗil9–KLÑÌЈtO ûtÔÌ:T2ÝÜ0Cs1cÜaPÄó.荑¸BtO11°éG«p^1·‡µ"w…¸¿ÉU€…5Š@=͆I)èk–íkˆ€±­“÷‰ÉÁ´XQ„ktÄÁ¢uÍHrhPÛÐæéÓîvÜBPŠË»ùpòØB:) ý[hw÷™æ<ÿƒiÙizBi®¯˜ÿéÁãû«îù­¹úàÑÝùÿ6>âüïM»s¦ç“+öQ"u^žêøDY‘¦à£¥È?o8¥2!¬•ÈÊ©)lØ(ûè$vSù$Ãîè"]Š¬5·Ó²ø€Ã­ó Æür>b(|µf6eó‘EÞêpÉÿU²íeÇ©‰Ò
¼2x?¼ã¥„÷žŒ‡ìº%t9øó`˪m†¼$¶9~:Ë&ô¢,@4_ÝX!NJì[ÅÀñ%Ssxñq»«µFè™Bh"~ñÞgpšÁ͇iBï<-PОÕî¬hSN‡PpsDŠÙ%[0è¢Qö¶²ß×0‘ÖÈöGvÅ+Æ"dÆØÈA
356
`ƒ‚ä(·Êˆã£ø±yô¦©K‹È_JÁ™%à>GÀí¥§IÍA
.:°¹&­lÿŽPÇý/9f³ h÷Îï¢nß«¢Q„‡…–2bÀñM$	'í«Ñb7[ÄSv–u»½îè‹?
šRè„èakoÜ뉲úԏ
‘8‚¿½šÁ³º:Ûjó-i»¤;…›‹ 'Ùº‚ž.q<Ç_à7éE—±D~8`7ȝºŸFI|Š	hüŒƒ7ŠQ
357
[2÷|.?j*­Jæé.М!¸0¶Ü!÷ÙGÆ\m,èä¹Ó@^¦é‡ñ€ù!=ʵLWÂææÊ_€yøa¨cì¡	¾À#¤ç×C¸gu?W%üZ/D¾•†±Ã]€X[ÒÙ.ŒK‡i¦æùîA©¹¾šÉ9?ï\ôCHY<‡ùR£Hÿ¶
:Ž~Ú_¶aãóŒ¦8Cý%Ã#ôñ¢çÑÜì\´”*Ø(R²Zöѱ",ôßAûð]²MÅ5%3w̘Œ¶[™¯1€àuÿ¥%²óÐËö„`A
358
9Yì"BA…NçnP­l-Ä}Ÿ-ùû8éŸ$’øĪW¿.`EÍZFP:¬`îû	ü«ü0ó*å^E@ÿØþA‚8—JZ„8TƒÌÆ`8OA‘³Ê›±1Ã6ãynyãûd´5ÚÇù‰|SÝg&p•I
0-6ÊÑQŽ‰Ný;9—£ˆ›I­ÚÂí×åAVƒQyEÍÍU1-W3<®"n0,	îYnâ/J–¬É%¼ÀüÌ¥áÕÏ
1uLhGOU$§i"Ò\ «`ÄK]þZp
à-hhôà]
Ê}H™!Ûr‚_.GŠ…&/Âh<¸o³ýŒÝÏfŸ¹$€Qœì†,ñÞÊà¦Ú~À¹Ä¡¥H¨tï&É0aø0?ÚóuéëÍ °]UÞ¹7*Bܯ¿F /à‘Èk$æ|qÁÅôt‚Õ™ü)e§0+.@Óé`
359
’ž¸•þ­£Þ”nq-¢ëj]R$ÝDZºL 6h¥…Œ¬¨‰&(‰¹	ÕuÇx£‡ÁnP?B™2‘ⳟ(ýV0%#e	xè "†Žæ´v±[
p;¹ù™²GFËÑ1„ìÓ¾WI4-ìr…È×
360
Q7sÂÊ/Zø6àa½pjܸ#;uæ÷ÜÔbòZë\¬–‰Ëä´o#¤X©[
361
)y¹±L>ɵC¯ÜÈÙ\o‹ÄìÊUQߑ¯ü³"Ó½®;Ù¨ê\ýîb‘äÖX±1ø¦X¤&»PÂٜ ,é¸W]ÞÎ8ÊEÝÕô;ޖcèC°IûË ;ÕËz„8˜eý”	#NÀ¨©… 	7l;)–j)"46 _MO,•’ßbt×Öx¡UÖþ¸Ãq›ÌÁ“>&ÊR²¶ÀZn§´5Qê+–%þ<øϺt‹Æu›¢sžx«ŠÎ`y“R3\¹MØTM™ëHÏ^#³áeS‚VÛ@ñ6{ƒR´ä¿xMü7šSKt(~.ÄÝaP[Ʊ…À9‘i_‘Û.Ä5†f03¯³9á–xO¸–¢±Rµ‰à•ÙÁµ¨ÇE~ž€nŠzì‰ãVɶ%&£ò{nAN9ŠüHñǯ@n79=Þ½*OÙ÷
362
ÀÍàŠAqbº`‹´w8Mâ^FçàJShâ_܊ëÞyyÑÐÍëk
363
š;¸Ðž‹Á3Ñ)E.qÓÿ*œàóïÑæ÷ë„.<« sθNQ
364
Ì¥ùº\_ÁÈ:æ`,@û:ñxl`ðQɈ« ŽT-érø€÷êÍË£Ý×/ې¾ûP“¥	 Øퟥ6ZßCóó•#ð§û뚴Ϊ‡Ùî$8˜ÍÑO54˜*WDMµÁ¡Òƒä¼›m<æ_KÖ>ä쵗KF;¡§ëÆâ<œ“s«ÇĪ ¾³·Pó½ÁҒ0皠câ{jû½<À҉*‡\ÐqþÀ•³nÿǧçÞËè^2¥þd²ÏŠ.ÓW”DADݕcU°ÿ½v 	þ¿÷¬ùþ¿5ïßÙÿÞÆÇÄÿÙÝûþe{{ëõæÁaû`ê8@W«þGŽdm—iA6{€J҉?U‡Ç@¼¡€e²ª;>‘vÆ-óìø—ö[£$ž8fžKÕ<¹Îü`K疈gâqÖ*M®g>
/oÁŒ¼¸ûV7(n¹1kDíI¨ÌtE*7±-·Jes
365
¯^Ջß<³!ø¦«RAÍéÕ¨vÌ.¬Tét%q¿åÔ
Š²n‘"Iϑº”TRQJjÉ:×\¦I/=#áA‘üò“â/”pÂÐ<õøÉFÀc‡î„kQ|Nf¨¶˜ßàÔ?ص“EOîó¶\mGúÖûñmBò:ÎÜTð—›$ÿÝo>ztߏÿ²öðÎÿëV>Âӊ¦Ý‘Qºi΋ʄwђ#È$×íöÑ֝ÃÝÿi©0ÿ*Zk>xb„)#=v66ÿ†%jÑfT‡°ÿHÒ³Úfý;þ¶¨¾«Ó’_¥½·Í5ÔûhÉmJÕ°l½î´_¿ÜÜj¿‚¨Ëwsë¨}՚Ÿwvv¶ë!A+é/£7£³Ýþh˜BX=T¹Œ»Y‡Âðñèì8鯊ß÷×àÉZîIzyß{&~®>Êý„²Ý^îÉê#zæöÕËõå¼"âç“N÷rà·ê>ÂFÕ£ûN5š'>(OôwôãXb!f¼%ܞŒšÍ{ñÂ|ÛÑßÚæÛNÛ|3Ï6³“nWÿØÇkþñ*þ̽C(„îIDé!:]€a£p†ß‚Z A'ì†ÚLÌtûõ´žóô¾QSûâp¬^¹ï-ò¼ë¾1䄭WԂÜÁ†äTÔ{ø•!¯`s£y¢‡âÃõÄ&ɏ	À]ÙL	¨üÃü"ÙÛ÷o™p4M(ɂ	T\A2¡úOvü'íÜEÀþ“\"hù©ZE¿8̇ðª=¡µ+žX†¹tԐµ€+8í|m8ÐhÖ7%4Wz‚Ó-€¦q=Yö=U;4¿&*s"nnû‰P~:oûÉ­ÍW€roz¬ÈpZ¶B†l×Géïù$Ðmv? Ûîþ
366
ºí'ñ†ò»¯¸Šî?í|}c€
367
¤ˆ5)EÜÞ|Ý*­ü ‘Ò-fPb¡öMÿ<mAæ­R™VK²Z~ÕR«–Uµ„*äRO Ղñª÷·9á/ÕèÔÏÖ¦ü_u÷ùYÑßfÁsøªÛxÀÏ&ýmz¿á«nÃÇCÕ¿7ÑFUú¸N§­j£ˆ>¦ËMÐÇ?˼ÜÄXŠhyÒßè
368
´îÿ­O¢ƒ«¬Ûªc“c¹î¼ å´o|•ókÿŒî„º¤'U_ú£šGž\+—È+3ÆÝQ†ÅÖ×A·‰îþª‚ÎՀ†¯’ÅãŒ6‹jº$Úr5µYóð–yñùÅç݋òݎûnG¼k»ïÚòÝNÛy·Ó–ïÜz;;rÀdÌۈšt¯¾?Åõü q_1UØøjg·85EO6Oÿwœjã>¤EHN£^Ú?WoÕö¤Ÿ`QHÜ9VØ÷_@Ƅ³O݃¹(æÄ*©­FOŸÚ–  ãj՞¨¯öy« ¥Ë8Ã^T;GQÍTÁDÔXGMyGáwôênÔä§Ù ‘¡ü•Ñ½¡ÇÍc·hmT¯»8ÄûËÿ‚0Äoúݓô4ÙRÿ©¢d¢ÛS¸r¦î磿Ä1Ž­ËÏpóñqÀèQJŽÑlþÑü‰î¦eéG¼ô@ýޑÉf‘ÎÞ,«2ªšÓ•^_ªf•,jÛ!Z¦Ó'MS÷ï"‡ < 5Ūš6y[֋6*5¢xâ#ŽKTRjµ´«U¸‚ªÒ™bž«k•z»L PÛÈê“JmÿN€b <&úëpëyJ9
Ȅð}ø£F`³¹ì^C¬~HyŠÑùœEù6ö¾Þˆ°bßVÜüw{`0ƒ)
369
œWo2ÕnSÛË[ôÐv‚vèA‹h¸6k`L‹i±™°ÃèÄr>N²Œ’l›@·Ë¬òøz¸cÜ+õòÅþ+Œñ÷¿¬DÑ!†Œ#Ox¼4‹tÌ'J©óxŸr_ôԄ]\™¡<¯²Ø>ñÐòöÁ{´„D²¸í6tNë7®îÿûÏBxUE qP+šÍßð`é÷­ˆ7ŸÂ-\5ˆØ“Ég0ÎÒÒ{Ìъ/s‰þò,'7(~äÔ¡q(:ä¡®#î·ºÕ÷¢¨ç»ÌÖç½p¥³š®ƒ›2’Ó`e"Æ¡(ۊ–—ù§	³ùpÅ4ƒŸ}ÆÓ¨*|½'+wݗú‡KÔ©>J;ô|„¿ç.bsèÉ×ÈËILX@MúÄKz:LÀvžÃwY!¹Âð°°üq¨üqQyPóäÊÃÃÂòöá¡(oÌöKƈX:PË{$‡£T±š–Ëc¦È,ˆ2z½}9œë x£+’ýº›Â!ª]v€™ÄЛ´û–2 ³uûr ¨ÿ¶ù^Û{ë*&¿Ü캝›ú¼ Óô´F–¢³˜ÈíIvÔì
370
-9U­öHiCòô“¸óÙdÃgÃô’“b@}ôK "w†ñ)­oÈsX 5¹°­WÀæéǸ’l‡CN»
371
†§Ä	KKl1e³U¿ë/?-QR³TýÄBªÍžVŒ<ärÅc^è/È éՇ-c+ÊÑ#g«çS´+pXH^&Y2ü˜Ôȋ#”Mœ)2&.Îã¡vx@IlçS¼q(Ò¤»`A¤A±±×¹ZíÒ	Ñ©Y;òÝ tò5QèYU ëI-Zô”(€!éÈ"`…ÓQÃpÖº4Ášv֜ï$8PU=~ªv¯æ̆7!VH:G>‡Ü™@ÙíƒWˇü0ŒY”[}TTð¸ZAbÅ¢àýµ¢‚ÇåE¤Ì}®ä0ÖČöº”¬çæÓ²>
372
òEð¨"0§r:Ýcêq„9ö’Ï£_tbbá>´y
373
4K9»˜Š  |ÂÔüÉPA•½]³"â‹îy»òaMìxfç­GÏ£f´­R
374
¬Ü|$½[
¾ã…Ä€3Á.;¢R7õ{Ô <Q;’hJk­Fÿ725[â´
375
éâ?oo5›°ù8ؖ§AE‰:ç{TSgôz”)V“ž+ζ²²2>Wç£OC@{:¤Ã÷ª1ݍ³4ñ/ò°JÐ>q à%´êqöÓBjÝóõ—۶؉Þí,?AõB„°ê:Pר3$ïFµV˲£RR)'–BrÑM_·¡Èœþòy‰yï¯HŠÓ£7u¬§D-=㚠
(Ó1øȬ¬ ú(B—kC™Q´=¾¨Ç‘5áTHK…¨±rÈ5m'Šmkb
376
‚¶úHõ»#}rÆû¤h¼zÀ˜¿-κà‡Âa[-™Ñ‹¡ÐAÓ˵*ŒH+=Ê`Ò0qUH(ñæJÓA”~TB«ð§–œ»L´
­;tc'r—_	“ÐMžØè þÒKÕjD­§Ý¨Næ…÷I›Œž*QbµÙ2íî²i²mÌ!]í×gzŽæ©Áºmb“³rq¥“/j>˒‘®»ôL«ÕÄÎ>3ńx:ëEdF/ÆggÉ°ælk‹Ñ€×sË0Q
'ÁúiÕÁ‹5]˜»pwH½Õ:Œ)"óÔM@³aõ”•ÞXW­Ï¢E€_‰Ñ
OÕS#|†ZE…`+Ԋ˜4¤åLIÈýšÀ’sà¬7Æåõ@Rc¤¹qÑÐxIèQ¨éG½ëÓ¬AöPøR”¦ãÒèv›äÜ;¡mžMŠŒ'Fø67Œ¥¥÷ä9@åô²ž?ú§Ég—Þ>Ð÷þ÷à²mô¡xuvnWñÙ}È4ҘQØ-RžÔϘ:'èò˜†JmŸëæë¯!¡i±°øÝýkIv3,# VêÏÓèA+ZZêÊ+`SOZ3†ùPç-o»ïߛ§`#•=»«}Šý®íöm>“ü¿ª—®ÿÏÃÇk«wþ?·ñ1þßGíÍWS»}OUëÏáí]äÐmK ¶Åñ£‚ÌSjˆÒ»oU7\_«r׫§jGÚxü–ØG›¶ˆ
377
®ÙgÃ.(&d5¸ª8TgªR·ävJE1rï &Y0¨˜ÌÛYý*úE›Ì
378
Á z
379
Å7j‹£‹nVoEÈ,q»‘Úå–~hô{RYh‰ð·N£¤Sì{•à•&st{aj~n>héì&^`Â<ø¤l£òÐå|œ-ÈÙ#Ã%á¥-ªã¦×TÇ{dpĕ~‰òÊ_ĬðF÷¬-­þ„û²94f¢cmÀnŒTy_ÿÊø”TÂÛ*L¡®#’!9ÝIÕÙã
380
‹¾‚Ôvå$‘EƊAa[#UfXV›T1†QÒÂ#Á¨6G¾ÞÔ¬€Ýª)S¦€5´Rç…^Z[譕ó’]àôÐb)H—ŽãdÍù›>†ã„Dá'ÚµÓÑk5‘sKc¯^ºæ–‡Ûr”Ô%(Šè„ÒEoD]mˆÀšŸÞ»(vÝóœË§Ú÷¾õ_ö)”ÿ`Æ2dÿז'Èk}ÿï5x|'ÿÝÆǕÿ@ÿu¸ÿæ`«}5Ipúún™Ð
381
~d4+lù1s¼×úã7VZ«˜Y”VlA”iY
_G¿|Ô”}¬Å¿²Qfú·Ó…~åôõ[®3|Q&âaÞ¾}ÏV³9¦n…>¨òv¢‹–Ta~¦’5ƒ¢fC¶É%Vˆa¸qVä4€-¯áy3”œòóaºfxÎ(*„¥V4(â«=Ún›~k	wfË
с·-ત[{Øs®>їžÚÑ嬩6¢ î·yï-hsÑÀX+Ãý÷¬àÒF¸úô5$LÏò¾5Ëw>áý_›nhï‡Ï¤ýM=ôâÿ­>|p·ÿßÆGìÿ»{ß_yîy߯¶««5T¶«;¯™­ã¸¨Ö_#’ü¡äá£!lé´ýÂIß4äæ_¶Ëʽ“9ÝSn‰öË+mÁoåÆûþ¦7^M…/]gäŠçöŽ«l…»‡½K-Ø?rˆIÏàC*öø%54¶ÑƒÐ¶VdЭáhtcÚzæΠÛëØñ”÷"äI§8ûVÛ¦…$§bÑ'§í
382
Ìã[3Í?Ñ'°ÿcDóþöo“÷õÖ¿ÿyxÿîü+{˜…iwî3läG÷9	w¹jÏK†ÞåÄi‚¡¬ƒ»äQ|¾¾5óÙAÕN‡vÿ’Oýíu{ƒ£“ŸÆ£¸®‚9·—ÍN‰/6v_QFbN‰.sn³é–kÒùú`÷ÕæÁß:?lîm¿lOW÷°½µ¿·}ÕÚ{›¯ÚÛN͌`ªê¶	ih.éÊ<Ôîþ^çðu{kwgwËËÎì&m¦é«al-i°™‹*Ñęðø¥{§˜#Þuì8g„K
383
â4Ð(Ø(òkmnvvq¯¹ð$Ul0Øb~⪂§Úâ9^ŠÂÐæ'¬äö·÷ŽTÝjÓÉAæq.‡ãþ¨{™PD´šQc	Æ(¢•2¼i`J"Ȍ“7§íî¶ß?ѧ`ÿ¿9㏛¸ÿ«-ÿ±¿ÿ¯>¾;ÿßÊGŸÿ6¿ŸöØ?E•?Þi¿’•…d?•ß–Q\ô}±âm…zlx{]#·Y5œÍ¦ál3hª§³Û„d*«sv6ójû¸n †À·° ¬a60ÿˆ7¡|ëåð/÷	ñ’ïo®Iökrüÿ჻øß·ò1üÿÇöÞÔ;À4•þx{@5Û¾ ¡^.·ËGÕc:kŒó|Và4±¨ç¶wÚ[G»?µçøs‹ò«ÛŸí½múA¹ª!k½(á¥v÷Kz•9á§|„‰DéæõÚw³¾{åLS2›¨÷dkÿÕëÍ-YSôøc›¿`®IúJy°øûËÝÍCúªvúr¸µùró`ÎÄij{µŽz›q¦7e÷ћÃè—Hu±»Ýˆv÷ø˛=E¨j›moG¸Ëz[¸™´ 7ób~©‘âwoVÄ3ƒ5¯œ[“±&ž ~ð·;!ö‘Û²œ·LîO†}hûRSq&ðM}…yÀojðï뗛»JRÁ¹À ¸È‡3ÚÏ@Mèvf8'^ÍȝÞÄ&<éÔ×сdœÕp–ê
Raq¸ÛL*ØÀVí՛ºâzKµ¢Q™C'ïÕx¤ûwD*š}õêˆksA¿‡7b]×æÖ£9t®óµ:à%î\µ ·¸Tñ°åšñ×;Í;­³j¨û^ªõS2ÂDD0Á[¾€gL\}iÏ@‰¯E2ŸËFD]³'¢?$N³y|ëmòOû	ÈàÅ7ìw>ŒÇãnO	F׺˜ ÿ5­>òìÿV›îä¿[ùDö1èÛ$§¨|ŸÆƒÈ>Ež[|e¿‡Zûg`hl2¸QŠ·ùˆjDXæµ¼šÊ³®;ÏÅãºjõL/oNr°šS­…uÀŒGÏéà$8Nj±:wém'ÙòAšŽ0•7l²\;UöÞ¼|Éïgàß
»vUúT\ÿz"¯Ä&¬ÿ‡M?ÿçÚڃ;ÿ¯Ûù\iÝ®X_¼»?ŠÕQn¸£€D	œ­„	ÝEzÕ«sŽò|v;“óMçAÖ«œ8È@q
384
µúÈ«“]1è‘^€\Ö$ú)kε—|iæ¹®ãe飮U!h„‹à¶»™Ž„kÞø:yÀ›½nœ]aÄÉÙYrjÆ£s
385
«ñ›ÞAàìÐiXªdˆ	%¶ázÕ1žÄ½¸bRB'Ób¤q(HI¨or¢L
áàæXsy›Ó®Óxb䅫c.‡Ÿà¸uÊP1ò<úxh—½†3ãSs×4³*®¦@EÒaûãÑ/qL²¤#_ØBÀSÆòâùÒmWôU<¸é‚Œ¨77S`8ø1ù"gÍ>Q}[!ä&&SœGõ¼ê
386
ØBå_“\¢|Òsó­`È
c18Ž<Î9ª‚ÅÍýêplå"^d
'' b"ªƒ“%8ª °º6S¢ÔîºÉ ËûZ(å…@”ãNр !⡝j?‰QIe…Õh-	ëf°<Tά"ó<wÝ.vaÔl?rõ¹ø,Y‡¹ã‚WÒAÈ×ÐùB€5$ýÓ£ôÿ·÷õOmIÃ÷+ü?Uœ„1à*	s…ANxƒá$O’R-ÒÊìY_§]ó¤|û;Ý=ß;û‰á¢­»íÎôôôÌôt÷ôtË=@Ç-9¾¡,Ÿ‡|Jê•Nsô¿W/_¼°õ¿­7/–úß"qþ÷ýùþÙï.Ž[çû‡ûgíâ)³Åià@<¾³Aó2È ¼Òû†þÄ<
„äè.k®¹Ñ(ÛàF›r/ìÆ%-s.ž.©¸Ld
n©x-͞Å÷nqöGÝZŠ}îJ™æ<¯¡6§šø°¡ïø5ØëúÆIo°ö‰?œÆ3@ÀéHØêÜr:Û¹Q$©ã±Æ·,(āQZK
MWÝ¢:¿³ò=*ÛÍÔÞÎK]u÷HWÓq˜ƒúål^¨,zË(N*#®¸d¤â´‰oM.Ë+2P5›ê˜6=ëSÍRvë¼[‹² ¦®‚ÝB)Aµ5ÓÈ&*ó¹›Öë5)	ë4wÓ 9Y­º*É&ù?¶TÞ4ß'49Y¯q1Ü¢½^B²[½oj+ÖÏӂá%͒íÃ?FŠ
dÜ»&÷A/à³YÔ±CÆ¥w‘¸{ü
ëŠ6¿R¥äŒTÔlÇPh¨€­”8ݦOSóµAuíSšÞ«U/£wjÕ²4CÔw­Ãá;È-Q=®Ç’ÿ¹Xñ\JóhäþׯÓÏA^6ýÿvv^¼þ›÷zç=qù?oüi]ßÍ4÷üÿÍk;þϋåý¿…<Bÿ#®²*_¹Z]ËK»òoÊäÁ%6Ʀðï”;%h´{Ò=qcß+GÐ9ŒÞú¿
387
Gþôö^×ÿ«­ÛþÃÖÿòþÏB±þßí_´v^•]ÿåj=æõ_Æ£›´
å1ÙA\çw~켪¹2‚®ƒ‹¤#æGS¢Ö¬”ŸÞa€lhÁ":«”óÉðó5×Fu«<ô±†Gf£ñ
kíh7ԛðFݪ+•OÖKí_'ÙÁN¢,˜hˆÊêÉ?(Ҕt1`7=UÝF$YW€üC‘#&j:ÐԞgA_#ðçÜ¢…ZþzStÃãôY±æM¯#ý”
388
Œƒ©A·¿Ã#z
389
àD3Q‚½UÙ]§ÒÉ ‘£("óL¤6L
390
xOMboxk¬
F*D³"n¬©EV²HâЭYÔ ¥ÎN¾MÆo£µÂJD°Ñ¡êk™OSH™@>àöÀF`êÓ÷zrdhÖá}ð¦£{În³¶hâ)ý£Ö]5ÜŽíº±;HÍ:ÃZú:ă¯»]$»?ßVå(¼k²HÊ0}W|˜£¡C0Àæ±Ú²,R™¬få¤½É0œìÍdWÂÔeåvñ‡–X–Ï<Ÿ<ù_œ*Ý¥Òöÿ—öŸ…<yãßî?þ3s+þãë×Kÿï…<Bÿ;<>.«ü•¨òø4?¸ v0ùe0߀öLWƒq÷3ä#¤dsþ¨çO{ލù¼î4ðc(;ô»ÓqäÝ\‡Ýköãsà_ö
cŠ2èÇ°NàìßÛ¼~8"L¼2¡
391
(âO!¶îpÂ>öTV6X ¶@;­ŸÏNÏÛ7º^1A†S”õ‡§“!‘éÝ$°¼`t=ž
zäÛ»
392
ôjþè–É*ã1J­bnwŸIQI¤6qØ_Ðo(;fíLE
Öíq$b/ò>	¥ëÃ+/
393
I¼ÎÎ:ûgG^6êbžsϏFHõ!Ѝa¥h¶Á¥6Lt*¨¢+œZ¬ŽˆKÃô6Wÿg†Ó_Çg«ñÚ``/£óbzxtC‰g¬bASϸ$Œò30¸­¯®p öÀ¡–§ƒwuë|€	Å°p´ñüùŠ˜Íà ŠüOAÍ{rˆ`8tElZ!R<ñàV©XÙFÁN§tÑ$èÖØf@Å¡;¨-1ä3±
394
4΅± âˆ…bhõQ\uÁÖ$a£¬ö¾«{h†^òÉÛÿƒaÃÚCO¥è^üÿ^¼~ù*áÿ·Üÿóˆý¿õá¨ýþüôCëcë¤}QV¨VûñIe\ø„Û_jŒè[Z18{¬èo޳ņ¾w‘ÛÏ$mÖ¨qk^@ˆÐMåÜäšé5¸§”ha¸DÍâþp‰ª÷ê
çêåü<áRAgÐx.>p.¨Z›Z´güþ.øŽÄefþæÙÙt<‰\‡©Í°åTv¹V0¬zÏ]@êUïŒÑB#Â~üä‡ D¿O±âéí†öáÇÀøùk~kRèÍ«á7y#™³ßÜ£+«¢{hÞ^ä)²ÿWvüçOöþ¿½³ý:áÿñêõ›åþ¿ˆGßÿ+øü—¬öøv|ז61§¾ð–p~äK‰u4»ÓçÂIJ‘ü䣣Y*v<¤QçfêO&¶´2†ãémv³HD:˓i¹j‚¡Êñ2EҒò¢ú©S@ÙÇ0`¬hM<&$ÕjãΦÄxOfñª™È ‹‰5_WûE?$VÐpÏð0å!˜vxÞÊ­%¶JÄwû>ˆý(naøåÔOƒñۜ£Ô‹ >Eä!ÓäúKïÃþÉљ&³ˆÒ”‚mC?¿ð;öoÁ¢G£òÛþ]"“?
395
·Ý·dy
396
62¾žMƒƒñÄԜrl¶d4NYñ÷ƒ±°»aŽGÙeÇlî)…ÅÆ]c|¥(ÄÃ7ZR‰‘(Î;Aó¬C¿Ö0ºŒeO¢žB“W•/ÖØÚäê‹çK0e´èE`켙†q có¼pɃ±¦™,‰$»r}ÁUIùÎÝà;¨1¬y>ü“UeÏ5]ulû$·fáf
í©DØ´¢ 	­ñw–çÊ´]
397
ÇÁpÁx½]p(ëµ÷ à¾À§©?hC¸»¶©«ƒ@)րÛjõ5Ù\ÌMF*qDÍ"mÔ9;6|väZø>±¦¼W/k¯©DaÓ;†œøSI'=kµ›Ø*lh<5®öa®^Öq+³# **GL9¶t#¦N%_bYƓe“/±,Þ±Ë&_ž7”;Úxû#[ÿÚ|opá±¥|åÇáP(ŽæpRu@>•ào˜\b«5ôêMg½öxRº*›·¤jËïà˜¦\ýdûŒÒsª<}bzii
398
$ ð¡2˜<nº*F!dãrºZªÖ
¢<e-8ÕH›¤:ë±ütJb@{LË}ü{2øðmCqׄŒ`IÆlÓcgðžmh !B€S±o[¹Êü‘Á‹t¡Ö·êÏâqgOwuml0¡7¬XªŠ–!•'5MÙêx.R¹á	]£‘¾wR–š°_ûŽw=1¸Ì‚&	”9si»Ð'mbÛñD?,€‰íŠ«1
399
ÖÞÝñWÅA
400
‹ÙZQ›qLÄ¦¶šè(†­DZ‡Pq/„5bѦÔ-žì¶÷jšv¸0‚R¥0µ‡?91後„LÁ»²Ò^†Ã¯‹>mJٽ搴d¼—»¢ÕC±¬2^	©N!–Ð5Âä3b¥’³ÐÜl¸­ûuå‡-¬›$œ¡´Ñ%› qjÎ@‘ýΨé<š]ϼ†Î¨¬½j½0´µ¹ÓÈTòî	<ÊÅ÷[ê”÷ŸÑû.uØTèW<™k%ð$dÍQ÷œÏÎÒ-A(€ÔYáŽëí¾ŠØXPWî¿©Á‚Ì/¢/÷Þ6°àþ”n®t{(¤7¡I‚ÕúC‚E‰J·à²¬¢ b5gÚc¥©
dº²Mr³¬Ð¸²Zãæ\©›­h1Mʶ*å+Í «ÝaIÁ@Ieº˜¤³Ä¹ø24Çc~
401
žÿã¡eÕ6òâ?¼yõÒÎÿÀ~,ÏÿñXçÿ‡­÷]JÔ||^)W¼ÑQÉ2VØ.K'ãQ°á³Sao7<2l÷†´Uo;놴
402
r¿%Ë-AîÌñ/¸þ¹OBµ9–³þw¶_oÛëÿ՛¥ÿÏBký£DT‘”ªûøx@±”°¸öMù’'›ûŒ˜¬6ðp)Í µÁáÿþ,C^´¶ÿéÝ-ÚÁnFßXÕ½VP'ö»l5‚ï?Öeìe?ê†!ÔjE]èo„›Ê”n%
C´hèӛSú¬ì øçlˆêÔïc&‚³~(ðh³€ÿD'c82ØððrFmx£1ts:Þýmõ®goÐenVàttÚ𢡊ãц7î÷هK88ð£€>´Ï/!. 4¾Ñ?ô7 9öþ€
Î@½?a]=EHpäcáv:‚žƒn«}ØðbÙIPá­>] ÂÁWøç´+’ô¸»´]Eãhá±6J"Ձ«ìT‡ÿ{ü‹[…2„`€Žú°­P}þ¸É²P³Ù ºÒž
p;	›p|pN~ž&Îiø&)ÔX©àÄ´KB/JÅ¢H”;NK)¬t.̆chU¢Skè I’°Ñ½Ï
C1\}f;þgM¾"uŸ.þ)+µ”Òˆ¨eb.ÇRÔQ§ØQ„;Eaœ/òîÔTZ+)ØËÒNôE"l‘Ó!2}”¾	gÓpèOoà	¦áü±G?¤K7ûŸt	ì¨ì×1˜Û¿vœÇ‚*ž~ÄJy$ì¯\ã0êIz¹'YèžMaªnçRTt_±[OL$ œ Œ³ŸîဢOžH¬7ðM£AÍ	xu~ô§·…–€y5dd¹ÖÄð9F/­Jm¹P¹X­Ãv^w´'V? ÕÌÜ/­¥6äîœV\-ii’]Q¦&e_R/‘K÷³ÈYà{æA tÑ,W³ªÕ7ì:µg¬¨$
403
Mã›Åˆ¬[ß´®Z§«Åe`ÓèÀä™gÛæ!l¬}8Zî³í
o”·,¦Ùf¿RÿC+:ËÇùäêÿÆõÆjmäÝÿÝÞNêÿ¯—ñ_òHýn¶ý°rx\áP…ºOÿw\¨Á‘Ÿ³
ðò%ՖWfÒo÷Š{šÿÑËÔD"ó’¹/0à]öÅ^Q&Y¬àåޔFŠ^ðM©~—|©EG“sºæ›Ö#ýªos¸ì›Ò¼¸ðË?'LÌUÖóC3²åSéÉÝÿ¿vƒ	幯ó¿[/·ìû¿ÛÛËû¿‹yäþÿóAë¬}tzR>öG随oïwmþÀ‰S.ÚÆS?„`9¦\УµTýŠ-ëLWFET¥huEÂˤ¢Oäu­;ÑñÝïà·ÚG[ýóï/@µ{ë=/^/R„_‚Ȳ5á]û_ l™ä³qö§ŸPRxÒ̀Ïò‚MO=þ•ßïpé4ˆ—	ãÃþÿc£ªC8ý±Þs(^<{L.ø¤A;oµöۭÎÙumL(ž–Ùõ4@íýؗlÊÅ7cI¹(Q£!OGÔh(
ÎÁû督Cû·À3‚OLPGHýñlԃuŒ­ë06"<Rö²HñÓQû‡ÎÉiçâòýû£ŸEª.Å]Ù²ë÷ïi Z'‡Ó÷0ÐïöÛGkŠ­:pûwÔ-ˆR‡8ç€û°æyæüãààl¤”ÎûãӟÜPúƒñMaP­¦ $O|J€JÁJ‚*†Ú‡ËãöÑÙqh~a 3Õö1-›Ïƒ8œ°e#±GaáFÈhÜK#:e³¸È…ΓWUhàøhÿ¢U P@‚â
 ÜÎÁéI›IÂ}$ÖÐßùR‡ˆÒî»Nœœ-¦u$ZZG'Y#‡Z?[“¸eÎ2½¾z£Ùð*˜æ¿<9:8=liàÃÓ|˜0…; ­‹ƒý³–ŽálôBJ{ž7+dÓa]žüxrúcL§?¶N<¬xü9¥U?<=¶Æ9Þ?7ª¾&\C¶awÑ#2Áؑº¨ØŠÊ†ÊJäƒLׂãdº¹ÀÚûïÖÑÉ!›xûmmÀbÿ
404
`Ž¼ÁxQ'0„"ùŠú §§A¾Ña|Ä3
2²Ž i¼;>=ø‘hŸÿ’¢£’)ué2Æúcë/
`°ŸƒLlb^¶2 vŸ½ºON۝÷§—Š"bu+öéù}µõT@”­Ç†€èäԆ´–7‰5g¯rXbžñ­»“þ[ç§|ÊB+8O<GAìý_0ëóç­Ï§L±&ëÜ#ø:a2QÐ3Y¨ûÞ}yzya’%±‰È
ƒ&ÛBä¶[H*ÑÏK Nƒ~0…»Ç‰A…¡U®=Ñ.‘f0獹{ܚ"øí-k/bXSÝƱõq¡ 3°KÖ5_‰âõšývƒg uûy{…ƒrt²Ç‚q„äzÄúŒâLMÞí–m« bK¸âÊßXýÃÖyë=ûÿÉA˪ßäå£qqùîâàüè̔„³þ¯¿3ña0ÀHˊ09 Ï./~x·¯Ïä3“	¨¨ º3=")=c˜òèä¢u®¡(F/[BðåI´‹Ã«Að,?cóæ	7;çý‡ýöÁL›ùþüôòLëg£¡w¯Ù”ÿ4Ï& ¥/žÖÏgL
bP@ö2´¹äAö•36S€°À	!	–D&¤‹£“ï™àùÏËSœÉžéænÎtÏþÞsÜ/o9¸4Í†eýä"êgm¢:/Gu¯œIõþèØښÅ
405
‚¸ßOÐН§†X'Ýþ@ú'{Å
ãí5rÀA8½0‚›A°¿F&$Ó°»ÛÞóö
(Äp}ëm‘ƒpp0 7Ñy§22†Mž1/ÞRú¥õý*ºÉً'L¦†¤¦†±y/¼î®Ð¬F[öߤ½ÿà ñ4a£–s±õél‡Ã C63ã`MÖHœ­¸Ä†Ñ'î
–„Liì;7×~\ã°8d1c?é]_Öðù먳=‰Km×Óñ<ଆí6ÆÀ›à+&·NŽ°†\¡c$:uÉ
‡…{$À	«gƒ'ýS
Ð0¢‘~>ÝÆÂÐæ`6i_éÿÎG;¨FŸZ3G¿)‡ÿâáM““@¾1ÇÞ*^r°) ªêÍ£ªauL˜Ì%¤ÝÂØ¥T›?–ÏŸ3™PoËSG=¢GÄøéüUbž‚¢Ù£j{ŽdZo9ʦÝh˜f‚ؘÐ<~2b94Ó8¦0ôÄ K÷%…é"(Ù³ô7Ôcð,칺­½3»j×(Ú/½
406
/†_ñÂÚâh‰–lÆÖæìG0;܌
˃
2`ävÇìáÑèZ£JP¶©ï.|&Ÿ ±¬Â ÐÙRlJŸ(€z£ñ[;¸qÔ]>5ýQ£”ž~ï@j8åð4ªÞSS
3qu…4f´»Æ[ǬNïõÅæìó¡ÒëJ“M«[#ñ 2Å4ÅӅåÅì*êNÃI\GYó®JÖ…ßÙ,º¾ò»ŸK£'*Þ;¡ëTbw„*miܨÚ]1#-;A4~m´°``—wéJLÍÄϐ`˜|ä=ÓӜØ@©D¶`*é‚KДD飝p?*íPðÐNøÉóÿ!/‡»µ‘ãÿ»ýbû•ÿï͋¥ÿÏ"áÿóaÿüDzž?eêüwøüðÈÿé¾½F {ÔßÿàŠ<pÈÉ8Â4ê"s«.”ažHg?Ñy ±Q!•ú?ÅÙYY¥K“¬™&ÿoófÈd«
¯À/ã@yþ'Uêp´¡ˆÀ)ìEA±£Ì¼ÌyèµðW|òø?#Ý)ùïß*äÿ…ü¯/–ùñ䏿–p¤byûÿö›Ûÿ÷åö«åþ¿ˆGìÿ'§'§g¿ì¿;n•*T}|Ò@)asæ†é_ùQ‡½·&#Š™V¤'»qdÇI$َc<Ÿ„[ûȍ+ÿq¼3·y½Éڛµº:Ô_«Èro½”ZöV_a<ôì_>¹üv÷ð¹úß«ÄþÿæÕë%ÿ_Ä#ùÿeùðeê<>Ž_Žå'[S‹vb¦°†K”ŒA7åáFNRŒVrZ
407
Ül†q֔?˜¤V5Á|WF\B8«+¢ï(Òî|B¿ÖÐ¥Œiš•iÐó äx4¸…êÁ×8`݅ÿØûD™ióÐëã¿ýÉãÿ‰œÚÈáÿ/_m¿°ó¿Ø^Þÿ_È#øÿéEû¼µÿ¡óÓùþÙYù«?æ]Áqyï1žf¤Ç´V“uÝßúêÌzi—IÏ~é€f'öºÉNٗZ–œþX¡D’ÌÔ´DQwxê<4dÅ/¦`ˆ
ÍrLÔ²rjjà	û5ÌD	ÜÌoððn«i|ùælÇsv®fý~0ý•G¿3ŒþþÛÖߛi`×dù­ß­VÕ_ܜ«ÈC¼;Ö°Ã^“õV/Û\eÙëdY0Ï:ʂXC7u5ÐøI¯B~vZ@ÍÙ¤Ç^BF¶FGÁá,‘&
408
-J*"©ne\åóÖ[—#¬¥ý¡Sç/§¿ˆdv[õŽ
Ã鋠9Qž'Öú±b­'¾Òo#}Em
Öѯ'¿ëS”{2Þð,l	ÈxPÚÓsñ`[sA,±Ì3P[V|ö¤¡±Ö½Þðrécȗ÷¢‡Þ‰æɓÿ&è-y7@^ü§­dþ÷o–ö߅<Bþ;Û?¿(/ö•«õ˜¥½"ÙßӒ³ï†ãhϑj=ýùP†hÊwm¸–ÒtE’//àæüvZ–Éñ¹HÚu*I#ÿ÷Pș!%7þ*â«`ø°çª«<ýìñØï¹ÁàM}9	¾Æ"$UMïãšh¿ê
409
ìÛÊb¤Md	ÃãY\·Üä© ­(¬eÈ%èò“¸À×èZ]ö6öeÊ·ýO¹Å3fò¦\™b°íBªkXΘK¶Í¾Ü~hfµ|æþäíÿQ<فî+ÿˋ×oÞØç¿L&Xîÿ‹xÄþÑ>.™ÌIÈåk>f9@ÚxԛÛόNñsèOœ[}Òþ"øwJž]HŸ–)‘}[ƒk°tÁ¥K$€¢?žÖôv
¬Ü‘׿Ãø-ƒ±yu؎Æßáïno4Ÿ>
c¼
¢A_ñ&˜ö†’4WíÄfMÞíü_=¡+7&´÷(Å¥jWPLVú‚ÇÕ+«óÇƾ8÷€›l%Úwß*úQ»ãùñNØ°¹¾Ë }d
	!üE6 ÊyTn\7óö½6æ-+ꚷCcÖ3æìÁ-üÆÏöúá4Âû‹˜C¼0ô{r^slóڐ¦Ê³Â‡fÿ¹û¿ew—6òÎÞ¼Ièÿ/_,Ïòˆý¿}¾Ô.û±\­G¸ï§oۊîI]]‹)MþàIMÞÒi;ÏZ¢CÙ󒕹<ÎIDâ“F®ï»búõœp¹3$Ln;?|æŽR"Ï«‚ð܋	—
ÿåízÛ/··ê¹Mw:¬µWs¿´ÿ	0ÝW‘ñ†ÿÌsÀóáñåŸs‰Ü
3J92‡EQé
410
Ӝñ›·¬Ø¨#“‘>:]â<Oˆqm-7‘ŽrBØEÖ·Á¾¢óS²Ú“¹
411
àâÉK‰:p¨Ìó&9›Èî¨
412
S¹§:ˆ]ÊeW±§
413
’êªÝÕWC-¹ÿ-_þƒ?îÝÿÓöÿÿÏåý¿…<Bþӂ’Ò_™:OösðˆÃPçé4“:¿êvTwu-Ðþgëxþ“züľ‡Œád}ç¡Ü2ApÝ:«L/ˆýpÛ,«Ð„ú+yX™YõЫçñ?…îÿÉIS­lþ¿ýfëeâþ׫íeþ÷…<êþ[`¶¥]þXùºo?pñ°«päOo³\.¿Îa¶3ËÛ`w2–e?àƒ#£D?Up§R/»zÐဥ_:8ŠŽFl°ÂøÖåEŽ&³ØvÏä6Tücùd3õŸÀÀi¯Ž¯NÞ[¯ž:j>uT}Šu›šk¦áà˜ìÓIðɇó»÷í™ÅgŸ•FÑ?¹ÅGþÈ&/˜xµ’@I8ýaVqÙ°v¬¡´¾iìjåöxæ_qwJ˜&Aè]]™^Gf”NŒ£oµ€—¥h Ô…•4°a¿ö®Î£ˆG©«ãyÁŠq=¸Ž˜®†eEI=:!z/˨„+Hœƒg<r"$
414
Àk2ޕèm/“\ºt½¨ÐZ.¥U4áîšÚþ¯'¿A †p/×l$`îdtoå4I·˜¼çë0’ÞúsG£¥'H6L>Gð6T]gC
:l½?:Q» ¹ ÂUX<¾ÚðFœ§tƓúoúø-A¨À¨ð[ Œ˜Ì¿eÆ[ýÍàÜ·v"“¼b=nJêÐÞB4½ðûµ½å=ÜßÌÀ­¬iz¥S^ÒJ5¾Á~+:‰^±5Šä‡(oµ:\mƒâ”U™–bý·äš5»œÆ&K:“Ž5b­nrÎFQ÷¹sÛ8b¤ºë'‹··G]iF½ÂJ7Q}3÷ÕLøûF.c~
ûYÃwíGï`HO0«®6øFCÛË©¯ÎJˆò̦E³5›^ù}ÂM†îi$ðKì˅ðÔVÞ}âl¾²~–·Ï î°=&‹E¶ógô;wl$hgGÓ;™Ù#kùѺÿV˜Gv.Ž¾?i"«ä+ S}V_-ÚÂåIÅ6žÖW=)=z±ÂxÐS¼8Øù˕ö
415
V‘Ä%UêxE»“¬YMÏèdQʀÔR©5Q±hCx>T|Äè§ä«J«ÿ3S–ܼÊ+Îe_Øã3E\(*桄i­ýƒ„Œ'ÀœžÔ½ÿ‰LçIi¡¾’¬ÑT±…s’ËOËö’r©9ÒÿÉ+¢êhÞRªÃXP¬)Qçƒ?!Ãp‡2a¸<£TÃ7
416
~ëÞQ6÷GyˆµÑ
:”¤&]¥64ÿ(CûQȃò™³÷šRÆ:íÖȸJ¶ÙRÂ$ûtà†J·7I#Ò®÷jõùó›ñô³?ÅXѐ·ìI/„Ûuô«¤Ò¦<ðó£Ý÷ju¸Kªg|þ¸¸ósð w}­Pg*¡š—dšã¡kK¿ÊB“XóÂ̞Ä"çuÚL–€ªÌd  îd]w0 ðzÏg¢:{¨[xÇRíº	«Q	&—>+Û{ º™ÓÒ*®—*:ÁFYfr¿ÚB3PúàÞmþq0¶ÙçèÝrîåÏ=ØÎÔô›ø¡›j{úeÊT„º»¬àe±Ù¨Š—˜‰MXõh€[B~±yîÎînžy¦ºë‘ŒŽdÅy‘”=¬=~>s¼¼ÉÐóëÖï›öl³'›]^+†³m>XÑ8‰f¶M´.h%*hå2WRDr<§Ê³¿¾ÃR9“œ
417
ÉIáBË[Xç;¯pröü؇@ð؜õÒ2»Õvq#¾Ž¥eÀS¼å23’ZGƒaݞæ5¨²ÉèV$˜ßåŗ¼¹ŸŠ,’î†‰ÅЎպsø­ðŒåOiútzùÜ÷SÈÿƒ{ûTmc«lüçÛ[ÿwÿùþŸBãO^Z•ÛÈóÿÜ~¹mßÿÙy½¼ÿ»ÇðÿËk•œÊT||ž?Y!ßÂqÔ¿ée„|kÉ˂VˆÐœë•ãY,®VêÑ7WW¬ zåDü7„U#™äál8q„ùt¥Fù¡'öò)ôâÿäæ[¹lþÿâ5¼´øÿ›­—Kþ¿ˆÇàÿGÎʁ.[ñññÿ{sîÔdkŠ	U `F›æ‚ä®åØ£¸W!&·l÷TÃvÂè#¤®¬:		ã:ü‘›ë+
418
C	$++ã]?ÃÃv7ÀØáÚ(¸ñ¨gÑ s=°¥¨5»&‹?Ûë²½-:hJ«.+¼œ’Äh’ùŝА—éBÁ¼pïHïG`mrßxPÊ4¬DkbFu¾ITÁD 8ÓþKÓ¿‡¿É0ñwôL'‰	snZÌ*7þw<¼
419
Í©„Ö’Ää4zà†%h9Ò,Kâ]tíOƒ^ÇTO`ž9'’Ý[i³¨ùZköGŒF%Z£h6
àïÖ×0ŠeˆW¨¢™œ¾S$7ìA˜p×3RЂ]ˆjÉɂ&{°	é-㌹ÝäÅÑ&øÖKàz9Z“#ÃwRchî£þE‡œûÏ¥£*.¢ûO"Fžl©!,fÖéLŒðã.ˆ÷ŠZLm44(~>mg~·D‘JÚ	™f„ñø:0e JK´«u\쭒ñÍ¿à'Ø×L¹2Ö4~H¨š~ˆ,žðØE± 9“•zK­Î¸Xûç3Rc>“=ÕàV¨“aIm{qÂx+¬àpÈ-ÐÄât‹mì4Â&‰N%&ŽèOÉAÑ}ç7XÅ’®$V.­×Ýr¨»c+7ü2n;(̖^Â~Àù_uº{I&ÀæGV+Z´wxîiÎç`Q`|òæýŒOÊԟßLO¥š~[¦æ>ãÉ[bc ½ÂëÏF]T
420
r$a13i»óç"pX˜›K®¶IÒê5͘YÛV¾iŒI“	çهÙٞ30ºãþ¡,†ð~eŠH´ÒðtÁ·gˆIv¨Œ)¥¢Ýö?Ý»„M”DX“/‚°ttA®ß
ë¤\ÞL¨ ¬mhˆãK•=jì}Ã(¡XåЬߙ
421
Wñ‰¬éÇ&c;™’tm]¯Ü,␺Hýœõ­©zßm|L½ZàŒ+5©gks†´B¬#¤,rŒ28ȝ†BªPLŸ2´d£W¸4RF“Cl­{œ,s'ô!¸uèbwø‰	‘Yâ®æ½/VÎ¥&Eºuù§Ãíá°Z)´¸µÕ4W®†6
ƉpÂiŽPbÅóy*Nn¦NX1¿ïµn¢÷{DзÊfÅ+š}fL?²·TåôÜið›wÏÓú˜fªr±B݈•ä£rFùÉ&Ý4èW¢\*2ú
ùðÿԀ$´qÿéÍý"ïW¤6+!æ)?`Bˆ{ßFfƒ5‰ oS3©¶Vi›á¸ñž3ÆEqµ°Ì&1úU/”ÀØbò¦QÜ;m]h&ÇVw@..)oé9ŠA
422
¨ÜbìYšÂŸsOÑ®1hÌM”âû ÈF‹§Ñ:õ‚¯6¾©3IÒö49;Ղ·Åc:
423
ëØVi%R%Ô°Ç`$Šk±i‚G±Ì\<,¤š98•;$R/éç²")‹šž8Ða”²LeÎîk;Ö÷
424
ӂÄÆ<rðRnŠè¶²2Dɳ±Í™:…éòßD+ÖK6y<ð%—BuæÈ¿?â*k¤Eê‰Ç:äȋƌ··Áç
425
¶ñIôŠ1'Îøå'Ò #k•Ÿ4æ”r¯ÂR‹ëã/Y›$uÝbnm“/nŦÒöëïV|ÍûÜÎETqo<æq¼[L÷A:]?œÍ(·W[ûæ§ –gú’š€³½aé÷Sx]k·rz‹$+D¬Å‘InÙ%‚f»œ²Š2•Ù½À¶>ò–‹tZÆòç<Éd&=Jf¬Ü\$3€sdðt
426
r…¦Dù¯÷ç$™±XæE´µðç!FÊÂÉ À7uJ˶ˆ‡áÞñØz׃b¥Œ#:Mñ1¢J˜ÜB8©$—6$x¦É½„=ǜi`•ÂI¯	A“dÐß}ûÓ Ð]õy"¢¦Utp™žúB!”ƒÇJlr#g3‘v¨´®æÿ[Ìÿ[ú±Vò1λÿ³óæ•}ÿëõÎ2ÿïBáÿýqÿø’M¢vë|¿}Z:`µÚÿžàYù€øˆ‹Hê±·Ó+Q܎
lFžÅá Œo‹…þ]qXbVdf#ÃïXf§ ½C ßðß=~?Û¨WC-r²	µÒúžô/–Fµ”fÈêF{9	£ÌC_“ïË  mM'JŽ89št#ˆ`¨*5þ-ÉÁ«­Ÿy¬ÿBüŸæpå6røÿΫ-;ÿëÖÎë7Kþ¿ˆÇ¸ÿƒÿ©rÿ§Lſןę—~@fžÿ¦"f'Œ€t3(ã–*°*+	|²þ{êû»Y÷š®o˜ª=Rr7/ 9o¯$%ܽ DBëØóœ•$ì+_¢‘çQhaŠÞ}.‹*7Y’g6‰þh¦´Žþ̟üÔE)vrS’Lâ.•“"
427
ʬkœo)ä\…²n5zö¾þ£çÅtlõëP„Ç­·îxh_(¾¶mÂå`Þê>µx%Âû¦ªšŽ”Ù•©¬Y]F2*€—6@`¬Â"µ!‘¬ÇCÞðP™Z|_¦-Rìσ³³Îé—ޝž
ò»d‹ßi֛á·FR¦Žp¤U.¿)³Ì\8Zµ4Ï[€ãðë2Ç+¥æf
428
%Дí׉^#–³%‘,ÕÁ2u9QÁE±,’ô"b®{ÊBÍ#’uÁòYÑÏqtoì²Ådç
ô²¾ðkUӌJNN%uêî&ö6å ]Žcú)¸jHb¤X£uKnÞ¹…{œJNýŒš©ÖiÿVã’߶1‹)•URr€;£cÛÒ¬w%-xræ–5ÜA×'Óðk¦¡6ÈIIºãVJiÒO/Í͉_øLn‹•ooò©…J»\ÉˤÏl—­œÖ)n¢‰ïÚó“ÓÙЪžº;Ȏ³EšMÑò9‹!d6Åï9»PÜgM:¹´qS»„óà`0%#¾Q°’"QC]áJÊ(%­†=ØSHÿçiüª¶‘gÿ}µcÇÚÞz¹Ôÿò˜öß³ýó‹Ò€
429
UŸ
 ñ)+*T†•ÕŠ…Üïxì÷ÒÓy5“¥hq|¦4"”( Ù,”yœ	·úì= ‹»’“̹PuŸ©hYhæÕ²ÐN/žÞÔ:ï§ãa®9Ì®åfîC/Ø9?Åø\õèŸ|þoŸÿm½~¹Œÿ·ÇâÿíŠG%*>>Þ_ÄþIM¢ø9—§qÁL&ŏÙhWÑ® ý‚û)Öa¥WC)¨ë¿¹$ú…°H"‚Râgò¢íì‏QE ˜S
6ëIûnjE£+²²ÕÁ|Vʹ÷3ø¡×ì<ŸBüŸÎ*·‘Ãÿ·Þl9âÿí,ùÿ"“ÿ·9«(þ—©ùw€$çöaÚ÷þ #~üá]ŽxW6<8¯ØàFoö/7 nxü‰÷­Éþ·ââGez‡ñ/ÿ[;_,ÕF®ü—8ÿ¹½³Œÿ¹Ç8ÿ?lµ÷ŽñÀ©+¸ÇÇòe;òáä¬b6Š&A7ì‡LAƒ)zH	>rÚîìŸþÔ:lÒk̇†_QÇý“´bëš;‘‚°|mÝn
430
Wm½f¿n4xR4ÒSj:Ž"[•Q§é˜[؆Í
431
Ûúo«ÓWÜe¹£g{úQæ?¼-¯á­el4-š¿9l¾U'ßC/Ã{Êðÿªa ³ùÿöö«W/,þÏ~l-ùÿ"ÿ¯ºBýÇÇõï Ù.†J°ËŒ|³Oý0Ž
432
Ûh¯É;âmð4ï-…`S›Ó§ ¯bOÂ͇Žú>IÇÝöJßöÖ¼çëÒ'À[.Núðˆ˜}úÜâ[ç9#û.Âv¬?ç1>ı…» ßßRÏàøå6;Ý	ûî.F‘ï	êì	¿%ÈÚ¤ŠDÄœµ¼û“i—'V$…û$½4€²» È­öùæWVàwïƒ>I¢:$eœB/ìƒÇ³·g£Fi¹Ìá…ÙRv—–o•ÇÈZJTí¦NƒúLJ9Þ¯2—´™¤Í#oa“â»6-¿Ûb3AtCsbÈá°Ë–ô[„z9~÷I‹Á¡äB¦ÑâºóMøåz[]æRÎ'<,¡Ú¢ÝäWKWhšÜ„q÷º6$9“€õ"0])…àʛøŸ›®2ÒêÐp}CDÃX†¼íÊÂnÁð §Þºˆ‚¤->,Î$ˆè;_Ü2—ŠãT	14¬4Œ;æÝÀw~ïbvu§á$æ@ˆB"TÄ!£­#ïë>9Q鍖Uq=ÖWAâW™2ÛÕkÑi•ÕY-¬Õ"ø–ÃÄæ6EjrÞãÄãÈÃ
P¾àtì͘ßèú/w=êÄc˜5ÝÏ,“',o÷Ï8gi®}fäÔh‚3րÖTe¿°²kœÜ
ïܧª}Þð¾ÐŽÊ—+m-ÚBpºl\Œf|ê|g¹ugä_6‡ìþKÌncʦ]M¤¡N$ˆåÃgó‰ù·y{“êwµÑ(é_š7N¢µ?!çºW~qD¬ÏcaÚe9áÒ)+TàõÍ­³µ3–%ŸÞº_¯îf[p¶Áߴɗj7ÞÝg	ºÊØ2±Cµëö ”L9¨äÚ@ò–íˆtü-Ò}”yûØOð¦>>ßV³n@e‰	öàWܘEЍ®;60ÒˤD­X±ƒËQa3P‡Ü™äG±YsGI¨`¡zhÝý>¥ì¿Ã@äœÿ½|ýÆöÿ}ɾ/í¿‹xÌó±<î¢"ÿKðÝîë¶awˆ²‹oꆰßó'X¬Åvq¢¤)Ùú!Åû¶ò@3.âÊHÂXfá»»ªÅˆ€
433
»÷6VI‘€7Vù58&0ÞøӞü
434
é°Äßä5˜•üÛÃÖ­áÙk2óM½?Ðh(ÏWe‡Í^6࿤ȿRªֹ@y´?€ªþZ…Ǩ–c?+Ló7ô†‘=|š#™#aŒ‘ü§½$Î$d˜á§=.s±Àr)#dvZßð>®ïmˆ1äY&‹ðµzÁžmA3’R7­IgÌ0{â3îtèB.®%ºÛÅ,SKƒQÃÇOÇq¤¦A?˜òÛÉo°Qð5®©B`ýö$¹µYÃÆR«Î/¯r]„ý­(+&…>éHX×ۑVû/›"m£&5«ª$f¯Ñƒdé•Q}–ýe“ì	y€6¹Â«§‘Ÿ‚£©$4¥YC–.5jKÅíî¡7~þT‘ÿ(Eñ6òü¿^¾Þ±å¿¥ÿ×bžlùïýO‡ó‘Kúï”ï›Ë¸P&T—ûþúǽùÓõp±ÄYe×/dO…’ +ìÈ^"DJ†[bn=ôjûó=eø¿ÈQ^¶<þϘ¾íÿõêÍòþ×B'ÿÿÐúpzþ˝89çUðw£ N*䮉‘N®_òB¦¯©dÊM¦¡‚AFTâ½T]EŽ°…a3>ïj÷¶(`
435
™Åñ/&%Är¥p\D³Q5>Ö0±ºÐ¯ ÿø0¡C:ú¦Â¥&"'¥Hë¿Ñn:Ò¯’•R	Ê­‡Yÿeø?y6–o#‡ÿ¿Ùyißÿ}±½´ÿ.æqùÿVY¡þããü¬¾yáKX…§A¿ÀþRÍ૔Œ†ÇÙ¡´81Œ'·`>VVsãáLü<è#¸"ç,U‹ÃFì\Åa3x9ƒÁ_7éçãª*@öÖ!u_J}Ly Åxó1§RêAN[U†×W'ñ*c:ngRM;âQD)ñÝè¸ï.ø¨[qô§ŸµîK¯½Ã†Žlh«äPB€MT@8·D¶gK/`Êf/uà ²\\ŒOš¯5.uwcVÕî  èºÏöÖïõTÑۚ6ß2;SÎÑl0ˆáZc ÀÝVÖ¤ ab!L&&½DbŠqýˆ¸ûN+C_²IÙ\O…›K{Ž£ì­ÖY³·Òf›ˆ\ªpHºOIÿš‚è`+2ªE¥æò Qa¾SoÑ8^ÉÑPœÐ²`ZºqáØê!™CÒÁ~ð«ÍÂ:ƙœfRÁH¦¥›§¤Ù#Ù5áœ@ˬ”†—Dz,Vĉ\8ÐF²‚ ¹
436
ŽiºÔ½Šø¿‹&L–b¹iñ:<°±ggTÜ|¿¸»WŸ:#J…µ·‘‚¼2é8q§Ÿ,¤955ü´œÔ‰ŠÎ÷e§4cºÍÑT™3nȑ52!í“("©q¦fF鸦¹¨Û„CqQMiõÐ)mb.pä*´_atî¸RO¥âØ ÃwÁòû­àûO•h²9ýùCöÀëdMÄ¥g¾R¡Ðdª„Œßjò¤©§¿ty0Å(TU7^„þ_Öþﬖj#Çþ³óbÛ¶ÿ¼Ü^ÆÿYÌã´ÿӄÝoïßé 4”¿„-ÈéÖwÇì!.«Ï}e…²MEä6^Ú^D*¥´¾»lêð"[³´Êe%Hê‰æ»\­Oâ[À Šd%íH²ž÷_6j¸”åtëPº})ÒÒ_”°+±×šØVF»”ËÕ!定øž	ÃÊ[àRܚóÔÏԄ¹‹NÕ\”’Óœ?à,•u9ÆUu‚fµÊͪ²tF–ò?­¼ìðæwùõ”êÕøVp
437
QC“›±îx8™ÅÜ´í$Ö»Q®ˆ%r–¬¨¬(ò²®ÎŒé\“³¶ûޙ{õÕu4Œ[w׶¨%p+^ݽ8ðʕ 6N·»]wkWôÒYQäùI|õ[bM[“Y*ÄvéÚ,‡Êù]Ÿ«´5éNÛd1s:ۛ¡ï™,HÈa…ÕîÂ~xꎹ„)2eè[!»`ë-s°eïx‹žÑ2û Zf?¼¡|•‚¹'m(Ÿ¿àJIêµ îò¯²)·¢+â%kt&Ď3Q*Ïý¡´üÿкÐ_ñ)­ÿW¸˜ëÿñꥥÿ¿ÚZÆ_̓®ÿÏå`%H	;@ÂQ0íf_ßïúàw•q±ï¹¼ec[żUÛÍ<vD?>g¨ãՔˆµð[›±N«mî#Ýò"ƒ|rŸ?14.x­|þRƒÐPx›h+qyÎUé£HN­W]£ƒöBµQ\ý¨J38kønÞ$ЁÿTé½õ¤’ÎãԐ–®—}¶—S+hqnä(ŠJÉ1%GŸ&—>Ä¢eÍÝDgF3Ö
438
o½Ê„"üléã^.VžtŒ¬‚^éˆiæ¶b×k‰iÀíÚd%×[š›üKæ5[w5ÏuùÖ}•ÖÔ?w`Äÿ¸‡0ÿ~r¦$›W$fÆ}õRº‘¼gë  ùº¡ùÎh°Ñ¾—Ãï	̓£8šàŸxÿ‹Ö¨BxŸa‚Åžö³5ꥶqŒ6HÃ`áÅoV­ÆkK‡,à½U·W™–Àviå%,רä§+ÁŽ^hGº¼ÈH
439
‘ÓšÕ0ÐKE/z› š|M´t¨vcØE?ëN{’\º=‘^™rInÞ#6âai¤ÂÉhXäNèËDQë©!6-¹ÊYVF[Ò¬Ý0@ʗf@€PPª2ŸÜ¢2þ¤Êä÷fceºþº+õZ•Ý_*²òô©ÙÕ<*òÖÕ:Xzm›­ñÀbH‹"—Ñ+·Ľî‚óB«·¾.VqÁi¡×åÁØÔ~§Ý1[œwÑq֝Foù]†„»¹†twŒý÷V2Œ_¬K±Ò|-‚ƒ­áO¦ºHë
ê£%«óŽ›>Ӏ€
440
hùSËyaß62£_h¤ÝJŠ]SŸçrcëðNP‚‹U«i[>ò4xµg~hf×PìQÜUµkçšÄþT‘JÛðB¹6rì?¯w¶íü//Þ¼^æ]ȓnÿ9o½¿»é§¿„ÕgŽ7ÒrÜõî¬ð
441
þxïasy	ÐÔÍEn℻]Å!Æ]œr÷p@õ‹8"7qTqËÿE»¾ê¸ÚN®üz‡¡n‡À/»á¼Z¿ÍK"™W, ân‚B\Ò0Ks—«l«&ëÎE5Ç×l˜ÿ½Sî©m¼a#6ÿ›	¼rïFØ8ÝÏÝ?õb„6{îvëAãDÙ~Åjv=ø•…ĸ-êÒBb±”lx>—¨é‡ºuP˜øUî&ð/dññy=é+ù®÷`ˆ´Â>%„à…Ëÿyú£6Ûl¯žû£îõxÚ»ñüãÿ¼IÄ{ñzgyþ¿Gèû'?œž´Ë*}åk>>MÏq\®T´ÍM¾:@K*\ÀŸ{ûX␭þb“½òÆWÿbð¼øÚÉv<
"ρ÷#[sÁö¹SDˆ2N
442
¾lñØ£æ:”Ç‹mJЭ~?ì†Á(ö g#šYåñˆZêúŒÏûŸ©|³á>°v¯Æ³Ø»ß¤A÷„˜ëÊ»ºe°ï̟2VJмàøöÚîN²
R²ýs&ÆFL¬¬	8*^›•cYŸM"^҃À<¨‹ìaTBEÑ矁¡Õ’.¼bS£B¿r˜Ï¼íß!O]»Såð?mï{¶ýZxŠ¤NzÓr[µA+@
443
±ÝÀ;ý¼½-zÅ¿Yáðʯ¼äú/Êÿ?MýÉõÕ,„u¾ö?Æñ_o%ï-ùÿBÁÿ¿?ß?ûáÝåÑña«´ÇW•ºxP69°×XÑx(-‡s 6H³IëPƒ…õŽÖшq¿>«DŸØqÅú]dÝc:  hì…(3a›Ž2.=¸ño#ïäòøØc¬˜´~ö`Æ#ü>7?ÿüs­NÀ<¯?akÈÌ	á4mÎê`ô5±…A›¾'ÞM_ÃïÙ`@¨lç§ñÌаÎðt:\èÿÀ軆ö²
þ]ë,ÄÃÞj*–\¨}èó§ðK0kÌBåB·<éȸ­_$Ei/+Ž¾Ì¯
444
ýHÁTÜ¡¸®F°¹ôzä…ÇDÀßôøË?âáøzDYkR}ýZ«PrRa×$,ª§#_wŒÃþîW·Ç²Ç[9òÉ.œŒ5Q⍽á˜Q2€ÍŒ‰27!›„W„	bøëL" ¾ŒA”Š0ý_Õå›æ·BÃ
445
®Ié#úÁŸÌw0ad&LÆá{»çMP…Æ_“	-'¬]dQGL–ðn‚i;üÞ0ˆ¯Ç=>êà*úæk”.Fð÷ˆý){Çq’¿%Z™Ã.¥V‚ÕÐ}à—#D,‰	{i7øFÉ¡f?¬Q>‰íi™r™þz<ô ¹Yô°¹ì	ŒRL÷![EÂ+̆-±ýÃ$m¶#ú³A\w̒ªÏ¥gE*ã$:qüáKSÌFrüüF¦Ø–àx òûl‘2ö?a"~Ÿm&έ€Í–}Ð#زÂ>1²ñ=ZåÒ3¼a>Àt;PĪK† >g!š	ŁןŽ‡Ÿ{Vm6lWÛØcGë"€ üA4VäC8	œÏ&Ÿ¶z¶
Àà ´â_l3öëgÏ<p-1lQD4éùZêXU®˜Ú%ö&‚3™Žã1no>‹°	¨žôû"¬+ʲ?Ù 1®{7×l>ð.N<¦`°µêÒЀZJIÓ{çIïÒ¢"@Â)€ƒ×NòÙ5³JÉY qf”þ@~Úª#YƒBkHmHö;ìÀ_5üihgH+dMoQb¡¤(nÖG¤º'ҏê_ø?|ù ³…vÔ½et?G¼€¨;‘=ÐÞ]€ï°¥n:`­;ûvƒ!dt&UFÒZ÷Œ½ÄÒf 3ÐÅ]ø¼W#ún
446
f?BvN½žèقe®ÂáhPÓ؎£?Üz\¨[sÐRÑà.ˆ&³;abÙK`ÇQHÔޏäŸJzR86©ÈÃÌöœí»;‹b©ÃÆ ë#
U¬Ê“=n ýè¦*E¿p¥½QÀÒñK©ÌÖõbZëyÃTV*Äl &cKˆmÈ£Mˆ`™šÞÝ¥ÆM%«É8û|›¶=ېºÁwèË=n$Díu…{í’qmÅÿ
•Ç=fwÀ$ˆãh7º=ÞQ’›õº¶¨Ô‚tÓ»ê®?$ìÂë4âÆôp‚m{æ…!·R=ÜqÇ<íŸ_ãÃqw†žØdzYó&øïFÚ®úI{]çÓ¤&—¤SMJYB‰ŽÔ.6c DBÍ&eœøìÕR1ÂGHo	?Ñô¶N8«ØûÚι|–ÏòY>Ëgù,õüKÑp
(-)a/src/core/Config.cpp (-485 / +33 lines)
Lines 40-45 Link Here
40
#include "HashUtils.h"
40
#include "HashUtils.h"
41
#include "Logging.h"
41
#include "Logging.h"
42
#include "LookParse.h"
42
#include "LookParse.h"
43
#include "Display.h"
43
#include "MathUtils.h"
44
#include "MathUtils.h"
44
#include "Mutex.h"
45
#include "Mutex.h"
45
#include "OpBuilders.h"
46
#include "OpBuilders.h"
Lines 208-214 Link Here
208
        if(csname.empty()) return false;
209
        if(csname.empty()) return false;
209
        
210
        
210
        std::string csnamelower = pystring::lower(csname);
211
        std::string csnamelower = pystring::lower(csname);
211
        
212
        for(unsigned int i = 0; i < colorspaces.size(); ++i)
212
        for(unsigned int i = 0; i < colorspaces.size(); ++i)
213
        {
213
        {
214
            if(csnamelower == pystring::lower(colorspaces[i]->getName()))
214
            if(csnamelower == pystring::lower(colorspaces[i]->getName()))
Lines 220-403 Link Here
220
        
220
        
221
        return false;
221
        return false;
222
    }
222
    }
223
    
224
    
225
    // Displays
226
    struct View
227
    {
228
        std::string name;
229
        std::string colorspace;
230
        std::string looks;
231
        
232
        View() { }
233
        
234
        View(const std::string & name_,
235
             const std::string & colorspace_,
236
             const std::string & looksList_) :
237
                name(name_),
238
                colorspace(colorspace_),
239
                looks(looksList_)
240
        { }
241
    };
242
    
243
    typedef std::vector<View> ViewVec;
244
    typedef std::map<std::string, ViewVec> DisplayMap;  // (display name : ViewVec)
245
    
246
    void operator >> (const YAML::Node& node, View& v)
247
    {
248
        if(node.Tag() != "View")
249
            return;
250
        
251
        std::string key, stringval;
252
        
253
        for (YAML::Iterator iter = node.begin();
254
             iter != node.end();
255
             ++iter)
256
        {
257
            iter.first() >> key;
258
            
259
            if(key == "name")
260
            {
261
                if (iter.second().Type() != YAML::NodeType::Null && 
262
                    iter.second().Read<std::string>(stringval))
263
                    v.name = stringval;
264
            }
265
            else if(key == "colorspace")
266
            {
267
                if (iter.second().Type() != YAML::NodeType::Null && 
268
                    iter.second().Read<std::string>(stringval))
269
                    v.colorspace = stringval;
270
            }
271
            else if(key == "looks" || key == "look")
272
            {
273
                if (iter.second().Type() != YAML::NodeType::Null && 
274
                    iter.second().Read<std::string>(stringval))
275
                    v.looks = stringval;
276
            }
277
            else
278
            {
279
                LogUnknownKeyWarning(node.Tag(), iter.first());
280
            }
281
        }
282
        
283
        if(v.name.empty())
284
        {
285
            throw Exception("View does not specify 'name'.");
286
        }
287
        if(v.colorspace.empty())
288
        {
289
            std::ostringstream os;
290
            os << "View '" << v.name << "' ";
291
            os << "does not specify colorspace.";
292
            throw Exception(os.str().c_str());
293
        }
294
    }
295
    
296
    YAML::Emitter& operator << (YAML::Emitter& out, View view)
297
    {
298
        out << YAML::VerbatimTag("View");
299
        out << YAML::Flow;
300
        out << YAML::BeginMap;
301
        out << YAML::Key << "name" << YAML::Value << view.name;
302
        out << YAML::Key << "colorspace" << YAML::Value << view.colorspace;
303
        if(!view.looks.empty()) out << YAML::Key << "looks" << YAML::Value << view.looks;
304
        out << YAML::EndMap;
305
        return out;
306
    }
307
    
308
    DisplayMap::iterator find_display(DisplayMap & displays, const std::string & display)
309
    {
310
        for(DisplayMap::iterator iter = displays.begin();
311
            iter != displays.end();
312
            ++iter)
313
        {
314
            if(StrEqualsCaseIgnore(display, iter->first)) return iter;
315
        }
316
        return displays.end();
317
    }
318
    
319
    DisplayMap::const_iterator find_display_const(const DisplayMap & displays, const std::string & display)
320
    {
321
        for(DisplayMap::const_iterator iter = displays.begin();
322
            iter != displays.end();
323
            ++iter)
324
        {
325
            if(StrEqualsCaseIgnore(display, iter->first)) return iter;
326
        }
327
        return displays.end();
328
    }
329
    
330
    int find_view(const ViewVec & vec, const std::string & name)
331
    {
332
        for(unsigned int i=0; i<vec.size(); ++i)
333
        {
334
            if(StrEqualsCaseIgnore(name, vec[i].name)) return i;
335
        }
336
        return -1;
337
    }
338
    
339
    void AddDisplay(DisplayMap & displays,
340
                    const std::string & display,
341
                    const std::string & view,
342
                    const std::string & colorspace,
343
                    const std::string & looks)
344
    {
345
        DisplayMap::iterator iter = find_display(displays, display);
346
        if(iter == displays.end())
347
        {
348
            ViewVec views;
349
            views.push_back( View(view, colorspace, looks) );
350
            displays[display] = views;
351
        }
352
        else
353
        {
354
            ViewVec & views = iter->second;
355
            int index = find_view(views, view);
356
            if(index<0)
357
            {
358
                views.push_back( View(view, colorspace, looks) );
359
            }
360
            else
361
            {
362
                views[index].colorspace = colorspace;
363
                views[index].looks = looks;
364
            }
365
        }
366
    }
367
    
368
    void ComputeDisplays(StringVec & displayCache,
369
                         const DisplayMap & displays,
370
                         const StringVec & activeDisplays,
371
                         const StringVec & activeDisplaysEnvOverride)
372
    {
373
        displayCache.clear();
374
        
223
        
375
        StringVec displayMasterList;
376
        for(DisplayMap::const_iterator iter = displays.begin();
377
            iter != displays.end();
378
            ++iter)
379
        {
380
            displayMasterList.push_back(iter->first);
381
        }
382
        
383
        // Apply the env override if it's not empty.
384
        if(!activeDisplaysEnvOverride.empty())
385
        {
386
            displayCache = IntersectStringVecsCaseIgnore(displayMasterList, activeDisplaysEnvOverride);
387
            if(!displayCache.empty()) return;
388
        }
389
        // Otherwise, aApply the active displays if it's not empty.
390
        else if(!activeDisplays.empty())
391
        {
392
            displayCache = IntersectStringVecsCaseIgnore(displayMasterList, activeDisplays);
393
            if(!displayCache.empty()) return;
394
        }
395
        
396
        displayCache = displayMasterList;
397
    }
398
    
399
    
400
    
401
    } // namespace
224
    } // namespace
402
    
225
    
403
    class Config::Impl
226
    class Config::Impl
Lines 431-436 Link Here
431
        mutable StringMap cacheids_;
254
        mutable StringMap cacheids_;
432
        mutable std::string cacheidnocontext_;
255
        mutable std::string cacheidnocontext_;
433
        
256
        
257
        OCIOYaml io_;
258
        
434
        Impl() : 
259
        Impl() : 
435
            context_(Context::Create()),
260
            context_(Context::Create()),
436
            strictParsing_(true),
261
            strictParsing_(true),
Lines 497-504 Link Here
497
            return *this;
322
            return *this;
498
        }
323
        }
499
        
324
        
500
        void load(std::istream & istream, const char * name);
501
        
502
        // Any time you modify the state of the config, you must call this
325
        // Any time you modify the state of the config, you must call this
503
        // to reset internal cache states.  You also should do this in a
326
        // to reset internal cache states.  You also should do this in a
504
        // thread safe manner by acquiring the cacheidMutex_;
327
        // thread safe manner by acquiring the cacheidMutex_;
Lines 536-542 Link Here
536
        istream.str(INTERNAL_RAW_PROFILE);
359
        istream.str(INTERNAL_RAW_PROFILE);
537
        
360
        
538
        ConfigRcPtr config = Config::Create();
361
        ConfigRcPtr config = Config::Create();
539
        config->getImpl()->load(istream, "");
362
        config->getImpl()->io_.open(istream, config);
540
        return config;
363
        return config;
541
    }
364
    }
542
    
365
    
Lines 551-564 Link Here
551
        }
374
        }
552
        
375
        
553
        ConfigRcPtr config = Config::Create();
376
        ConfigRcPtr config = Config::Create();
554
        config->getImpl()->load(istream, filename);
377
        config->getImpl()->io_.open(istream, config, filename);
555
        return config;
378
        return config;
556
    }
379
    }
557
    
380
    
558
    ConstConfigRcPtr Config::CreateFromStream(std::istream & istream)
381
    ConstConfigRcPtr Config::CreateFromStream(std::istream & istream)
559
    {
382
    {
560
        ConfigRcPtr config = Config::Create();
383
        ConfigRcPtr config = Config::Create();
561
        config->getImpl()->load(istream, "");
384
        config->getImpl()->io_.open(istream, config);
562
        return config;
385
        return config;
563
    }
386
    }
564
    
387
    
Lines 893-898 Link Here
893
        getImpl()->resetCacheIDs();
716
        getImpl()->resetCacheIDs();
894
    }
717
    }
895
    
718
    
719
    void Config::setEnvironmentMode(EnvironmentMode mode)
720
    {
721
        getImpl()->context_->setEnvironmentMode(mode);
722
        
723
        AutoMutex lock(getImpl()->cacheidMutex_);
724
        getImpl()->resetCacheIDs();
725
    }
726
    
727
    EnvironmentMode Config::getEnvironmentMode() const
728
    {
729
        return getImpl()->context_->getEnvironmentMode();
730
    }
731
    
732
    void Config::loadEnvironment()
733
    {
734
        getImpl()->context_->loadEnvironment();
735
        
736
        AutoMutex lock(getImpl()->cacheidMutex_);
737
        getImpl()->resetCacheIDs();
738
    }
739
    
896
    const char * Config::getSearchPath() const
740
    const char * Config::getSearchPath() const
897
    {
741
    {
898
        return getImpl()->context_->getSearchPath();
742
        return getImpl()->context_->getSearchPath();
Lines 1647-1706 Link Here
1647
    {
1491
    {
1648
        try
1492
        try
1649
        {
1493
        {
1650
            YAML::Emitter out;
1494
            getImpl()->io_.write(os, this);
1651
            out << YAML::Block;
1652
            out << YAML::BeginMap;
1653
            out << YAML::Key << "ocio_profile_version" << YAML::Value << 1;
1654
            out << YAML::Newline;
1655
            if(getImpl()->env_.size() > 0) {
1656
                out << YAML::Key << "environment";
1657
                out << YAML::Value << getImpl()->env_;
1658
                out << YAML::Newline;
1659
            }
1660
            out << YAML::Key << "search_path" << YAML::Value << getImpl()->context_->getSearchPath();
1661
            out << YAML::Key << "strictparsing" << YAML::Value << getImpl()->strictParsing_;
1662
            out << YAML::Key << "luma" << YAML::Value << YAML::Flow << getImpl()->defaultLumaCoefs_;
1663
            
1664
            if(getImpl()->description_ != "")
1665
            {
1666
                out << YAML::Newline;
1667
                out << YAML::Key << "description";
1668
                out << YAML::Value << getImpl()->description_;
1669
            }
1670
            
1671
            // Roles
1672
            out << YAML::Newline;
1673
            out << YAML::Key << "roles";
1674
            out << YAML::Value << getImpl()->roles_;
1675
            
1676
            // Displays
1677
            out << YAML::Newline;
1678
            out << YAML::Key << "displays";
1679
            out << YAML::Value << getImpl()->displays_;
1680
            out << YAML::Newline;
1681
            out << YAML::Key << "active_displays";
1682
            out << YAML::Value << YAML::Flow << getImpl()->activeDisplays_;
1683
            out << YAML::Key << "active_views";
1684
            out << YAML::Value << YAML::Flow << getImpl()->activeViews_;
1685
            
1686
            // Looks
1687
            if(!getImpl()->looksList_.empty())
1688
            {
1689
                out << YAML::Newline;
1690
                out << YAML::Key << "looks";
1691
                out << YAML::Value << getImpl()->looksList_;
1692
            }
1693
            
1694
            // ColorSpaces
1695
            {
1696
                out << YAML::Newline;
1697
                out << YAML::Key << "colorspaces";
1698
                out << YAML::Value << getImpl()->colorspaces_;
1699
            }
1700
            
1701
            out << YAML::EndMap;
1702
            
1703
            os << out.c_str();
1704
        }
1495
        }
1705
        catch( const std::exception & e)
1496
        catch( const std::exception & e)
1706
        {
1497
        {
Lines 1710-1955 Link Here
1710
        }
1501
        }
1711
    }
1502
    }
1712
    
1503
    
1713
    void Config::Impl::load(std::istream & istream, const char * filename)
1714
    {
1715
        try
1716
        {
1717
            YAML::Parser parser(istream);
1718
            YAML::Node node;
1719
            parser.GetNextDocument(node);
1720
            
1721
            // check profile version
1722
            int profile_version = 0;
1723
            if(node.FindValue("ocio_profile_version") == NULL)
1724
            {
1725
                std::ostringstream os;
1726
                os << "The specified file ";
1727
                os << "does not appear to be an OCIO configuration.";
1728
                throw Exception (os.str().c_str());
1729
            }
1730
            
1731
            node["ocio_profile_version"] >> profile_version;
1732
            if(profile_version > 1)
1733
            {
1734
                std::ostringstream os;
1735
                os << "This .ocio config ";
1736
                if(filename && *filename)
1737
                {
1738
                    os << " '" << filename << "' ";
1739
                }
1740
                os << "is version " << profile_version << ". ";
1741
                os << "This version of the OpenColorIO library (" << OCIO_VERSION ") ";
1742
                os << "is not known to be able to load this profile. ";
1743
                os << "An attempt will be made, but there are no guarantees that the ";
1744
                os << "results will be accurate. Continue at your own risk.";
1745
                LogWarning(os.str());
1746
            }
1747
            
1748
            
1749
            std::string key, stringval;
1750
            bool boolval = false;
1751
            EnvironmentMode mode = ENV_ENVIRONMENT_LOAD_ALL;
1752
            
1753
            for (YAML::Iterator iter = node.begin();
1754
                 iter != node.end();
1755
                 ++iter)
1756
            {
1757
                iter.first() >> key;
1758
                
1759
                if(key == "ocio_profile_version") { } // Already handled above.
1760
                else if(key == "environment")
1761
                {
1762
                    mode = ENV_ENVIRONMENT_LOAD_PREDEFINED;
1763
                    const YAML::Node& environment = iter.second();
1764
                    if(environment.Type() != YAML::NodeType::Map)
1765
                    {
1766
                        std::ostringstream os;
1767
                        os << "'environment' field needs to be a (name: key) map.";
1768
                        throw Exception(os.str().c_str());
1769
                    }
1770
                    for (YAML::Iterator it  = environment.begin();
1771
                                        it != environment.end(); ++it)
1772
                    {
1773
                        std::string k, v;
1774
                        it.first() >> k;
1775
                        it.second() >> v;
1776
                        env_[k] = v;
1777
                        context_->setStringVar(k.c_str(), v.c_str());
1778
                    }
1779
                }
1780
                else if(key == "search_path" || key == "resource_path")
1781
                {
1782
                    if (iter.second().Type() != YAML::NodeType::Null && 
1783
                        iter.second().Read<std::string>(stringval))
1784
                        context_->setSearchPath(stringval.c_str());
1785
                }
1786
                else if(key == "strictparsing")
1787
                {
1788
                    if (iter.second().Type() != YAML::NodeType::Null && 
1789
                        iter.second().Read<bool>(boolval))
1790
                        strictParsing_ = boolval;
1791
                }
1792
                else if(key == "description")
1793
                {
1794
                    if (iter.second().Type() != YAML::NodeType::Null && 
1795
                        iter.second().Read<std::string>(stringval))
1796
                        description_ = stringval;
1797
                }
1798
                else if(key == "luma")
1799
                {
1800
                    std::vector<float> val;
1801
                    if (iter.second().Type() != YAML::NodeType::Null)
1802
                    {
1803
                        iter.second() >> val;
1804
                        if(val.size() != 3)
1805
                        {
1806
                            std::ostringstream os;
1807
                            os << "'luma' field must be 3 ";
1808
                            os << "floats. Found '" << val.size() << "'.";
1809
                            throw Exception(os.str().c_str());
1810
                        }
1811
                        defaultLumaCoefs_ = val;
1812
                    }
1813
                }
1814
                else if(key == "roles")
1815
                {
1816
                    const YAML::Node& roles = iter.second();
1817
                    if(roles.Type() != YAML::NodeType::Map)
1818
                    {
1819
                        std::ostringstream os;
1820
                        os << "'roles' field needs to be a (name: key) map.";
1821
                        throw Exception(os.str().c_str());
1822
                    }
1823
                    for (YAML::Iterator it  = roles.begin();
1824
                                        it != roles.end(); ++it)
1825
                    {
1826
                        std::string k, v;
1827
                        it.first() >> k;
1828
                        it.second() >> v;
1829
                        roles_[pystring::lower(k)] = v;
1830
                    }
1831
                }
1832
                else if(key == "displays")
1833
                {
1834
                    if (iter.second().Type() != YAML::NodeType::Null)
1835
                    {
1836
                        iter.second() >> displays_;
1837
                    }
1838
                }
1839
                else if(key == "active_displays")
1840
                {
1841
                    if (iter.second().Type() != YAML::NodeType::Null)
1842
                    {
1843
                        iter.second() >> activeDisplays_;
1844
                    }
1845
                }
1846
                else if(key == "active_views")
1847
                {
1848
                    if (iter.second().Type() != YAML::NodeType::Null)
1849
                    {
1850
                        iter.second() >> activeViews_;
1851
                    }
1852
                }
1853
                else if(key == "colorspaces")
1854
                {
1855
                    const YAML::Node& colorspaces = iter.second();
1856
                    
1857
                    if(colorspaces.Type() != YAML::NodeType::Sequence)
1858
                    {
1859
                        std::ostringstream os;
1860
                        os << "'colorspaces' field needs to be a (- !<ColorSpace>) list.";
1861
                        throw Exception(os.str().c_str());
1862
                    }
1863
                    
1864
                    for(unsigned i = 0; i < colorspaces.size(); ++i)
1865
                    {
1866
                        if(colorspaces[i].Tag() == "ColorSpace")
1867
                        {
1868
                            ColorSpaceRcPtr cs = ColorSpace::Create();
1869
                            colorspaces[i] >> cs;
1870
                            colorspaces_.push_back( cs );
1871
                        }
1872
                        else
1873
                        {
1874
                            std::ostringstream os;
1875
                            os << "Unknown element found in colorspaces:";
1876
                            os << colorspaces[i].Tag() << ". Only ColorSpace(s)";
1877
                            os << " currently handled.";
1878
                            LogWarning(os.str());
1879
                        }
1880
                    }
1881
                }
1882
                else if(key == "looks")
1883
                {
1884
                    const YAML::Node& looks = iter.second();
1885
                    
1886
                    if(looks.Type() != YAML::NodeType::Sequence)
1887
                    {
1888
                        std::ostringstream os;
1889
                        os << "'looks' field needs to be a (- !<Look>) list.";
1890
                        throw Exception(os.str().c_str());
1891
                    }
1892
                    
1893
                    for(unsigned i = 0; i < looks.size(); ++i)
1894
                    {
1895
                        if(looks[i].Tag() == "Look")
1896
                        {
1897
                            LookRcPtr look = Look::Create();
1898
                            looks[i] >> look;
1899
                            looksList_.push_back( look );
1900
                        }
1901
                        else
1902
                        {
1903
                            std::ostringstream os;
1904
                            os << "Unknown element found in looks:";
1905
                            os << looks[i].Tag() << ". Only Look(s)";
1906
                            os << " currently handled.";
1907
                            LogWarning(os.str());
1908
                        }
1909
                    }
1910
                }
1911
                else
1912
                {
1913
                    LogUnknownKeyWarning("profile", iter.first());
1914
                }
1915
            }
1916
            
1917
            if(filename)
1918
            {
1919
                std::string realfilename = pystring::os::path::abspath(filename);
1920
                std::string configrootdir = pystring::os::path::dirname(realfilename);
1921
                context_->setWorkingDir(configrootdir.c_str());
1922
            }
1923
            
1924
            context_->setEnvironmentMode(mode);
1925
            context_->loadEnvironment();
1926
            
1927
            if(mode == ENV_ENVIRONMENT_LOAD_ALL)
1928
            {
1929
                std::ostringstream os;
1930
                os << "This .ocio config ";
1931
                if(filename && *filename)
1932
                {
1933
                    os << " '" << filename << "' ";
1934
                }
1935
                os << "has no environment section defined. The default behaviour is to ";
1936
                os << "load all environment variables (" << context_->getNumStringVars() << ")";
1937
                os << ", which reduces the efficiency of OCIO's caching. Considering ";
1938
                os << "predefining the environment variables used.";
1939
                LogDebug(os.str());
1940
            }
1941
            
1942
        }
1943
        catch( const std::exception & e)
1944
        {
1945
            std::ostringstream os;
1946
            os << "Error: Loading the OCIO profile ";
1947
            if(filename) os << "'" << filename << "' ";
1948
            os << "failed. " << e.what();
1949
            throw Exception(os.str().c_str());
1950
        }
1951
    }
1952
    
1953
    void Config::Impl::resetCacheIDs()
1504
    void Config::Impl::resetCacheIDs()
1954
    {
1505
    {
1955
        cacheids_.clear();
1506
        cacheids_.clear();
Lines 2287-2295 Link Here
2287
    std::istringstream is;
1838
    std::istringstream is;
2288
    is.str(SIMPLE_PROFILE);
1839
    is.str(SIMPLE_PROFILE);
2289
    OCIO::ConstConfigRcPtr config;
1840
    OCIO::ConstConfigRcPtr config;
2290
    OIIO_CHECK_NO_THOW(config = OCIO::Config::CreateFromStream(is));
1841
    OIIO_CHECK_THOW(config = OCIO::Config::CreateFromStream(is), OCIO::Exception);
2291
    
2292
    OIIO_CHECK_THOW(config->sanityCheck(), OCIO::Exception);
2293
    }
1842
    }
2294
    
1843
    
2295
    {
1844
    {
Lines 2330-2337 Link Here
2330
    "colorspaces:\n"
1879
    "colorspaces:\n"
2331
    "  - !<ColorSpace>\n"
1880
    "  - !<ColorSpace>\n"
2332
    "      name: raw\n"
1881
    "      name: raw\n"
2333
    "  - !<ColorSpace>\n"
2334
    "      name: raw\n"
2335
    "strictparsing: false\n"
1882
    "strictparsing: false\n"
2336
    "roles:\n"
1883
    "roles:\n"
2337
    "  default: raw\n"
1884
    "  default: raw\n"
Lines 2345-2352 Link Here
2345
    "colorspaces:\n"
1892
    "colorspaces:\n"
2346
    "  - !<ColorSpace>\n"
1893
    "  - !<ColorSpace>\n"
2347
    "      name: raw\n"
1894
    "      name: raw\n"
2348
    "  - !<ColorSpace>\n"
2349
    "      name: raw\n"
2350
    "strictparsing: false\n"
1895
    "strictparsing: false\n"
2351
    "roles:\n"
1896
    "roles:\n"
2352
    "  default: raw\n"
1897
    "  default: raw\n"
Lines 2370-2376 Link Here
2370
        "testbarchedder") == 0);
1915
        "testbarchedder") == 0);
2371
    OIIO_CHECK_ASSERT(strcmp(config->getCurrentContext()->resolveStringVar("${SHOW}"),
1916
    OIIO_CHECK_ASSERT(strcmp(config->getCurrentContext()->resolveStringVar("${SHOW}"),
2372
        "bar") == 0);
1917
        "bar") == 0);
2373
    OIIO_CHECK_THOW(config->sanityCheck(), OCIO::Exception);
2374
    OIIO_CHECK_ASSERT(strcmp(config->getEnvironmentVarDefault("SHOW"), "super") == 0);
1918
    OIIO_CHECK_ASSERT(strcmp(config->getEnvironmentVarDefault("SHOW"), "super") == 0);
2375
    
1919
    
2376
    OCIO::ConfigRcPtr edit = config->createEditableCopy();
1920
    OCIO::ConfigRcPtr edit = config->createEditableCopy();
Lines 2403-2408 Link Here
2403
        "lighting") == 0);
1947
        "lighting") == 0);
2404
    OCIO::SetLoggingLevel(loglevel);
1948
    OCIO::SetLoggingLevel(loglevel);
2405
    
1949
    
1950
    OIIO_CHECK_EQUAL(edit->getEnvironmentMode(), OCIO::ENV_ENVIRONMENT_LOAD_PREDEFINED);
1951
    edit->setEnvironmentMode(OCIO::ENV_ENVIRONMENT_LOAD_ALL);
1952
    OIIO_CHECK_EQUAL(edit->getEnvironmentMode(), OCIO::ENV_ENVIRONMENT_LOAD_ALL);
1953
    
2406
    }
1954
    }
2407
}
1955
}
2408
1956
(-)a/src/core/Display.cpp (+145 lines)
Line 0 Link Here
1
/*
2
Copyright (c) 2003-2010 Sony Pictures Imageworks Inc., et al.
3
All Rights Reserved.
4
5
Redistribution and use in source and binary forms, with or without
6
modification, are permitted provided that the following conditions are
7
met:
8
* Redistributions of source code must retain the above copyright
9
  notice, this list of conditions and the following disclaimer.
10
* Redistributions in binary form must reproduce the above copyright
11
  notice, this list of conditions and the following disclaimer in the
12
  documentation and/or other materials provided with the distribution.
13
* Neither the name of Sony Pictures Imageworks nor the names of its
14
  contributors may be used to endorse or promote products derived from
15
  this software without specific prior written permission.
16
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
*/
28
29
#include <string>
30
31
#include <OpenColorIO/OpenColorIO.h>
32
33
#include "Display.h"
34
#include "ParseUtils.h"
35
36
OCIO_NAMESPACE_ENTER
37
{
38
    
39
    DisplayMap::iterator find_display(DisplayMap & displays, const std::string & display)
40
    {
41
        for(DisplayMap::iterator iter = displays.begin();
42
            iter != displays.end();
43
            ++iter)
44
        {
45
            if(StrEqualsCaseIgnore(display, iter->first)) return iter;
46
        }
47
        return displays.end();
48
    }
49
    
50
    DisplayMap::const_iterator find_display_const(const DisplayMap & displays, const std::string & display)
51
    {
52
        for(DisplayMap::const_iterator iter = displays.begin();
53
            iter != displays.end();
54
            ++iter)
55
        {
56
            if(StrEqualsCaseIgnore(display, iter->first)) return iter;
57
        }
58
        return displays.end();
59
    }
60
    
61
    int find_view(const ViewVec & vec, const std::string & name)
62
    {
63
        for(unsigned int i=0; i<vec.size(); ++i)
64
        {
65
            if(StrEqualsCaseIgnore(name, vec[i].name)) return i;
66
        }
67
        return -1;
68
    }
69
    
70
    void AddDisplay(DisplayMap & displays,
71
                    const std::string & display,
72
                    const std::string & view,
73
                    const std::string & colorspace,
74
                    const std::string & looks)
75
    {
76
        DisplayMap::iterator iter = find_display(displays, display);
77
        if(iter == displays.end())
78
        {
79
            ViewVec views;
80
            views.push_back( View(view, colorspace, looks) );
81
            displays[display] = views;
82
        }
83
        else
84
        {
85
            ViewVec & views = iter->second;
86
            int index = find_view(views, view);
87
            if(index<0)
88
            {
89
                views.push_back( View(view, colorspace, looks) );
90
            }
91
            else
92
            {
93
                views[index].colorspace = colorspace;
94
                views[index].looks = looks;
95
            }
96
        }
97
    }
98
    
99
    void ComputeDisplays(StringVec & displayCache,
100
                         const DisplayMap & displays,
101
                         const StringVec & activeDisplays,
102
                         const StringVec & activeDisplaysEnvOverride)
103
    {
104
        displayCache.clear();
105
        
106
        StringVec displayMasterList;
107
        for(DisplayMap::const_iterator iter = displays.begin();
108
            iter != displays.end();
109
            ++iter)
110
        {
111
            displayMasterList.push_back(iter->first);
112
        }
113
        
114
        // Apply the env override if it's not empty.
115
        if(!activeDisplaysEnvOverride.empty())
116
        {
117
            displayCache = IntersectStringVecsCaseIgnore(displayMasterList, activeDisplaysEnvOverride);
118
            if(!displayCache.empty()) return;
119
        }
120
        // Otherwise, aApply the active displays if it's not empty.
121
        else if(!activeDisplays.empty())
122
        {
123
            displayCache = IntersectStringVecsCaseIgnore(displayMasterList, activeDisplays);
124
            if(!displayCache.empty()) return;
125
        }
126
        
127
        displayCache = displayMasterList;
128
    }
129
130
}
131
OCIO_NAMESPACE_EXIT
132
133
///////////////////////////////////////////////////////////////////////////////
134
135
#ifdef OCIO_UNIT_TEST
136
137
namespace OCIO = OCIO_NAMESPACE;
138
#include "UnitTest.h"
139
140
OIIO_ADD_TEST(Display, Basic)
141
{
142
    
143
}
144
145
#endif // OCIO_UNIT_TEST
(-)a/src/core/Display.h (+85 lines)
Line 0 Link Here
1
/*
2
Copyright (c) 2003-2010 Sony Pictures Imageworks Inc., et al.
3
All Rights Reserved.
4
5
Redistribution and use in source and binary forms, with or without
6
modification, are permitted provided that the following conditions are
7
met:
8
* Redistributions of source code must retain the above copyright
9
  notice, this list of conditions and the following disclaimer.
10
* Redistributions in binary form must reproduce the above copyright
11
  notice, this list of conditions and the following disclaimer in the
12
  documentation and/or other materials provided with the distribution.
13
* Neither the name of Sony Pictures Imageworks nor the names of its
14
  contributors may be used to endorse or promote products derived from
15
  this software without specific prior written permission.
16
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
*/
28
29
30
#ifndef INCLUDED_OCIO_DISPLAY_H
31
#define INCLUDED_OCIO_DISPLAY_H
32
33
#include <OpenColorIO/OpenColorIO.h>
34
35
#include <string>
36
#include <vector>
37
#include <map>
38
39
#include "PrivateTypes.h"
40
41
OCIO_NAMESPACE_ENTER
42
{
43
    
44
    // Displays
45
    struct View
46
    {
47
        std::string name;
48
        std::string colorspace;
49
        std::string looks;
50
        
51
        View() { }
52
        
53
        View(const std::string & name_,
54
             const std::string & colorspace_,
55
             const std::string & looksList_) :
56
                name(name_),
57
                colorspace(colorspace_),
58
                looks(looksList_)
59
        { }
60
    };
61
    
62
    typedef std::vector<View> ViewVec;
63
    typedef std::map<std::string, ViewVec> DisplayMap;  // (display name : ViewVec)
64
    
65
    DisplayMap::iterator find_display(DisplayMap & displays, const std::string & display);
66
    
67
    DisplayMap::const_iterator find_display_const(const DisplayMap & displays, const std::string & display);
68
    
69
    int find_view(const ViewVec & vec, const std::string & name);
70
    
71
    void AddDisplay(DisplayMap & displays,
72
                    const std::string & display,
73
                    const std::string & view,
74
                    const std::string & colorspace,
75
                    const std::string & looks);
76
    
77
    void ComputeDisplays(StringVec & displayCache,
78
                         const DisplayMap & displays,
79
                         const StringVec & activeDisplays,
80
                         const StringVec & activeDisplaysEnvOverride);
81
    
82
}
83
OCIO_NAMESPACE_EXIT
84
85
#endif
(-)a/src/core/FileFormatTruelight.cpp (-1 / +69 lines)
Lines 28-33 Link Here
28
28
29
#include <cstdio>
29
#include <cstdio>
30
#include <iostream>
30
#include <iostream>
31
#include <iomanip>
31
#include <iterator>
32
#include <iterator>
32
33
33
#include <OpenColorIO/OpenColorIO.h>
34
#include <OpenColorIO/OpenColorIO.h>
Lines 90-95 Link Here
90
            
91
            
91
            virtual CachedFileRcPtr Read(std::istream & istream) const;
92
            virtual CachedFileRcPtr Read(std::istream & istream) const;
92
            
93
            
94
            virtual void Write(const Baker & baker,
95
                               const std::string & formatName,
96
                               std::ostream & ostream) const;
97
            
93
            virtual void BuildFileOps(OpRcPtrVec & ops,
98
            virtual void BuildFileOps(OpRcPtrVec & ops,
94
                         const Config& config,
99
                         const Config& config,
95
                         const ConstContextRcPtr & context,
100
                         const ConstContextRcPtr & context,
Lines 103-109 Link Here
103
            FormatInfo info;
108
            FormatInfo info;
104
            info.name = "truelight";
109
            info.name = "truelight";
105
            info.extension = "cub";
110
            info.extension = "cub";
106
            info.capabilities = FORMAT_CAPABILITY_READ;
111
            info.capabilities = (FORMAT_CAPABILITY_READ | FORMAT_CAPABILITY_WRITE);
107
            formatInfoVec.push_back(info);
112
            formatInfoVec.push_back(info);
108
        }
113
        }
109
        
114
        
Lines 287-292 Link Here
287
            
292
            
288
            return cachedFile;
293
            return cachedFile;
289
        }
294
        }
295
296
297
        void
298
        LocalFileFormat::Write(const Baker & baker,
299
                               const std::string & /*formatName*/,
300
                               std::ostream & ostream) const
301
        {
302
            const int DEFAULT_CUBE_SIZE = 32;
303
            const int DEFAULT_SHAPER_SIZE = 1024;
304
305
            ConstConfigRcPtr config = baker.getConfig();
306
            
307
            int cubeSize = baker.getCubeSize();
308
            if (cubeSize==-1) cubeSize = DEFAULT_CUBE_SIZE;
309
            cubeSize = std::max(2, cubeSize); // smallest cube is 2x2x2
310
311
            std::vector<float> cubeData;
312
            cubeData.resize(cubeSize*cubeSize*cubeSize*3);
313
            GenerateIdentityLut3D(&cubeData[0], cubeSize, 3, LUT3DORDER_FAST_RED);
314
            PackedImageDesc cubeImg(&cubeData[0], cubeSize*cubeSize*cubeSize, 1, 3);
315
            
316
            // Apply processor to lut data
317
            ConstProcessorRcPtr inputToTarget;
318
            inputToTarget = config->getProcessor(baker.getInputSpace(), baker.getTargetSpace());
319
            inputToTarget->apply(cubeImg);
320
            
321
            int shaperSize = baker.getShaperSize();
322
            if (shaperSize==-1) shaperSize = DEFAULT_SHAPER_SIZE;
323
            shaperSize = std::max(2, shaperSize); // smallest shaper is 2x2x2
324
325
326
            // Write the header
327
            ostream << "# Truelight Cube v2.0\n";
328
            ostream << "# lutLength " << shaperSize << "\n";
329
            ostream << "# iDims     3\n";
330
            ostream << "# oDims     3\n";
331
            ostream << "# width     " << cubeSize << " " << cubeSize << " " << cubeSize << "\n";
332
            ostream << "\n";
333
334
335
            // Write the shaper lut
336
            // (We are just going to use a unity lut)
337
            ostream << "# InputLUT\n";
338
            ostream << std::setprecision(6) << std::fixed;
339
            float v = 0.0f;
340
            for (int i=0; i < shaperSize-1; i++)
341
            {
342
                v = ((float)i / (float)(shaperSize-1)) * (float)(cubeSize-1);
343
                ostream << v << " " << v << " " << v << "\n";
344
            }
345
            v = (float) (cubeSize-1);
346
            ostream << v << " " << v << " " << v << "\n"; // ensure that the last value is spot on
347
            ostream << "\n";
348
349
            // Write the cube
350
            ostream << "# Cube\n";
351
            for (int i=0; i<cubeSize*cubeSize*cubeSize; ++i)
352
            {
353
                ostream << cubeData[3*i+0] << " " << cubeData[3*i+1] << " " << cubeData[3*i+2] << "\n";
354
            }
355
            
356
            ostream << "# end\n";
357
        }
290
        
358
        
291
        void
359
        void
292
        LocalFileFormat::BuildFileOps(OpRcPtrVec & ops,
360
        LocalFileFormat::BuildFileOps(OpRcPtrVec & ops,
(-)a/src/core/NoOps.cpp (-2 / +2 lines)
Lines 411-423 Link Here
411
        
411
        
412
        OpRcPtr LookNoOp::clone() const
412
        OpRcPtr LookNoOp::clone() const
413
        {
413
        {
414
            OpRcPtr op = OpRcPtr(new FileNoOp(m_look));
414
            OpRcPtr op = OpRcPtr(new LookNoOp(m_look));
415
            return op;
415
            return op;
416
        }
416
        }
417
        
417
        
418
        bool LookNoOp::isSameType(const OpRcPtr & op) const
418
        bool LookNoOp::isSameType(const OpRcPtr & op) const
419
        {
419
        {
420
            FileNoOpRcPtr typedRcPtr = DynamicPtrCast<FileNoOp>(op);
420
            LookNoOpRcPtr typedRcPtr = DynamicPtrCast<LookNoOp>(op);
421
            if(!typedRcPtr) return false;
421
            if(!typedRcPtr) return false;
422
            return true;
422
            return true;
423
        }
423
        }
(-)a/src/core/OCIOYaml.cpp (-968 / +1577 lines)
Lines 30-1217 Link Here
30
30
31
#include <OpenColorIO/OpenColorIO.h>
31
#include <OpenColorIO/OpenColorIO.h>
32
32
33
#ifndef WINDOWS
34
35
// fwd declare yaml-cpp visibility
36
#pragma GCC visibility push(hidden)
37
namespace YAML {
38
    class Exception;
39
    class BadDereference;
40
    class RepresentationException;
41
    class EmitterException;
42
    class ParserException;
43
    class InvalidScalar;
44
    class KeyNotFound;
45
    template <typename T> class TypedKeyNotFound;
46
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::ColorSpace>;
47
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::Config>;
48
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::Exception>;
49
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::GpuShaderDesc>;
50
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::ImageDesc>;
51
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::Look>;
52
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::Processor>;
53
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::Transform>;
54
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::AllocationTransform>;
55
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::CDLTransform>;
56
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::ColorSpaceTransform>;
57
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::DisplayTransform>;
58
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::ExponentTransform>;
59
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::FileTransform>;
60
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::GroupTransform>;
61
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::LogTransform>;
62
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::LookTransform>;
63
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::MatrixTransform>;
64
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::TruelightTransform>;
65
}
66
#pragma GCC visibility pop
67
68
#endif
69
70
#include <yaml-cpp/yaml.h>
71
33
#include "Logging.h"
72
#include "Logging.h"
34
#include "MathUtils.h"
73
#include "MathUtils.h"
74
#include "pystring/pystring.h"
75
#include "PathUtils.h"
76
#include "ParseUtils.h"
77
#include "Display.h"
35
#include "OCIOYaml.h"
78
#include "OCIOYaml.h"
36
79
37
OCIO_NAMESPACE_ENTER
80
OCIO_NAMESPACE_ENTER
38
{
81
{
39
    ///////////////////////////////////////////////////////////////////////////
40
    //  Core
41
    
82
    
42
    void LogUnknownKeyWarning(const std::string & name, const YAML::Node& tag)
83
    namespace
43
    {
84
    {
44
        std::string key;
45
        tag >> key;
46
        
47
        std::ostringstream os;
48
        os << "Unknown key in " << name << ": ";
49
        os << "'" << key << "'. (line ";
50
        os << (tag.GetMark().line+1) << ", column "; // (yaml line numbers start at 0)
51
        os << tag.GetMark().column << ")";
52
        LogWarning(os.str());
53
    }
54
    
85
    
55
    void operator >> (const YAML::Node& node, ColorSpaceRcPtr& cs)
86
#ifdef OLDYAML
56
    {
87
        typedef YAML::Iterator Iterator;
57
        if(node.Tag() != "ColorSpace")
88
#else
58
            return; // not a !<ColorSpace> tag
89
        typedef YAML::const_iterator Iterator;
59
        
90
#endif
60
        std::string key, stringval;
91
61
        bool boolval;
92
        // Iterator access
62
        
93
        // Note: The ownership semantics have changed between yaml-cpp 0.3.x and 0.5.x .
63
        for (YAML::Iterator iter = node.begin();
94
        // Returning a const reference to a yaml node screws with the internal yaml-cpp smart ptr 
64
             iter != node.end();
95
        // implementation in the newer version. Luckily, the compiler does not care if we maintain
65
             ++iter)
96
        // const YAML::Node & = get_first(iter) syntax at the call site even when returning an actual object
97
        // (instead of the reference as expected).
98
#ifdef OLDYAML
99
        inline const YAML::Node& get_first(const Iterator &it)
66
        {
100
        {
67
            iter.first() >> key;
101
            return it.first();
68
            
69
            if(key == "name")
70
            {
71
                if (iter.second().Type() != YAML::NodeType::Null && 
72
                    iter.second().Read<std::string>(stringval))
73
                    cs->setName(stringval.c_str());
74
            }
75
            else if(key == "description")
76
            {
77
                if (iter.second().Type() != YAML::NodeType::Null && 
78
                    iter.second().Read<std::string>(stringval))
79
                    cs->setDescription(stringval.c_str());
80
            }
81
            else if(key == "family")
82
            {
83
                if (iter.second().Type() != YAML::NodeType::Null && 
84
                    iter.second().Read<std::string>(stringval))
85
                    cs->setFamily(stringval.c_str());
86
            }
87
            else if(key == "equalitygroup")
88
            {
89
                if (iter.second().Type() != YAML::NodeType::Null && 
90
                    iter.second().Read<std::string>(stringval))
91
                    cs->setEqualityGroup(stringval.c_str());
92
            }
93
            else if(key == "bitdepth")
94
            {
95
                BitDepth ret;
96
                if (iter.second().Type() != YAML::NodeType::Null && 
97
                    iter.second().Read<BitDepth>(ret))
98
                    cs->setBitDepth(ret);
99
            }
100
            else if(key == "isdata")
101
            {
102
                if (iter.second().Type() != YAML::NodeType::Null && 
103
                    iter.second().Read<bool>(boolval))
104
                    cs->setIsData(boolval);
105
            }
106
            else if(key == "allocation")
107
            {
108
                Allocation val;
109
                if (iter.second().Type() != YAML::NodeType::Null && 
110
                    iter.second().Read<Allocation>(val))
111
                    cs->setAllocation(val);
112
            }
113
            else if(key == "allocationvars")
114
            {
115
                std::vector<float> val;
116
                if (iter.second().Type() != YAML::NodeType::Null)
117
                {
118
                    iter.second() >> val;
119
                    if(!val.empty())
120
                    {
121
                        cs->setAllocationVars(static_cast<int>(val.size()), &val[0]);
122
                    }
123
                }
124
            }
125
            else if(key == "to_reference")
126
            {
127
                TransformRcPtr val;
128
                if (iter.second().Type() != YAML::NodeType::Null && 
129
                    iter.second().Read<TransformRcPtr>(val))
130
                  cs->setTransform(val, COLORSPACE_DIR_TO_REFERENCE);
131
            }
132
            else if(key == "from_reference")
133
            {
134
                TransformRcPtr val;
135
                if (iter.second().Type() != YAML::NodeType::Null && 
136
                    iter.second().Read<TransformRcPtr>(val))
137
                  cs->setTransform(val, COLORSPACE_DIR_FROM_REFERENCE);
138
            }
139
            else
140
            {
141
                LogUnknownKeyWarning(node.Tag(), iter.first());
142
            }
143
        }
102
        }
144
    }
103
#else
145
    
104
        inline YAML::Node get_first(const Iterator &it)
146
    YAML::Emitter& operator << (YAML::Emitter& out, ColorSpaceRcPtr cs)
147
    {
148
        out << YAML::VerbatimTag("ColorSpace");
149
        out << YAML::BeginMap;
150
        
151
        out << YAML::Key << "name" << YAML::Value << cs->getName();
152
        out << YAML::Key << "family" << YAML::Value << cs->getFamily();
153
        out << YAML::Key << "equalitygroup" << YAML::Value << cs->getEqualityGroup();
154
        out << YAML::Key << "bitdepth" << YAML::Value << cs->getBitDepth();
155
        if(strlen(cs->getDescription()) > 0)
156
        {
105
        {
157
            out << YAML::Key << "description";
106
            return it->first;
158
            out << YAML::Value << YAML::Literal << cs->getDescription();
159
        }
107
        }
160
        out << YAML::Key << "isdata" << YAML::Value << cs->isData();
108
#endif
161
        
109
        
162
        out << YAML::Key << "allocation" << YAML::Value << cs->getAllocation();
110
#ifdef OLDYAML
163
        if(cs->getAllocationNumVars() > 0)
111
        inline const YAML::Node& get_second(const Iterator &it)
164
        {
112
        {
165
            std::vector<float> allocationvars(cs->getAllocationNumVars());
113
            return it.second();
166
            cs->getAllocationVars(&allocationvars[0]);
167
            out << YAML::Key << "allocationvars";
168
            out << YAML::Flow << YAML::Value << allocationvars;
169
        }
114
        }
115
#else
116
        inline YAML::Node get_second(const Iterator &it)
117
        {
118
            return it->second;
119
        }
120
#endif
170
        
121
        
171
        ConstTransformRcPtr toref = \
122
        // Basic types
172
            cs->getTransform(COLORSPACE_DIR_TO_REFERENCE);
173
        if(toref)
174
            out << YAML::Key << "to_reference" << YAML::Value << toref;
175
        
176
        ConstTransformRcPtr fromref = \
177
            cs->getTransform(COLORSPACE_DIR_FROM_REFERENCE);
178
        if(fromref)
179
            out << YAML::Key << "from_reference" << YAML::Value << fromref;
180
        
123
        
181
        out << YAML::EndMap;
124
        inline void load(const YAML::Node& node, bool& x)
182
        out << YAML::Newline;
125
        {
126
#ifdef OLDYAML
127
            node.Read<bool>(x);
128
#else
129
            x = node.as<bool>();
130
#endif
131
        }
183
        
132
        
184
        return out;
133
        inline void load(const YAML::Node& node, int& x)
185
    }
134
        {
186
    
135
#ifdef OLDYAML
187
    
136
            node.Read<int>(x);
188
    ///////////////////////////////////////////////////////////////////////////
137
#else
189
    
138
            x = node.as<int>();
190
    // Look. (not the transform, the top-level class)
139
#endif
191
    
140
        }
192
    void operator >> (const YAML::Node& node, LookRcPtr& look)
193
    {
194
        if(node.Tag() != "Look")
195
            return;
196
        
141
        
197
        std::string key, stringval;
142
        inline void load(const YAML::Node& node, float& x)
143
        {
144
#ifdef OLDYAML
145
            node.Read<float>(x);
146
#else
147
            x = node.as<float>();
148
#endif
149
        }
198
        
150
        
199
        for (YAML::Iterator iter = node.begin();
151
        inline void load(const YAML::Node& node, std::string& x)
200
             iter != node.end();
201
             ++iter)
202
        {
152
        {
203
            iter.first() >> key;
153
#ifdef OLDYAML
204
            
154
            node.Read<std::string>(x);
205
            if(key == "name")
155
#else
206
            {
156
            x = node.as<std::string>();
207
                if (iter.second().Type() != YAML::NodeType::Null && 
157
#endif
208
                    iter.second().Read<std::string>(stringval))
209
                    look->setName(stringval.c_str());
210
            }
211
            else if(key == "process_space")
212
            {
213
                if (iter.second().Type() != YAML::NodeType::Null && 
214
                    iter.second().Read<std::string>(stringval))
215
                    look->setProcessSpace(stringval.c_str());
216
            }
217
            else if(key == "transform")
218
            {
219
                TransformRcPtr val;
220
                if (iter.second().Type() != YAML::NodeType::Null && 
221
                    iter.second().Read<TransformRcPtr>(val))
222
                    look->setTransform(val);
223
            }
224
            else if(key == "inverse_transform")
225
            {
226
                TransformRcPtr val;
227
                if (iter.second().Type() != YAML::NodeType::Null && 
228
                    iter.second().Read<TransformRcPtr>(val))
229
                    look->setInverseTransform(val);
230
            }
231
            else
232
            {
233
                LogUnknownKeyWarning(node.Tag(), iter.first());
234
            }
235
        }
158
        }
236
    }
237
    
238
    YAML::Emitter& operator << (YAML::Emitter& out, LookRcPtr look)
239
    {
240
        out << YAML::VerbatimTag("Look");
241
        out << YAML::BeginMap;
242
        out << YAML::Key << "name" << YAML::Value << look->getName();
243
        out << YAML::Key << "process_space" << YAML::Value << look->getProcessSpace();
244
        
159
        
245
        if(look->getTransform())
160
        inline void load(const YAML::Node& node, std::vector<std::string>& x)
246
        {
161
        {
247
            out << YAML::Key << "transform";
162
#ifdef OLDYAML
248
            out << YAML::Value << look->getTransform();
163
            node >> x;
164
#else
165
            x = node.as<std::vector<std::string> >();
166
#endif
249
        }
167
        }
250
        
168
        
251
        if(look->getInverseTransform())
169
        inline void load(const YAML::Node& node, std::vector<float>& x)
252
        {
170
        {
253
            out << YAML::Key << "inverse_transform";
171
#ifdef OLDYAML
254
            out << YAML::Value << look->getInverseTransform();
172
            node >> x;
173
#else
174
            x = node.as<std::vector<float> >();
175
#endif
255
        }
176
        }
256
        
177
        
257
        out << YAML::EndMap;
178
        // Enums
258
        out << YAML::Newline;
259
        
179
        
260
        return out;
180
        inline void load(const YAML::Node& node, BitDepth& depth)
261
    }
262
    
263
    
264
    
265
    ///////////////////////////////////////////////////////////////////////////
266
    
267
    
268
    namespace
269
    {
270
        void EmitBaseTransformKeyValues(YAML::Emitter & out,
271
                                        const ConstTransformRcPtr & t)
272
        {
181
        {
273
            if(t->getDirection() != TRANSFORM_DIR_FORWARD)
182
            std::string str;
274
            {
183
            load(node, str);
275
                out << YAML::Key << "direction";
184
            depth = BitDepthFromString(str.c_str());
276
                out << YAML::Value << YAML::Flow << t->getDirection();
277
            }
278
        }
185
        }
279
    }
186
        
280
    
187
        inline void save(YAML::Emitter& out, BitDepth depth)
281
    void operator >> (const YAML::Node& node, TransformRcPtr& t)
282
    {
283
        if(node.Type() != YAML::NodeType::Map)
284
        {
188
        {
285
            std::ostringstream os;
189
            out << BitDepthToString(depth);
286
            os << "Unsupported Transform type encountered: (" << node.Type() << ") in OCIO profile. ";
287
            os << "Only Mapping types supported. (line ";
288
            os << (node.GetMark().line+1) << ", column "; // (yaml line numbers start at 0)
289
            os << node.GetMark().column << ")";
290
            throw Exception(os.str().c_str());
291
        }
190
        }
292
        
191
        
293
        std::string type = node.Tag();
192
        inline void load(const YAML::Node& node, Allocation& alloc)
294
        
193
        {
295
        if(type == "AllocationTransform") {
194
            std::string str;
296
            AllocationTransformRcPtr temp;
195
            load(node, str);
297
            node.Read<AllocationTransformRcPtr>(temp);
196
            alloc = AllocationFromString(str.c_str());
298
            t = temp;
299
        }
300
        else if(type == "CDLTransform") {
301
            CDLTransformRcPtr temp;
302
            node.Read<CDLTransformRcPtr>(temp);
303
            t = temp;
304
        }
305
        else if(type == "ColorSpaceTransform")  {
306
            ColorSpaceTransformRcPtr temp;
307
            node.Read<ColorSpaceTransformRcPtr>(temp);
308
            t = temp;
309
        }
310
        // TODO: DisplayTransform
311
        else if(type == "ExponentTransform")  {
312
            ExponentTransformRcPtr temp;
313
            node.Read<ExponentTransformRcPtr>(temp);
314
            t = temp;
315
        }
316
        else if(type == "FileTransform")  {
317
            FileTransformRcPtr temp;
318
            node.Read<FileTransformRcPtr>(temp);
319
            t = temp;
320
        }
321
        else if(type == "GroupTransform") {
322
            GroupTransformRcPtr temp;
323
            node.Read<GroupTransformRcPtr>(temp);
324
            t = temp;
325
        }
326
        else if(type == "LogTransform") {
327
            LogTransformRcPtr temp;
328
            node.Read<LogTransformRcPtr>(temp);
329
            t = temp;
330
        }
331
        else if(type == "LookTransform") {
332
            LookTransformRcPtr temp;
333
            node.Read<LookTransformRcPtr>(temp);
334
            t = temp;
335
        }
336
        else if(type == "MatrixTransform")  {
337
            MatrixTransformRcPtr temp;
338
            node.Read<MatrixTransformRcPtr>(temp);
339
            t = temp;
340
        }
341
        else if(type == "TruelightTransform")  {
342
            TruelightTransformRcPtr temp;
343
            node.Read<TruelightTransformRcPtr>(temp);
344
            t = temp;
345
        }
346
        else
347
        {
348
            // TODO: add a new empty (better name?) aka passthru Transform()
349
            // which does nothing. This is so upsupported !<tag> types don't
350
            // throw an exception. Alternativly this could be caught in the
351
            // GroupTransformRcPtr >> operator with some type of
352
            // supported_tag() method
353
            
354
            // TODO: consider the forwards-compatibility implication of
355
            // throwing an exception.  Should this be a warning, instead?
356
            
357
            //  t = EmptyTransformRcPtr(new EmptyTransform(), &deleter);
358
            std::ostringstream os;
359
            os << "Unsupported transform type !<" << type << "> in OCIO profile. ";
360
            os << " (line ";
361
            os << (node.GetMark().line+1) << ", column "; // (yaml line numbers start at 0)
362
            os << node.GetMark().column << ")";
363
            throw Exception(os.str().c_str());
364
        }
197
        }
365
    }
366
    
367
    YAML::Emitter& operator << (YAML::Emitter& out, ConstTransformRcPtr t)
368
    {
369
        if(ConstAllocationTransformRcPtr Allocation_tran = \
370
            DynamicPtrCast<const AllocationTransform>(t))
371
            out << Allocation_tran;
372
        else if(ConstCDLTransformRcPtr CDL_tran = \
373
            DynamicPtrCast<const CDLTransform>(t))
374
            out << CDL_tran;
375
        else if(ConstColorSpaceTransformRcPtr ColorSpace_tran = \
376
            DynamicPtrCast<const ColorSpaceTransform>(t))
377
            out << ColorSpace_tran;
378
        else if(ConstExponentTransformRcPtr Exponent_tran = \
379
            DynamicPtrCast<const ExponentTransform>(t))
380
            out << Exponent_tran;
381
        else if(ConstFileTransformRcPtr File_tran = \
382
            DynamicPtrCast<const FileTransform>(t))
383
            out << File_tran;
384
        else if(ConstGroupTransformRcPtr Group_tran = \
385
            DynamicPtrCast<const GroupTransform>(t))
386
            out << Group_tran;
387
        else if(ConstLogTransformRcPtr Log_tran = \
388
            DynamicPtrCast<const LogTransform>(t))
389
            out << Log_tran;
390
        else if(ConstLookTransformRcPtr Look_tran = \
391
            DynamicPtrCast<const LookTransform>(t))
392
            out << Look_tran;
393
        else if(ConstMatrixTransformRcPtr Matrix_tran = \
394
            DynamicPtrCast<const MatrixTransform>(t))
395
            out << Matrix_tran;
396
        else if(ConstTruelightTransformRcPtr Truelight_tran = \
397
            DynamicPtrCast<const TruelightTransform>(t))
398
            out << Truelight_tran;
399
        else
400
            throw Exception("Unsupported Transform() type for serialization.");
401
        
198
        
402
        return out;
199
        inline void save(YAML::Emitter& out, Allocation alloc)
403
    }
200
        {
404
    
201
            out << AllocationToString(alloc);
405
    
202
        }
406
    ///////////////////////////////////////////////////////////////////////////
407
    //  Transforms
408
    
409
    void operator >> (const YAML::Node& node, GroupTransformRcPtr& t)
410
    {
411
        t = GroupTransform::Create();
412
        
203
        
413
        std::string key;
204
        inline void load(const YAML::Node& node, ColorSpaceDirection& dir)
205
        {
206
            std::string str;
207
            load(node, str);
208
            dir = ColorSpaceDirectionFromString(str.c_str());
209
        }
414
        
210
        
415
        for (YAML::Iterator iter = node.begin();
211
        inline void save(YAML::Emitter& out, ColorSpaceDirection dir)
416
             iter != node.end();
417
             ++iter)
418
        {
212
        {
419
            iter.first() >> key;
213
            out << ColorSpaceDirectionToString(dir);
420
            
421
            if(key == "children")
422
            {
423
                const YAML::Node & children = iter.second();
424
                for(unsigned i = 0; i <children.size(); ++i)
425
                {
426
                    TransformRcPtr childTransform;
427
                    children[i].Read<TransformRcPtr>(childTransform);
428
                    
429
                    // TODO: consider the forwards-compatibility implication of
430
                    // throwing an exception.  Should this be a warning, instead?
431
                    if(!childTransform)
432
                    {
433
                        throw Exception("Child transform could not be parsed.");
434
                    }
435
                    
436
                    t->push_back(childTransform);
437
                }
438
            }
439
            else if(key == "direction")
440
            {
441
                TransformDirection val;
442
                if (iter.second().Type() != YAML::NodeType::Null && 
443
                    iter.second().Read<TransformDirection>(val))
444
                  t->setDirection(val);
445
            }
446
            else
447
            {
448
                LogUnknownKeyWarning(node.Tag(), iter.first());
449
            }
450
        }
214
        }
451
    }
452
    
453
    YAML::Emitter& operator << (YAML::Emitter& out, ConstGroupTransformRcPtr t)
454
    {
455
        out << YAML::VerbatimTag("GroupTransform");
456
        out << YAML::BeginMap;
457
        EmitBaseTransformKeyValues(out, t);
458
        
215
        
459
        out << YAML::Key << "children";
216
        inline void load(const YAML::Node& node, TransformDirection& dir)
460
        out << YAML::Value;
217
        {
218
            std::string str;
219
            load(node, str);
220
            dir = TransformDirectionFromString(str.c_str());
221
        }
461
        
222
        
462
        out << YAML::BeginSeq;
223
        inline void save(YAML::Emitter& out, TransformDirection dir)
463
        for(int i = 0; i < t->size(); ++i)
464
        {
224
        {
465
            out << t->getTransform(i);
225
            out << TransformDirectionToString(dir);
466
        }
226
        }
467
        out << YAML::EndSeq;
468
        
227
        
469
        out << YAML::EndMap;
228
        inline void load(const YAML::Node& node, Interpolation& interp)
229
        {
230
            std::string str;
231
            load(node, str);
232
            interp = InterpolationFromString(str.c_str());
233
        }
470
        
234
        
471
        return out;
235
        inline void save(YAML::Emitter& out, Interpolation interp)
472
    }
236
        {
473
    
237
            out << InterpolationToString(interp);
474
    
238
        }
475
    
476
    void operator >> (const YAML::Node& node, FileTransformRcPtr& t)
477
    {
478
        t = FileTransform::Create();
479
        
239
        
480
        std::string key, stringval;
240
        //
481
        
241
        
482
        for (YAML::Iterator iter = node.begin();
242
        inline void LogUnknownKeyWarning(const std::string & name,
483
             iter != node.end();
243
                                         const YAML::Node& tag)
484
             ++iter)
485
        {
244
        {
486
            iter.first() >> key;
245
            std::string key;
487
            
246
            load(tag, key);
488
            if(key == "src")
247
        
489
            {
248
            std::ostringstream os;
490
                if (iter.second().Type() != YAML::NodeType::Null && 
249
            os << "Unknown key in " << name << ": '" << key << "'.";
491
                    iter.second().Read<std::string>(stringval))
250
            LogWarning(os.str());
492
                  t->setSrc(stringval.c_str());
493
            }
494
            else if(key == "cccid")
495
            {
496
                if (iter.second().Type() != YAML::NodeType::Null && 
497
                    iter.second().Read<std::string>(stringval))
498
                  t->setCCCId(stringval.c_str());
499
            }
500
            else if(key == "interpolation")
501
            {
502
                Interpolation val;
503
                if (iter.second().Type() != YAML::NodeType::Null && 
504
                    iter.second().Read<Interpolation>(val))
505
                  t->setInterpolation(val);
506
            }
507
            else if(key == "direction")
508
            {
509
                TransformDirection val;
510
                if (iter.second().Type() != YAML::NodeType::Null && 
511
                    iter.second().Read<TransformDirection>(val))
512
                  t->setDirection(val);
513
            }
514
            else
515
            {
516
                LogUnknownKeyWarning(node.Tag(), iter.first());
517
            }
518
        }
251
        }
519
    }
520
    
521
    YAML::Emitter& operator << (YAML::Emitter& out, ConstFileTransformRcPtr t)
522
    {
523
        out << YAML::VerbatimTag("FileTransform");
524
        out << YAML::Flow << YAML::BeginMap;
525
        out << YAML::Key << "src" << YAML::Value << t->getSrc();
526
        const char * cccid = t->getCCCId();
527
        if(cccid && *cccid)
528
        {
529
            out << YAML::Key << "cccid" << YAML::Value << t->getCCCId();
530
        }
531
        out << YAML::Key << "interpolation";
532
        out << YAML::Value << t->getInterpolation();
533
        
534
        EmitBaseTransformKeyValues(out, t);
535
        out << YAML::EndMap;
536
        return out;
537
    }
538
    
539
    void operator >> (const YAML::Node& node, ColorSpaceTransformRcPtr& t)
540
    {
541
        t = ColorSpaceTransform::Create();
542
        
252
        
543
        std::string key, stringval;
253
        // View
544
        
254
        
545
        for (YAML::Iterator iter = node.begin();
255
        inline void load(const YAML::Node& node, View& v)
546
             iter != node.end();
547
             ++iter)
548
        {
256
        {
549
            iter.first() >> key;
257
            if(node.Tag() != "View")
258
                return;
550
            
259
            
551
            if(key == "src")
260
            std::string key, stringval;
552
            {
261
            
553
                if (iter.second().Type() != YAML::NodeType::Null && 
262
            for (Iterator iter = node.begin();
554
                    iter.second().Read<std::string>(stringval))
263
                 iter != node.end();
555
                  t->setSrc(stringval.c_str());
264
                 ++iter)
556
            }
265
            {
557
            else if(key == "dst")
266
                const YAML::Node& first = get_first(iter);
558
            {
267
                const YAML::Node& second = get_second(iter);
559
                if (iter.second().Type() != YAML::NodeType::Null && 
268
                
560
                    iter.second().Read<std::string>(stringval))
269
                load(first, key);
561
                  t->setDst(stringval.c_str());
270
                
271
                if (second.Type() == YAML::NodeType::Null) continue;
272
                
273
                if(key == "name")
274
                {
275
                    load(second, stringval);
276
                    v.name = stringval;
277
                }
278
                else if(key == "colorspace")
279
                {
280
                    load(second, stringval);
281
                    v.colorspace = stringval;
282
                }
283
                else if(key == "looks" || key == "look")
284
                {
285
                    load(second, stringval);
286
                    v.looks = stringval;
287
                }
288
                else
289
                {
290
                    LogUnknownKeyWarning(node.Tag(), first);
291
                }
562
            }
292
            }
563
            else if(key == "direction")
293
            
294
            if(v.name.empty())
564
            {
295
            {
565
                TransformDirection val;
296
                throw Exception("View does not specify 'name'.");
566
                if (iter.second().Type() != YAML::NodeType::Null && 
567
                    iter.second().Read<TransformDirection>(val))
568
                  t->setDirection(val);
569
            }
297
            }
570
            else
298
            if(v.colorspace.empty())
571
            {
299
            {
572
                LogUnknownKeyWarning(node.Tag(), iter.first());
300
                std::ostringstream os;
301
                os << "View '" << v.name << "' ";
302
                os << "does not specify colorspace.";
303
                throw Exception(os.str().c_str());
573
            }
304
            }
574
        }
305
        }
575
    }
576
    
577
    YAML::Emitter& operator << (YAML::Emitter& out, ConstColorSpaceTransformRcPtr t)
578
    {
579
        out << YAML::VerbatimTag("ColorSpaceTransform");
580
        out << YAML::Flow << YAML::BeginMap;
581
        out << YAML::Key << "src" << YAML::Value << t->getSrc();
582
        out << YAML::Key << "dst" << YAML::Value << t->getDst();
583
        EmitBaseTransformKeyValues(out, t);
584
        out << YAML::EndMap;
585
        return out;
586
    }
587
    
588
    void operator >> (const YAML::Node& node, LookTransformRcPtr& t)
589
    {
590
        t = LookTransform::Create();
591
        
306
        
592
        std::string key, stringval;
307
        inline void save(YAML::Emitter& out, View view)
308
        {
309
            out << YAML::VerbatimTag("View");
310
            out << YAML::Flow;
311
            out << YAML::BeginMap;
312
            out << YAML::Key << "name" << YAML::Value << view.name;
313
            out << YAML::Key << "colorspace" << YAML::Value << view.colorspace;
314
            if(!view.looks.empty()) out << YAML::Key << "looks" << YAML::Value << view.looks;
315
            out << YAML::EndMap;
316
        }
317
        
318
        // Common Transform
593
        
319
        
594
        for (YAML::Iterator iter = node.begin();
320
        inline void EmitBaseTransformKeyValues(YAML::Emitter & out,
595
             iter != node.end();
321
                                               const ConstTransformRcPtr & t)
596
             ++iter)
597
        {
322
        {
598
            iter.first() >> key;
323
            if(t->getDirection() != TRANSFORM_DIR_FORWARD)
599
            
600
            if(key == "src")
601
            {
602
                if (iter.second().Type() != YAML::NodeType::Null && 
603
                    iter.second().Read<std::string>(stringval))
604
                  t->setSrc(stringval.c_str());
605
            }
606
            else if(key == "dst")
607
            {
608
                if (iter.second().Type() != YAML::NodeType::Null && 
609
                    iter.second().Read<std::string>(stringval))
610
                  t->setDst(stringval.c_str());
611
            }
612
            else if(key == "looks")
613
            {
614
                if (iter.second().Type() != YAML::NodeType::Null && 
615
                    iter.second().Read<std::string>(stringval))
616
                  t->setLooks(stringval.c_str());
617
            }
618
            else if(key == "direction")
619
            {
620
                TransformDirection val;
621
                if (iter.second().Type() != YAML::NodeType::Null && 
622
                    iter.second().Read<TransformDirection>(val))
623
                  t->setDirection(val);
624
            }
625
            else
626
            {
324
            {
627
                LogUnknownKeyWarning(node.Tag(), iter.first());
325
                out << YAML::Key << "direction";
326
                out << YAML::Value << YAML::Flow;
327
                save(out, t->getDirection());
628
            }
328
            }
629
        }
329
        }
630
    }
631
    
632
    YAML::Emitter& operator << (YAML::Emitter& out, ConstLookTransformRcPtr t)
633
    {
634
        out << YAML::VerbatimTag("LookTransform");
635
        out << YAML::Flow << YAML::BeginMap;
636
        out << YAML::Key << "src" << YAML::Value << t->getSrc();
637
        out << YAML::Key << "dst" << YAML::Value << t->getDst();
638
        out << YAML::Key << "looks" << YAML::Value << t->getLooks();
639
        EmitBaseTransformKeyValues(out, t);
640
        out << YAML::EndMap;
641
        return out;
642
    }
643
    
644
    void operator >> (const YAML::Node& node, ExponentTransformRcPtr& t)
645
    {
646
        t = ExponentTransform::Create();
647
        
330
        
648
        std::string key;
331
        // AllocationTransform
649
        
332
        
650
        for (YAML::Iterator iter = node.begin();
333
        inline void load(const YAML::Node& node, AllocationTransformRcPtr& t)
651
             iter != node.end();
652
             ++iter)
653
        {
334
        {
654
            iter.first() >> key;
335
            t = AllocationTransform::Create();
655
            
336
            
656
            if(key == "value")
337
            std::string key;
657
            {
338
            
658
                std::vector<float> val;
339
            for (Iterator iter = node.begin();
659
                if (iter.second().Type() != YAML::NodeType::Null)
340
                 iter != node.end();
341
                 ++iter)
342
            {
343
                const YAML::Node& first = get_first(iter);
344
                const YAML::Node& second = get_second(iter);
345
                
346
                load(first, key);
347
                
348
                if (second.Type() == YAML::NodeType::Null) continue;
349
                
350
                if(key == "allocation")
660
                {
351
                {
661
                    iter.second() >> val;
352
                    Allocation val;
662
                    if(val.size() != 4)
353
                    load(second, val);
354
                    t->setAllocation(val);
355
                }
356
                else if(key == "vars")
357
                {
358
                    std::vector<float> val;
359
                    load(second, val);
360
                    if(!val.empty())
663
                    {
361
                    {
664
                        std::ostringstream os;
362
                        t->setVars(static_cast<int>(val.size()), &val[0]);
665
                        os << "ExponentTransform parse error, value field must be 4 ";
666
                        os << "floats. Found '" << val.size() << "'.";
667
                        throw Exception(os.str().c_str());
668
                    }
363
                    }
669
                    t->setValue(&val[0]);
670
                }
364
                }
671
            }
365
                else if(key == "direction")
672
            else if(key == "direction")
366
                {
673
            {
367
                    TransformDirection val;
674
                TransformDirection val;
368
                    load(second, val);
675
                if (iter.second().Type() != YAML::NodeType::Null && 
369
                    t->setDirection(val);
676
                    iter.second().Read<TransformDirection>(val))
370
                }
677
                  t->setDirection(val);
371
                else
678
            }
372
                {
679
            else
373
                    LogUnknownKeyWarning(node.Tag(), first);
680
            {
374
                }
681
                LogUnknownKeyWarning(node.Tag(), iter.first());
682
            }
375
            }
683
        }
376
        }
684
    }
685
    
686
    YAML::Emitter& operator << (YAML::Emitter& out, ConstExponentTransformRcPtr t)
687
    {
688
        out << YAML::VerbatimTag("ExponentTransform");
689
        out << YAML::Flow << YAML::BeginMap;
690
        
691
        std::vector<float> value(4, 0.0);
692
        t->getValue(&value[0]);
693
        out << YAML::Key << "value";
694
        out << YAML::Value << YAML::Flow << value;
695
        EmitBaseTransformKeyValues(out, t);
696
        out << YAML::EndMap;
697
        return out;
698
    }
699
    
700
    void operator >> (const YAML::Node& node, LogTransformRcPtr& t)
701
    {
702
        t = LogTransform::Create();
703
        
377
        
704
        std::string key;
378
        inline void save(YAML::Emitter& out, ConstAllocationTransformRcPtr t)
705
        
706
        for (YAML::Iterator iter = node.begin();
707
             iter != node.end();
708
             ++iter)
709
        {
379
        {
710
            iter.first() >> key;
380
            out << YAML::VerbatimTag("AllocationTransform");
381
            out << YAML::Flow << YAML::BeginMap;
711
            
382
            
712
            if(key == "base")
383
            out << YAML::Key << "allocation";
713
            {
384
            out << YAML::Value << YAML::Flow;
714
                float val = 0.0f;
385
            save(out, t->getAllocation());
715
                if (iter.second().Type() != YAML::NodeType::Null && 
386
            
716
                    iter.second().Read<float>(val))
387
            if(t->getNumVars() > 0)
717
                  t->setBase(val);
718
            }
719
            else if(key == "direction")
720
            {
721
                TransformDirection val;
722
                if (iter.second().Type() != YAML::NodeType::Null && 
723
                    iter.second().Read<TransformDirection>(val))
724
                  t->setDirection(val);
725
            }
726
            else
727
            {
388
            {
728
                LogUnknownKeyWarning(node.Tag(), iter.first());
389
                std::vector<float> vars(t->getNumVars());
390
                t->getVars(&vars[0]);
391
                out << YAML::Key << "vars";
392
                out << YAML::Flow << YAML::Value << vars;
729
            }
393
            }
394
            
395
            EmitBaseTransformKeyValues(out, t);
396
            out << YAML::EndMap;
730
        }
397
        }
731
    }
732
    
733
    YAML::Emitter& operator << (YAML::Emitter& out, ConstLogTransformRcPtr t)
734
    {
735
        out << YAML::VerbatimTag("LogTransform");
736
        out << YAML::Flow << YAML::BeginMap;
737
        out << YAML::Key << "base" << YAML::Value << t->getBase();
738
        EmitBaseTransformKeyValues(out, t);
739
        out << YAML::EndMap;
740
        return out;
741
    }
742
    
743
    void operator >> (const YAML::Node& node, MatrixTransformRcPtr& t)
744
    {
745
        t = MatrixTransform::Create();
746
        
398
        
747
        std::string key;
399
        // CDLTransform
748
        
400
        
749
        for (YAML::Iterator iter = node.begin();
401
        inline void load(const YAML::Node& node, CDLTransformRcPtr& t)
750
             iter != node.end();
751
             ++iter)
752
        {
402
        {
753
            iter.first() >> key;
403
            t = CDLTransform::Create();
754
            
404
            
755
            if(key == "matrix")
405
            std::string key;
756
            {
406
            std::vector<float> floatvecval;
757
                std::vector<float> val;
407
            
758
                if (iter.second().Type() != YAML::NodeType::Null)
408
            for (Iterator iter = node.begin();
409
                 iter != node.end();
410
                 ++iter)
411
            {
412
                const YAML::Node& first = get_first(iter);
413
                const YAML::Node& second = get_second(iter);
414
                
415
                load(first, key);
416
                
417
                if (second.Type() == YAML::NodeType::Null) continue;
418
                
419
                if(key == "slope")
759
                {
420
                {
760
                    iter.second() >> val;
421
                    load(second, floatvecval);
761
                    if(val.size() != 16)
422
                    if(floatvecval.size() != 3)
762
                    {
423
                    {
763
                        std::ostringstream os;
424
                        std::ostringstream os;
764
                        os << "MatrixTransform parse error, matrix field must be 16 ";
425
                        os << "CDLTransform parse error, 'slope' field must be 3 ";
765
                        os << "floats. Found '" << val.size() << "'.";
426
                        os << "floats. Found '" << floatvecval.size() << "'.";
766
                        throw Exception(os.str().c_str());
427
                        throw Exception(os.str().c_str());
767
                    }
428
                    }
768
                    t->setMatrix(&val[0]);
429
                    t->setSlope(&floatvecval[0]);
769
                }
430
                }
770
            }
431
                else if(key == "offset")
771
            else if(key == "offset")
772
            {
773
                std::vector<float> val;
774
                if (iter.second().Type() != YAML::NodeType::Null)
775
                {
432
                {
776
                    iter.second() >> val;
433
                    load(second, floatvecval);
777
                    if(val.size() != 4)
434
                    if(floatvecval.size() != 3)
778
                    {
435
                    {
779
                        std::ostringstream os;
436
                        std::ostringstream os;
780
                        os << "MatrixTransform parse error, offset field must be 4 ";
437
                        os << "CDLTransform parse error, 'offset' field must be 3 ";
781
                        os << "floats. Found '" << val.size() << "'.";
438
                        os << "floats. Found '" << floatvecval.size() << "'.";
782
                        throw Exception(os.str().c_str());
439
                        throw Exception(os.str().c_str());
783
                    }
440
                    }
784
                    t->setOffset(&val[0]);
441
                    t->setOffset(&floatvecval[0]);
442
                }
443
                else if(key == "power")
444
                {
445
                    load(second, floatvecval);
446
                    if(floatvecval.size() != 3)
447
                    {
448
                        std::ostringstream os;
449
                        os << "CDLTransform parse error, 'power' field must be 3 ";
450
                        os << "floats. Found '" << floatvecval.size() << "'.";
451
                        throw Exception(os.str().c_str());
452
                    }
453
                    t->setPower(&floatvecval[0]);
454
                }
455
                else if(key == "saturation" || key == "sat")
456
                {
457
                    float val = 0.0f;
458
                    load(second, val);
459
                    t->setSat(val);
460
                }
461
                else if(key == "direction")
462
                {
463
                    TransformDirection val;
464
                    load(second, val);
465
                    t->setDirection(val);
466
                }
467
                else
468
                {
469
                    LogUnknownKeyWarning(node.Tag(), first);
785
                }
470
                }
786
            }
471
            }
787
            else if(key == "direction")
472
        }
473
        
474
        inline void save(YAML::Emitter& out, ConstCDLTransformRcPtr t)
475
        {
476
            out << YAML::VerbatimTag("CDLTransform");
477
            out << YAML::Flow << YAML::BeginMap;
478
            
479
            std::vector<float> slope(3);
480
            t->getSlope(&slope[0]);
481
            if(!IsVecEqualToOne(&slope[0], 3))
788
            {
482
            {
789
                TransformDirection val;
483
                out << YAML::Key << "slope";
790
                if (iter.second().Type() != YAML::NodeType::Null && 
484
                out << YAML::Value << YAML::Flow << slope;
791
                    iter.second().Read<TransformDirection>(val))
792
                  t->setDirection(val);
793
            }
485
            }
794
            else
486
            
487
            std::vector<float> offset(3);
488
            t->getOffset(&offset[0]);
489
            if(!IsVecEqualToZero(&offset[0], 3))
490
            {
491
                out << YAML::Key << "offset";
492
                out << YAML::Value << YAML::Flow << offset;
493
            }
494
            
495
            std::vector<float> power(3);
496
            t->getPower(&power[0]);
497
            if(!IsVecEqualToOne(&power[0], 3))
795
            {
498
            {
796
                LogUnknownKeyWarning(node.Tag(), iter.first());
499
                out << YAML::Key << "power";
500
                out << YAML::Value << YAML::Flow << power;
797
            }
501
            }
502
            
503
            if(!IsScalarEqualToOne(t->getSat()))
504
            {
505
                out << YAML::Key << "sat" << YAML::Value << t->getSat();
506
            }
507
            
508
            EmitBaseTransformKeyValues(out, t);
509
            out << YAML::EndMap;
798
        }
510
        }
799
    }
800
    
801
    YAML::Emitter& operator << (YAML::Emitter& out, ConstMatrixTransformRcPtr t)
802
    {
803
        out << YAML::VerbatimTag("MatrixTransform");
804
        out << YAML::Flow << YAML::BeginMap;
805
        
511
        
806
        std::vector<float> matrix(16, 0.0);
512
        // ColorSpaceTransform
807
        t->getMatrix(&matrix[0]);
513
        
808
        if(!IsM44Identity(&matrix[0]))
514
        inline void load(const YAML::Node& node, ColorSpaceTransformRcPtr& t)
809
        {
515
        {
810
            out << YAML::Key << "matrix";
516
            t = ColorSpaceTransform::Create();
811
            out << YAML::Value << YAML::Flow << matrix;
517
            
518
            std::string key, stringval;
519
            
520
            for (Iterator iter = node.begin();
521
                 iter != node.end();
522
                 ++iter)
523
            {
524
                const YAML::Node& first = get_first(iter);
525
                const YAML::Node& second = get_second(iter);
526
                
527
                load(first, key);
528
                
529
                if (second.Type() == YAML::NodeType::Null) continue;
530
                
531
                if(key == "src")
532
                {
533
                    load(second, stringval);
534
                    t->setSrc(stringval.c_str());
535
                }
536
                else if(key == "dst")
537
                {
538
                    load(second, stringval);
539
                    t->setDst(stringval.c_str());
540
                }
541
                else if(key == "direction")
542
                {
543
                    TransformDirection val;
544
                    load(second, val);
545
                    t->setDirection(val);
546
                }
547
                else
548
                {
549
                    LogUnknownKeyWarning(node.Tag(), first);
550
                }
551
            }
812
        }
552
        }
813
        
553
        
814
        std::vector<float> offset(4, 0.0);
554
        inline void save(YAML::Emitter& out, ConstColorSpaceTransformRcPtr t)
815
        t->getOffset(&offset[0]);
816
        if(!IsVecEqualToZero(&offset[0],4))
817
        {
555
        {
818
            out << YAML::Key << "offset";
556
            out << YAML::VerbatimTag("ColorSpaceTransform");
819
            out << YAML::Value << YAML::Flow << offset;
557
            out << YAML::Flow << YAML::BeginMap;
558
            out << YAML::Key << "src" << YAML::Value << t->getSrc();
559
            out << YAML::Key << "dst" << YAML::Value << t->getDst();
560
            EmitBaseTransformKeyValues(out, t);
561
            out << YAML::EndMap;
820
        }
562
        }
821
        
563
        
822
        EmitBaseTransformKeyValues(out, t);
564
        // ExponentTransform
823
        out << YAML::EndMap;
824
        return out;
825
    }
826
    
827
    void operator >> (const YAML::Node& node, CDLTransformRcPtr& t)
828
    {
829
        t = CDLTransform::Create();
830
        
565
        
831
        std::string key;
566
        inline void load(const YAML::Node& node, ExponentTransformRcPtr& t)
832
        std::vector<float> floatvecval;
833
        
834
        for (YAML::Iterator iter = node.begin();
835
             iter != node.end();
836
             ++iter)
837
        {
567
        {
838
            iter.first() >> key;
568
            t = ExponentTransform::Create();
839
            
569
            
840
            if(key == "slope")
570
            std::string key;
841
            {
571
            
842
                if (iter.second().Type() != YAML::NodeType::Null)
572
            for (Iterator iter = node.begin();
573
                 iter != node.end();
574
                 ++iter)
575
            {
576
                const YAML::Node& first = get_first(iter);
577
                const YAML::Node& second = get_second(iter);
578
                
579
                load(first, key);
580
                
581
                if (second.Type() == YAML::NodeType::Null) continue;
582
                
583
                if(key == "value")
843
                {
584
                {
844
                    iter.second() >> floatvecval;
585
                    std::vector<float> val;
845
                    if(floatvecval.size() != 3)
586
                    load(second, val);
587
                    if(val.size() != 4)
846
                    {
588
                    {
847
                        std::ostringstream os;
589
                        std::ostringstream os;
848
                        os << "CDLTransform parse error, 'slope' field must be 3 ";
590
                        os << "ExponentTransform parse error, value field must be 4 ";
849
                        os << "floats. Found '" << floatvecval.size() << "'.";
591
                        os << "floats. Found '" << val.size() << "'.";
850
                        throw Exception(os.str().c_str());
592
                        throw Exception(os.str().c_str());
851
                    }
593
                    }
852
                    t->setSlope(&floatvecval[0]);
594
                    t->setValue(&val[0]);
595
                }
596
                else if(key == "direction")
597
                {
598
                    TransformDirection val;
599
                    load(second, val);
600
                    t->setDirection(val);
601
                }
602
                else
603
                {
604
                    LogUnknownKeyWarning(node.Tag(), first);
853
                }
605
                }
854
            }
606
            }
855
            else if(key == "offset")
607
        }
856
            {
608
        
857
                if (iter.second().Type() != YAML::NodeType::Null)
609
        inline void save(YAML::Emitter& out, ConstExponentTransformRcPtr t)
610
        {
611
            out << YAML::VerbatimTag("ExponentTransform");
612
            out << YAML::Flow << YAML::BeginMap;
613
            
614
            std::vector<float> value(4, 0.0);
615
            t->getValue(&value[0]);
616
            out << YAML::Key << "value";
617
            out << YAML::Value << YAML::Flow << value;
618
            EmitBaseTransformKeyValues(out, t);
619
            out << YAML::EndMap;
620
        }
621
        
622
        // FileTransform
623
        
624
        inline void load(const YAML::Node& node, FileTransformRcPtr& t)
625
        {
626
            t = FileTransform::Create();
627
            
628
            std::string key, stringval;
629
            
630
            for (Iterator iter = node.begin();
631
                 iter != node.end();
632
                 ++iter)
633
            {
634
                const YAML::Node& first = get_first(iter);
635
                const YAML::Node& second = get_second(iter);
636
                
637
                load(first, key);
638
                
639
                if (second.Type() == YAML::NodeType::Null) continue;
640
                
641
                if(key == "src")
858
                {
642
                {
859
                    iter.second() >> floatvecval;
643
                    load(second, stringval);
860
                    if(floatvecval.size() != 3)
644
                    t->setSrc(stringval.c_str());
861
                    {
645
                }
862
                        std::ostringstream os;
646
                else if(key == "cccid")
863
                        os << "CDLTransform parse error, 'offset' field must be 3 ";
647
                {
864
                        os << "floats. Found '" << floatvecval.size() << "'.";
648
                    load(second, stringval);
865
                        throw Exception(os.str().c_str());
649
                    t->setCCCId(stringval.c_str());
866
                    }
650
                }
867
                    t->setOffset(&floatvecval[0]);
651
                else if(key == "interpolation")
652
                {
653
                    Interpolation val;
654
                    load(second, val);
655
                    t->setInterpolation(val);
656
                }
657
                else if(key == "direction")
658
                {
659
                    TransformDirection val;
660
                    load(second, val);
661
                    t->setDirection(val);
662
                }
663
                else
664
                {
665
                    LogUnknownKeyWarning(node.Tag(), first);
868
                }
666
                }
869
            }
667
            }
870
            else if(key == "power")
668
        }
871
            {
669
        
872
                if (iter.second().Type() != YAML::NodeType::Null)
670
        inline void save(YAML::Emitter& out, ConstFileTransformRcPtr t)
671
        {
672
            out << YAML::VerbatimTag("FileTransform");
673
            out << YAML::Flow << YAML::BeginMap;
674
            out << YAML::Key << "src" << YAML::Value << t->getSrc();
675
            const char * cccid = t->getCCCId();
676
            if(cccid && *cccid)
677
            {
678
                out << YAML::Key << "cccid" << YAML::Value << t->getCCCId();
679
            }
680
            out << YAML::Key << "interpolation";
681
            out << YAML::Value;
682
            save(out, t->getInterpolation());
683
            
684
            EmitBaseTransformKeyValues(out, t);
685
            out << YAML::EndMap;
686
        }
687
        
688
        // GroupTransform
689
        
690
        void load(const YAML::Node& node, TransformRcPtr& t);
691
        void save(YAML::Emitter& out, ConstTransformRcPtr t);
692
        
693
        inline void load(const YAML::Node& node, GroupTransformRcPtr& t)
694
        {
695
            t = GroupTransform::Create();
696
            
697
            std::string key;
698
            
699
            for (Iterator iter = node.begin();
700
                 iter != node.end();
701
                 ++iter)
702
            {
703
                const YAML::Node& first = get_first(iter);
704
                const YAML::Node& second = get_second(iter);
705
                
706
                load(first, key);
707
                
708
                if (second.Type() == YAML::NodeType::Null) continue;
709
                
710
                if(key == "children")
873
                {
711
                {
874
                    iter.second() >> floatvecval;
712
                    for(unsigned i = 0; i < second.size(); ++i)
875
                    if(floatvecval.size() != 3)
876
                    {
713
                    {
877
                        std::ostringstream os;
714
                        TransformRcPtr childTransform;
878
                        os << "CDLTransform parse error, 'power' field must be 3 ";
715
                        load(second[i], childTransform);
879
                        os << "floats. Found '" << floatvecval.size() << "'.";
716
                        
880
                        throw Exception(os.str().c_str());
717
                        // TODO: consider the forwards-compatibility implication of
718
                        // throwing an exception.  Should this be a warning, instead?
719
                        if(!childTransform)
720
                        {
721
                            throw Exception("Child transform could not be parsed.");
722
                        }
723
                        
724
                        t->push_back(childTransform);
881
                    }
725
                    }
882
                    t->setPower(&floatvecval[0]);
726
                }
727
                else if(key == "direction")
728
                {
729
                    TransformDirection val;
730
                    load(second, val);
731
                    t->setDirection(val);
732
                }
733
                else
734
                {
735
                    LogUnknownKeyWarning(node.Tag(), first);
883
                }
736
                }
884
            }
737
            }
885
            else if(key == "saturation" || key == "sat")
738
        }
886
            {
739
        
887
                float val = 0.0f;
740
        inline void save(YAML::Emitter& out, ConstGroupTransformRcPtr t)
888
                if (iter.second().Type() != YAML::NodeType::Null && 
741
        {
889
                    iter.second().Read<float>(val))
742
            out << YAML::VerbatimTag("GroupTransform");
890
                  t->setSat(val);
743
            out << YAML::BeginMap;
891
            }
744
            EmitBaseTransformKeyValues(out, t);
892
            else if(key == "direction")
745
            
893
            {
746
            out << YAML::Key << "children";
894
                TransformDirection val;
747
            out << YAML::Value;
895
                if (iter.second().Type() != YAML::NodeType::Null && 
748
            
896
                    iter.second().Read<TransformDirection>(val))
749
            out << YAML::BeginSeq;
897
                  t->setDirection(val);
750
            for(int i = 0; i < t->size(); ++i)
898
            }
899
            else
900
            {
751
            {
901
                LogUnknownKeyWarning(node.Tag(), iter.first());
752
                save(out, t->getTransform(i));
902
            }
753
            }
754
            out << YAML::EndSeq;
755
            
756
            out << YAML::EndMap;
903
        }
757
        }
904
    }
905
    
906
    YAML::Emitter& operator << (YAML::Emitter& out, ConstCDLTransformRcPtr t)
907
    {
908
        out << YAML::VerbatimTag("CDLTransform");
909
        out << YAML::Flow << YAML::BeginMap;
910
        
758
        
911
        std::vector<float> slope(3);
759
        // LogTransform
912
        t->getSlope(&slope[0]);
760
        
913
        if(!IsVecEqualToOne(&slope[0], 3))
761
        inline void load(const YAML::Node& node, LogTransformRcPtr& t)
914
        {
762
        {
915
            out << YAML::Key << "slope";
763
            t = LogTransform::Create();
916
            out << YAML::Value << YAML::Flow << slope;
764
            
765
            std::string key;
766
            
767
            for (Iterator iter = node.begin();
768
                 iter != node.end();
769
                 ++iter)
770
            {
771
                const YAML::Node& first = get_first(iter);
772
                const YAML::Node& second = get_second(iter);
773
                
774
                load(first, key);
775
                
776
                if (second.Type() == YAML::NodeType::Null) continue;
777
                
778
                if(key == "base")
779
                {
780
                    float val = 0.0f;
781
                    load(second, val);
782
                    t->setBase(val);
783
                }
784
                else if(key == "direction")
785
                {
786
                    TransformDirection val;
787
                    load(second, val);
788
                    t->setDirection(val);
789
                }
790
                else
791
                {
792
                    LogUnknownKeyWarning(node.Tag(), first);
793
                }
794
            }
917
        }
795
        }
918
        
796
        
919
        std::vector<float> offset(3);
797
        inline void save(YAML::Emitter& out, ConstLogTransformRcPtr t)
920
        t->getOffset(&offset[0]);
921
        if(!IsVecEqualToZero(&offset[0], 3))
922
        {
798
        {
923
            out << YAML::Key << "offset";
799
            out << YAML::VerbatimTag("LogTransform");
924
            out << YAML::Value << YAML::Flow << offset;
800
            out << YAML::Flow << YAML::BeginMap;
801
            out << YAML::Key << "base" << YAML::Value << t->getBase();
802
            EmitBaseTransformKeyValues(out, t);
803
            out << YAML::EndMap;
925
        }
804
        }
926
        
805
        
927
        std::vector<float> power(3);
806
        // LookTransform
928
        t->getPower(&power[0]);
807
        
929
        if(!IsVecEqualToOne(&power[0], 3))
808
        inline void load(const YAML::Node& node, LookTransformRcPtr& t)
930
        {
809
        {
931
            out << YAML::Key << "power";
810
            t = LookTransform::Create();
932
            out << YAML::Value << YAML::Flow << power;
811
            
812
            std::string key, stringval;
813
            
814
            for (Iterator iter = node.begin();
815
                 iter != node.end();
816
                 ++iter)
817
            {
818
                const YAML::Node& first = get_first(iter);
819
                const YAML::Node& second = get_second(iter);
820
                
821
                load(first, key);
822
                
823
                if (second.Type() == YAML::NodeType::Null) continue;
824
                
825
                if(key == "src")
826
                {
827
                    load(second, stringval);
828
                    t->setSrc(stringval.c_str());
829
                }
830
                else if(key == "dst")
831
                {
832
                    load(second, stringval);
833
                    t->setDst(stringval.c_str());
834
                }
835
                else if(key == "looks")
836
                {
837
                    load(second, stringval);
838
                    t->setLooks(stringval.c_str());
839
                }
840
                else if(key == "direction")
841
                {
842
                    TransformDirection val;
843
                    load(second, val);
844
                    t->setDirection(val);
845
                }
846
                else
847
                {
848
                    LogUnknownKeyWarning(node.Tag(), first);
849
                }
850
            }
933
        }
851
        }
934
        
852
        
935
        if(!IsScalarEqualToOne(t->getSat()))
853
        inline void save(YAML::Emitter& out, ConstLookTransformRcPtr t)
936
        {
854
        {
937
            out << YAML::Key << "sat" << YAML::Value << t->getSat();
855
            out << YAML::VerbatimTag("LookTransform");
856
            out << YAML::Flow << YAML::BeginMap;
857
            out << YAML::Key << "src" << YAML::Value << t->getSrc();
858
            out << YAML::Key << "dst" << YAML::Value << t->getDst();
859
            out << YAML::Key << "looks" << YAML::Value << t->getLooks();
860
            EmitBaseTransformKeyValues(out, t);
861
            out << YAML::EndMap;
938
        }
862
        }
939
        
863
        
940
        EmitBaseTransformKeyValues(out, t);
864
        // MatrixTransform
941
        out << YAML::EndMap;
942
        return out;
943
    }
944
    
945
    void operator >> (const YAML::Node& node, AllocationTransformRcPtr& t)
946
    {
947
        t = AllocationTransform::Create();
948
        
949
        std::string key;
950
        
865
        
951
        for (YAML::Iterator iter = node.begin();
866
        inline void load(const YAML::Node& node, MatrixTransformRcPtr& t)
952
             iter != node.end();
953
             ++iter)
954
        {
867
        {
955
            iter.first() >> key;
868
            t = MatrixTransform::Create();
956
            
869
            
957
            if(key == "allocation")
870
            std::string key;
958
            {
871
            
959
                Allocation val;
872
            for (Iterator iter = node.begin();
960
                if (iter.second().Type() != YAML::NodeType::Null && 
873
                 iter != node.end();
961
                    iter.second().Read<Allocation>(val))
874
                 ++iter)
962
                  t->setAllocation(val);
875
            {
963
            }
876
                const YAML::Node& first = get_first(iter);
964
            else if(key == "vars")
877
                const YAML::Node& second = get_second(iter);
965
            {
878
                
966
                std::vector<float> val;
879
                load(first, key);
967
                if (iter.second().Type() != YAML::NodeType::Null)
880
                
881
                if (second.Type() == YAML::NodeType::Null) continue;
882
                
883
                if(key == "matrix")
968
                {
884
                {
969
                    iter.second() >> val;
885
                    std::vector<float> val;
970
                    if(!val.empty())
886
                    load(second, val);
887
                    if(val.size() != 16)
971
                    {
888
                    {
972
                        t->setVars(static_cast<int>(val.size()), &val[0]);
889
                        std::ostringstream os;
890
                        os << "MatrixTransform parse error, matrix field must be 16 ";
891
                        os << "floats. Found '" << val.size() << "'.";
892
                        throw Exception(os.str().c_str());
973
                    }
893
                    }
894
                    t->setMatrix(&val[0]);
895
                }
896
                else if(key == "offset")
897
                {
898
                    std::vector<float> val;
899
                    load(second, val);
900
                    if(val.size() != 4)
901
                    {
902
                        std::ostringstream os;
903
                        os << "MatrixTransform parse error, offset field must be 4 ";
904
                        os << "floats. Found '" << val.size() << "'.";
905
                        throw Exception(os.str().c_str());
906
                    }
907
                    t->setOffset(&val[0]);
908
                }
909
                else if(key == "direction")
910
                {
911
                    TransformDirection val;
912
                    load(second, val);
913
                    t->setDirection(val);
914
                }
915
                else
916
                {
917
                    LogUnknownKeyWarning(node.Tag(), first);
974
                }
918
                }
975
            }
919
            }
976
            else if(key == "direction")
920
        }
921
        
922
        inline void save(YAML::Emitter& out, ConstMatrixTransformRcPtr t)
923
        {
924
            out << YAML::VerbatimTag("MatrixTransform");
925
            out << YAML::Flow << YAML::BeginMap;
926
            
927
            std::vector<float> matrix(16, 0.0);
928
            t->getMatrix(&matrix[0]);
929
            if(!IsM44Identity(&matrix[0]))
977
            {
930
            {
978
                TransformDirection val;
931
                out << YAML::Key << "matrix";
979
                if (iter.second().Type() != YAML::NodeType::Null && 
932
                out << YAML::Value << YAML::Flow << matrix;
980
                    iter.second().Read<TransformDirection>(val))
981
                  t->setDirection(val);
982
            }
933
            }
983
            else
934
            
935
            std::vector<float> offset(4, 0.0);
936
            t->getOffset(&offset[0]);
937
            if(!IsVecEqualToZero(&offset[0],4))
984
            {
938
            {
985
                LogUnknownKeyWarning(node.Tag(), iter.first());
939
                out << YAML::Key << "offset";
940
                out << YAML::Value << YAML::Flow << offset;
986
            }
941
            }
942
            
943
            EmitBaseTransformKeyValues(out, t);
944
            out << YAML::EndMap;
987
        }
945
        }
988
    }
989
    
990
    YAML::Emitter& operator << (YAML::Emitter& out, ConstAllocationTransformRcPtr t)
991
    {
992
        out << YAML::VerbatimTag("AllocationTransform");
993
        out << YAML::Flow << YAML::BeginMap;
994
        
946
        
995
        out << YAML::Key << "allocation";
947
        // TruelightTransform
996
        out << YAML::Value << YAML::Flow << t->getAllocation();
997
        
948
        
998
        if(t->getNumVars() > 0)
949
        inline void load(const YAML::Node& node, TruelightTransformRcPtr& t)
999
        {
950
        {
1000
            std::vector<float> vars(t->getNumVars());
951
            t = TruelightTransform::Create();
1001
            t->getVars(&vars[0]);
952
            
1002
            out << YAML::Key << "vars";
953
            std::string key, stringval;
1003
            out << YAML::Flow << YAML::Value << vars;
954
            
955
            for (Iterator iter = node.begin();
956
                 iter != node.end();
957
                 ++iter)
958
            {
959
                const YAML::Node& first = get_first(iter);
960
                const YAML::Node& second = get_second(iter);
961
                
962
                load(first, key);
963
                
964
                if (second.Type() == YAML::NodeType::Null) continue;
965
                
966
                if(key == "config_root")
967
                {
968
                    load(second, stringval);
969
                    t->setConfigRoot(stringval.c_str());
970
                }
971
                else if(key == "profile")
972
                {
973
                    load(second, stringval);
974
                    t->setProfile(stringval.c_str());
975
                }
976
                else if(key == "camera")
977
                {
978
                    load(second, stringval);
979
                    t->setCamera(stringval.c_str());
980
                }
981
                else if(key == "input_display")
982
                {
983
                    load(second, stringval);
984
                    t->setInputDisplay(stringval.c_str());
985
                }
986
                else if(key == "recorder")
987
                {
988
                    load(second, stringval);
989
                    t->setRecorder(stringval.c_str());
990
                }
991
                else if(key == "print")
992
                {
993
                    load(second, stringval);
994
                    t->setPrint(stringval.c_str());
995
                }
996
                else if(key == "lamp")
997
                {
998
                    load(second, stringval);
999
                    t->setLamp(stringval.c_str());
1000
                }
1001
                else if(key == "output_camera")
1002
                {
1003
                    load(second, stringval);
1004
                    t->setOutputCamera(stringval.c_str());
1005
                }
1006
                else if(key == "display")
1007
                {
1008
                    load(second, stringval);
1009
                    t->setDisplay(stringval.c_str());
1010
                }
1011
                else if(key == "cube_input")
1012
                {
1013
                    load(second, stringval);
1014
                     t->setCubeInput(stringval.c_str());
1015
                }
1016
                else if(key == "direction")
1017
                {
1018
                    TransformDirection val;
1019
                    load(second, val);
1020
                    t->setDirection(val);
1021
                }
1022
                else
1023
                {
1024
                    LogUnknownKeyWarning(node.Tag(), first);
1025
                }
1026
            }
1004
        }
1027
        }
1005
        
1028
        
1006
        EmitBaseTransformKeyValues(out, t);
1029
        inline void save(YAML::Emitter& out, ConstTruelightTransformRcPtr t)
1007
        out << YAML::EndMap;
1008
        return out;
1009
    }
1010
    
1011
    void operator >> (const YAML::Node& node, TruelightTransformRcPtr& t)
1012
    {
1013
        t = TruelightTransform::Create();
1014
        
1015
        std::string key, stringval;
1016
        
1017
        for (YAML::Iterator iter = node.begin();
1018
             iter != node.end();
1019
             ++iter)
1020
        {
1030
        {
1021
            iter.first() >> key;
1022
            
1031
            
1023
            if(key == "config_root")
1032
            out << YAML::VerbatimTag("TruelightTransform");
1033
            out << YAML::Flow << YAML::BeginMap;
1034
            if(strcmp(t->getConfigRoot(), "") != 0)
1024
            {
1035
            {
1025
                if (iter.second().Type() != YAML::NodeType::Null && 
1036
                out << YAML::Key << "config_root";
1026
                    iter.second().Read<std::string>(stringval))
1037
                out << YAML::Value << YAML::Flow << t->getConfigRoot();
1027
                  t->setConfigRoot(stringval.c_str());
1028
            }
1038
            }
1029
            else if(key == "profile")
1039
            if(strcmp(t->getProfile(), "") != 0)
1030
            {
1040
            {
1031
                if (iter.second().Type() != YAML::NodeType::Null && 
1041
                out << YAML::Key << "profile";
1032
                    iter.second().Read<std::string>(stringval))
1042
                out << YAML::Value << YAML::Flow << t->getProfile();
1033
                  t->setProfile(stringval.c_str());
1034
            }
1043
            }
1035
            else if(key == "camera")
1044
            if(strcmp(t->getCamera(), "") != 0)
1036
            {
1045
            {
1037
                if (iter.second().Type() != YAML::NodeType::Null && 
1046
                out << YAML::Key << "camera";
1038
                    iter.second().Read<std::string>(stringval))
1047
                out << YAML::Value << YAML::Flow << t->getCamera();
1039
                  t->setCamera(stringval.c_str());
1040
            }
1048
            }
1041
            else if(key == "input_display")
1049
            if(strcmp(t->getInputDisplay(), "") != 0)
1042
            {
1050
            {
1043
                if (iter.second().Type() != YAML::NodeType::Null && 
1051
                out << YAML::Key << "input_display";
1044
                    iter.second().Read<std::string>(stringval))
1052
                out << YAML::Value << YAML::Flow << t->getInputDisplay();
1045
                  t->setInputDisplay(stringval.c_str());
1046
            }
1053
            }
1047
            else if(key == "recorder")
1054
            if(strcmp(t->getRecorder(), "") != 0)
1048
            {
1055
            {
1049
                if (iter.second().Type() != YAML::NodeType::Null && 
1056
                out << YAML::Key << "recorder";
1050
                    iter.second().Read<std::string>(stringval))
1057
                out << YAML::Value << YAML::Flow << t->getRecorder();
1051
                  t->setRecorder(stringval.c_str());
1052
            }
1058
            }
1053
            else if(key == "print")
1059
            if(strcmp(t->getPrint(), "") != 0)
1054
            {
1060
            {
1055
                if (iter.second().Type() != YAML::NodeType::Null && 
1061
                out << YAML::Key << "print";
1056
                    iter.second().Read<std::string>(stringval))
1062
                out << YAML::Value << YAML::Flow << t->getPrint();
1057
                  t->setPrint(stringval.c_str());
1058
            }
1063
            }
1059
            else if(key == "lamp")
1064
            if(strcmp(t->getLamp(), "") != 0)
1060
            {
1065
            {
1061
                if (iter.second().Type() != YAML::NodeType::Null && 
1066
                out << YAML::Key << "lamp";
1062
                    iter.second().Read<std::string>(stringval))
1067
                out << YAML::Value << YAML::Flow << t->getLamp();
1063
                  t->setLamp(stringval.c_str());
1064
            }
1068
            }
1065
            else if(key == "output_camera")
1069
            if(strcmp(t->getOutputCamera(), "") != 0)
1066
            {
1070
            {
1067
                if (iter.second().Type() != YAML::NodeType::Null && 
1071
                out << YAML::Key << "output_camera";
1068
                    iter.second().Read<std::string>(stringval))
1072
                out << YAML::Value << YAML::Flow << t->getOutputCamera();
1069
                  t->setOutputCamera(stringval.c_str());
1070
            }
1073
            }
1071
            else if(key == "display")
1074
            if(strcmp(t->getDisplay(), "") != 0)
1072
            {
1075
            {
1073
                if (iter.second().Type() != YAML::NodeType::Null && 
1076
                out << YAML::Key << "display";
1074
                    iter.second().Read<std::string>(stringval))
1077
                out << YAML::Value << YAML::Flow << t->getDisplay();
1075
                  t->setDisplay(stringval.c_str());
1076
            }
1078
            }
1077
            else if(key == "cube_input")
1079
            if(strcmp(t->getCubeInput(), "") != 0)
1078
            {
1080
            {
1079
                if (iter.second().Type() != YAML::NodeType::Null && 
1081
                out << YAML::Key << "cube_input";
1080
                    iter.second().Read<std::string>(stringval))
1082
                out << YAML::Value << YAML::Flow << t->getCubeInput();
1081
                  t->setCubeInput(stringval.c_str());
1082
            }
1083
            }
1083
            else if(key == "direction")
1084
            
1085
            EmitBaseTransformKeyValues(out, t);
1086
            
1087
            out << YAML::EndMap;
1088
        }
1089
        
1090
        // Transform
1091
        
1092
        void load(const YAML::Node& node, TransformRcPtr& t)
1093
        {
1094
            if(node.Type() != YAML::NodeType::Map)
1084
            {
1095
            {
1085
                TransformDirection val;
1096
                std::ostringstream os;
1086
                if (iter.second().Type() != YAML::NodeType::Null && 
1097
                os << "Unsupported Transform type encountered: (" << node.Type() << ") in OCIO profile. ";
1087
                    iter.second().Read<TransformDirection>(val))
1098
                os << "Only Mapping types supported.";
1088
                  t->setDirection(val);
1099
                throw Exception(os.str().c_str());
1100
            }
1101
            
1102
            std::string type = node.Tag();
1103
            
1104
            if(type == "AllocationTransform") {
1105
                AllocationTransformRcPtr temp;
1106
                load(node, temp);
1107
                t = temp;
1108
            }
1109
            else if(type == "CDLTransform") {
1110
                CDLTransformRcPtr temp;
1111
                load(node, temp);
1112
                t = temp;
1113
            }
1114
            else if(type == "ColorSpaceTransform")  {
1115
                ColorSpaceTransformRcPtr temp;
1116
                load(node, temp);
1117
                t = temp;
1118
            }
1119
            // TODO: DisplayTransform
1120
            else if(type == "ExponentTransform")  {
1121
                ExponentTransformRcPtr temp;
1122
                load(node, temp);
1123
                t = temp;
1124
            }
1125
            else if(type == "FileTransform")  {
1126
                FileTransformRcPtr temp;
1127
                load(node, temp);
1128
                t = temp;
1129
            }
1130
            else if(type == "GroupTransform") {
1131
                GroupTransformRcPtr temp;
1132
                load(node, temp);
1133
                t = temp;
1134
            }
1135
            else if(type == "LogTransform") {
1136
                LogTransformRcPtr temp;
1137
                load(node, temp);
1138
                t = temp;
1139
            }
1140
            else if(type == "LookTransform") {
1141
                LookTransformRcPtr temp;
1142
                load(node, temp);
1143
                t = temp;
1144
            }
1145
            else if(type == "MatrixTransform")  {
1146
                MatrixTransformRcPtr temp;
1147
                load(node, temp);
1148
                t = temp;
1149
            }
1150
            else if(type == "TruelightTransform")  {
1151
                TruelightTransformRcPtr temp;
1152
                load(node, temp);
1153
                t = temp;
1089
            }
1154
            }
1090
            else
1155
            else
1091
            {
1156
            {
1092
                LogUnknownKeyWarning(node.Tag(), iter.first());
1157
                // TODO: add a new empty (better name?) aka passthru Transform()
1158
                // which does nothing. This is so upsupported !<tag> types don't
1159
                // throw an exception. Alternativly this could be caught in the
1160
                // GroupTransformRcPtr >> operator with some type of
1161
                // supported_tag() method
1162
                
1163
                // TODO: consider the forwards-compatibility implication of
1164
                // throwing an exception.  Should this be a warning, instead?
1165
                
1166
                //  t = EmptyTransformRcPtr(new EmptyTransform(), &deleter);
1167
                std::ostringstream os;
1168
                os << "Unsupported transform type !<" << type << "> in OCIO profile. ";
1169
                throw Exception(os.str().c_str());
1093
            }
1170
            }
1094
        }
1171
        }
1095
    }
1096
    
1097
    YAML::Emitter& operator << (YAML::Emitter& out, ConstTruelightTransformRcPtr t)
1098
    {
1099
        
1172
        
1100
        out << YAML::VerbatimTag("TruelightTransform");
1173
        void save(YAML::Emitter& out, ConstTransformRcPtr t)
1101
        out << YAML::Flow << YAML::BeginMap;
1174
        {
1102
        if(strcmp(t->getConfigRoot(), "") != 0)
1175
            if(ConstAllocationTransformRcPtr Allocation_tran = \
1103
        {
1176
                DynamicPtrCast<const AllocationTransform>(t))
1104
            out << YAML::Key << "config_root";
1177
                save(out, Allocation_tran);
1105
            out << YAML::Value << YAML::Flow << t->getConfigRoot();
1178
            else if(ConstCDLTransformRcPtr CDL_tran = \
1106
        }
1179
                DynamicPtrCast<const CDLTransform>(t))
1107
        if(strcmp(t->getProfile(), "") != 0)
1180
                save(out, CDL_tran);
1108
        {
1181
            else if(ConstColorSpaceTransformRcPtr ColorSpace_tran = \
1109
            out << YAML::Key << "profile";
1182
                DynamicPtrCast<const ColorSpaceTransform>(t))
1110
            out << YAML::Value << YAML::Flow << t->getProfile();
1183
                save(out, ColorSpace_tran);
1111
        }
1184
            else if(ConstExponentTransformRcPtr Exponent_tran = \
1112
        if(strcmp(t->getCamera(), "") != 0)
1185
                DynamicPtrCast<const ExponentTransform>(t))
1113
        {
1186
                save(out, Exponent_tran);
1114
            out << YAML::Key << "camera";
1187
            else if(ConstFileTransformRcPtr File_tran = \
1115
            out << YAML::Value << YAML::Flow << t->getCamera();
1188
                DynamicPtrCast<const FileTransform>(t))
1116
        }
1189
                save(out, File_tran);
1117
        if(strcmp(t->getInputDisplay(), "") != 0)
1190
            else if(ConstGroupTransformRcPtr Group_tran = \
1118
        {
1191
                DynamicPtrCast<const GroupTransform>(t))
1119
            out << YAML::Key << "input_display";
1192
                save(out, Group_tran);
1120
            out << YAML::Value << YAML::Flow << t->getInputDisplay();
1193
            else if(ConstLogTransformRcPtr Log_tran = \
1194
                DynamicPtrCast<const LogTransform>(t))
1195
                save(out, Log_tran);
1196
            else if(ConstLookTransformRcPtr Look_tran = \
1197
                DynamicPtrCast<const LookTransform>(t))
1198
                save(out, Look_tran);
1199
            else if(ConstMatrixTransformRcPtr Matrix_tran = \
1200
                DynamicPtrCast<const MatrixTransform>(t))
1201
                save(out, Matrix_tran);
1202
            else if(ConstTruelightTransformRcPtr Truelight_tran = \
1203
                DynamicPtrCast<const TruelightTransform>(t))
1204
                save(out, Truelight_tran);
1205
            else
1206
                throw Exception("Unsupported Transform() type for serialization.");
1121
        }
1207
        }
1122
        if(strcmp(t->getRecorder(), "") != 0)
1208
        
1209
        // ColorSpace
1210
        
1211
        inline void load(const YAML::Node& node, ColorSpaceRcPtr& cs)
1123
        {
1212
        {
1124
            out << YAML::Key << "recorder";
1213
            if(node.Tag() != "ColorSpace")
1125
            out << YAML::Value << YAML::Flow << t->getRecorder();
1214
                return; // not a !<ColorSpace> tag
1215
            
1216
            std::string key, stringval;
1217
            bool boolval;
1218
            
1219
            for (Iterator iter = node.begin();
1220
                 iter != node.end();
1221
                 ++iter)
1222
            {
1223
                const YAML::Node& first = get_first(iter);
1224
                const YAML::Node& second = get_second(iter);
1225
                
1226
                load(first, key);
1227
                
1228
                if (second.Type() == YAML::NodeType::Null) continue;
1229
                
1230
                if(key == "name")
1231
                {
1232
                    load(second, stringval);
1233
                    cs->setName(stringval.c_str());
1234
                }
1235
                else if(key == "description")
1236
                {
1237
                    load(second, stringval);
1238
                    cs->setDescription(stringval.c_str());
1239
                }
1240
                else if(key == "family")
1241
                {
1242
                    load(second, stringval);
1243
                    cs->setFamily(stringval.c_str());
1244
                }
1245
                else if(key == "equalitygroup")
1246
                {
1247
                    load(second, stringval);
1248
                    cs->setEqualityGroup(stringval.c_str());
1249
                }
1250
                else if(key == "bitdepth")
1251
                {
1252
                    BitDepth ret;
1253
                    load(second, ret);
1254
                    cs->setBitDepth(ret);
1255
                }
1256
                else if(key == "isdata")
1257
                {
1258
                    load(second, boolval);
1259
                    cs->setIsData(boolval);
1260
                }
1261
                else if(key == "allocation")
1262
                {
1263
                    Allocation val;
1264
                    load(second, val);
1265
                    cs->setAllocation(val);
1266
                }
1267
                else if(key == "allocationvars")
1268
                {
1269
                    std::vector<float> val;
1270
                    load(second, val);
1271
                    if(!val.empty())
1272
                        cs->setAllocationVars(static_cast<int>(val.size()), &val[0]);
1273
                }
1274
                else if(key == "to_reference")
1275
                {
1276
                    TransformRcPtr val;
1277
                    load(second, val);
1278
                    cs->setTransform(val, COLORSPACE_DIR_TO_REFERENCE);
1279
                }
1280
                else if(key == "from_reference")
1281
                {
1282
                    TransformRcPtr val;
1283
                    load(second, val);
1284
                    cs->setTransform(val, COLORSPACE_DIR_FROM_REFERENCE);
1285
                }
1286
                else
1287
                {
1288
                    LogUnknownKeyWarning(node.Tag(), first);
1289
                }
1290
            }
1126
        }
1291
        }
1127
        if(strcmp(t->getPrint(), "") != 0)
1292
        
1293
        inline void save(YAML::Emitter& out, ConstColorSpaceRcPtr cs)
1128
        {
1294
        {
1129
            out << YAML::Key << "print";
1295
            out << YAML::VerbatimTag("ColorSpace");
1130
            out << YAML::Value << YAML::Flow << t->getPrint();
1296
            out << YAML::BeginMap;
1297
            
1298
            out << YAML::Key << "name" << YAML::Value << cs->getName();
1299
            out << YAML::Key << "family" << YAML::Value << cs->getFamily();
1300
            out << YAML::Key << "equalitygroup" << YAML::Value << cs->getEqualityGroup();
1301
            out << YAML::Key << "bitdepth" << YAML::Value;
1302
            save(out, cs->getBitDepth());
1303
            if(cs->getDescription() != NULL && strlen(cs->getDescription()) > 0)
1304
            {
1305
                out << YAML::Key << "description";
1306
                out << YAML::Value << YAML::Literal << cs->getDescription();
1307
            }
1308
            out << YAML::Key << "isdata" << YAML::Value << cs->isData();
1309
            
1310
            out << YAML::Key << "allocation" << YAML::Value;
1311
            save(out, cs->getAllocation());
1312
            if(cs->getAllocationNumVars() > 0)
1313
            {
1314
                std::vector<float> allocationvars(cs->getAllocationNumVars());
1315
                cs->getAllocationVars(&allocationvars[0]);
1316
                out << YAML::Key << "allocationvars";
1317
                out << YAML::Flow << YAML::Value << allocationvars;
1318
            }
1319
            
1320
            ConstTransformRcPtr toref = \
1321
                cs->getTransform(COLORSPACE_DIR_TO_REFERENCE);
1322
            if(toref)
1323
            {
1324
                out << YAML::Key << "to_reference" << YAML::Value;
1325
                save(out, toref);
1326
            }
1327
            
1328
            ConstTransformRcPtr fromref = \
1329
                cs->getTransform(COLORSPACE_DIR_FROM_REFERENCE);
1330
            if(fromref)
1331
            {
1332
                out << YAML::Key << "from_reference" << YAML::Value;
1333
                save(out, fromref);
1334
            }
1335
            
1336
            out << YAML::EndMap;
1337
            out << YAML::Newline;
1131
        }
1338
        }
1132
        if(strcmp(t->getLamp(), "") != 0)
1339
        
1340
        // Look
1341
        
1342
        inline void load(const YAML::Node& node, LookRcPtr& look)
1133
        {
1343
        {
1134
            out << YAML::Key << "lamp";
1344
            if(node.Tag() != "Look")
1135
            out << YAML::Value << YAML::Flow << t->getLamp();
1345
                return;
1346
            
1347
            std::string key, stringval;
1348
            
1349
            for (Iterator iter = node.begin();
1350
                 iter != node.end();
1351
                 ++iter)
1352
            {
1353
                const YAML::Node& first = get_first(iter);
1354
                const YAML::Node& second = get_second(iter);
1355
                
1356
                load(first, key);
1357
                
1358
                if (second.Type() == YAML::NodeType::Null) continue;
1359
                
1360
                if(key == "name")
1361
                {
1362
                    load(second, stringval);
1363
                    look->setName(stringval.c_str());
1364
                }
1365
                else if(key == "process_space")
1366
                {
1367
                    load(second, stringval);
1368
                    look->setProcessSpace(stringval.c_str());
1369
                }
1370
                else if(key == "transform")
1371
                {
1372
                    TransformRcPtr val;
1373
                    load(second, val);
1374
                    look->setTransform(val);
1375
                }
1376
                else if(key == "inverse_transform")
1377
                {
1378
                    TransformRcPtr val;
1379
                    load(second, val);
1380
                    look->setInverseTransform(val);
1381
                }
1382
                else
1383
                {
1384
                    LogUnknownKeyWarning(node.Tag(), first);
1385
                }
1386
            }
1136
        }
1387
        }
1137
        if(strcmp(t->getOutputCamera(), "") != 0)
1388
        
1389
        inline void save(YAML::Emitter& out, ConstLookRcPtr look)
1138
        {
1390
        {
1139
            out << YAML::Key << "output_camera";
1391
            out << YAML::VerbatimTag("Look");
1140
            out << YAML::Value << YAML::Flow << t->getOutputCamera();
1392
            out << YAML::BeginMap;
1393
            out << YAML::Key << "name" << YAML::Value << look->getName();
1394
            out << YAML::Key << "process_space" << YAML::Value << look->getProcessSpace();
1395
            
1396
            if(look->getTransform())
1397
            {
1398
                out << YAML::Key << "transform";
1399
                out << YAML::Value;
1400
                save(out, look->getTransform());
1401
            }
1402
            
1403
            if(look->getInverseTransform())
1404
            {
1405
                out << YAML::Key << "inverse_transform";
1406
                out << YAML::Value;
1407
                save(out, look->getInverseTransform());
1408
            }
1409
            
1410
            out << YAML::EndMap;
1411
            out << YAML::Newline;
1141
        }
1412
        }
1142
        if(strcmp(t->getDisplay(), "") != 0)
1413
        
1414
        // Config
1415
        
1416
        inline void load(const YAML::Node& node, ConfigRcPtr& c, const char* filename)
1143
        {
1417
        {
1144
            out << YAML::Key << "display";
1418
            
1145
            out << YAML::Value << YAML::Flow << t->getDisplay();
1419
            // check profile version
1420
            int profile_version = 0;
1421
#ifdef OLDYAML
1422
            if(node.FindValue("ocio_profile_version") == NULL)
1423
#else
1424
            if(node["ocio_profile_version"] == NULL)
1425
#endif
1426
            {
1427
                std::ostringstream os;
1428
                os << "The specified file ";
1429
                os << "does not appear to be an OCIO configuration.";
1430
                throw Exception (os.str().c_str());
1431
            }
1432
            
1433
            load(node["ocio_profile_version"], profile_version);
1434
            if(profile_version > 1)
1435
            {
1436
                std::ostringstream os;
1437
                os << "This .ocio config ";
1438
                if(filename && *filename)
1439
                {
1440
                    os << " '" << filename << "' ";
1441
                }
1442
                os << "is version " << profile_version << ". ";
1443
                os << "This version of the OpenColorIO library (" << OCIO_VERSION ") ";
1444
                os << "is not known to be able to load this profile. ";
1445
                os << "An attempt will be made, but there are no guarantees that the ";
1446
                os << "results will be accurate. Continue at your own risk.";
1447
                LogWarning(os.str());
1448
            }
1449
            
1450
            std::string key, stringval;
1451
            bool boolval = false;
1452
            EnvironmentMode mode = ENV_ENVIRONMENT_LOAD_ALL;
1453
            
1454
            for (Iterator iter = node.begin();
1455
                 iter != node.end();
1456
                 ++iter)
1457
            {
1458
                const YAML::Node& first = get_first(iter);
1459
                const YAML::Node& second = get_second(iter);
1460
                
1461
                load(first, key);
1462
                
1463
                if (second.Type() == YAML::NodeType::Null) continue;
1464
                
1465
                if(key == "ocio_profile_version") { } // Already handled above.
1466
                else if(key == "environment")
1467
                {
1468
                    mode = ENV_ENVIRONMENT_LOAD_PREDEFINED;
1469
                    if(second.Type() != YAML::NodeType::Map)
1470
                    {
1471
                        std::ostringstream os;
1472
                        os << "'environment' field needs to be a (name: key) map.";
1473
                        throw Exception(os.str().c_str());
1474
                    }
1475
                    for (Iterator it = second.begin();
1476
                         it != second.end();
1477
                         ++it)
1478
                    {
1479
                        std::string k, v;
1480
                        load(get_first(it), k);
1481
                        load(get_second(it), v);
1482
                        c->addEnvironmentVar(k.c_str(), v.c_str());
1483
                    }
1484
                }
1485
                else if(key == "search_path" || key == "resource_path")
1486
                {
1487
                    load(second, stringval);
1488
                    c->setSearchPath(stringval.c_str());
1489
                }
1490
                else if(key == "strictparsing")
1491
                {
1492
                    load(second, boolval);
1493
                    c->setStrictParsingEnabled(boolval);
1494
                }
1495
                else if(key == "description")
1496
                {
1497
                    load(second, stringval);
1498
                    c->setDescription(stringval.c_str());
1499
                }
1500
                else if(key == "luma")
1501
                {
1502
                    std::vector<float> val;
1503
                    load(second, val);
1504
                    if(val.size() != 3)
1505
                    {
1506
                        std::ostringstream os;
1507
                        os << "'luma' field must be 3 ";
1508
                        os << "floats. Found '" << val.size() << "'.";
1509
                        throw Exception(os.str().c_str());
1510
                    }
1511
                    c->setDefaultLumaCoefs(&val[0]);
1512
                }
1513
                else if(key == "roles")
1514
                {
1515
                    if(second.Type() != YAML::NodeType::Map)
1516
                    {
1517
                        std::ostringstream os;
1518
                        os << "'roles' field needs to be a (name: key) map.";
1519
                        throw Exception(os.str().c_str());
1520
                    }
1521
                    for (Iterator it = second.begin();
1522
                         it != second.end();
1523
                         ++it)
1524
                    {
1525
                        std::string k, v;
1526
                        load(get_first(it), k);
1527
                        load(get_second(it), v);
1528
                        c->setRole(k.c_str(), v.c_str());
1529
                    }
1530
                }
1531
                else if(key == "displays")
1532
                {
1533
                    if(second.Type() != YAML::NodeType::Map)
1534
                    {
1535
                        std::ostringstream os;
1536
                        os << "'displays' field needs to be a (name: key) map.";
1537
                        throw Exception(os.str().c_str());
1538
                    }
1539
                    for (Iterator it = second.begin();
1540
                         it != second.end();
1541
                         ++it)
1542
                    {
1543
                        std::string display;
1544
                        load(get_first(it), display);
1545
                        const YAML::Node& dsecond = get_second(it);
1546
                        for(unsigned i = 0; i < dsecond.size(); ++i)
1547
                        {
1548
                            View view;
1549
                            load(dsecond[i], view);
1550
                            c->addDisplay(display.c_str(), view.name.c_str(),
1551
                                          view.colorspace.c_str(), view.looks.c_str());
1552
                        }
1553
                    }
1554
                }
1555
                else if(key == "active_displays")
1556
                {
1557
                    std::vector<std::string> display;
1558
                    load(second, display);
1559
                    std::string displays = JoinStringEnvStyle(display);
1560
                    c->setActiveDisplays(displays.c_str());
1561
                }
1562
                else if(key == "active_views")
1563
                {
1564
                    std::vector<std::string> view;
1565
                    load(second, view);
1566
                    std::string views = JoinStringEnvStyle(view);
1567
                    c->setActiveViews(views.c_str());
1568
                }
1569
                else if(key == "colorspaces")
1570
                {
1571
                    if(second.Type() != YAML::NodeType::Sequence)
1572
                    {
1573
                        std::ostringstream os;
1574
                        os << "'colorspaces' field needs to be a (- !<ColorSpace>) list.";
1575
                        throw Exception(os.str().c_str());
1576
                    }
1577
                    for(unsigned i = 0; i < second.size(); ++i)
1578
                    {
1579
                        if(second[i].Tag() == "ColorSpace")
1580
                        {
1581
                            ColorSpaceRcPtr cs = ColorSpace::Create();
1582
                            load(second[i], cs);
1583
                            for(int ii = 0; ii < c->getNumColorSpaces(); ++ii)
1584
                            {
1585
                                if(strcmp(c->getColorSpaceNameByIndex(ii), cs->getName()) == 0)
1586
                                {
1587
                                    std::ostringstream os;
1588
                                    os << "Colorspace with name '" << cs->getName() << "' already defined.";
1589
                                    throw Exception(os.str().c_str());
1590
                                }
1591
                            }
1592
                            c->addColorSpace(cs);
1593
                        }
1594
                        else
1595
                        {
1596
                            std::ostringstream os;
1597
                            os << "Unknown element found in colorspaces:";
1598
                            os << second[i].Tag() << ". Only ColorSpace(s)";
1599
                            os << " currently handled.";
1600
                            LogWarning(os.str());
1601
                        }
1602
                    }
1603
                }
1604
                else if(key == "looks")
1605
                {
1606
                    if(second.Type() != YAML::NodeType::Sequence)
1607
                    {
1608
                        std::ostringstream os;
1609
                        os << "'looks' field needs to be a (- !<Look>) list.";
1610
                        throw Exception(os.str().c_str());
1611
                    }
1612
                    
1613
                    for(unsigned i = 0; i < second.size(); ++i)
1614
                    {
1615
                        if(second[i].Tag() == "Look")
1616
                        {
1617
                            LookRcPtr look = Look::Create();
1618
                            load(second[i], look);
1619
                            c->addLook(look);
1620
                        }
1621
                        else
1622
                        {
1623
                            std::ostringstream os;
1624
                            os << "Unknown element found in looks:";
1625
                            os << second[i].Tag() << ". Only Look(s)";
1626
                            os << " currently handled.";
1627
                            LogWarning(os.str());
1628
                        }
1629
                    }
1630
                }
1631
                else
1632
                {
1633
                    LogUnknownKeyWarning("profile", first);
1634
                }
1635
            }
1636
            
1637
            if(filename)
1638
            {
1639
                std::string realfilename = pystring::os::path::abspath(filename);
1640
                std::string configrootdir = pystring::os::path::dirname(realfilename);
1641
                c->setWorkingDir(configrootdir.c_str());
1642
            }
1643
            
1644
            c->setEnvironmentMode(mode);
1645
            c->loadEnvironment();
1646
            
1647
            if(mode == ENV_ENVIRONMENT_LOAD_ALL)
1648
            {
1649
                std::ostringstream os;
1650
                os << "This .ocio config ";
1651
                if(filename && *filename)
1652
                {
1653
                    os << " '" << filename << "' ";
1654
                }
1655
                os << "has no environment section defined. The default behaviour is to ";
1656
                os << "load all environment variables (" << c->getNumEnvironmentVars() << ")";
1657
                os << ", which reduces the efficiency of OCIO's caching. Considering ";
1658
                os << "predefining the environment variables used.";
1659
                LogDebug(os.str());
1660
            }
1661
            
1146
        }
1662
        }
1147
        if(strcmp(t->getCubeInput(), "") != 0)
1663
        
1664
        inline void save(YAML::Emitter& out, const Config* c)
1148
        {
1665
        {
1149
            out << YAML::Key << "cube_input";
1666
            out << YAML::Block;
1150
            out << YAML::Value << YAML::Flow << t->getCubeInput();
1667
            out << YAML::BeginMap;
1668
            out << YAML::Key << "ocio_profile_version" << YAML::Value << 1;
1669
            out << YAML::Newline;
1670
#ifndef OLDYAML
1671
            out << YAML::Newline;
1672
#endif
1673
            
1674
            if(c->getNumEnvironmentVars() > 0)
1675
            {
1676
                out << YAML::Key << "environment";
1677
                out << YAML::Value << YAML::BeginMap;
1678
                for(unsigned i = 0; i < c->getNumEnvironmentVars(); ++i)
1679
                {   
1680
                    const char* name = c->getEnvironmentVarNameByIndex(i);
1681
                    out << YAML::Key << name;
1682
                    out << YAML::Value << c->getEnvironmentVarDefault(name);
1683
                }
1684
                out << YAML::EndMap;
1685
                out << YAML::Newline;
1686
            }
1687
            out << YAML::Key << "search_path" << YAML::Value << c->getSearchPath();
1688
            out << YAML::Key << "strictparsing" << YAML::Value << c->isStrictParsingEnabled();
1689
            
1690
            std::vector<float> luma(3, 0.f);
1691
            c->getDefaultLumaCoefs(&luma[0]);
1692
            out << YAML::Key << "luma" << YAML::Value << YAML::Flow << luma;
1693
            
1694
            if(c->getDescription() != NULL && strlen(c->getDescription()) > 0)
1695
            {
1696
                out << YAML::Newline;
1697
                out << YAML::Key << "description";
1698
                out << YAML::Value << c->getDescription();
1699
                out << YAML::Newline;
1700
            }
1701
            
1702
            // Roles
1703
            out << YAML::Newline;
1704
#ifndef OLDYAML
1705
            out << YAML::Newline;
1706
#endif
1707
            out << YAML::Key << "roles";
1708
            out << YAML::Value << YAML::BeginMap;
1709
            for(unsigned i = 0; i < c->getNumRoles(); ++i)
1710
            {
1711
                const char* role = c->getRoleName(i);
1712
                out << YAML::Key << role;
1713
                out << YAML::Value << c->getColorSpace(role)->getName();
1714
            }
1715
            out << YAML::EndMap;
1716
#ifndef OLDYAML
1717
            out << YAML::Newline;
1718
#endif
1719
            
1720
            // Displays
1721
            out << YAML::Newline;
1722
            out << YAML::Key << "displays";
1723
            out << YAML::Value << YAML::BeginMap;
1724
            for(unsigned i = 0; i < c->getNumDisplays(); ++i)
1725
            {
1726
                const char* display = c->getDisplay(i);
1727
                out << YAML::Key << display;
1728
                out << YAML::Value << YAML::BeginSeq;
1729
                for(unsigned v = 0; v < c->getNumViews(display); ++v)
1730
                {
1731
                    View dview;
1732
                    dview.name = c->getView(display, v);
1733
                    dview.colorspace = c->getDisplayColorSpaceName(display, dview.name.c_str());
1734
                    if(c->getDisplayLooks(display, dview.name.c_str()) != NULL)
1735
                        dview.looks = c->getDisplayLooks(display, dview.name.c_str());
1736
                    save(out, dview);
1737
                
1738
                }
1739
                out << YAML::EndSeq;
1740
            }
1741
            out << YAML::EndMap;
1742
            
1743
#ifndef OLDYAML
1744
            out << YAML::Newline;
1745
#endif
1746
            out << YAML::Newline;
1747
            out << YAML::Key << "active_displays";
1748
            std::vector<std::string> active_displays;
1749
            if(c->getActiveDisplays() != NULL && strlen(c->getActiveDisplays()) > 0)
1750
                SplitStringEnvStyle(active_displays, c->getActiveDisplays());
1751
            out << YAML::Value << YAML::Flow << active_displays;
1752
            out << YAML::Key << "active_views";
1753
            std::vector<std::string> active_views;
1754
            if(c->getActiveViews() != NULL && strlen(c->getActiveViews()) > 0)
1755
                SplitStringEnvStyle(active_views, c->getActiveViews());
1756
            out << YAML::Value << YAML::Flow << active_views;
1757
#ifndef OLDYAML
1758
            out << YAML::Newline;
1759
#endif
1760
            
1761
            // Looks
1762
            if(c->getNumLooks() > 0)
1763
            {
1764
                out << YAML::Newline;
1765
                out << YAML::Key << "looks";
1766
                out << YAML::Value << YAML::BeginSeq;
1767
                for(unsigned i = 0; i < c->getNumLooks(); ++i)
1768
                {
1769
                    const char* name = c->getLookNameByIndex(i);
1770
                    save(out, c->getLook(name));
1771
                }
1772
                out << YAML::EndSeq;
1773
                out << YAML::Newline;
1774
            }
1775
            
1776
            // ColorSpaces
1777
            {
1778
                out << YAML::Newline;
1779
                out << YAML::Key << "colorspaces";
1780
                out << YAML::Value << YAML::BeginSeq;
1781
                for(unsigned i = 0; i < c->getNumColorSpaces(); ++i)
1782
                {
1783
                    const char* name = c->getColorSpaceNameByIndex(i);
1784
                    save(out, c->getColorSpace(name));
1785
                }
1786
                out << YAML::EndSeq;
1787
            }
1788
            
1789
            out << YAML::EndMap;
1151
        }
1790
        }
1152
        
1791
        
1153
        EmitBaseTransformKeyValues(out, t);
1154
        
1155
        out << YAML::EndMap;
1156
        return out;
1157
    }
1792
    }
1158
    
1793
    
1159
    ///////////////////////////////////////////////////////////////////////////
1794
    ///////////////////////////////////////////////////////////////////////////
1160
    //  Enums
1161
    
1162
    YAML::Emitter& operator << (YAML::Emitter& out, BitDepth depth) {
1163
        out << BitDepthToString(depth);
1164
        return out;
1165
    }
1166
    
1167
    void operator >> (const YAML::Node& node, BitDepth& depth) {
1168
        std::string str;
1169
        node.Read<std::string>(str);
1170
        depth = BitDepthFromString(str.c_str());
1171
    }
1172
    
1173
    YAML::Emitter& operator << (YAML::Emitter& out, Allocation alloc) {
1174
        out << AllocationToString(alloc);
1175
        return out;
1176
    }
1177
    
1178
    void operator >> (const YAML::Node& node, Allocation& alloc) {
1179
        std::string str;
1180
        node.Read<std::string>(str);
1181
        alloc = AllocationFromString(str.c_str());
1182
    }
1183
    
1184
    YAML::Emitter& operator << (YAML::Emitter& out, ColorSpaceDirection dir) {
1185
        out << ColorSpaceDirectionToString(dir);
1186
        return out;
1187
    }
1188
    
1795
    
1189
    void operator >> (const YAML::Node& node, ColorSpaceDirection& dir) {
1796
    void OCIOYaml::open(std::istream& istream, ConfigRcPtr& c, const char* filename) const
1190
        std::string str;
1797
    {
1191
        node.Read<std::string>(str);
1798
        try
1192
        dir = ColorSpaceDirectionFromString(str.c_str());
1799
        {
1193
    }
1800
#ifdef OLDYAML
1194
    
1801
            YAML::Parser parser(istream);
1195
    YAML::Emitter& operator << (YAML::Emitter& out, TransformDirection dir) {
1802
            YAML::Node node;
1196
        out << TransformDirectionToString(dir);
1803
            parser.GetNextDocument(node);
1197
        return out;
1804
#else
1198
    }
1805
            YAML::Node node = YAML::Load(istream);
1199
    
1806
#endif
1200
    void operator >> (const YAML::Node& node, TransformDirection& dir) {
1807
            load(node, c, filename);
1201
        std::string str;
1808
        }
1202
        node.Read<std::string>(str);
1809
        catch(const std::exception & e)
1203
        dir = TransformDirectionFromString(str.c_str());
1810
        {
1204
    }
1811
            std::ostringstream os;
1205
    
1812
            os << "Error: Loading the OCIO profile ";
1206
    YAML::Emitter& operator << (YAML::Emitter& out, Interpolation interp) {
1813
            if(filename) os << "'" << filename << "' ";
1207
        out << InterpolationToString(interp);
1814
            os << "failed. " << e.what();
1208
        return out;
1815
            throw Exception(os.str().c_str());
1816
        }
1209
    }
1817
    }
1210
    
1818
    
1211
    void operator >> (const YAML::Node& node, Interpolation& interp) {
1819
    void OCIOYaml::write(std::ostream& ostream, const Config* c) const
1212
        std::string str;
1820
    {
1213
        node.Read<std::string>(str);
1821
        YAML::Emitter out;
1214
        interp = InterpolationFromString(str.c_str());
1822
        save(out, c);
1823
        ostream << out.c_str();
1215
    }
1824
    }
1216
    
1825
    
1217
}
1826
}
(-)a/src/core/OCIOYaml.h (-84 / +6 lines)
Lines 28-124 Link Here
28
28
29
#include <OpenColorIO/OpenColorIO.h>
29
#include <OpenColorIO/OpenColorIO.h>
30
30
31
#include "Platform.h"
32
33
#ifndef WINDOWS
34
35
// fwd declare yaml-cpp visibility
36
#pragma GCC visibility push(hidden)
37
namespace YAML {
38
    class Exception;
39
    class BadDereference;
40
    class RepresentationException;
41
    class EmitterException;
42
    class ParserException;
43
    class InvalidScalar;
44
    class KeyNotFound;
45
    template <typename T> class TypedKeyNotFound;
46
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::ColorSpace>;
47
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::Config>;
48
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::Exception>;
49
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::GpuShaderDesc>;
50
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::ImageDesc>;
51
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::Look>;
52
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::Processor>;
53
    
54
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::Transform>;
55
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::AllocationTransform>;
56
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::CDLTransform>;
57
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::ColorSpaceTransform>;
58
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::DisplayTransform>;
59
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::ExponentTransform>;
60
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::FileTransform>;
61
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::GroupTransform>;
62
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::LogTransform>;
63
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::LookTransform>;
64
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::MatrixTransform>;
65
    template <> class TypedKeyNotFound<OCIO_NAMESPACE::TruelightTransform>;
66
}
67
#pragma GCC visibility pop
68
69
#endif 
70
71
#include <yaml-cpp/yaml.h>
72
73
#ifndef INCLUDED_OCIO_YAML_H
31
#ifndef INCLUDED_OCIO_YAML_H
74
#define INCLUDED_OCIO_YAML_H
32
#define INCLUDED_OCIO_YAML_H
75
33
76
OCIO_NAMESPACE_ENTER
34
OCIO_NAMESPACE_ENTER
77
{
35
{
78
    
36
    
79
    // Core
37
    class OCIOYaml
80
    OCIOHIDDEN void operator >> (const YAML::Node& node, ColorSpaceRcPtr& cs);
38
    {
81
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ColorSpaceRcPtr cs);
39
    public:
82
    OCIOHIDDEN void operator >> (const YAML::Node& node, GroupTransformRcPtr& t);
40
        void open(std::istream& istream, ConfigRcPtr& c, const char* filename = NULL) const;
83
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstGroupTransformRcPtr t);
41
        void write(std::ostream& ostream, const Config* c) const;
84
    OCIOHIDDEN void operator >> (const YAML::Node& node, TransformRcPtr& t);
42
    };
85
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstTransformRcPtr t);
86
    OCIOHIDDEN void operator >> (const YAML::Node& node, LookRcPtr& cs);
87
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, LookRcPtr cs);
88
    
89
    // Transforms
90
    OCIOHIDDEN void operator >> (const YAML::Node& node, AllocationTransformRcPtr& t);
91
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstAllocationTransformRcPtr t);
92
    OCIOHIDDEN void operator >> (const YAML::Node& node, CDLTransformRcPtr& t);
93
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstCDLTransformRcPtr t);
94
    OCIOHIDDEN void operator >> (const YAML::Node& node, ColorSpaceTransformRcPtr& t);
95
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstColorSpaceTransformRcPtr t);
96
    OCIOHIDDEN void operator >> (const YAML::Node& node, ExponentTransformRcPtr& t);
97
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstExponentTransformRcPtr t);
98
    OCIOHIDDEN void operator >> (const YAML::Node& node, FileTransformRcPtr& t);
99
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstFileTransformRcPtr t);
100
    OCIOHIDDEN void operator >> (const YAML::Node& node, LogTransformRcPtr& t);
101
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstLogTransformRcPtr t);
102
    OCIOHIDDEN void operator >> (const YAML::Node& node, LookTransformRcPtr& t);
103
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstLookTransformRcPtr t);
104
    OCIOHIDDEN void operator >> (const YAML::Node& node, MatrixTransformRcPtr& t);
105
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstMatrixTransformRcPtr t);
106
    OCIOHIDDEN void operator >> (const YAML::Node& node, TruelightTransformRcPtr& t);
107
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ConstTruelightTransformRcPtr t);
108
    
109
    // Enums
110
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, BitDepth depth);
111
    OCIOHIDDEN void operator >> (const YAML::Node& node, BitDepth& depth);
112
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, Allocation alloc);
113
    OCIOHIDDEN void operator >> (const YAML::Node& node, Allocation& alloc);
114
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, ColorSpaceDirection dir);
115
    OCIOHIDDEN void operator >> (const YAML::Node& node, ColorSpaceDirection& dir);
116
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, TransformDirection dir);
117
    OCIOHIDDEN void operator >> (const YAML::Node& node, TransformDirection& dir);
118
    OCIOHIDDEN YAML::Emitter& operator << (YAML::Emitter& out, Interpolation iterp);
119
    OCIOHIDDEN void operator >> (const YAML::Node& node, Interpolation& iterp);
120
    
43
    
121
    void LogUnknownKeyWarning(const std::string & name, const YAML::Node& tag);
122
}
44
}
123
OCIO_NAMESPACE_EXIT
45
OCIO_NAMESPACE_EXIT
124
46
(-)a/src/core/ParseUtils.cpp (+4 lines)
Lines 359-364 Link Here
359
        while ( istream.good() )
359
        while ( istream.good() )
360
        {
360
        {
361
            std::getline(istream, line);
361
            std::getline(istream, line);
362
            if(line.size() > 0 && line[line.size() - 1] == '\r')
363
            {
364
                line.resize(line.size() - 1);
365
            }
362
            if(!pystring::strip(line).empty())
366
            if(!pystring::strip(line).empty())
363
            {
367
            {
364
                return true;
368
                return true;
(-)a/src/core/PathUtils.cpp (+1 lines)
Lines 48-53 Link Here
48
48
49
#if defined(__APPLE__) && !defined(__IPHONE__)
49
#if defined(__APPLE__) && !defined(__IPHONE__)
50
#include <crt_externs.h> // _NSGetEnviron()
50
#include <crt_externs.h> // _NSGetEnviron()
51
#include <unistd.h>
51
#elif !defined(WINDOWS)
52
#elif !defined(WINDOWS)
52
#include <unistd.h>
53
#include <unistd.h>
53
extern char **environ;
54
extern char **environ;
(-)a/src/pyglue/CMakeLists.txt (-1 / +2 lines)
Lines 95-101 Link Here
95
endif()
95
endif()
96
96
97
if(APPLE)
97
if(APPLE)
98
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -undefined dynamic_lookup")
98
    set_target_properties(PyOpenColorIO PROPERTIES
99
    	LINK_FLAGS "-undefined dynamic_lookup")
99
endif()
100
endif()
100
101
101
add_subdirectory(tests)
102
add_subdirectory(tests)
(-)a/src/pyglue/PyMain.cpp (-1 lines)
Lines 150-156 Link Here
150
}
150
}
151
OCIO_NAMESPACE_EXIT
151
OCIO_NAMESPACE_EXIT
152
152
153
extern "C"
154
MOD_INIT(PyOpenColorIO)
153
MOD_INIT(PyOpenColorIO)
155
{
154
{
156
    PyObject * m;
155
    PyObject * m;

Return to bug 583890