gource-0.56/0000775002342600234260000000000015152463042012574 5ustar andrewcandrewcgource-0.56/Makefile.in0000664002342600234260000116337415152463042014660 0ustar andrewcandrewc# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = gource$(EXEEXT) @USE_BUNDLED_TINYXML_TRUE@am__append_1 = \ @USE_BUNDLED_TINYXML_TRUE@ src/tinyxml/tinyxmlerror.cpp \ @USE_BUNDLED_TINYXML_TRUE@ src/tinyxml/tinystr.cpp \ @USE_BUNDLED_TINYXML_TRUE@ src/tinyxml/tinyxml.cpp \ @USE_BUNDLED_TINYXML_TRUE@ src/tinyxml/tinyxmlparser.cpp @FONTFILE_TRUE@am__append_2 = -DGOURCE_FONT_FILE=\"$(gourcefontfile)\" @FONTDIR_TRUE@@FONTFILE_FALSE@am__append_3 = -DSDLAPP_FONT_DIR=\"$(gourcefontdir)\" check_PROGRAMS = gource_tests$(EXEEXT) TESTS = gource_tests$(EXEEXT) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_boost_base.m4 \ $(top_srcdir)/m4/ax_boost_filesystem.m4 \ $(top_srcdir)/m4/ax_check_gl.m4 \ $(top_srcdir)/m4/ax_check_glu.m4 \ $(top_srcdir)/m4/ax_restore_flags_with_prefix.m4 \ $(top_srcdir)/m4/ax_save_flags_with_prefix.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__dist_fonts_DATA_DIST) \ $(dist_pkgdata_DATA) $(dist_shaders_DATA) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(fontsdir)" \ "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(shadersdir)" PROGRAMS = $(bin_PROGRAMS) am__gource_SOURCES_DIST = src/main.cpp src/action.cpp src/bloom.cpp \ src/caption.cpp src/core/conffile.cpp src/core/display.cpp \ src/core/frustum.cpp src/core/fxfont.cpp src/core/logger.cpp \ src/core/mousecursor.cpp src/core/plane.cpp src/core/ppm.cpp \ src/core/quadtree.cpp src/core/regex.cpp src/core/resource.cpp \ src/core/sdlapp.cpp src/core/seeklog.cpp src/core/settings.cpp \ src/core/shader.cpp src/core/shader_common.cpp \ src/core/stringhash.cpp src/core/texture.cpp \ src/core/png_writer.cpp src/core/timezone.cpp src/core/vbo.cpp \ src/core/vectors.cpp src/dirnode.cpp src/file.cpp \ src/formats/apache.cpp src/formats/bzr.cpp \ src/formats/commitlog.cpp src/formats/custom.cpp \ src/formats/cvs-exp.cpp src/formats/cvs2cl.cpp \ src/formats/git.cpp src/formats/gitraw.cpp src/formats/hg.cpp \ src/formats/svn.cpp src/gource.cpp src/gource_shell.cpp \ src/gource_settings.cpp src/key.cpp src/logmill.cpp \ src/pawn.cpp src/slider.cpp src/spline.cpp src/textbox.cpp \ src/user.cpp src/zoomcamera.cpp src/tinyxml/tinyxmlerror.cpp \ src/tinyxml/tinystr.cpp src/tinyxml/tinyxml.cpp \ src/tinyxml/tinyxmlparser.cpp am__dirstamp = $(am__leading_dot)dirstamp @USE_BUNDLED_TINYXML_TRUE@am__objects_1 = src/tinyxml/gource-tinyxmlerror.$(OBJEXT) \ @USE_BUNDLED_TINYXML_TRUE@ src/tinyxml/gource-tinystr.$(OBJEXT) \ @USE_BUNDLED_TINYXML_TRUE@ src/tinyxml/gource-tinyxml.$(OBJEXT) \ @USE_BUNDLED_TINYXML_TRUE@ src/tinyxml/gource-tinyxmlparser.$(OBJEXT) am__objects_2 = src/gource-action.$(OBJEXT) src/gource-bloom.$(OBJEXT) \ src/gource-caption.$(OBJEXT) \ src/core/gource-conffile.$(OBJEXT) \ src/core/gource-display.$(OBJEXT) \ src/core/gource-frustum.$(OBJEXT) \ src/core/gource-fxfont.$(OBJEXT) \ src/core/gource-logger.$(OBJEXT) \ src/core/gource-mousecursor.$(OBJEXT) \ src/core/gource-plane.$(OBJEXT) src/core/gource-ppm.$(OBJEXT) \ src/core/gource-quadtree.$(OBJEXT) \ src/core/gource-regex.$(OBJEXT) \ src/core/gource-resource.$(OBJEXT) \ src/core/gource-sdlapp.$(OBJEXT) \ src/core/gource-seeklog.$(OBJEXT) \ src/core/gource-settings.$(OBJEXT) \ src/core/gource-shader.$(OBJEXT) \ src/core/gource-shader_common.$(OBJEXT) \ src/core/gource-stringhash.$(OBJEXT) \ src/core/gource-texture.$(OBJEXT) \ src/core/gource-png_writer.$(OBJEXT) \ src/core/gource-timezone.$(OBJEXT) \ src/core/gource-vbo.$(OBJEXT) \ src/core/gource-vectors.$(OBJEXT) src/gource-dirnode.$(OBJEXT) \ src/gource-file.$(OBJEXT) src/formats/gource-apache.$(OBJEXT) \ src/formats/gource-bzr.$(OBJEXT) \ src/formats/gource-commitlog.$(OBJEXT) \ src/formats/gource-custom.$(OBJEXT) \ src/formats/gource-cvs-exp.$(OBJEXT) \ src/formats/gource-cvs2cl.$(OBJEXT) \ src/formats/gource-git.$(OBJEXT) \ src/formats/gource-gitraw.$(OBJEXT) \ src/formats/gource-hg.$(OBJEXT) \ src/formats/gource-svn.$(OBJEXT) src/gource-gource.$(OBJEXT) \ src/gource-gource_shell.$(OBJEXT) \ src/gource-gource_settings.$(OBJEXT) src/gource-key.$(OBJEXT) \ src/gource-logmill.$(OBJEXT) src/gource-pawn.$(OBJEXT) \ src/gource-slider.$(OBJEXT) src/gource-spline.$(OBJEXT) \ src/gource-textbox.$(OBJEXT) src/gource-user.$(OBJEXT) \ src/gource-zoomcamera.$(OBJEXT) $(am__objects_1) am_gource_OBJECTS = src/gource-main.$(OBJEXT) $(am__objects_2) gource_OBJECTS = $(am_gource_OBJECTS) gource_LDADD = $(LDADD) gource_LINK = $(CXXLD) $(gource_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am__gource_tests_SOURCES_DIST = src/test/main.cpp \ src/test/datetime_tests.cpp src/test/regex_tests.cpp \ src/action.cpp src/bloom.cpp src/caption.cpp \ src/core/conffile.cpp src/core/display.cpp \ src/core/frustum.cpp src/core/fxfont.cpp src/core/logger.cpp \ src/core/mousecursor.cpp src/core/plane.cpp src/core/ppm.cpp \ src/core/quadtree.cpp src/core/regex.cpp src/core/resource.cpp \ src/core/sdlapp.cpp src/core/seeklog.cpp src/core/settings.cpp \ src/core/shader.cpp src/core/shader_common.cpp \ src/core/stringhash.cpp src/core/texture.cpp \ src/core/png_writer.cpp src/core/timezone.cpp src/core/vbo.cpp \ src/core/vectors.cpp src/dirnode.cpp src/file.cpp \ src/formats/apache.cpp src/formats/bzr.cpp \ src/formats/commitlog.cpp src/formats/custom.cpp \ src/formats/cvs-exp.cpp src/formats/cvs2cl.cpp \ src/formats/git.cpp src/formats/gitraw.cpp src/formats/hg.cpp \ src/formats/svn.cpp src/gource.cpp src/gource_shell.cpp \ src/gource_settings.cpp src/key.cpp src/logmill.cpp \ src/pawn.cpp src/slider.cpp src/spline.cpp src/textbox.cpp \ src/user.cpp src/zoomcamera.cpp src/tinyxml/tinyxmlerror.cpp \ src/tinyxml/tinystr.cpp src/tinyxml/tinyxml.cpp \ src/tinyxml/tinyxmlparser.cpp @USE_BUNDLED_TINYXML_TRUE@am__objects_3 = src/tinyxml/gource_tests-tinyxmlerror.$(OBJEXT) \ @USE_BUNDLED_TINYXML_TRUE@ src/tinyxml/gource_tests-tinystr.$(OBJEXT) \ @USE_BUNDLED_TINYXML_TRUE@ src/tinyxml/gource_tests-tinyxml.$(OBJEXT) \ @USE_BUNDLED_TINYXML_TRUE@ src/tinyxml/gource_tests-tinyxmlparser.$(OBJEXT) am__objects_4 = src/gource_tests-action.$(OBJEXT) \ src/gource_tests-bloom.$(OBJEXT) \ src/gource_tests-caption.$(OBJEXT) \ src/core/gource_tests-conffile.$(OBJEXT) \ src/core/gource_tests-display.$(OBJEXT) \ src/core/gource_tests-frustum.$(OBJEXT) \ src/core/gource_tests-fxfont.$(OBJEXT) \ src/core/gource_tests-logger.$(OBJEXT) \ src/core/gource_tests-mousecursor.$(OBJEXT) \ src/core/gource_tests-plane.$(OBJEXT) \ src/core/gource_tests-ppm.$(OBJEXT) \ src/core/gource_tests-quadtree.$(OBJEXT) \ src/core/gource_tests-regex.$(OBJEXT) \ src/core/gource_tests-resource.$(OBJEXT) \ src/core/gource_tests-sdlapp.$(OBJEXT) \ src/core/gource_tests-seeklog.$(OBJEXT) \ src/core/gource_tests-settings.$(OBJEXT) \ src/core/gource_tests-shader.$(OBJEXT) \ src/core/gource_tests-shader_common.$(OBJEXT) \ src/core/gource_tests-stringhash.$(OBJEXT) \ src/core/gource_tests-texture.$(OBJEXT) \ src/core/gource_tests-png_writer.$(OBJEXT) \ src/core/gource_tests-timezone.$(OBJEXT) \ src/core/gource_tests-vbo.$(OBJEXT) \ src/core/gource_tests-vectors.$(OBJEXT) \ src/gource_tests-dirnode.$(OBJEXT) \ src/gource_tests-file.$(OBJEXT) \ src/formats/gource_tests-apache.$(OBJEXT) \ src/formats/gource_tests-bzr.$(OBJEXT) \ src/formats/gource_tests-commitlog.$(OBJEXT) \ src/formats/gource_tests-custom.$(OBJEXT) \ src/formats/gource_tests-cvs-exp.$(OBJEXT) \ src/formats/gource_tests-cvs2cl.$(OBJEXT) \ src/formats/gource_tests-git.$(OBJEXT) \ src/formats/gource_tests-gitraw.$(OBJEXT) \ src/formats/gource_tests-hg.$(OBJEXT) \ src/formats/gource_tests-svn.$(OBJEXT) \ src/gource_tests-gource.$(OBJEXT) \ src/gource_tests-gource_shell.$(OBJEXT) \ src/gource_tests-gource_settings.$(OBJEXT) \ src/gource_tests-key.$(OBJEXT) \ src/gource_tests-logmill.$(OBJEXT) \ src/gource_tests-pawn.$(OBJEXT) \ src/gource_tests-slider.$(OBJEXT) \ src/gource_tests-spline.$(OBJEXT) \ src/gource_tests-textbox.$(OBJEXT) \ src/gource_tests-user.$(OBJEXT) \ src/gource_tests-zoomcamera.$(OBJEXT) $(am__objects_3) am_gource_tests_OBJECTS = src/test/gource_tests-main.$(OBJEXT) \ src/test/gource_tests-datetime_tests.$(OBJEXT) \ src/test/gource_tests-regex_tests.$(OBJEXT) $(am__objects_4) gource_tests_OBJECTS = $(am_gource_tests_OBJECTS) gource_tests_DEPENDENCIES = gource_tests_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(gource_tests_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = src/$(DEPDIR)/gource-action.Po \ src/$(DEPDIR)/gource-bloom.Po src/$(DEPDIR)/gource-caption.Po \ src/$(DEPDIR)/gource-dirnode.Po src/$(DEPDIR)/gource-file.Po \ src/$(DEPDIR)/gource-gource.Po \ src/$(DEPDIR)/gource-gource_settings.Po \ src/$(DEPDIR)/gource-gource_shell.Po \ src/$(DEPDIR)/gource-key.Po src/$(DEPDIR)/gource-logmill.Po \ src/$(DEPDIR)/gource-main.Po src/$(DEPDIR)/gource-pawn.Po \ src/$(DEPDIR)/gource-slider.Po src/$(DEPDIR)/gource-spline.Po \ src/$(DEPDIR)/gource-textbox.Po src/$(DEPDIR)/gource-user.Po \ src/$(DEPDIR)/gource-zoomcamera.Po \ src/$(DEPDIR)/gource_tests-action.Po \ src/$(DEPDIR)/gource_tests-bloom.Po \ src/$(DEPDIR)/gource_tests-caption.Po \ src/$(DEPDIR)/gource_tests-dirnode.Po \ src/$(DEPDIR)/gource_tests-file.Po \ src/$(DEPDIR)/gource_tests-gource.Po \ src/$(DEPDIR)/gource_tests-gource_settings.Po \ src/$(DEPDIR)/gource_tests-gource_shell.Po \ src/$(DEPDIR)/gource_tests-key.Po \ src/$(DEPDIR)/gource_tests-logmill.Po \ src/$(DEPDIR)/gource_tests-pawn.Po \ src/$(DEPDIR)/gource_tests-slider.Po \ src/$(DEPDIR)/gource_tests-spline.Po \ src/$(DEPDIR)/gource_tests-textbox.Po \ src/$(DEPDIR)/gource_tests-user.Po \ src/$(DEPDIR)/gource_tests-zoomcamera.Po \ src/core/$(DEPDIR)/gource-conffile.Po \ src/core/$(DEPDIR)/gource-display.Po \ src/core/$(DEPDIR)/gource-frustum.Po \ src/core/$(DEPDIR)/gource-fxfont.Po \ src/core/$(DEPDIR)/gource-logger.Po \ src/core/$(DEPDIR)/gource-mousecursor.Po \ src/core/$(DEPDIR)/gource-plane.Po \ src/core/$(DEPDIR)/gource-png_writer.Po \ src/core/$(DEPDIR)/gource-ppm.Po \ src/core/$(DEPDIR)/gource-quadtree.Po \ src/core/$(DEPDIR)/gource-regex.Po \ src/core/$(DEPDIR)/gource-resource.Po \ src/core/$(DEPDIR)/gource-sdlapp.Po \ src/core/$(DEPDIR)/gource-seeklog.Po \ src/core/$(DEPDIR)/gource-settings.Po \ src/core/$(DEPDIR)/gource-shader.Po \ src/core/$(DEPDIR)/gource-shader_common.Po \ src/core/$(DEPDIR)/gource-stringhash.Po \ src/core/$(DEPDIR)/gource-texture.Po \ src/core/$(DEPDIR)/gource-timezone.Po \ src/core/$(DEPDIR)/gource-vbo.Po \ src/core/$(DEPDIR)/gource-vectors.Po \ src/core/$(DEPDIR)/gource_tests-conffile.Po \ src/core/$(DEPDIR)/gource_tests-display.Po \ src/core/$(DEPDIR)/gource_tests-frustum.Po \ src/core/$(DEPDIR)/gource_tests-fxfont.Po \ src/core/$(DEPDIR)/gource_tests-logger.Po \ src/core/$(DEPDIR)/gource_tests-mousecursor.Po \ src/core/$(DEPDIR)/gource_tests-plane.Po \ src/core/$(DEPDIR)/gource_tests-png_writer.Po \ src/core/$(DEPDIR)/gource_tests-ppm.Po \ src/core/$(DEPDIR)/gource_tests-quadtree.Po \ src/core/$(DEPDIR)/gource_tests-regex.Po \ src/core/$(DEPDIR)/gource_tests-resource.Po \ src/core/$(DEPDIR)/gource_tests-sdlapp.Po \ src/core/$(DEPDIR)/gource_tests-seeklog.Po \ src/core/$(DEPDIR)/gource_tests-settings.Po \ src/core/$(DEPDIR)/gource_tests-shader.Po \ src/core/$(DEPDIR)/gource_tests-shader_common.Po \ src/core/$(DEPDIR)/gource_tests-stringhash.Po \ src/core/$(DEPDIR)/gource_tests-texture.Po \ src/core/$(DEPDIR)/gource_tests-timezone.Po \ src/core/$(DEPDIR)/gource_tests-vbo.Po \ src/core/$(DEPDIR)/gource_tests-vectors.Po \ src/formats/$(DEPDIR)/gource-apache.Po \ src/formats/$(DEPDIR)/gource-bzr.Po \ src/formats/$(DEPDIR)/gource-commitlog.Po \ src/formats/$(DEPDIR)/gource-custom.Po \ src/formats/$(DEPDIR)/gource-cvs-exp.Po \ src/formats/$(DEPDIR)/gource-cvs2cl.Po \ src/formats/$(DEPDIR)/gource-git.Po \ src/formats/$(DEPDIR)/gource-gitraw.Po \ src/formats/$(DEPDIR)/gource-hg.Po \ src/formats/$(DEPDIR)/gource-svn.Po \ src/formats/$(DEPDIR)/gource_tests-apache.Po \ src/formats/$(DEPDIR)/gource_tests-bzr.Po \ src/formats/$(DEPDIR)/gource_tests-commitlog.Po \ src/formats/$(DEPDIR)/gource_tests-custom.Po \ src/formats/$(DEPDIR)/gource_tests-cvs-exp.Po \ src/formats/$(DEPDIR)/gource_tests-cvs2cl.Po \ src/formats/$(DEPDIR)/gource_tests-git.Po \ src/formats/$(DEPDIR)/gource_tests-gitraw.Po \ src/formats/$(DEPDIR)/gource_tests-hg.Po \ src/formats/$(DEPDIR)/gource_tests-svn.Po \ src/test/$(DEPDIR)/gource_tests-datetime_tests.Po \ src/test/$(DEPDIR)/gource_tests-main.Po \ src/test/$(DEPDIR)/gource_tests-regex_tests.Po \ src/tinyxml/$(DEPDIR)/gource-tinystr.Po \ src/tinyxml/$(DEPDIR)/gource-tinyxml.Po \ src/tinyxml/$(DEPDIR)/gource-tinyxmlerror.Po \ src/tinyxml/$(DEPDIR)/gource-tinyxmlparser.Po \ src/tinyxml/$(DEPDIR)/gource_tests-tinystr.Po \ src/tinyxml/$(DEPDIR)/gource_tests-tinyxml.Po \ src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlerror.Po \ src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlparser.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(gource_SOURCES) $(gource_tests_SOURCES) DIST_SOURCES = $(am__gource_SOURCES_DIST) \ $(am__gource_tests_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__dist_fonts_DATA_DIST = data/fonts/README data/fonts/FreeSans.ttf am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_fonts_DATA) $(dist_pkgdata_DATA) $(dist_shaders_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` AM_RECURSIVE_TARGETS = cscope check recheck am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/depcomp \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/missing \ $(top_srcdir)/build-aux/test-driver COPYING ChangeLog INSTALL \ README.md THANKS build-aux/compile build-aux/config.guess \ build-aux/config.sub build-aux/depcomp build-aux/install-sh \ build-aux/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 GZIP_ENV = --best DIST_TARGETS = dist-bzip2 dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_FILESYSTEM_LIB = @BOOST_FILESYSTEM_LIB@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FT2_CFLAGS = @FT2_CFLAGS@ FT2_LIBS = @FT2_LIBS@ GLEW_CFLAGS = @GLEW_CFLAGS@ GLEW_LIBS = @GLEW_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PCRE2_CFLAGS = @PCRE2_CFLAGS@ PCRE2_LIBS = @PCRE2_LIBS@ PKG_CONFIG = @PKG_CONFIG@ PNG_CFLAGS = @PNG_CFLAGS@ PNG_LIBS = @PNG_LIBS@ SDL2_CFLAGS = @SDL2_CFLAGS@ SDL2_LIBS = @SDL2_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gourcefontdir = @gourcefontdir@ gourcefontfile = @gourcefontfile@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 gource_CXXFLAGS = -std=gnu++0x -Wall -Wno-sign-compare -Wno-reorder -Wno-unused-but-set-variable -Wno-unused-variable sources = src/action.cpp src/bloom.cpp src/caption.cpp \ src/core/conffile.cpp src/core/display.cpp \ src/core/frustum.cpp src/core/fxfont.cpp src/core/logger.cpp \ src/core/mousecursor.cpp src/core/plane.cpp src/core/ppm.cpp \ src/core/quadtree.cpp src/core/regex.cpp src/core/resource.cpp \ src/core/sdlapp.cpp src/core/seeklog.cpp src/core/settings.cpp \ src/core/shader.cpp src/core/shader_common.cpp \ src/core/stringhash.cpp src/core/texture.cpp \ src/core/png_writer.cpp src/core/timezone.cpp src/core/vbo.cpp \ src/core/vectors.cpp src/dirnode.cpp src/file.cpp \ src/formats/apache.cpp src/formats/bzr.cpp \ src/formats/commitlog.cpp src/formats/custom.cpp \ src/formats/cvs-exp.cpp src/formats/cvs2cl.cpp \ src/formats/git.cpp src/formats/gitraw.cpp src/formats/hg.cpp \ src/formats/svn.cpp src/gource.cpp src/gource_shell.cpp \ src/gource_settings.cpp src/key.cpp src/logmill.cpp \ src/pawn.cpp src/slider.cpp src/spline.cpp src/textbox.cpp \ src/user.cpp src/zoomcamera.cpp $(am__append_1) gource_SOURCES = src/main.cpp ${sources} AM_CPPFLAGS = -DSDLAPP_RESOURCE_DIR=\"$(pkgdatadir)\" $(am__append_2) \ $(am__append_3) dist_pkgdata_DATA = data/beam.png data/bloom.tga data/bloom_alpha.tga data/file.png data/user.png data/gource.style shadersdir = $(pkgdatadir)/shaders dist_shaders_DATA = data/shaders/shadow.vert data/shaders/shadow.frag data/shaders/bloom.vert data/shaders/bloom.frag data/shaders/text.vert data/shaders/text.frag @FONTDIR_FALSE@@FONTFILE_FALSE@fontsdir = $(pkgdatadir)/fonts @FONTDIR_FALSE@@FONTFILE_FALSE@dist_fonts_DATA = data/fonts/README data/fonts/FreeSans.ttf gource_tests_CPPFLAGS = -I src/test/ ${BOOST_CPPFLAGS} gource_tests_LDFLAGS = ${BOOST_LDFLAGS} gource_tests_LDADD = ${BOOST_UNIT_TEST_FRAMEWORK_LIB} gource_tests_SOURCES = \ src/test/main.cpp \ src/test/datetime_tests.cpp \ src/test/regex_tests.cpp \ ${sources} all: all-am .SUFFIXES: .SUFFIXES: .cpp .log .o .obj .test .test$(EXEEXT) .trs am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) src/$(am__dirstamp): @$(MKDIR_P) src @: > src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/$(DEPDIR) @: > src/$(DEPDIR)/$(am__dirstamp) src/gource-main.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-action.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-bloom.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-caption.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/core/$(am__dirstamp): @$(MKDIR_P) src/core @: > src/core/$(am__dirstamp) src/core/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/core/$(DEPDIR) @: > src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-conffile.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-display.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-frustum.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-fxfont.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-logger.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-mousecursor.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-plane.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-ppm.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-quadtree.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-regex.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-resource.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-sdlapp.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-seeklog.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-settings.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-shader.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-shader_common.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-stringhash.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-texture.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-png_writer.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-timezone.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-vbo.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource-vectors.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/gource-dirnode.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-file.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/formats/$(am__dirstamp): @$(MKDIR_P) src/formats @: > src/formats/$(am__dirstamp) src/formats/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/formats/$(DEPDIR) @: > src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource-apache.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource-bzr.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource-commitlog.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource-custom.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource-cvs-exp.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource-cvs2cl.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource-git.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource-gitraw.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource-hg.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource-svn.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/gource-gource.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-gource_shell.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-gource_settings.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-key.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-logmill.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-pawn.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-slider.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-spline.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-textbox.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-user.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource-zoomcamera.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/tinyxml/$(am__dirstamp): @$(MKDIR_P) src/tinyxml @: > src/tinyxml/$(am__dirstamp) src/tinyxml/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/tinyxml/$(DEPDIR) @: > src/tinyxml/$(DEPDIR)/$(am__dirstamp) src/tinyxml/gource-tinyxmlerror.$(OBJEXT): \ src/tinyxml/$(am__dirstamp) \ src/tinyxml/$(DEPDIR)/$(am__dirstamp) src/tinyxml/gource-tinystr.$(OBJEXT): src/tinyxml/$(am__dirstamp) \ src/tinyxml/$(DEPDIR)/$(am__dirstamp) src/tinyxml/gource-tinyxml.$(OBJEXT): src/tinyxml/$(am__dirstamp) \ src/tinyxml/$(DEPDIR)/$(am__dirstamp) src/tinyxml/gource-tinyxmlparser.$(OBJEXT): \ src/tinyxml/$(am__dirstamp) \ src/tinyxml/$(DEPDIR)/$(am__dirstamp) gource$(EXEEXT): $(gource_OBJECTS) $(gource_DEPENDENCIES) $(EXTRA_gource_DEPENDENCIES) @rm -f gource$(EXEEXT) $(AM_V_CXXLD)$(gource_LINK) $(gource_OBJECTS) $(gource_LDADD) $(LIBS) src/test/$(am__dirstamp): @$(MKDIR_P) src/test @: > src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/test/$(DEPDIR) @: > src/test/$(DEPDIR)/$(am__dirstamp) src/test/gource_tests-main.$(OBJEXT): src/test/$(am__dirstamp) \ src/test/$(DEPDIR)/$(am__dirstamp) src/test/gource_tests-datetime_tests.$(OBJEXT): \ src/test/$(am__dirstamp) src/test/$(DEPDIR)/$(am__dirstamp) src/test/gource_tests-regex_tests.$(OBJEXT): src/test/$(am__dirstamp) \ src/test/$(DEPDIR)/$(am__dirstamp) src/gource_tests-action.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-bloom.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-caption.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-conffile.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-display.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-frustum.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-fxfont.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-logger.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-mousecursor.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-plane.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-ppm.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-quadtree.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-regex.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-resource.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-sdlapp.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-seeklog.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-settings.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-shader.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-shader_common.$(OBJEXT): \ src/core/$(am__dirstamp) src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-stringhash.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-texture.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-png_writer.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-timezone.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-vbo.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/core/gource_tests-vectors.$(OBJEXT): src/core/$(am__dirstamp) \ src/core/$(DEPDIR)/$(am__dirstamp) src/gource_tests-dirnode.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-file.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/formats/gource_tests-apache.$(OBJEXT): \ src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource_tests-bzr.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource_tests-commitlog.$(OBJEXT): \ src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource_tests-custom.$(OBJEXT): \ src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource_tests-cvs-exp.$(OBJEXT): \ src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource_tests-cvs2cl.$(OBJEXT): \ src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource_tests-git.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource_tests-gitraw.$(OBJEXT): \ src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource_tests-hg.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/formats/gource_tests-svn.$(OBJEXT): src/formats/$(am__dirstamp) \ src/formats/$(DEPDIR)/$(am__dirstamp) src/gource_tests-gource.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-gource_shell.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-gource_settings.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-key.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-logmill.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-pawn.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-slider.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-spline.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-textbox.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-user.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gource_tests-zoomcamera.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/tinyxml/gource_tests-tinyxmlerror.$(OBJEXT): \ src/tinyxml/$(am__dirstamp) \ src/tinyxml/$(DEPDIR)/$(am__dirstamp) src/tinyxml/gource_tests-tinystr.$(OBJEXT): \ src/tinyxml/$(am__dirstamp) \ src/tinyxml/$(DEPDIR)/$(am__dirstamp) src/tinyxml/gource_tests-tinyxml.$(OBJEXT): \ src/tinyxml/$(am__dirstamp) \ src/tinyxml/$(DEPDIR)/$(am__dirstamp) src/tinyxml/gource_tests-tinyxmlparser.$(OBJEXT): \ src/tinyxml/$(am__dirstamp) \ src/tinyxml/$(DEPDIR)/$(am__dirstamp) gource_tests$(EXEEXT): $(gource_tests_OBJECTS) $(gource_tests_DEPENDENCIES) $(EXTRA_gource_tests_DEPENDENCIES) @rm -f gource_tests$(EXEEXT) $(AM_V_CXXLD)$(gource_tests_LINK) $(gource_tests_OBJECTS) $(gource_tests_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f src/*.$(OBJEXT) -rm -f src/core/*.$(OBJEXT) -rm -f src/formats/*.$(OBJEXT) -rm -f src/test/*.$(OBJEXT) -rm -f src/tinyxml/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-bloom.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-caption.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-dirnode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-gource.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-gource_settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-gource_shell.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-key.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-logmill.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-pawn.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-slider.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-spline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-textbox.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-user.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource-zoomcamera.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-bloom.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-caption.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-dirnode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-gource.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-gource_settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-gource_shell.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-key.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-logmill.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-pawn.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-slider.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-spline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-textbox.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-user.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/gource_tests-zoomcamera.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-conffile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-display.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-frustum.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-fxfont.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-logger.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-mousecursor.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-plane.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-png_writer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-ppm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-quadtree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-regex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-resource.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-sdlapp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-seeklog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-shader.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-shader_common.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-stringhash.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-texture.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-timezone.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-vbo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource-vectors.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-conffile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-display.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-frustum.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-fxfont.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-logger.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-mousecursor.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-plane.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-png_writer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-ppm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-quadtree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-regex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-resource.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-sdlapp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-seeklog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-settings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-shader.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-shader_common.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-stringhash.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-texture.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-timezone.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-vbo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/core/$(DEPDIR)/gource_tests-vectors.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource-apache.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource-bzr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource-commitlog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource-custom.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource-cvs-exp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource-cvs2cl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource-git.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource-gitraw.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource-hg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource-svn.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource_tests-apache.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource_tests-bzr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource_tests-commitlog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource_tests-custom.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource_tests-cvs-exp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource_tests-cvs2cl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource_tests-git.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource_tests-gitraw.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource_tests-hg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/formats/$(DEPDIR)/gource_tests-svn.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/gource_tests-datetime_tests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/gource_tests-main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/test/$(DEPDIR)/gource_tests-regex_tests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/tinyxml/$(DEPDIR)/gource-tinystr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/tinyxml/$(DEPDIR)/gource-tinyxml.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/tinyxml/$(DEPDIR)/gource-tinyxmlerror.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/tinyxml/$(DEPDIR)/gource-tinyxmlparser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/tinyxml/$(DEPDIR)/gource_tests-tinystr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/tinyxml/$(DEPDIR)/gource_tests-tinyxml.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlerror.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlparser.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` src/gource-main.o: src/main.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-main.o -MD -MP -MF src/$(DEPDIR)/gource-main.Tpo -c -o src/gource-main.o `test -f 'src/main.cpp' || echo '$(srcdir)/'`src/main.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-main.Tpo src/$(DEPDIR)/gource-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/main.cpp' object='src/gource-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-main.o `test -f 'src/main.cpp' || echo '$(srcdir)/'`src/main.cpp src/gource-main.obj: src/main.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-main.obj -MD -MP -MF src/$(DEPDIR)/gource-main.Tpo -c -o src/gource-main.obj `if test -f 'src/main.cpp'; then $(CYGPATH_W) 'src/main.cpp'; else $(CYGPATH_W) '$(srcdir)/src/main.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-main.Tpo src/$(DEPDIR)/gource-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/main.cpp' object='src/gource-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-main.obj `if test -f 'src/main.cpp'; then $(CYGPATH_W) 'src/main.cpp'; else $(CYGPATH_W) '$(srcdir)/src/main.cpp'; fi` src/gource-action.o: src/action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-action.o -MD -MP -MF src/$(DEPDIR)/gource-action.Tpo -c -o src/gource-action.o `test -f 'src/action.cpp' || echo '$(srcdir)/'`src/action.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-action.Tpo src/$(DEPDIR)/gource-action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/action.cpp' object='src/gource-action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-action.o `test -f 'src/action.cpp' || echo '$(srcdir)/'`src/action.cpp src/gource-action.obj: src/action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-action.obj -MD -MP -MF src/$(DEPDIR)/gource-action.Tpo -c -o src/gource-action.obj `if test -f 'src/action.cpp'; then $(CYGPATH_W) 'src/action.cpp'; else $(CYGPATH_W) '$(srcdir)/src/action.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-action.Tpo src/$(DEPDIR)/gource-action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/action.cpp' object='src/gource-action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-action.obj `if test -f 'src/action.cpp'; then $(CYGPATH_W) 'src/action.cpp'; else $(CYGPATH_W) '$(srcdir)/src/action.cpp'; fi` src/gource-bloom.o: src/bloom.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-bloom.o -MD -MP -MF src/$(DEPDIR)/gource-bloom.Tpo -c -o src/gource-bloom.o `test -f 'src/bloom.cpp' || echo '$(srcdir)/'`src/bloom.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-bloom.Tpo src/$(DEPDIR)/gource-bloom.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/bloom.cpp' object='src/gource-bloom.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-bloom.o `test -f 'src/bloom.cpp' || echo '$(srcdir)/'`src/bloom.cpp src/gource-bloom.obj: src/bloom.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-bloom.obj -MD -MP -MF src/$(DEPDIR)/gource-bloom.Tpo -c -o src/gource-bloom.obj `if test -f 'src/bloom.cpp'; then $(CYGPATH_W) 'src/bloom.cpp'; else $(CYGPATH_W) '$(srcdir)/src/bloom.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-bloom.Tpo src/$(DEPDIR)/gource-bloom.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/bloom.cpp' object='src/gource-bloom.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-bloom.obj `if test -f 'src/bloom.cpp'; then $(CYGPATH_W) 'src/bloom.cpp'; else $(CYGPATH_W) '$(srcdir)/src/bloom.cpp'; fi` src/gource-caption.o: src/caption.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-caption.o -MD -MP -MF src/$(DEPDIR)/gource-caption.Tpo -c -o src/gource-caption.o `test -f 'src/caption.cpp' || echo '$(srcdir)/'`src/caption.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-caption.Tpo src/$(DEPDIR)/gource-caption.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/caption.cpp' object='src/gource-caption.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-caption.o `test -f 'src/caption.cpp' || echo '$(srcdir)/'`src/caption.cpp src/gource-caption.obj: src/caption.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-caption.obj -MD -MP -MF src/$(DEPDIR)/gource-caption.Tpo -c -o src/gource-caption.obj `if test -f 'src/caption.cpp'; then $(CYGPATH_W) 'src/caption.cpp'; else $(CYGPATH_W) '$(srcdir)/src/caption.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-caption.Tpo src/$(DEPDIR)/gource-caption.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/caption.cpp' object='src/gource-caption.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-caption.obj `if test -f 'src/caption.cpp'; then $(CYGPATH_W) 'src/caption.cpp'; else $(CYGPATH_W) '$(srcdir)/src/caption.cpp'; fi` src/core/gource-conffile.o: src/core/conffile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-conffile.o -MD -MP -MF src/core/$(DEPDIR)/gource-conffile.Tpo -c -o src/core/gource-conffile.o `test -f 'src/core/conffile.cpp' || echo '$(srcdir)/'`src/core/conffile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-conffile.Tpo src/core/$(DEPDIR)/gource-conffile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/conffile.cpp' object='src/core/gource-conffile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-conffile.o `test -f 'src/core/conffile.cpp' || echo '$(srcdir)/'`src/core/conffile.cpp src/core/gource-conffile.obj: src/core/conffile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-conffile.obj -MD -MP -MF src/core/$(DEPDIR)/gource-conffile.Tpo -c -o src/core/gource-conffile.obj `if test -f 'src/core/conffile.cpp'; then $(CYGPATH_W) 'src/core/conffile.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/conffile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-conffile.Tpo src/core/$(DEPDIR)/gource-conffile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/conffile.cpp' object='src/core/gource-conffile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-conffile.obj `if test -f 'src/core/conffile.cpp'; then $(CYGPATH_W) 'src/core/conffile.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/conffile.cpp'; fi` src/core/gource-display.o: src/core/display.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-display.o -MD -MP -MF src/core/$(DEPDIR)/gource-display.Tpo -c -o src/core/gource-display.o `test -f 'src/core/display.cpp' || echo '$(srcdir)/'`src/core/display.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-display.Tpo src/core/$(DEPDIR)/gource-display.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/display.cpp' object='src/core/gource-display.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-display.o `test -f 'src/core/display.cpp' || echo '$(srcdir)/'`src/core/display.cpp src/core/gource-display.obj: src/core/display.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-display.obj -MD -MP -MF src/core/$(DEPDIR)/gource-display.Tpo -c -o src/core/gource-display.obj `if test -f 'src/core/display.cpp'; then $(CYGPATH_W) 'src/core/display.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/display.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-display.Tpo src/core/$(DEPDIR)/gource-display.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/display.cpp' object='src/core/gource-display.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-display.obj `if test -f 'src/core/display.cpp'; then $(CYGPATH_W) 'src/core/display.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/display.cpp'; fi` src/core/gource-frustum.o: src/core/frustum.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-frustum.o -MD -MP -MF src/core/$(DEPDIR)/gource-frustum.Tpo -c -o src/core/gource-frustum.o `test -f 'src/core/frustum.cpp' || echo '$(srcdir)/'`src/core/frustum.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-frustum.Tpo src/core/$(DEPDIR)/gource-frustum.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/frustum.cpp' object='src/core/gource-frustum.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-frustum.o `test -f 'src/core/frustum.cpp' || echo '$(srcdir)/'`src/core/frustum.cpp src/core/gource-frustum.obj: src/core/frustum.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-frustum.obj -MD -MP -MF src/core/$(DEPDIR)/gource-frustum.Tpo -c -o src/core/gource-frustum.obj `if test -f 'src/core/frustum.cpp'; then $(CYGPATH_W) 'src/core/frustum.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/frustum.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-frustum.Tpo src/core/$(DEPDIR)/gource-frustum.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/frustum.cpp' object='src/core/gource-frustum.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-frustum.obj `if test -f 'src/core/frustum.cpp'; then $(CYGPATH_W) 'src/core/frustum.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/frustum.cpp'; fi` src/core/gource-fxfont.o: src/core/fxfont.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-fxfont.o -MD -MP -MF src/core/$(DEPDIR)/gource-fxfont.Tpo -c -o src/core/gource-fxfont.o `test -f 'src/core/fxfont.cpp' || echo '$(srcdir)/'`src/core/fxfont.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-fxfont.Tpo src/core/$(DEPDIR)/gource-fxfont.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/fxfont.cpp' object='src/core/gource-fxfont.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-fxfont.o `test -f 'src/core/fxfont.cpp' || echo '$(srcdir)/'`src/core/fxfont.cpp src/core/gource-fxfont.obj: src/core/fxfont.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-fxfont.obj -MD -MP -MF src/core/$(DEPDIR)/gource-fxfont.Tpo -c -o src/core/gource-fxfont.obj `if test -f 'src/core/fxfont.cpp'; then $(CYGPATH_W) 'src/core/fxfont.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/fxfont.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-fxfont.Tpo src/core/$(DEPDIR)/gource-fxfont.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/fxfont.cpp' object='src/core/gource-fxfont.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-fxfont.obj `if test -f 'src/core/fxfont.cpp'; then $(CYGPATH_W) 'src/core/fxfont.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/fxfont.cpp'; fi` src/core/gource-logger.o: src/core/logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-logger.o -MD -MP -MF src/core/$(DEPDIR)/gource-logger.Tpo -c -o src/core/gource-logger.o `test -f 'src/core/logger.cpp' || echo '$(srcdir)/'`src/core/logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-logger.Tpo src/core/$(DEPDIR)/gource-logger.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/logger.cpp' object='src/core/gource-logger.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-logger.o `test -f 'src/core/logger.cpp' || echo '$(srcdir)/'`src/core/logger.cpp src/core/gource-logger.obj: src/core/logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-logger.obj -MD -MP -MF src/core/$(DEPDIR)/gource-logger.Tpo -c -o src/core/gource-logger.obj `if test -f 'src/core/logger.cpp'; then $(CYGPATH_W) 'src/core/logger.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/logger.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-logger.Tpo src/core/$(DEPDIR)/gource-logger.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/logger.cpp' object='src/core/gource-logger.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-logger.obj `if test -f 'src/core/logger.cpp'; then $(CYGPATH_W) 'src/core/logger.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/logger.cpp'; fi` src/core/gource-mousecursor.o: src/core/mousecursor.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-mousecursor.o -MD -MP -MF src/core/$(DEPDIR)/gource-mousecursor.Tpo -c -o src/core/gource-mousecursor.o `test -f 'src/core/mousecursor.cpp' || echo '$(srcdir)/'`src/core/mousecursor.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-mousecursor.Tpo src/core/$(DEPDIR)/gource-mousecursor.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/mousecursor.cpp' object='src/core/gource-mousecursor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-mousecursor.o `test -f 'src/core/mousecursor.cpp' || echo '$(srcdir)/'`src/core/mousecursor.cpp src/core/gource-mousecursor.obj: src/core/mousecursor.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-mousecursor.obj -MD -MP -MF src/core/$(DEPDIR)/gource-mousecursor.Tpo -c -o src/core/gource-mousecursor.obj `if test -f 'src/core/mousecursor.cpp'; then $(CYGPATH_W) 'src/core/mousecursor.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/mousecursor.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-mousecursor.Tpo src/core/$(DEPDIR)/gource-mousecursor.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/mousecursor.cpp' object='src/core/gource-mousecursor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-mousecursor.obj `if test -f 'src/core/mousecursor.cpp'; then $(CYGPATH_W) 'src/core/mousecursor.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/mousecursor.cpp'; fi` src/core/gource-plane.o: src/core/plane.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-plane.o -MD -MP -MF src/core/$(DEPDIR)/gource-plane.Tpo -c -o src/core/gource-plane.o `test -f 'src/core/plane.cpp' || echo '$(srcdir)/'`src/core/plane.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-plane.Tpo src/core/$(DEPDIR)/gource-plane.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/plane.cpp' object='src/core/gource-plane.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-plane.o `test -f 'src/core/plane.cpp' || echo '$(srcdir)/'`src/core/plane.cpp src/core/gource-plane.obj: src/core/plane.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-plane.obj -MD -MP -MF src/core/$(DEPDIR)/gource-plane.Tpo -c -o src/core/gource-plane.obj `if test -f 'src/core/plane.cpp'; then $(CYGPATH_W) 'src/core/plane.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/plane.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-plane.Tpo src/core/$(DEPDIR)/gource-plane.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/plane.cpp' object='src/core/gource-plane.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-plane.obj `if test -f 'src/core/plane.cpp'; then $(CYGPATH_W) 'src/core/plane.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/plane.cpp'; fi` src/core/gource-ppm.o: src/core/ppm.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-ppm.o -MD -MP -MF src/core/$(DEPDIR)/gource-ppm.Tpo -c -o src/core/gource-ppm.o `test -f 'src/core/ppm.cpp' || echo '$(srcdir)/'`src/core/ppm.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-ppm.Tpo src/core/$(DEPDIR)/gource-ppm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/ppm.cpp' object='src/core/gource-ppm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-ppm.o `test -f 'src/core/ppm.cpp' || echo '$(srcdir)/'`src/core/ppm.cpp src/core/gource-ppm.obj: src/core/ppm.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-ppm.obj -MD -MP -MF src/core/$(DEPDIR)/gource-ppm.Tpo -c -o src/core/gource-ppm.obj `if test -f 'src/core/ppm.cpp'; then $(CYGPATH_W) 'src/core/ppm.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/ppm.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-ppm.Tpo src/core/$(DEPDIR)/gource-ppm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/ppm.cpp' object='src/core/gource-ppm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-ppm.obj `if test -f 'src/core/ppm.cpp'; then $(CYGPATH_W) 'src/core/ppm.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/ppm.cpp'; fi` src/core/gource-quadtree.o: src/core/quadtree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-quadtree.o -MD -MP -MF src/core/$(DEPDIR)/gource-quadtree.Tpo -c -o src/core/gource-quadtree.o `test -f 'src/core/quadtree.cpp' || echo '$(srcdir)/'`src/core/quadtree.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-quadtree.Tpo src/core/$(DEPDIR)/gource-quadtree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/quadtree.cpp' object='src/core/gource-quadtree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-quadtree.o `test -f 'src/core/quadtree.cpp' || echo '$(srcdir)/'`src/core/quadtree.cpp src/core/gource-quadtree.obj: src/core/quadtree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-quadtree.obj -MD -MP -MF src/core/$(DEPDIR)/gource-quadtree.Tpo -c -o src/core/gource-quadtree.obj `if test -f 'src/core/quadtree.cpp'; then $(CYGPATH_W) 'src/core/quadtree.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/quadtree.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-quadtree.Tpo src/core/$(DEPDIR)/gource-quadtree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/quadtree.cpp' object='src/core/gource-quadtree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-quadtree.obj `if test -f 'src/core/quadtree.cpp'; then $(CYGPATH_W) 'src/core/quadtree.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/quadtree.cpp'; fi` src/core/gource-regex.o: src/core/regex.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-regex.o -MD -MP -MF src/core/$(DEPDIR)/gource-regex.Tpo -c -o src/core/gource-regex.o `test -f 'src/core/regex.cpp' || echo '$(srcdir)/'`src/core/regex.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-regex.Tpo src/core/$(DEPDIR)/gource-regex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/regex.cpp' object='src/core/gource-regex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-regex.o `test -f 'src/core/regex.cpp' || echo '$(srcdir)/'`src/core/regex.cpp src/core/gource-regex.obj: src/core/regex.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-regex.obj -MD -MP -MF src/core/$(DEPDIR)/gource-regex.Tpo -c -o src/core/gource-regex.obj `if test -f 'src/core/regex.cpp'; then $(CYGPATH_W) 'src/core/regex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/regex.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-regex.Tpo src/core/$(DEPDIR)/gource-regex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/regex.cpp' object='src/core/gource-regex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-regex.obj `if test -f 'src/core/regex.cpp'; then $(CYGPATH_W) 'src/core/regex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/regex.cpp'; fi` src/core/gource-resource.o: src/core/resource.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-resource.o -MD -MP -MF src/core/$(DEPDIR)/gource-resource.Tpo -c -o src/core/gource-resource.o `test -f 'src/core/resource.cpp' || echo '$(srcdir)/'`src/core/resource.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-resource.Tpo src/core/$(DEPDIR)/gource-resource.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/resource.cpp' object='src/core/gource-resource.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-resource.o `test -f 'src/core/resource.cpp' || echo '$(srcdir)/'`src/core/resource.cpp src/core/gource-resource.obj: src/core/resource.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-resource.obj -MD -MP -MF src/core/$(DEPDIR)/gource-resource.Tpo -c -o src/core/gource-resource.obj `if test -f 'src/core/resource.cpp'; then $(CYGPATH_W) 'src/core/resource.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/resource.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-resource.Tpo src/core/$(DEPDIR)/gource-resource.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/resource.cpp' object='src/core/gource-resource.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-resource.obj `if test -f 'src/core/resource.cpp'; then $(CYGPATH_W) 'src/core/resource.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/resource.cpp'; fi` src/core/gource-sdlapp.o: src/core/sdlapp.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-sdlapp.o -MD -MP -MF src/core/$(DEPDIR)/gource-sdlapp.Tpo -c -o src/core/gource-sdlapp.o `test -f 'src/core/sdlapp.cpp' || echo '$(srcdir)/'`src/core/sdlapp.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-sdlapp.Tpo src/core/$(DEPDIR)/gource-sdlapp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/sdlapp.cpp' object='src/core/gource-sdlapp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-sdlapp.o `test -f 'src/core/sdlapp.cpp' || echo '$(srcdir)/'`src/core/sdlapp.cpp src/core/gource-sdlapp.obj: src/core/sdlapp.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-sdlapp.obj -MD -MP -MF src/core/$(DEPDIR)/gource-sdlapp.Tpo -c -o src/core/gource-sdlapp.obj `if test -f 'src/core/sdlapp.cpp'; then $(CYGPATH_W) 'src/core/sdlapp.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/sdlapp.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-sdlapp.Tpo src/core/$(DEPDIR)/gource-sdlapp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/sdlapp.cpp' object='src/core/gource-sdlapp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-sdlapp.obj `if test -f 'src/core/sdlapp.cpp'; then $(CYGPATH_W) 'src/core/sdlapp.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/sdlapp.cpp'; fi` src/core/gource-seeklog.o: src/core/seeklog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-seeklog.o -MD -MP -MF src/core/$(DEPDIR)/gource-seeklog.Tpo -c -o src/core/gource-seeklog.o `test -f 'src/core/seeklog.cpp' || echo '$(srcdir)/'`src/core/seeklog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-seeklog.Tpo src/core/$(DEPDIR)/gource-seeklog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/seeklog.cpp' object='src/core/gource-seeklog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-seeklog.o `test -f 'src/core/seeklog.cpp' || echo '$(srcdir)/'`src/core/seeklog.cpp src/core/gource-seeklog.obj: src/core/seeklog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-seeklog.obj -MD -MP -MF src/core/$(DEPDIR)/gource-seeklog.Tpo -c -o src/core/gource-seeklog.obj `if test -f 'src/core/seeklog.cpp'; then $(CYGPATH_W) 'src/core/seeklog.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/seeklog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-seeklog.Tpo src/core/$(DEPDIR)/gource-seeklog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/seeklog.cpp' object='src/core/gource-seeklog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-seeklog.obj `if test -f 'src/core/seeklog.cpp'; then $(CYGPATH_W) 'src/core/seeklog.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/seeklog.cpp'; fi` src/core/gource-settings.o: src/core/settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-settings.o -MD -MP -MF src/core/$(DEPDIR)/gource-settings.Tpo -c -o src/core/gource-settings.o `test -f 'src/core/settings.cpp' || echo '$(srcdir)/'`src/core/settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-settings.Tpo src/core/$(DEPDIR)/gource-settings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/settings.cpp' object='src/core/gource-settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-settings.o `test -f 'src/core/settings.cpp' || echo '$(srcdir)/'`src/core/settings.cpp src/core/gource-settings.obj: src/core/settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-settings.obj -MD -MP -MF src/core/$(DEPDIR)/gource-settings.Tpo -c -o src/core/gource-settings.obj `if test -f 'src/core/settings.cpp'; then $(CYGPATH_W) 'src/core/settings.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/settings.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-settings.Tpo src/core/$(DEPDIR)/gource-settings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/settings.cpp' object='src/core/gource-settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-settings.obj `if test -f 'src/core/settings.cpp'; then $(CYGPATH_W) 'src/core/settings.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/settings.cpp'; fi` src/core/gource-shader.o: src/core/shader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-shader.o -MD -MP -MF src/core/$(DEPDIR)/gource-shader.Tpo -c -o src/core/gource-shader.o `test -f 'src/core/shader.cpp' || echo '$(srcdir)/'`src/core/shader.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-shader.Tpo src/core/$(DEPDIR)/gource-shader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/shader.cpp' object='src/core/gource-shader.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-shader.o `test -f 'src/core/shader.cpp' || echo '$(srcdir)/'`src/core/shader.cpp src/core/gource-shader.obj: src/core/shader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-shader.obj -MD -MP -MF src/core/$(DEPDIR)/gource-shader.Tpo -c -o src/core/gource-shader.obj `if test -f 'src/core/shader.cpp'; then $(CYGPATH_W) 'src/core/shader.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/shader.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-shader.Tpo src/core/$(DEPDIR)/gource-shader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/shader.cpp' object='src/core/gource-shader.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-shader.obj `if test -f 'src/core/shader.cpp'; then $(CYGPATH_W) 'src/core/shader.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/shader.cpp'; fi` src/core/gource-shader_common.o: src/core/shader_common.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-shader_common.o -MD -MP -MF src/core/$(DEPDIR)/gource-shader_common.Tpo -c -o src/core/gource-shader_common.o `test -f 'src/core/shader_common.cpp' || echo '$(srcdir)/'`src/core/shader_common.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-shader_common.Tpo src/core/$(DEPDIR)/gource-shader_common.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/shader_common.cpp' object='src/core/gource-shader_common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-shader_common.o `test -f 'src/core/shader_common.cpp' || echo '$(srcdir)/'`src/core/shader_common.cpp src/core/gource-shader_common.obj: src/core/shader_common.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-shader_common.obj -MD -MP -MF src/core/$(DEPDIR)/gource-shader_common.Tpo -c -o src/core/gource-shader_common.obj `if test -f 'src/core/shader_common.cpp'; then $(CYGPATH_W) 'src/core/shader_common.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/shader_common.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-shader_common.Tpo src/core/$(DEPDIR)/gource-shader_common.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/shader_common.cpp' object='src/core/gource-shader_common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-shader_common.obj `if test -f 'src/core/shader_common.cpp'; then $(CYGPATH_W) 'src/core/shader_common.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/shader_common.cpp'; fi` src/core/gource-stringhash.o: src/core/stringhash.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-stringhash.o -MD -MP -MF src/core/$(DEPDIR)/gource-stringhash.Tpo -c -o src/core/gource-stringhash.o `test -f 'src/core/stringhash.cpp' || echo '$(srcdir)/'`src/core/stringhash.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-stringhash.Tpo src/core/$(DEPDIR)/gource-stringhash.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/stringhash.cpp' object='src/core/gource-stringhash.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-stringhash.o `test -f 'src/core/stringhash.cpp' || echo '$(srcdir)/'`src/core/stringhash.cpp src/core/gource-stringhash.obj: src/core/stringhash.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-stringhash.obj -MD -MP -MF src/core/$(DEPDIR)/gource-stringhash.Tpo -c -o src/core/gource-stringhash.obj `if test -f 'src/core/stringhash.cpp'; then $(CYGPATH_W) 'src/core/stringhash.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/stringhash.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-stringhash.Tpo src/core/$(DEPDIR)/gource-stringhash.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/stringhash.cpp' object='src/core/gource-stringhash.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-stringhash.obj `if test -f 'src/core/stringhash.cpp'; then $(CYGPATH_W) 'src/core/stringhash.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/stringhash.cpp'; fi` src/core/gource-texture.o: src/core/texture.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-texture.o -MD -MP -MF src/core/$(DEPDIR)/gource-texture.Tpo -c -o src/core/gource-texture.o `test -f 'src/core/texture.cpp' || echo '$(srcdir)/'`src/core/texture.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-texture.Tpo src/core/$(DEPDIR)/gource-texture.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/texture.cpp' object='src/core/gource-texture.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-texture.o `test -f 'src/core/texture.cpp' || echo '$(srcdir)/'`src/core/texture.cpp src/core/gource-texture.obj: src/core/texture.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-texture.obj -MD -MP -MF src/core/$(DEPDIR)/gource-texture.Tpo -c -o src/core/gource-texture.obj `if test -f 'src/core/texture.cpp'; then $(CYGPATH_W) 'src/core/texture.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/texture.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-texture.Tpo src/core/$(DEPDIR)/gource-texture.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/texture.cpp' object='src/core/gource-texture.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-texture.obj `if test -f 'src/core/texture.cpp'; then $(CYGPATH_W) 'src/core/texture.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/texture.cpp'; fi` src/core/gource-png_writer.o: src/core/png_writer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-png_writer.o -MD -MP -MF src/core/$(DEPDIR)/gource-png_writer.Tpo -c -o src/core/gource-png_writer.o `test -f 'src/core/png_writer.cpp' || echo '$(srcdir)/'`src/core/png_writer.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-png_writer.Tpo src/core/$(DEPDIR)/gource-png_writer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/png_writer.cpp' object='src/core/gource-png_writer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-png_writer.o `test -f 'src/core/png_writer.cpp' || echo '$(srcdir)/'`src/core/png_writer.cpp src/core/gource-png_writer.obj: src/core/png_writer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-png_writer.obj -MD -MP -MF src/core/$(DEPDIR)/gource-png_writer.Tpo -c -o src/core/gource-png_writer.obj `if test -f 'src/core/png_writer.cpp'; then $(CYGPATH_W) 'src/core/png_writer.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/png_writer.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-png_writer.Tpo src/core/$(DEPDIR)/gource-png_writer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/png_writer.cpp' object='src/core/gource-png_writer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-png_writer.obj `if test -f 'src/core/png_writer.cpp'; then $(CYGPATH_W) 'src/core/png_writer.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/png_writer.cpp'; fi` src/core/gource-timezone.o: src/core/timezone.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-timezone.o -MD -MP -MF src/core/$(DEPDIR)/gource-timezone.Tpo -c -o src/core/gource-timezone.o `test -f 'src/core/timezone.cpp' || echo '$(srcdir)/'`src/core/timezone.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-timezone.Tpo src/core/$(DEPDIR)/gource-timezone.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/timezone.cpp' object='src/core/gource-timezone.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-timezone.o `test -f 'src/core/timezone.cpp' || echo '$(srcdir)/'`src/core/timezone.cpp src/core/gource-timezone.obj: src/core/timezone.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-timezone.obj -MD -MP -MF src/core/$(DEPDIR)/gource-timezone.Tpo -c -o src/core/gource-timezone.obj `if test -f 'src/core/timezone.cpp'; then $(CYGPATH_W) 'src/core/timezone.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/timezone.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-timezone.Tpo src/core/$(DEPDIR)/gource-timezone.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/timezone.cpp' object='src/core/gource-timezone.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-timezone.obj `if test -f 'src/core/timezone.cpp'; then $(CYGPATH_W) 'src/core/timezone.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/timezone.cpp'; fi` src/core/gource-vbo.o: src/core/vbo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-vbo.o -MD -MP -MF src/core/$(DEPDIR)/gource-vbo.Tpo -c -o src/core/gource-vbo.o `test -f 'src/core/vbo.cpp' || echo '$(srcdir)/'`src/core/vbo.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-vbo.Tpo src/core/$(DEPDIR)/gource-vbo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/vbo.cpp' object='src/core/gource-vbo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-vbo.o `test -f 'src/core/vbo.cpp' || echo '$(srcdir)/'`src/core/vbo.cpp src/core/gource-vbo.obj: src/core/vbo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-vbo.obj -MD -MP -MF src/core/$(DEPDIR)/gource-vbo.Tpo -c -o src/core/gource-vbo.obj `if test -f 'src/core/vbo.cpp'; then $(CYGPATH_W) 'src/core/vbo.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/vbo.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-vbo.Tpo src/core/$(DEPDIR)/gource-vbo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/vbo.cpp' object='src/core/gource-vbo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-vbo.obj `if test -f 'src/core/vbo.cpp'; then $(CYGPATH_W) 'src/core/vbo.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/vbo.cpp'; fi` src/core/gource-vectors.o: src/core/vectors.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-vectors.o -MD -MP -MF src/core/$(DEPDIR)/gource-vectors.Tpo -c -o src/core/gource-vectors.o `test -f 'src/core/vectors.cpp' || echo '$(srcdir)/'`src/core/vectors.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-vectors.Tpo src/core/$(DEPDIR)/gource-vectors.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/vectors.cpp' object='src/core/gource-vectors.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-vectors.o `test -f 'src/core/vectors.cpp' || echo '$(srcdir)/'`src/core/vectors.cpp src/core/gource-vectors.obj: src/core/vectors.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource-vectors.obj -MD -MP -MF src/core/$(DEPDIR)/gource-vectors.Tpo -c -o src/core/gource-vectors.obj `if test -f 'src/core/vectors.cpp'; then $(CYGPATH_W) 'src/core/vectors.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/vectors.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource-vectors.Tpo src/core/$(DEPDIR)/gource-vectors.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/vectors.cpp' object='src/core/gource-vectors.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource-vectors.obj `if test -f 'src/core/vectors.cpp'; then $(CYGPATH_W) 'src/core/vectors.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/vectors.cpp'; fi` src/gource-dirnode.o: src/dirnode.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-dirnode.o -MD -MP -MF src/$(DEPDIR)/gource-dirnode.Tpo -c -o src/gource-dirnode.o `test -f 'src/dirnode.cpp' || echo '$(srcdir)/'`src/dirnode.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-dirnode.Tpo src/$(DEPDIR)/gource-dirnode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/dirnode.cpp' object='src/gource-dirnode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-dirnode.o `test -f 'src/dirnode.cpp' || echo '$(srcdir)/'`src/dirnode.cpp src/gource-dirnode.obj: src/dirnode.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-dirnode.obj -MD -MP -MF src/$(DEPDIR)/gource-dirnode.Tpo -c -o src/gource-dirnode.obj `if test -f 'src/dirnode.cpp'; then $(CYGPATH_W) 'src/dirnode.cpp'; else $(CYGPATH_W) '$(srcdir)/src/dirnode.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-dirnode.Tpo src/$(DEPDIR)/gource-dirnode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/dirnode.cpp' object='src/gource-dirnode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-dirnode.obj `if test -f 'src/dirnode.cpp'; then $(CYGPATH_W) 'src/dirnode.cpp'; else $(CYGPATH_W) '$(srcdir)/src/dirnode.cpp'; fi` src/gource-file.o: src/file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-file.o -MD -MP -MF src/$(DEPDIR)/gource-file.Tpo -c -o src/gource-file.o `test -f 'src/file.cpp' || echo '$(srcdir)/'`src/file.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-file.Tpo src/$(DEPDIR)/gource-file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/file.cpp' object='src/gource-file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-file.o `test -f 'src/file.cpp' || echo '$(srcdir)/'`src/file.cpp src/gource-file.obj: src/file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-file.obj -MD -MP -MF src/$(DEPDIR)/gource-file.Tpo -c -o src/gource-file.obj `if test -f 'src/file.cpp'; then $(CYGPATH_W) 'src/file.cpp'; else $(CYGPATH_W) '$(srcdir)/src/file.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-file.Tpo src/$(DEPDIR)/gource-file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/file.cpp' object='src/gource-file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-file.obj `if test -f 'src/file.cpp'; then $(CYGPATH_W) 'src/file.cpp'; else $(CYGPATH_W) '$(srcdir)/src/file.cpp'; fi` src/formats/gource-apache.o: src/formats/apache.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-apache.o -MD -MP -MF src/formats/$(DEPDIR)/gource-apache.Tpo -c -o src/formats/gource-apache.o `test -f 'src/formats/apache.cpp' || echo '$(srcdir)/'`src/formats/apache.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-apache.Tpo src/formats/$(DEPDIR)/gource-apache.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/apache.cpp' object='src/formats/gource-apache.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-apache.o `test -f 'src/formats/apache.cpp' || echo '$(srcdir)/'`src/formats/apache.cpp src/formats/gource-apache.obj: src/formats/apache.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-apache.obj -MD -MP -MF src/formats/$(DEPDIR)/gource-apache.Tpo -c -o src/formats/gource-apache.obj `if test -f 'src/formats/apache.cpp'; then $(CYGPATH_W) 'src/formats/apache.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/apache.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-apache.Tpo src/formats/$(DEPDIR)/gource-apache.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/apache.cpp' object='src/formats/gource-apache.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-apache.obj `if test -f 'src/formats/apache.cpp'; then $(CYGPATH_W) 'src/formats/apache.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/apache.cpp'; fi` src/formats/gource-bzr.o: src/formats/bzr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-bzr.o -MD -MP -MF src/formats/$(DEPDIR)/gource-bzr.Tpo -c -o src/formats/gource-bzr.o `test -f 'src/formats/bzr.cpp' || echo '$(srcdir)/'`src/formats/bzr.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-bzr.Tpo src/formats/$(DEPDIR)/gource-bzr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/bzr.cpp' object='src/formats/gource-bzr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-bzr.o `test -f 'src/formats/bzr.cpp' || echo '$(srcdir)/'`src/formats/bzr.cpp src/formats/gource-bzr.obj: src/formats/bzr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-bzr.obj -MD -MP -MF src/formats/$(DEPDIR)/gource-bzr.Tpo -c -o src/formats/gource-bzr.obj `if test -f 'src/formats/bzr.cpp'; then $(CYGPATH_W) 'src/formats/bzr.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/bzr.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-bzr.Tpo src/formats/$(DEPDIR)/gource-bzr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/bzr.cpp' object='src/formats/gource-bzr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-bzr.obj `if test -f 'src/formats/bzr.cpp'; then $(CYGPATH_W) 'src/formats/bzr.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/bzr.cpp'; fi` src/formats/gource-commitlog.o: src/formats/commitlog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-commitlog.o -MD -MP -MF src/formats/$(DEPDIR)/gource-commitlog.Tpo -c -o src/formats/gource-commitlog.o `test -f 'src/formats/commitlog.cpp' || echo '$(srcdir)/'`src/formats/commitlog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-commitlog.Tpo src/formats/$(DEPDIR)/gource-commitlog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/commitlog.cpp' object='src/formats/gource-commitlog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-commitlog.o `test -f 'src/formats/commitlog.cpp' || echo '$(srcdir)/'`src/formats/commitlog.cpp src/formats/gource-commitlog.obj: src/formats/commitlog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-commitlog.obj -MD -MP -MF src/formats/$(DEPDIR)/gource-commitlog.Tpo -c -o src/formats/gource-commitlog.obj `if test -f 'src/formats/commitlog.cpp'; then $(CYGPATH_W) 'src/formats/commitlog.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/commitlog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-commitlog.Tpo src/formats/$(DEPDIR)/gource-commitlog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/commitlog.cpp' object='src/formats/gource-commitlog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-commitlog.obj `if test -f 'src/formats/commitlog.cpp'; then $(CYGPATH_W) 'src/formats/commitlog.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/commitlog.cpp'; fi` src/formats/gource-custom.o: src/formats/custom.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-custom.o -MD -MP -MF src/formats/$(DEPDIR)/gource-custom.Tpo -c -o src/formats/gource-custom.o `test -f 'src/formats/custom.cpp' || echo '$(srcdir)/'`src/formats/custom.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-custom.Tpo src/formats/$(DEPDIR)/gource-custom.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/custom.cpp' object='src/formats/gource-custom.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-custom.o `test -f 'src/formats/custom.cpp' || echo '$(srcdir)/'`src/formats/custom.cpp src/formats/gource-custom.obj: src/formats/custom.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-custom.obj -MD -MP -MF src/formats/$(DEPDIR)/gource-custom.Tpo -c -o src/formats/gource-custom.obj `if test -f 'src/formats/custom.cpp'; then $(CYGPATH_W) 'src/formats/custom.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/custom.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-custom.Tpo src/formats/$(DEPDIR)/gource-custom.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/custom.cpp' object='src/formats/gource-custom.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-custom.obj `if test -f 'src/formats/custom.cpp'; then $(CYGPATH_W) 'src/formats/custom.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/custom.cpp'; fi` src/formats/gource-cvs-exp.o: src/formats/cvs-exp.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-cvs-exp.o -MD -MP -MF src/formats/$(DEPDIR)/gource-cvs-exp.Tpo -c -o src/formats/gource-cvs-exp.o `test -f 'src/formats/cvs-exp.cpp' || echo '$(srcdir)/'`src/formats/cvs-exp.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-cvs-exp.Tpo src/formats/$(DEPDIR)/gource-cvs-exp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/cvs-exp.cpp' object='src/formats/gource-cvs-exp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-cvs-exp.o `test -f 'src/formats/cvs-exp.cpp' || echo '$(srcdir)/'`src/formats/cvs-exp.cpp src/formats/gource-cvs-exp.obj: src/formats/cvs-exp.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-cvs-exp.obj -MD -MP -MF src/formats/$(DEPDIR)/gource-cvs-exp.Tpo -c -o src/formats/gource-cvs-exp.obj `if test -f 'src/formats/cvs-exp.cpp'; then $(CYGPATH_W) 'src/formats/cvs-exp.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/cvs-exp.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-cvs-exp.Tpo src/formats/$(DEPDIR)/gource-cvs-exp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/cvs-exp.cpp' object='src/formats/gource-cvs-exp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-cvs-exp.obj `if test -f 'src/formats/cvs-exp.cpp'; then $(CYGPATH_W) 'src/formats/cvs-exp.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/cvs-exp.cpp'; fi` src/formats/gource-cvs2cl.o: src/formats/cvs2cl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-cvs2cl.o -MD -MP -MF src/formats/$(DEPDIR)/gource-cvs2cl.Tpo -c -o src/formats/gource-cvs2cl.o `test -f 'src/formats/cvs2cl.cpp' || echo '$(srcdir)/'`src/formats/cvs2cl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-cvs2cl.Tpo src/formats/$(DEPDIR)/gource-cvs2cl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/cvs2cl.cpp' object='src/formats/gource-cvs2cl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-cvs2cl.o `test -f 'src/formats/cvs2cl.cpp' || echo '$(srcdir)/'`src/formats/cvs2cl.cpp src/formats/gource-cvs2cl.obj: src/formats/cvs2cl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-cvs2cl.obj -MD -MP -MF src/formats/$(DEPDIR)/gource-cvs2cl.Tpo -c -o src/formats/gource-cvs2cl.obj `if test -f 'src/formats/cvs2cl.cpp'; then $(CYGPATH_W) 'src/formats/cvs2cl.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/cvs2cl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-cvs2cl.Tpo src/formats/$(DEPDIR)/gource-cvs2cl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/cvs2cl.cpp' object='src/formats/gource-cvs2cl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-cvs2cl.obj `if test -f 'src/formats/cvs2cl.cpp'; then $(CYGPATH_W) 'src/formats/cvs2cl.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/cvs2cl.cpp'; fi` src/formats/gource-git.o: src/formats/git.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-git.o -MD -MP -MF src/formats/$(DEPDIR)/gource-git.Tpo -c -o src/formats/gource-git.o `test -f 'src/formats/git.cpp' || echo '$(srcdir)/'`src/formats/git.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-git.Tpo src/formats/$(DEPDIR)/gource-git.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/git.cpp' object='src/formats/gource-git.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-git.o `test -f 'src/formats/git.cpp' || echo '$(srcdir)/'`src/formats/git.cpp src/formats/gource-git.obj: src/formats/git.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-git.obj -MD -MP -MF src/formats/$(DEPDIR)/gource-git.Tpo -c -o src/formats/gource-git.obj `if test -f 'src/formats/git.cpp'; then $(CYGPATH_W) 'src/formats/git.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/git.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-git.Tpo src/formats/$(DEPDIR)/gource-git.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/git.cpp' object='src/formats/gource-git.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-git.obj `if test -f 'src/formats/git.cpp'; then $(CYGPATH_W) 'src/formats/git.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/git.cpp'; fi` src/formats/gource-gitraw.o: src/formats/gitraw.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-gitraw.o -MD -MP -MF src/formats/$(DEPDIR)/gource-gitraw.Tpo -c -o src/formats/gource-gitraw.o `test -f 'src/formats/gitraw.cpp' || echo '$(srcdir)/'`src/formats/gitraw.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-gitraw.Tpo src/formats/$(DEPDIR)/gource-gitraw.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/gitraw.cpp' object='src/formats/gource-gitraw.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-gitraw.o `test -f 'src/formats/gitraw.cpp' || echo '$(srcdir)/'`src/formats/gitraw.cpp src/formats/gource-gitraw.obj: src/formats/gitraw.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-gitraw.obj -MD -MP -MF src/formats/$(DEPDIR)/gource-gitraw.Tpo -c -o src/formats/gource-gitraw.obj `if test -f 'src/formats/gitraw.cpp'; then $(CYGPATH_W) 'src/formats/gitraw.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/gitraw.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-gitraw.Tpo src/formats/$(DEPDIR)/gource-gitraw.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/gitraw.cpp' object='src/formats/gource-gitraw.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-gitraw.obj `if test -f 'src/formats/gitraw.cpp'; then $(CYGPATH_W) 'src/formats/gitraw.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/gitraw.cpp'; fi` src/formats/gource-hg.o: src/formats/hg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-hg.o -MD -MP -MF src/formats/$(DEPDIR)/gource-hg.Tpo -c -o src/formats/gource-hg.o `test -f 'src/formats/hg.cpp' || echo '$(srcdir)/'`src/formats/hg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-hg.Tpo src/formats/$(DEPDIR)/gource-hg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/hg.cpp' object='src/formats/gource-hg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-hg.o `test -f 'src/formats/hg.cpp' || echo '$(srcdir)/'`src/formats/hg.cpp src/formats/gource-hg.obj: src/formats/hg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-hg.obj -MD -MP -MF src/formats/$(DEPDIR)/gource-hg.Tpo -c -o src/formats/gource-hg.obj `if test -f 'src/formats/hg.cpp'; then $(CYGPATH_W) 'src/formats/hg.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/hg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-hg.Tpo src/formats/$(DEPDIR)/gource-hg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/hg.cpp' object='src/formats/gource-hg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-hg.obj `if test -f 'src/formats/hg.cpp'; then $(CYGPATH_W) 'src/formats/hg.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/hg.cpp'; fi` src/formats/gource-svn.o: src/formats/svn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-svn.o -MD -MP -MF src/formats/$(DEPDIR)/gource-svn.Tpo -c -o src/formats/gource-svn.o `test -f 'src/formats/svn.cpp' || echo '$(srcdir)/'`src/formats/svn.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-svn.Tpo src/formats/$(DEPDIR)/gource-svn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/svn.cpp' object='src/formats/gource-svn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-svn.o `test -f 'src/formats/svn.cpp' || echo '$(srcdir)/'`src/formats/svn.cpp src/formats/gource-svn.obj: src/formats/svn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource-svn.obj -MD -MP -MF src/formats/$(DEPDIR)/gource-svn.Tpo -c -o src/formats/gource-svn.obj `if test -f 'src/formats/svn.cpp'; then $(CYGPATH_W) 'src/formats/svn.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/svn.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource-svn.Tpo src/formats/$(DEPDIR)/gource-svn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/svn.cpp' object='src/formats/gource-svn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource-svn.obj `if test -f 'src/formats/svn.cpp'; then $(CYGPATH_W) 'src/formats/svn.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/svn.cpp'; fi` src/gource-gource.o: src/gource.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-gource.o -MD -MP -MF src/$(DEPDIR)/gource-gource.Tpo -c -o src/gource-gource.o `test -f 'src/gource.cpp' || echo '$(srcdir)/'`src/gource.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-gource.Tpo src/$(DEPDIR)/gource-gource.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource.cpp' object='src/gource-gource.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-gource.o `test -f 'src/gource.cpp' || echo '$(srcdir)/'`src/gource.cpp src/gource-gource.obj: src/gource.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-gource.obj -MD -MP -MF src/$(DEPDIR)/gource-gource.Tpo -c -o src/gource-gource.obj `if test -f 'src/gource.cpp'; then $(CYGPATH_W) 'src/gource.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-gource.Tpo src/$(DEPDIR)/gource-gource.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource.cpp' object='src/gource-gource.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-gource.obj `if test -f 'src/gource.cpp'; then $(CYGPATH_W) 'src/gource.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource.cpp'; fi` src/gource-gource_shell.o: src/gource_shell.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-gource_shell.o -MD -MP -MF src/$(DEPDIR)/gource-gource_shell.Tpo -c -o src/gource-gource_shell.o `test -f 'src/gource_shell.cpp' || echo '$(srcdir)/'`src/gource_shell.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-gource_shell.Tpo src/$(DEPDIR)/gource-gource_shell.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource_shell.cpp' object='src/gource-gource_shell.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-gource_shell.o `test -f 'src/gource_shell.cpp' || echo '$(srcdir)/'`src/gource_shell.cpp src/gource-gource_shell.obj: src/gource_shell.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-gource_shell.obj -MD -MP -MF src/$(DEPDIR)/gource-gource_shell.Tpo -c -o src/gource-gource_shell.obj `if test -f 'src/gource_shell.cpp'; then $(CYGPATH_W) 'src/gource_shell.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource_shell.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-gource_shell.Tpo src/$(DEPDIR)/gource-gource_shell.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource_shell.cpp' object='src/gource-gource_shell.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-gource_shell.obj `if test -f 'src/gource_shell.cpp'; then $(CYGPATH_W) 'src/gource_shell.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource_shell.cpp'; fi` src/gource-gource_settings.o: src/gource_settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-gource_settings.o -MD -MP -MF src/$(DEPDIR)/gource-gource_settings.Tpo -c -o src/gource-gource_settings.o `test -f 'src/gource_settings.cpp' || echo '$(srcdir)/'`src/gource_settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-gource_settings.Tpo src/$(DEPDIR)/gource-gource_settings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource_settings.cpp' object='src/gource-gource_settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-gource_settings.o `test -f 'src/gource_settings.cpp' || echo '$(srcdir)/'`src/gource_settings.cpp src/gource-gource_settings.obj: src/gource_settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-gource_settings.obj -MD -MP -MF src/$(DEPDIR)/gource-gource_settings.Tpo -c -o src/gource-gource_settings.obj `if test -f 'src/gource_settings.cpp'; then $(CYGPATH_W) 'src/gource_settings.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource_settings.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-gource_settings.Tpo src/$(DEPDIR)/gource-gource_settings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource_settings.cpp' object='src/gource-gource_settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-gource_settings.obj `if test -f 'src/gource_settings.cpp'; then $(CYGPATH_W) 'src/gource_settings.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource_settings.cpp'; fi` src/gource-key.o: src/key.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-key.o -MD -MP -MF src/$(DEPDIR)/gource-key.Tpo -c -o src/gource-key.o `test -f 'src/key.cpp' || echo '$(srcdir)/'`src/key.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-key.Tpo src/$(DEPDIR)/gource-key.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/key.cpp' object='src/gource-key.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-key.o `test -f 'src/key.cpp' || echo '$(srcdir)/'`src/key.cpp src/gource-key.obj: src/key.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-key.obj -MD -MP -MF src/$(DEPDIR)/gource-key.Tpo -c -o src/gource-key.obj `if test -f 'src/key.cpp'; then $(CYGPATH_W) 'src/key.cpp'; else $(CYGPATH_W) '$(srcdir)/src/key.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-key.Tpo src/$(DEPDIR)/gource-key.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/key.cpp' object='src/gource-key.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-key.obj `if test -f 'src/key.cpp'; then $(CYGPATH_W) 'src/key.cpp'; else $(CYGPATH_W) '$(srcdir)/src/key.cpp'; fi` src/gource-logmill.o: src/logmill.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-logmill.o -MD -MP -MF src/$(DEPDIR)/gource-logmill.Tpo -c -o src/gource-logmill.o `test -f 'src/logmill.cpp' || echo '$(srcdir)/'`src/logmill.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-logmill.Tpo src/$(DEPDIR)/gource-logmill.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/logmill.cpp' object='src/gource-logmill.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-logmill.o `test -f 'src/logmill.cpp' || echo '$(srcdir)/'`src/logmill.cpp src/gource-logmill.obj: src/logmill.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-logmill.obj -MD -MP -MF src/$(DEPDIR)/gource-logmill.Tpo -c -o src/gource-logmill.obj `if test -f 'src/logmill.cpp'; then $(CYGPATH_W) 'src/logmill.cpp'; else $(CYGPATH_W) '$(srcdir)/src/logmill.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-logmill.Tpo src/$(DEPDIR)/gource-logmill.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/logmill.cpp' object='src/gource-logmill.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-logmill.obj `if test -f 'src/logmill.cpp'; then $(CYGPATH_W) 'src/logmill.cpp'; else $(CYGPATH_W) '$(srcdir)/src/logmill.cpp'; fi` src/gource-pawn.o: src/pawn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-pawn.o -MD -MP -MF src/$(DEPDIR)/gource-pawn.Tpo -c -o src/gource-pawn.o `test -f 'src/pawn.cpp' || echo '$(srcdir)/'`src/pawn.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-pawn.Tpo src/$(DEPDIR)/gource-pawn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/pawn.cpp' object='src/gource-pawn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-pawn.o `test -f 'src/pawn.cpp' || echo '$(srcdir)/'`src/pawn.cpp src/gource-pawn.obj: src/pawn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-pawn.obj -MD -MP -MF src/$(DEPDIR)/gource-pawn.Tpo -c -o src/gource-pawn.obj `if test -f 'src/pawn.cpp'; then $(CYGPATH_W) 'src/pawn.cpp'; else $(CYGPATH_W) '$(srcdir)/src/pawn.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-pawn.Tpo src/$(DEPDIR)/gource-pawn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/pawn.cpp' object='src/gource-pawn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-pawn.obj `if test -f 'src/pawn.cpp'; then $(CYGPATH_W) 'src/pawn.cpp'; else $(CYGPATH_W) '$(srcdir)/src/pawn.cpp'; fi` src/gource-slider.o: src/slider.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-slider.o -MD -MP -MF src/$(DEPDIR)/gource-slider.Tpo -c -o src/gource-slider.o `test -f 'src/slider.cpp' || echo '$(srcdir)/'`src/slider.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-slider.Tpo src/$(DEPDIR)/gource-slider.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/slider.cpp' object='src/gource-slider.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-slider.o `test -f 'src/slider.cpp' || echo '$(srcdir)/'`src/slider.cpp src/gource-slider.obj: src/slider.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-slider.obj -MD -MP -MF src/$(DEPDIR)/gource-slider.Tpo -c -o src/gource-slider.obj `if test -f 'src/slider.cpp'; then $(CYGPATH_W) 'src/slider.cpp'; else $(CYGPATH_W) '$(srcdir)/src/slider.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-slider.Tpo src/$(DEPDIR)/gource-slider.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/slider.cpp' object='src/gource-slider.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-slider.obj `if test -f 'src/slider.cpp'; then $(CYGPATH_W) 'src/slider.cpp'; else $(CYGPATH_W) '$(srcdir)/src/slider.cpp'; fi` src/gource-spline.o: src/spline.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-spline.o -MD -MP -MF src/$(DEPDIR)/gource-spline.Tpo -c -o src/gource-spline.o `test -f 'src/spline.cpp' || echo '$(srcdir)/'`src/spline.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-spline.Tpo src/$(DEPDIR)/gource-spline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/spline.cpp' object='src/gource-spline.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-spline.o `test -f 'src/spline.cpp' || echo '$(srcdir)/'`src/spline.cpp src/gource-spline.obj: src/spline.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-spline.obj -MD -MP -MF src/$(DEPDIR)/gource-spline.Tpo -c -o src/gource-spline.obj `if test -f 'src/spline.cpp'; then $(CYGPATH_W) 'src/spline.cpp'; else $(CYGPATH_W) '$(srcdir)/src/spline.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-spline.Tpo src/$(DEPDIR)/gource-spline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/spline.cpp' object='src/gource-spline.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-spline.obj `if test -f 'src/spline.cpp'; then $(CYGPATH_W) 'src/spline.cpp'; else $(CYGPATH_W) '$(srcdir)/src/spline.cpp'; fi` src/gource-textbox.o: src/textbox.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-textbox.o -MD -MP -MF src/$(DEPDIR)/gource-textbox.Tpo -c -o src/gource-textbox.o `test -f 'src/textbox.cpp' || echo '$(srcdir)/'`src/textbox.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-textbox.Tpo src/$(DEPDIR)/gource-textbox.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/textbox.cpp' object='src/gource-textbox.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-textbox.o `test -f 'src/textbox.cpp' || echo '$(srcdir)/'`src/textbox.cpp src/gource-textbox.obj: src/textbox.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-textbox.obj -MD -MP -MF src/$(DEPDIR)/gource-textbox.Tpo -c -o src/gource-textbox.obj `if test -f 'src/textbox.cpp'; then $(CYGPATH_W) 'src/textbox.cpp'; else $(CYGPATH_W) '$(srcdir)/src/textbox.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-textbox.Tpo src/$(DEPDIR)/gource-textbox.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/textbox.cpp' object='src/gource-textbox.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-textbox.obj `if test -f 'src/textbox.cpp'; then $(CYGPATH_W) 'src/textbox.cpp'; else $(CYGPATH_W) '$(srcdir)/src/textbox.cpp'; fi` src/gource-user.o: src/user.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-user.o -MD -MP -MF src/$(DEPDIR)/gource-user.Tpo -c -o src/gource-user.o `test -f 'src/user.cpp' || echo '$(srcdir)/'`src/user.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-user.Tpo src/$(DEPDIR)/gource-user.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/user.cpp' object='src/gource-user.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-user.o `test -f 'src/user.cpp' || echo '$(srcdir)/'`src/user.cpp src/gource-user.obj: src/user.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-user.obj -MD -MP -MF src/$(DEPDIR)/gource-user.Tpo -c -o src/gource-user.obj `if test -f 'src/user.cpp'; then $(CYGPATH_W) 'src/user.cpp'; else $(CYGPATH_W) '$(srcdir)/src/user.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-user.Tpo src/$(DEPDIR)/gource-user.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/user.cpp' object='src/gource-user.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-user.obj `if test -f 'src/user.cpp'; then $(CYGPATH_W) 'src/user.cpp'; else $(CYGPATH_W) '$(srcdir)/src/user.cpp'; fi` src/gource-zoomcamera.o: src/zoomcamera.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-zoomcamera.o -MD -MP -MF src/$(DEPDIR)/gource-zoomcamera.Tpo -c -o src/gource-zoomcamera.o `test -f 'src/zoomcamera.cpp' || echo '$(srcdir)/'`src/zoomcamera.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-zoomcamera.Tpo src/$(DEPDIR)/gource-zoomcamera.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/zoomcamera.cpp' object='src/gource-zoomcamera.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-zoomcamera.o `test -f 'src/zoomcamera.cpp' || echo '$(srcdir)/'`src/zoomcamera.cpp src/gource-zoomcamera.obj: src/zoomcamera.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/gource-zoomcamera.obj -MD -MP -MF src/$(DEPDIR)/gource-zoomcamera.Tpo -c -o src/gource-zoomcamera.obj `if test -f 'src/zoomcamera.cpp'; then $(CYGPATH_W) 'src/zoomcamera.cpp'; else $(CYGPATH_W) '$(srcdir)/src/zoomcamera.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource-zoomcamera.Tpo src/$(DEPDIR)/gource-zoomcamera.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/zoomcamera.cpp' object='src/gource-zoomcamera.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/gource-zoomcamera.obj `if test -f 'src/zoomcamera.cpp'; then $(CYGPATH_W) 'src/zoomcamera.cpp'; else $(CYGPATH_W) '$(srcdir)/src/zoomcamera.cpp'; fi` src/tinyxml/gource-tinyxmlerror.o: src/tinyxml/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource-tinyxmlerror.o -MD -MP -MF src/tinyxml/$(DEPDIR)/gource-tinyxmlerror.Tpo -c -o src/tinyxml/gource-tinyxmlerror.o `test -f 'src/tinyxml/tinyxmlerror.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource-tinyxmlerror.Tpo src/tinyxml/$(DEPDIR)/gource-tinyxmlerror.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxmlerror.cpp' object='src/tinyxml/gource-tinyxmlerror.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource-tinyxmlerror.o `test -f 'src/tinyxml/tinyxmlerror.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxmlerror.cpp src/tinyxml/gource-tinyxmlerror.obj: src/tinyxml/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource-tinyxmlerror.obj -MD -MP -MF src/tinyxml/$(DEPDIR)/gource-tinyxmlerror.Tpo -c -o src/tinyxml/gource-tinyxmlerror.obj `if test -f 'src/tinyxml/tinyxmlerror.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxmlerror.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxmlerror.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource-tinyxmlerror.Tpo src/tinyxml/$(DEPDIR)/gource-tinyxmlerror.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxmlerror.cpp' object='src/tinyxml/gource-tinyxmlerror.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource-tinyxmlerror.obj `if test -f 'src/tinyxml/tinyxmlerror.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxmlerror.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxmlerror.cpp'; fi` src/tinyxml/gource-tinystr.o: src/tinyxml/tinystr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource-tinystr.o -MD -MP -MF src/tinyxml/$(DEPDIR)/gource-tinystr.Tpo -c -o src/tinyxml/gource-tinystr.o `test -f 'src/tinyxml/tinystr.cpp' || echo '$(srcdir)/'`src/tinyxml/tinystr.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource-tinystr.Tpo src/tinyxml/$(DEPDIR)/gource-tinystr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinystr.cpp' object='src/tinyxml/gource-tinystr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource-tinystr.o `test -f 'src/tinyxml/tinystr.cpp' || echo '$(srcdir)/'`src/tinyxml/tinystr.cpp src/tinyxml/gource-tinystr.obj: src/tinyxml/tinystr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource-tinystr.obj -MD -MP -MF src/tinyxml/$(DEPDIR)/gource-tinystr.Tpo -c -o src/tinyxml/gource-tinystr.obj `if test -f 'src/tinyxml/tinystr.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinystr.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinystr.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource-tinystr.Tpo src/tinyxml/$(DEPDIR)/gource-tinystr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinystr.cpp' object='src/tinyxml/gource-tinystr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource-tinystr.obj `if test -f 'src/tinyxml/tinystr.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinystr.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinystr.cpp'; fi` src/tinyxml/gource-tinyxml.o: src/tinyxml/tinyxml.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource-tinyxml.o -MD -MP -MF src/tinyxml/$(DEPDIR)/gource-tinyxml.Tpo -c -o src/tinyxml/gource-tinyxml.o `test -f 'src/tinyxml/tinyxml.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxml.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource-tinyxml.Tpo src/tinyxml/$(DEPDIR)/gource-tinyxml.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxml.cpp' object='src/tinyxml/gource-tinyxml.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource-tinyxml.o `test -f 'src/tinyxml/tinyxml.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxml.cpp src/tinyxml/gource-tinyxml.obj: src/tinyxml/tinyxml.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource-tinyxml.obj -MD -MP -MF src/tinyxml/$(DEPDIR)/gource-tinyxml.Tpo -c -o src/tinyxml/gource-tinyxml.obj `if test -f 'src/tinyxml/tinyxml.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxml.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxml.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource-tinyxml.Tpo src/tinyxml/$(DEPDIR)/gource-tinyxml.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxml.cpp' object='src/tinyxml/gource-tinyxml.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource-tinyxml.obj `if test -f 'src/tinyxml/tinyxml.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxml.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxml.cpp'; fi` src/tinyxml/gource-tinyxmlparser.o: src/tinyxml/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource-tinyxmlparser.o -MD -MP -MF src/tinyxml/$(DEPDIR)/gource-tinyxmlparser.Tpo -c -o src/tinyxml/gource-tinyxmlparser.o `test -f 'src/tinyxml/tinyxmlparser.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource-tinyxmlparser.Tpo src/tinyxml/$(DEPDIR)/gource-tinyxmlparser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxmlparser.cpp' object='src/tinyxml/gource-tinyxmlparser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource-tinyxmlparser.o `test -f 'src/tinyxml/tinyxmlparser.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxmlparser.cpp src/tinyxml/gource-tinyxmlparser.obj: src/tinyxml/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource-tinyxmlparser.obj -MD -MP -MF src/tinyxml/$(DEPDIR)/gource-tinyxmlparser.Tpo -c -o src/tinyxml/gource-tinyxmlparser.obj `if test -f 'src/tinyxml/tinyxmlparser.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxmlparser.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxmlparser.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource-tinyxmlparser.Tpo src/tinyxml/$(DEPDIR)/gource-tinyxmlparser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxmlparser.cpp' object='src/tinyxml/gource-tinyxmlparser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gource_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource-tinyxmlparser.obj `if test -f 'src/tinyxml/tinyxmlparser.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxmlparser.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxmlparser.cpp'; fi` src/test/gource_tests-main.o: src/test/main.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/test/gource_tests-main.o -MD -MP -MF src/test/$(DEPDIR)/gource_tests-main.Tpo -c -o src/test/gource_tests-main.o `test -f 'src/test/main.cpp' || echo '$(srcdir)/'`src/test/main.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/gource_tests-main.Tpo src/test/$(DEPDIR)/gource_tests-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/test/main.cpp' object='src/test/gource_tests-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/test/gource_tests-main.o `test -f 'src/test/main.cpp' || echo '$(srcdir)/'`src/test/main.cpp src/test/gource_tests-main.obj: src/test/main.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/test/gource_tests-main.obj -MD -MP -MF src/test/$(DEPDIR)/gource_tests-main.Tpo -c -o src/test/gource_tests-main.obj `if test -f 'src/test/main.cpp'; then $(CYGPATH_W) 'src/test/main.cpp'; else $(CYGPATH_W) '$(srcdir)/src/test/main.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/gource_tests-main.Tpo src/test/$(DEPDIR)/gource_tests-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/test/main.cpp' object='src/test/gource_tests-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/test/gource_tests-main.obj `if test -f 'src/test/main.cpp'; then $(CYGPATH_W) 'src/test/main.cpp'; else $(CYGPATH_W) '$(srcdir)/src/test/main.cpp'; fi` src/test/gource_tests-datetime_tests.o: src/test/datetime_tests.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/test/gource_tests-datetime_tests.o -MD -MP -MF src/test/$(DEPDIR)/gource_tests-datetime_tests.Tpo -c -o src/test/gource_tests-datetime_tests.o `test -f 'src/test/datetime_tests.cpp' || echo '$(srcdir)/'`src/test/datetime_tests.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/gource_tests-datetime_tests.Tpo src/test/$(DEPDIR)/gource_tests-datetime_tests.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/test/datetime_tests.cpp' object='src/test/gource_tests-datetime_tests.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/test/gource_tests-datetime_tests.o `test -f 'src/test/datetime_tests.cpp' || echo '$(srcdir)/'`src/test/datetime_tests.cpp src/test/gource_tests-datetime_tests.obj: src/test/datetime_tests.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/test/gource_tests-datetime_tests.obj -MD -MP -MF src/test/$(DEPDIR)/gource_tests-datetime_tests.Tpo -c -o src/test/gource_tests-datetime_tests.obj `if test -f 'src/test/datetime_tests.cpp'; then $(CYGPATH_W) 'src/test/datetime_tests.cpp'; else $(CYGPATH_W) '$(srcdir)/src/test/datetime_tests.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/gource_tests-datetime_tests.Tpo src/test/$(DEPDIR)/gource_tests-datetime_tests.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/test/datetime_tests.cpp' object='src/test/gource_tests-datetime_tests.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/test/gource_tests-datetime_tests.obj `if test -f 'src/test/datetime_tests.cpp'; then $(CYGPATH_W) 'src/test/datetime_tests.cpp'; else $(CYGPATH_W) '$(srcdir)/src/test/datetime_tests.cpp'; fi` src/test/gource_tests-regex_tests.o: src/test/regex_tests.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/test/gource_tests-regex_tests.o -MD -MP -MF src/test/$(DEPDIR)/gource_tests-regex_tests.Tpo -c -o src/test/gource_tests-regex_tests.o `test -f 'src/test/regex_tests.cpp' || echo '$(srcdir)/'`src/test/regex_tests.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/gource_tests-regex_tests.Tpo src/test/$(DEPDIR)/gource_tests-regex_tests.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/test/regex_tests.cpp' object='src/test/gource_tests-regex_tests.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/test/gource_tests-regex_tests.o `test -f 'src/test/regex_tests.cpp' || echo '$(srcdir)/'`src/test/regex_tests.cpp src/test/gource_tests-regex_tests.obj: src/test/regex_tests.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/test/gource_tests-regex_tests.obj -MD -MP -MF src/test/$(DEPDIR)/gource_tests-regex_tests.Tpo -c -o src/test/gource_tests-regex_tests.obj `if test -f 'src/test/regex_tests.cpp'; then $(CYGPATH_W) 'src/test/regex_tests.cpp'; else $(CYGPATH_W) '$(srcdir)/src/test/regex_tests.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/test/$(DEPDIR)/gource_tests-regex_tests.Tpo src/test/$(DEPDIR)/gource_tests-regex_tests.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/test/regex_tests.cpp' object='src/test/gource_tests-regex_tests.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/test/gource_tests-regex_tests.obj `if test -f 'src/test/regex_tests.cpp'; then $(CYGPATH_W) 'src/test/regex_tests.cpp'; else $(CYGPATH_W) '$(srcdir)/src/test/regex_tests.cpp'; fi` src/gource_tests-action.o: src/action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-action.o -MD -MP -MF src/$(DEPDIR)/gource_tests-action.Tpo -c -o src/gource_tests-action.o `test -f 'src/action.cpp' || echo '$(srcdir)/'`src/action.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-action.Tpo src/$(DEPDIR)/gource_tests-action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/action.cpp' object='src/gource_tests-action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-action.o `test -f 'src/action.cpp' || echo '$(srcdir)/'`src/action.cpp src/gource_tests-action.obj: src/action.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-action.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-action.Tpo -c -o src/gource_tests-action.obj `if test -f 'src/action.cpp'; then $(CYGPATH_W) 'src/action.cpp'; else $(CYGPATH_W) '$(srcdir)/src/action.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-action.Tpo src/$(DEPDIR)/gource_tests-action.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/action.cpp' object='src/gource_tests-action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-action.obj `if test -f 'src/action.cpp'; then $(CYGPATH_W) 'src/action.cpp'; else $(CYGPATH_W) '$(srcdir)/src/action.cpp'; fi` src/gource_tests-bloom.o: src/bloom.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-bloom.o -MD -MP -MF src/$(DEPDIR)/gource_tests-bloom.Tpo -c -o src/gource_tests-bloom.o `test -f 'src/bloom.cpp' || echo '$(srcdir)/'`src/bloom.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-bloom.Tpo src/$(DEPDIR)/gource_tests-bloom.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/bloom.cpp' object='src/gource_tests-bloom.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-bloom.o `test -f 'src/bloom.cpp' || echo '$(srcdir)/'`src/bloom.cpp src/gource_tests-bloom.obj: src/bloom.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-bloom.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-bloom.Tpo -c -o src/gource_tests-bloom.obj `if test -f 'src/bloom.cpp'; then $(CYGPATH_W) 'src/bloom.cpp'; else $(CYGPATH_W) '$(srcdir)/src/bloom.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-bloom.Tpo src/$(DEPDIR)/gource_tests-bloom.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/bloom.cpp' object='src/gource_tests-bloom.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-bloom.obj `if test -f 'src/bloom.cpp'; then $(CYGPATH_W) 'src/bloom.cpp'; else $(CYGPATH_W) '$(srcdir)/src/bloom.cpp'; fi` src/gource_tests-caption.o: src/caption.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-caption.o -MD -MP -MF src/$(DEPDIR)/gource_tests-caption.Tpo -c -o src/gource_tests-caption.o `test -f 'src/caption.cpp' || echo '$(srcdir)/'`src/caption.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-caption.Tpo src/$(DEPDIR)/gource_tests-caption.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/caption.cpp' object='src/gource_tests-caption.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-caption.o `test -f 'src/caption.cpp' || echo '$(srcdir)/'`src/caption.cpp src/gource_tests-caption.obj: src/caption.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-caption.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-caption.Tpo -c -o src/gource_tests-caption.obj `if test -f 'src/caption.cpp'; then $(CYGPATH_W) 'src/caption.cpp'; else $(CYGPATH_W) '$(srcdir)/src/caption.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-caption.Tpo src/$(DEPDIR)/gource_tests-caption.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/caption.cpp' object='src/gource_tests-caption.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-caption.obj `if test -f 'src/caption.cpp'; then $(CYGPATH_W) 'src/caption.cpp'; else $(CYGPATH_W) '$(srcdir)/src/caption.cpp'; fi` src/core/gource_tests-conffile.o: src/core/conffile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-conffile.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-conffile.Tpo -c -o src/core/gource_tests-conffile.o `test -f 'src/core/conffile.cpp' || echo '$(srcdir)/'`src/core/conffile.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-conffile.Tpo src/core/$(DEPDIR)/gource_tests-conffile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/conffile.cpp' object='src/core/gource_tests-conffile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-conffile.o `test -f 'src/core/conffile.cpp' || echo '$(srcdir)/'`src/core/conffile.cpp src/core/gource_tests-conffile.obj: src/core/conffile.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-conffile.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-conffile.Tpo -c -o src/core/gource_tests-conffile.obj `if test -f 'src/core/conffile.cpp'; then $(CYGPATH_W) 'src/core/conffile.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/conffile.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-conffile.Tpo src/core/$(DEPDIR)/gource_tests-conffile.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/conffile.cpp' object='src/core/gource_tests-conffile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-conffile.obj `if test -f 'src/core/conffile.cpp'; then $(CYGPATH_W) 'src/core/conffile.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/conffile.cpp'; fi` src/core/gource_tests-display.o: src/core/display.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-display.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-display.Tpo -c -o src/core/gource_tests-display.o `test -f 'src/core/display.cpp' || echo '$(srcdir)/'`src/core/display.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-display.Tpo src/core/$(DEPDIR)/gource_tests-display.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/display.cpp' object='src/core/gource_tests-display.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-display.o `test -f 'src/core/display.cpp' || echo '$(srcdir)/'`src/core/display.cpp src/core/gource_tests-display.obj: src/core/display.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-display.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-display.Tpo -c -o src/core/gource_tests-display.obj `if test -f 'src/core/display.cpp'; then $(CYGPATH_W) 'src/core/display.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/display.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-display.Tpo src/core/$(DEPDIR)/gource_tests-display.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/display.cpp' object='src/core/gource_tests-display.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-display.obj `if test -f 'src/core/display.cpp'; then $(CYGPATH_W) 'src/core/display.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/display.cpp'; fi` src/core/gource_tests-frustum.o: src/core/frustum.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-frustum.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-frustum.Tpo -c -o src/core/gource_tests-frustum.o `test -f 'src/core/frustum.cpp' || echo '$(srcdir)/'`src/core/frustum.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-frustum.Tpo src/core/$(DEPDIR)/gource_tests-frustum.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/frustum.cpp' object='src/core/gource_tests-frustum.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-frustum.o `test -f 'src/core/frustum.cpp' || echo '$(srcdir)/'`src/core/frustum.cpp src/core/gource_tests-frustum.obj: src/core/frustum.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-frustum.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-frustum.Tpo -c -o src/core/gource_tests-frustum.obj `if test -f 'src/core/frustum.cpp'; then $(CYGPATH_W) 'src/core/frustum.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/frustum.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-frustum.Tpo src/core/$(DEPDIR)/gource_tests-frustum.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/frustum.cpp' object='src/core/gource_tests-frustum.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-frustum.obj `if test -f 'src/core/frustum.cpp'; then $(CYGPATH_W) 'src/core/frustum.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/frustum.cpp'; fi` src/core/gource_tests-fxfont.o: src/core/fxfont.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-fxfont.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-fxfont.Tpo -c -o src/core/gource_tests-fxfont.o `test -f 'src/core/fxfont.cpp' || echo '$(srcdir)/'`src/core/fxfont.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-fxfont.Tpo src/core/$(DEPDIR)/gource_tests-fxfont.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/fxfont.cpp' object='src/core/gource_tests-fxfont.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-fxfont.o `test -f 'src/core/fxfont.cpp' || echo '$(srcdir)/'`src/core/fxfont.cpp src/core/gource_tests-fxfont.obj: src/core/fxfont.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-fxfont.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-fxfont.Tpo -c -o src/core/gource_tests-fxfont.obj `if test -f 'src/core/fxfont.cpp'; then $(CYGPATH_W) 'src/core/fxfont.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/fxfont.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-fxfont.Tpo src/core/$(DEPDIR)/gource_tests-fxfont.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/fxfont.cpp' object='src/core/gource_tests-fxfont.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-fxfont.obj `if test -f 'src/core/fxfont.cpp'; then $(CYGPATH_W) 'src/core/fxfont.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/fxfont.cpp'; fi` src/core/gource_tests-logger.o: src/core/logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-logger.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-logger.Tpo -c -o src/core/gource_tests-logger.o `test -f 'src/core/logger.cpp' || echo '$(srcdir)/'`src/core/logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-logger.Tpo src/core/$(DEPDIR)/gource_tests-logger.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/logger.cpp' object='src/core/gource_tests-logger.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-logger.o `test -f 'src/core/logger.cpp' || echo '$(srcdir)/'`src/core/logger.cpp src/core/gource_tests-logger.obj: src/core/logger.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-logger.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-logger.Tpo -c -o src/core/gource_tests-logger.obj `if test -f 'src/core/logger.cpp'; then $(CYGPATH_W) 'src/core/logger.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/logger.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-logger.Tpo src/core/$(DEPDIR)/gource_tests-logger.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/logger.cpp' object='src/core/gource_tests-logger.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-logger.obj `if test -f 'src/core/logger.cpp'; then $(CYGPATH_W) 'src/core/logger.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/logger.cpp'; fi` src/core/gource_tests-mousecursor.o: src/core/mousecursor.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-mousecursor.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-mousecursor.Tpo -c -o src/core/gource_tests-mousecursor.o `test -f 'src/core/mousecursor.cpp' || echo '$(srcdir)/'`src/core/mousecursor.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-mousecursor.Tpo src/core/$(DEPDIR)/gource_tests-mousecursor.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/mousecursor.cpp' object='src/core/gource_tests-mousecursor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-mousecursor.o `test -f 'src/core/mousecursor.cpp' || echo '$(srcdir)/'`src/core/mousecursor.cpp src/core/gource_tests-mousecursor.obj: src/core/mousecursor.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-mousecursor.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-mousecursor.Tpo -c -o src/core/gource_tests-mousecursor.obj `if test -f 'src/core/mousecursor.cpp'; then $(CYGPATH_W) 'src/core/mousecursor.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/mousecursor.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-mousecursor.Tpo src/core/$(DEPDIR)/gource_tests-mousecursor.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/mousecursor.cpp' object='src/core/gource_tests-mousecursor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-mousecursor.obj `if test -f 'src/core/mousecursor.cpp'; then $(CYGPATH_W) 'src/core/mousecursor.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/mousecursor.cpp'; fi` src/core/gource_tests-plane.o: src/core/plane.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-plane.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-plane.Tpo -c -o src/core/gource_tests-plane.o `test -f 'src/core/plane.cpp' || echo '$(srcdir)/'`src/core/plane.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-plane.Tpo src/core/$(DEPDIR)/gource_tests-plane.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/plane.cpp' object='src/core/gource_tests-plane.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-plane.o `test -f 'src/core/plane.cpp' || echo '$(srcdir)/'`src/core/plane.cpp src/core/gource_tests-plane.obj: src/core/plane.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-plane.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-plane.Tpo -c -o src/core/gource_tests-plane.obj `if test -f 'src/core/plane.cpp'; then $(CYGPATH_W) 'src/core/plane.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/plane.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-plane.Tpo src/core/$(DEPDIR)/gource_tests-plane.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/plane.cpp' object='src/core/gource_tests-plane.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-plane.obj `if test -f 'src/core/plane.cpp'; then $(CYGPATH_W) 'src/core/plane.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/plane.cpp'; fi` src/core/gource_tests-ppm.o: src/core/ppm.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-ppm.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-ppm.Tpo -c -o src/core/gource_tests-ppm.o `test -f 'src/core/ppm.cpp' || echo '$(srcdir)/'`src/core/ppm.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-ppm.Tpo src/core/$(DEPDIR)/gource_tests-ppm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/ppm.cpp' object='src/core/gource_tests-ppm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-ppm.o `test -f 'src/core/ppm.cpp' || echo '$(srcdir)/'`src/core/ppm.cpp src/core/gource_tests-ppm.obj: src/core/ppm.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-ppm.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-ppm.Tpo -c -o src/core/gource_tests-ppm.obj `if test -f 'src/core/ppm.cpp'; then $(CYGPATH_W) 'src/core/ppm.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/ppm.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-ppm.Tpo src/core/$(DEPDIR)/gource_tests-ppm.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/ppm.cpp' object='src/core/gource_tests-ppm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-ppm.obj `if test -f 'src/core/ppm.cpp'; then $(CYGPATH_W) 'src/core/ppm.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/ppm.cpp'; fi` src/core/gource_tests-quadtree.o: src/core/quadtree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-quadtree.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-quadtree.Tpo -c -o src/core/gource_tests-quadtree.o `test -f 'src/core/quadtree.cpp' || echo '$(srcdir)/'`src/core/quadtree.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-quadtree.Tpo src/core/$(DEPDIR)/gource_tests-quadtree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/quadtree.cpp' object='src/core/gource_tests-quadtree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-quadtree.o `test -f 'src/core/quadtree.cpp' || echo '$(srcdir)/'`src/core/quadtree.cpp src/core/gource_tests-quadtree.obj: src/core/quadtree.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-quadtree.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-quadtree.Tpo -c -o src/core/gource_tests-quadtree.obj `if test -f 'src/core/quadtree.cpp'; then $(CYGPATH_W) 'src/core/quadtree.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/quadtree.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-quadtree.Tpo src/core/$(DEPDIR)/gource_tests-quadtree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/quadtree.cpp' object='src/core/gource_tests-quadtree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-quadtree.obj `if test -f 'src/core/quadtree.cpp'; then $(CYGPATH_W) 'src/core/quadtree.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/quadtree.cpp'; fi` src/core/gource_tests-regex.o: src/core/regex.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-regex.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-regex.Tpo -c -o src/core/gource_tests-regex.o `test -f 'src/core/regex.cpp' || echo '$(srcdir)/'`src/core/regex.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-regex.Tpo src/core/$(DEPDIR)/gource_tests-regex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/regex.cpp' object='src/core/gource_tests-regex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-regex.o `test -f 'src/core/regex.cpp' || echo '$(srcdir)/'`src/core/regex.cpp src/core/gource_tests-regex.obj: src/core/regex.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-regex.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-regex.Tpo -c -o src/core/gource_tests-regex.obj `if test -f 'src/core/regex.cpp'; then $(CYGPATH_W) 'src/core/regex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/regex.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-regex.Tpo src/core/$(DEPDIR)/gource_tests-regex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/regex.cpp' object='src/core/gource_tests-regex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-regex.obj `if test -f 'src/core/regex.cpp'; then $(CYGPATH_W) 'src/core/regex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/regex.cpp'; fi` src/core/gource_tests-resource.o: src/core/resource.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-resource.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-resource.Tpo -c -o src/core/gource_tests-resource.o `test -f 'src/core/resource.cpp' || echo '$(srcdir)/'`src/core/resource.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-resource.Tpo src/core/$(DEPDIR)/gource_tests-resource.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/resource.cpp' object='src/core/gource_tests-resource.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-resource.o `test -f 'src/core/resource.cpp' || echo '$(srcdir)/'`src/core/resource.cpp src/core/gource_tests-resource.obj: src/core/resource.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-resource.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-resource.Tpo -c -o src/core/gource_tests-resource.obj `if test -f 'src/core/resource.cpp'; then $(CYGPATH_W) 'src/core/resource.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/resource.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-resource.Tpo src/core/$(DEPDIR)/gource_tests-resource.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/resource.cpp' object='src/core/gource_tests-resource.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-resource.obj `if test -f 'src/core/resource.cpp'; then $(CYGPATH_W) 'src/core/resource.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/resource.cpp'; fi` src/core/gource_tests-sdlapp.o: src/core/sdlapp.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-sdlapp.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-sdlapp.Tpo -c -o src/core/gource_tests-sdlapp.o `test -f 'src/core/sdlapp.cpp' || echo '$(srcdir)/'`src/core/sdlapp.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-sdlapp.Tpo src/core/$(DEPDIR)/gource_tests-sdlapp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/sdlapp.cpp' object='src/core/gource_tests-sdlapp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-sdlapp.o `test -f 'src/core/sdlapp.cpp' || echo '$(srcdir)/'`src/core/sdlapp.cpp src/core/gource_tests-sdlapp.obj: src/core/sdlapp.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-sdlapp.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-sdlapp.Tpo -c -o src/core/gource_tests-sdlapp.obj `if test -f 'src/core/sdlapp.cpp'; then $(CYGPATH_W) 'src/core/sdlapp.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/sdlapp.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-sdlapp.Tpo src/core/$(DEPDIR)/gource_tests-sdlapp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/sdlapp.cpp' object='src/core/gource_tests-sdlapp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-sdlapp.obj `if test -f 'src/core/sdlapp.cpp'; then $(CYGPATH_W) 'src/core/sdlapp.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/sdlapp.cpp'; fi` src/core/gource_tests-seeklog.o: src/core/seeklog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-seeklog.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-seeklog.Tpo -c -o src/core/gource_tests-seeklog.o `test -f 'src/core/seeklog.cpp' || echo '$(srcdir)/'`src/core/seeklog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-seeklog.Tpo src/core/$(DEPDIR)/gource_tests-seeklog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/seeklog.cpp' object='src/core/gource_tests-seeklog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-seeklog.o `test -f 'src/core/seeklog.cpp' || echo '$(srcdir)/'`src/core/seeklog.cpp src/core/gource_tests-seeklog.obj: src/core/seeklog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-seeklog.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-seeklog.Tpo -c -o src/core/gource_tests-seeklog.obj `if test -f 'src/core/seeklog.cpp'; then $(CYGPATH_W) 'src/core/seeklog.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/seeklog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-seeklog.Tpo src/core/$(DEPDIR)/gource_tests-seeklog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/seeklog.cpp' object='src/core/gource_tests-seeklog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-seeklog.obj `if test -f 'src/core/seeklog.cpp'; then $(CYGPATH_W) 'src/core/seeklog.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/seeklog.cpp'; fi` src/core/gource_tests-settings.o: src/core/settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-settings.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-settings.Tpo -c -o src/core/gource_tests-settings.o `test -f 'src/core/settings.cpp' || echo '$(srcdir)/'`src/core/settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-settings.Tpo src/core/$(DEPDIR)/gource_tests-settings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/settings.cpp' object='src/core/gource_tests-settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-settings.o `test -f 'src/core/settings.cpp' || echo '$(srcdir)/'`src/core/settings.cpp src/core/gource_tests-settings.obj: src/core/settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-settings.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-settings.Tpo -c -o src/core/gource_tests-settings.obj `if test -f 'src/core/settings.cpp'; then $(CYGPATH_W) 'src/core/settings.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/settings.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-settings.Tpo src/core/$(DEPDIR)/gource_tests-settings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/settings.cpp' object='src/core/gource_tests-settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-settings.obj `if test -f 'src/core/settings.cpp'; then $(CYGPATH_W) 'src/core/settings.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/settings.cpp'; fi` src/core/gource_tests-shader.o: src/core/shader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-shader.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-shader.Tpo -c -o src/core/gource_tests-shader.o `test -f 'src/core/shader.cpp' || echo '$(srcdir)/'`src/core/shader.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-shader.Tpo src/core/$(DEPDIR)/gource_tests-shader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/shader.cpp' object='src/core/gource_tests-shader.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-shader.o `test -f 'src/core/shader.cpp' || echo '$(srcdir)/'`src/core/shader.cpp src/core/gource_tests-shader.obj: src/core/shader.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-shader.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-shader.Tpo -c -o src/core/gource_tests-shader.obj `if test -f 'src/core/shader.cpp'; then $(CYGPATH_W) 'src/core/shader.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/shader.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-shader.Tpo src/core/$(DEPDIR)/gource_tests-shader.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/shader.cpp' object='src/core/gource_tests-shader.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-shader.obj `if test -f 'src/core/shader.cpp'; then $(CYGPATH_W) 'src/core/shader.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/shader.cpp'; fi` src/core/gource_tests-shader_common.o: src/core/shader_common.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-shader_common.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-shader_common.Tpo -c -o src/core/gource_tests-shader_common.o `test -f 'src/core/shader_common.cpp' || echo '$(srcdir)/'`src/core/shader_common.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-shader_common.Tpo src/core/$(DEPDIR)/gource_tests-shader_common.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/shader_common.cpp' object='src/core/gource_tests-shader_common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-shader_common.o `test -f 'src/core/shader_common.cpp' || echo '$(srcdir)/'`src/core/shader_common.cpp src/core/gource_tests-shader_common.obj: src/core/shader_common.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-shader_common.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-shader_common.Tpo -c -o src/core/gource_tests-shader_common.obj `if test -f 'src/core/shader_common.cpp'; then $(CYGPATH_W) 'src/core/shader_common.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/shader_common.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-shader_common.Tpo src/core/$(DEPDIR)/gource_tests-shader_common.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/shader_common.cpp' object='src/core/gource_tests-shader_common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-shader_common.obj `if test -f 'src/core/shader_common.cpp'; then $(CYGPATH_W) 'src/core/shader_common.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/shader_common.cpp'; fi` src/core/gource_tests-stringhash.o: src/core/stringhash.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-stringhash.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-stringhash.Tpo -c -o src/core/gource_tests-stringhash.o `test -f 'src/core/stringhash.cpp' || echo '$(srcdir)/'`src/core/stringhash.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-stringhash.Tpo src/core/$(DEPDIR)/gource_tests-stringhash.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/stringhash.cpp' object='src/core/gource_tests-stringhash.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-stringhash.o `test -f 'src/core/stringhash.cpp' || echo '$(srcdir)/'`src/core/stringhash.cpp src/core/gource_tests-stringhash.obj: src/core/stringhash.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-stringhash.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-stringhash.Tpo -c -o src/core/gource_tests-stringhash.obj `if test -f 'src/core/stringhash.cpp'; then $(CYGPATH_W) 'src/core/stringhash.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/stringhash.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-stringhash.Tpo src/core/$(DEPDIR)/gource_tests-stringhash.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/stringhash.cpp' object='src/core/gource_tests-stringhash.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-stringhash.obj `if test -f 'src/core/stringhash.cpp'; then $(CYGPATH_W) 'src/core/stringhash.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/stringhash.cpp'; fi` src/core/gource_tests-texture.o: src/core/texture.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-texture.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-texture.Tpo -c -o src/core/gource_tests-texture.o `test -f 'src/core/texture.cpp' || echo '$(srcdir)/'`src/core/texture.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-texture.Tpo src/core/$(DEPDIR)/gource_tests-texture.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/texture.cpp' object='src/core/gource_tests-texture.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-texture.o `test -f 'src/core/texture.cpp' || echo '$(srcdir)/'`src/core/texture.cpp src/core/gource_tests-texture.obj: src/core/texture.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-texture.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-texture.Tpo -c -o src/core/gource_tests-texture.obj `if test -f 'src/core/texture.cpp'; then $(CYGPATH_W) 'src/core/texture.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/texture.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-texture.Tpo src/core/$(DEPDIR)/gource_tests-texture.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/texture.cpp' object='src/core/gource_tests-texture.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-texture.obj `if test -f 'src/core/texture.cpp'; then $(CYGPATH_W) 'src/core/texture.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/texture.cpp'; fi` src/core/gource_tests-png_writer.o: src/core/png_writer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-png_writer.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-png_writer.Tpo -c -o src/core/gource_tests-png_writer.o `test -f 'src/core/png_writer.cpp' || echo '$(srcdir)/'`src/core/png_writer.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-png_writer.Tpo src/core/$(DEPDIR)/gource_tests-png_writer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/png_writer.cpp' object='src/core/gource_tests-png_writer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-png_writer.o `test -f 'src/core/png_writer.cpp' || echo '$(srcdir)/'`src/core/png_writer.cpp src/core/gource_tests-png_writer.obj: src/core/png_writer.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-png_writer.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-png_writer.Tpo -c -o src/core/gource_tests-png_writer.obj `if test -f 'src/core/png_writer.cpp'; then $(CYGPATH_W) 'src/core/png_writer.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/png_writer.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-png_writer.Tpo src/core/$(DEPDIR)/gource_tests-png_writer.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/png_writer.cpp' object='src/core/gource_tests-png_writer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-png_writer.obj `if test -f 'src/core/png_writer.cpp'; then $(CYGPATH_W) 'src/core/png_writer.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/png_writer.cpp'; fi` src/core/gource_tests-timezone.o: src/core/timezone.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-timezone.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-timezone.Tpo -c -o src/core/gource_tests-timezone.o `test -f 'src/core/timezone.cpp' || echo '$(srcdir)/'`src/core/timezone.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-timezone.Tpo src/core/$(DEPDIR)/gource_tests-timezone.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/timezone.cpp' object='src/core/gource_tests-timezone.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-timezone.o `test -f 'src/core/timezone.cpp' || echo '$(srcdir)/'`src/core/timezone.cpp src/core/gource_tests-timezone.obj: src/core/timezone.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-timezone.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-timezone.Tpo -c -o src/core/gource_tests-timezone.obj `if test -f 'src/core/timezone.cpp'; then $(CYGPATH_W) 'src/core/timezone.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/timezone.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-timezone.Tpo src/core/$(DEPDIR)/gource_tests-timezone.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/timezone.cpp' object='src/core/gource_tests-timezone.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-timezone.obj `if test -f 'src/core/timezone.cpp'; then $(CYGPATH_W) 'src/core/timezone.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/timezone.cpp'; fi` src/core/gource_tests-vbo.o: src/core/vbo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-vbo.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-vbo.Tpo -c -o src/core/gource_tests-vbo.o `test -f 'src/core/vbo.cpp' || echo '$(srcdir)/'`src/core/vbo.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-vbo.Tpo src/core/$(DEPDIR)/gource_tests-vbo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/vbo.cpp' object='src/core/gource_tests-vbo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-vbo.o `test -f 'src/core/vbo.cpp' || echo '$(srcdir)/'`src/core/vbo.cpp src/core/gource_tests-vbo.obj: src/core/vbo.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-vbo.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-vbo.Tpo -c -o src/core/gource_tests-vbo.obj `if test -f 'src/core/vbo.cpp'; then $(CYGPATH_W) 'src/core/vbo.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/vbo.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-vbo.Tpo src/core/$(DEPDIR)/gource_tests-vbo.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/vbo.cpp' object='src/core/gource_tests-vbo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-vbo.obj `if test -f 'src/core/vbo.cpp'; then $(CYGPATH_W) 'src/core/vbo.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/vbo.cpp'; fi` src/core/gource_tests-vectors.o: src/core/vectors.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-vectors.o -MD -MP -MF src/core/$(DEPDIR)/gource_tests-vectors.Tpo -c -o src/core/gource_tests-vectors.o `test -f 'src/core/vectors.cpp' || echo '$(srcdir)/'`src/core/vectors.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-vectors.Tpo src/core/$(DEPDIR)/gource_tests-vectors.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/vectors.cpp' object='src/core/gource_tests-vectors.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-vectors.o `test -f 'src/core/vectors.cpp' || echo '$(srcdir)/'`src/core/vectors.cpp src/core/gource_tests-vectors.obj: src/core/vectors.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/core/gource_tests-vectors.obj -MD -MP -MF src/core/$(DEPDIR)/gource_tests-vectors.Tpo -c -o src/core/gource_tests-vectors.obj `if test -f 'src/core/vectors.cpp'; then $(CYGPATH_W) 'src/core/vectors.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/vectors.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/core/$(DEPDIR)/gource_tests-vectors.Tpo src/core/$(DEPDIR)/gource_tests-vectors.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/core/vectors.cpp' object='src/core/gource_tests-vectors.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/core/gource_tests-vectors.obj `if test -f 'src/core/vectors.cpp'; then $(CYGPATH_W) 'src/core/vectors.cpp'; else $(CYGPATH_W) '$(srcdir)/src/core/vectors.cpp'; fi` src/gource_tests-dirnode.o: src/dirnode.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-dirnode.o -MD -MP -MF src/$(DEPDIR)/gource_tests-dirnode.Tpo -c -o src/gource_tests-dirnode.o `test -f 'src/dirnode.cpp' || echo '$(srcdir)/'`src/dirnode.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-dirnode.Tpo src/$(DEPDIR)/gource_tests-dirnode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/dirnode.cpp' object='src/gource_tests-dirnode.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-dirnode.o `test -f 'src/dirnode.cpp' || echo '$(srcdir)/'`src/dirnode.cpp src/gource_tests-dirnode.obj: src/dirnode.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-dirnode.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-dirnode.Tpo -c -o src/gource_tests-dirnode.obj `if test -f 'src/dirnode.cpp'; then $(CYGPATH_W) 'src/dirnode.cpp'; else $(CYGPATH_W) '$(srcdir)/src/dirnode.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-dirnode.Tpo src/$(DEPDIR)/gource_tests-dirnode.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/dirnode.cpp' object='src/gource_tests-dirnode.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-dirnode.obj `if test -f 'src/dirnode.cpp'; then $(CYGPATH_W) 'src/dirnode.cpp'; else $(CYGPATH_W) '$(srcdir)/src/dirnode.cpp'; fi` src/gource_tests-file.o: src/file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-file.o -MD -MP -MF src/$(DEPDIR)/gource_tests-file.Tpo -c -o src/gource_tests-file.o `test -f 'src/file.cpp' || echo '$(srcdir)/'`src/file.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-file.Tpo src/$(DEPDIR)/gource_tests-file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/file.cpp' object='src/gource_tests-file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-file.o `test -f 'src/file.cpp' || echo '$(srcdir)/'`src/file.cpp src/gource_tests-file.obj: src/file.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-file.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-file.Tpo -c -o src/gource_tests-file.obj `if test -f 'src/file.cpp'; then $(CYGPATH_W) 'src/file.cpp'; else $(CYGPATH_W) '$(srcdir)/src/file.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-file.Tpo src/$(DEPDIR)/gource_tests-file.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/file.cpp' object='src/gource_tests-file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-file.obj `if test -f 'src/file.cpp'; then $(CYGPATH_W) 'src/file.cpp'; else $(CYGPATH_W) '$(srcdir)/src/file.cpp'; fi` src/formats/gource_tests-apache.o: src/formats/apache.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-apache.o -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-apache.Tpo -c -o src/formats/gource_tests-apache.o `test -f 'src/formats/apache.cpp' || echo '$(srcdir)/'`src/formats/apache.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-apache.Tpo src/formats/$(DEPDIR)/gource_tests-apache.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/apache.cpp' object='src/formats/gource_tests-apache.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-apache.o `test -f 'src/formats/apache.cpp' || echo '$(srcdir)/'`src/formats/apache.cpp src/formats/gource_tests-apache.obj: src/formats/apache.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-apache.obj -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-apache.Tpo -c -o src/formats/gource_tests-apache.obj `if test -f 'src/formats/apache.cpp'; then $(CYGPATH_W) 'src/formats/apache.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/apache.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-apache.Tpo src/formats/$(DEPDIR)/gource_tests-apache.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/apache.cpp' object='src/formats/gource_tests-apache.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-apache.obj `if test -f 'src/formats/apache.cpp'; then $(CYGPATH_W) 'src/formats/apache.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/apache.cpp'; fi` src/formats/gource_tests-bzr.o: src/formats/bzr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-bzr.o -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-bzr.Tpo -c -o src/formats/gource_tests-bzr.o `test -f 'src/formats/bzr.cpp' || echo '$(srcdir)/'`src/formats/bzr.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-bzr.Tpo src/formats/$(DEPDIR)/gource_tests-bzr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/bzr.cpp' object='src/formats/gource_tests-bzr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-bzr.o `test -f 'src/formats/bzr.cpp' || echo '$(srcdir)/'`src/formats/bzr.cpp src/formats/gource_tests-bzr.obj: src/formats/bzr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-bzr.obj -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-bzr.Tpo -c -o src/formats/gource_tests-bzr.obj `if test -f 'src/formats/bzr.cpp'; then $(CYGPATH_W) 'src/formats/bzr.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/bzr.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-bzr.Tpo src/formats/$(DEPDIR)/gource_tests-bzr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/bzr.cpp' object='src/formats/gource_tests-bzr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-bzr.obj `if test -f 'src/formats/bzr.cpp'; then $(CYGPATH_W) 'src/formats/bzr.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/bzr.cpp'; fi` src/formats/gource_tests-commitlog.o: src/formats/commitlog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-commitlog.o -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-commitlog.Tpo -c -o src/formats/gource_tests-commitlog.o `test -f 'src/formats/commitlog.cpp' || echo '$(srcdir)/'`src/formats/commitlog.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-commitlog.Tpo src/formats/$(DEPDIR)/gource_tests-commitlog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/commitlog.cpp' object='src/formats/gource_tests-commitlog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-commitlog.o `test -f 'src/formats/commitlog.cpp' || echo '$(srcdir)/'`src/formats/commitlog.cpp src/formats/gource_tests-commitlog.obj: src/formats/commitlog.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-commitlog.obj -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-commitlog.Tpo -c -o src/formats/gource_tests-commitlog.obj `if test -f 'src/formats/commitlog.cpp'; then $(CYGPATH_W) 'src/formats/commitlog.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/commitlog.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-commitlog.Tpo src/formats/$(DEPDIR)/gource_tests-commitlog.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/commitlog.cpp' object='src/formats/gource_tests-commitlog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-commitlog.obj `if test -f 'src/formats/commitlog.cpp'; then $(CYGPATH_W) 'src/formats/commitlog.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/commitlog.cpp'; fi` src/formats/gource_tests-custom.o: src/formats/custom.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-custom.o -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-custom.Tpo -c -o src/formats/gource_tests-custom.o `test -f 'src/formats/custom.cpp' || echo '$(srcdir)/'`src/formats/custom.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-custom.Tpo src/formats/$(DEPDIR)/gource_tests-custom.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/custom.cpp' object='src/formats/gource_tests-custom.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-custom.o `test -f 'src/formats/custom.cpp' || echo '$(srcdir)/'`src/formats/custom.cpp src/formats/gource_tests-custom.obj: src/formats/custom.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-custom.obj -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-custom.Tpo -c -o src/formats/gource_tests-custom.obj `if test -f 'src/formats/custom.cpp'; then $(CYGPATH_W) 'src/formats/custom.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/custom.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-custom.Tpo src/formats/$(DEPDIR)/gource_tests-custom.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/custom.cpp' object='src/formats/gource_tests-custom.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-custom.obj `if test -f 'src/formats/custom.cpp'; then $(CYGPATH_W) 'src/formats/custom.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/custom.cpp'; fi` src/formats/gource_tests-cvs-exp.o: src/formats/cvs-exp.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-cvs-exp.o -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-cvs-exp.Tpo -c -o src/formats/gource_tests-cvs-exp.o `test -f 'src/formats/cvs-exp.cpp' || echo '$(srcdir)/'`src/formats/cvs-exp.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-cvs-exp.Tpo src/formats/$(DEPDIR)/gource_tests-cvs-exp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/cvs-exp.cpp' object='src/formats/gource_tests-cvs-exp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-cvs-exp.o `test -f 'src/formats/cvs-exp.cpp' || echo '$(srcdir)/'`src/formats/cvs-exp.cpp src/formats/gource_tests-cvs-exp.obj: src/formats/cvs-exp.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-cvs-exp.obj -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-cvs-exp.Tpo -c -o src/formats/gource_tests-cvs-exp.obj `if test -f 'src/formats/cvs-exp.cpp'; then $(CYGPATH_W) 'src/formats/cvs-exp.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/cvs-exp.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-cvs-exp.Tpo src/formats/$(DEPDIR)/gource_tests-cvs-exp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/cvs-exp.cpp' object='src/formats/gource_tests-cvs-exp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-cvs-exp.obj `if test -f 'src/formats/cvs-exp.cpp'; then $(CYGPATH_W) 'src/formats/cvs-exp.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/cvs-exp.cpp'; fi` src/formats/gource_tests-cvs2cl.o: src/formats/cvs2cl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-cvs2cl.o -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-cvs2cl.Tpo -c -o src/formats/gource_tests-cvs2cl.o `test -f 'src/formats/cvs2cl.cpp' || echo '$(srcdir)/'`src/formats/cvs2cl.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-cvs2cl.Tpo src/formats/$(DEPDIR)/gource_tests-cvs2cl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/cvs2cl.cpp' object='src/formats/gource_tests-cvs2cl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-cvs2cl.o `test -f 'src/formats/cvs2cl.cpp' || echo '$(srcdir)/'`src/formats/cvs2cl.cpp src/formats/gource_tests-cvs2cl.obj: src/formats/cvs2cl.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-cvs2cl.obj -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-cvs2cl.Tpo -c -o src/formats/gource_tests-cvs2cl.obj `if test -f 'src/formats/cvs2cl.cpp'; then $(CYGPATH_W) 'src/formats/cvs2cl.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/cvs2cl.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-cvs2cl.Tpo src/formats/$(DEPDIR)/gource_tests-cvs2cl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/cvs2cl.cpp' object='src/formats/gource_tests-cvs2cl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-cvs2cl.obj `if test -f 'src/formats/cvs2cl.cpp'; then $(CYGPATH_W) 'src/formats/cvs2cl.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/cvs2cl.cpp'; fi` src/formats/gource_tests-git.o: src/formats/git.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-git.o -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-git.Tpo -c -o src/formats/gource_tests-git.o `test -f 'src/formats/git.cpp' || echo '$(srcdir)/'`src/formats/git.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-git.Tpo src/formats/$(DEPDIR)/gource_tests-git.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/git.cpp' object='src/formats/gource_tests-git.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-git.o `test -f 'src/formats/git.cpp' || echo '$(srcdir)/'`src/formats/git.cpp src/formats/gource_tests-git.obj: src/formats/git.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-git.obj -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-git.Tpo -c -o src/formats/gource_tests-git.obj `if test -f 'src/formats/git.cpp'; then $(CYGPATH_W) 'src/formats/git.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/git.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-git.Tpo src/formats/$(DEPDIR)/gource_tests-git.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/git.cpp' object='src/formats/gource_tests-git.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-git.obj `if test -f 'src/formats/git.cpp'; then $(CYGPATH_W) 'src/formats/git.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/git.cpp'; fi` src/formats/gource_tests-gitraw.o: src/formats/gitraw.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-gitraw.o -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-gitraw.Tpo -c -o src/formats/gource_tests-gitraw.o `test -f 'src/formats/gitraw.cpp' || echo '$(srcdir)/'`src/formats/gitraw.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-gitraw.Tpo src/formats/$(DEPDIR)/gource_tests-gitraw.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/gitraw.cpp' object='src/formats/gource_tests-gitraw.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-gitraw.o `test -f 'src/formats/gitraw.cpp' || echo '$(srcdir)/'`src/formats/gitraw.cpp src/formats/gource_tests-gitraw.obj: src/formats/gitraw.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-gitraw.obj -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-gitraw.Tpo -c -o src/formats/gource_tests-gitraw.obj `if test -f 'src/formats/gitraw.cpp'; then $(CYGPATH_W) 'src/formats/gitraw.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/gitraw.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-gitraw.Tpo src/formats/$(DEPDIR)/gource_tests-gitraw.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/gitraw.cpp' object='src/formats/gource_tests-gitraw.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-gitraw.obj `if test -f 'src/formats/gitraw.cpp'; then $(CYGPATH_W) 'src/formats/gitraw.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/gitraw.cpp'; fi` src/formats/gource_tests-hg.o: src/formats/hg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-hg.o -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-hg.Tpo -c -o src/formats/gource_tests-hg.o `test -f 'src/formats/hg.cpp' || echo '$(srcdir)/'`src/formats/hg.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-hg.Tpo src/formats/$(DEPDIR)/gource_tests-hg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/hg.cpp' object='src/formats/gource_tests-hg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-hg.o `test -f 'src/formats/hg.cpp' || echo '$(srcdir)/'`src/formats/hg.cpp src/formats/gource_tests-hg.obj: src/formats/hg.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-hg.obj -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-hg.Tpo -c -o src/formats/gource_tests-hg.obj `if test -f 'src/formats/hg.cpp'; then $(CYGPATH_W) 'src/formats/hg.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/hg.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-hg.Tpo src/formats/$(DEPDIR)/gource_tests-hg.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/hg.cpp' object='src/formats/gource_tests-hg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-hg.obj `if test -f 'src/formats/hg.cpp'; then $(CYGPATH_W) 'src/formats/hg.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/hg.cpp'; fi` src/formats/gource_tests-svn.o: src/formats/svn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-svn.o -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-svn.Tpo -c -o src/formats/gource_tests-svn.o `test -f 'src/formats/svn.cpp' || echo '$(srcdir)/'`src/formats/svn.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-svn.Tpo src/formats/$(DEPDIR)/gource_tests-svn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/svn.cpp' object='src/formats/gource_tests-svn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-svn.o `test -f 'src/formats/svn.cpp' || echo '$(srcdir)/'`src/formats/svn.cpp src/formats/gource_tests-svn.obj: src/formats/svn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/formats/gource_tests-svn.obj -MD -MP -MF src/formats/$(DEPDIR)/gource_tests-svn.Tpo -c -o src/formats/gource_tests-svn.obj `if test -f 'src/formats/svn.cpp'; then $(CYGPATH_W) 'src/formats/svn.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/svn.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/formats/$(DEPDIR)/gource_tests-svn.Tpo src/formats/$(DEPDIR)/gource_tests-svn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/formats/svn.cpp' object='src/formats/gource_tests-svn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/formats/gource_tests-svn.obj `if test -f 'src/formats/svn.cpp'; then $(CYGPATH_W) 'src/formats/svn.cpp'; else $(CYGPATH_W) '$(srcdir)/src/formats/svn.cpp'; fi` src/gource_tests-gource.o: src/gource.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-gource.o -MD -MP -MF src/$(DEPDIR)/gource_tests-gource.Tpo -c -o src/gource_tests-gource.o `test -f 'src/gource.cpp' || echo '$(srcdir)/'`src/gource.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-gource.Tpo src/$(DEPDIR)/gource_tests-gource.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource.cpp' object='src/gource_tests-gource.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-gource.o `test -f 'src/gource.cpp' || echo '$(srcdir)/'`src/gource.cpp src/gource_tests-gource.obj: src/gource.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-gource.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-gource.Tpo -c -o src/gource_tests-gource.obj `if test -f 'src/gource.cpp'; then $(CYGPATH_W) 'src/gource.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-gource.Tpo src/$(DEPDIR)/gource_tests-gource.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource.cpp' object='src/gource_tests-gource.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-gource.obj `if test -f 'src/gource.cpp'; then $(CYGPATH_W) 'src/gource.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource.cpp'; fi` src/gource_tests-gource_shell.o: src/gource_shell.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-gource_shell.o -MD -MP -MF src/$(DEPDIR)/gource_tests-gource_shell.Tpo -c -o src/gource_tests-gource_shell.o `test -f 'src/gource_shell.cpp' || echo '$(srcdir)/'`src/gource_shell.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-gource_shell.Tpo src/$(DEPDIR)/gource_tests-gource_shell.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource_shell.cpp' object='src/gource_tests-gource_shell.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-gource_shell.o `test -f 'src/gource_shell.cpp' || echo '$(srcdir)/'`src/gource_shell.cpp src/gource_tests-gource_shell.obj: src/gource_shell.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-gource_shell.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-gource_shell.Tpo -c -o src/gource_tests-gource_shell.obj `if test -f 'src/gource_shell.cpp'; then $(CYGPATH_W) 'src/gource_shell.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource_shell.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-gource_shell.Tpo src/$(DEPDIR)/gource_tests-gource_shell.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource_shell.cpp' object='src/gource_tests-gource_shell.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-gource_shell.obj `if test -f 'src/gource_shell.cpp'; then $(CYGPATH_W) 'src/gource_shell.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource_shell.cpp'; fi` src/gource_tests-gource_settings.o: src/gource_settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-gource_settings.o -MD -MP -MF src/$(DEPDIR)/gource_tests-gource_settings.Tpo -c -o src/gource_tests-gource_settings.o `test -f 'src/gource_settings.cpp' || echo '$(srcdir)/'`src/gource_settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-gource_settings.Tpo src/$(DEPDIR)/gource_tests-gource_settings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource_settings.cpp' object='src/gource_tests-gource_settings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-gource_settings.o `test -f 'src/gource_settings.cpp' || echo '$(srcdir)/'`src/gource_settings.cpp src/gource_tests-gource_settings.obj: src/gource_settings.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-gource_settings.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-gource_settings.Tpo -c -o src/gource_tests-gource_settings.obj `if test -f 'src/gource_settings.cpp'; then $(CYGPATH_W) 'src/gource_settings.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource_settings.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-gource_settings.Tpo src/$(DEPDIR)/gource_tests-gource_settings.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/gource_settings.cpp' object='src/gource_tests-gource_settings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-gource_settings.obj `if test -f 'src/gource_settings.cpp'; then $(CYGPATH_W) 'src/gource_settings.cpp'; else $(CYGPATH_W) '$(srcdir)/src/gource_settings.cpp'; fi` src/gource_tests-key.o: src/key.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-key.o -MD -MP -MF src/$(DEPDIR)/gource_tests-key.Tpo -c -o src/gource_tests-key.o `test -f 'src/key.cpp' || echo '$(srcdir)/'`src/key.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-key.Tpo src/$(DEPDIR)/gource_tests-key.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/key.cpp' object='src/gource_tests-key.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-key.o `test -f 'src/key.cpp' || echo '$(srcdir)/'`src/key.cpp src/gource_tests-key.obj: src/key.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-key.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-key.Tpo -c -o src/gource_tests-key.obj `if test -f 'src/key.cpp'; then $(CYGPATH_W) 'src/key.cpp'; else $(CYGPATH_W) '$(srcdir)/src/key.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-key.Tpo src/$(DEPDIR)/gource_tests-key.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/key.cpp' object='src/gource_tests-key.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-key.obj `if test -f 'src/key.cpp'; then $(CYGPATH_W) 'src/key.cpp'; else $(CYGPATH_W) '$(srcdir)/src/key.cpp'; fi` src/gource_tests-logmill.o: src/logmill.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-logmill.o -MD -MP -MF src/$(DEPDIR)/gource_tests-logmill.Tpo -c -o src/gource_tests-logmill.o `test -f 'src/logmill.cpp' || echo '$(srcdir)/'`src/logmill.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-logmill.Tpo src/$(DEPDIR)/gource_tests-logmill.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/logmill.cpp' object='src/gource_tests-logmill.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-logmill.o `test -f 'src/logmill.cpp' || echo '$(srcdir)/'`src/logmill.cpp src/gource_tests-logmill.obj: src/logmill.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-logmill.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-logmill.Tpo -c -o src/gource_tests-logmill.obj `if test -f 'src/logmill.cpp'; then $(CYGPATH_W) 'src/logmill.cpp'; else $(CYGPATH_W) '$(srcdir)/src/logmill.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-logmill.Tpo src/$(DEPDIR)/gource_tests-logmill.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/logmill.cpp' object='src/gource_tests-logmill.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-logmill.obj `if test -f 'src/logmill.cpp'; then $(CYGPATH_W) 'src/logmill.cpp'; else $(CYGPATH_W) '$(srcdir)/src/logmill.cpp'; fi` src/gource_tests-pawn.o: src/pawn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-pawn.o -MD -MP -MF src/$(DEPDIR)/gource_tests-pawn.Tpo -c -o src/gource_tests-pawn.o `test -f 'src/pawn.cpp' || echo '$(srcdir)/'`src/pawn.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-pawn.Tpo src/$(DEPDIR)/gource_tests-pawn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/pawn.cpp' object='src/gource_tests-pawn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-pawn.o `test -f 'src/pawn.cpp' || echo '$(srcdir)/'`src/pawn.cpp src/gource_tests-pawn.obj: src/pawn.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-pawn.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-pawn.Tpo -c -o src/gource_tests-pawn.obj `if test -f 'src/pawn.cpp'; then $(CYGPATH_W) 'src/pawn.cpp'; else $(CYGPATH_W) '$(srcdir)/src/pawn.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-pawn.Tpo src/$(DEPDIR)/gource_tests-pawn.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/pawn.cpp' object='src/gource_tests-pawn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-pawn.obj `if test -f 'src/pawn.cpp'; then $(CYGPATH_W) 'src/pawn.cpp'; else $(CYGPATH_W) '$(srcdir)/src/pawn.cpp'; fi` src/gource_tests-slider.o: src/slider.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-slider.o -MD -MP -MF src/$(DEPDIR)/gource_tests-slider.Tpo -c -o src/gource_tests-slider.o `test -f 'src/slider.cpp' || echo '$(srcdir)/'`src/slider.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-slider.Tpo src/$(DEPDIR)/gource_tests-slider.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/slider.cpp' object='src/gource_tests-slider.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-slider.o `test -f 'src/slider.cpp' || echo '$(srcdir)/'`src/slider.cpp src/gource_tests-slider.obj: src/slider.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-slider.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-slider.Tpo -c -o src/gource_tests-slider.obj `if test -f 'src/slider.cpp'; then $(CYGPATH_W) 'src/slider.cpp'; else $(CYGPATH_W) '$(srcdir)/src/slider.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-slider.Tpo src/$(DEPDIR)/gource_tests-slider.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/slider.cpp' object='src/gource_tests-slider.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-slider.obj `if test -f 'src/slider.cpp'; then $(CYGPATH_W) 'src/slider.cpp'; else $(CYGPATH_W) '$(srcdir)/src/slider.cpp'; fi` src/gource_tests-spline.o: src/spline.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-spline.o -MD -MP -MF src/$(DEPDIR)/gource_tests-spline.Tpo -c -o src/gource_tests-spline.o `test -f 'src/spline.cpp' || echo '$(srcdir)/'`src/spline.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-spline.Tpo src/$(DEPDIR)/gource_tests-spline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/spline.cpp' object='src/gource_tests-spline.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-spline.o `test -f 'src/spline.cpp' || echo '$(srcdir)/'`src/spline.cpp src/gource_tests-spline.obj: src/spline.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-spline.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-spline.Tpo -c -o src/gource_tests-spline.obj `if test -f 'src/spline.cpp'; then $(CYGPATH_W) 'src/spline.cpp'; else $(CYGPATH_W) '$(srcdir)/src/spline.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-spline.Tpo src/$(DEPDIR)/gource_tests-spline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/spline.cpp' object='src/gource_tests-spline.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-spline.obj `if test -f 'src/spline.cpp'; then $(CYGPATH_W) 'src/spline.cpp'; else $(CYGPATH_W) '$(srcdir)/src/spline.cpp'; fi` src/gource_tests-textbox.o: src/textbox.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-textbox.o -MD -MP -MF src/$(DEPDIR)/gource_tests-textbox.Tpo -c -o src/gource_tests-textbox.o `test -f 'src/textbox.cpp' || echo '$(srcdir)/'`src/textbox.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-textbox.Tpo src/$(DEPDIR)/gource_tests-textbox.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/textbox.cpp' object='src/gource_tests-textbox.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-textbox.o `test -f 'src/textbox.cpp' || echo '$(srcdir)/'`src/textbox.cpp src/gource_tests-textbox.obj: src/textbox.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-textbox.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-textbox.Tpo -c -o src/gource_tests-textbox.obj `if test -f 'src/textbox.cpp'; then $(CYGPATH_W) 'src/textbox.cpp'; else $(CYGPATH_W) '$(srcdir)/src/textbox.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-textbox.Tpo src/$(DEPDIR)/gource_tests-textbox.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/textbox.cpp' object='src/gource_tests-textbox.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-textbox.obj `if test -f 'src/textbox.cpp'; then $(CYGPATH_W) 'src/textbox.cpp'; else $(CYGPATH_W) '$(srcdir)/src/textbox.cpp'; fi` src/gource_tests-user.o: src/user.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-user.o -MD -MP -MF src/$(DEPDIR)/gource_tests-user.Tpo -c -o src/gource_tests-user.o `test -f 'src/user.cpp' || echo '$(srcdir)/'`src/user.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-user.Tpo src/$(DEPDIR)/gource_tests-user.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/user.cpp' object='src/gource_tests-user.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-user.o `test -f 'src/user.cpp' || echo '$(srcdir)/'`src/user.cpp src/gource_tests-user.obj: src/user.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-user.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-user.Tpo -c -o src/gource_tests-user.obj `if test -f 'src/user.cpp'; then $(CYGPATH_W) 'src/user.cpp'; else $(CYGPATH_W) '$(srcdir)/src/user.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-user.Tpo src/$(DEPDIR)/gource_tests-user.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/user.cpp' object='src/gource_tests-user.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-user.obj `if test -f 'src/user.cpp'; then $(CYGPATH_W) 'src/user.cpp'; else $(CYGPATH_W) '$(srcdir)/src/user.cpp'; fi` src/gource_tests-zoomcamera.o: src/zoomcamera.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-zoomcamera.o -MD -MP -MF src/$(DEPDIR)/gource_tests-zoomcamera.Tpo -c -o src/gource_tests-zoomcamera.o `test -f 'src/zoomcamera.cpp' || echo '$(srcdir)/'`src/zoomcamera.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-zoomcamera.Tpo src/$(DEPDIR)/gource_tests-zoomcamera.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/zoomcamera.cpp' object='src/gource_tests-zoomcamera.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-zoomcamera.o `test -f 'src/zoomcamera.cpp' || echo '$(srcdir)/'`src/zoomcamera.cpp src/gource_tests-zoomcamera.obj: src/zoomcamera.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/gource_tests-zoomcamera.obj -MD -MP -MF src/$(DEPDIR)/gource_tests-zoomcamera.Tpo -c -o src/gource_tests-zoomcamera.obj `if test -f 'src/zoomcamera.cpp'; then $(CYGPATH_W) 'src/zoomcamera.cpp'; else $(CYGPATH_W) '$(srcdir)/src/zoomcamera.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/gource_tests-zoomcamera.Tpo src/$(DEPDIR)/gource_tests-zoomcamera.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/zoomcamera.cpp' object='src/gource_tests-zoomcamera.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/gource_tests-zoomcamera.obj `if test -f 'src/zoomcamera.cpp'; then $(CYGPATH_W) 'src/zoomcamera.cpp'; else $(CYGPATH_W) '$(srcdir)/src/zoomcamera.cpp'; fi` src/tinyxml/gource_tests-tinyxmlerror.o: src/tinyxml/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource_tests-tinyxmlerror.o -MD -MP -MF src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlerror.Tpo -c -o src/tinyxml/gource_tests-tinyxmlerror.o `test -f 'src/tinyxml/tinyxmlerror.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlerror.Tpo src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlerror.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxmlerror.cpp' object='src/tinyxml/gource_tests-tinyxmlerror.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource_tests-tinyxmlerror.o `test -f 'src/tinyxml/tinyxmlerror.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxmlerror.cpp src/tinyxml/gource_tests-tinyxmlerror.obj: src/tinyxml/tinyxmlerror.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource_tests-tinyxmlerror.obj -MD -MP -MF src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlerror.Tpo -c -o src/tinyxml/gource_tests-tinyxmlerror.obj `if test -f 'src/tinyxml/tinyxmlerror.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxmlerror.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxmlerror.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlerror.Tpo src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlerror.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxmlerror.cpp' object='src/tinyxml/gource_tests-tinyxmlerror.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource_tests-tinyxmlerror.obj `if test -f 'src/tinyxml/tinyxmlerror.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxmlerror.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxmlerror.cpp'; fi` src/tinyxml/gource_tests-tinystr.o: src/tinyxml/tinystr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource_tests-tinystr.o -MD -MP -MF src/tinyxml/$(DEPDIR)/gource_tests-tinystr.Tpo -c -o src/tinyxml/gource_tests-tinystr.o `test -f 'src/tinyxml/tinystr.cpp' || echo '$(srcdir)/'`src/tinyxml/tinystr.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource_tests-tinystr.Tpo src/tinyxml/$(DEPDIR)/gource_tests-tinystr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinystr.cpp' object='src/tinyxml/gource_tests-tinystr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource_tests-tinystr.o `test -f 'src/tinyxml/tinystr.cpp' || echo '$(srcdir)/'`src/tinyxml/tinystr.cpp src/tinyxml/gource_tests-tinystr.obj: src/tinyxml/tinystr.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource_tests-tinystr.obj -MD -MP -MF src/tinyxml/$(DEPDIR)/gource_tests-tinystr.Tpo -c -o src/tinyxml/gource_tests-tinystr.obj `if test -f 'src/tinyxml/tinystr.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinystr.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinystr.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource_tests-tinystr.Tpo src/tinyxml/$(DEPDIR)/gource_tests-tinystr.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinystr.cpp' object='src/tinyxml/gource_tests-tinystr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource_tests-tinystr.obj `if test -f 'src/tinyxml/tinystr.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinystr.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinystr.cpp'; fi` src/tinyxml/gource_tests-tinyxml.o: src/tinyxml/tinyxml.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource_tests-tinyxml.o -MD -MP -MF src/tinyxml/$(DEPDIR)/gource_tests-tinyxml.Tpo -c -o src/tinyxml/gource_tests-tinyxml.o `test -f 'src/tinyxml/tinyxml.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxml.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource_tests-tinyxml.Tpo src/tinyxml/$(DEPDIR)/gource_tests-tinyxml.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxml.cpp' object='src/tinyxml/gource_tests-tinyxml.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource_tests-tinyxml.o `test -f 'src/tinyxml/tinyxml.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxml.cpp src/tinyxml/gource_tests-tinyxml.obj: src/tinyxml/tinyxml.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource_tests-tinyxml.obj -MD -MP -MF src/tinyxml/$(DEPDIR)/gource_tests-tinyxml.Tpo -c -o src/tinyxml/gource_tests-tinyxml.obj `if test -f 'src/tinyxml/tinyxml.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxml.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxml.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource_tests-tinyxml.Tpo src/tinyxml/$(DEPDIR)/gource_tests-tinyxml.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxml.cpp' object='src/tinyxml/gource_tests-tinyxml.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource_tests-tinyxml.obj `if test -f 'src/tinyxml/tinyxml.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxml.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxml.cpp'; fi` src/tinyxml/gource_tests-tinyxmlparser.o: src/tinyxml/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource_tests-tinyxmlparser.o -MD -MP -MF src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlparser.Tpo -c -o src/tinyxml/gource_tests-tinyxmlparser.o `test -f 'src/tinyxml/tinyxmlparser.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlparser.Tpo src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlparser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxmlparser.cpp' object='src/tinyxml/gource_tests-tinyxmlparser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource_tests-tinyxmlparser.o `test -f 'src/tinyxml/tinyxmlparser.cpp' || echo '$(srcdir)/'`src/tinyxml/tinyxmlparser.cpp src/tinyxml/gource_tests-tinyxmlparser.obj: src/tinyxml/tinyxmlparser.cpp @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/tinyxml/gource_tests-tinyxmlparser.obj -MD -MP -MF src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlparser.Tpo -c -o src/tinyxml/gource_tests-tinyxmlparser.obj `if test -f 'src/tinyxml/tinyxmlparser.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxmlparser.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxmlparser.cpp'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlparser.Tpo src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlparser.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='src/tinyxml/tinyxmlparser.cpp' object='src/tinyxml/gource_tests-tinyxmlparser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gource_tests_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/tinyxml/gource_tests-tinyxmlparser.obj `if test -f 'src/tinyxml/tinyxmlparser.cpp'; then $(CYGPATH_W) 'src/tinyxml/tinyxmlparser.cpp'; else $(CYGPATH_W) '$(srcdir)/src/tinyxml/tinyxmlparser.cpp'; fi` install-dist_fontsDATA: $(dist_fonts_DATA) @$(NORMAL_INSTALL) @list='$(dist_fonts_DATA)'; test -n "$(fontsdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(fontsdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(fontsdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fontsdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(fontsdir)" || exit $$?; \ done uninstall-dist_fontsDATA: @$(NORMAL_UNINSTALL) @list='$(dist_fonts_DATA)'; test -n "$(fontsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(fontsdir)'; $(am__uninstall_files_from_dir) install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) install-dist_shadersDATA: $(dist_shaders_DATA) @$(NORMAL_INSTALL) @list='$(dist_shaders_DATA)'; test -n "$(shadersdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shadersdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shadersdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shadersdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shadersdir)" || exit $$?; \ done uninstall-dist_shadersDATA: @$(NORMAL_UNINSTALL) @list='$(dist_shaders_DATA)'; test -n "$(shadersdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shadersdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? gource_tests.log: gource_tests$(EXEEXT) @p='gource_tests$(EXEEXT)'; \ b='gource_tests'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(fontsdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(shadersdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) -rm -f src/core/$(DEPDIR)/$(am__dirstamp) -rm -f src/core/$(am__dirstamp) -rm -f src/formats/$(DEPDIR)/$(am__dirstamp) -rm -f src/formats/$(am__dirstamp) -rm -f src/test/$(DEPDIR)/$(am__dirstamp) -rm -f src/test/$(am__dirstamp) -rm -f src/tinyxml/$(DEPDIR)/$(am__dirstamp) -rm -f src/tinyxml/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f src/$(DEPDIR)/gource-action.Po -rm -f src/$(DEPDIR)/gource-bloom.Po -rm -f src/$(DEPDIR)/gource-caption.Po -rm -f src/$(DEPDIR)/gource-dirnode.Po -rm -f src/$(DEPDIR)/gource-file.Po -rm -f src/$(DEPDIR)/gource-gource.Po -rm -f src/$(DEPDIR)/gource-gource_settings.Po -rm -f src/$(DEPDIR)/gource-gource_shell.Po -rm -f src/$(DEPDIR)/gource-key.Po -rm -f src/$(DEPDIR)/gource-logmill.Po -rm -f src/$(DEPDIR)/gource-main.Po -rm -f src/$(DEPDIR)/gource-pawn.Po -rm -f src/$(DEPDIR)/gource-slider.Po -rm -f src/$(DEPDIR)/gource-spline.Po -rm -f src/$(DEPDIR)/gource-textbox.Po -rm -f src/$(DEPDIR)/gource-user.Po -rm -f src/$(DEPDIR)/gource-zoomcamera.Po -rm -f src/$(DEPDIR)/gource_tests-action.Po -rm -f src/$(DEPDIR)/gource_tests-bloom.Po -rm -f src/$(DEPDIR)/gource_tests-caption.Po -rm -f src/$(DEPDIR)/gource_tests-dirnode.Po -rm -f src/$(DEPDIR)/gource_tests-file.Po -rm -f src/$(DEPDIR)/gource_tests-gource.Po -rm -f src/$(DEPDIR)/gource_tests-gource_settings.Po -rm -f src/$(DEPDIR)/gource_tests-gource_shell.Po -rm -f src/$(DEPDIR)/gource_tests-key.Po -rm -f src/$(DEPDIR)/gource_tests-logmill.Po -rm -f src/$(DEPDIR)/gource_tests-pawn.Po -rm -f src/$(DEPDIR)/gource_tests-slider.Po -rm -f src/$(DEPDIR)/gource_tests-spline.Po -rm -f src/$(DEPDIR)/gource_tests-textbox.Po -rm -f src/$(DEPDIR)/gource_tests-user.Po -rm -f src/$(DEPDIR)/gource_tests-zoomcamera.Po -rm -f src/core/$(DEPDIR)/gource-conffile.Po -rm -f src/core/$(DEPDIR)/gource-display.Po -rm -f src/core/$(DEPDIR)/gource-frustum.Po -rm -f src/core/$(DEPDIR)/gource-fxfont.Po -rm -f src/core/$(DEPDIR)/gource-logger.Po -rm -f src/core/$(DEPDIR)/gource-mousecursor.Po -rm -f src/core/$(DEPDIR)/gource-plane.Po -rm -f src/core/$(DEPDIR)/gource-png_writer.Po -rm -f src/core/$(DEPDIR)/gource-ppm.Po -rm -f src/core/$(DEPDIR)/gource-quadtree.Po -rm -f src/core/$(DEPDIR)/gource-regex.Po -rm -f src/core/$(DEPDIR)/gource-resource.Po -rm -f src/core/$(DEPDIR)/gource-sdlapp.Po -rm -f src/core/$(DEPDIR)/gource-seeklog.Po -rm -f src/core/$(DEPDIR)/gource-settings.Po -rm -f src/core/$(DEPDIR)/gource-shader.Po -rm -f src/core/$(DEPDIR)/gource-shader_common.Po -rm -f src/core/$(DEPDIR)/gource-stringhash.Po -rm -f src/core/$(DEPDIR)/gource-texture.Po -rm -f src/core/$(DEPDIR)/gource-timezone.Po -rm -f src/core/$(DEPDIR)/gource-vbo.Po -rm -f src/core/$(DEPDIR)/gource-vectors.Po -rm -f src/core/$(DEPDIR)/gource_tests-conffile.Po -rm -f src/core/$(DEPDIR)/gource_tests-display.Po -rm -f src/core/$(DEPDIR)/gource_tests-frustum.Po -rm -f src/core/$(DEPDIR)/gource_tests-fxfont.Po -rm -f src/core/$(DEPDIR)/gource_tests-logger.Po -rm -f src/core/$(DEPDIR)/gource_tests-mousecursor.Po -rm -f src/core/$(DEPDIR)/gource_tests-plane.Po -rm -f src/core/$(DEPDIR)/gource_tests-png_writer.Po -rm -f src/core/$(DEPDIR)/gource_tests-ppm.Po -rm -f src/core/$(DEPDIR)/gource_tests-quadtree.Po -rm -f src/core/$(DEPDIR)/gource_tests-regex.Po -rm -f src/core/$(DEPDIR)/gource_tests-resource.Po -rm -f src/core/$(DEPDIR)/gource_tests-sdlapp.Po -rm -f src/core/$(DEPDIR)/gource_tests-seeklog.Po -rm -f src/core/$(DEPDIR)/gource_tests-settings.Po -rm -f src/core/$(DEPDIR)/gource_tests-shader.Po -rm -f src/core/$(DEPDIR)/gource_tests-shader_common.Po -rm -f src/core/$(DEPDIR)/gource_tests-stringhash.Po -rm -f src/core/$(DEPDIR)/gource_tests-texture.Po -rm -f src/core/$(DEPDIR)/gource_tests-timezone.Po -rm -f src/core/$(DEPDIR)/gource_tests-vbo.Po -rm -f src/core/$(DEPDIR)/gource_tests-vectors.Po -rm -f src/formats/$(DEPDIR)/gource-apache.Po -rm -f src/formats/$(DEPDIR)/gource-bzr.Po -rm -f src/formats/$(DEPDIR)/gource-commitlog.Po -rm -f src/formats/$(DEPDIR)/gource-custom.Po -rm -f src/formats/$(DEPDIR)/gource-cvs-exp.Po -rm -f src/formats/$(DEPDIR)/gource-cvs2cl.Po -rm -f src/formats/$(DEPDIR)/gource-git.Po -rm -f src/formats/$(DEPDIR)/gource-gitraw.Po -rm -f src/formats/$(DEPDIR)/gource-hg.Po -rm -f src/formats/$(DEPDIR)/gource-svn.Po -rm -f src/formats/$(DEPDIR)/gource_tests-apache.Po -rm -f src/formats/$(DEPDIR)/gource_tests-bzr.Po -rm -f src/formats/$(DEPDIR)/gource_tests-commitlog.Po -rm -f src/formats/$(DEPDIR)/gource_tests-custom.Po -rm -f src/formats/$(DEPDIR)/gource_tests-cvs-exp.Po -rm -f src/formats/$(DEPDIR)/gource_tests-cvs2cl.Po -rm -f src/formats/$(DEPDIR)/gource_tests-git.Po -rm -f src/formats/$(DEPDIR)/gource_tests-gitraw.Po -rm -f src/formats/$(DEPDIR)/gource_tests-hg.Po -rm -f src/formats/$(DEPDIR)/gource_tests-svn.Po -rm -f src/test/$(DEPDIR)/gource_tests-datetime_tests.Po -rm -f src/test/$(DEPDIR)/gource_tests-main.Po -rm -f src/test/$(DEPDIR)/gource_tests-regex_tests.Po -rm -f src/tinyxml/$(DEPDIR)/gource-tinystr.Po -rm -f src/tinyxml/$(DEPDIR)/gource-tinyxml.Po -rm -f src/tinyxml/$(DEPDIR)/gource-tinyxmlerror.Po -rm -f src/tinyxml/$(DEPDIR)/gource-tinyxmlparser.Po -rm -f src/tinyxml/$(DEPDIR)/gource_tests-tinystr.Po -rm -f src/tinyxml/$(DEPDIR)/gource_tests-tinyxml.Po -rm -f src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlerror.Po -rm -f src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlparser.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_fontsDATA install-dist_pkgdataDATA \ install-dist_shadersDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f src/$(DEPDIR)/gource-action.Po -rm -f src/$(DEPDIR)/gource-bloom.Po -rm -f src/$(DEPDIR)/gource-caption.Po -rm -f src/$(DEPDIR)/gource-dirnode.Po -rm -f src/$(DEPDIR)/gource-file.Po -rm -f src/$(DEPDIR)/gource-gource.Po -rm -f src/$(DEPDIR)/gource-gource_settings.Po -rm -f src/$(DEPDIR)/gource-gource_shell.Po -rm -f src/$(DEPDIR)/gource-key.Po -rm -f src/$(DEPDIR)/gource-logmill.Po -rm -f src/$(DEPDIR)/gource-main.Po -rm -f src/$(DEPDIR)/gource-pawn.Po -rm -f src/$(DEPDIR)/gource-slider.Po -rm -f src/$(DEPDIR)/gource-spline.Po -rm -f src/$(DEPDIR)/gource-textbox.Po -rm -f src/$(DEPDIR)/gource-user.Po -rm -f src/$(DEPDIR)/gource-zoomcamera.Po -rm -f src/$(DEPDIR)/gource_tests-action.Po -rm -f src/$(DEPDIR)/gource_tests-bloom.Po -rm -f src/$(DEPDIR)/gource_tests-caption.Po -rm -f src/$(DEPDIR)/gource_tests-dirnode.Po -rm -f src/$(DEPDIR)/gource_tests-file.Po -rm -f src/$(DEPDIR)/gource_tests-gource.Po -rm -f src/$(DEPDIR)/gource_tests-gource_settings.Po -rm -f src/$(DEPDIR)/gource_tests-gource_shell.Po -rm -f src/$(DEPDIR)/gource_tests-key.Po -rm -f src/$(DEPDIR)/gource_tests-logmill.Po -rm -f src/$(DEPDIR)/gource_tests-pawn.Po -rm -f src/$(DEPDIR)/gource_tests-slider.Po -rm -f src/$(DEPDIR)/gource_tests-spline.Po -rm -f src/$(DEPDIR)/gource_tests-textbox.Po -rm -f src/$(DEPDIR)/gource_tests-user.Po -rm -f src/$(DEPDIR)/gource_tests-zoomcamera.Po -rm -f src/core/$(DEPDIR)/gource-conffile.Po -rm -f src/core/$(DEPDIR)/gource-display.Po -rm -f src/core/$(DEPDIR)/gource-frustum.Po -rm -f src/core/$(DEPDIR)/gource-fxfont.Po -rm -f src/core/$(DEPDIR)/gource-logger.Po -rm -f src/core/$(DEPDIR)/gource-mousecursor.Po -rm -f src/core/$(DEPDIR)/gource-plane.Po -rm -f src/core/$(DEPDIR)/gource-png_writer.Po -rm -f src/core/$(DEPDIR)/gource-ppm.Po -rm -f src/core/$(DEPDIR)/gource-quadtree.Po -rm -f src/core/$(DEPDIR)/gource-regex.Po -rm -f src/core/$(DEPDIR)/gource-resource.Po -rm -f src/core/$(DEPDIR)/gource-sdlapp.Po -rm -f src/core/$(DEPDIR)/gource-seeklog.Po -rm -f src/core/$(DEPDIR)/gource-settings.Po -rm -f src/core/$(DEPDIR)/gource-shader.Po -rm -f src/core/$(DEPDIR)/gource-shader_common.Po -rm -f src/core/$(DEPDIR)/gource-stringhash.Po -rm -f src/core/$(DEPDIR)/gource-texture.Po -rm -f src/core/$(DEPDIR)/gource-timezone.Po -rm -f src/core/$(DEPDIR)/gource-vbo.Po -rm -f src/core/$(DEPDIR)/gource-vectors.Po -rm -f src/core/$(DEPDIR)/gource_tests-conffile.Po -rm -f src/core/$(DEPDIR)/gource_tests-display.Po -rm -f src/core/$(DEPDIR)/gource_tests-frustum.Po -rm -f src/core/$(DEPDIR)/gource_tests-fxfont.Po -rm -f src/core/$(DEPDIR)/gource_tests-logger.Po -rm -f src/core/$(DEPDIR)/gource_tests-mousecursor.Po -rm -f src/core/$(DEPDIR)/gource_tests-plane.Po -rm -f src/core/$(DEPDIR)/gource_tests-png_writer.Po -rm -f src/core/$(DEPDIR)/gource_tests-ppm.Po -rm -f src/core/$(DEPDIR)/gource_tests-quadtree.Po -rm -f src/core/$(DEPDIR)/gource_tests-regex.Po -rm -f src/core/$(DEPDIR)/gource_tests-resource.Po -rm -f src/core/$(DEPDIR)/gource_tests-sdlapp.Po -rm -f src/core/$(DEPDIR)/gource_tests-seeklog.Po -rm -f src/core/$(DEPDIR)/gource_tests-settings.Po -rm -f src/core/$(DEPDIR)/gource_tests-shader.Po -rm -f src/core/$(DEPDIR)/gource_tests-shader_common.Po -rm -f src/core/$(DEPDIR)/gource_tests-stringhash.Po -rm -f src/core/$(DEPDIR)/gource_tests-texture.Po -rm -f src/core/$(DEPDIR)/gource_tests-timezone.Po -rm -f src/core/$(DEPDIR)/gource_tests-vbo.Po -rm -f src/core/$(DEPDIR)/gource_tests-vectors.Po -rm -f src/formats/$(DEPDIR)/gource-apache.Po -rm -f src/formats/$(DEPDIR)/gource-bzr.Po -rm -f src/formats/$(DEPDIR)/gource-commitlog.Po -rm -f src/formats/$(DEPDIR)/gource-custom.Po -rm -f src/formats/$(DEPDIR)/gource-cvs-exp.Po -rm -f src/formats/$(DEPDIR)/gource-cvs2cl.Po -rm -f src/formats/$(DEPDIR)/gource-git.Po -rm -f src/formats/$(DEPDIR)/gource-gitraw.Po -rm -f src/formats/$(DEPDIR)/gource-hg.Po -rm -f src/formats/$(DEPDIR)/gource-svn.Po -rm -f src/formats/$(DEPDIR)/gource_tests-apache.Po -rm -f src/formats/$(DEPDIR)/gource_tests-bzr.Po -rm -f src/formats/$(DEPDIR)/gource_tests-commitlog.Po -rm -f src/formats/$(DEPDIR)/gource_tests-custom.Po -rm -f src/formats/$(DEPDIR)/gource_tests-cvs-exp.Po -rm -f src/formats/$(DEPDIR)/gource_tests-cvs2cl.Po -rm -f src/formats/$(DEPDIR)/gource_tests-git.Po -rm -f src/formats/$(DEPDIR)/gource_tests-gitraw.Po -rm -f src/formats/$(DEPDIR)/gource_tests-hg.Po -rm -f src/formats/$(DEPDIR)/gource_tests-svn.Po -rm -f src/test/$(DEPDIR)/gource_tests-datetime_tests.Po -rm -f src/test/$(DEPDIR)/gource_tests-main.Po -rm -f src/test/$(DEPDIR)/gource_tests-regex_tests.Po -rm -f src/tinyxml/$(DEPDIR)/gource-tinystr.Po -rm -f src/tinyxml/$(DEPDIR)/gource-tinyxml.Po -rm -f src/tinyxml/$(DEPDIR)/gource-tinyxmlerror.Po -rm -f src/tinyxml/$(DEPDIR)/gource-tinyxmlparser.Po -rm -f src/tinyxml/$(DEPDIR)/gource_tests-tinystr.Po -rm -f src/tinyxml/$(DEPDIR)/gource_tests-tinyxml.Po -rm -f src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlerror.Po -rm -f src/tinyxml/$(DEPDIR)/gource_tests-tinyxmlparser.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_fontsDATA \ uninstall-dist_pkgdataDATA uninstall-dist_shadersDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: check-am install-am install-data-am install-strip uninstall-am .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \ check-TESTS check-am clean clean-binPROGRAMS \ clean-checkPROGRAMS clean-cscope clean-generic cscope \ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ dist-zstd distcheck distclean distclean-compile \ distclean-generic distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-data-hook install-dist_fontsDATA \ install-dist_pkgdataDATA install-dist_shadersDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-dist_fontsDATA \ uninstall-dist_pkgdataDATA uninstall-dist_shadersDATA \ uninstall-hook .PRECIOUS: Makefile install-data-hook: $(MKDIR_P) $(DESTDIR)$(mandir)/man1 gzip -cf9 $(srcdir)/data/gource.1 > $(DESTDIR)$(mandir)/man1/gource.1.gz uninstall-hook: rm -f $(DESTDIR)$(mandir)/man1/gource.1.gz # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gource-0.56/build-aux/0000775002342600234260000000000015152463042014466 5ustar andrewcandrewcgource-0.56/build-aux/depcomp0000755002342600234260000005602015152463042016044 0ustar andrewcandrewc#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gource-0.56/build-aux/missing0000755002342600234260000001533615152463042016073 0ustar andrewcandrewc#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gource-0.56/build-aux/test-driver0000755002342600234260000001141715152463042016666 0ustar andrewcandrewc#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <"$log_file" "$@" >>"$log_file" 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>"$log_file" # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gource-0.56/build-aux/config.guess0000755002342600234260000014051215152463042017007 0ustar andrewcandrewc#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gource-0.56/build-aux/install-sh0000755002342600234260000003577615152463042016512 0ustar andrewcandrewc#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gource-0.56/build-aux/compile0000755002342600234260000001635015152463042016047 0ustar andrewcandrewc#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gource-0.56/build-aux/config.sub0000755002342600234260000010511615152463042016453 0ustar andrewcandrewc#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gource-0.56/configure0000775002342600234260000104261315152463042014512 0ustar andrewcandrewc#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for Gource 0.56. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: acaudwell@gmail.com about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Gource' PACKAGE_TARNAME='gource' PACKAGE_VERSION='0.56' PACKAGE_STRING='Gource 0.56' PACKAGE_BUGREPORT='acaudwell@gmail.com' PACKAGE_URL='' ac_unique_file="src/main.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_cxx_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS USE_BUNDLED_TINYXML_FALSE USE_BUNDLED_TINYXML_TRUE gourcefontdir FONTDIR_FALSE FONTDIR_TRUE gourcefontfile FONTFILE_FALSE FONTFILE_TRUE BOOST_FILESYSTEM_LIB BOOST_LDFLAGS BOOST_CPPFLAGS PNG_LIBS PNG_CFLAGS SDL2_LIBS SDL2_CFLAGS GLEW_LIBS GLEW_CFLAGS PCRE2_LIBS PCRE2_CFLAGS FT2_LIBS FT2_CFLAGS GLU_LIBS GLU_CFLAGS am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC GL_LIBS GL_CFLAGS PKG_CONFIG am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX host_os host_vendor host_cpu host build_os build_vendor build_cpu build AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_xquartz_gl with_boost with_boost_libdir with_boost_filesystem enable_font_file enable_ttf_font_dir with_tinyxml ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC PKG_CONFIG GL_CFLAGS GL_LIBS CC CFLAGS GLU_CFLAGS GLU_LIBS FT2_CFLAGS FT2_LIBS PCRE2_CFLAGS PCRE2_LIBS GLEW_CFLAGS GLEW_LIBS SDL2_CFLAGS SDL2_LIBS PNG_CFLAGS PNG_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Gource 0.56 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gource] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Gource 0.56:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-font-file=FILE override the default font --enable-ttf-font-dir=DIR directory containing GNU FreeFont TTF fonts Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-xquartz-gl[=DIR] On Mac OSX, use opengl provided by X11/XQuartz instead of the built-in framework. If enabled, the default location is [DIR=/opt/X11]. This option is default to false. --with-boost[=ARG] use Boost library from a standard location (ARG=yes), from the specified location (ARG=), or disable it (ARG=no) [ARG=yes] --with-boost-libdir=LIB_DIR Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located. --with-boost-filesystem[=special-lib] use the Filesystem library from boost - it is possible to specify a certain library for the linker e.g. --with-boost-filesystem=boost_filesystem-gcc-mt --with-tinyxml Use system installed TinyXML library Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility GL_CFLAGS C compiler flags for GL, overriding configure script defaults GL_LIBS Linker flags for GL, overriding configure script defaults CC C compiler command CFLAGS C compiler flags GLU_CFLAGS C compiler flags for GLU, overriding system check GLU_LIBS Linker flags for GLU, overriding system check FT2_CFLAGS C compiler flags for FT2, overriding pkg-config FT2_LIBS linker flags for FT2, overriding pkg-config PCRE2_CFLAGS C compiler flags for PCRE2, overriding pkg-config PCRE2_LIBS linker flags for PCRE2, overriding pkg-config GLEW_CFLAGS C compiler flags for GLEW, overriding pkg-config GLEW_LIBS linker flags for GLEW, overriding pkg-config SDL2_CFLAGS C compiler flags for SDL2, overriding pkg-config SDL2_LIBS linker flags for SDL2, overriding pkg-config PNG_CFLAGS C compiler flags for PNG, overriding pkg-config PNG_LIBS linker flags for PNG, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Gource configure 0.56 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_cxx_check_func LINENO FUNC VAR # ------------------------------------ # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Gource $as_me 0.56, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include #include // and are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template struct test_template { T const val; explicit test_template(T t) : val(t) {} template T add(U u) { return static_cast(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template auto sum(V first) -> V { return first; } template auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template> v(test_template(12)); } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_cxx_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_cxx_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_cxx_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_cxx_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_cxx_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_cxx_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_cxx_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_cxx_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_cxx_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="compile config.guess config.sub missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}/build-aux" # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gource' VERSION='0.56' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 printf %s "checking whether the C++ compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 printf %s "checking for C++ compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CXX_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_fn_cxx_check_func "$LINENO" "timegm" "ac_cv_func_timegm" if test "x$ac_cv_func_timegm" = xyes then : printf "%s\n" "#define HAVE_TIMEGM 1" >>confdefs.h fi ac_fn_cxx_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" if test "x$ac_cv_func_unsetenv" = xyes then : printf "%s\n" "#define HAVE_UNSETENV 1" >>confdefs.h fi #Disable X11 on Macs unless required if test "$with_x" != yes then : case "$host_os" in darwin*) with_x="no" LIBS="$LIBS -framework CoreFoundation" ;; esac fi #GL if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi # Check whether --with-xquartz-gl was given. if test ${with_xquartz_gl+y} then : withval=$with_xquartz_gl; if test "X$with_xquartz_gl"="Xyes" then : with_xquartz_gl="/opt/X11" fi else $as_nop with_xquartz_gl=no fi if test "X$with_xquartz_gl" != "Xno" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking OSX X11 path" >&5 printf %s "checking OSX X11 path... " >&6; } if test -e "$with_xquartz_gl" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: \"$with_xquartz_gl\"" >&5 printf "%s\n" "\"$with_xquartz_gl\"" >&6; } CFLAGS="-I$with_xquartz_gl/include $CFLAGS" LIBS="-L$with_xquartz_gl/lib $LIBS" else $as_nop with_xquartz_gl=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: --with-xquartz-gl was given, but test for X11 failed. Fallback to system framework" >&5 printf "%s\n" "$as_me: WARNING: --with-xquartz-gl was given, but test for X11 failed. Fallback to system framework" >&2;} fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_cxx_list do if test $ac_cache; then ac_fn_cxx_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi case ${host} in #( *-darwin*) : if test "x$with_xquartz_gl" != "xno" then : GL_LIBS="${GL_LIBS:--lGL}" else $as_nop GL_LIBS="${GL_LIBS:--framework OpenGL}" fi ;; #( *-cygwin*|*-mingw*) : if test -n "$GL_LIBS" then : else $as_nop ax_check_gl_manual_libs_generic_extra_libs="opengl32 GL gl" if test "X$ax_check_gl_manual_libs_generic_extra_libs" = "X" then : as_fn_error $? "AX_CHECK_GL_MANUAL_LIBS_GENERIC argument must no be empty" "$LINENO" 5 fi _ax_gl_saved_flag_cflags="$CFLAGS" CFLAGS="$GL_CFLAGS $CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing glBegin" >&5 printf %s "checking for library containing glBegin... " >&6; } if test ${ac_cv_search_glBegin+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char glBegin (); int main (void) { return glBegin (); ; return 0; } _ACEOF for ac_lib in '' $ax_check_gl_manual_libs_generic_extra_libs do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_glBegin=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_glBegin+y} then : break fi done if test ${ac_cv_search_glBegin+y} then : else $as_nop ac_cv_search_glBegin=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glBegin" >&5 printf "%s\n" "$ac_cv_search_glBegin" >&6; } ac_res=$ac_cv_search_glBegin if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ax_check_gl_lib_opengl="yes" break fi if test "X$ax_check_gl_lib_opengl"="Xyes" then : GL_LIBS="${ac_cv_search_glBegin}" fi CFLAGS="$_ax_gl_saved_flag_cflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi ac_fn_cxx_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default" if test "x$ac_cv_header_windows_h" = xyes then : printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h fi ;; #( *) : if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GL" >&5 printf %s "checking for GL... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$GL_CFLAGS"; then pkg_cv_GL_CFLAGS="$GL_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gl\""; } >&5 ($PKG_CONFIG --exists --print-errors "gl") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GL_CFLAGS=`$PKG_CONFIG --cflags "gl" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$GL_LIBS"; then pkg_cv_GL_LIBS="$GL_LIBS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gl\""; } >&5 ($PKG_CONFIG --exists --print-errors "gl") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GL_LIBS=`$PKG_CONFIG --libs "gl" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GL_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gl"` else GL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gl"` fi # Put the nasty error message in config.log where it belongs echo "$GL_PKG_ERRORS" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if test -n "$GL_LIBS" then : else $as_nop ax_check_gl_manual_libs_generic_extra_libs="GL gl" if test "X$ax_check_gl_manual_libs_generic_extra_libs" = "X" then : as_fn_error $? "AX_CHECK_GL_MANUAL_LIBS_GENERIC argument must no be empty" "$LINENO" 5 fi _ax_gl_saved_flag_cflags="$CFLAGS" CFLAGS="$GL_CFLAGS $CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing glBegin" >&5 printf %s "checking for library containing glBegin... " >&6; } if test ${ac_cv_search_glBegin+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char glBegin (); int main (void) { return glBegin (); ; return 0; } _ACEOF for ac_lib in '' $ax_check_gl_manual_libs_generic_extra_libs do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_glBegin=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_glBegin+y} then : break fi done if test ${ac_cv_search_glBegin+y} then : else $as_nop ac_cv_search_glBegin=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glBegin" >&5 printf "%s\n" "$ac_cv_search_glBegin" >&6; } ac_res=$ac_cv_search_glBegin if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ax_check_gl_lib_opengl="yes" break fi if test "X$ax_check_gl_lib_opengl"="Xyes" then : GL_LIBS="${ac_cv_search_glBegin}" fi CFLAGS="$_ax_gl_saved_flag_cflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi elif test $pkg_failed = untried; then if test -n "$GL_LIBS" then : else $as_nop ax_check_gl_manual_libs_generic_extra_libs="GL gl" if test "X$ax_check_gl_manual_libs_generic_extra_libs" = "X" then : as_fn_error $? "AX_CHECK_GL_MANUAL_LIBS_GENERIC argument must no be empty" "$LINENO" 5 fi _ax_gl_saved_flag_cflags="$CFLAGS" CFLAGS="$GL_CFLAGS $CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing glBegin" >&5 printf %s "checking for library containing glBegin... " >&6; } if test ${ac_cv_search_glBegin+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char glBegin (); int main (void) { return glBegin (); ; return 0; } _ACEOF for ac_lib in '' $ax_check_gl_manual_libs_generic_extra_libs do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_glBegin=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_glBegin+y} then : break fi done if test ${ac_cv_search_glBegin+y} then : else $as_nop ac_cv_search_glBegin=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glBegin" >&5 printf "%s\n" "$ac_cv_search_glBegin" >&6; } ac_res=$ac_cv_search_glBegin if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" ax_check_gl_lib_opengl="yes" break fi if test "X$ax_check_gl_lib_opengl"="Xyes" then : GL_LIBS="${ac_cv_search_glBegin}" fi CFLAGS="$_ax_gl_saved_flag_cflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi else GL_CFLAGS=$pkg_cv_GL_CFLAGS GL_LIBS=$pkg_cv_GL_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } : fi ;; esac _ax_gl_saved_flag_cflags="$CFLAGS" CFLAGS="$GL_CFLAGS $CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu for ac_header in GL/gl.h OpenGL/gl.h do : as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF #define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF ax_check_gl_have_headers="yes";break fi done CFLAGS="$_ax_gl_saved_flag_cflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "X$ax_check_gl_have_headers" = "Xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiling a minimal OpenGL program" >&5 printf %s "checking for compiling a minimal OpenGL program... " >&6; } if test ${ax_cv_check_gl_compile_opengl+y} then : printf %s "(cached) " >&6 else $as_nop _ax_gl_saved_flag_cflags="$CFLAGS" CFLAGS="$GL_CFLAGS $CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GL_H # include # elif defined(HAVE_OPENGL_GL_H) # include # else # error no gl.h # endif int main (void) { glBegin(0) ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ax_check_gl_compile_opengl="yes" else $as_nop ax_check_gl_compile_opengl="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$_ax_gl_saved_flag_cflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cv_check_gl_compile_opengl="${ax_check_gl_compile_opengl}" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_gl_compile_opengl" >&5 printf "%s\n" "$ax_cv_check_gl_compile_opengl" >&6; } ax_check_gl_compile_opengl="${ax_cv_check_gl_compile_opengl}" else $as_nop no_gl=yes fi if test "X$ax_check_gl_compile_opengl" = "Xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for linking a minimal OpenGL program" >&5 printf %s "checking for linking a minimal OpenGL program... " >&6; } if test ${ax_cv_check_gl_link_opengl+y} then : printf %s "(cached) " >&6 else $as_nop _ax_gl_saved_flag_cflags="$CFLAGS" CFLAGS="$GL_CFLAGS $CFLAGS" _ax_gl_saved_flag_libs="$LIBS" LIBS="$GL_LIBS $LIBS" _ax_gl_saved_flag_ldflags="$LDFLAGS" LDFLAGS="$GL_LDFLAGS $LDFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GL_H # include # elif defined(HAVE_OPENGL_GL_H) # include # else # error no gl.h # endif int main (void) { glBegin(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_check_gl_link_opengl="yes" else $as_nop ax_check_gl_link_opengl="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$_ax_gl_saved_flag_cflags" LIBS="$_ax_gl_saved_flag_libs" LDFLAGS="$_ax_gl_saved_flag_ldflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ax_cv_check_gl_link_opengl="${ax_check_gl_link_opengl}" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_gl_link_opengl" >&5 printf "%s\n" "$ax_cv_check_gl_link_opengl" >&6; } ax_check_gl_link_opengl="${ax_cv_check_gl_link_opengl}" else $as_nop no_gl=yes fi if test "X$no_gl" = "X" then : printf "%s\n" "#define HAVE_GL 1" >>confdefs.h CFLAGS="$GL_CFLAGS $CFLAGS" LIBS="$GL_LIBS $LIBS" else $as_nop as_fn_error $? "Could not find a valid OpenGL implementation" "$LINENO" 5 fi case ${host} in #( *-darwin*) : if test "x$with_xquartz_gl" != "xno" then : GLU_LIBS="${GLU_LIBS:--lGLU}" else $as_nop GLU_LIBS="${GLU_LIBS:--framework OpenGL}" fi ;; #( *-cygwin*) : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu _ax_glu_saved_flag_cflags="$CFLAGS" CFLAGS="$GLU_CFLAGS $CFLAGS" _ax_glu_saved_flag_libs="$LIBS" LIBS="$GLU_LIBS $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gluBeginCurve" >&5 printf %s "checking for library containing gluBeginCurve... " >&6; } if test ${ac_cv_search_gluBeginCurve+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gluBeginCurve (); int main (void) { return gluBeginCurve (); ; return 0; } _ACEOF for ac_lib in '' GLU glu MesaGLU glu32 do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_gluBeginCurve=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_gluBeginCurve+y} then : break fi done if test ${ac_cv_search_gluBeginCurve+y} then : else $as_nop ac_cv_search_gluBeginCurve=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gluBeginCurve" >&5 printf "%s\n" "$ac_cv_search_gluBeginCurve" >&6; } ac_res=$ac_cv_search_gluBeginCurve if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" GLU_LIBS="${GLU_LIBS:-$ac_cv_search_gluBeginCurve}" fi CFLAGS="$_ax_glu_saved_flag_cflags" LIBS="$_ax_glu_saved_flag_libs" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_fn_cxx_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default" if test "x$ac_cv_header_windows_h" = xyes then : printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h fi ;; #( # try first native *-mingw*) : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu _ax_glu_saved_flag_cflags="$CFLAGS" CFLAGS="$GLU_CFLAGS $CFLAGS" _ax_glu_saved_flag_libs="$LIBS" LIBS="$GLU_LIBS $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gluBeginCurve" >&5 printf %s "checking for library containing gluBeginCurve... " >&6; } if test ${ac_cv_search_gluBeginCurve+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gluBeginCurve (); int main (void) { return gluBeginCurve (); ; return 0; } _ACEOF for ac_lib in '' glu32 GLU glu MesaGLU do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_gluBeginCurve=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_gluBeginCurve+y} then : break fi done if test ${ac_cv_search_gluBeginCurve+y} then : else $as_nop ac_cv_search_gluBeginCurve=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gluBeginCurve" >&5 printf "%s\n" "$ac_cv_search_gluBeginCurve" >&6; } ac_res=$ac_cv_search_gluBeginCurve if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" GLU_LIBS="${GLU_LIBS:-$ac_cv_search_gluBeginCurve}" fi CFLAGS="$_ax_glu_saved_flag_cflags" LIBS="$_ax_glu_saved_flag_libs" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_fn_cxx_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default" if test "x$ac_cv_header_windows_h" = xyes then : printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h fi ;; #( *) : if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLU" >&5 printf %s "checking for GLU... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glu"` else GLU_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glu"` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu _ax_glu_saved_flag_cflags="$CFLAGS" CFLAGS="$GLU_CFLAGS $CFLAGS" _ax_glu_saved_flag_libs="$LIBS" LIBS="$GLU_LIBS $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gluBeginCurve" >&5 printf %s "checking for library containing gluBeginCurve... " >&6; } if test ${ac_cv_search_gluBeginCurve+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gluBeginCurve (); int main (void) { return gluBeginCurve (); ; return 0; } _ACEOF for ac_lib in '' GLU glu MesaGLU do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_gluBeginCurve=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_gluBeginCurve+y} then : break fi done if test ${ac_cv_search_gluBeginCurve+y} then : else $as_nop ac_cv_search_gluBeginCurve=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gluBeginCurve" >&5 printf "%s\n" "$ac_cv_search_gluBeginCurve" >&6; } ac_res=$ac_cv_search_gluBeginCurve if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" GLU_LIBS="${GLU_LIBS:-$ac_cv_search_gluBeginCurve}" fi CFLAGS="$_ax_glu_saved_flag_cflags" LIBS="$_ax_glu_saved_flag_libs" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu elif test $pkg_failed = untried; then ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu _ax_glu_saved_flag_cflags="$CFLAGS" CFLAGS="$GLU_CFLAGS $CFLAGS" _ax_glu_saved_flag_libs="$LIBS" LIBS="$GLU_LIBS $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gluBeginCurve" >&5 printf %s "checking for library containing gluBeginCurve... " >&6; } if test ${ac_cv_search_gluBeginCurve+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gluBeginCurve (); int main (void) { return gluBeginCurve (); ; return 0; } _ACEOF for ac_lib in '' GLU glu MesaGLU do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_gluBeginCurve=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_gluBeginCurve+y} then : break fi done if test ${ac_cv_search_gluBeginCurve+y} then : else $as_nop ac_cv_search_gluBeginCurve=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gluBeginCurve" >&5 printf "%s\n" "$ac_cv_search_gluBeginCurve" >&6; } ac_res=$ac_cv_search_gluBeginCurve if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" GLU_LIBS="${GLU_LIBS:-$ac_cv_search_gluBeginCurve}" fi CFLAGS="$_ax_glu_saved_flag_cflags" LIBS="$_ax_glu_saved_flag_libs" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } : fi ;; esac case $host in #( *-darwin*) : if test "X$with_xquartz_gl" = "Xno" then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu _ax_glu_saved_flag_cflags="$CFLAGS" CFLAGS="$GLU_CFLAGS $CFLAGS" for ac_header in OpenGL/glu.h do : ac_fn_c_check_header_compile "$LINENO" "OpenGL/glu.h" "ac_cv_header_OpenGL_glu_h" " $ac_includes_default # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif " if test "x$ac_cv_header_OpenGL_glu_h" = xyes then : printf "%s\n" "#define HAVE_OPENGL_GLU_H 1" >>confdefs.h ax_check_glu_have_headers="yes"; fi done CFLAGS="$_ax_glu_saved_flag_cflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu _ax_glu_saved_flag_cflags="$CFLAGS" CFLAGS="$GLU_CFLAGS $CFLAGS" for ac_header in GL/glu.h do : ac_fn_c_check_header_compile "$LINENO" "GL/glu.h" "ac_cv_header_GL_glu_h" " $ac_includes_default # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif " if test "x$ac_cv_header_GL_glu_h" = xyes then : printf "%s\n" "#define HAVE_GL_GLU_H 1" >>confdefs.h ax_check_glu_have_headers="yes"; fi done CFLAGS="$_ax_glu_saved_flag_cflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi ;; #( *) : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu _ax_glu_saved_flag_cflags="$CFLAGS" CFLAGS="$GLU_CFLAGS $CFLAGS" for ac_header in GL/glu.h do : ac_fn_c_check_header_compile "$LINENO" "GL/glu.h" "ac_cv_header_GL_glu_h" " $ac_includes_default # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif " if test "x$ac_cv_header_GL_glu_h" = xyes then : printf "%s\n" "#define HAVE_GL_GLU_H 1" >>confdefs.h ax_check_glu_have_headers="yes"; fi done CFLAGS="$_ax_glu_saved_flag_cflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ;; esac if test "X$ax_check_glu_have_headers" = "Xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiling a minimal OpenGL Utility (GLU) program" >&5 printf %s "checking for compiling a minimal OpenGL Utility (GLU) program... " >&6; } if test ${ax_cv_check_glu_compile+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu _ax_glu_saved_flag_cflags="$CFLAGS" CFLAGS="$GLU_CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLU_H # include # elif defined(HAVE_OPENGL_GLU_H) # include # else # error no glu.h # endif int main (void) { gluBeginCurve(0) ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ax_cv_check_glu_compile="yes" else $as_nop ax_cv_check_glu_compile="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$_ax_glu_saved_flag_cflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_glu_compile" >&5 printf "%s\n" "$ax_cv_check_glu_compile" >&6; } fi if test "X$ax_cv_check_glu_compile" = "Xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for linking a minimal GLU program" >&5 printf %s "checking for linking a minimal GLU program... " >&6; } if test ${ax_cv_check_glu_link+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu _ax_glu_saved_flag_cflags="$CFLAGS" CFLAGS="$GLU_CFLAGS $CFLAGS" _ax_glu_saved_flag_libs="$LIBS" LIBS="$GLU_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLU_H # include # elif defined(HAVE_OPENGL_GLU_H) # include # else # error no glu.h # endif int main (void) { gluBeginCurve(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_check_glu_link="yes" else $as_nop ax_cv_check_glu_link="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$_ax_glu_saved_flag_cflags" LIBS="$_ax_glu_saved_flag_libs" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_glu_link" >&5 printf "%s\n" "$ax_cv_check_glu_link" >&6; } fi # # Some versions of Mac OS X include a broken interpretation of the GLU # tesselation callback function signature. if test "X$ax_cv_check_glu_link" = "Xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if GLU varargs tesselator is using non-standard form" >&5 printf %s "checking if GLU varargs tesselator is using non-standard form... " >&6; } if test ${ax_cv_varargs_glu_tesscb+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu _ax_glu_saved_flag_cflags="$CFLAGS" CFLAGS="$GLU_CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLU_H # include # elif defined(HAVE_OPENGL_GLU_H) # include # else # error no glu.h # endif int main (void) { GLvoid (*func)(...); gluTessCallback(0, 0, func) ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ax_cv_varargs_glu_tesscb="yes" else $as_nop ax_cv_varargs_glu_tesscb="no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$_ax_glu_saved_flag_cflags" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_varargs_glu_tesscb" >&5 printf "%s\n" "$ax_cv_varargs_glu_tesscb" >&6; } if test "X$ax_cv_varargs_glu_tesscb" = "yes" then : printf "%s\n" "#define HAVE_VARARGS_GLU_TESSCB 1" >>confdefs.h fi fi if test "X$ax_cv_check_glu_link" = "Xyes" then : printf "%s\n" "#define HAVE_GLU 1" >>confdefs.h CFLAGS="$GLU_CFLAGS $CFLAGS" LIBS="$GLU_LIBS $LIBS" else $as_nop as_fn_error $? "Could not find a valid GLU implementation" "$LINENO" 5 fi CXXFLAGS="$CXXFLAGS $GL_CFLAGS $GLU_CFLAGS" CPPFLAGS="$CPPFLAGS $GL_CFLAGS $GLU_CFLAGS" LIBS="$LIBS $GL_LIBS $GLU_LIBS" pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FT2" >&5 printf %s "checking for FT2... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$FT2_CFLAGS"; then pkg_cv_FT2_CFLAGS="$FT2_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2 >= 9.0.3\""; } >&5 ($PKG_CONFIG --exists --print-errors "freetype2 >= 9.0.3") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FT2_CFLAGS=`$PKG_CONFIG --cflags "freetype2 >= 9.0.3" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$FT2_LIBS"; then pkg_cv_FT2_LIBS="$FT2_LIBS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2 >= 9.0.3\""; } >&5 ($PKG_CONFIG --exists --print-errors "freetype2 >= 9.0.3") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FT2_LIBS=`$PKG_CONFIG --libs "freetype2 >= 9.0.3" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "freetype2 >= 9.0.3"` else FT2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "freetype2 >= 9.0.3"` fi # Put the nasty error message in config.log where it belongs echo "$FT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (freetype2 >= 9.0.3) were not met: $FT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FT2_CFLAGS and FT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " "$LINENO" 5 elif test $pkg_failed = untried; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FT2_CFLAGS and FT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else FT2_CFLAGS=$pkg_cv_FT2_CFLAGS FT2_LIBS=$pkg_cv_FT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } : fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PCRE2" >&5 printf %s "checking for PCRE2... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$PCRE2_CFLAGS"; then pkg_cv_PCRE2_CFLAGS="$PCRE2_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpcre2-8\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpcre2-8") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PCRE2_CFLAGS=`$PKG_CONFIG --cflags "libpcre2-8" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$PCRE2_LIBS"; then pkg_cv_PCRE2_LIBS="$PCRE2_LIBS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpcre2-8\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpcre2-8") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PCRE2_LIBS=`$PKG_CONFIG --libs "libpcre2-8" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PCRE2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libpcre2-8"` else PCRE2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libpcre2-8"` fi # Put the nasty error message in config.log where it belongs echo "$PCRE2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libpcre2-8) were not met: $PCRE2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PCRE2_CFLAGS and PCRE2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " "$LINENO" 5 elif test $pkg_failed = untried; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PCRE2_CFLAGS and PCRE2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PCRE2_CFLAGS=$pkg_cv_PCRE2_CFLAGS PCRE2_LIBS=$pkg_cv_PCRE2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } : fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLEW" >&5 printf %s "checking for GLEW... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$GLEW_CFLAGS"; then pkg_cv_GLEW_CFLAGS="$GLEW_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glew\""; } >&5 ($PKG_CONFIG --exists --print-errors "glew") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLEW_CFLAGS=`$PKG_CONFIG --cflags "glew" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$GLEW_LIBS"; then pkg_cv_GLEW_LIBS="$GLEW_LIBS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glew\""; } >&5 ($PKG_CONFIG --exists --print-errors "glew") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLEW_LIBS=`$PKG_CONFIG --libs "glew" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLEW_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "glew"` else GLEW_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "glew"` fi # Put the nasty error message in config.log where it belongs echo "$GLEW_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glew) were not met: $GLEW_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLEW_CFLAGS and GLEW_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " "$LINENO" 5 elif test $pkg_failed = untried; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLEW_CFLAGS and GLEW_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLEW_CFLAGS=$pkg_cv_GLEW_CFLAGS GLEW_LIBS=$pkg_cv_GLEW_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } : fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SDL2" >&5 printf %s "checking for SDL2... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$SDL2_CFLAGS"; then pkg_cv_SDL2_CFLAGS="$SDL2_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2 SDL2_image\""; } >&5 ($PKG_CONFIG --exists --print-errors "sdl2 SDL2_image") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SDL2_CFLAGS=`$PKG_CONFIG --cflags "sdl2 SDL2_image" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$SDL2_LIBS"; then pkg_cv_SDL2_LIBS="$SDL2_LIBS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2 SDL2_image\""; } >&5 ($PKG_CONFIG --exists --print-errors "sdl2 SDL2_image") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SDL2_LIBS=`$PKG_CONFIG --libs "sdl2 SDL2_image" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then SDL2_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sdl2 SDL2_image"` else SDL2_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sdl2 SDL2_image"` fi # Put the nasty error message in config.log where it belongs echo "$SDL2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sdl2 SDL2_image) were not met: $SDL2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables SDL2_CFLAGS and SDL2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " "$LINENO" 5 elif test $pkg_failed = untried; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables SDL2_CFLAGS and SDL2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else SDL2_CFLAGS=$pkg_cv_SDL2_CFLAGS SDL2_LIBS=$pkg_cv_SDL2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } : fi; pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PNG" >&5 printf %s "checking for PNG... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$PNG_CFLAGS"; then pkg_cv_PNG_CFLAGS="$PNG_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PNG_CFLAGS=`$PKG_CONFIG --cflags "libpng >= 1.2" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$PNG_LIBS"; then pkg_cv_PNG_LIBS="$PNG_LIBS" else if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PNG_LIBS=`$PKG_CONFIG --libs "libpng >= 1.2" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PNG_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libpng >= 1.2"` else PNG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libpng >= 1.2"` fi # Put the nasty error message in config.log where it belongs echo "$PNG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libpng >= 1.2) were not met: $PNG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PNG_CFLAGS and PNG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " "$LINENO" 5 elif test $pkg_failed = untried; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PNG_CFLAGS and PNG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PNG_CFLAGS=$pkg_cv_PNG_CFLAGS PNG_LIBS=$pkg_cv_PNG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } : fi CPPFLAGS="${CPPFLAGS} ${FT2_CFLAGS} ${PCRE2_CFLAGS} ${GLEW_CFLAGS} ${SDL2_CFLAGS} ${PNG_CFLAGS}" LIBS="${LIBS} ${FT2_LIBS} ${PCRE2_LIBS} ${GLEW_LIBS} ${SDL2_LIBS} ${PNG_LIBS}" for ac_func in IMG_LoadPNG_RW do : ac_fn_cxx_check_func "$LINENO" "IMG_LoadPNG_RW" "ac_cv_func_IMG_LoadPNG_RW" if test "x$ac_cv_func_IMG_LoadPNG_RW" = xyes then : printf "%s\n" "#define HAVE_IMG_LOADPNG_RW 1" >>confdefs.h else $as_nop as_fn_error $? "SDL2_image with PNG support required. Please see INSTALL" "$LINENO" 5 fi done for ac_func in IMG_LoadJPG_RW do : ac_fn_cxx_check_func "$LINENO" "IMG_LoadJPG_RW" "ac_cv_func_IMG_LoadJPG_RW" if test "x$ac_cv_func_IMG_LoadJPG_RW" = xyes then : printf "%s\n" "#define HAVE_IMG_LOADJPG_RW 1" >>confdefs.h else $as_nop as_fn_error $? "SDL2_image with JPEG support required. Please see INSTALL" "$LINENO" 5 fi done #BOOST # Check whether --with-boost was given. if test ${with_boost+y} then : withval=$with_boost; case $withval in #( no) : want_boost="no";_AX_BOOST_BASE_boost_path="" ;; #( yes) : want_boost="yes";_AX_BOOST_BASE_boost_path="" ;; #( *) : want_boost="yes";_AX_BOOST_BASE_boost_path="$withval" ;; esac else $as_nop want_boost="yes" fi # Check whether --with-boost-libdir was given. if test ${with_boost_libdir+y} then : withval=$with_boost_libdir; if test -d "$withval" then : _AX_BOOST_BASE_boost_lib_path="$withval" else $as_nop as_fn_error $? "--with-boost-libdir expected directory name" "$LINENO" 5 fi else $as_nop _AX_BOOST_BASE_boost_lib_path="" fi BOOST_LDFLAGS="" BOOST_CPPFLAGS="" if test "x$want_boost" = "xyes" then : if test "x1.69" = "x" then : _AX_BOOST_BASE_TONUMERICVERSION_req="1.20.0" else $as_nop _AX_BOOST_BASE_TONUMERICVERSION_req="1.69" fi _AX_BOOST_BASE_TONUMERICVERSION_req_shorten=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([0-9]*\.[0-9]*\)'` _AX_BOOST_BASE_TONUMERICVERSION_req_major=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([0-9]*\)'` if test "x$_AX_BOOST_BASE_TONUMERICVERSION_req_major" = "x" then : as_fn_error $? "You should at least specify libboost major version" "$LINENO" 5 fi _AX_BOOST_BASE_TONUMERICVERSION_req_minor=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '[0-9]*\.\([0-9]*\)'` if test "x$_AX_BOOST_BASE_TONUMERICVERSION_req_minor" = "x" then : _AX_BOOST_BASE_TONUMERICVERSION_req_minor="0" fi _AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'` if test "X$_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor" = "X" then : _AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor="0" fi _AX_BOOST_BASE_TONUMERICVERSION_RET=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req_major \* 100000 \+ $_AX_BOOST_BASE_TONUMERICVERSION_req_minor \* 100 \+ $_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor` WANT_BOOST_VERSION=$_AX_BOOST_BASE_TONUMERICVERSION_RET succeeded=no case ${host_cpu} in #( x86_64) : libsubdirs="lib64 libx32 lib lib64" ;; #( mips*64*) : libsubdirs="lib64 lib32 lib lib64" ;; #( ppc64|powerpc64|s390x|sparc64|aarch64|ppc64le|powerpc64le|riscv64|e2k|loongarch64) : libsubdirs="lib64 lib lib64" ;; #( *) : libsubdirs="lib" ;; esac case ${host_cpu} in #( i?86) : multiarch_libsubdir="lib/i386-${host_os}" ;; #( armv7l) : multiarch_libsubdir="lib/arm-${host_os}" ;; #( *) : multiarch_libsubdir="lib/${host_cpu}-${host_os}" ;; esac if test "x$_AX_BOOST_BASE_boost_path" != "x" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for boostlib >= 1.69 ($WANT_BOOST_VERSION) includes in \"$_AX_BOOST_BASE_boost_path/include\"" >&5 printf %s "checking for boostlib >= 1.69 ($WANT_BOOST_VERSION) includes in \"$_AX_BOOST_BASE_boost_path/include\"... " >&6; } if test -d "$_AX_BOOST_BASE_boost_path/include" && test -r "$_AX_BOOST_BASE_boost_path/include" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include" for _AX_BOOST_BASE_boost_path_tmp in $multiarch_libsubdir $libsubdirs; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for boostlib >= 1.69 ($WANT_BOOST_VERSION) lib path in \"$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp\"" >&5 printf %s "checking for boostlib >= 1.69 ($WANT_BOOST_VERSION) lib path in \"$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp\"... " >&6; } if test -d "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" && test -r "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp"; break; else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi done else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else $as_nop if test X"$cross_compiling" = Xyes; then search_libsubdirs=$multiarch_libsubdir else search_libsubdirs="$multiarch_libsubdir $libsubdirs" fi for _AX_BOOST_BASE_boost_path_tmp in /usr /usr/local /opt /opt/local /opt/homebrew ; do if test -d "$_AX_BOOST_BASE_boost_path_tmp/include/boost" && test -r "$_AX_BOOST_BASE_boost_path_tmp/include/boost" ; then for libsubdir in $search_libsubdirs ; do if ls "$_AX_BOOST_BASE_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path_tmp/$libsubdir" BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path_tmp/include" break; fi done fi if test "x$_AX_BOOST_BASE_boost_lib_path" != "x" then : BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_lib_path" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for boostlib >= 1.69 ($WANT_BOOST_VERSION)" >&5 printf %s "checking for boostlib >= 1.69 ($WANT_BOOST_VERSION)... " >&6; } CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { (void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($WANT_BOOST_VERSION))])); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } succeeded=yes found_system=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$succeeded" != "xyes" ; then CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" BOOST_CPPFLAGS= if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then BOOST_LDFLAGS= fi _version=0 if test -n "$_AX_BOOST_BASE_boost_path" ; then if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path"; then for i in `ls -d $_AX_BOOST_BASE_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "x$V_CHECK" = "x1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include/boost-$VERSION_UNDERSCORE" done if test -z "$BOOST_CPPFLAGS"; then if test -d "$_AX_BOOST_BASE_boost_path/boost" && test -r "$_AX_BOOST_BASE_boost_path/boost"; then BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path" fi fi if test -n "$BOOST_CPPFLAGS" && test -z "$BOOST_LDFLAGS"; then for libsubdir in $libsubdirs ; do if ls "$_AX_BOOST_BASE_boost_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$libsubdir" fi fi else if test "x$cross_compiling" != "xyes" ; then for _AX_BOOST_BASE_boost_path in /usr /usr/local /opt /opt/local /opt/homebrew ; do if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path" ; then for i in `ls -d $_AX_BOOST_BASE_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "x$V_CHECK" = "x1" ; then _version=$_version_tmp best_path=$_AX_BOOST_BASE_boost_path fi done fi done VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then for libsubdir in $libsubdirs ; do if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$best_path/$libsubdir" fi fi if test -n "$BOOST_ROOT" ; then for libsubdir in $libsubdirs ; do if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([0-9]*\.[0-9]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` if test "x$V_CHECK" = "x1" && test -z "$_AX_BOOST_BASE_boost_lib_path" ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: We will use a staged boost library from $BOOST_ROOT" >&5 printf "%s\n" "$as_me: We will use a staged boost library from $BOOST_ROOT" >&6;} BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" fi fi fi fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { (void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($WANT_BOOST_VERSION))])); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } succeeded=yes found_system=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi if test "x$succeeded" != "xyes" ; then if test "x$_version" = "x0" ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: We could not detect the boost libraries (version 1.69 or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&5 printf "%s\n" "$as_me: We could not detect the boost libraries (version 1.69 or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&6;} else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Your boost libraries seems to old (version $_version)." >&5 printf "%s\n" "$as_me: Your boost libraries seems to old (version $_version)." >&6;} fi BOOST_LDFLAGS="" BOOST_CPPFLAGS="" # execute ACTION-IF-NOT-FOUND (if present): as_fn_error $? "Boost Filesystem >= 1.69 is required. Please see INSTALL" "$LINENO" 5 else printf "%s\n" "#define HAVE_BOOST /**/" >>confdefs.h # execute ACTION-IF-FOUND (if present): : fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi # Check whether --with-boost-filesystem was given. if test ${with_boost_filesystem+y} then : withval=$with_boost_filesystem; if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ax_boost_user_filesystem_lib="" else want_boost="yes" ax_boost_user_filesystem_lib="$withval" fi else $as_nop want_boost="yes" fi if test "x$want_boost" = "xyes"; then CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS LIBS_SAVED=$LIBS LIBS="$LIBS $BOOST_SYSTEM_LIB" export LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the Boost::Filesystem library is available" >&5 printf %s "checking whether the Boost::Filesystem library is available... " >&6; } if test ${ax_cv_boost_filesystem+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { using namespace boost::filesystem; path my_path( "foo/bar/data.txt" ); return 0; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ax_cv_boost_filesystem=yes else $as_nop ax_cv_boost_filesystem=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_filesystem" >&5 printf "%s\n" "$ax_cv_boost_filesystem" >&6; } if test "x$ax_cv_boost_filesystem" = "xyes"; then printf "%s\n" "#define HAVE_BOOST_FILESYSTEM /**/" >>confdefs.h BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'` if test "x$ax_boost_user_filesystem_lib" = "x"; then for libextension in `ls -r $BOOSTLIBDIR/libboost_filesystem* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do ax_lib=${libextension} as_ac_Lib=`printf "%s\n" "ac_cv_lib_$ax_lib""_exit" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 printf %s "checking for exit in -l$ax_lib... " >&6; } if eval test \${$as_ac_Lib+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-l$ax_lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ namespace conftest { extern "C" int exit (); } int main (void) { return conftest::exit (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : eval "$as_ac_Lib=yes" else $as_nop eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes" then : BOOST_FILESYSTEM_LIB="-l$ax_lib"; link_filesystem="yes"; break else $as_nop link_filesystem="no" fi done if test "x$link_filesystem" != "xyes"; then for libextension in `ls -r $BOOSTLIBDIR/boost_filesystem* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do ax_lib=${libextension} as_ac_Lib=`printf "%s\n" "ac_cv_lib_$ax_lib""_exit" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 printf %s "checking for exit in -l$ax_lib... " >&6; } if eval test \${$as_ac_Lib+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-l$ax_lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ namespace conftest { extern "C" int exit (); } int main (void) { return conftest::exit (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : eval "$as_ac_Lib=yes" else $as_nop eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes" then : BOOST_FILESYSTEM_LIB="-l$ax_lib"; link_filesystem="yes"; break else $as_nop link_filesystem="no" fi done fi else for ax_lib in $ax_boost_user_filesystem_lib boost_filesystem-$ax_boost_user_filesystem_lib; do as_ac_Lib=`printf "%s\n" "ac_cv_lib_$ax_lib""_exit" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 printf %s "checking for exit in -l$ax_lib... " >&6; } if eval test \${$as_ac_Lib+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-l$ax_lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ namespace conftest { extern "C" int exit (); } int main (void) { return conftest::exit (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : eval "$as_ac_Lib=yes" else $as_nop eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes" then : BOOST_FILESYSTEM_LIB="-l$ax_lib"; link_filesystem="yes"; break else $as_nop link_filesystem="no" fi done fi if test "x$ax_lib" = "x"; then as_fn_error $? "Could not find a version of the Boost::Filesystem library!" "$LINENO" 5 fi if test "x$link_filesystem" != "xyes"; then as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5 fi fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" LIBS="$LIBS_SAVED" fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" LIBS="$LIBS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB" # Check whether --enable-font-file was given. if test ${enable_font_file+y} then : enableval=$enable_font_file; gourcefontfile="$enableval" else $as_nop gourcefontfile="" fi if test "x$gourcefontfile" != "x"; then FONTFILE_TRUE= FONTFILE_FALSE='#' else FONTFILE_TRUE='#' FONTFILE_FALSE= fi #see if ttf-font-dir option is enabled # Check whether --enable-ttf-font-dir was given. if test ${enable_ttf_font_dir+y} then : enableval=$enable_ttf_font_dir; gourcefontdir="$enableval" else $as_nop gourcefontdir="" fi if test "x$gourcefontdir" != "x"; then FONTDIR_TRUE= FONTDIR_FALSE='#' else FONTDIR_TRUE='#' FONTDIR_FALSE= fi #GLM ac_fn_cxx_check_header_compile "$LINENO" "glm/glm.hpp" "ac_cv_header_glm_glm_hpp" "$ac_includes_default" if test "x$ac_cv_header_glm_glm_hpp" = xyes then : else $as_nop as_fn_error $? "GLM headers are required. Please see INSTALL" "$LINENO" 5 fi #see if building against system TinyXML library use_tinyxml_system_library=no # Check whether --with-tinyxml was given. if test ${with_tinyxml+y} then : withval=$with_tinyxml; use_tinyxml_system_library=$withval fi if test "x$use_tinyxml_system_library" = "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -ltinyxml" >&5 printf %s "checking for main in -ltinyxml... " >&6; } if test ${ac_cv_lib_tinyxml_main+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ltinyxml $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ namespace conftest { extern "C" int main (); } int main (void) { return conftest::main (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : ac_cv_lib_tinyxml_main=yes else $as_nop ac_cv_lib_tinyxml_main=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinyxml_main" >&5 printf "%s\n" "$ac_cv_lib_tinyxml_main" >&6; } if test "x$ac_cv_lib_tinyxml_main" = xyes then : printf "%s\n" "#define HAVE_LIBTINYXML 1" >>confdefs.h LIBS="-ltinyxml $LIBS" else $as_nop as_fn_error $? "TinyXML library was requested but not found" "$LINENO" 5 fi ac_cv_lib_tinyxml=ac_cv_lib_tinyxml_main fi if test "x$use_tinyxml_system_library" != "xyes"; then USE_BUNDLED_TINYXML_TRUE= USE_BUNDLED_TINYXML_FALSE='#' else USE_BUNDLED_TINYXML_TRUE='#' USE_BUNDLED_TINYXML_FALSE= fi ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FONTFILE_TRUE}" && test -z "${FONTFILE_FALSE}"; then as_fn_error $? "conditional \"FONTFILE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FONTDIR_TRUE}" && test -z "${FONTDIR_FALSE}"; then as_fn_error $? "conditional \"FONTDIR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_BUNDLED_TINYXML_TRUE}" && test -z "${USE_BUNDLED_TINYXML_FALSE}"; then as_fn_error $? "conditional \"USE_BUNDLED_TINYXML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Gource $as_me 0.56, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ Gource config.status 0.56 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi gource-0.56/README.md0000664002342600234260000003347615152463042014070 0ustar andrewcandrewcGource ====== https://gource.io Description =========== Gource is a visualization tool for source control repositories. The repository is displayed as a tree where the root of the repository is the centre, directories are branches and files are leaves. Contributors to the source code appear and disappear as they contribute to specific files and directories. Requirements ============ Gource's display is rendered using OpenGL and requires a 3D accelerated video card to run. Using Gource ============ ``` gource [options] [path] options: -h, --help Help ('-H' for extended help). -WIDTHxHEIGHT, --viewport WIDTHxHEIGHT Set the viewport size. If -f is also supplied, will attempt to set the video mode to this also. Add ! to make the window non-resizable. --screen SCREEN Set the number of the screen to display on. --high-dpi Request a high DPI display when creating the window. On some platforms such as MacOS, the window resolution is specified in points instead of pixels. The --high-dpi flag may be required to access some higher resolutions. E.g. requesting a high DPI 800x600 window may produce a window that is 1600x1200 pixels. --window-position XxY Initial window position on your desktop which may be made up of multiple monitors. This will override the screen setting so don't specify both. --frameless Frameless window. -f, --fullscreen Fullscreen. -w, --windowed Windowed. --transparent Make the background transparent. Only really useful for screenshots. --start-date "YYYY-MM-DD hh:mm:ss +tz" Start with the first entry after the supplied date and optional time. If a time zone offset isn't specified the local time zone is used. Example accepted formats: "2012-06-30" "2012-06-30 12:00" "2012-06-30 12:00:00 +12" --stop-date "YYYY-MM-DD hh:mm:ss +tz" Stop after the last entry prior to the supplied date and optional time. Uses the same format as --start-date. -p, --start-position POSITION Begin at some position in the log (between 0.0 and 1.0 or 'random'). --stop-position POSITION Stop (exit) at some position in the log (does not work with STDIN). -t, --stop-at-time SECONDS Stop (exit) after a specified number of seconds. --stop-at-end Stop (exit) at the end of the log / stream. --loop Loop back to the start of the log when the end is reached. --loop-delay-seconds Seconds to delay before looping. -a, --auto-skip-seconds SECONDS Skip to next entry if nothing happens for a number of seconds. -s, --seconds-per-day SECONDS Speed of simulation in seconds per day. --realtime Realtime playback speed. --no-time-travel Use the time of the last commit if the time of a commit is in the past. --author-time Use the timestamp of the author instead of the timestamp of the committer. -c, --time-scale SCALE Change simulation time scale. This affects the movement speed of user avatars. E.g. 0.5 for half speed, 2 for double speed. -i, --file-idle-time SECONDS Time in seconds files remain idle before they are removed or 0 for no limit. --file-idle-time-at-end SECONDS Time in seconds files remain idle at the end before they are removed. -e, --elasticity FLOAT Elasticity of nodes. -b, --background-colour FFFFFF Background colour in hex. --background-image IMAGE Set a background image. --logo IMAGE Logo to display in the foreground. --logo-offset XxY Offset position of the logo. --title TITLE Set a title. --font-file FILE Specify the font. Should work with most font file formats supported by FreeType, such as TTF and OTF, among others. --font-scale SCALE Scale the size of all fonts. --font-size SIZE Font size used by the date and title. --file-font-size SIZE Font size of filenames. --dir-font-size SIZE Font size of directory names --user-font-size SIZE Font size of user names. --font-colour FFFFFF Font colour used by the date and title in hex. --key Show file extension key. --date-format FORMAT Specify display date string (strftime format). --log-command VCS Show the VCS log command used by gource (git,svn,hg,bzr,cvs2cl). --log-format VCS Specify the log format (git,svn,hg,bzr,cvs2cl,custom). Required when reading from STDIN. --git-branch Get the git log of a branch other than the current one. --follow-user USER Have the camera automatically follow a particular user. --highlight-dirs Highlight the names of all directories. --highlight-user USER Highlight the names of a particular user. --highlight-users Highlight the names of all users. --highlight-colour FFFFFF Font colour for highlighted users in hex. --selection-colour FFFFFF Font colour for selected users and files. --filename-colour FFFFFF Font colour for filenames. --dir-colour FFFFFF Font colour for directories. --dir-name-depth DEPTH Draw names of directories down to a specific depth in the tree. --dir-name-position FLOAT Position along edge of the directory name (between 0.1 and 1.0, default is 0.5). --filename-time SECONDS Duration to keep filenames on screen (>= 2.0). --file-extensions Show filename extensions only. --file-extension-fallback Use filename as extension if the extension is missing or empty. --file-filter REGEX Filter out file paths matching the specified regular expression. --file-show-filter REGEX Show only file paths matching the specified regular expression. --user-filter REGEX Filter usernames matching the specified regular expression. --user-show-filter REGEX Show only usernames matching the specified regular expression. --user-image-dir DIRECTORY Directory containing .jpg or .png images of users (eg "Full Name.png") to use as avatars. --default-user-image IMAGE Path of .jpg or .png to use as the default user image. --fixed-user-size Forces the size of the user image to remain fixed throughout. --colour-images Colourize user images. --crop AXIS Crop view on an axis (vertical,horizontal). --padding FLOAT Camera view padding. --multi-sampling Enable multi-sampling. --no-vsync Disable vsync. --bloom-multiplier FLOAT Adjust the amount of bloom. --bloom-intensity FLOAT Adjust the intensity of the bloom. --max-files NUMBER Set the maximum number of files or 0 for no limit. Excess files will be discarded. --max-file-lag SECONDS Max time files of a commit can take to appear. Use -1 for no limit. --max-user-speed UNITS Max speed users can travel per second. --user-friction SECONDS Time users take to come to a halt. --user-scale SCALE Change scale of user avatars. --camera-mode MODE Camera mode (overview,track). --disable-auto-rotate Disable automatic camera rotation. --disable-input Disable keyboard and mouse input. --hide DISPLAY_ELEMENT Hide one or more display elements from the list below: bloom - bloom effect date - current date dirnames - names of directories files - file icons filenames - names of files mouse - mouse cursor progress - progress bar widget root - root directory of tree tree - animated tree structure users - user avatars usernames - names of users Separate multiple elements with commas (eg "mouse,progress") --hash-seed SEED Change the seed of hash function. --caption-file FILE Caption file (see Caption Log Format). --caption-size SIZE Caption size. --caption-colour FFFFFF Caption colour in hex. --caption-duration SECONDS Caption duration. --caption-offset X Caption horizontal offset (0 to centre captions). -o, --output-ppm-stream FILE Output a PPM image stream to a file ('-' for STDOUT). This will automatically hide the progress bar initially and enable 'stop-at-end' unless other behaviour is specified. -r, --output-framerate FPS Framerate of output (25,30,60). Used with --output-ppm-stream. --output-custom-log FILE Output a custom format log file ('-' for STDOUT). --load-config CONFIG_FILE Load a gource conf file. --save-config CONFIG_FILE Save a gource conf file with the current options. --path PATH path Either a supported version control directory, a pre-generated log file (see log commands or the custom log format), a Gource conf file or '-' to read STDIN. If path is omitted, gource will attempt to read a log from the current directory. ``` Git, Bazaar, Mercurial and SVN Examples: View the log of the repository in the current path: ``` gource ``` View the log of a project in the specified directory: ``` gource my-project-dir ``` For large projects, generating a log of the project history may take a long time. For centralized VCS like SVN, generating the log may also put load on the central VCS server. In these cases, you may like to save a copy of the log for later use. You can generate a log in the VCS specific log format using the --log-command VCS option: ``` cd my-svn-project `gource --log-command svn` > my-svn-project.log gource my-svn-project.log ``` You can also have Gource write a copy of the log file in its own format: ``` gource --output-custom-log my-project-custom.log ``` CVS Support: Use 'cvs2cl' to generate the log and then pass it to Gource: ``` cvs2cl --chrono --stdout --xml -g-q > my-cvs-project.log gource my-cvs-project.log ``` Custom Log Format: If you want to use Gource with something other than the supported systems, there is a pipe ('|') delimited custom log format: timestamp - An ISO 8601 or unix timestamp of when the update occurred. username - The name of the user who made the update. type - initial for the update type - (A)dded, (M)odified or (D)eleted. file - Path of the file updated. colour - A colour for the file in hex (FFFFFF) format. Optional. Caption Log Format: Gource can display captions along the timeline by specifying a caption file (using --caption-file) in the pipe ('|') delimited format below: timestamp - An ISO 8601 or A unix timestamp of when to display the caption. caption - The caption Recording Videos: See the guide on the homepage for examples of recording videos with Gource: https://github.com/acaudwell/Gource/wiki/Videos More Information: Visit the Gource homepage for guides and examples of using Gource with various version control systems: https://gource.io Interface: The time shown in the top left of the screen is set initially from the first log entry read and is incremented according to the simulation speed (--seconds-per-day). Pressing SPACE at any time will pause/resume the simulation. While paused you may use the mouse to inspect the detail of individual files and users. TAB cycles through selecting the current visible users. The camera mode, either tracking activity or showing the entire code tree, can be toggled using the Middle mouse button. You can drag the left mouse button to manually control the camera. The right mouse button rotates the view. Interactive keyboard commands: (V) Toggle camera mode (C) Displays Gource logo (K) Toggle file extension key (M) Toggle mouse visibility (N) Jump forward in time to next log entry (S) Randomize colours (D) Toggle directory name display mode (F) Toggle file name display mode (U) Toggle user name display mode (G) Toggle display of users (T) Toggle display of directory tree edges (R) Toggle display of root directory edges (<>) Adjust time scale / user avatar movement speed (+-) Adjust simulation speed (Keypad +-) Adjust camera zoom (TAB) Cycle through visible users (F12) Screenshot (Alt+Enter) Fullscreen toggle (ESC) Quit Copyright ========= Gource - software version control visualization Copyright (C) 2009 Andrew Caudwell This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . gource-0.56/THANKS0000644002342600234260000000010715152463042013503 0ustar andrewcandrewcCheers to everyone at Catalyst IT for their support and encouragement. gource-0.56/INSTALL0000664002342600234260000000351415152463042013630 0ustar andrewcandrewcThis file is to help you configure, build and install Gource for your system. Contents ======== 1. Dependencies 2. Building 3. Configure Options 1. Dependencies =============== Gource requires the following libraries to compile (package names may vary): SDL 2.0 (libsdl2-dev) SDL Image 2.0 (libsdl2-image-dev) PCRE2 (libpcre2-dev) Freetype 2 (libfreetype6-dev) GLEW (libglew-dev) GLM >= 0.9.3 (libglm-dev) Boost Filesystem >= 1.69 (libboost-filesystem-dev) PNG >= 1.2 (libpng-dev) Optional: TinyXML (libtinyxml-dev) SDL Image 2.0 needs to have been built with support PNG and JPEG images. 2. Building =========== Gource requires a GNU compatible C++ compiler that supports c++0x features such as 'auto' and the new 'for' loop syntax. GCC 4.6+ or Clang recommended. If you got the source directly from the Gource.git repository, you will first need to run autogen.sh which will generate the configure script and initialize and update the submodules. ./autogen.sh Generic build instructions for Linux/Mac OS: ./configure make make install Building on Windows: On Windows compile gource.pro with Qt Creator. A pre-built version for Windows is normally available from the homepage. Gource expects SDL to have been built with the NO_STDIO_REDIRECT flag. 3. Configure Options ==================== By default Gource will install some GNU FreeFont TTF Fonts on your system. If you already have these fonts, you can configure Gource to use them with: ./configure --enable-ttf-font-dir=/path/to/freefont/ You can also build Gource with a different font: ./configure --enable-font-file=/path/to/alternate/font.ttf The font file format must be supported by Free Type 2. Gource includes a copy of TinyXML. To build against the system version of the library use: ./configure --with-tinyxml gource-0.56/m4/0000775002342600234260000000000015152463042013114 5ustar andrewcandrewcgource-0.56/m4/ax_pthread.m40000644002342600234260000002576115152463042015506 0ustar andrewcandrewc# =========================================================================== # http://www.nongnu.org/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). (This # is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also link it with them as well. e.g. you should link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threads programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name # (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_SAVE AC_LANG_C ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes) AC_MSG_RESULT($ax_pthread_ok) if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; esac if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no) if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_TRY_LINK([#include static void routine(void* a) {a=0;} static void* start_routine(void* a) {return a;}], [pthread_t th; pthread_attr_t attr; pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_create(&th,0,start_routine,0); pthread_cleanup_pop(0); ], [ax_pthread_ok=yes]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($ax_pthread_ok) if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_TRY_LINK([#include ], [int attr=$attr; return attr;], [attr_name=$attr; break]) done AC_MSG_RESULT($attr_name) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) else PTHREAD_CC=$CC fi else PTHREAD_CC="$CC" fi AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_CC) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_RESTORE ])dnl AX_PTHREAD gource-0.56/m4/ax_boost_base.m40000664002342600234260000003316415152463042016175 0ustar andrewcandrewc# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_boost_base.html # =========================================================================== # # SYNOPSIS # # AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # DESCRIPTION # # Test for the Boost C++ libraries of a particular version (or newer) # # If no path to the installed boost library is given the macro searches # under /usr, /usr/local, /opt, /opt/local and /opt/homebrew and evaluates # the $BOOST_ROOT environment variable. Further documentation is available # at . # # This macro calls: # # AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) # # And sets: # # HAVE_BOOST # # LICENSE # # Copyright (c) 2008 Thomas Porschberg # Copyright (c) 2009 Peter Adolphs # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 55 # example boost program (need to pass version) m4_define([_AX_BOOST_BASE_PROGRAM], [AC_LANG_PROGRAM([[ #include ]],[[ (void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($1))])); ]])]) AC_DEFUN([AX_BOOST_BASE], [ AC_ARG_WITH([boost], [AS_HELP_STRING([--with-boost@<:@=ARG@:>@], [use Boost library from a standard location (ARG=yes), from the specified location (ARG=), or disable it (ARG=no) @<:@ARG=yes@:>@ ])], [ AS_CASE([$withval], [no],[want_boost="no";_AX_BOOST_BASE_boost_path=""], [yes],[want_boost="yes";_AX_BOOST_BASE_boost_path=""], [want_boost="yes";_AX_BOOST_BASE_boost_path="$withval"]) ], [want_boost="yes"]) AC_ARG_WITH([boost-libdir], [AS_HELP_STRING([--with-boost-libdir=LIB_DIR], [Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.])], [ AS_IF([test -d "$withval"], [_AX_BOOST_BASE_boost_lib_path="$withval"], [AC_MSG_ERROR([--with-boost-libdir expected directory name])]) ], [_AX_BOOST_BASE_boost_lib_path=""]) BOOST_LDFLAGS="" BOOST_CPPFLAGS="" AS_IF([test "x$want_boost" = "xyes"], [_AX_BOOST_BASE_RUNDETECT([$1],[$2],[$3])]) AC_SUBST(BOOST_CPPFLAGS) AC_SUBST(BOOST_LDFLAGS) ]) # convert a version string in $2 to numeric and affect to polymorphic var $1 AC_DEFUN([_AX_BOOST_BASE_TONUMERICVERSION],[ AS_IF([test "x$2" = "x"],[_AX_BOOST_BASE_TONUMERICVERSION_req="1.20.0"],[_AX_BOOST_BASE_TONUMERICVERSION_req="$2"]) _AX_BOOST_BASE_TONUMERICVERSION_req_shorten=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([[0-9]]*\.[[0-9]]*\)'` _AX_BOOST_BASE_TONUMERICVERSION_req_major=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([[0-9]]*\)'` AS_IF([test "x$_AX_BOOST_BASE_TONUMERICVERSION_req_major" = "x"], [AC_MSG_ERROR([You should at least specify libboost major version])]) _AX_BOOST_BASE_TONUMERICVERSION_req_minor=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '[[0-9]]*\.\([[0-9]]*\)'` AS_IF([test "x$_AX_BOOST_BASE_TONUMERICVERSION_req_minor" = "x"], [_AX_BOOST_BASE_TONUMERICVERSION_req_minor="0"]) _AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` AS_IF([test "X$_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor" = "X"], [_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor="0"]) _AX_BOOST_BASE_TONUMERICVERSION_RET=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req_major \* 100000 \+ $_AX_BOOST_BASE_TONUMERICVERSION_req_minor \* 100 \+ $_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor` AS_VAR_SET($1,$_AX_BOOST_BASE_TONUMERICVERSION_RET) ]) dnl Run the detection of boost should be run only if $want_boost AC_DEFUN([_AX_BOOST_BASE_RUNDETECT],[ _AX_BOOST_BASE_TONUMERICVERSION(WANT_BOOST_VERSION,[$1]) succeeded=no AC_REQUIRE([AC_CANONICAL_HOST]) dnl On 64-bit systems check for system libraries in both lib64 and lib. dnl The former is specified by FHS, but e.g. Debian does not adhere to dnl this (as it rises problems for generic multi-arch support). dnl The last entry in the list is chosen by default when no libraries dnl are found, e.g. when only header-only libraries are installed! AS_CASE([${host_cpu}], [x86_64],[libsubdirs="lib64 libx32 lib lib64"], [mips*64*],[libsubdirs="lib64 lib32 lib lib64"], [ppc64|powerpc64|s390x|sparc64|aarch64|ppc64le|powerpc64le|riscv64|e2k|loongarch64],[libsubdirs="lib64 lib lib64"], [libsubdirs="lib"] ) dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give dnl them priority over the other paths since, if libs are found there, they dnl are almost assuredly the ones desired. AS_CASE([${host_cpu}], [i?86],[multiarch_libsubdir="lib/i386-${host_os}"], [armv7l],[multiarch_libsubdir="lib/arm-${host_os}"], [multiarch_libsubdir="lib/${host_cpu}-${host_os}"] ) dnl first we check the system location for boost libraries dnl this location is chosen if boost libraries are installed with the --layout=system option dnl or if you install boost with RPM AS_IF([test "x$_AX_BOOST_BASE_boost_path" != "x"],[ AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION) includes in "$_AX_BOOST_BASE_boost_path/include"]) AS_IF([test -d "$_AX_BOOST_BASE_boost_path/include" && test -r "$_AX_BOOST_BASE_boost_path/include"],[ AC_MSG_RESULT([yes]) BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include" for _AX_BOOST_BASE_boost_path_tmp in $multiarch_libsubdir $libsubdirs; do AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION) lib path in "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp"]) AS_IF([test -d "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" && test -r "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" ],[ AC_MSG_RESULT([yes]) BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp"; break; ], [AC_MSG_RESULT([no])]) done],[ AC_MSG_RESULT([no])]) ],[ if test X"$cross_compiling" = Xyes; then search_libsubdirs=$multiarch_libsubdir else search_libsubdirs="$multiarch_libsubdir $libsubdirs" fi for _AX_BOOST_BASE_boost_path_tmp in /usr /usr/local /opt /opt/local /opt/homebrew ; do if test -d "$_AX_BOOST_BASE_boost_path_tmp/include/boost" && test -r "$_AX_BOOST_BASE_boost_path_tmp/include/boost" ; then for libsubdir in $search_libsubdirs ; do if ls "$_AX_BOOST_BASE_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path_tmp/$libsubdir" BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path_tmp/include" break; fi done ]) dnl overwrite ld flags if we have required special directory with dnl --with-boost-libdir parameter AS_IF([test "x$_AX_BOOST_BASE_boost_lib_path" != "x"], [BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_lib_path"]) AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION)]) CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_REQUIRE([AC_PROG_CXX]) AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([_AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes ],[ ]) AC_LANG_POP([C++]) dnl if we found no boost with system layout we search for boost libraries dnl built and installed without the --layout=system option or for a staged(not installed) version if test "x$succeeded" != "xyes" ; then CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" BOOST_CPPFLAGS= if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then BOOST_LDFLAGS= fi _version=0 if test -n "$_AX_BOOST_BASE_boost_path" ; then if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path"; then for i in `ls -d $_AX_BOOST_BASE_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "x$V_CHECK" = "x1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include/boost-$VERSION_UNDERSCORE" done dnl if nothing found search for layout used in Windows distributions if test -z "$BOOST_CPPFLAGS"; then if test -d "$_AX_BOOST_BASE_boost_path/boost" && test -r "$_AX_BOOST_BASE_boost_path/boost"; then BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path" fi fi dnl if we found something and BOOST_LDFLAGS was unset before dnl (because "$_AX_BOOST_BASE_boost_lib_path" = ""), set it here. if test -n "$BOOST_CPPFLAGS" && test -z "$BOOST_LDFLAGS"; then for libsubdir in $libsubdirs ; do if ls "$_AX_BOOST_BASE_boost_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$libsubdir" fi fi else if test "x$cross_compiling" != "xyes" ; then for _AX_BOOST_BASE_boost_path in /usr /usr/local /opt /opt/local /opt/homebrew ; do if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path" ; then for i in `ls -d $_AX_BOOST_BASE_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "x$V_CHECK" = "x1" ; then _version=$_version_tmp best_path=$_AX_BOOST_BASE_boost_path fi done fi done VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then for libsubdir in $libsubdirs ; do if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$best_path/$libsubdir" fi fi if test -n "$BOOST_ROOT" ; then for libsubdir in $libsubdirs ; do if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` if test "x$V_CHECK" = "x1" && test -z "$_AX_BOOST_BASE_boost_lib_path" ; then AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" fi fi fi fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([_AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes ],[ ]) AC_LANG_POP([C++]) fi if test "x$succeeded" != "xyes" ; then if test "x$_version" = "x0" ; then AC_MSG_NOTICE([[We could not detect the boost libraries (version $1 or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) else AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) fi BOOST_LDFLAGS="" BOOST_CPPFLAGS="" # execute ACTION-IF-NOT-FOUND (if present): ifelse([$3], , :, [$3]) else AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) # execute ACTION-IF-FOUND (if present): ifelse([$2], , :, [$2]) fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" ]) gource-0.56/m4/ax_restore_flags_with_prefix.m40000644002342600234260000000513515152463042021317 0ustar andrewcandrewc# ================================================================================= # https://www.gnu.org/software/autoconf-archive/ax_restore_flags_with_prefix.html # ================================================================================= # # SYNOPSIS # # AX_RESTORE_FLAGS_WITH_PREFIX(PREFIX, LIST-OF-FLAGS) # # DESCRIPTION # # Restore the flags saved by AX_SAVE_FLAGS_WITH_PREFIX. # # Expansion example: AX_RESTORE_FLAGS_WITH_PREFIX([GL], [[CFLAGS],[LIBS]]) # expands to # # CFLAGS="$gl_saved_flag_cflags" # LIBS="$gl_saved_flag_libs" # # One common use case is to define a package specific wrapper macro around # this one, and also restore other variables if needed. For example: # # AC_DEFUN([_AX_CHECK_GL_RESTORE_FLAGS], [ # AX_RESTORE_FLAGS_WITH_PREFIX([GL],[$1]) # AC_LANG_POP([C]) # ]) # # # Restores CFLAGS, LIBS and language state # _AX_CHECK_GL_RESTORE_FLAGS([[CFLAGS],[LIBS]]) # # LICENSE # # Copyright (c) 2016 Felix Chern # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 3 AC_DEFUN([AX_RESTORE_FLAGS_WITH_PREFIX],[ m4_ifval([$2], [ m4_car($2)="$_ax_[]m4_tolower($1)_saved_flag_[]m4_tolower(m4_car($2))" $0($1, m4_cdr($2))]) ]) gource-0.56/m4/ax_check_glu.m40000644002342600234260000002502115152463042015770 0ustar andrewcandrewc# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_glu.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_GLU([ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) # # DESCRIPTION # # Checks for GLUT. If a valid GLU implementation is found, the configure # script would export the C preprocessor symbol "HAVE_GLU=1". # # If either a valid GLU header or library was not found, by default the # configure script would exit on error. This behavior can be overwritten # by providing a custom "ACTION-IF-NOT-FOUND" hook. # # If the header, library was found, and been tested for compiling and # linking the configuration would export the required compiler flags to # "GLU_CFLAGS" and "GLU_LIBS" environment variables. These two variables # can also be overwritten by defining the environment variables before # executing the configure program. If it was predefined, configure would # not try to overwrite it, but it would still perform the compile and link # test. Only when the tests succeeded does the configure script to export # "HAVE_GLU=1" and to run "ACTION-IF-FOUND" hook. # # If user didn't specify the "ACTION-IF-FOUND" hook, the configuration # would prepend "GLU_CFLAGS" and "GLU_LIBS" to "CFLAGS" and "LIBS", like # many other autoconf macros do. # # If the header "GL/glu.h" is found, "HAVE_GL_GLU_H" is defined. If the # header "OpenGL/glu.h" is found, HAVE_OPENGL_GLU_H is defined. # # You should use something like this in your headers: # # # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # # include # # endif # # if defined(HAVE_GL_GLU_H) # # include # # elif defined(HAVE_OPENGL_GLU_H) # # include # # else # # error no glu.h # # endif # # On the OSX platform, you can use the option --with-xquartz-gl to use # X11/Xquartz GLU implementation instead of the system built in GLU # framework. # # Some implementations (in particular, some versions of Mac OS X) are # known to treat the GLU tesselator callback function type as "GLvoid # (*)(...)" rather than the standard "GLvoid (*)()". If the former # condition is detected, this macro defines "HAVE_VARARGS_GLU_TESSCB". # # LICENSE # # Copyright (c) 2009 Braden McDaniel # Copyright (c) 2013 Bastien Roucaries # Copyright (c) 2016 Felix Chern # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 23 # example program m4_define([_AX_CHECK_GLU_PROGRAM], [AC_LANG_PROGRAM([[ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLU_H # include # elif defined(HAVE_OPENGL_GLU_H) # include # else # error no glu.h # endif ]],[[gluBeginCurve(0)]])]) dnl Default include : add windows.h dnl see http://www.opengl.org/wiki/Platform_specifics:_Windows dnl (acceded 20120801) AC_DEFUN([_AX_CHECK_GLU_INCLUDES_DEFAULT],dnl [ AC_INCLUDES_DEFAULT [ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif ] ]) # check tesselation callback function signature. m4_define([_AX_CHECK_GLU_VARARGS_TESSVB_PROGRAM], [AC_LANG_PROGRAM([[ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLU_H # include # elif defined(HAVE_OPENGL_GLU_H) # include # else # error no glu.h # endif ]], [[GLvoid (*func)(...); gluTessCallback(0, 0, func)]]) ]) # _AX_CHECK_GLU_SAVE_FLAGS(LIST-OF-FLAGS,[LANG]) # ---------------------------------------------- # Save the flags to shell variables. # Example: _AX_CHECK_GLU_SAVE_FLAGS([[CFLAGS],[LIBS]]) expands to # AC_LANG_PUSH([C]) # glu_saved_flag_cflags=$CFLAGS # glu_saved_flag_libs=$LIBS # CFLAGS="$GLU_CFLAGS $CFLAGS" # LIBS="$GLU_LIBS $LIBS" # # Can optionally support other LANG by specifying $2 AC_DEFUN([_AX_CHECK_GLU_SAVE_FLAGS], [ m4_ifval([$2], [AC_LANG_PUSH([$2])], [AC_LANG_PUSH([C])]) AX_SAVE_FLAGS_WITH_PREFIX([GLU],[$1]) dnl defined in ax_check_gl ]) # _AX_CHECK_GLU_RESTORE_FLAGS(LIST-OF-FLAGS) # Use this marcro to restore the flags you saved using # _AX_CHECK_GLU_SAVE_FLAGS # # Example: _AX_CHECK_GLU_RESTORE_FLAGS([[CFLAGS],[LIBS]]) expands to # CFLAGS="$glu_saved_flag_cflags" # LIBS="$glu_saved_flag_libs" # AC_LANG_POP([C]) AC_DEFUN([_AX_CHECK_GLU_RESTORE_FLAGS], [ AX_RESTORE_FLAGS_WITH_PREFIX([GLU],[$1]) dnl defined in ax_check_gl m4_ifval([$2], [AC_LANG_POP([$2])], [AC_LANG_POP([C])]) ]) # Search headers and export $ax_check_glu_have_headers AC_DEFUN([_AX_CHECK_GLU_HEADERS], [ _AX_CHECK_GLU_SAVE_FLAGS([CFLAGS]) AC_CHECK_HEADERS([$1], [ax_check_glu_have_headers="yes";], [], [_AX_CHECK_GLU_INCLUDES_DEFAULT()]) _AX_CHECK_GLU_RESTORE_FLAGS([CFLAGS]) ]) # _AX_CHECK_GLU_SEARCH_LIBS(LIBS) # ------------------------------- # Search for a valid GLU lib from $1 and set # GLU_LIBS respectively AC_DEFUN([_AX_CHECK_GLU_SEARCH_LIBS], [ _AX_CHECK_GLU_SAVE_FLAGS([[CFLAGS],[LIBS]]) AC_SEARCH_LIBS([gluBeginCurve],[$1], [GLU_LIBS="${GLU_LIBS:-$ac_cv_search_gluBeginCurve}"]) _AX_CHECK_GLU_RESTORE_FLAGS([[CFLAGS],[LIBS]]) ]) # OSX specific GLU checks AC_DEFUN([_AX_CHECK_DARWIN_GLU], [ AC_REQUIRE([_WITH_XQUARTZ_GL]) AS_IF([test "x$with_xquartz_gl" != "xno"], [GLU_LIBS="${GLU_LIBS:--lGLU}"], [GLU_LIBS="${GLU_LIBS:--framework OpenGL}"]) ]) # AX_CHECK_GLU([ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) # ----------------------------------------------------- # Checks GLU and provides hooks for success and failures AC_DEFUN([AX_CHECK_GLU],[ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([_WITH_XQUARTZ_GL]) AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_ARG_VAR([GLU_CFLAGS],[C compiler flags for GLU, overriding system check]) AC_ARG_VAR([GLU_LIBS],[Linker flags for GLU, overriding system check]) dnl Setup GLU_CFLAGS and GLU_LIBS AS_CASE([${host}], [*-darwin*],[_AX_CHECK_DARWIN_GLU], [*-cygwin*],[_AX_CHECK_GLU_SEARCH_LIBS([GLU glu MesaGLU glu32]) AC_CHECK_HEADERS([windows.h])], # try first native [*-mingw*],[_AX_CHECK_GLU_SEARCH_LIBS([glu32 GLU glu MesaGLU]) AC_CHECK_HEADERS([windows.h])], [PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([GLU],[glu], [], [_AX_CHECK_GLU_SEARCH_LIBS([GLU glu MesaGLU])]) ]) AS_CASE([$host], [*-darwin*], [AS_IF([test "X$with_xquartz_gl" = "Xno"], [_AX_CHECK_GLU_HEADERS([OpenGL/glu.h])], [_AX_CHECK_GLU_HEADERS([GL/glu.h])] )], [_AX_CHECK_GLU_HEADERS([GL/glu.h])]) dnl compile test AS_IF([test "X$ax_check_glu_have_headers" = "Xyes"], [AC_CACHE_CHECK([for compiling a minimal OpenGL Utility (GLU) program], [ax_cv_check_glu_compile], [_AX_CHECK_GLU_SAVE_FLAGS([CFLAGS]) AC_COMPILE_IFELSE([_AX_CHECK_GLU_PROGRAM], [ax_cv_check_glu_compile="yes"], [ax_cv_check_glu_compile="no"]) _AX_CHECK_GLU_RESTORE_FLAGS([CFLAGS])]) ]) dnl link test AS_IF([test "X$ax_cv_check_glu_compile" = "Xyes"], [AC_CACHE_CHECK([for linking a minimal GLU program], [ax_cv_check_glu_link], [_AX_CHECK_GLU_SAVE_FLAGS([[CFLAGS],[LIBS]]) AC_LINK_IFELSE([_AX_CHECK_GLU_PROGRAM], [ax_cv_check_glu_link="yes"], [ax_cv_check_glu_link="no"]) _AX_CHECK_GLU_RESTORE_FLAGS([[CFLAGS],[LIBS]])]) ]) # # Some versions of Mac OS X include a broken interpretation of the GLU # tesselation callback function signature. AS_IF([test "X$ax_cv_check_glu_link" = "Xyes"], [AC_CACHE_CHECK([if GLU varargs tesselator is using non-standard form], [ax_cv_varargs_glu_tesscb], [_AX_CHECK_GLU_SAVE_FLAGS([CFLAGS],[C++]) AC_COMPILE_IFELSE([_AX_CHECK_GLU_VARARGS_TESSVB_PROGRAM], [ax_cv_varargs_glu_tesscb="yes"], [ax_cv_varargs_glu_tesscb="no"]) _AX_CHECK_GLU_RESTORE_FLAGS([CFLAGS],[C++])]) AS_IF([test "X$ax_cv_varargs_glu_tesscb" = "yes"], [AC_DEFINE([HAVE_VARARGS_GLU_TESSCB], [1], [Use nonstandard varargs form for the GLU tesselator callback])]) ]) dnl hook AS_IF([test "X$ax_cv_check_glu_link" = "Xyes"], [AC_DEFINE([HAVE_GLU],[1],[Defined if a valid GLU implementation is found.]) m4_ifval([$1], [$1], [CFLAGS="$GLU_CFLAGS $CFLAGS" LIBS="$GLU_LIBS $LIBS"])], [m4_ifval([$2], [$2], [AC_MSG_ERROR([Could not find a valid GLU implementation])]) ]) ]) gource-0.56/m4/ax_boost_filesystem.m40000664002342600234260000001046115152463042017442 0ustar andrewcandrewc# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_boost_filesystem.html # =========================================================================== # # SYNOPSIS # # AX_BOOST_FILESYSTEM # # DESCRIPTION # # Test for Filesystem library from the Boost C++ libraries. The macro # requires a preceding call to AX_BOOST_BASE. Further documentation is # available at . # # This macro calls: # # AC_SUBST(BOOST_FILESYSTEM_LIB) # # And sets: # # HAVE_BOOST_FILESYSTEM # # LICENSE # # Copyright (c) 2009 Thomas Porschberg # Copyright (c) 2009 Michael Tindal # Copyright (c) 2009 Roman Rybalko # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 28 AC_DEFUN([AX_BOOST_FILESYSTEM], [ AC_ARG_WITH([boost-filesystem], AS_HELP_STRING([--with-boost-filesystem@<:@=special-lib@:>@], [use the Filesystem library from boost - it is possible to specify a certain library for the linker e.g. --with-boost-filesystem=boost_filesystem-gcc-mt ]), [ if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ax_boost_user_filesystem_lib="" else want_boost="yes" ax_boost_user_filesystem_lib="$withval" fi ], [want_boost="yes"] ) if test "x$want_boost" = "xyes"; then AC_REQUIRE([AC_PROG_CC]) CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS LIBS_SAVED=$LIBS LIBS="$LIBS $BOOST_SYSTEM_LIB" export LIBS AC_CACHE_CHECK(whether the Boost::Filesystem library is available, ax_cv_boost_filesystem, [AC_LANG_PUSH([C++]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], [[using namespace boost::filesystem; path my_path( "foo/bar/data.txt" ); return 0;]])], ax_cv_boost_filesystem=yes, ax_cv_boost_filesystem=no) AC_LANG_POP([C++]) ]) if test "x$ax_cv_boost_filesystem" = "xyes"; then AC_DEFINE(HAVE_BOOST_FILESYSTEM,,[define if the Boost::Filesystem library is available]) BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` if test "x$ax_boost_user_filesystem_lib" = "x"; then for libextension in `ls -r $BOOSTLIBDIR/libboost_filesystem* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break], [link_filesystem="no"]) done if test "x$link_filesystem" != "xyes"; then for libextension in `ls -r $BOOSTLIBDIR/boost_filesystem* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break], [link_filesystem="no"]) done fi else for ax_lib in $ax_boost_user_filesystem_lib boost_filesystem-$ax_boost_user_filesystem_lib; do AC_CHECK_LIB($ax_lib, exit, [BOOST_FILESYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_FILESYSTEM_LIB) link_filesystem="yes"; break], [link_filesystem="no"]) done fi if test "x$ax_lib" = "x"; then AC_MSG_ERROR(Could not find a version of the Boost::Filesystem library!) fi if test "x$link_filesystem" != "xyes"; then AC_MSG_ERROR(Could not link against $ax_lib !) fi fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" LIBS="$LIBS_SAVED" fi ]) gource-0.56/m4/ax_check_glut.m40000644002342600234260000001747715152463042016174 0ustar andrewcandrewc# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_glut.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_GLUT([ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) # # DESCRIPTION # # Checks for GLUT. If a valid GLUT implementation is found, the configure # script would export the C preprocessor symbol "HAVE_GLUT=1". # # If either a valid GLUT header or library was not found, by default the # configure script would exit on error. This behavior can be overwritten # by providing a custom "ACTION-IF-NOT-FOUND" hook. # # If the header, library was found, and been tested for compiling and # linking the configuration would export the required compiler flags to # "GLUT_CFLAGS" and "GLUT_LIBS" environment variables. These two variables # can also be overwritten by defining the environment variables before # executing the configure program. If it was predefined, configure would # not try to overwrite it, but it would still perform the compile and link # test. Only when the tests succeeded does the configure script to export # "HAVE_GLUT=1" and to run "ACTION-IF-FOUND" hook. # # If user didn't specify the "ACTION-IF-FOUND" hook, the configuration # would prepend "GLUT_CFLAGS" and "GLUT_LIBS" to "CFLAGS" and "LIBS", like # many other autoconf macros do. # # If the header "GL/glut.h" is found, "HAVE_GL_GLUT_H" is defined. If the # header "GLUT/glut.h" is found, HAVE_GLUT_GLUT_H is defined. # # You should use something like this in your headers: # # # if HAVE_WINDOWS_H && defined(_WIN32) # # include # # endif # # if defined(HAVE_GL_GLUT_H) # # include # # elif defined(HAVE_GLUT_GLUT_H) # # include # # else # # error no glut.h # # endif # # On the OSX platform, you can use the option --with-xquartz-gl to use # X11/Xquartz GLUT implementation instead of the system built in GLUT # framework. # # LICENSE # # Copyright (c) 2009 Braden McDaniel # Copyright (c) 2013 Bastien Roucaries # Copyright (c) 2016 Felix Chern # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 17 AC_DEFUN([_AX_CHECK_GLUT_SAVE_FLAGS], [ AX_SAVE_FLAGS_WITH_PREFIX([GLUT],[$1]) dnl defined in ax_check_gl AC_LANG_PUSH([C]) ]) AC_DEFUN([_AX_CHECK_GLUT_RESTORE_FLAGS], [ AX_RESTORE_FLAGS_WITH_PREFIX([GLUT],[$1]) dnl defined in ax_check_gl AC_LANG_POP([C]) ]) dnl Default include : add windows.h dnl see http://www.opengl.org/wiki/Platform_specifics:_Windows dnl (acceded 20120801) AC_DEFUN([_AX_CHECK_GLUT_INCLUDES_DEFAULT],dnl [ AC_INCLUDES_DEFAULT [ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif ] ]) m4_define([_AX_CHECK_GLUT_PROGRAM], [AC_LANG_PROGRAM([[ # if HAVE_WINDOWS_H && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLUT_H # include # elif defined(HAVE_GLUT_GLUT_H) # include # else # error no glut.h # endif]], [[glutMainLoop()]])]) # _AX_CHECK_GLUT_MANUAL_LIBS_GENERIC(LIST-OF-LIBS) # ------------------------------------------------ # Searches libraries provided in $1, and export variable # $ax_check_glut_lib_glut AC_DEFUN([_AX_CHECK_GLUT_MANUAL_LIBS_GENERIC], [ _AX_CHECK_GLUT_SAVE_FLAGS([[CFLAGS],[LIBS]]) AC_SEARCH_LIBS([glutMainLoop],[$1], [GLUT_LIBS="${GLUT_LIBS:-$ac_cv_search_glutMainLoop}"]) _AX_CHECK_GLUT_RESTORE_FLAGS([[CFLAGS],[LIBS]]) ]) # Wrapper macro to check GLUT header AC_DEFUN([_AX_CHECK_GLUT_HEADER],[ _AX_CHECK_GLUT_SAVE_FLAGS([CFLAGS]) AC_CHECK_HEADERS([$1], [ax_check_glut_have_headers=yes]) _AX_CHECK_GLUT_RESTORE_FLAGS([CFLAGS]) ]) # AX_CHECK_GLUT_LIB([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------- # Checks GLUT headers and library and provides hooks for success and failures. AC_DEFUN([AX_CHECK_GLUT], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([_WITH_XQUARTZ_GL]) AC_ARG_VAR([GLUT_CFLAGS],[C compiler flags for GLUT, overriding configure script defaults]) AC_ARG_VAR([GLUT_LIBS],[Linker flags for GLUT, overriding configure script defaults]) AS_CASE([${host}], [*-darwin*],[AS_IF([test "x$with_xquartz_gl" != "xno"], [GLUT_LIBS="${GLUT_LIBS:--lGLUT}"], [GLUT_LIBS="${GLUT_LIBS:--framework GLUT}"])], [*-cygwin*|*-mingw*],[ _AX_CHECK_GLUT_MANUAL_LIBS_GENERIC([glut32 glut]) AC_CHECK_HEADERS([windows.h]) ], [_AX_CHECK_GLUT_MANUAL_LIBS_GENERIC([glut]) ]) dnl host specific checks dnl checks header AS_CASE([${host}], [*-darwin*],[AS_IF([test "x$with_xquartz_gl" = "xno"], [_AX_CHECK_GLUT_HEADER([GLUT/glut.h])], [_AX_CHECK_GLUT_HEADER([GL/glut.h])] )], [_AX_CHECK_GLUT_HEADER([GL/glut.h])]) dnl compile AS_IF([test "X$ax_check_glut_have_headers" = "Xyes"], [AC_CACHE_CHECK([for compiling a minimal GLUT program], [ax_cv_check_glut_compile], [_AX_CHECK_GLUT_SAVE_FLAGS([CFLAGS]) AC_COMPILE_IFELSE([_AX_CHECK_GLUT_PROGRAM], [ax_cv_check_glut_compile="yes"], [ax_cv_check_glut_compile="no"]) _AX_CHECK_GLUT_RESTORE_FLAGS([CFLAGS]) ]) ]) dnl link AS_IF([test "X$ax_cv_check_glut_compile" = "Xyes"], [AC_CACHE_CHECK([for linking a minimal GLUT program], [ax_cv_check_glut_link], [_AX_CHECK_GLUT_SAVE_FLAGS([[CFLAGS],[LIBS]]) AC_LINK_IFELSE([_AX_CHECK_GLUT_PROGRAM], [ax_cv_check_glut_link="yes"], [ax_cv_check_glut_link="no"]) _AX_CHECK_GLUT_RESTORE_FLAGS([[CFLAGS],[LIBS]]) ]) ]) dnl hook AS_IF([test "X$ax_cv_check_glut_link" = "Xyes"], [AC_DEFINE([HAVE_GLUT], [1], [Defined if a valid GLUT implementation is found]) m4_ifval([$1], [$1], [CFLAGS="$GLUT_CFLAGS $CFLAGS" LIBS="$GLUT_LIBS $LIBS"]) ], [m4_ifval([$2], [$2], [AC_MSG_ERROR([Could not find a valid GLUT implementation])] ) ]) ]) gource-0.56/m4/ax_save_flags_with_prefix.m40000644002342600234260000000556015152463042020574 0ustar andrewcandrewc# ============================================================================== # https://www.gnu.org/software/autoconf-archive/ax_save_flags_with_prefix.html # ============================================================================== # # SYNOPSIS # # AX_SAVE_FLAGS_WITH_PREFIX(PREFIX, LIST-OF-FLAGS) # # DESCRIPTION # # For each flag in LIST-OF-FLAGS, it expands to lower-cased shell variable # with the prefix holding the flag original value. The saved variables # can be restored by AX_RESTORE_FLAGS_WITH_PREFIX # # As an example: AX_SAVE_FLAGS_WITH_PREFIX([GL], [[CFLAGS],[LIBS]]) # expands to # # gl_saved_flag_cflags="$CFLAGS" # gl_saved_flag_libs="$LIBS" # CFLAGS="$GL_CFLAGS $CFLAGS" # LIBS="$GL_LIBS $LIBS" # # One common use case is to define a package specific wrapper macro around # this one, and also setup other variables if needed. For example: # # AC_DEFUN([_AX_CHECK_GL_SAVE_FLAGS], [ # AX_SAVE_FLAGS_WITH_PREFIX([GL],[$1]) # AC_LANG_PUSH([C]) # ]) # # # pushes GL_CFLAGS and GL_LIBS to CFLAGS and LIBS # # also set the current language to test to C # _AX_CHECK_GL_SAVE_FLAGS([[CFLAGS],[LIBS]]) # # LICENSE # # Copyright (c) 2016 Felix Chern # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 3 AC_DEFUN([AX_SAVE_FLAGS_WITH_PREFIX],[ m4_ifval([$2], [ _ax_[]m4_tolower($1)_saved_flag_[]m4_tolower(m4_car($2))="$m4_car($2)" m4_car($2)="$$1_[]m4_car($2) $m4_car($2)" $0($1, m4_cdr($2)) ])]) gource-0.56/m4/ax_check_gl.m40000644002342600234260000002612515152463042015611 0ustar andrewcandrewc# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_gl.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_GL([ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) # # DESCRIPTION # # Checks for an OpenGL implementation. If a valid OpenGL implementation is # found, this macro would set C preprocessor symbol HAVE_GL to 1. # # If either a valid OpenGL header or library was not found, by default the # configuration would exits on error. This behavior can be overwritten by # providing a custom "ACTION-IF-NOT-FOUND" hook. # # If the header, library was found, and been tested for compiling and # linking the configuration would export the required compiler flags to # "GL_CFLAGS" and "GL_LIBS". These two variables can also be overwritten # by user from the command line if they want to link against the library # they specified instead of having the configuration script to detect the # flags automatically. Note that having "GL_CFLAGS" or "GL_LIBS" set # doesn't mean it can compile or link with the flags, since it could be # overwritten by user. However the "HAVE_GL" symbol and "ACTION-IF-FOUND" # hook is always guaranteed to reflect a valid OpenGL implementation. # # If user didn't specify the "ACTION-IF-FOUND" hook, the configuration # would prepend "GL_CFLAGS" and "GL_LIBS" to "CFLAGS" and "LIBS", like # many other autoconf macros do. # # OpenGL is one of the libraries that has different header names on # different platforms. This macro does the header detection, and will # export the following symbol: "HAVE_GL_GL_H" for having "GL/gl.h" or # "HAVE_OPENGL_GL_H" for having "OpenGL/gl.h". To write a portable OpenGL # code, you should include OpenGL header like so: # # #if defined(HAVE_WINDOWS_H) && defined(_WIN32) # # include # #endif # #ifdef HAVE_GL_GL_H # # include # #elif defined(HAVE_OPENGL_GL_H) # # include # #else # # error no gl.h # #endif # # On the OSX platform, there's two possible OpenGL implementation. One is # the OpenGL that ships with OSX, the other comes with X11/XQuartz # (http://www.xquartz.org). To use the xquartz variant, user can use the # option --with-xquartz-gl[=path to xquartz root]. By default the # configuration will check "/opt/X11", which is the default X11 install # location on OSX. # # LICENSE # # Copyright (c) 2009 Braden McDaniel # Copyright (c) 2012 Bastien Roucaries # Copyright (c) 2016 Felix Chern # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 22 # example gl program m4_define([_AX_CHECK_GL_PROGRAM], [AC_LANG_PROGRAM([[ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GL_H # include # elif defined(HAVE_OPENGL_GL_H) # include # else # error no gl.h # endif ]],[[glBegin(0)]])]) dnl Default include : add windows.h dnl see http://www.opengl.org/wiki/Platform_specifics:_Windows dnl (acceded 20120801) AC_DEFUN([_AX_CHECK_GL_INCLUDES_DEFAULT],dnl [ AC_INCLUDES_DEFAULT [ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif ] ]) # _AX_CHECK_GL_SAVE_FLAGS(LIST-OF-FLAGS) # Use this macro before you modify the flags. # Restore the flags by _AX_CHECK_GL_RESTORE_FLAGS # # Example: _AX_CHECK_GL_SAVE_FLAGS([[CFLAGS],[LIBS]]) expands to # gl_saved_flag_cflags=$CFLAGS # gl_saved_flag_libs=$LIBS # CFLAGS="$GL_CFLAGS $CFLAGS" # LIBS="$GL_LIBS $LIBS" AC_DEFUN([_AX_CHECK_GL_SAVE_FLAGS], [ AX_SAVE_FLAGS_WITH_PREFIX([GL],[$1]) AC_LANG_PUSH([C]) ]) # _AX_CHECK_GL_RESTORE_FLAGS(LIST-OF-FLAGS) # Use this marcro to restore the flags you saved using # _AX_CHECK_GL_SAVE_FLAGS # # Example: _AX_CHECK_GL_RESTORE_FLAGS([[CFLAGS],[LIBS]]) expands to # CFLAGS="$gl_saved_flag_cflags" # LIBS="$gl_saved_flag_libs" AC_DEFUN([_AX_CHECK_GL_RESTORE_FLAGS], [ AX_RESTORE_FLAGS_WITH_PREFIX([GL],[$1]) AC_LANG_POP([C]) ]) # Check if the program compiles AC_DEFUN([_AX_CHECK_GL_COMPILE], [dnl _AX_CHECK_GL_SAVE_FLAGS([CFLAGS]) AC_COMPILE_IFELSE([_AX_CHECK_GL_PROGRAM], [ax_check_gl_compile_opengl="yes"], [ax_check_gl_compile_opengl="no"]) _AX_CHECK_GL_RESTORE_FLAGS([CFLAGS]) ]) # Compile the example program (cache) AC_DEFUN([_AX_CHECK_GL_COMPILE_CV], [dnl AC_CACHE_CHECK([for compiling a minimal OpenGL program],[ax_cv_check_gl_compile_opengl], [_AX_CHECK_GL_COMPILE() ax_cv_check_gl_compile_opengl="${ax_check_gl_compile_opengl}"]) ax_check_gl_compile_opengl="${ax_cv_check_gl_compile_opengl}" ]) # Link the example program AC_DEFUN([_AX_CHECK_GL_LINK], [dnl _AX_CHECK_GL_SAVE_FLAGS([[CFLAGS],[LIBS],[LDFLAGS]]) AC_LINK_IFELSE([_AX_CHECK_GL_PROGRAM], [ax_check_gl_link_opengl="yes"], [ax_check_gl_link_opengl="no"]) _AX_CHECK_GL_RESTORE_FLAGS([[CFLAGS],[LIBS],[LDFLAGS]]) ]) # Link the example program (cache) AC_DEFUN([_AX_CHECK_GL_LINK_CV], [dnl AC_CACHE_CHECK([for linking a minimal OpenGL program],[ax_cv_check_gl_link_opengl], [_AX_CHECK_GL_LINK() ax_cv_check_gl_link_opengl="${ax_check_gl_link_opengl}"]) ax_check_gl_link_opengl="${ax_cv_check_gl_link_opengl}" ]) # _AX_CHECK_GL_MANUAL_LIBS_GENERIC(LIBRARIES-TO-SEARCH) # Searches library provided in $1, and output the flag # $ax_check_gl_lib_opengl AC_DEFUN([_AX_CHECK_GL_MANUAL_LIBS_GENERIC], [ AS_IF([test -n "$GL_LIBS"],[], [ ax_check_gl_manual_libs_generic_extra_libs="$1" AS_IF([test "X$ax_check_gl_manual_libs_generic_extra_libs" = "X"], [AC_MSG_ERROR([AX_CHECK_GL_MANUAL_LIBS_GENERIC argument must no be empty])]) _AX_CHECK_GL_SAVE_FLAGS([CFLAGS]) AC_SEARCH_LIBS([glBegin],[$ax_check_gl_manual_libs_generic_extra_libs], [ ax_check_gl_lib_opengl="yes" break ]) AS_IF([test "X$ax_check_gl_lib_opengl"="Xyes"], [GL_LIBS="${ac_cv_search_glBegin}"]) _AX_CHECK_GL_RESTORE_FLAGS([CFLAGS]) ]) ]) # _WITH_XQUARTZ_GL # ---------------- # Provides an option in command line to specify the XQuartz installation # path on OSX, so that user can link to it instead of using the default # OSX OpenGL framework. (Mac OSX only) AC_DEFUN_ONCE([_WITH_XQUARTZ_GL],[ AC_ARG_WITH([xquartz-gl], [AS_HELP_STRING([--with-xquartz-gl@<:@=DIR@:>@], [On Mac OSX, use opengl provided by X11/XQuartz instead of the built-in framework. If enabled, the default location is @<:@DIR=/opt/X11@:>@. This option is default to false.])], [AS_IF([test "X$with_xquartz_gl"="Xyes"], [with_xquartz_gl="/opt/X11"])], [with_xquartz_gl=no]) AS_IF([test "X$with_xquartz_gl" != "Xno"], [AC_MSG_CHECKING([OSX X11 path]) AS_IF([test -e "$with_xquartz_gl"], [AC_MSG_RESULT(["$with_xquartz_gl"]) CFLAGS="-I$with_xquartz_gl/include $CFLAGS" LIBS="-L$with_xquartz_gl/lib $LIBS" ], [with_xquartz_gl=no AC_MSG_RESULT([no]) AC_MSG_WARN([--with-xquartz-gl was given, but test for X11 failed. Fallback to system framework]) ]) ]) ]) # OSX specific setup for OpenGL check AC_DEFUN([_AX_CHECK_DARWIN_GL], [ AC_REQUIRE([_WITH_XQUARTZ_GL]) AS_IF([test "x$with_xquartz_gl" != "xno"], [GL_LIBS="${GL_LIBS:--lGL}"], [GL_LIBS="${GL_LIBS:--framework OpenGL}"]) ]) # AX_CHECK_GL_LIB([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------- # Checks OpenGL headers and library and provides hooks for success and failures. # When $1 is not set, this macro would modify CFLAGS and LIBS environment variables. # However, user can override this behavior by providing their own hooks. # The CFLAGS and LIBS flags required by OpenGL is always exported in # GL_CFLAGS and GL_LIBS environment variable. # # In other words, the default behavior of AX_CHECK_GL_LIB() is equivalent to # AX_CHECK_GL_LIB( # [CFLAGS="$GL_CFLAGS $CFLAGS" # LIBS="$GL_LIBS $LIBS"] # ) AC_DEFUN([AX_CHECK_GL], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_ARG_VAR([GL_CFLAGS],[C compiler flags for GL, overriding configure script defaults]) AC_ARG_VAR([GL_LIBS],[Linker flags for GL, overriding configure script defaults]) dnl --with-gl or not can be implemented outside of check-gl AS_CASE([${host}], [*-darwin*],[_AX_CHECK_DARWIN_GL], dnl some windows may support X11 opengl, and should be able to linked dnl by -lGL. However I have no machine to test it. [*-cygwin*|*-mingw*],[ _AX_CHECK_GL_MANUAL_LIBS_GENERIC([opengl32 GL gl]) AC_CHECK_HEADERS([windows.h]) ], [PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([GL],[gl], [], [_AX_CHECK_GL_MANUAL_LIBS_GENERIC([GL gl])]) ]) dnl host specific checks dnl this was cache _AX_CHECK_GL_SAVE_FLAGS([CFLAGS]) AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h], [ax_check_gl_have_headers="yes";break]) _AX_CHECK_GL_RESTORE_FLAGS([CFLAGS]) AS_IF([test "X$ax_check_gl_have_headers" = "Xyes"], [_AX_CHECK_GL_COMPILE_CV()], [no_gl=yes]) AS_IF([test "X$ax_check_gl_compile_opengl" = "Xyes"], [_AX_CHECK_GL_LINK_CV()], [no_gl=yes]) AS_IF([test "X$no_gl" = "X"], [AC_DEFINE([HAVE_GL], [1], [Defined if a valid OpenGL implementation is found.]) m4_ifval([$1], [$1], [CFLAGS="$GL_CFLAGS $CFLAGS" LIBS="$GL_LIBS $LIBS"]) ], [m4_ifval([$2], [$2], [AC_MSG_ERROR([Could not find a valid OpenGL implementation])]) ]) ]) gource-0.56/m4/pkg.m40000644002342600234260000001214515152463042014140 0ustar andrewcandrewc# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$PKG_CONFIG"; then if test -n "$$1"; then pkg_cv_[]$1="$$1" else PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) fi else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` else $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES gource-0.56/ChangeLog0000664002342600234260000003153415152463042014354 0ustar andrewcandrewc0.56: * Added --author-time option (onlyJakob). * Fixed build with Boost 1.89.0 by no longer linking boost system. * Increased minimum required version of Boost to 1.69. * Request compatibility profile when creating OpenGL context. 0.55: * Fixed build with Boost 1.85.0 (cho-m). 0.54: * Added experimental support for Wayland (beroset). * Fixed building on Apple M1 by updating autoconf macros (Ckhardin). 0.53: * Added --high-dpi option. * Fixed various bugs with Retina displays on MacOS. * Fixed slider timestamp font not affected by --font-scale. * Fixed hovering over end of slider stopping time advancing. 0.52: * Support rendering at native resolution on Retina / Ultra HD displays. * Support ISO 8601 timestamp format. * Allow custom log and caption file timestamps to be strings. * Change regular expression library to PCRE2. * Fixed filenames not being affected by --font-scale (Carl Colena). * Fixed file key not being affected by --font-scale. * Added --file-idle-time-at-end option. * Added --fixed-user-size option. 0.51: * Fixed --font-file relative path handling. * Fixed a bug in resolving the repository root directory from a relative path. 0.50: * Right mouse button rotation now pivots around the camera. * Added --font-file option. * Added --enable-font-file option to configure. * Added --no-time-travel option (Lars Schmertmann). * Added --dir-name-position option (Lars Schmertmann). * Added --file-extension-fallback option (Lars Schmertmann). * Added --user-show-filter option (Victor Lopez). * Added --disable-input option (Joey Parrish). * Added --loop-delay-seconds option (Joey Parrish). * Added --font-scale option. * Added filename, dirname and user font size options (Carl Colena). * Added workaround for FFMpeg error parsing Gource PPM video output. * Fixed a bug in the Mercurial log parser that caused changes to be missed. * Fixed file removal being cancelled by an action with an earlier timestamp. * Fixed a bug in the log file format detection that could result in the wrong first entry being displayed for a custom log. * Fixed a bug where automatically cycling through a config with multiple repositories reset settings to their defaults. 0.49: * Fixed compatibility with GLM 0.9.9.0. 0.48: * Can now generate logs from git sub module directories. 0.47: * Fixed low mouse movement speed with some mice while repositioning camera. 0.46: * Added --screen option. 0.45: * Added --window-position XxY option. * Added --frameless option. * Added --file-show-filter REGEX option (swoogles). * Added --filename-time and filename-colour options (gh2k). * Improved handling of very low seconds-per-day values (malengrin). * Fixed crash when SVN log lacks author information (obarthel). * Additional git log command validation (cym13). * Allow lower case hex colours in custom logs (HSorensen). * Enabled STDOUT support with --output-stream '-' on Windows (circulosmeos). * Now requires SDL 2 to build (deprecated SDL 1.2 support removed). 0.44: * Fixed crash when taking a screenshot with an odd resolution. * Fixed type deduction compilation error with newer versions of GCC. * Documentation improvements. 0.43: * Updated boost autoconf macros to fix multi-arch detection. 0.42: * Fixed bzr log command when no start date was specified (chrisf). * Fixed hg log commit order when date range specified. * Fixed hg log command line on Windows. * Fixed parser bug in date range filtering code. 0.41: * Multi-monitor support using SDL 2.0 when available. * SDL 1.2 support is deprecated. * Full screen mode now uses desktop resolution by default. * Added --start-date, --stop-date 'YYYY-MM-DD hh:mm:ss' options. * Added --dir-name-depth option. * Changed --file-idle-time default value to 0. * Changed screenshot format to PNG. 0.40: * Added caption support. * Improved command line interoperability on Windows. * Fixed directory deletion short circuiting processing the rest of a commit. * Fixed issue loading non-ascii user image filenames on windows. * Ignore UTF-8 byte order mark at the start of lines in custom log files. * Fix to boost macros for Macs and non-GNU systems (mistydemeo). * Autotools improvements (flameeyes). 0.39: * Fixed blurry non power of 2 logos. * File colour changes now supported in custom logs (rmyorston). * Fixed building against Boost 1.50 (svenstaro). * Updated boost autoconf macros (flameeyes). * Autogen script (matthiaskrgr). 0.38: * New high quality sprites. * Fullscreen toggle with alt + enter. * Window is now resizable. -WIDTHxHEIGHT! creates a non-resizable window. * Lowered minimum zoom distance. * Use AM_CPPFLAGS in Makefile.am to allow passing custom CPPFLAGS. * Don't add files that match the path of a known directory. * Fixed divide by zero in text shader causing artifacts on some video cards. * Recursively search for repository directory when log-format not specified (thanks to Jörg Bachmann for original concept / prototype). * New dependency on Boost Filesystem. * Doubled the maximum zoom out distance. * Allow negative timestamps before 1970 in custom log (artzub). * Fix for UTF8-CPP checked.h compilation issue (vszakats). * Fixed bug causing missing characters in text. * Fixed --highlight-users option not using highlight-colour. * highlight-colour default changed to white. * Added --selection-colour option (applied to selected users and files). * Added --dir-colour option (applied to directories). 0.37: * Made SVN log GMT timestamp conversion fix portable. 0.36: * Fixed SVN log GMT timestamp conversion. * Fixed issue with sub-dirs of deleted dir not being removed in some cases. 0.35: * Added long file extension truncation handling to file key (--key). * Treat changes in Mercurial log files with the same time/user as one commit. * Fixed handling of spaces in directory names with Mercurial. * Fixed --font-colour option. 0.34: * Now using VBOs and shaders for faster rendering when OpenGL 2.0 is available. * Eliminated bloom colour banding artifacts (requires OpenGL 2.0). * New font rendering library derived from FTGL (FTGL no longer required). * Single pass font/shadow rendering (with lots of help from Chris Forbes). * Added --no-vsync option. * Fixed bug where tree is out of alignment with object positions in windowed mode due to using the wrong display dimensions internally. * Removed default max-files limit. 0.33: * Added --hide root option to not draw branches from the root directory. * Fixed log parsing of Bazaar merges and tagged commits. * --output-custom-log now skips unparsed log entries instead of exiting. 0.32: * Fixed behaviour of user camera tracking. 0.31: * Added --with-tinyxml option to configure (use the system TinyXML library). 0.30: * Fixed crash when SVN log entry contains no 'paths' element. * Handle directory deletion (happens in SVN logs). 0.29: * SVN built-in support. * cvs2cl log support (cvs-exp support is now deprecated). * Made camera behaviour when zooming and selecting objects more intuitive. * Improved interactive performance. * Added file extension key (--key or toggled with 'K'). * Added mouse-over tool tips. * Added --highlight-colour option. * Added --hash-seed option. The S key now randomizes colours. * Added --output-custom-log option. * Exposed --time-scale option (previously only available interactively). * Removed arbitrary 1024 maximum length limit for log lines. * Fixed two file colouring bugs (quoted files from git, period in file path). * Fix handling of avatars for UTF-8 usernames on MACOSX (Christian Köstlin). * Recover from video mode failing to set due to multi-sampling (Siddhesh Poyarekar). 0.28: * Bazaar support for merged commits (Nick Moffit). * C++ efficiency improvements (Oliver Smith). * Improved cvs-exp log compatibility. * Re-show name of user when adding a new action if user is idle. * Added --padding option to control camera view padding. * More accurate camera tracking (tracks the bounding boxes of objects). * Improved automatic rotation logic. 0.27: * Display time stops at the time of the last commit. * Users fade out when end reached rather than ending abruptly. * Position slider is now hidden by default if recording a video. * Automatic camera rotation for better use of screen space. * Support international keyboards (Peter Kjellerstedt). * C++ efficiency improvements (Jacob Metcalfe). * Fixed crash when reading from STDIN. * Fixed intermittent crash closing Gource when using --output-ppm-stream. * Added ini style config file support (see --load/save-config). * Added screenshot button (F12). Screenshots respect the alpha channel. * Added --transparent to make the background see-through (for screenshots). * Added --logo and --background-image options. * Added --dont-stop option for manual exiting when recording videos. * Added --stop-at-time option to stop Gource after a number of seconds. * Added --hide 'mouse' option. * Added --highlight-dirs option. * Added --file-extensions to show filename extensions only. * Added --user-filter REGEX option. * Allow --file-idle-time 0 (files will never expire). * Allow --start-position 'random' to set a random start position. * --log-command VCS replaces multiple --log-command-VCS options. * Replaced --disable-progress and --disable-bloom with arguments to --hide. 0.26a: * Updated to latest version of GL autoconf macros. 0.26: * Improved mouse dragging. * Holding right mouse button and moving the mouse rotates the view. * The middle mouse button now toggles the camera mode. * Username positions now scale correctly. * Simulation time no longer incremented while paused, counting towards file time lag. * M key now toggles mouse visibility. * Added --hide option to use instead of multiple --hide-ELEMENT options. 0.25: * Bazaar support (John Arbash Meinel). * Dragging the mouse on the background moves the camera. * Added --camera-mode option (track,overview). * Support DOS line endings in logs. * Improved compatibility of hg log command (Brendan Cully). * Fixed PPM exporter producing blank images on some video cards. * Fixed parsing of negative timezones from cvs-exp.pl logs. * Fixed various gdb and compiler warnings. 0.24: * PPM output speed improvements, including using a second thread (HighlandSun). * Now using standard autotools (Flameeyes). * Fixed --max-file-lag not working with some custom log files. * Gource will stop at the end of the log by default when recording a video. * Fixed STDIN stopping working after the first lot of records with tail -f. * Added proper exception handling. * Print errors to stderr. 0.23: * Hiding filenames no longer hides directory names. * Fixed --stop-on-idle option. * Added --stop-at-end option (more intuitive than --stop-position 1.0). 0.22: * Fixed Mercurial log order. 0.21b: * Fixed windows build. 0.21: * Some documentation fixes. 0.20: * Added bloom effect (turn off with --disable-bloom). * Added support for Mercurial (thanks to Justin Love for gource.style). * --start-position option now works in combination with --disable-progress. 0.19: * Use time_t instead of long for timestamps. 0.18: * Fixed camera movement while the simulation is paused. 0.17: * Show correct month for CVS logs. * Added time scaling (Bitshifter). 0.16: * Added --hide-dirnames option. * Added --user-scale option. * Added --date-format option (Pat Notz). * Fix bug when encountering long log lines. * Fixed incorrect parsing of trivial merges. * Fixed building issues on OSX. 0.15: * Added PPM output support for creating videos (Johannes Schindelin). * Added experimental Apache combined access log support (--log-format apache). * Added --stop-position and --stop-on-idle options (useful for making videos). * Added --max-file-lag option to limit how long after a commit file changes can take to appear. * Added --no-renames to the git log command as they don't display correctly. * Added --max-user-speed and --user-friction as options. * Now builds on OSX Leopard (with the required libaries installed). * Caught raw exception from replace_invalid(). * Added CXXFLAGS. You may want to override the default (eg CXXFLAGS=-O3 ./configure). 0.14: * Updated SVN instructions. 0.13: * Removed single quotes from log command (fixes running gource --git-log-command in back ticks) * Added SVN instructions. * Fixed manpage hyphens. 0.12: * Added --enable-ttf-font-dir=DIR option to configure (to specify the ttf-freefont directory). * UTF-8 support using UTF8-CPP (http://utfcpp.sourceforge.net/). * Changed the git log command (see --git-log-command) to require less work to parse. Log files generated with the previous git-log command used by gource should continue to work. * Allow --seconds-per-day value less than 1.0. * Added --git-branch command. * Added --loop command. * Added --crop command. 0.11: * Made N key skip to next entry. * Documented --user-image-dir flag. * temp file name now uses uid instead of time 0.1: * First release. gource-0.56/data/0000775002342600234260000000000015152463042013505 5ustar andrewcandrewcgource-0.56/data/shaders/0000775002342600234260000000000015152463042015136 5ustar andrewcandrewcgource-0.56/data/shaders/bloom.vert0000644002342600234260000000027315152463042017150 0ustar andrewcandrewc varying vec3 pos; void main() { pos = gl_Vertex.xyz - gl_MultiTexCoord0.yzw; gl_TexCoord[0] = gl_MultiTexCoord0; gl_FrontColor = gl_Color; gl_Position = ftransform(); } gource-0.56/data/shaders/text.frag0000644002342600234260000000072415152463042016764 0ustar andrewcandrewcuniform sampler2D tex; uniform float shadow_strength; uniform float texel_size; void main(void) { float colour_alpha = texture2D(tex,gl_TexCoord[0].xy).w; float shadow_alpha = texture2D(tex,gl_TexCoord[0].xy - vec2(texel_size)).w * shadow_strength; float combined_alpha = 1.0 - (1.0-shadow_alpha)*(1.0-colour_alpha); if(combined_alpha > 0.0) colour_alpha /= combined_alpha; gl_FragColor = gl_Color * vec4(vec3(colour_alpha), combined_alpha); } gource-0.56/data/shaders/bloom.frag0000644002342600234260000000064215152463042017107 0ustar andrewcandrewc varying vec3 pos; void main() { float r = fract(sin(dot(pos.xy ,vec2(11.3713,67.3219))) * 2351.3718); float offset = (0.5 - r) * gl_TexCoord[0].x * 0.045; float intensity = min(1.0, cos((length(pos*2.0)+offset)/gl_TexCoord[0].x)); float gradient = intensity * smoothstep(0.0, 2.0, intensity); gradient *= smoothstep(1.0,0.67+r*0.33, 1.0-intensity); gl_FragColor = gl_Color * gradient; } gource-0.56/data/shaders/text.vert0000644002342600234260000000017015152463042017020 0ustar andrewcandrewcvoid main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; gl_FrontColor = gl_Color; gl_Position = ftransform(); } gource-0.56/data/shaders/shadow.frag0000644002342600234260000000032115152463042017256 0ustar andrewcandrewcuniform sampler2D tex; uniform float shadow_strength; void main(void) { vec4 colour = texture2D(tex,gl_TexCoord[0].st); gl_FragColor = vec4(0.0, 0.0, 0.0, gl_Color.w * colour.w * shadow_strength); } gource-0.56/data/shaders/shadow.vert0000644002342600234260000000017015152463042017321 0ustar andrewcandrewcvoid main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; gl_FrontColor = gl_Color; gl_Position = ftransform(); } gource-0.56/data/file.png0000644002342600234260000012622715152463042015142 0ustar andrewcandrewc‰PNG  IHDR\r¨fbKGDÿÿÿ ½§“ pHYs  šœtIMEæ+ )¢s IDATxÚì½{¼eWU&ú¹ö>¯Ê£ ˆ(Þ‚A»›$@_‚! OsEm -êmÛ«­Wýõ¯Ûî†nõúën_\AHš§<‚ä¡@„¼$@@@¼¢HH*UuÎßýcÎ1çs­S©ª¤*Ù«sêœýX{í5Çãß÷ `y,å±<–ÇòXËcy,å±<–ÇòXËcy,å±<–ÇòXËcy,å±<–ÇòX÷”C–—àÐ=.¿ür<éIO ¿{ÿûÏÃi§=ëvŸû±}L†aHóÙÃ0 %íK)€T¨*H, ¨*677¡ Õ§žôTÞÞû}ðC©Ï|føÝ]„“ŸúÔå¹ ËcŽË.» 'žxâí>îÌ3_„_üÅ_YŸÍç+³ÙŒ"€* È‹z6K[ÿôOßæ’K/]Ïf÷_]]UI ²¹gïžc‹Å ³á”a˜å]íË$(,Á ÕS°®âòxÖÀþP‚HdÎH”Œ!€ÍÍMlmm}r6›½tuuõÿSÕUÅî={Òæææ×ŸvÊ)·íë³}èCÂ3»¬ay,À=ú¸úê«ñøÇ?~òo¿ú~Ïöó³±±Áù|’ؽ{÷‘ü•ù’À²TücûɼPE ùB µD)É%JÊϲ« 4ÿ2¿@„ù)ù1T,˜O <‡„í9P{÷ìÁßX]Y9WD¸µµ%·|ë[é¿þõÏžyæ™:õÙ/¼ðBœtÒIËdîyǧ?ýi<ö±üÛ¥—]vÂúÚúÚúêÊbs±øŽÝ»w¿mm ) yqæ•­ ¤¼*„æõ™ëx¼H}<`ùÿ) ˜T_µ-|–ÀÑöÿü‚,+Ÿ¨ö,ÚãíaEDÜk¨’ÉÒˆÅb]·Ý†•ùüùóùüo·¶¶†›o¾yóÔSO½| –ày\{íµ8þøã'ÿvÕUW°¶¶öÝÃ0lÞrë­ï\™Í˜Ïg¥6O¤,D¶öDr&V7lÁ³ìÜRvóš!Ô=Ü~.i½´^ÄRý’N°–5;°÷bÍn@Ö2¢¥ %~¸è“Ë(šH@uÛvíÒõ;N£*öîÝû“O>ù²©kuÁàä“O^ÞPËpè×\s ÷¸Çm÷·ï™ÏçOžÏçßÚ³gÏ™ÍfÇ‹HYô ’ey‰ô©½ÕÝ~ñ·}Ümøµö'rÝ.å±%릀ö3¤Öz"‡’üß`JgÀ/|—`”k8¿€(”èÁT­¨€(TbkkëËóùü‹Å[[[WžtÒIWO]ÿø‹¿ÀÓŸþôå¶ ‡Öq饗áû¿ŒÞÿõ_ÿõf³ÙY³Ùì›[[[/‘g¦”l'ewý¹¿ßGÚ‚ìÒøæåô¿íä¥rè@?ºà‚Ñ‹yÛîÛŽÚ»wï+ŸùÌgÞâ?ãG>ò<ãÏXÞˆËpןùÌgð˜Ç<¦ÏþÇ}î³s`Çb±ø×³Ù¬bð­8€bÕ{í©;à.¬îÛ[ê%~Ôy"Ÿð;±=† ´…Ï.“`ËÄmîHl¯Æ DK»q|ƒªî\©¾Á eÐ ¡zݶ¶¶ "oð›nºiõôÓOÿ?ý«žþù8å”S–7æ2Üãºë®ÃqÇ~wõÕWÿÁÆÆÆ|Ïž=g¯®®ÖòZòÎ+R›o¹Ý=[n7')ºp3J5o 0˜Ëº:¦ù5í÷Y‡4¼Ï^Hkà` Ae+' (‘DÚ‚ƒ‰‚H† œ‘PR5i 1_™¿nïž½xúÓŸþRm–݃e8(Çç?ñˆGöYÀïÎf³û«ê ÃÉ=8LÕõSûxý¥ÿo ~9÷ÿ6YAÀZ0a„äF&ï½ÚÊû_:­dhI}ŒFö˜Ú<’ P ¸èˆJhÏcÀ Ø¢Œx°€$¨”….DÞºµXÜrÊ)§„@pÑEà©O=yyã.À;n¸á<ò‘yáÿÝW¯–ï~àãyýõ×ÿWù^’O‘YJURZaß–s£ßÔÿ[#Â~¢~­–ï~Gîã9—l%Àv頻nA+j“¹£Ðvy÷*.ðÔ…ëJEyu]É>Øù¹çן¥~ ÅbQ/µ3Iþ9€ëO:餟»ü“È“¾ïdÀùžSNZ–ËpGþuŸÇ#{àKó¥ô‡>D¯¿þ†_à…<‚|ñÜ®/v·;VöëÇ„a¾&Úƒ}ÍÀþY.Íw«²µõJëPK ŠpÄ9òØ€[ॠ-$•€Ð¶üÚE`Áj°Ç8²¢ª,¥‰‚=¯&ñá“O>ù×?òžñôg,–Á¾´¼íøôg? xäqÀ Ÿýb€½›{â†nøœ~"' dC ä¦{nå E’’ý¢°vóʶÿƒûŸlûX¸Ç·À±×íÞÛNG€öšð‹?ŸTÿ–$!É‘“å禶øíc–×óÿÏ"£ˆ€‰å¼Ð¨ÄÒ8ÊRO7Õó•Ty‡€HùsÉuW‘7Ȫ@N„ÈÏ_xá×Íæ³\pÁ`‹ÿÏÏ;oy“/3€ñqÕ5×à …Àsåµ×¦M] ;W×NÈÿ Á‘Ž”ÆrË7aݲ]S¤PÂO\nǶÆÒ€ÜÛ¯L€~ùr\&t‚©ò¡– FE¨GnÒiÜÙnàZ®uØe @Ëïó"G&B"Ëc줵Õ"5(¥êB|¢CjáGÊ­$o&ùËÿøÕ¯ž»ã¨£yÚsN_ÀûÞ÷~<ûÙ§-oü{{¸øâ‹ñ”§<ð±K/•ÕÕëëëðîYJ;¬Û”;6ÿŸ¶Š~P|iû!eWóþ/øXL<¬èÐÕÞ>uÏ¿´v`G ®Ø@iï)‚‰½¾W Z8R²ò YZ€æ= UÑÄiHÕ˜Š…7@BÚû¨B•™§h”c6ÁC!<í^lnÞFê™·îÞû‰­½[·¼à…ÏS8çÜspæg.À½ùxÛÛÞ†=èAßµsçÎû)ùÑ•ù|çÒÀVÙg€O˜‘~ŠT‘Žô—0§Ê"ErÛ7Ò]ÔÈ¥÷4$G’L#~Ÿîr‰¶êĶ@hAÞûúŒèK·¸Ú¿> dÃZëúFÖª5B¢¶[ÃS†k§=( ÅÊ Ë|VP·9&XX0caT[¨c!“ Ý»¹÷Bžyãßøò­»nýû³_z6/þÄÅxÊ`mmíSCJW¯¯®3¤4X-"Lƒˆ$ IB’)’ ’—}J‚”2c¯ÖçÉ~/H)!¥ü;IRjíTkd«ÉSr5¼¤úx¤I©¼Nª)·Õôöw_wKÊϯو”ó(u¶©ý›eÛL’ÚîR5CÊå  Cþ}ÊI|)KZ ²sñXÚy%Ú¶þ”RCܵÈ'™Ï«v”ùZˆ`H¨ŠÅ|U[Ë¥„A‚`Hiuuõ¨Ù0\¼¾¾þé‡<ø!ýÚß} _ûǯ¡`ËpO>®¸âJÀø@»1¿çÖ[o}ìÖÖÖåG}ôf³YÞƒrMÏ$ ‰"ùÆk"™|7eü?š•&¶À­Æõm¸ /µŸSê‚€ËÝ2€²˜Ãcdâ÷’“®D©Á¨JƒË·‡XP±Ÿ0”G  @(%&z¤±;× d¢€{eÑ[T»õ3”€”|W%ƒ“"­è§ պܵ5 ef62Ìî?4 ÷³äg8ŸPýG]Žc³ ;ØÏe÷¾?¥¥âô¦6¬€Òûù–YÔ—,€K9Ë|ͯmå@iæ"¡ðük-j (YެŵH\ÙCu­É¢< æO$€lmmaskóo766~ðºë®ûÊ}ï{_yá _È{“êð\|ñÅ€c|,`uuö¸k¯½âŸïÚµë‚õõõãf³™w¦d¦èw+‘ Ï·Œ­æÚqu÷„±‰r² `1AsÜ|rnW­ŠšUøp.e1µö_׬©vøW+ ¬6/­e#ív©){¾|µˆ× °˜ÈÑ9•J"߈Öò÷KÙá­´²s4’µi*ªÊ²ÛÞU ")?UA ³Ä•••mnnþÕƒô §Îf³ïPÿ›ß|Î28\/~ñ‹xØÃ†óÎ;O.øèü¹ósþÖ·¾uÎl6ûgÃ0‰Gl×oÔ\wã÷©Þà5'…СüåßÎ3k¿Tw¼ AÿßPx |üíº#rë,L¹!x4@MÅË¿ú;¢ô:g¡Ú‰ðï“é½Ùç¨:»l%ÿ hI¤´%iÍ$ªÀyX  ¤ªÊBXl-®Z[]{þ»ß÷Î/ÿèÒOÿôÙúþ÷¿§vÚ2NǾð<üá\vÙe'¬¬¬·cÇŽ_‘§ˆˆuªEjN+Sé¾H¸@a‚Û= <³GöCÔsÀÂCÒƒ)Hóåé´û¡pÄþHéõƒd<ןQ"L:— LjHz±«å ¨fò°ô*GæL"7´I˜T 2(ïYù 笛­Eµ|RR¸àU·í¾í¿îÞ½û‹gœqÆ¥ðÁþ9N=õ_€CýøÄ'>ø¨ÿþüç?ÿ°Ý»wÿ÷”†çÎç3¤œƒ¶Í%åw`UØû¥Ûùáwù¼Ø28'e’»õŠúàÓL?z>•ôF"}6€Èí7Böœ8e fqÏñÏ¡2‹Có:Р Ðòïþ—Ö£§ êèÅ$sý^ƒ5PLf5vþ<AU’”­­-lmm}d>ŸÿìýÐ]gÏ{ã߈—¼ä%Ëp(×\s5÷¸ÇãOþäMòßqÌüQzÔ#¼BDžWÚJÙR3מee”B u;=|ýÛ_.ÂÑâ®HŽçï8=6áa‚£´ß÷ãYwþž¸Ë[¬}°× 9‹Óš5(³m˜!/¡é JÐX(ÌÖLÁŒC„÷ÖfB¦Q—šÍ“©’} X:ÄBõÏEÒ¿ûüç¯ûìM7ݸùïÿýä{ßû~œ~úiËp(^§饗·²²ò#φáŸ1w«X¶zfÄoá¤^éC‚_DÞï?ªM¸¯ý¹¨§³Ëœ…ØÔN:…)˜IéYQX‡ (Ú¯­ù×@ 2ª¹KàÌJ-ï·Ú_©“»»Ï—Ûd>£(2c³'«BíÅbqÉ®]»>´¹¹õÎ3Ï<ãê\|§žzê2 ‡—ì^{í§%ùŸ‡axÉl6¯†›R÷ú¦>É€¶uêÓd@&Ôát¸óÞ/Õ ÕÿÅHÔ§éá±µ†ze ¯.´‚€¼­™êØýeg÷¦Æn!—àB%Óˆ–@a9Ñê¤74Ñje¦ÙµT”¤d|[[[PåÛSJ¿vúéϾÎ;ï<<ëYÏZ€»ó¸þúëñ¨G= ð¹Ï]÷`€¯L"g ÃPqùÒ62_ÔèWul»ø­=àÇbÎG›îÃí…OçÊĸØ{¬ Ç¼œ7Ïô%Ç„¨¨£þfµ¯|#—æ'(yœ™ïDÛ¨¢ê šÛP +MãÀÖÈ"IªÀT„®Ã;S’_yÖ³žu¼ï¼óðìÃ<–<€üãPÿõ×_ÿ ”ä¿¥”~4%·ø ÖÐ=©»yí'wòÕ@ø©>ø÷ŒÅo—À:“ÙN•õ6NC žëàŠîºú×iJá£Ha¶ÒªÓKZ’$²ç,ÌIºßuo*èúÒ^{P9þ±RØMVh‚”äù~ëýøÀ#ÔÅÿÚ×¾v™ÜÇ\pßcŽ9æ1ëëëgxI‡îSZàÒvw£J#–x¯¿IŸBÀ j’¯› li´¸.A— xѵí”m¦M#î|'üáJò®E™Õ€TIÄÏ¡ª%ch¥†:ɳ^­ÍXJ u¶d.ˆ¼u×®[ÿð¾öýò—¿üðú׿?ù“?¹ û°‘Ùù—½cÇÿsmmí¤ÕÕÕ\“²èr&ýn$2®é)Eý>ßkt„¢Px!F7à6ò3$õ8Ai·-@`¡5høæ§…òÂæ –TÝËëâîž35Õ~gZϯó!ðÀ ª÷<Èe@/D {öìÙýµ[oÝõñ[wíúù³ê§þaYÜÇ•W^‰'=éI¸øâ‹<òÈ£mmí¬•ùÊCA¬¹\±´—Ê×wàÃÐWæ×ð^¤’6ÑéÊ¢²xjj_–Ž»âRõ@¶Z9ÇDFý•xÓD õ´êéýªõrúžÄÛŽŽ9¡\ 2ê³÷o²×t­^¸7Èü¡ÕùÊê±;6^|ô‘Gþá[Þô¦ûÀ9眻ÌÖqÅWà‰O|">ùÉOîX]]}Í|>{Ñl6 1§™ì^oÞ-$ZOùR•®´þ¸È½Û Áiø›¸ïØÎŒÀ¨Ë@ü˜r[Ë ‹RòÎ…:1QKf`£fÆQIïÕ¹Õ­½Œ>Ó j(àÆ¤nßõU›Í¹2¼·e5ö™*I ¶·!¶67¹wsó=·Ý¶÷_ýØýèMïxÇ;ð‚¼`™èÿ‰O|".¹ä’µµµ?žÏç/šÍæÉµòiþº±\½_9æÞ¾øËui¸GÛô†jI@Ýp¥š‰AT JçÍ| R•>·ïE¡uׯYÛm*Áÿ ‚Œ4ï„ v²iÉm·)`5+ñ<¿%6¡•°f â’€Ùl†ù|å9«oxÛÛÞ¶ó/xÞñŽw,À\ü'œp.¹ä’;v¼~6›½`f©ÞR Ø„†Ó v¤ÒJ§Ò~î,ÍÛõ©þ„-Ò ‰—ëèSggdÒ+$-}ÿú)zVqCÊž¶ÞÒˆ•I©lôJÕÌFÄüI:ÆgªA"’Àœ§@)}‚ý#³Ù€ù|þìaÞhAàœsÎY€‘öŸp ¸ôÒKwìØ±ãu³ÙìùÃ0¤rÞæ‘Ýx˧‘v× Õ ÐÜlÐ×ü\.ýɺPÆÜ¯• œXRÕþëÚ/F{ŒeÉ2Œ’T鯖L¢˜°HJÍö¬¶ý¨´ïdÃ~‹®Á^¤–0â,‰[– h;wbœy4bûÔHÃ0`6›–RzãßøÆgžy&Î=÷ÜeøvŽK.¹ðÄ'>—^zé‘ëëë¯É;ÿÝ·’P\ƒ_ÊêåâTc›@ê§´V–ëÛ0 û H·…%Õ±=/¹gvaS¦×LÁ•öoµ7¹f·E¦RïiÞ½«¢(rÂ9û¿;ŽCSÕrôàaÜ{κÖ)¥„a6;mccãOÞò–·ÜçŒ3Î¼á ¯_€ý=.ºè"<ùÉO\zé¥G¯­­ýá|>Ñ0 IÌ.èKÛ±|½Zlû£·|MayïBúï46ÈÎK SI,µjmîvR›‡µð¿7£TGʱÂ<¤Zëgª±u$˜7´(\ýg›mÔ(Ýçk˽}FF;uag9åóa†Ù|þìÙlöº7üñî?ñ?‰W¿úÕË.À9>ö±ÝwÇŽÿ}mmíG‡<|Ù"N¬[뿺[õÒ^qbçz»¬ø¿ Pumû ]2Œ1óóþ¦|PìÁ„.¼òÐϰ†_|-Õ,÷•”B¿ÞzùZ¼Æšk*o$ŸzJ¨(¾›H(sªe:&åÅÖ. ÈÍÍMìÙ½ç]·ìºåg~ꥇ.OàÊ>[&ó|øÏ?¼smuí7WVV~t†LÓ#ÅeϳF}p¨²§™Z„_îüwb§ T+séÀ2¸ï!ì¤òn|ËÊÍ”´ºÿ¢õÞY2ë àA v`ËZøk™ŸD’±Û´Ô£žeñ#ð|&0.¶¹>&"e6›ÉêÚêóÖV×ÿçïÿÞïï~÷»—`»ãúë¯Ç£ýhÀwÞÿÇ­¯¯ÿóù|>Cu‰JY½¤ Ÿ¼ç2ÿX¢õ¬²œ„p'rE Ö^ãuÔ )\†š7ä á|ú \¶F¡cÆ×¢¢Zuâ_]̶<®\iéÊ8ñíƒXÈz¼vÄA ûΨ+e6›¥õõµ¼ÿýïÿ¿ÀsŸû\¼ç=ïY€þ¸öÓ×VaÏg?÷™c×6V_¾²ºòPQí«´Hâ+2‘ö·[®MçYw2È6úˆø=„R,,6Žf&iVà§qè.X² eeçîÊ`‚:Õùñ•( ò›Gß.–´í5‰ü‡â”XÚK«««ß¹¾±ö3ï~÷»ÏyÎsðÞ÷¾wì¸æÓ×àøÇøÌµŸ=V^ðÇI®Õï޿П…[ìqg·•Òm¹õ˜06ˆh¼ Ë¢K¹Û”PDÂQt'6ºnða´`ÒŸË>¾gtüy6·"v˜R7HÕaMãY Þ&½9O‘\%ñbùíw¿ûÝ€ÓO?ýá Ü­àŸø÷Ø<”󚿾æ!„þgu½Íz²ZpõÒÏ1o¼qÙ¸lõ„ àµ÷^r…Vˆd"ÃÓÝ8ò<¸¤—b[ú/ñ%ühá2>D¤(¢wq¶Á¥$ô²c/s1j Šå*~ª…–ì¯X`÷yJýÍÿõ¶ÿõ(8óÌ3ñê×Üý»}i¼ímo—‡<äØïY[_ûÕùlþcÃ0Tï«§üN1ˆÝX­ /q¾xËã€(N»eÅŒ-Äã• a¡ýöHºÚä`uÜüè=XU„f%T¬¿¼zÑ‹¨wòl §øŠªeÞ`õPd05AѨêx(*²­Ù™˜Ðææ»p¡ ìÙ³çí»víúÏ7|ñúk^ñŸ^y·×¥w[ðÙÏ|°c}-Íg³g ’^Ò/þ`Ä_ë2©{C¿àcôÇrñ\8À]_Æ rCÊkNªì4Q:t¯&4ª7¥Ø†£º¸Oùc䊬¾v–ì>KwoÙëºó´òÁ¾xd›·^¥jL2`f/\YYyþQG3€÷¾÷]÷¾píg>ƒG?æ1€‡?üá[[[;}˜Í4é‰ÖÝã]?LÝ­ŸåB=ØùãhîIŸŽ{hFº¯«ÍѤ£þû¥Ä[„"SñfÄü³7c` Eðr \zýÆ#¤šN?ÑŠ˜:¤<ƒœÍll¬?ó{ù°Gg<àyx×»þìÞ.¾øb_ÿg®½öÁJþޤt’ñZÚЙHêj½|³{—zÒé4–ÇÁÏÆPšX\xmJp4|'Ç‚2½ØlÊÂjkxPÈÇ逸l±Í$ô.ÑCŠ]‡©ú+[¤¾jAÎ[Ò˜%eÞúdUþö»ÞõÎãàyÏûa¼öu¯½»bø]œþù²±±ñ¸Õ•ÕW¬®®>;å1Ö &>¥æ§míçÅùvŽ7²°ÁËÅWâthºÇÛL>Eš‹Ï'h}.‹:õ‡UÕçÇŠ-”îõdB˜„8™Èÿ¾¦îæüÃÈ^ ÃPêóÊœƒÊ ´0 PMyè›ûPoaÖÜ•²Y•ؽg÷Gn»í¶_¿ùæ›?ùoþßê=>¸þºë§œr ç+óïN³áÙÅ"¦^12†¦ÈÇnà^TxU¹OqôY.Ê»6 p~<2ÁÍè~ßóš÷°ÛA“DÒ‘a6røItÚ c!"X»{\b¼+ʸÍYÚ—Â2Ž\"ØL¯9Ÿ ’UŠXÆJ$Ál6{ÆúúúÃþæK§ðž»p—€O]ñ)<ê¸Lö¹áú°¶ºöŸfÃAišBؾ» ‡†ºþ{™ªD™'¹ÜþïŽ PÀ0xcÐ4З È«ªÍBNhžSuCí=ØŸÊÄÇÈ "gÔ‹d2õçníçªgvtS'bGz§Ú%Vd‚À|°¶²ú«O;å_<žsúéxó›ß|Ï-.ÿÔåH)?¤á óùüD˜²œºÐ'£Å³˜¿§cnH‘›ŠzîiÞý‡{9àÇûú”ºNb´ïÊ%‚Âû..ÕÖZ˜£/U˘0ìH}ëÎì¾Zš¯eÀb±•$µ­èJµôÞ,ƺc~¸Ö‰ÉÁ(5 š¨ÊbZÙ»¹yÕæÖæK·6·>õã?þãwiþz—–OúÞ'a†Õ4¤[0ƒRDbNƒ7UÉéJ°€‹ž IDATZwËê¯m¹>¥®  ß9{GZ tݶïÙû—¤¸uû’D½qØæ ·›ËÌŒLfkeF¦Sóžœ0&G‹cMgЛ ‡axÂÊluÇ?þÓ&à¼÷½çž>õ©O®»î3÷†á­I¸o½}½ŒÙ^¬ûc½IÊrâÛZwýú߯8¤ÿ[]íÖ…ÏŠÕP¥Ùz…¢/QÓÔFÒ¨˜Zúîp‡êà¬ÌŠ^ÇyK¸_$Pyº9Çì:íO5Ž ƒ`>Oo:þá÷0<ëÙϹç”_þò—pì±ÁW\ñДÒ_Ìçó‡·–H*RÐ ?%Gªý‰”R5ñ¬; —ëÿ,г;¯Æ¹‚Jmd[KÏmü—¶ÙVBŒ—pû™…ŽõGG^vm"Ï/TFÖ`íl8O€æG “Ýÿsc†f;gŒÂZbØë@(’dïÞÝ»µØú—$?û]ÇÜO¿ Ô à/ÿò¯pì±ÉQn6̇axxù*Ýޱ\Sà|á…nB,âg ŸMí³<ÁÅßo3Éÿ²# %³ztÀbˤ—Œ¨þ,dû)õp;±?mÀÚ“ÍüÔ€½ÊRœÔŸ„£ºWoƒVX&›Ap’³ÙìA+++ëOyÜãñôSOÅë_ð­Äú²yë[ßãÿžïàrˆ|WiéQD$•)’¤¦P~nœw\~\ªšô¦.[ZzŠ‹¿yŽ{òýN»­†€ÄÂóÌý’wt)…Žyýh1mBPæñb,t„Ð91g)\@±YA•H)sꬂP*°Ù××S\Y}®Èo€8ñ«ÿ÷ó³?ó3Ô:hÀUW]¸ÿýïwŸ[oÝu9D¾«Ê¨zš·çgÃÓD%†ÕÎBÚçåâ?´‘ÈÔïб1׳ü~*#m·W÷IÓH|~ßÞ™ÚóÚÙ öqmmgàjrÊàô Õ8*½ê&: ºZ«kB@* 9æÖ]».ßX[{€ƒ.>¨kçSŸú” Ãð8¹<ûúADR6èJe0”D·ÞHIî†j@ºè=}xçá4矠ÆS…Bêëó¯?’w÷•X""î¹$ Æ®‚ŒìçÜÜ@ãÊí‰&¶\ºȾÂJI çÈ­+|ü‚C?\xþùxà¸æškž à¨VF­_3ˆp×¥óÿh×1‚Q9¼<Ý •pã¿¿íÄèÏ5—°0)]ÿ.p@¢7±Ýë»Y€AÌÉ•ë¸)Ü>å÷s&ˆ†•1Í€„ÃÍh—u9zóÅpòžŒ?ú£?:ôK€÷²—áÙÿÇY?rŸ÷y•HºŸ WuÞ…ä½åzk¯øs>ÕTX€É¸KòÏ!_伱經ûv O—•ŠŒÍ-jzÏÚFÚèðiRNàë[¯kæs*Veˆð^ 2b˜šÎ@€@ö àŸÿ[w=r%a É:‚·Þøî _øâ_ùÊWp@ð€e]tà·_ýj¬¯­ÿ€ûˆ@¥CÄÿÛÑ%'ãR´‡. á²8äSN¦÷2Õss¶ÜìvìQÈ}ƒ±m–AZgš¸Ý„’ÓØ Q‰ÅVÇd6CŸ·™„µN[,¡ wl¬¯ÿš-þ=bì€/¡ /¼ðçŽÞ¹ó7†a¸/@&$!È”¤óJ¹ÄñH®gÿ¥FäùòÀrÀ×a’”v –™zp;*­-Q"ƒhi³M˜{ô@"\{­±ñÆ;.•ÕßÏ2„µŠ~·o+¾‚uÔJ@R×ÎÔº“Ûï[+ÑHƒµéEfc§’…M¢’ Ü|ã7¾âü .üí7ÿé›hÝ{@2€~ô£õççp_i `!T‰ÃNdjh[ô ûÆÜ~>–òuآΈ(/ &¡?z­µYW›QP4 Û¼m|¾=ÞìPLŸL ™X 9êÈ#|¡-þ™ÐMô£=ÿ×vîÜùÏçó#QŒ>,ÍIi¨©Îr챚a؇›ê"QÙ%I/ºåqh&—µ7¬Æ.úzØß˳™zw…Hj»¹µìúÁ¤®Ž·ÝÛÈ@fï•ÛÊ % ‹LŽ:¶ì½;‡ ¸ŒFËÄbHÁºªŸ#•P)™ƒ–Yùƒ[›""[ºØuÓM7ýîÙgŸý«‡$GuäS†”ŽtCÙGtl˜¶ˆÄ®îggÕf1/á)p=Ü^aß;ÿ$öh{! 틦ÛÜhbw¼¸Y‘­ iÂ͈û²;g„¤Ù•ÛÂo„(wK¼ßEK@H'ûdæÆGJ²qÔQGýà/½êU‡xå•WÖŸçóù-Áßp6¡Ó…µ:©S^Åò ¥lËàð)º|`Ÿ¹('X{}½0•ûyƒà18,aÂ0]©ï£)[ðEêôbF@Z̸„xtæ("“l-ÃPU%²s0­A(aeue×ÿóò—þìï8´J€+¯¼òwDäÿrÀ]¶ù² ž°0SJ¡Ž«ZlßD¥H€—ûÿᘠ8+-ب)s¯ ÔŒÜ9 ~—vÓM ªú{­XQïø;žìãÔyºp6cÎZ¬nN9OW2w‹öÙsÔLG|ëÑ}ÖîZÔëa£ƒRB*ç§ær…69OPæëžû¼ç¿ôÈ.»ì2e£DCz†å:‚VêÞZ&(~Kðüˆåâ?lá'Á›fNñH]ªŸÓ,P¯²CН.UHÛ¨á ð±±hÍ_ ·Ò10Máø2‘ƺ·Ì†8åOšI¨Þ]H¥”&ÌaÏ}ë[ßzhd—]vÙoÃðKÃ0Ž$=R;¤T¾© Pƒ%5o 6ÂÐ2 އÈÇ1Xg;!¤k "/ˆø¹•ìÌ>YÚqZí¾[†Ñ9)bO\°Í-ôÞð ]ù$T,(€$êÜÀ$[ìLA» €Pˆµ9@Íkc…h).R½B*¶‹×½øÅ/> YÀÓ|&’+Ùdl -PÙ7V2e 0Ù®\‡Ã‘tzÇ6­§îNqs*ï>¨ñæH¤‰»«firk9£û;s_„Áu.¨^–¥6š§Ó¡R*,RÆÄ¸È¥ÿ¬¬…Š\™ ¥î%RÂlev耀õWõº¹õ‹É,Þ)ÌñµÖ”¦Ï&Λ Ãé,–—Ça˜ÈDò)}êÁßÄ4ûy„r;=!ú÷ÓÛ_ ân\0´»9…ßh×¥¨áô‡aZ•$°ÁBr KI!XXpksë_½éMoú½»-\âjÿ½³Ù̳$Cn³^U· ½ûF‘—(Àá{øºŸûĉ ¯Gáä-p»¯g @Ú[žn ;õ¡Ø@°‘M½'qÄf’É¢ÛBIU&B¨uÚ²—l(1fرcÇž|[àÉ'žøøÅ¯ø¶­šÛ2°út.mû•Xš|ÞSCÀè'v?t{Cüû}¢oßÉí½«%ÎÅÜWK²å®"Õ'ó²­Ber›‘ñIpœ PjÖcp4sRi‹Sj Usî[Ï=^üâßuÀÓ~g³ÙËHþ|"µµD9Ù£¯H)¦3¢fÏPÔmË÷XV‡ÉÁýüÚ¦wHv%€ùê…ÒÐ!÷@ôàä¬2Á>ÊûX5ÙÔîÓ<<‹¬³8Õó÷$·š$8ç#)u’¦Œ›{`HI–Ã*€Ÿ˜¥á—íµ_óš×Ü5àiO{àçw ‹ã’Œ·|ŽZz,¶GˆŠªîû¨ÚhiQµúÊ-«€Ãx×xðvs„qÙwnÙÇ’2$íe¹hÓä+š§£gÓ»¹PÚ@R- ›$!Û•© —ã ‰"‹¤RörV0òÈ€TTùÐW½êU€³Ï>û®رãtUýQ"5ï—.4±%¹/'7 ?½u”)ÛåŽËãðI&MrBÏé”┉ò®ßwq*„B¶)­B™põõÃ|yBm×…ÈCa3¯ š:£ÞÓÍ4e]B¶5£ÛP‹q©€$‰ê‚?¶±±ã¬» <ÿüóëÏG}ô7×ÖÖ@2QühÔÉ©¨e@‚Ÿéî.*=O:bºì«¼ª1\¦‡Åú¯¬ÆÝwô@ÖzØïž ë-s¢FwËŸûJ8ÚqMQê}%&‘¯”éT…~hÉ6§ ΨÔû#Ö¤ÉvûTºhj´e£3'³cHZY[ÁQGýM{×½îuw•¹LJ?üá‡ìر㬯¯ÿ0Us’R4î,"ëÛ§”*­×HAIR›ÑæôÿÉM¶¿%ãn#iépX:#úøÿFŸ€¶„´vjGÿ Æ ÁEȹ al®ÅñGˆ*2Î@jž8Ü9µá LäÏ'S‹%S„•ÕåªR|=•Øe;õshöªa‚ˆ2œ'$‰Ëž2Hˆ$ؽû¶}ëæoýüË^ö²ÏÝe%ÀÆúÆãSJ? @Ã`Ž¢;ÖWÇm€ûŽIâSD ,¹‡Uúß}]ûšåÐ`5'¿IìÊ‚Û0y\1àüöºjÒ¸D¶†*“Ý©³:õ(÷4󅪢ørdªÙ¤U8´y…Zçоf‚:¤á™GqÄ“z ð¡}¨ÕÿGqóÊ|Ì-9}%Ф›Ý˜(Ù.M*QPûj­ƒN¼¹ ‡|úßÖKOƒõ•?Ù}Ϩ{}tþ;‰ö@¥ž ¤ “¸íÅ#”ñ&m÷ðDâ,hñ*æ0‰.õ/#ÔR™.”ÁòÔ‚‹ÝX­F̳TAšÏçØ±cÇ·ìT^}Cïpý|àQo=úè£Oð_@JÅWÉ ’$h™ ?¤ÆçO)eïº]Ašex˜%Ì@¼)(§˜BËãJªT À:õgjÂàKè‚A T$EµCIÍÃìíLAKj>2-F¡ºh³þìñUàlDz™ˆ¶T?¼‡S†À×LA‚¢–Vææk–¨`ÊΠÊVN³1šj »å曯½õ[·œõÓ?û³Wôàˆ#ŽøŽ•••Ø…_¢ŸêVv삌Nš.jŒíÝÀqEæÂ-ÿa‘ä©7#Bý4:ÞiœÒØï•ÛÙãê˨|;!,”³¶yKfï«ü± ƒõ.>˜µ“ÐÌs(âr–Ö LEíP„œ¯®äÎüv¾¢;¬*X__ß*©xmX±ý–æ´ÙKð#üW?îäF!1Á`n_† .dýÝ¿ŽÁn³ú¤‰þ*ï+¾p\ -MgvÏ㶸’y ètúËéÎ% }‡!XP‚}9¦ÊdçÔ^PJ"¯nà)K&“kþ”•“Ò‹‰7ñ•"++s`m¾yÐ0€ /¼0å-idó*Œ÷R«rÛçQä®ÄÝXàON¿+Ò0#³Î– qȪ¿óIv¦E}É…((t˜I$ƒêâ €ó>ð>YìÝ:V´ÚÉ$nâ:9EK[ˆѰ—UÒ†% Õ¬µ•T–”@.ƒÀ!’÷WåG“v³+ &þ+„¨te7€ l„Ö:¸ØµŽJîŽÑwøóŒ¶òÀp'b >O5=ZÝO‡i00‚èÀr‘˜»ê¢tMX$…J‚ú`'pµXA‘Ll.¶ô{¿û»é €õ#¸µØü°$«Z™å Vº´¬EÌÆnnzê¾sÒ†1T³EzÆ¡Ö^ríŽ.ë€Ccýû. 'ËÄ*Ê|²Rãù Ò63àl½‡mìF5”•bÒ~ö˜}ûYÚàOp{A›sÄGñ¹Ô¹ÏV*¹Ï˜D’2ÖÍ’`sÂ.»Ÿm¢Z¦'-ÝÜZ¼ó>÷½ï£ °¶¶V6íEIÙ—ÀìŒ]›.M⊌£AÍ«èzÁˆ»xì‘Zæ‚R"а\ÿ‡ÆÑàžn×ï 1t¾yÅI²âõÁê{´ñç`˜…]ݹePõ)Õ'Ççj©|ÿÉjëªý] Í¢Ç9Æ!„‚i^²°)a6#ÑT‚ŽÿASÙ°Rª8I¤••UwØ ûüÛuvà]W’Ò7õÔ_q ^¶y¥*d"K,àAýeLÓötß~EŠD>‡õÇ…@/–É}šÛdqD·0ÒÕl\ÙdжvÁ…Nc`®¿B-Aioˆna/ÔËŠG­#Â, ‰ré¢RR.‹)gOÅ9¼ÌÜàA ]äïƒÂlWX0ªÛú *¢ ×Ïíþ+Î GÌCÊ ¸Û¡¿‚úËÄâ§ïøò¯cVÈ€¬Vß~>Ÿ•ÓÂ}bÐù5”¡UÈé­Ù„íÓdDŠúPßß3ªŽ½L™~³o°·T7V\-\ë–ÖWò³R«˜D ¢Z 6ºã9çœ{`À…^0[l-βl[¥}qþ« ‘žÑÄÁgi^Þ¡à¸;TÓÃrsøÁŠâI&رŒ`Y ÜM»¿ŒRiv oÝm}ˆ®Æ¯%{œ Ô@{ŽT~9kÐn#‰+ùvù"A¡Æ ¿™}høCs»¢L»æ\öcÌœ(I*®Õ&³Ÿ)XƒI´|r …lnmžñæ7¿yÎ<óŒ†a¶CD~€’ÆÜœOÜpgú¶-§SÇmÍ;ßxJ¥“ú‹*#xyÜ…›ÿ(ŸhTôšã¯¸>Ñ›{ôöZùw쇔ßëôö™e?è£/¦îÞ†Ú³ïÕíô¾ìÞî€Ëb ”ó¿h-L6"\-Ûè35ŒDiv!ÙQPä? Ãì~œÍfEûc0‡H Xîú›ÎuEê¤WŽe’SÃâ!HÌÌî)F¶ Sµ˜lÖò¸‹²$(ðúl@ªÅv/ðõ÷‹cøU-qˆ9åÝÖ*® 9µ©7}=Ùs :š²+7BGÂq,#õF$Ýü²Æ€fÄÆ˜-¯¥QÊÝ g¬#„ó~$™f³•;¦ý [Ε¤b) 3ׯzïØ³¥‹ò㎈6Íô=$—2Úö/ŽgàÙXž{²<î¢Ý¿5ncîÇ@Xé¿_¿ÞÑ×îkÓÅéo|ÖûI19oÚ¿# ‰™Ô3úÚ¡â8Lõ2?ZýÞûX2ú`ŽË%©˜ ÔÁ¦Z‚<¥e¿„×.4¹f‘Z§‘ ð ¿ök¿|çÀ[ÞòÜtÓM÷+*;eeee倀€+++ι4ÛÅñœ=†çÉl& DgüᢨzãT¨½¨ŠÅA:Ì1ÀÐlVÊËqâ|ç·Uäx÷eWÖÖ˜›œcŠÙz¿hk)[­/%sh»to÷%HRˆ¾tžÜ†#f·]÷ÔúÇVË'¡vXC'btEÚpWÀÐ1ýFu³¸Í­¬e&²9¾k‹—{^‰L"¸ÀBVWVÀýÜûn7˜ s Ã,æbèP–»&œ:x¤ÎbW÷;ˆÚí +¤ ‚X†Ñ¸Ñ(¦Ë|ço žŒ¿QJî\]i>E×ßRðæ¹'e2”¸2¢f½~Êeâv÷N;À¸rë®l‹¬*ë<³´ZrE"¶±£/q¬kPnÔQ‰T†€›\Ê@@ó9oœâ÷9SMÚZ)üb¸‰@€ù0ÃÊlÿXþ·ÄM;é¿X†:­=Lv9ñsXüÎ|¡§ù…ÒƒÁ;žS_„Ú\J†ôw~N~Ïk3£§ójø ×ã:ª®ßc¥ˆÎ2—_d;€¯KÿCë­[–þ÷c½,•÷í»òZ %Gí膉z£‰r³øGÚ}ìîuµ….’wŲÀa£Äz‚t΄’ÞO’oºýhßd¹mc×ÎÊi›èÔ1Êœ '­fj¯Í@ÿõ)ûbTKNq¾ý³\¼w2ñïvS„:—âoº¿…m-î:–S¥+/:ðÍrLd¡®¯Ý¤ÔÑiÿ'-Æé»ÏÝl@?àÃišb7×Óm\5äÔö¦4!JY$6GMºa`¾ki¹y•å±â„R²gÁ~Rn7¨æÿµ(ÎÊNò;6·ócTŸì3&þ쳇yzäT' Ó±c¶F-3osñ7aëÀLvr ƈ²Û‚lÈ¿ ˆj))~ÀƒU–•w)ì$KË`é$Êh*‰iœÐLOû¬ŠÓÐê~ öAÅ,?Z†]ÝïóL R›;šwväá!*€:U€}ZÜŤŒæ~îvû‘',ò¨"³#/ãšu´ÑN©1 d}]è®´ÒE[FWõ•'[ßÖ—ÎWŽNdDg!Þ»x¾Åoˆ¼ǹ2šmN}•4S-¿:_Àòý§Ðî³:ß¹ò¨ @%d,]" ˜R^A'[ƒµÜ¨ÁFºr5ú îs!I™ìæLÕ½9CÏ»6EªˆM$§ñÂì  …çŸÇ€Á¥÷Æ>ÌSöŠ:PR%­¬¬l g–Óf¥fá&ÝÞ“1b€w HEFë^ÏÜý 9/­dj3„&œŽ`é$|Çj~#o±èÔŒL#jîüd ÛÀ¬ƒ=Š1§t;*éPúLE1ÖŽ”°ê3Öž¸sû´’ jZè2+-e]‡1`.óA .µ¹æú›ýI¥kG²šˆ›‰îÂ>+)) Z>ÉÇ‘d•Ó øú׿~Ök^ó¹Ó€ T*ÚÐÛŠ;h3m¤›ŽRÒ8uAvq•P™·à'²xèäH© õvOêÚEÚn†ú®-³Œû‰øÔž VnÕKC¤íÄðè;'ÁÞ'¿u È…¶‹Q°Û+ ÃÜȶȂÔu¢6|Uí÷'3ãìQ#¯?*>N€ÎЃ]ÇÁ7 ¤´>iîØ•/ê.¯)e:0 IDATéoy¡T¨ï©Ú¡Ûä`žQk±'$!¨"xõl6¤;Ê*”Êœjƒ ¤Çbú]¾(J¨h$ѱœü­¡6B*~éžÅUqz+f‘Ý9rŠ¢´ÿuÒ½yñW_Ô*R&«j¸(ÆDÿW\*éÑÞ¾6¬ƒûÅ^vxß!ð;÷8K˜šÆÚUŸ\â‘ÜëK’9áðÓ‹¶&l¾Ø-²Pº#0fqjò˜y°›´J?¤â=UadDCx¢ñ¶f4môû:wªÙI>#? Ûõµˆˆ–‘àk/bŸ:Üâ 9Ùß%•@Âf“/¥—)ý¥+ÙFäHR¿œ*ßÜ®Ö䧇s±O³™Ú¶Ìáh¡Û`-™òã uv-rke™mÆVP]Çߌ»Ž{Ni:kÇé`ìLõTØß٤ɄFQI£8½"ZÝ©ëqÇbÉ•0ߥÑñˆyЙÍAýlÂ*6ijüÎì¹=¸Ç~0½ B'£ë¨ŠãHÔ˜L¨F†cz¨bÜÝ s?O€-”Ð^ªh­C€[yÂñóGÁA}vxîúå;˜Zü]'¥ÑV»JŽ)µì'D8-u$ f@è£\×æß©Æ›Á/t{øÊ/@¤‹ûrS…ýÓ·–{›»©Í´Ë7PZ\bëvÿ«øk9•ªl®G¶îÝг +mA­ÆF9°+¤©øîl|IÜh»½ª"¥8ÔÐ8þ)¹6ŸoÇùÕ$± è¬Cª×,d ôÙ„±Tñ¶K è¬>@³4À]Y@OîÃ¥,ð¶Y~×—Évi¯Èl >娭æ5øÙí§(0;³:ÊÖklÏSgÍEh>Ûð9v¨:]9èdñÌTñMœ·kß1t:ú=’“­dqŽç—Y}Žl÷¸ýàˆ+$"¥<¨—5AD‘ØrótJÙRóSXìß.5ÛŸÃr…6ýEBïÜL7ÚâÓ~„ máøÌ_Üh¯0@Ö;¢x-BÕ0Lñ5¬ã°{ûj ›€ï‚ÇEîM)£Ò"ÔÓ‡dVçV+êim{€áq¯Òô)»È¤‹k¥þv²ÛHøâäô ã·08á´¥N®5ÓІηlÒgû2 fÊ/`*.¡vÝtúuÜÚQ›óU>Î^Õ.i÷|»ÞZQ™-6> d©Ö[L•/ß>À`Ëä‹/ó•@ hÈ¥I<éÜkVÆ;O#U4ü@˜O-m3ÀOáó ›±Ö×ïè"nR‘8ƒÒÞ9H@ØRè†ø¶É.q*Ñ!€ì‹tFó±#bzʈ×ïšQ¸Å¾ÅÖ/þÞøÃ·Ë5ŠNFÎ ³ÐÍMÓdĉŽRyÆ­s•j„&¶™8EßRäÌô_{ÿètKRØéjbÄ`TB[þzK ©Ð…U† ŠI¢k1¥8i4ˆAî˜Îåv€wòÉJÌ&ØI%°Y;"!z¢ôŒ.?çL:rBv@úÔ\ܤ•ް#j†ŽeÆz½ ­œ`œ1ëò™šJµT.ÇrD‚™¤¹¹ÜuÓ‰ÚÈt»Ä‘R$ö³1vÖ鑼¥1xèúø>àj~ö¸JC¸M^q#­›‚Ÿ%h*϶ã›NÐËÒ.f`šÝ¢A§& ÄÄÉUô-Ð0€Öu½ÅD±ÈÊ÷WQŽ\é, `¨Ò^jnšç6Tפ7ã­nÙ "¸P§“"årÞû¦ù´]Æô"Gô”Ü¢’€œ8I)£á'œŸŸE@´,¢ûðµ„óKä$HR­šüÖM?$mĵ۹ZÊgB7»NˆußL5Ã;m<_^ù÷ƘçÒ{_K³s¶íj\ö¿Â2Ÿ¾7ô˜æx–a›þ#ÄSdKNDë>D^‚gÞb'Ó‹y¶ovTÉy¬&#/¢3¿õ…Tœ“ÙÒôjÚéí²’Íµô5(WEvöלÀçš_¼c¶´Î»k‡JQ¦d¸AÂb±8@[Y÷ÍäÚ9Òì–EYx‰½’ÌG¬4¹ã×ý~bºªHs¢ízZ5JV3aÑ6‚Ìy¨«4ôÕ5NZSÏW‚åTº“f&‰ £oøº,ÆßNÜW\èy Âè½.£$zãÈñ5­—è¸;vwòL8 »£ºšÇB%ú0beÁf ¸-Fõ“˜?ÕƒÄ c÷=,š=“^4•©<Ñ4¶1åÍD#Á̺ ÚLI$–´´%rЛ9¿ÝSήžu™øû©†­u¼TÓÿo×´ò»d¸Å^, ïõÕ6»7„Áák½ÐTÄ~RÍ»…Bl`K í’ªZ[Dxe…¡ð¡büŒ»¯O»’ý¾2­´¦Êèw{?‚Z– Zm›D™é™õzä/=@êQv7á¦F#KEݤb<Þ þM\zV Õ/çú6‰2ï´f‚¢†g¶º=e—Ñõ—Á­É¬¼e¤ë§æP{^òcÁ›æ?ø6ª/ÝÊõg{- N¿mz+=w4d@a$]’5Ÿ(º`'^®<ýQ[_2±Éžénaµ Ë_æ=Òe˜uß(ó ’ Ù9yâ‡J„;žK~„D tss3ñ@€€RjÚˆ˜KTR¹à  ¤ä[dö³–Q\>…v™Øvc§Øc1‘”r¶a HM¹LA´ L"*\I)U“‰\›F´èÐ}۱ʶª”³~faiŒ{În*E¾Ázü!¦QZ1;É㯥è@©îe%¦Ä9X””Þ²ïjZ-Ò³ötä÷oÀ—Z -ç_eÚ~ç·6ŸÏLÌë_Z˸o©ªjèªäÇ›ÁkÝoC@<2×vÌü¼üšŒj´ Úº¬΂Œ]k²ÖÝõýU;¯FVdkQŠ+Ó|ùÈêsDÜh_Ta¹Èƒ’ëj•Ík¨‡¡Ü;ZE‘”Y:†/ÛÚZèÀ8‹„t¶Šr¤I ©QɉA$Ï1³¶‡t­¸ÚS@›„ÖŸ¸´ ®¯ ØBÎ|ËÆï/ƒÜnPozÃ5Ç9qfqƈ5Ô´–­¦kÔIFìvv»¾½ïhÜiïuP§(1Ôã1mCMóÂÒ ”ÑNN]]›:¥ee‹4{¼ pè€_ecÚ¾¡ª °ô Ÿ¢z¨Ã¼÷Åyí•1C^ Cu÷ŒcÒ{hè¥Åh#í{3{ÅiJÙˆp¯%>ƒe5ó*º 8šŠ†aWÕ‘Y<7³‚–ø‚2ð÷?æÍ?tÚsxç1«jdV4¦hj §¹ƒºÝ2À˜yt`E„¤ÅqèBt­6OâñQÖ9þ FµŒLdkVúpÛU( "‹&ñ…ö¨y«YÝÎíT†¾Y! Æ]ö£§¹Md‚c9’óëë½Ú9ÖÙ×2Ô²:r¾RÆ”¿tô,ÌfwQ!Å…CÈÝÎï[–êX}õÜÜBìÃB,k>{‹øèEÑvþ¬c!û÷Á÷8ˆáÔÇþÎ0¤W_ð)>Éa1’dÂy#*HCÞtаg H¹^•Ç늊|xÏ  Ž^§fŽm­/¼Ê»‘ì”R‰šÅÈÕjzº&mm[yàGJDô”Lq2¡äõÜéÇïmFYÄìç$e±6ÃRq½Û°ƒ: RÜÊ 9âL2°¾zo:ìs©c×=´Ý9Y '{“Àcí¹÷ˆFv.=ýÚqÚ›1åºÃm?ݧš&k{Ð&õ,¼` ^¿sFÞM;1•ïXŒÞ‚þzLž Æ:™÷¢ ·uslmä'©íÖä8Ir¾`X°˜…9& HáÐî®…b6H³O­KO¿JK3M85Û1]`êj1‘ñ¤V ú®§ Z‚nב(©®ÞêÊÃn÷m=Ç0”nN\Ð0JO± Žç2nSI•îO+7ôð9Þéû€ †ØØ‹a¬­=ö~ȆótÕð::ò è?Fe£wCoâ¬Å(~J»È9Î lRUuŠæ]uŸâ·ÂñÜÉÀóïEßa #™ô¾LOêk;žrj×ç(`Äî‘ Aš_Xü½~¾:âôh(ã….# 3Lëüg 3¼I¡­IN”`tkÓ ¡á{Ðç‹îvŠ]sÖž+%sPˆ3«QPRu­S†v#ç×±&â@€­ÅDC@%‘Dòù0küÙÀñ^ H¶GÂP] @Xrh³„¾ºŒe£•p`‹¾âXxq°ˆTV¢(Mð2%îi݈–Žy0´·!„w¯uŽýï=Ç]/@àͪ'´(ÛÓ=máj£YËhN÷I%îc³ÛòA¾ê‹‡Œ»7U±V¡×°¶Fã 葸àt"ÐmC÷ êUoaÞÐF5WR„ºïCÆ¼ÛØEö,N®îî€Ä޴䤽5&Æ¥!üPV:1T‰ Ðò>‰ ekkëÀ€½{÷¬ëµéN¥Vø;w]F>¿jö1—!­6Ã¥êØjpñ™Vƒˆ°FÌñ‚ÄhŒ¨Mð÷ …¼å6§]FûïhÌt׎ v6d2•’I]N/Â(mÝ~É6Fcö•n‹v ¸¾¾~ª‚àˆ2¾öQΡ§\MU_Tê Q'”j5¸i ‚Ûjh¶zLÐ1ܬ>çÐ0xv3 *0£RÊ2ªlïª:Â<¶½–Á¥µAÂ>H{¾éï¥vPz€rJØâ¢Æž‡-•îJ¾Mæwp‰YÁ$¦K“«(F£G€o±õÈ~X˜é¬'éĸo²¿®ì¼ èXzйÑÛâ/ãAµS]†FÎݨ$µ]_N:Õû_&ÒÉõ„è W!’zÇãö@Ç nËæææù[‹­½$|ó›ßÔcŽ9æ_ü”dÿ‡6jãÇp»ž™ÿ£Séc‹DƒÛ¤M~õ ?Þ$•AˆÚ×°4A÷ﺾd,¯L«–MÒ>ƒg]ÄK¢4£©çÜ–êå¸# ùÎà²ß{èp—N}ÙÐ|ƒGísXàè§ÛVÖUÛÄz\¯‹ïÆÄg²ºÚ:öù[°‘u5CØÆ”¦1åbIb] _1´nSË8¦s¿xÃ>“¬¬Ic™6<Ì’âÀdß6®€´x³ -ï¨~,Ð\rsNg©„¬¬®ýìOžyÆmûn×èì³ÏÆÎ;¿nù‡9°V«eÇ~ N5:ªô¸~r'\1 ilÖé@™Š·l@]Oš]ÇÛ@·.zÑ5‡`b²ðÓ‹‘e{DâƒK:‹rO™™JN¬­:Q›‡]Í-^éësQ„Ýäe­}p]°Ó‘Ó[Æ…5Ó“yய"FY†VŸ@Ç?ÀD0¬ßFb£FOî2w)Æn?dÃ}FváÛ•ežìÄÖL’ñ0)´pAöäK&ö1gÁÀ¤ù~¬šT+þ`g”|³¥…j±/åPˆ#6¾A¿þË¿~º6÷næÇ¥B§)¦Õ<â"Ù¦FKm4Ü8¸aÂqG›ºM²x)©ôüùØ¢ñº~ hÌO2k1èhbUo„¿0&W í¾eÿ$L&Jvÿ£­ +7Àï0¯P|× °5³ã¯J .Cu®·sxÅo½â€­M€ù|®IÕ¡€xâtÕÈPbŸÚKq`”¼qâk ³)¤ÞUØâøÝ~†€'Á;ùúج“¼éˆé݂Р%M«¾íðí¨„TäPuÚ zŸzIîØ!ÛΨWŒ‰~žhSEÅxAG6:zmÏ—hò[Ž<"Cpð×@£O T·írxñ¦JôÃHe[ÿÈÀÖëé×Ò‡6.öD˶ÇHžcÁÊEÓ»@àïÅ{:#ú644!¼ k¶*›[Hz®©q^%AL´ß#ÿöë‹ÅÖ­$%ûñJv˜oYHsuä·ßf¼1/äJ ]Ö§z!¥ ”Ü®\èA"oˬNf:rô)°ÿÒóN±€B‹rãBci¯º!t€dš@ p»»þh™×©2œ4KmT]…ªbQf)4¡NÌg/:ð ½1 ¡O,ÚëpŠ™J¯ÜþSúY“ÄØJ®œÀÈÚ‹•Qç O´÷3t“}I€±‘‰°sK"£cR‡Y JK§ESc}JÇcÓ,´)`Þ¬‰ê àK~Ä^g‘nl: ¢³Dò7¶¶¶¾~@ÀsŸûÃ[³Ùðæ‚ÂÖ­ÒX]ÊèGöã¦êã°Øý¼ÁÈÄÕ¥ÚùÊ{ßxNÔËÊ~ ™S°ÛºÑ„#âH]аàºÈ ÎŒUá]h¤®†…ëÄ7®^÷B}uxU¹lèšÏ£{/ø1mÚáÚ”=+o›!.¤¶ž9³BQz ÌlR:=?ö`ÊÏRd߈ä Âá5Ú]k—Š7ï?|„¡„“)ªÝWʺ‰;‰y?¨yÊVôãÁk6Q†{š æµ`ªU‰·nµ / 8ªŽE ’H³ùüܳÎ:ë68÷œsL /xr.R£¼‚‘)å@“¬>Æ; q5ƒ¨™@cdU¬Á+¤¥Y•‰*Ne#ɉK}RZ¢ïçø“ª96–ÙÄHÓÎ7#ÚÐIðåæ–ÀT´©¶"SäÝ6õŒ¼NúÔs²FåÄ,»Èÿ¯>±˜wÀéyˆä«#~4N¿?#$!˜]ø€¯è]7¦[‘R C¶àÔéÀÊž ?×6lV“ •™³!::9«sŠÆE$e©pűì–J‘0^oÒ‚´ì ^û$ÙkÐóËŠ8 U#žTÛª’X˜ô­½pÆ™g¸@Rü÷!ùÈW<µ›Fl˜'9$G|wc&ã9»P¡,ôH­A@ ÂÚ¸·Žëo^ë©!úÍ|D¢ÚÐM/jî;ÑìC$¶Àª‹µ4Ú FP³gµPRàe÷Ï÷gk-[ay”qÊÓºâwŽðâÔGï5#Çv”Ô<úÛ&«uñå]?ÎÏó ÑÔN§–.ÎÚ”ÍÔÕwZ R—ujÀ @Ò¢ùo8;{º~êµÍ}Ýí½k”*’H&^Ó.v ùX+ÎÇÑ t™²—Yý+´Öý &G…Ï@šPHÍ:ÜAó¹ý»wï’”VW×Íø«ž¸‰~j­"ƒ›,«^OIŠç»K·¤JÍ(Ià›øRf)¨ha.ëâÍ©XQ&k#y¢„”š€#6ZpS½ª#‡ØJÒ)AÀ³ =.á…ìííçפGSL'<ìm_lšq8©¦ÛÛÌHlâKc®ç¿ÃQ€ÆýG?(dœu5i¯6=™5ol½êò£¡Îg8OŒÚ~=ÑÄt…@Œ‚3â£n§f(£)~Ý}Ž2­ PLæŒ$Yãÿ^x›&éu̢̩Õ6M ¨$Û|e t÷ž½i±X¤;öûÁ·Üò­¯¦4û—U…¬Ñ„Á@Áüë ùÞt%×€(k†Œ¥~&‹#ŠÆz¬êƵbaÖÓ¶–a˜$¨®> ©M6Öüúªq¾€WPÐòÙ&ÓºÇj£‹A%U†zW\mÄ‚RÏ…G h²P¥¶÷Ö˜RÙêyeå",\¯ì@S‡Æ'»fª¡ŵߨí¸Þk¯Ôö–¸ÛßµÚy™ŸƒºÁ¹ž­n9P‹æá?A-öY…-~ñ›†ÓÍ03UVãM¨ÕýΩNž^ü¡Z:K¾L…Ëhv½ ƒÕŒú—Ï—°(^˜Å°Û´üHMô3ÐL³kàUŠé$Ô’aÊ ŸùÚ¶oÙAªF.Š˜fóÙóo¼éÆÏÞ±¾Ò8Îûà#ù¹²ó³ÔU» f)¥º{×¹åI¢bÊêriN=æ™—¬¿.‰XH6]ÊNÝl°›ÙGÝùÐD(=U7ŸnûfZÊ/ml“b7ú©+ez ?¤¦œßDùã¯ƒŠ zjˆq[ÀÛUI/Mž¦êNáì—ƒÒ>«øVl°k3ugÙñËî$”ØA)u¶ ‰jç£4­ú|AM ³ÎÖ¥–†ÆˆSÛ“U&#ƒÍ\¥+áýÙu@§b´Ò³Êyšl] ¤K+ËŒ¥ÊHeµ;F³Ûï¿‘èg2––¸°\gúU˜mø¾ÿùÏ}þe¥([É©üB%E*}7ö˲ÏRª¦(…Í©7׎Ú옊ш÷@SsO-éQ%[Ô¹õRM2MÞQ3ö«Ëˆå†D·ZÊnNz°O¼vqBàáéÁe’k"¢\˜cÃL˜kuü*`Hý«ORÙ™8‘º“â•]P†K¥Å†kDk®~{¨5tÝ1ÝB xA:ZíáêïU« š7 $œT|ýÌQªŽ‡(%Qd](F™]ŇbBô­0³Å±MVJ[ø$ÒTs±¯†KHyœoÛÒAÊéi¹'²×¥} –m ÎsÈ¥¯ y/AJ,ÒšáŽ2KîP¸e×­[Ã0l®¯¯Ï½Æ†N”Ì!´°®ºaóFrsè{M ÙAQLE‘H¥( ÝüÁ$å ©zVƒŠàjÌÖŽ z†º5€ü„#_‹kEoKãÛm£ÛÇh£¦r-m¦À„uãL]TG”×É!Ÿ=¹˜ÓéùíJbâ¶^ hÁÚ±'3ϬCK°™bd4ëëzeßò'¨p² IDATëy=ÃPš°gÄê«í?)Rï<Üa×i*嘤ìs!DR)Öû<Ž ·ô½¥‡©x«G\¤àTáPó‹*“f^[§Yg#·íÙ­[›››w4ìðö·¿ð¢¾èúÕ•µ§R;»CZ ÝÄö[o<ˆMØt!mUލ«ÙAkk¨ö`½òÐjoµÔlF”°/LÞŽ‘gu¼†] Ô±lÖpeo&Á‘úK„Ó‘Œ¶ãÄ^wGV™ø_à½w“{Ù(–ÚÒð€ñ€ vè>Cº]wztÓž£ø.·Ð¨XY4«®¶Ù²·ùö„þ>áÿßÞ»[zVçÏZû\ºuLbÊãWfʃ1™¸¨ñØ“x˜±3cljnµh©©Õ¨%HRNÊ•šÔLìJÍLaìÄ ©uCR·Ô­«m°™©øl“{ßû®w­çù==Q(7¤Ì SŒãÄ }…Ç M†¤„`ˆüÍ íu6?>wre2ª/ƒ[Õ)íH:¡¤VK,îêN£ŠÁ7#ìö‰W$©ªbÇÎÕ?ðÖ·~n¿ýös[ìÙ³§¬ä*ÝŒ-D BuñiL¼Ð›X½“ºü3—¬•“x1ó#xNZíhìîyNˆ¥X•ïc»æ¼ (ˆAeF€®ãOóÊ1;Bû”°Â‚«Ô²n¶v6ZÏx:·)Ð'ÖR9:ˆuË넃h~QÑ_º€øãÕY÷^ª "êäÆã¿Ÿ¿ŒR÷Ê1$Qd¤ŠAF Š)¹½;hyæ‹`ÛU…jq ªδœ¶Ä eÉã…‡r:êÝÂ:¥èþ¹Ó„s.,öþ°íè¾°{&꧆0.•vk:@µr]±ÿþg©àôÆÆó«««JªäÝÕ¨’^zÛ1ìX1)M9Õq–]mPyÙ¥¡Å‘PUñˆ¬Ó—§ŽPކ’7ó¢ “"Dª3qF/€º³x«Çn  äé¬ ‘1]ŠïT¹G:g1¦'Së‚§—”änî!'Tr¨we¢XE€—_;!’žIÁØÔ%ÊQ3ÒGy4:²ŒÃI½(ª-6«4ÌĈ®Û_EM,½¤Ò"½$¹¦YÕ{Ä‹ N÷X¬¶0F&ôr}zï~. ÖcZà›ð 3IB-·NOi˜Í–Ÿ‰»äi/=öøWwîÜù«««¯mo¤‰*ÏŸ<—ǽßnÓ–wâña~Þ§¢ÏîÆ5Å=#- Xv"PQTå"¤e¶k‡•æ "ív__ ˜¸×ZcÄ ©ÕÐ;dn:@%?aQD ê¼P8Ït®›P’Ç@1­ˆ…¨ ÏX£㟅¢!ÔÐBΕ ãcT•qå1Aúsú:ØzÕuÉøØ“£Þ8vuŒíB6ªîÜW =HbxRe(4ŸÛé¯K‚N‘3"Xòýe@;!°†˜­ŸüH4‰³ìGUT«BWŸÖ¸;—ÞmmnýÑ©'Nýçg²ûò—½ì'ˬ:*ÛÃlRn¼ˆn¢êíÖ‘Özf©ùÞí/6o÷ùlâêv[í;Ò"é[ˆ’_øúg,Å©7èø×ïE‹>FQéèûÌ«ñæ#ª©Pàœ+©ÿbLDg=CŒMN½JϺô…‹Ðý;Œž#Eá`¥»kŠÅ²7/àDFqY˜‡ˆŒpsªÃ9‚/ÊøOâÁ¿—Ö”^2ÚH N;ïC* 3YoSí'D`'ítýL—Î#U%~{*TDÀš|S¬~[`'í8àî>I;AºQp» Y¶¦SžÞ¼ÐÖÃ×~vMøÄ§.¸à‚ûìê ¤Þ8JÂê@زø„Û¬?*;á“v \¡õö”ŸZ]šIìõNGCÝ|ßÅBÔßÐ(…'‘CËŸJ9ê2JêÐÒ¹¦£\9tÖ›&bÊ2ß±¤ùâŠçzp©ž’X. ¶„4×5ê£2Ù•€šï ¡¹Ç9 èmÝZǘj‹öï‡R V+F~¾)ê °Ú-üùygÊNö‰4p^AÞ£žÌ ?n‰SŨÔz\9ÎÈ,H-øúš1QØ ˜ƽþÔdëJý1²ÚfùÈ©õõßÃ3¼ž–nøŽ;î\yå•vþyç}°øíµ¢¼ˆzýw„A”é€Hî C¹…÷¼îZR¡’Å›^ጒ¥bíìvÕWétÿ‰B†Å£¸Ú‰Ê“ {t1ÏÜ_Ä¥ÎÃ'7TÎÐÿÓÅ.B÷ÒK´ŒìŠwîg–$ÏHi«‹OõÓûص×k ‰H1î ÿß½ ©gy·™W¥_ìä B‘áe?¡Ã“9W?ëzKxÓ2`3ê2—³×€¥9Gb‡‰ºB” ²œÂŒ‚v¶v÷ïR¸‰¡Œ¬ð$cÁb1.y,¾ˆïX=ïžÃ‡ý1ÜtóÍÏnðòË/_?òè£/]YYÁÎ;EU9?Þ F„9ýµcJ33ˆY ªK.MâŽpKÎ[—LMïJèhä8hÄ›{”" )Ó.¼@·mÆ2þÑ<¼[싎w¥yâ/K|ŸÒÌoQ2ý(þÚ{íÑ%מòSi<äp÷²»¨Ff§ ˜Kx«wB曇ysKÆFrqTjî¥Ó¡Ë дæ¢Nbj¸ºýÝâ+j†³„¹x¹oRÏÌ™¬Rn£B×£ðH®åŽ]`ÂÚÌm@¦g³§-ûñÒT”±·C67NóæÖÖKýý¿êàÁg }€'N>ø­õ[ À;ÚûkváâØ"®Ø®ÑÙš Áìê0{ï]^kòà| ¤Íb‰º€:$a–pP[d˜£ã›¸®<7Si6ňNi.Å&÷.óx§CG ê„J£q-¬ tqY¯ÉHºDOa€˜¼tÔT ¼5µ^ †9œiòBdÕ±ESxÕìÕéXVª ½Ÿ2â ¦EÙ«Ñw‰h ëPì^ÁWirqhÊbB?bk»öà7c?i Ý–¢£±íC’F O÷Š3ªIsµ¸M´mùLg–º ±ïï¦'vê§Ø”Ýé×y%Dsæežðmëë§îÀ×qñÓýüà-€k_ó0ˆ>3m)$𻽠¢½jdwbžÊ‡ij4û4Œ•ôgC¿é ɧKvõ€Dä„a¤;´ãíw)?r¾ ³´×’·’z(wš;·w%¦ò‘»úì×Þ)oê¶2!¶kˆî*¥:ëô@Úƒ!dt âØRm·_Kæý eÑé‚F’ûñ8äCâ³Ë³¶hß÷PMüuXUà¿7ÿæ²k³p`R—RÏ×ó˜Ñî%6ǧßš´Vvý¤YŠÃ°éM?”0Aú12“~’¥“iW¨6-û˜ÙV/(u*YÀ¢þ¤FÖˆÓvl¡?}ûÛßþe8räÈ3ZèëY=>tìîì\ý9ý„Ý,êC>ò@˜j#šëçK~ž»óæ»®Ñà¥Àw^Gy‘¯h»7÷οE€ÿ±¤|v§³ŸãÃ9Æ87W5žùkœíá‘ÈÙo„î€áW;óbÈCžÌU Ú9麬¥ @©n=¤Ø|Ñ •‚ú¡„‘»`¼©×Žt¢#w_>Ù¢H¡-AÚu5£ø2AŠÛÔ¾_hܤ}Î"`šØÑÊ69n)ÇÉš`[XL*HÅ;¤–2®ŽËÏeÌŸÑ[NoÎÞ¹oߥO<§Ü}ü8ಽ—lðբ̤¹ð јÝvK¾AËI^ g³ípC(µ|ÞƒUt´g!3 *ø³\6ýû`•AaÖè¯:ê(Wýõ t3'ëF3z‘N/ÿùÿ[™ïÇ×òßXÈõoŽ9+¯eñCŸá«TL70õÞ•Ù2ŠûÊÏéÏÇÊjý‚jÕœC`g& ¤' ø†Ûžã#)º*÷8…R‘?Pz îäò.'Õɹ‰)ɘÞ4±íöâÖà¢ÑçI«¼êÑQº7ÛŒ>­¬Ç`‹æ¤‰†TÓ Ë¬`’qŽDL•éaø;öŒ€gÔ¸d÷îìœ|beuu«««¾ZÛ"–Ýûjß­™~A1,÷NZ%°C=ÐERwzþRòQ÷%¥•æv â´-Ãú u„zz%´úyŒy*¬‘ÔÖ_fj¿óà\:ÝOR踻Øõ'´©Ø•ÇÖW£ð´²Ó“æÅ+Mü¬ZìÂ= 3S›Ìõ¦cç`ˆU(WÕu»¾÷‰:ÁOÙÉ;¬9™½œÝv›ù{‹[ÉHÚ*.ÓõOQ «”C¸CÝ´rhŸ«XeDnOn@‚Z¯IŒþË1δû¶4‘E ÿ[ƒÒ$à0@ô{Zo [[Slnn®ú{±wïÞg¼Ð¹¨Lxàÿ‹ˆþaƒ(¹~:¤3Ü’Q=Š›)3ü´$ýô G´B…-¥¸vã»r¿H‡QrùÕ“; :lѬŽã;ÄÜÕIr« 4Þ@…1Õ^‘R ñsvBXo|ʈL8N¼¦Ä‚9%mNÁ­ytÑãE"GÑ[Éyù‚8ÃdöEðkUéq4öjúۈљ•4ó(róRAµîžD{éqô{¤p ëŦ] 6¡•p“¶“ÄWôDëšýjA&†0Aeh”;bª”MÂdÂÍvnRyB&qÃëªÀpuY£“øF¤  ø¦µ]»‹gwé\|‘­­-]ZZÂd2!÷Öˆ_Zš‰¯ÐêΜ­S*ùàø š|f³¡ñá3ðFUH‘+eØÁ“ÅÒJ•"‘Ò 4!·’s ‘£@êl§mÖÛnŽ@wr(Òn;iAµsL6õy›Kô1R^ÎŽ©0ZVì>ÑtµC®–” )ç jE‡‹¸ˆz_¡4)mp»¸‹R,E‰™P½èJþ¨0JõA¤Ý(4‘£a«0Ç(™qc0?;(Ô 35­ þ­|oŸA×S@0š‡ˆ! 8•1Æ×ík›$^¹ßLÈžHá\Ò\MkËÚ €<µÜÏg¯à—söìÙóSÌüÀ+9åGª0È£5Ä@5Ñ·¡_Ðóü5u2HÈt0$n€è|Kßð‘ £ªÈ]dæK¨c!ßjÇy ÖA`6Ê ðŒÄúg$Ú=þ3Ø©´Á#Èm$Ü~}†ÿLÒ‡“’5IµÛÑ©@8ýç(ê;{_‚6½ÐÁ[©ÖlG/ Ž_¥ü¨5È4Æ#/@p 7ØÜ›¢†Ù#»a¢-¾’"³¦èT8G;%qŒhÙèP‚>äDªB 2Ø;Îí!LÌt£¡Qb“ẵœJ¥æ)ÒíûÔ?*£jQÁ@ý%Wóq¶µÍÃo–õ|Úq¹)‡8T…T‡¬B¼æa:vÉÞ½‡¾Þ³ÿ9©*'@UÖ#¥Õ¿Ú0ò`¸®6K.™Òá÷¨§8(ù A-€MΪ­:`ßý¸Ìðûʵ䭻‹I4…ªƒ/….¹ÛKÕcB¶mÅ×w¦­gtY}OU $Å~XîQ뾓Àvü11”õ™F¢ŠÎÕ\!å°E’gUÑÊbÐ`ñwqÕÕÒô-š[=Èh„)~ƒ1¡UCÒ»uD÷횦î#n}LgJZ«a¸,Vñy€GäûQPxÙ"½´<ÄŒÆs42WÃäýåy½:”z7„ aħr2szâ\œýÏI÷ß?ࢋvýC*‰Œ Ð4Ä@Gäšé0'–T»§bSD'̵ºÛÆsýȆÒPŽÓz´ÏŸžK™ñ¦§Ý4ãÏ€ACIÌéô ¢]bÍSý¯Ï—ªþyéu "í¨5h™PYÝÐ¥uRgÉi`”Þ\ÜyÉNˆy}À:ŠÌZŠ48T‚.íõw€”s«öé:s£AåèÈ¥HÔ ÉØ;JŒƒ‹H@bt j$ch%µÏ} LÚþØò+jê0„ý»{ôšmVUaJ ÁPÂví §,Ú»ôa?ûŸ°çîë½çð:vìî–W–ßÄÄJ”|ÔÎ_æó|H½Î¼4çt<²BOšñ” Vnõ쀮 ?žÙÓHO) Ò±›Ž¨ÊFJ9škÞ½@%ˆäjPÕEŸZ— à©d‹juâ,„àòûüyz .ÆEKÝak¯`„ÃhJRH ^Й£æ íH –äâ±÷?'0 KiÜŠ2p€2·#!•Ôx¡yF_ÅÓ µõyÄ¥ÑZ^sHŒY­sǹZª} ©Ú>ÍðÞ³BB6oÝYn|ùélö›=qòzÛ9{f—Îåðè£üî·¼üå?´²¼r¡Z»»jg¹ðh/ !*>)ZxÓÖ¨%_EÅÞD*°®,®F– p•ys]¯§¯_†z³ò¡:ÕŒ‚B²<¯¢õ3ÿtÎY7?$,>WèÂx,êü¹Àé8–LDzáÀ„dV3TMG ÎÑëKnáxq©É¿%]…¬\3cŒ–?³8-´üÜI±Öp Ö>¢º$Ò6FÌ(36ï¯Ø"¬"Úöö¹Ø-+ "´Ú¢RðTlõDš)Öüñ¾úêsùÈžÚu×]8|øðσünÄ¡!³-»ð˜ÔZC´†»Õ¬“Ùö ¹È¬3á‡,ÍÞˆ;J– ÎèYªq]pdF¡¥}Èç8µ¸VTfýèYv|œ¡bëp]Ð9ÿÿÙ($B%4¬»’^{Í0VŸ¼ÔÏ¿mØÖÙ—RYŒDŸÎ=F£{–Íç¶L:^ Ÿ”Z ·õqá Ë4Þ¦qâÔÉëþÚ_ûÎ}ü㿃|ðœ-ç¬pÓõ7áªÃW5À‡>ôñÕ«ÿÓ$å?Îã‹Yïè[{‰T> 꺥öó¯Hã‰ÊÙ=3âë†ößÎo\¤„9šN~€YïÎi†œL¬T²FÑ@Oûãx:6áj|)çq¯´tˆ™¥~¡Ô,È$ÐÛ4{sG¤ôàÚéÎøEÕY)c=ãÜ‚Ž?h@µÄ§ÅÀ­ÑdÖ9h‰{6RèÊ?h©òc_D|: s^‚¹û»¥s‘÷³)!3/€‚2ljBÅQ:½±ñÙË/¿üUpã7âСCϯ î°u%ÿ§×ý¾û5óñ;Îû_ˆ°Ót‚P5¼Ð9’î<ñ†æY›|ª£ª€ú&_=`Tz»Uµï.¬Fè鮪”Iêyó–ÀQŒ£7 ÑWµô/…Ôxm¡'ßák3£./ I¾Z¹ù˜Ó9Œ¡#&ÓùņƱö|޺蜱ƒ¡:š i—ûÈaââ.½‡ÌÉ×wóG·¶±ñè(éTÿÜ9›uÑ€Žœçb‹ ëy ó,&*ï¥!ÈÿEJ°jæÓ:yòñŸþ[ë¿ùÔoýÖoéõÕ¡§ãxùœøHø4‹ƒ¹>Ëx—/»xíîwqí:–Fƒm4)P]XÈtVaÉ·$¥Œp`s»~ϵ…:;Ñ¿ÝTÈ”t\›ˆ°­ÿð@¶ènÃÈ·àWÍÞØÇMŠf¢çw“CFëÆânÐÚð¤1¯Ì\²!Ç&—+T7“Ckk»>4~¾ž— üöoÿ[¼îuß8qâÞ/€ô•­§Â n¦àÐåûƒL8ó‰š,.÷qÄÂË…¨9—ÈÊÙÔòes!µzŠóx@ÎüQü¸Lô£{v힭生•‡ÿÄ ¬íÙ#=öÈïͦ³Ç¼ÌfKjôœ¾Ì^ïÏç:ž7ëHœÚ©ú0§ºÃ‚7õùÒA(ç c5Ça—ÖÃiÞü†^mÌíªãc±âOÒ'ÑÉ`çÖŢѤ‘{D Iº @qª$…¨Ž¨Œ1EÐGv/¨8tÁS1NÒù׎Š Œ'úúCç–Ç&2‘c‰„ׂжû¬Åsû"GÏh! ê =å^Ü%ý™‹ ±Ž~•RNN]B4#튲m¬.‹b:=±±¾þ;{víNÜ{âÙzþÏ­ȯµµµ¶ðΆM½aPùMš(PU…H¢ˆZ€¸ ÑPñÓcF×Y-u]».~=rVX£¦=–æ@úÅñæ~zÇAY¿hŽÇÓðryô¯±TuYª£ö«Ïü""Ïmî¿E¨T^ïÜ9×´ï⋆sÇN³¡ Ž$Þn“.cqÜsˆïç3wF$)³A3¡lÔžV æûI”Ï^VC~oÄ¿©•”D°ÞmÙ%JS7JÇf×äFÄ;j<¾BLºJ#•Ô}]ª"ÂëgŠ'`íâ5¼ *âmWÖÇO>ö…Óë§¾Ê-İ©Ym ×¾¾ëvB äwM«.(±J` ÛN«øEe®¼íÕHe×ÔÞC€¹@P«D%ƒN÷©Md“‰w^¨(†Êù“Ÿ¤a·T(†æ)$vD›ƒ¯²1èFiAÝ÷MAF‡QäÖXŒTOicÁPWñЊ݃ºR)hJñYQó æ”c@Ì6+ÊÁîs'™Þž™ÁñmSº­4Ò ¾ž$Ð7ŽkŸ$8êzJ®À$Wü‘{ ’þ ²æ¡w‘ÖxLÑ¿~h}cã‘“'O~þŠ·î—;ï¼Ïæõ¬-—]vàÏÿüK\pÁùß àKäÏ»Õy~Ž” B§%£8èR(ÎíÍp!]Ù!š:º1çì&½ð½‹_PAhÿ +ƒIGûÁËoXlºøjáÇ¡ø3?uØkþu‹gÉ‹öÈ0Í >=‹"Éa¥mÑ“0ñ`N4UdÀu¡”~‡+øHM²äñi­†Ä—…ÍÚ’bo.S†¤ÑǾ¦VÛU¸¤-”Óô¬†§È®Žé?¼ pP³ïÑ´9úEÝÿ„ÝJüLÌÔ¤œN5RR˜ÝÈæ„!´ÿçáç]ð½ë_€}ûö=« =›_üæ›oÂÁƒMt÷ñÿ5>à §ÀäiˆLFö7K)h< 1;ÿ]ï=%ÆÔ÷æ½CDsc² †qÇ>N¤#U™—j…¾£ ˜]O°ÎÏ ô?fd»ža ¾§òᕱœfOsÅ7:Ž”Ikbsö­^ŠêÙˆ‡P“䔤ÒÍŠX®‘)Èy]è«ýNݼ:rl|£Ø=ÜlÏŽä\=ôCÖÞ˜ák𽙍¹&Ù¤¼Å†®å`æi¾~m¶à2äÚï±À\Eñœ4ÀœÕ8Æ,¤ÀŒTå¿}õ«¿ïß¿æ5㜋~žóþõ¿þ(~è‡~wÜqÇßXZšü?;v¬þW"~KPd°Wö^FŒ—·ßoÖÒñàŠê5 5c²k›ÌZæ82¥JÃMã¡wÕŠÖÐ:ËÆ: ±„Ù…J¾Ð# ìþ IDAT•zBbŸú'sf Õ‘xèÌÒã´:GA“džèwäÂêgá,‚ïÏK/çªÍDY€3¡)œ× óÖè05?¾¿lß™31:ôöÖD‹ãÃÄ>ƒ¿Œ ï*} òÀº9É?¿ ”åŒ{­=¼¢”ŒaR“þÚwqŨ&®™Bj¸7âpúÑ{¾6¡ÑÖÖæg³Ù¨ê§_ñŠoÇßû{ÿó³ýx>û Ü~ûíØ¿?>òÐ/¿|}së÷@øÎB× ¤Ž©—7¨Y1æDCþ@ß÷ˆ Ñã!Õ‘º¿'¦k »GUk—Ûü8q$JÑ<€RɃ£êá)à9UÜ(Þla€ˆiÞUóü«å|çˆo×%tg|g,hZ`«gNDèz*ý÷-òa¢£<[åD݇Ÿˆ²tŠÚ¢!ˆU£ËØL`’.JE åØÞx,, #úrhprï¿îlÁrŽ?I5ug<;ex, y– %Y¸nZöˆŒSÕFŸ_^^zÝ›Þôæ/à9¼ø¹ø&û÷ï¼þ?þµ­aºWtÀÄ:€ÂB”ÔĬ–ÅRmʈ)YòÔ™ª1÷{SŠ=ÔÁ#jšN@;Pš2ÿ}UiþAôó¡± Çy}ªÚšyš¦!ðhqs¼Xs´øø2W¾ëcˆS¸[Ð’º Íp‘ª©×0b8¯j êÝ‚(Á%æjdòܾxÏ3´¤b¹ƒtk¬}5Æ`‹…ójÍ™ú^¶s4͈ýŒ/6ß·ž7€8­‡£<Å¢ÌÓžSRJõí8ào¦„©GAS ŠŒDWTK1m°–X`)¢À˜ÍäÀç>÷•/ÀC=ðœ-KÏåjsÛ?ˆÙtº ]úøduéû¼T—uZ7U‹ ¨Ýü Æì%¹;F¥´+6ãtŽ®áömîÎC‹½ý /Ñ"'îwØrDÍ_ÊÁ½+’‡ N‘JêÛÙÐêèò2nKŸT¬ {]ç¯Æ}QG£G²¶jBغG)¿ñ8˜cFžæ‰ÆJ kÝ9ë´ÍÖ<ÿ’©Ùkó}¶ÀϘÇSÁ†k4‰}û׌y÷àZJP)u‚ JÀG¨$¥T‚œ´©N¸– §ä*É0ûäl6=õÒ—-}ãßüœ=“ô\}#?ÀGzèÛÖ·¶P¢ï õÉÏ`õ8KvÎ’’ñ^KöÊýïz¨Ç]p££#AÏfªoØèœ_Ž˜ âàJ)8†w”Ågþtß›„H³ñ§‹h?ªÐeû™$Ã}«BS¤R_RR[gì5™y2ÖøsNX&ä™(ø-ûý`I8^—9ÐÐøƒ?ä‘Ëîh€Û¯—`ÇEH±~ræ±l" ï­.X/: Ö‘åÄ)!Ù²ÈtNÈ‚ Ù ©ÁèwÀžˆ2¬soô¼-Eq7nÜ»0¤æЧãŒbǵÂI {¯ƒa<)0E2‚³üÛñŒº0ÒW:îÞ«¦åµ¨©ò»ÅEà$™xÁ¤‚IÔðæ\dáÚfÅ$®ìv‚€ü¬MJ¡èÿ8Î{¸®rÐqÑ\hË”‡T¤Œ¢ÌúK âf˜s?vÂS‡û5^  a:ÅÆ©Ó?wÏÍ¿ö9øÕ_}ð9}øŸÓÞðæVÚüÂû~‘Nomþùt6{H5ë~R"A̳U6Ò´J,©§-¤æ ÞÈÚi¼"PêCãaë•/sÔš‘–5wÅJ¸±øl-gl]M¯ÑTéHF"H|yù7RþÝb™p•©Ué°Îøª·¿¸ž~n±[´À F²=QÈŸÑ„_(¹qǾ’GŸh–iyØ:r‹ˆ#&N½_â•›œwÑzdŒ[ "ç/<ƒ%×ÎðQk9 Û± ‘áåôï!¦ÐvþÁLä£[[ò=?ðj€ýÑ7á¹¾è¹þ†u¶yß½÷ýõaþ%3¿13–GÆ·yƒÉš9,)² j(ãÃÞDØý¸4¦ðÄH'w’EïVwÐR¤ÓÓ3uØÓ·OýéèIìÀ^S*õ ¥¹g ’ÓÜq!¥ÖJ#-€.¶8ÔÑùQ½Œ9áÖÙ‡,i›|(ÄÝætÞIÎå#<Ï{1Ò¦„±êš^phôUb$G˜g:ÒX=Úw„ˆó¸ÔO³éÞÖ r ŠŠè¯Ñ;/^»ø3päÈÍxÛÛ¾ø¸ÿ¾ûqÑ®‹'NœøNU½D—ˆ[k1µ2MKÓ¥TcZèBãÑTП>$`š$©· Žz ã71€ªî|ªïðU¸bH£S¨BpQ+Z6ºx¡Ñ˜O§¢@ë¼±ª.Çóޱ)«Ó9i¿h™¸ ¦ËãG˜†#Ù«u‡­•Åßoe| t¡Q¦hèöž‡ü¡âûqAV6"Yü<˜#€¦ª9GR ¬”ÊÄ4åØº®jÕBôw‰èš‹×Ö>÷Ýw/víºøñ(>·G¿.Úuî»ï>À}úÓ²¾¾þà0›Á{Ã1à÷·/”Y¦ ³YyÍ…ÆÛu)ãë<×ÓwÊ‘©3-p"Â¥Ëþµ$ˆðj>üh3qTäß¹äÖVpm³ª)¸ÉŬªóÉ’†)Ö|r§ä1£âÀLdošƒ$ýHé­ļO]b³ÑÊ"ð §’÷¨3ibí=ù²ûg3¬oœþÈŸ~îÏ> ÷~þç| X¯]»vNomÉt6ûÕååå׊Èf¦ ÁÐ5ºÆc•Ð¥ž®[Ô^•²Ê»‘@: Ö,®µº¥‰ìHä×5¸â­æÒjçKò'c|ö‰Ågièðç º>^]RH”›³Æ \©Œ8G?Ûã.«Ô¦€N4gí”>¥R¾£„fP\‰Ù'4úDÍì" Tän«¹Cdi¾.8 È §l˜(±]H¥+vµÊ¬4o Ä%w¶›—mP8 ¹gkºuâ/Oýå.þ>üßÐn¸á\}õÕ àÓGû§¦ZÝOeG/ú/¹ ärÝxO ì3•`Þ•-wTQñi„—vÏ?j@g·d~a}±£tâùB¿¤ Pm{h/<(Ï#-P×”_T~þèÇ’3€Æ @v6ÞÚ8éŽ_õkú‚RDi{¶„Ù5RT1#šVå±hî²Êv~§Þ‰ÈÉÈ0X«Ðç!œH`«ÍCÓé^hQ&÷‰B5ƾ¾ã‰ÝǤ” -¦?ÛÁÚt‚ˆ~檃? ×ßp=_}øº¾Á×Ñ£Gq饗Žßsâ;x‚Ð唢Óêg+üèLŸ ÿ ¬:wå<]3”Ç™Ž«ýƒ½=ÔÛ½»mŸÎüÎŽ6`"TÄlÖ:š{Çî» ÛwÖ†‚Ιz:‘SUD4w©j¤Í½µ˜„‚©‡ÂÀCVCLUjß’lW«  šPL@b,ØpÒ„§º‚‘) 4$â™ö{*ž,ƒH|¨aÌI­G³¤‰Ty6Er un>í{'åž ù°ŸZKô»šxÂ6{EäíÞ½öÇ÷ý7õ÷Üs?öìiMÁ{ï;þ þg¤üˆìP‡Û!_9ÕcÚ=ßZš5ÅqU#+IãØ¤s7ŠÃ0:Ùõt®½YiÝxfüu¾Õ%¾{ôD/\²‹^›TTŽÚ½îê{Wi¼µ°L7±´ü»–jìòâ¬Pr“ÈÎ Usö5¨&ƒ%÷ îÓ¾Ó@”¥¼»$u´—ø=ÅÐBšÅ—­ÜL´)Àý¢ø™Ýkÿ§v¿ß={.y>J)ÛRSú˜°¬˜Ó]èUþ–2׿ßw¥çÝ‚gøtÜlÈŽu]zAãE!¦Ró'šõµ>èRÎÁzÔ—ºa`”¡w“=W<¡»¥#k;ƒ±‰w¤½ûBŠI|†&ª[/'=Ö:´ub¢ñˆ¨%N‹¸·ÔÎúÔU9TÓ™׾ã¢:EYüpèvøŒÌ—Ð±zakºõùaÞºï²Ë~NÜû Ö.~Óóå±ûÆL]oºx ÷Üwà/¾üŸY__ÿíét:kðw{þ©È{Ú4Ö2ç$Qx‡Ú×y­Ãý¸1bî-&< GÓ©s³y"A•ï¦7¿ =òÚí°B™5F(ш֪)½¦ ø‡ €Z2­Ec™â¬O%6cL} 5µéZI³ž.¼zD`eí¬3ZH&u £f—E íþ–oóá“E‹1úïI㺰ǥ5úç[u#ÐNÑV¡„bÐÍDœí¡8¹xC°û™M}¨R+h.Ó°«W7nEUbÂl6“Ó§?ö•¯|åÿ€{Žßó¼zøŸWÀøºî׿üü v¾weuõ²¥¥å‰×U€*3St~A%û¥Ð_UçqÜb¡¼ÑÔ¨q~½¢ˆ®s˜T|\ÇÙ+‘ÎÙhµÉ vLqsI„Y2u#¾‰ÿï¾_°C6`•¢à‹ÅA´…#o_S¨2÷óOá…H­º»î4`šå¡ ‹°¹(›}Lf¯¨\ÌYû1Zsô Pž„¼–„ …U%ggÑ„°˜ïãë™r Ó¯ˆ³Ènžrœð÷BM‰CQ —œVôA©5MÎÁ5¨½Jô—±%T'ªÓéÓÓÓ{OmœzÇá«åùúœñóí½ÿýï\síá¯:uònMïf³¡I…¹å¯ÄÜžãêá^Ç‚âHý’àZße=£%ž‚Ëh%cÌþ}§´2t¢VÃÚþ#s¤5k{Ù)/ ¡k•6<"…gÀLž\å½ûèXÒ¨RîT*¬„vr™|ø 9Ó¦Tèii³6¨h“hCþ5Ê3Ž<Œ¾ÇbΑ¹w,]ìÏ&®ë‘Ü\=8tüÄ-°Ó§2ì½r˜KaCÆH.–ÈØõƒXTbºœA·'‹}ÆMK@½1Uÿ–W¨³é€éæô“'O^ë¿ß×Ï·ëyYÜ|ÓÍ8xU“EÞtÓ-îܹzÝòòò%<™pKLŒöj”á¾òŽlðÝ)džÙôÓØÄÝv«UY }8yý7˜˜ÁÌã– †“2 O?CÂ)\pâ&qŽB¬oÁ@s¦HR£l‘Ù ËZt¨Bx™Ê¼2èBÝ9Âe©•cOV¢eŒ—䛴ʺøÆ Îæ›;IÌœpÖN,ÃW æAÑao³úÆÊw¿xÅ10(& MÚnnǬ"åö©B õ×&&Р‡#NQMmRë+SLE|J@Ôrüœ(–a˜a:>´uzëÊ+^ñÜxó8tðÐöðt¯Ûn»ìÇí·ß~þÒÒÒKKK»'“ [xšu•ØÏ¯”޵š¹îX­ Éº"Ó+*„WJ¿x› i(ÒüØ%r¤¹ØW¢¶óë„ÉV«¼ÕÚº×É*`€û^–h#¹0ùîå½1oÜQý™*3¡0ܺ÷ZJeÍ‘YÛ¶Bºbü=Mo¼šÓM,ìÒÿœFǦ57æ&¢ÖLe;Bˆ-•©º«€µö!xˆ-œBÆPÛóí¸ƒ¡H@râSÔÓAùhGçAú‰`¸eœŠ1]k`­æ‘‰˜µFõiSQ̆Ù/om o=pàòGoûàm8ðÖÏçGìù½ /~Ùe—áÖ[o=ouuõæ¥å¥µÉd¢†TRã*Q­Fóö?£T¯EºL4äÚ©˜H!egL,¹ï¸mÌ4±2PØ:㑳`õ޵í~F!©ŒCXù›ª2.Ê{¯Lbwµf™’tU’´œ¿ë< ¢­©5IQø‡E¨£Ñ*ɳF›Ù¦;gûû+`Åy ÎÊ S4iZ;!ÐDìHN©ÔzI$G¸±sKŒê‚ÁÔü]#©àÔRŒ9²Ë= LiïU›HPuj+…RUr nÞ¾aÚþétúÖ<ú¡݉Ë.Û÷|¼žÿ @]nüàç¿rÞM­XbRC ´4ÕÎãâEMµùS1©(z¾ •ÀFdך˸PÈ&Ýžœ³¤ ÙÄfæF³ÕV¶‡;ùpL3LÜ"hçÛ!˜u…|¢ ²æžYíü¦ÊÙ8ÏÌU;¿ìj–t¼E³à …œE]˜a œ¼À¯'`[@m2oa5Ö«ý\­AÉT&$Ñ¡Eä8¶7ºQ)ø?i¿ÈEI¯µz+âª-%œÕ©"× …<`˜Í0›N:½)W\yååúýúB¸^ ÜvÇm8pù¹þæów^°rÃÊòÊ%ËKË“h7·sX K'oö|p ¹L·7Ð=ûOLIFå6ÊÝ®z\yÇÉŠ!´í¥µ×!E¥ÈÅDéÆ{PeÐÅÆŒ©.‡#ÓÕz½ò-k_-ä|ýÜÝè Æ™”¬>q˶ŠC®ÑIoSá˜e³÷,œñoÑ$6—Q¨;ï¥Ê†(z.#&ávÎöÊÇ~Ö,%Í\«Ÿ£ààˆÑÁL³ŽqˆT€q§ûÐg~Ï1›Ít:>°¹µuÕÁ+¯|äöÛïÄþýû^(Õóo p¦ëÀåpÛ­·ãm‡žzìÑÇ®9½yú®­­Í¡z.I)7­4hޏl¹[ø*ϵ…m]d’‘õ§³”¾†8±íÚ¬N°1o:` ,X¾½uìCoﺂ’"ɽݤ¹™iˆ~Æyõõ%ùÑB‹>¹ªÙƒ/Hsô9VYP1ÎØ×)Ó./Ô4Ya1q‰®bŠ\.ÁÞ–~€S.yÉà#õj#!£-… ÑGpêÒßê(ÿˆ(ÚBfT¥éÖT7NoÜûÄ©'®>xå•ÜvÛm/¨‡ÿUøå@‘_ü¥ùÒóVw¾ï‚óÏÿÁիߦƒî 2Ъvm¯N%­Ï¿}¶.ŽŒV+‰}¤•·‹ÃøðžÉŠ%i˜ ßò"ÎΫêÓ„íÇJ0&°æ×ø){ìÕ>Ъ–¢TCRi`ªŒô‡” Žça„µ 9—°U–=·ˆ¿È<€P0–j™ E<Óª­Þcà'¦(שé$Hö®R™RÁõcC)}êŽJy¤§Þ"í„!› gs’|„Ñ&  Óæææé¿X?µþ±Ó[?ñö·_û¼@/~¡½`§ ½óÿ౯~õ/ß=míWÅQôÖJÙ~™ùÆ’Îö¹ða Ͳ¶5žrï‡>J1±•þ¥á¨¨ª‘¸áªZýuQ_8O>HòMŽ\\Ã9Û¦.© »ª¶Ÿò¡uaOÕæU“?ü¤q>®£Pê¾OãåGx*W¶8¥u×sGu4˜ü‰ÝÒ !ãøù”@$Œüµ¯üøo8rä¹Ð ñEÿüÏ¿?ù“?¿?qüø+ ô/¼¥IÕÌÓËUEO1Š‹3½ŠÂ«Ë£Œ‚”ŠÑÏÏýÞ¨³5±±Þ¥)Ԅ̓ &X© Ão0I*0*Þ%èPzå­á*?»YudYöóu=¬UÑmɦ’'—>d¢Õȱ¨å}¬)Aé}lóûLË¡$ÛÒg°?ãr(÷Œ=7FKiñóSX“éf`‹ãÔÜ»§ûGáòqKú½¤úS»ÖÖþ“ÿ¼¿ø‹ïÃ;ßùÛ Às}Ý}ü8.Ù½Û¿.ª?KÄ—ó¤µÂ5#xj'\öí¢‰S˜jàd94D–€€$'ö‹ |O—à×5r —ÝOz ¢ÅÛ%ʇÊM¯Þ°uÌgÏ‘[_‰KÄVÎö]^@"…„[cÑÑŽ0T„=@Ç. âÓwU^{èLjíòºª†œÁ¶;·Ÿì×­¤çhnÚÈ1ª‘JG,gó'0¬!Hdk>úªªr+RIeå –F±Àîn½¡“%úÇ».Úýà¾{îÁ®={^ÈÐ {€ï½oº¸QU޽û;D†ÿ}2¡·.--™¸#4Ÿ‘ßL-lÝhJŠk)¢!V@MŒ“•Œ%ßd‘‘Z3‘m‘àäQ•€»‡vÖ%B$TžÔàÌùÁUb]}|:ÞÑG9ö…¨ä¯s:jŸ›yË?–h7w/Š„Ñð‰mäx´Q9 R‰³9—¦q9ÖØ›ÙßÍ›ŒXhdÉÔGÍMœ?7‡4[ÜqÅt6ƒÈpÏ„ùgöî½ô³pÿà¢7¿ù…þø¼ð8~â8v¯µJà†#G^µº¼|éyçŸÿÓÉä@Ë¢h )kæp|“x£Ô'ðe)› ‰(ñ^%øH˜M”Ø VÜŠ0£Ž¼c3v+i¥ÛÇ6' ÝÍ=á¹ËQ™giR”¿Qân_õ¯$ñVÊEˆkÕɼ¢Žgâ¢vÎõXÒxÛ¤7ëx|¹:—«çâ&¡r‘f7FY¬jEâdi—s µn.™Üšê6 TôZ¤"ÃïZ?õ‘­Ó›'ÞvõÕŸ€ûï?Ž‹.Úýbxt^xMÀE×îµÝ¸óè1À¿ûÄïöÏ>ÿ…AD׃< â®V³µ„¥žÉ©ø3]ý£èˆ]Ø«‚"‹%ÁÜ0\›Jã,ƒ¾çBådÏ>+eÄt²x£Ã¬T*säÚ¨S©Ã›R±¿RµL»¼ZµKNcL;bTªñ&š‘¸á M§çy_#†a NL9—ГX𺸴eÃQ;›¶Æ aL0²ó¾ˆü:Ñäšÿü…/þìÿÑý!Üu×]/š‡ÿESøõþ÷¿oûÛ³Gp÷=ÿåÖÖô½+Ë“‹––—ÛýØL&ÔoûUæ‰òøI÷F ÐQþÈêE?x>fÏhe½w™«Î4”¤14`ø™!ºÖFÔR”›«Åö0Fä––˜õÐtb´RµD:9x/U[:®Ö¸mö‡2-½™P¢ÚBïo%·²uùµT8#;·?•bÁÑÈÓ—÷X@`i\~‰‘²)Ové"(¥H¨‰°””i:›b6›~teeõïïÙ³û3qýÒ/áíïxÇ‹é‘yq-~Ýwß}A¾á†#¯=oÇê«vžþ»ˆèo;¯…!ä47„ñ…zÄ_ìhy‡*­,-ó®á³£.îñ<¹CÎm5r\Ê“àËu´ÛÝDÑ+©ÆqûÁ:on–äø‘>w/Í‹æ> õÞæ÷l_“F‹˜{àR}•¨6æzè(~þ*07OµÃÂŒ¾ê×2<ôï«ÔÜ|dé½rÃ(y½âÎ`Ñâ&n0ÞT€Ã¡úÉõÓ?·~zýO®>tèßÀ}÷>„]¿ñÅø¨¼8Žãk×®]¸ûî〇þê'o½îÇvìܱ÷ôÆÆ¿™ÉŒÐ¢™M/ÓêrâTÑEü–Psƒ@ã”Ïé‹Bóð‚µîÐM0¤àäØ,ÛûÔv‹8ÄS^Íê­¬f¹Íð‰¿"Z›z­ÜeMè¨% ÷G“<šS/LB!„òHTS)ºí Âæ¥GOF(çÈ9H¨ˆ½Ûö%Ûáˆ#›°¨\¢æS!ÔÇ›_ªM‹dhccã“+;VÖ~ý—óè×N>þûpÏÝw¿hþmà×>ð\{íµñû[o¾å{VÎ[}ÉŽ••K¯V`mŠPc|PíF@F…lª3±²Ö$ÁCDz(Åqó:CPce³ ˆše11ã•“^x…-½”֢ƙ¸€-€ ÐÃú Œ•4ñãNs?&Ï'‹Mœ©æú˜…Wó} SŽ‹®\sàç÷Òg‰ZAʸ-"œ Î)xâ‹]åýÅ@Õ,¼LCMÊç·¶fNŸ>uêÊ+~Âï—ëŽÁ5o{Û‹ùyqV~ùÃÿ+¿ò+€ÍÓ›¸ïÒ}¿}á…çýÐúÆ©ÏÈl ›IIk›þÍQ€lɰ¹¼É«ó®5še¶% ÙóÇÞËÆCgÄ8~ªl 7’<éûJdgûöM¹òD^Q*)a)…Íâš. 7T8E¤DQ­$þº„‡*u&¡[o¢ñˤ‘(ÔX¢Ù,e6=#àÒ x|§O+¬×a•KÙWc“n³k(ÛžÎdpb2Nˆ0È@ëëë_\]]}ÝÿáŸþæææéWï—ûÃÿ¢¯êuó7áà¡«â÷·ÜrËw]xÞ…K˜à×–xéÛRÜÞ>: ‹Ž aóî·ù}ëpp¸Ñ ­ú6v½¹à\÷ÎÚNÛÓ8´Ý¿”Û•öK‘RDYÖºåYjJ÷Lª t¬}«Oßú 1‡'èâ~ܧ Â”@©3ƒÄ¡æ`v@j{ø¡žxÔ˜‰’Z™Q¯¶L-)EéèÐ¥†×B1"›ï'fœ¬ê0EŸ˜0š@3‘‡àGÖOžÜ¸òÊ+?í÷ÅM7Ý>s¸ èIDATˆ«®:ôÍòX¼¸+€zùÃÿÑþªí(úÇ;vîø“Éä{yì‘/ËLhBPrÊP{È-™¬â¦1ÁÞäjŽ4D´PqíAdγ;kAo³O"Ä‹e£ý&µVµ6ÞrLPá%u 'ÖУÁÄÂÙÿ¡EЄ©2•…¢¼>WMç8ø£)"S Dj¾`¡`ÃOM¦¬ e… V ™3QìAgÎ@*Q€ ƒ'hÿMNGgëÛÀŽ9am¥ÓAzôñÇ‘ïû›¯yÍ¿WÕO×]ÿ›éáÿ¦ªÎt½ç=ïÁ+_ùÊÿâ[^þò¿ª"ÿïòòò˘'éicT˜Wu$̈8;û¶*@üœ»•I@•¸j’„|-qÓTÄ2=Ò ?o¨Q6M¿Y‘%ˆ¿•ðKÅÇoÄÝÔpÞžJ«vˆÕ¨>Yçs1e°N™cZN(vsF‹‡`;"ÀŸžÖ)}·Xrá88<¥ù.ÚAA‚÷ÓŠ&¨¨L·¶ž ¢×?òÈ#Ÿ___ÿò»ßýnýð‡?Œ7¼á ß´÷ÿÒ7óÃÝu×ášk®€/]äº/¯®îxÕÒdé»ÝÏ>Œí‰gmÝ|¤³%Ê!±e‹–&¢,ïUBÊ+š€N²© Âîêÿ^%©BàähG§°È.*·Åœ²ozM‹(èór2Þ^«öµwÊ t‡Œ£çÍJmjS%šJzEåˆgšÑkˆL\NVSC²1 ÌùÛÔ~ÜHJ4”’¶$ "  A„”Äp¢DÚ^«“ÌhSf²¡*û¶¶¶~g†'®½öZñÏÿ›ùáß®ìºýŽÛ±ÿòý€»î¸‹&;.Øñ(}  zaöè 4Öœ€ ±¸’‰…U8O|(¤[uµœµ·¬æ¶Ù¦K 1˜†‘†˜L?ò³¦ôÔÙ¾ÏÓØzâ ‘ft:¢(IE–Òo°±¤+ôBë¯Fý5d—Û§[ŸƒÒEGÕᘠÇJjÀhCWÕ¥#»ÂLá gƒ…ÚAiÂÙÌðÜnëSªú8„þÑÆ©ÇîZZ]Ñ·\zÙ·ß~;öïß¿}ão/ýuìè1ì½t/àÄÝÇyí’ÝrïñãW)øÓ·ô%öà©gY7¶°ªmÅ1"är£KáÍDZÁfî²Ê‘c  ˆî@ŠÛ_ó¾£3 XJ^¹‡S>R3 ™‚‚9ÌQA¨“O@´$êªíã”nG¡Þ¿”&úìIT"q¼Næ I™“*åñ£„!2KÂY¨7Åš…pJ€?áý»/^{ïñãwOvï¾d€cÇŽaïÞ½Û7ú7cð©\þð?~k—옒޲¶ûâïR–.Ћêº@Ú3Ebv"R…„ú” "8[œŒ$dc>…Q„š“‘ª±ð,˜Ä$!KÈ©´Ÿ‘a&ìóTˆ;¾jG%ÂÁ7´ÇˆÕVÍ'+fò-Ȥ%êpÉÒÓÔ>p™®KºÖ’¬+vtan°gĄÒ=Â%FÉ,üDD´IDgå÷í^[{M‡_€Ý»/Žo¢°í‡{xJ×nc ?~{×ölàÔÿ¹vñÚ÷«ê/¨Ð¯©bÖÜÐðFéŒ`nâ`é°5´H‹1†2¾ (DA/=ŽÀË ö)Cÿä‹¢¢û"Ú;H¾²[LLv«…¡G¢ù¸P¸(ê²ÿ Ó-d¦RÒ•Dì«j w!Çq¡õüÝ)LÖÐX[kÀþ¬\Ƭø5Q=²ëâ‹¿_qþ{`mï%É'ºÏsûÚ><£ëÄý'°vÑZ÷gw;ú þ@pØQD”ã?)ýŠÆ i È›D$bð¨Ò„ÔÒŒ‡Ùôó+ËË\0Ìfp饗~ê龿Û×öð¼ºÎv.½óÎ;_»ºcõÛ'àéãOœ<±sçŽ –xbŠ8V`°C°È(Õdœ^ÓзßI&óRÊnœqïJCÒäÞwïé x¸›÷P½F¼…opÊŠZÅ®eîoMøjfP¢‰¨+ T¬¯Ÿ– .¼àÇE­Ó§Þ·oßÇ¿G±wï¥Û7Ôöðâ\ n¼ñÈk/¼à«++ÃÖlú­›¿|Þù;1¡%¯ËÁÍèÈ}k´Q:“ø 1 * *d¼}Sö¹/€#¡í褷‹I ’€Ášƒ¤ç4PcáR°G{cpjc+Ë;ÖVV—¾8›N'?~rzèСO<Ý÷kûÚ^^Ð×Ñ£Gq饋w´þ‘7â²}kßý’—¾D'¼ â66¶~Œÿ÷ÊêjîÞa!¶‘¼"ÂH2¿OTµi”r ç9)fâaj ˆë­2p¤1æÔ”‡N!f_4àBQÅÖÖTõŸ­îØq1«Ì¦ôøó—þÒ§æÝÿD6TÅ[.ÝÞé·€o¢ë¦›nÂUW]uÖ¿sË-·¬.¯¬¼bçŽb̼éætó¯Ì¦³5YšüÝååå6+3ξGÛ _Á$ÃMÝ&ÇÄ«0HÌQh1]¤êLQ+K ¹ŠÛQ`kkŠÙ0ûý¥¥¥C;v¬~IDWT§7Oótºõ—W\qåÆÙ~¶›o¾ܾ¶€íëé<ç{þÞñSïØ¹´´´²²²¢Ì 7 ÁòêÒìѯ=z¹ª^¿4YÂÒÒÄ€ƒ’ Y½O/maPi™‡ª‚aP ³)Tõ]¾ôÂ#,Þ l”žA[›[4M§_üü×úŸüôö¸½l_çòZd[}ïÏ¿ïúÉw=ùbrËÍDD¼¼´= 2.0). .TP \fB\-\-file\-extensions\fR Show filename extensions only. .TP \fB\-\-file\-extension\-fallback\fR Use filename as extension if the extension is missing or empty. .TP \fB\-\-file\-filter REGEX\fR Filter out file paths matching the specified regular expression. .TP \fB\-\-file\-show\-filter REGEX\fR Show only file paths matching the specified regular expression. .TP \fB\-\-user\-filter REGEX\fR Filter usernames matching the specified regular expression. .TP \fB\-\-user\-show\-filter REGEX\fR Show only usernames matching the specified regular expression. .TP \fB\-\-user\-image\-dir DIRECTORY\fR Directory containing .jpg or .png images of users (eg "Full Name.png") to use as avatars. .TP \fB\-\-default\-user\-image IMAGE\fR Path of .jpg to use as the default user image. .TP \fB\-\-fixed\-user\-size\fR Forces the size of the user image to remain fixed throughout. .TP \fB\-\-colour\-images\fR Colourize user images. .TP \fB\-\-crop AXIS\fR Crop view on an axis (vertical,horizontal). .TP \fB\-\-padding FLOAT\fR Camera view padding. .TP \fB\-\-multi\-sampling\fR Enable multi-sampling. .TP \fB\-\-no\-vsync\fR Disable vsync. .TP \fB\-\-bloom\-multiplier FLOAT\fR Adjust the amount of bloom. .TP \fB\-\-bloom\-intensity FLOAT\fR Adjust the intensity of the bloom. .TP \fB\-\-max\-files NUMBER\fR Set the maximum number of files or 0 for no limit. Excess files will be discarded. .TP \fB\-\-max\-file\-lag SECONDS\fR Max time files of a commit can take to appear. Use \-1 for no limit. .TP \fB\-\-max\-user\-speed UNITS\fR Max speed users can travel per second. .TP \fB\-\-user\-friction SECONDS\fR Time users take to come to a halt. .TP \fB\-\-user\-scale SCALE\fR Change scale of user avatars. .TP \fB\-\-camera\-mode MODE\fR Camera mode (overview,track). .TP \fB\-\-disable\-auto\-rotate\fR Disable automatic camera rotation. .TP \fB\-\-disable\-input\fR Disable keyboard and mouse input. .TP \fB\-\-hide DISPLAY_ELEMENT\fR Hide one or more display elements from the list below: bloom \- bloom effect date \- current date dirnames \- names of directories files \- file icons filenames \- names of files mouse \- mouse cursor progress \- progress bar widget root \- root directory of the tree tree \- animated tree structure users \- user avatars usernames \- names of users Separate multiple elements with commas (eg "mouse,progress") .TP \fB\-\-hash\-seed SEED\fR Change the seed of hash function. .TP \fB\-\-caption-file FILE Caption file (see Caption Log Format). .TP \fB\-\-caption-size SIZE Caption size. .TP \fB\-\-caption-colour FFFFFF Caption colour in hex. .TP \fB\-\-caption-duration SECONDS Caption duration. .TP \fB\-\-caption-offset X Caption horizontal offset (0 to centre captions). .TP \fB\-o, \-\-output\-ppm\-stream FILE\fR Output a PPM image stream to a file ('\-' for STDOUT). This will automatically hide the progress bar initially and enable 'stop\-at\-end' unless other behaviour is specified. .TP \fB\-r, \-\-output\-framerate FPS\fR Framerate of output (25,30,60). Used with \-\-output\-ppm\-stream. .TP \fB\-\-output\-custom\-log FILE\fR Output a custom format log file ('\-' for STDOUT). .TP \fB\-\-load\-config CONFIG_FILE\fR Load a config file. .TP \fB\-\-save\-config CONFIG_FILE\fR Save a config file with the current options. .TP \fB\-\-path PATH\fR .TP \fBpath\fR Either a supported version control directory, a pre-generated log file (see log commands or the custom log format), a Gource conf file or '-' to read STDIN. If path is omitted, gource will attempt to read a log from the current directory. .SS Git, Bazaar, Mercurial and SVN Examples View the log of the repository in the current path: .ti 10 \fIgource\fR View the log of a project in the specified directory: .ti 10 \fIgource\fR my\-project\-dir For large projects, generating a log of the project history may take a long time. For centralized VCS like SVN, generating the log will put load on the central VCS server. In these cases, you may like to save a copy of the log for later use. You can generate a log in the VCS specific log format using the \-\-log\-command VCS option: .ti 10 cd my\-svn\-project .ti 10 \`\fIgource\fR \-\-log\-command svn\` > my\-svn\-project.log .ti 10 \fIgource\fR my\-svn\-project.log You can also have Gource write a copy of the log file in its own format: .ti 10 \fIgource\fR \-\-output\-custom\-log my\-project\-custom.log .SS CVS Support Use 'cvs2cl' to generate the log and then pass it to Gource: .ti 10 cvs2cl \-\-chrono \-\-stdout \-\-xml \-g\-q > my\-cvs\-project.log .ti 10 gource my\-cvs\-project.log .SS Custom Log Format If you want to use Gource with something other than the supported systems, there is a pipe ('|') delimited custom log format: .ti 10 timestamp - An ISO 8601 or unix timestamp of when the update occurred. .ti 10 username - The name of the user who made the update. .ti 10 type - Single character for the update type - (A)dded, (M)odified or (D)eleted. .ti 10 file - Path of the file updated. .ti 10 colour - A colour for the file in hex (FFFFFF) format. Optional. .SS Caption Log Format Gource can display captions along the timeline by specifying a caption file (using \-\-caption\-file) in the pipe ('|') delimited format below: .ti 10 timestamp - An ISO 8601 or unix timestamp of when to display the caption. .ti 10 caption - The caption .SS Recording Videos See the guide on the homepage for examples of recording videos with Gource: .ti 10 https://github.com/acaudwell/Gource/wiki/Videos .SS More Information Visit the Gource homepage for guides and examples of using Gource with various version control systems: .ti 10 http://gource.io .SH INTERFACE The time shown in the top left of the screen is set initially from the first log entry read and is incremented according to the simulation speed (\-\-seconds\-per\-day). Pressing SPACE at any time will pause/resume the simulation. While paused you may use the mouse to inspect the detail of individual files and users. TAB cycles through selecting the current visible users. The camera mode, either tracking activity or showing the entire code tree, can be toggled using the Middle mouse button. You can drag the left mouse button to manually control the camera. The right mouse button rotates the view. Interactive keyboard commands: .sp .ti 10 (V) Toggle camera mode .ti 10 (C) Displays Gource logo .ti 10 (K) Toggle file extension key .ti 10 (M) Toggle mouse visibility .ti 10 (N) Jump forward in time to next log entry .ti 10 (S) Randomize colours .ti 10 (D) Toggle directory name display mode .ti 10 (F) Toggle file name display mode .ti 10 (U) Toggle user name display mode .ti 10 (G) Toggle display of users .ti 10 (T) Toggle display of directory tree edges .ti 10 (R) Toggle display of root directory edges .ti 10 (<>) Adjust time scale / user avatar movement speed .ti 10 (+-) Adjust simulation speed .ti 10 (Keypad +-) Adjust camera zoom .ti 10 (TAB) Cycle through visible users .ti 10 (F12) Screenshot .ti 10 (Alt+Enter) Fullscreen toggle .ti 10 (ESC) Quit .SH AUTHOR .nf Written by Andrew Caudwell Project Homepage: http://gource.io .SH COPYRIGHT .nf Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . .fi .SH ACKNOWLEDGEMENTS .nf Catalyst IT (catalyst.net.nz) For supporting the development of Gource! .fi gource-0.56/data/bloom.tga0000644002342600234260000051730315152463042015321 0ustar andrewcandrewc þþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþî£þîþæ³þæþà¿þàþÛÉþÛþÖÓþÖþÒÛþÒþÎãþÎþ˲ƒ²þËþȤ¥¤þÈþÅ ³ þÅþ¿þÂþ¿›É›þ¿þ½˜§ƒ§˜þ½þº˜š£š˜þºþ¸––³––þ¸þ¶•“¿“•þ¶þ³•‘‘•þ³þ±”•¥•”þ±þ¯“’³’“þ¯þ­’¿’þ­þ«’Ž“¡“Ž’þ«þ©‘±‘þ©þ¨‹Žš…šŽ‹þ¨þ¦Œ‹Œ£Œ‹Œþ¦þ¤‹‹‹±‹‹‹þ¤þ¢‹ŠŠ‹’—’‹ŠŠ‹þ¢þ¡‹‰‰ŠŽ©ŽŠ‰‰‹þ¡þŸŠ‰‰‰‹•‹•‹‰‰‰ŠþŸþžŽŠ‰ˆ‰‰¥‰‰ˆ‰ŠŽþžþœŽŠˆˆˆ‰Š³Š‰ˆˆˆŠŽþœþšŽŠˆˆ‡ˆ‰¡ ‰ˆ‡ˆˆŠŽþšþ™Ž‰ˆ‡‡‡ˆ‹¯ ‹ˆ‡‡‡ˆ‰Žþ™þ˜‰ˆ‡†‡‡‰Œ ¡ Œ ‰‡‡†‡ˆ‰þ˜þ–‰ˆ†‡†‡‡Š “ ‡ “ Š ‡‡†‡†ˆ‰þ–þ•ˆˆ†††‡†ˆ ‹ £ ‹ ˆ †‡†††ˆˆþ•þ“‰‡†††††‡ ˆ ˆ ‡ †††††‡‰þ“þ’ˆ‡††…†…‡ ‡ Š ¥ Š ‡ ‡ …†…††‡ˆþ’þ‘Œˆ‡†…†……† ‡ ‡ — ‡ ‡ † ……†…†‡ˆŒþ‘þˆ††…………† † † ‰ © ‰ † † † …………††ˆþþŽŒˆ‡……………… … † ‡ Š ŸŠ ‡ † … … ……………‡ˆŒþŽþŒˆ†…………„… … … † ˆ ‘ˆ † … … … „…………†ˆŒþþŒ‹ˆ††„…„…„ … … … † ‰¥‰† … … … „ …„…„††ˆ‹þŒþ‹‹ˆ†……„„„… „ „ … † ‡‰‰‡† … „ „ … „„„……†ˆ‹þ‹þ‰Œ‡†……„„„„ „ … „ … †‡ŽŽ‡†… „ … „ „ „„„……†‡Œþ‰þˆŒ‡†…„„„„„ „ „ „ „ …†‰£‰†…„ „ „ „ „ „„„„…†‡Œþˆþ‡‹‡†…„„„„„ ƒ „ „ „ ……†‰‰†……„ „ „ ƒ „ „„„„…†‡‹þ‡þ†‹‡†…„„ƒ„„ ƒ „ ƒ „ „……‡‹“‹‡……„„ ƒ „ ƒ „ „ƒ„„…†‡‹þ†þ…‹‡……„„„ƒ„ ƒ ƒ „ ƒ „„…†‡…‡†…„„ƒ „ ƒ ƒ „ ƒ„„„……‡‹þ…þ„‹‡……„ƒ„ƒ„ ƒ ƒ ƒ „ ƒ„„…†‡¡‡†…„„ƒ„ ƒ ƒ ƒ „ ƒ„ƒ„……‡‹þ„þƒŠ‡†„„„ƒ„ƒ ƒ ƒ ƒ ƒ „ƒ„„…†ˆ›ˆ†…„„ƒ„ƒ ƒ ƒ ƒ ƒ „ƒ„„„†‡Šþƒþ‚Ї……„ƒ„ƒƒ ƒ ƒ ƒ ƒ ƒƒ„„„…†‰•‰†…„„„ƒƒƒ ƒ ƒ ƒ ƒ ƒ„ƒ„……‡Šþ‚þЇ…„„„ƒƒƒ ƒ ƒ ƒ ƒ ƒƒƒƒ„„…‡‹‹‡…„„ƒƒƒƒƒ ƒ ƒ ƒ ƒ ƒƒ„„„…‡ŠþþЇ…„„ƒƒ„‚ ƒ ƒ ƒ ‚ ƒƒƒƒ„„„…†£†…„„„ƒƒƒƒ‚ ƒ ƒ ƒ ‚ „ƒƒ„„…‡ŠþþІ……ƒ„ƒƒƒ ‚ ƒ ƒ ‚ ƒƒƒƒƒƒ„„…‡Ÿ‡…„„ƒƒƒƒƒƒ‚ ƒ ƒ ‚ ƒ ƒƒ„ƒ……†ŠþýІ…„„ƒ„‚ƒ ƒ ‚ ƒ ‚ ƒƒ‚ƒƒƒƒ„„†‡›‡†„„ƒƒƒƒ‚ƒƒ‚ ƒ ‚ ƒ ƒ ‚„ƒ„„…†ŠýüІ…„„ƒƒƒƒ ‚ ƒ ‚ ƒ ‚‚ƒƒ‚ƒƒ„ƒ……ˆ—ˆ……ƒ„ƒƒ‚ƒƒ‚‚ƒ ‚ ƒ ‚ ƒ ƒƒƒ„„…†ŠüûІ…„„ƒƒ‚ƒ ƒ ‚ ‚ ƒ ‚‚ƒ‚ƒƒ‚ƒ„ƒ……‰“‰……ƒ„ƒ‚ƒƒ‚ƒ‚‚ƒ ‚ ‚ ƒ ƒ ‚ƒƒ„„…†ŠûúІ…„ƒƒƒƒƒ ‚ ‚ ƒ ‚ ‚‚ƒ‚ƒ‚ƒ‚ƒ„ƒ……ŠŠ……ƒ„ƒ‚ƒ‚ƒ‚ƒ‚‚‚ ƒ ‚ ‚ ƒ ƒƒƒƒ„…†ŠúùІ…„ƒƒƒƒ‚ ‚ ƒ ‚ ‚ ‚‚ƒ‚‚ƒ‚ƒ‚ƒƒ„……‹‹‹……„ƒƒ‚ƒ‚ƒ‚‚ƒ‚‚‚ ‚ ƒ ‚ ‚ ƒƒƒƒ„…†ŠùøŠ†…ƒ„ƒƒ‚ƒ ‚ ‚ ‚ ‚ ƒ‚‚‚‚‚ƒ‚‚ƒƒƒ„„†ŽƒŽ†„„ƒƒƒ‚‚ƒ‚‚‚‚‚ƒ‚ ‚ ‚ ‚ ƒ ‚ƒƒ„ƒ…†Šø÷І„„„ƒ‚ƒ‚ ƒ ‚ ‚ ‚ ‚‚‚‚‚‚‚ƒ‚‚ƒƒƒ„„†Ÿ†„„ƒƒƒ‚‚ƒ‚‚‚‚‚‚‚‚ ‚ ‚ ƒ ‚ ƒ‚ƒ„„„†Š÷öІ„„ƒƒƒƒ‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚ƒ‚ƒƒƒƒ…††…ƒƒƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ƒƒƒƒ„„†ŠöõІ„„ƒƒƒ‚ƒ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ƒ‚ƒƒ„„‡› ‡„„ƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ƒ ‚ƒƒƒ„„†ŠõôІ„„ƒƒƒ‚‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„„‡ ™!!!‡ „„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ‚ƒƒƒ„„†Šôô‰†„„ƒƒ‚ƒ‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ„… ‡!!!—"""‡!!!… „ƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ƒ‚ƒƒ„„†‰ô󉆄„ƒƒ‚ƒ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒƒ„ „!!!‡"""—###‡"""„!!!„ ƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ƒ‚ƒƒ„„†‰óò‰†„„ƒƒ‚‚ƒ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ „!!!…"""†###—$$$†###…"""„!!!ƒ ‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ƒ ‚‚ƒƒ„„†‰òñ‰†„„ƒƒ‚‚‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ ƒ!!!ƒ"""…###‡$$$•%%%‡$$$…###ƒ"""ƒ!!!ƒ ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ‚‚ƒƒ„„†‰ñð‰†„„ƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒ ‚!!!ƒ"""„###„$$$‡%%%•&&&‡%%%„$$$„###ƒ"""‚!!!ƒ ‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ‚‚ƒƒ„„†‰ð„„ƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ƒ ‚!!!‚"""ƒ###„$$$„%%%‡&&&•'''‡&&&„%%%„$$$ƒ###‚"""‚!!!ƒ ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒ„„…Šï…ƒƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ ‚!!!‚"""ƒ###ƒ$$$ƒ%%%„&&&‡'''•(((‡'''„&&&ƒ%%%ƒ$$$ƒ###‚"""‚!!!‚ ‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ……‰ï…ƒƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚ ‚!!!‚"""‚###ƒ$$$ƒ%%%ƒ&&&„'''‡(((•)))‡(((„'''ƒ&&&ƒ%%%ƒ$$$‚###‚"""‚!!!‚ ‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ……‰î퉆„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚‚‚‚‚ ‚!!!"""‚###ƒ$$$‚%%%ƒ&&&ƒ'''„(((†)))—***†)))„(((ƒ'''ƒ&&&‚%%%ƒ$$$‚###"""‚!!!‚ ‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„†‰í쉆„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚‚‚‚ !!!‚"""‚###‚$$$‚%%%‚&&&ƒ'''ƒ(((„)))†***—+++†***„)))ƒ(((ƒ'''‚&&&‚%%%‚$$$‚###‚"""!!!‚ ‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„†‰ì쉅„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚‚ ‚!!!‚"""###‚$$$‚%%%‚&&&‚'''ƒ(((ƒ)))„***†+++—,,,†+++„***ƒ)))ƒ(((‚'''‚&&&‚%%%‚$$$###‚"""‚!!! ‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„…‰ì뉅„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚ ‚!!!"""‚###$$$‚%%%‚&&&‚'''‚(((ƒ)))ƒ***„+++…,,,™---…,,,„+++ƒ***ƒ)))‚(((‚'''‚&&&‚%%%$$$‚###"""‚!!! ‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„…‰ëꉅ„„‚ƒ‚‚‚ ‚ ‚ ‚‚‚ ‚!!!"""‚###$$$‚%%%&&&‚'''‚(((‚)))ƒ***ƒ+++„,,,…---™...…---„,,,ƒ+++ƒ***‚)))‚(((‚'''&&&‚%%%$$$‚###"""‚!!! ‚‚‚‚ ‚ ‚ ‚‚ƒ‚„„…‰êꈆƒ„‚ƒ‚‚‚ ‚ ‚ ‚‚‚ !!!"""###‚$$$%%%‚&&&'''‚(((‚)))‚***ƒ+++ƒ,,,„---…...™///…...„---ƒ,,,ƒ+++‚***‚)))‚((('''‚&&&%%%‚$$$###"""!!!‚ ‚‚‚ ‚ ‚ ‚‚ƒ‚„ƒ†ˆê鈆„ƒƒ‚‚‚‚ ‚ ‚ ‚‚ !!!"""###‚$$$%%%&&&‚'''‚((()))‚***‚+++ƒ,,,ƒ---ƒ...…///›000…///ƒ...ƒ---ƒ,,,‚+++‚***)))‚(((‚'''&&&%%%‚$$$###"""!!! ‚‚‚ ‚ ‚ ‚‚‚ƒƒ„†ˆé艅„ƒƒ‚‚‚‚ ‚ ‚ ‚ !!!"""###‚$$$%%%&&&‚'''(((‚)))***‚+++‚,,,ƒ---ƒ...ƒ///…000›111…000ƒ///ƒ...ƒ---‚,,,‚+++***‚)))(((‚'''&&&%%%‚$$$###"""!!! ‚‚ ‚ ‚ ‚‚‚ƒƒ„…‰è牅„ƒƒ‚‚‚‚ ‚ ‚ ‚ ‚!!!"""###$$$%%%&&&'''‚((()))‚***‚+++,,,‚---ƒ...ƒ///ƒ000…111‰222‡333‰222…111ƒ000ƒ///ƒ...‚---,,,‚+++‚***)))‚((('''&&&%%%$$$###"""‚!!! ‚‚ ‚ ‚ ‚‚‚ƒƒ„…‰ç爅„ƒƒ‚‚‚‚ ‚ ‚ ‚ !!!"""###$$$%%%&&&'''‚((()))***‚+++‚,,,---‚...ƒ///ƒ000ƒ111„222ˆ333‹444ˆ333„222ƒ111ƒ000ƒ///‚...---‚,,,‚+++***)))‚((('''&&&%%%$$$###"""!!! ‚‚ ‚ ‚ ‚‚‚ƒƒ„…ˆç扅„ƒ‚ƒ‚‚ ‚ ‚  !!!"""###$$$%%%&&&'''‚((()))***‚+++,,,‚---...‚///ƒ000‚111„222„333‡444555‡444„333„222‚111ƒ000‚///...‚---,,,‚+++***)))‚((('''&&&%%%$$$###"""!!! ‚ ‚ ‚ ‚ƒ‚ƒ„…‰ææˆ…„ƒƒ‚‚‚ ‚ ‚  !!!"""###$$$%%%&&&‚'''((()))***+++‚,,,---‚...///‚000ƒ111‚222ƒ333„444‡555666‡555„444ƒ333‚222ƒ111‚000///‚...---‚,,,+++***)))(((‚'''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚‚ƒƒ„…ˆæåˆ…„ƒƒ‚‚‚ ‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,‚---...‚///‚000111ƒ222‚333ƒ444„555†666‘777†666„555ƒ444‚333ƒ222111‚000‚///...‚---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚‚ƒƒ„…ˆå䉅ƒƒƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---‚...///‚000111‚222‚333ƒ444ƒ555ƒ666†777“888†777ƒ666ƒ555ƒ444‚333‚222111‚000///‚...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚‚ƒƒƒ…‰ä䈅„ƒ‚‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---‚...///000‚111222‚333‚444ƒ555‚666„777…888•999…888„777‚666ƒ555‚444‚333222‚111000///‚...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚‚‚ƒ„…ˆä㈅„ƒ‚ƒ‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...‚///000111‚222333‚444‚555‚666ƒ777„888„999—:::„999„888ƒ777‚666‚555‚444333‚222111000‚///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚ƒ‚ƒ„…ˆã≅ƒƒƒ‚‚‚ ‚ ‚ !!!"""###$$$%%%&&&'''((()))***+++,,,---...‚///000111222‚333444‚555‚666‚777ƒ888ƒ999…:::—;;;…:::ƒ999ƒ888‚777‚666‚555444‚333222111000‚///...---,,,+++***)))((('''&&&%%%$$$###"""!!! ‚ ‚ ‚‚‚ƒƒƒ…‰â∅„ƒ‚‚‚‚ ‚ ‚ !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333‚444555‚666‚777‚888‚999„:::„;;;‹<<<===‹<<<„;;;„:::‚999‚888‚777‚666555‚444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!! ‚ ‚ ‚‚‚‚ƒ„…ˆâህ„ƒ‚‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444‚555666‚777‚888‚999‚:::ƒ;;;„<<<ˆ===‰>>>ˆ===„<<<ƒ;;;‚:::‚999‚888‚777666‚555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!! ‚ ‚ ‚‚‚‚ƒ„…ˆáህƒƒƒ‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555‚666777‚888999‚:::ƒ;;;ƒ<<<„===‡>>>‹???‡>>>„===ƒ<<<ƒ;;;‚:::999‚888777‚666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚ƒƒƒ…ˆáàˆ…„ƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666‚777888‚999:::‚;;;ƒ<<<‚===„>>>†???@@@†???„>>>‚===ƒ<<<‚;;;:::‚999888‚777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚ƒ„…ˆààˆ„„ƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777‚888999:::‚;;;‚<<<‚===ƒ>>>„???†@@@AAA†@@@„???ƒ>>>‚===‚<<<‚;;;:::999‚888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚ƒ„„ˆà߈…ƒƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999‚:::;;;‚<<<‚===‚>>>ƒ???ƒ@@@†AAA‘BBB†AAAƒ@@@ƒ???‚>>>‚===‚<<<;;;‚:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒƒƒ…ˆßÞˆ…„ƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::‚;;;<<<‚===‚>>>‚???ƒ@@@ƒAAA…BBB“CCC…BBBƒAAAƒ@@@‚???‚>>>‚===<<<‚;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚‚ƒ„…ˆÞÞˆ…ƒƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;‚<<<===‚>>>???ƒ@@@‚AAAƒBBB…CCC•DDD…CCCƒBBB‚AAAƒ@@@???‚>>>===‚<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚ƒƒ…ˆÞ݈…„‚ƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<‚===>>>‚???@@@‚AAAƒBBBƒCCC„DDD—EEE„DDDƒCCCƒBBB‚AAA@@@‚???>>>‚===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒ‚„…ˆÝ݈„„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===‚>>>???‚@@@AAA‚BBBƒCCCƒDDD„EEE‰FFFƒGGG‰FFF„EEEƒDDDƒCCC‚BBBAAA‚@@@???‚>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ„„ˆÝ܈…ƒƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???‚@@@AAA‚BBB‚CCC‚DDDƒEEE„FFFˆGGG‡HHHˆGGG„FFFƒEEE‚DDD‚CCC‚BBBAAA‚@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚ƒƒ…ˆÜ܈„„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???‚@@@AAABBB‚CCC‚DDD‚EEEƒFFFƒGGG‡HHH‹III‡HHHƒGGGƒFFF‚EEE‚DDD‚CCCBBBAAA‚@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ„„ˆÜÛˆ…ƒƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAA‚BBBCCC‚DDD‚EEE‚FFF‚GGG„HHH†IIIJJJ†III„HHH‚GGG‚FFF‚EEE‚DDDCCC‚BBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒƒ…ˆÛÛˆ„„‚ƒ‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBB‚CCCDDD‚EEEFFFƒGGG‚HHHƒIII†JJJKKK†JJJƒIII‚HHHƒGGGFFF‚EEEDDD‚CCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒ‚„„ˆÛÚˆ…ƒƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCC‚DDDEEEFFF‚GGG‚HHHƒIIIƒJJJ…KKK‘LLL…KKKƒJJJƒIII‚HHH‚GGGFFFEEE‚DDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒƒ…ˆÚÚˆ„„‚ƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDD‚EEEFFFGGG‚HHH‚III‚JJJ„KKK„LLL“MMM„LLL„KKK‚JJJ‚III‚HHHGGGFFF‚EEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„„ˆÚÙˆ…ƒƒ‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFF‚GGGHHH‚III‚JJJ‚KKKƒLLL…MMM“NNN…MMMƒLLL‚KKK‚JJJ‚IIIHHH‚GGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒƒ…ˆÙÙˆ„„‚‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGG‚HHHIII‚JJJ‚KKK‚LLLƒMMM„NNN•OOO„NNNƒMMM‚LLL‚KKK‚JJJIII‚HHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚‚„„ˆÙÙ‡…ƒƒ‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHH‚IIIJJJ‚KKK‚LLL‚MMMƒNNN„OOO•PPP„OOOƒNNN‚MMM‚LLL‚KKKJJJ‚IIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒƒ…‡Ù؈„„‚‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIII‚JJJKKK‚LLLMMMƒNNN‚OOO…PPP•QQQ…PPP‚OOOƒNNNMMM‚LLLKKK‚JJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚„„ˆØØ‡…ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJ‚KKKLLLMMM‚NNN‚OOOƒPPP„QQQ‰RRRƒSSS‰RRR„QQQƒPPP‚OOO‚NNNMMMLLL‚KKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ…‡Ø×ˆ„„‚‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKK‚LLLMMMNNN‚OOO‚PPPƒQQQ„RRR‡SSS‡TTT‡SSS„RRRƒQQQ‚PPP‚OOONNNMMM‚LLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚„„ˆ×ׇ…ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLL‚MMMNNNOOO‚PPP‚QQQƒRRRƒSSS‡TTT‰UUU‡TTTƒSSSƒRRR‚QQQ‚PPPOOONNN‚MMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ…‡×Öˆ„„‚‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMM‚NNNOOOPPP‚QQQ‚RRRƒSSSƒTTT†UUU‹VVV†UUUƒTTTƒSSS‚RRR‚QQQPPPOOO‚NNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚„„ˆÖÖ‡…ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNN‚OOOPPPQQQ‚RRR‚SSSƒTTTƒUUU†VVV‹WWW†VVVƒUUUƒTTT‚SSS‚RRRQQQPPP‚OOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ…‡ÖÖ‡…ƒ‚‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOO‚PPPQQQRRR‚SSS‚TTTƒUUUƒVVV…WWWXXX…WWWƒVVVƒUUU‚TTT‚SSSRRRQQQ‚PPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚ƒ…‡ÖÕˆ„ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSS‚TTT‚UUU‚VVV„WWW…XXXYYY…XXX„WWW‚VVV‚UUU‚TTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ„ˆÕÕ‡…ƒ‚ƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTT‚UUU‚VVV‚WWW„XXX…YYYZZZ…YYY„XXX‚WWW‚VVV‚UUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ƒ‚ƒ…‡ÕÔˆ„ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTT‚UUUVVV‚WWW‚XXX„YYY…ZZZ[[[…ZZZ„YYY‚XXX‚WWWVVV‚UUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ„ˆÔÔ‡…ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUU‚VVVWWW‚XXX‚YYY„ZZZ…[[[\\\…[[[„ZZZ‚YYY‚XXXWWW‚VVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒƒ…‡ÔÔ‡„„‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVV‚WWWXXX‚YYY‚ZZZ„[[[…\\\]]]…\\\„[[[‚ZZZ‚YYYXXX‚WWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚„„‡ÔÓˆ„ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWW‚XXXYYY‚ZZZƒ[[[ƒ\\\…]]]^^^…]]]ƒ\\\ƒ[[[‚ZZZYYY‚XXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒƒ„ˆÓÓ‡…ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWW‚XXXYYYZZZ‚[[[ƒ\\\ƒ]]]…^^^___…^^^ƒ]]]ƒ\\\‚[[[ZZZYYY‚XXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ…‡ÓÓ‡„ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWW‚XXXYYYZZZ‚[[[\\\ƒ]]]ƒ^^^…___```…___ƒ^^^ƒ]]]\\\‚[[[ZZZYYY‚XXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ„‡ÓÒˆ„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[‚\\\‚]]]‚^^^ƒ___†```‹aaa†```ƒ___‚^^^‚]]]‚\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„ˆÒÒ‡…ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\‚]]]‚^^^‚___„```…aaa‹bbb…aaa„```‚___‚^^^‚]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ…‡ÒÒ‡„ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\‚]]]^^^‚___ƒ```ƒaaa†bbb‰ccc†bbbƒaaaƒ```‚___^^^‚]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒƒ„‡Òш„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]‚^^^___ƒ```‚aaaƒbbb‡ccc‡ddd‡cccƒbbb‚aaaƒ```___‚^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„ˆÑч„„‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___‚```‚aaa‚bbb„ccc‡ddd…eee‡ddd„ccc‚bbb‚aaa‚```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚„„‡Ñч„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111 222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___‚```aaa‚bbbƒcccƒddd•eeeƒdddƒccc‚bbbaaa‚```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<< ;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡ÑЈ„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,--- ...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```‚aaa‚bbb‚ccc‚ddd„eee“fff„eee‚ddd‚ccc‚bbb‚aaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888 777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„ˆÐЇ…ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((( )))***+++,,,---...///000111222333 444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___‚```aaabbb‚ccc‚dddƒeee„fff‘ggg„fffƒeee‚ddd‚cccbbbaaa‚```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@ ???>>>===<<<;;;:::999888777666555444333 222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ…‡ÐЇ„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---... ///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbb‚cccddd‚eeeƒfff„ggg‘hhh„gggƒfff‚eeeddd‚cccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>=== <<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Ðψ„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((( )))***+++,,,---...///000111222333444555666 777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbb‚cccddd‚eee‚fffƒggg„hhhiii„hhhƒggg‚fff‚eeeddd‚cccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDD CCCBBBAAA@@@???>>>===<<<;;;:::999888777666 555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„ˆÏχ…ƒ‚‚‚‚  !!!"""### $$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@ AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeee‚fff‚ggg„hhh…iii‹jjj…iii„hhh‚ggg‚fffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKK JJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000/// ...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ…‡Ïχ„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999::: ;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeee‚fff‚ggg‚hhhƒiii†jjj‰kkk†jjjƒiii‚hhh‚ggg‚fffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHH GGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Ïχ„ƒ‚‚‚‚  !!!""" ###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccddd‚eeefffggg‚hhhƒiiiƒjjj‰kkklll‰kkkƒjjjƒiii‚hhhgggfff‚eeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000/// ...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„‡ÏΈ„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>> ???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggg‚hhh‚iiiƒjjjƒkkk“lllƒkkkƒjjj‚iii‚hhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLL KKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ„ˆÎ·„ƒƒ‚‚  !!! """###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefff‚ggghhh‚iii‚jjj‚kkk…lllmmm…lll‚kkk‚jjj‚iiihhh‚gggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///... ---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Î·„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAA BBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhh‚iiijjjƒkkk‚lll…mmmnnn…mmm‚lllƒkkkjjj‚iiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPP OOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Î·„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++ ,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggg‚hhhiiijjj‚kkk‚lll„mmm†nnn‡ooo†nnn„mmm‚lll‚kkkjjjiii‚hhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMM LLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++ ***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„‡Î͇…ƒ‚‚‚  !!!"""###!$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFF GGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjj‚kkk‚lll‚mmm„nnn“ooo„nnn‚mmm‚lll‚kkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRR QQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFF!EEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ…‡Í͇„ƒƒ‚‚  !!!"""###$$$%%%&&&'''(((&)))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkk‚lll‚mmm‚nnn„ooo‘ppp„ooo‚nnn‚mmm‚lllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPP&OOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Í͇„ƒƒ‚‚  (!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJ KKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkk‚lll‚mmm‚nnnƒooo…ppp‹qqq…pppƒooo‚nnn‚mmm‚lllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUU TTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJ(IIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Í͇„ƒ‚‚‚‚  !!!"""###$$$,%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklll‚mmmnnnƒoooƒpppˆqqqƒrrrˆqqqƒpppƒooonnn‚mmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRR,QQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ„‡Í͇„ƒ‚‚‚   !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMM NNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkk‚lllmmm‚nnnoooƒppp„qqq‘rrr„qqqƒpppooo‚nnnmmm‚lllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXX WWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::888777666555444333222111000///...---,,,+++ ***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Í̇„ƒƒ‚‚  3!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmm‚nnnoooƒpppƒqqq„rrrsss„rrrƒqqqƒpppooo‚nnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUU3TTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Ì̇„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>@@@ BBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOO PPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnn‚ooo‚ppp‚qqqƒrrrˆsssƒtttˆsssƒrrr‚qqq‚ppp‚ooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZ YYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOO NNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBB@@@>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Ì̇„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000#222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo‚ppp‚qqq‚rrr„sss‘ttt„sss‚rrr‚qqq‚pppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVV#UUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ„‡Ì̇„ƒ‚‚‚  -!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPP QQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnn‚oooppp‚qqq‚rrrƒsss…ttt‹uuu…tttƒsss‚rrr‚qqqppp‚ooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPP-OOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Ì̇„ƒ‚‚‚  !!!"""###2$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo‚pppqqq‚rrrƒsssƒttt“uuuƒtttƒsss‚rrrqqq‚pppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXX2WWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Ìˇ„ƒƒ‚‚ = !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnoooppp‚qqqrrr‚sssƒttt„uuuvvv„uuuƒttt‚sssrrr‚qqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\=[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡ˡ„ƒƒ‚‚ 6 !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@BBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqq‚rrr‚sss‚tttƒuuu‡vvv…www‡vvvƒuuu‚ttt‚sss‚rrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXX6WWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBB@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡ˡ„ƒ‚‚‚  !!!9"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqq‚rrrsss‚tttƒuuu„vvvwww„vvvƒuuu‚tttsss‚rrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]9\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚  !!!"""###$$$0%%%&&&'''((()))***+++,,,---...///000111222444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrr‚ssstttƒuuuƒvvv…www‰xxx…wwwƒvvvƒuuuttt‚sssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXX0WWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚ > !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsss‚ttt‚uuu‚vvv„www‘xxx„www‚vvv‚uuu‚tttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^>]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚ 3 !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLNNNOOOPPPQQQRRRSSSTTTUUU VVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsss‚tttuuuƒvvv‚www†xxx‰yyy†xxx‚wwwƒvvvuuu‚tttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa ```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUU3TTTSSSRRRQQQPPPOOONNNLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Ëʇ„ƒƒ‚‚  9!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt‚uuu‚vvv‚www„xxx‘yyy„xxx‚www‚vvv‚uuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]9\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Êʇ„ƒ‚‚‚‚  !!!"""###9$$$%%%&&&'''((()))***+++,,,---...///000222333444555666777888999:::;;;<<<===>>>???@@@BBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt‚uuu‚vvv‚wwwƒxxx…yyy‰zzz…yyyƒxxx‚www‚vvv‚uuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```9___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBB@@@???>>>===<<<;;;:::999888777666555444333222000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ; !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt‚uuuvvv‚wwwƒxxx„yyyzzz„yyyƒxxx‚wwwvvv‚uuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[;ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ? !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt‚uuuvvv‚www‚xxxƒyyy‡zzz…{{{‡zzzƒyyy‚xxx‚wwwvvv‚uuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```?___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ? !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555777888999:::;;;<<<===>>>???@@@AAABBBCCCEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvv‚www‚xxx‚yyy…zzz{{{…zzz‚yyy‚xxx‚wwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbb?aaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEECCCBBBAAA@@@???>>>===<<<;;;:::999888777555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚  8!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222444555666777888999:::;;;<<<===>>>???@@@BBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvv‚wwwxxxƒyyyƒzzz“{{{ƒzzzƒyyyxxx‚wwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]8\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPNNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBB@@@???>>>===<<<;;;:::999888777666555444222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚  !!!"""9###$$$%%%&&&'''((()))***+++,,,---///000111222333444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvv‚wwwxxx‚yyyƒzzz…{{{‹|||…{{{ƒzzz‚yyyxxx‚wwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```9___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444333222111000///---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Êʆ…‚ƒ‚‚ D !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::<<<===>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu‚vvvwwwxxx‚yyyƒzzz„{{{|||„{{{ƒzzz‚yyyxxxwww‚vvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccDbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHFFFEEEDDDCCCBBBAAA@@@???>>>===<<<:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚…†Êɇ„ƒƒ‚‚ : !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888:::;;;<<<===>>>???@@@AAABBBCCCDDDFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUWWWXXXYYYZZZ[[[ \\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxx‚yyy‚zzz„{{{‡|||ƒ}}}‡|||„{{{‚zzz‚yyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfff eeedddcccbbbaaa```___^^^]]]\\\[[[:ZZZYYYXXXWWWUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFDDDCCCBBBAAA@@@???>>>===<<<;;;:::888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Éɇ„ƒ‚‚‚ > !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555777888999:::;;;<<<===>>>???@@@AAACCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwww‚xxxyyy‚zzzƒ{{{…|||‹}}}…|||ƒ{{{‚zzzyyy‚xxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```>___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPNNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCAAA@@@???>>>===<<<;;;:::999888777555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ @ !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333555666777888999:::;;;<<<===>>>???AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzzƒ{{{„|||}}}„|||ƒ{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddccc@bbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA???>>>===<<<;;;:::999888777666555333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ A !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111333444555666777888999:::;;;<<<===???@@@AAABBBCCCDDDEEEFFFGGGHHHJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxx‚yyyzzzƒ{{{ƒ|||“}}}ƒ|||ƒ{{{zzz‚yyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeeAdddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJHHHGGGFFFEEEDDDCCCBBBAAA@@@???===<<<;;;:::999888777666555444333111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  B!!!"""###$$$%%%&&&'''((()))***+++,,,---...000111222333444555666777888999:::;;;===>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwww‚xxxyyy‚zzz‚{{{ƒ|||…}}}‰~~~…}}}ƒ|||‚{{{‚zzzyyy‚xxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggBfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHFFFEEEDDDCCCBBBAAA@@@???>>>===;;;:::999888777666555444333222111000...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  !!!9"""###$$$%%%&&&'''((()))***+++---...///000111222333444555666777888999:::<<<===>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzz‚{{{ƒ|||„}}}~~~„}}}ƒ|||‚{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```9___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>>===<<<:::999888777666555444333222111000///...---+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  !!!"""###$$$9%%%&&&'''(((***+++,,,---...///000111222333444555666777888:::;;;<<<===>>>???@@@AAABBBCCCEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwww‚xxxyyyzzz‚{{{ƒ|||ƒ}}}‘~~~ƒ}}}ƒ|||‚{{{zzzyyy‚xxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddccc9bbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEECCCBBBAAA@@@???>>>===<<<;;;:::888777666555444333222111000///...---,,,+++***((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ F !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777999:::;;;<<<===>>>???@@@AAABBBDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzz‚{{{‚|||ƒ}}}“~~~ƒ}}}‚|||‚{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeeFdddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOOMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDBBBAAA@@@???>>>===<<<;;;:::999777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ F !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666888999:::;;;<<<===>>>???@@@AAACCCDDDEEEFFFGGGHHHIIIJJJKKKMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz‚{{{‚|||ƒ}}}†~~~‡†~~~ƒ}}}‚|||‚{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffFeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMKKKJJJIIIHHHGGGFFFEEEDDDCCCAAA@@@???>>>===<<<;;;:::999888666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ H !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555777888999:::;;;<<<===>>>???@@@BBBCCCDDDEEEFFFGGGHHHIIIJJJLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxx‚yyyzzz‚{{{‚|||‚}}}…~~~‹…~~~‚}}}‚|||‚{{{zzz‚yyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhHgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLJJJIIIHHHGGGFFFEEEDDDCCCBBB@@@???>>>===<<<;;;:::999888777555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ H !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444666777888999:::;;;<<<===>>>@@@AAABBBCCCDDDEEEFFFGGGHHHIIIKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzz{{{‚|||ƒ}}}„~~~„~~~ƒ}}}‚|||{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiiHhhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@>>>===<<<;;;:::999888777666444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„‚ƒ‚‚ > !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333555666777888999:::;;;<<<===>>>@@@AAABBBCCCDDDEEEFFFGGGHHHJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz‚{{{‚|||‚}}}„~~~„~~~‚}}}‚|||‚{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```>___^^^]]]\\\[[[ZZZYYYXXXVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJHHHGGGFFFEEEDDDCCCBBBAAA@@@>>>===<<<;;;:::999888777666555333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ ? !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222444555666777888999:::;;;<<<===???@@@AAABBBCCCDDDEEEFFFGGGIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{‚|||ƒ}}}ƒ~~~‘ƒ~~~ƒ}}}‚|||{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbb?aaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIGGGFFFEEEDDDCCCBBBAAA@@@???===<<<;;;:::999888777666555444222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ @ !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEFFFGGGIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzz{{{‚|||‚}}}„~~~‘„~~~‚}}}‚|||{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddccc@bbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIGGGFFFEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ A !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111333444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzz{{{‚|||‚}}}ƒ~~~“ƒ~~~‚}}}‚|||{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddAcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHFFFEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444333111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ B !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111333444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz‚{{{‚|||‚}}}ƒ~~~“ƒ~~~‚}}}‚|||‚{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeeBdddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHFFFEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444333111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„‡ÉɆ„ƒƒ‚‚ A !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111333444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz‚{{{|||ƒ}}}ƒ~~~“ƒ~~~ƒ}}}|||‚{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeeAdddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444333111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„†ÉɆ„ƒƒ‚‚ A !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111333444555666777888999:::;;;===>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz‚{{{|||ƒ}}}ƒ~~~“ƒ~~~ƒ}}}|||‚{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeeAdddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>>===;;;:::999888777666555444333111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„†ÉɆ„ƒƒ‚‚ A !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111333444555666777888999:::;;;===>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz‚{{{|||ƒ}}}ƒ~~~“ƒ~~~ƒ}}}|||‚{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeeAdddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>>===;;;:::999888777666555444333111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„†ÉɆ„ƒƒ‚‚ A !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111333444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz‚{{{|||ƒ}}}ƒ~~~“ƒ~~~ƒ}}}|||‚{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeeAdddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444333111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„†Éɇ„‚ƒ‚‚ B !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111333444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz‚{{{‚|||‚}}}ƒ~~~“ƒ~~~‚}}}‚|||‚{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeeBdddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHFFFEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444333111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ A !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111333444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzz{{{‚|||‚}}}ƒ~~~“ƒ~~~‚}}}‚|||{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddAcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHFFFEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444333111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ @ !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEFFFGGGIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzz{{{‚|||‚}}}„~~~‘„~~~‚}}}‚|||{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddccc@bbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIGGGFFFEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ ? !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222444555666777888999:::;;;<<<===???@@@AAABBBCCCDDDEEEFFFGGGIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{‚|||ƒ}}}ƒ~~~‘ƒ~~~ƒ}}}‚|||{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbb?aaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIGGGFFFEEEDDDCCCBBBAAA@@@???===<<<;;;:::999888777666555444222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ > !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333555666777888999:::;;;<<<===>>>@@@AAABBBCCCDDDEEEFFFGGGHHHJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz‚{{{‚|||‚}}}„~~~„~~~‚}}}‚|||‚{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```>___^^^]]]\\\[[[ZZZYYYXXXVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJHHHGGGFFFEEEDDDCCCBBBAAA@@@>>>===<<<;;;:::999888777666555333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„‡Éɇ„ƒ‚‚‚ H !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444666777888999:::;;;<<<===>>>@@@AAABBBCCCDDDEEEFFFGGGHHHIIIKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzz{{{‚|||ƒ}}}„~~~„~~~ƒ}}}‚|||{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiiHhhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@>>>===<<<;;;:::999888777666444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ H !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555777888999:::;;;<<<===>>>???@@@BBBCCCDDDEEEFFFGGGHHHIIIJJJLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxx‚yyyzzz‚{{{‚|||‚}}}…~~~‹…~~~‚}}}‚|||‚{{{zzz‚yyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhHgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLJJJIIIHHHGGGFFFEEEDDDCCCBBB@@@???>>>===<<<;;;:::999888777555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ F !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666888999:::;;;<<<===>>>???@@@AAACCCDDDEEEFFFGGGHHHIIIJJJKKKMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz‚{{{‚|||ƒ}}}†~~~‡†~~~ƒ}}}‚|||‚{{{zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffFeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMKKKJJJIIIHHHGGGFFFEEEDDDCCCAAA@@@???>>>===<<<;;;:::999888666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ F !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777999:::;;;<<<===>>>???@@@AAABBBDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzz‚{{{‚|||ƒ}}}“~~~ƒ}}}‚|||‚{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeeFdddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOOMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDBBBAAA@@@???>>>===<<<;;;:::999777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  !!!"""###$$$9%%%&&&'''(((***+++,,,---...///000111222333444555666777888:::;;;<<<===>>>???@@@AAABBBCCCEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwww‚xxxyyyzzz‚{{{ƒ|||ƒ}}}‘~~~ƒ}}}ƒ|||‚{{{zzzyyy‚xxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddccc9bbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEECCCBBBAAA@@@???>>>===<<<;;;:::888777666555444333222111000///...---,,,+++***((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  !!!9"""###$$$%%%&&&'''((()))***+++---...///000111222333444555666777888999:::<<<===>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzz‚{{{ƒ|||„}}}~~~„}}}ƒ|||‚{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```9___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>>===<<<:::999888777666555444333222111000///...---+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  B!!!"""###$$$%%%&&&'''((()))***+++,,,---...000111222333444555666777888999:::;;;===>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwww‚xxxyyy‚zzz‚{{{ƒ|||…}}}‰~~~…}}}ƒ|||‚{{{‚zzzyyy‚xxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggBfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHFFFEEEDDDCCCBBBAAA@@@???>>>===;;;:::999888777666555444333222111000...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ A !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111333444555666777888999:::;;;<<<===???@@@AAABBBCCCDDDEEEFFFGGGHHHJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxx‚yyyzzzƒ{{{ƒ|||“}}}ƒ|||ƒ{{{zzz‚yyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeeAdddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJHHHGGGFFFEEEDDDCCCBBBAAA@@@???===<<<;;;:::999888777666555444333111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ @ !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333555666777888999:::;;;<<<===>>>???AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyy‚zzzƒ{{{„|||}}}„|||ƒ{{{‚zzzyyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddccc@bbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA???>>>===<<<;;;:::999888777666555333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ > !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555777888999:::;;;<<<===>>>???@@@AAACCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwww‚xxxyyy‚zzzƒ{{{…|||‹}}}…|||ƒ{{{‚zzzyyy‚xxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```>___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPNNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCAAA@@@???>>>===<<<;;;:::999888777555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Éɇ„ƒƒ‚‚ : !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888:::;;;<<<===>>>???@@@AAABBBCCCDDDFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUWWWXXXYYYZZZ[[[ \\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxx‚yyy‚zzz„{{{‡|||ƒ}}}‡|||„{{{‚zzz‚yyyxxxwwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfff eeedddcccbbbaaa```___^^^]]]\\\[[[:ZZZYYYXXXWWWUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFDDDCCCBBBAAA@@@???>>>===<<<;;;:::888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Éʆ…‚ƒ‚‚ D !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::<<<===>>>???@@@AAABBBCCCDDDEEEFFFHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuu‚vvvwwwxxx‚yyyƒzzz„{{{|||„{{{ƒzzz‚yyyxxxwww‚vvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccDbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHFFFEEEDDDCCCBBBAAA@@@???>>>===<<<:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚…†Êʇ„ƒ‚‚‚  !!!"""9###$$$%%%&&&'''((()))***+++,,,---///000111222333444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvv‚wwwxxx‚yyyƒzzz…{{{‹|||…{{{ƒzzz‚yyyxxx‚wwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```9___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444333222111000///---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚  8!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222444555666777888999:::;;;<<<===>>>???@@@BBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvv‚wwwxxxƒyyyƒzzz“{{{ƒzzzƒyyyxxx‚wwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]8\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPNNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBB@@@???>>>===<<<;;;:::999888777666555444222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ? !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555777888999:::;;;<<<===>>>???@@@AAABBBCCCEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvv‚www‚xxx‚yyy…zzz{{{…zzz‚yyy‚xxx‚wwwvvvuuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbb?aaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEECCCBBBAAA@@@???>>>===<<<;;;:::999888777555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ? !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt‚uuuvvv‚www‚xxxƒyyy‡zzz…{{{‡zzzƒyyy‚xxx‚wwwvvv‚uuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```?___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ; !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt‚uuuvvv‚wwwƒxxx„yyyzzz„yyyƒxxx‚wwwvvv‚uuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[;ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>><<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚‚  !!!"""###9$$$%%%&&&'''((()))***+++,,,---...///000222333444555666777888999:::;;;<<<===>>>???@@@BBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt‚uuu‚vvv‚wwwƒxxx…yyy‰zzz…yyyƒxxx‚www‚vvv‚uuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```9___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBB@@@???>>>===<<<;;;:::999888777666555444333222000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„‡Êʇ„ƒƒ‚‚  9!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt‚uuu‚vvv‚www„xxx‘yyy„xxx‚www‚vvv‚uuutttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]9\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Êˇ„ƒ‚‚‚ 3 !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLNNNOOOPPPQQQRRRSSSTTTUUU VVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsss‚tttuuuƒvvv‚www†xxx‰yyy†xxx‚wwwƒvvvuuu‚tttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa ```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUU3TTTSSSRRRQQQPPPOOONNNLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚ > !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsss‚ttt‚uuu‚vvv„www‘xxx„www‚vvv‚uuu‚tttsssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^>]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚  !!!"""###$$$0%%%&&&'''((()))***+++,,,---...///000111222444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrr‚ssstttƒuuuƒvvv…www‰xxx…wwwƒvvvƒuuuttt‚sssrrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXX0WWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚  !!!9"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqq‚rrrsss‚tttƒuuu„vvvwww„vvvƒuuu‚tttsss‚rrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]9\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡ˡ„ƒƒ‚‚ 6 !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@BBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqq‚rrr‚sss‚tttƒuuu‡vvv…www‡vvvƒuuu‚ttt‚sss‚rrrqqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXX6WWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBB@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡ˡ„ƒƒ‚‚ = !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnoooppp‚qqqrrr‚sssƒttt„uuuvvv„uuuƒttt‚sssrrr‚qqqpppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\=[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Ë̇„ƒ‚‚‚  !!!"""###2$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo‚pppqqq‚rrrƒsssƒttt“uuuƒtttƒsss‚rrrqqq‚pppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXX2WWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Ì̇„ƒ‚‚‚  -!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEGGGHHHIIIJJJKKKLLLMMMNNNOOOPPP QQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnn‚oooppp‚qqq‚rrrƒsss…ttt‹uuu…tttƒsss‚rrr‚qqqppp‚ooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPP-OOONNNMMMLLLKKKJJJIIIHHHGGGEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Ì̇„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000#222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo‚ppp‚qqq‚rrr„sss‘ttt„sss‚rrr‚qqq‚pppooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVV#UUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ„‡Ì̇„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>@@@ BBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOO PPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnn‚ooo‚ppp‚qqqƒrrrˆsssƒtttˆsssƒrrr‚qqq‚ppp‚ooonnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZ YYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOO NNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBB@@@>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Ì̇„ƒƒ‚‚  3!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmm‚nnnoooƒpppƒqqq„rrrsss„rrrƒqqqƒpppooo‚nnnmmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUU3TTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Ì͇„ƒ‚‚‚   !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMM NNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkk‚lllmmm‚nnnoooƒppp„qqq‘rrr„qqqƒpppooo‚nnnmmm‚lllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXX WWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::888777666555444333222111000///...---,,,+++ ***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ„‡Í͇„ƒ‚‚‚‚  !!!"""###$$$,%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklll‚mmmnnnƒoooƒpppˆqqqƒrrrˆqqqƒpppƒooonnn‚mmmlllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRR,QQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ„‡Í͇„ƒƒ‚‚  (!!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJ KKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkk‚lll‚mmm‚nnnƒooo…ppp‹qqq…pppƒooo‚nnn‚mmm‚lllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUU TTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJ(IIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Í͇„ƒƒ‚‚  !!!"""###$$$%%%&&&'''(((&)))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkk‚lll‚mmm‚nnn„ooo‘ppp„ooo‚nnn‚mmm‚lllkkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPP&OOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Í͇…ƒ‚‚‚  !!!"""###!$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFF GGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjj‚kkk‚lll‚mmm„nnn“ooo„nnn‚mmm‚lll‚kkkjjjiiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRR QQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFF!EEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒ…‡Í·„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++ ,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggg‚hhhiiijjj‚kkk‚lll„mmm†nnn‡ooo†nnn„mmm‚lll‚kkkjjjiii‚hhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMM LLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++ ***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„‡Î·„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAA BBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhh‚iiijjjƒkkk‚lll…mmmnnn…mmm‚lllƒkkkjjj‚iiihhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPP OOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Î·„ƒƒ‚‚  !!! """###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefff‚ggghhh‚iii‚jjj‚kkk…lllmmm…lll‚kkk‚jjj‚iiihhh‚gggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///... ---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡ÎΈ„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>> ???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggg‚hhh‚iiiƒjjjƒkkk“lllƒkkkƒjjj‚iii‚hhhgggfffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLL KKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ„ˆÎχ„ƒ‚‚‚‚  !!!""" ###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccddd‚eeefffggg‚hhhƒiiiƒjjj‰kkklll‰kkkƒjjjƒiii‚hhhgggfff‚eeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000/// ...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„‡Ïχ„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999::: ;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeee‚fff‚ggg‚hhhƒiii†jjj‰kkk†jjjƒiii‚hhh‚ggg‚fffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHH GGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Ïχ…ƒ‚‚‚‚  !!!"""### $$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@ AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeee‚fff‚ggg„hhh…iii‹jjj…iii„hhh‚ggg‚fffeeedddcccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKK JJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000/// ...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ…‡Ïψ„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((( )))***+++,,,---...///000111222333444555666 777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbb‚cccddd‚eee‚fffƒggg„hhhiii„hhhƒggg‚fff‚eeeddd‚cccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDD CCCBBBAAA@@@???>>>===<<<;;;:::999888777666 555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„ˆÏЇ„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---... ///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbb‚cccddd‚eeeƒfff„ggg‘hhh„gggƒfff‚eeeddd‚cccbbbaaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>=== <<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡ÐЇ…ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((( )))***+++,,,---...///000111222333 444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___‚```aaabbb‚ccc‚dddƒeee„fff‘ggg„fffƒeee‚ddd‚cccbbbaaa‚```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@ ???>>>===<<<;;;:::999888777666555444333 222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ…‡ÐЈ„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,--- ...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```‚aaa‚bbb‚ccc‚ddd„eee“fff„eee‚ddd‚ccc‚bbb‚aaa```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888 777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„ˆÐч„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111 222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___‚```aaa‚bbbƒcccƒddd•eeeƒdddƒccc‚bbbaaa‚```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<< ;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„‡Ñч„„‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___‚```‚aaa‚bbb„ccc‡ddd…eee‡ddd„ccc‚bbb‚aaa‚```___^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚„„‡Ñш„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]‚^^^___ƒ```‚aaaƒbbb‡ccc‡ddd‡cccƒbbb‚aaaƒ```___‚^^^]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ„ˆÑÒ‡„ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\‚]]]^^^‚___ƒ```ƒaaa†bbb‰ccc†bbbƒaaaƒ```‚___^^^‚]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒƒ„‡ÒÒ‡…ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\‚]]]‚^^^‚___„```…aaa‹bbb…aaa„```‚___‚^^^‚]]]\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ…‡ÒÒˆ„ƒƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[‚\\\‚]]]‚^^^ƒ___†```‹aaa†```ƒ___‚^^^‚]]]‚\\\[[[ZZZYYYXXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒƒ„ˆÒÓ‡„ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWW‚XXXYYYZZZ‚[[[\\\ƒ]]]ƒ^^^…___```…___ƒ^^^ƒ]]]\\\‚[[[ZZZYYY‚XXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ„‡ÓÓ‡…ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWW‚XXXYYYZZZ‚[[[ƒ\\\ƒ]]]…^^^___…^^^ƒ]]]ƒ\\\‚[[[ZZZYYY‚XXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒ…‡ÓÓˆ„ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWW‚XXXYYY‚ZZZƒ[[[ƒ\\\…]]]^^^…]]]ƒ\\\ƒ[[[‚ZZZYYY‚XXXWWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒƒ„ˆÓÔ‡„„‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVV‚WWWXXX‚YYY‚ZZZ„[[[…\\\]]]…\\\„[[[‚ZZZ‚YYYXXX‚WWWVVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚„„‡ÔÔ‡…ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUU‚VVVWWW‚XXX‚YYY„ZZZ…[[[\\\…[[[„ZZZ‚YYY‚XXXWWW‚VVVUUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒƒ…‡ÔÔˆ„ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTT‚UUUVVV‚WWW‚XXX„YYY…ZZZ[[[…ZZZ„YYY‚XXX‚WWWVVV‚UUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ„ˆÔÕ‡…ƒ‚ƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTT‚UUU‚VVV‚WWW„XXX…YYYZZZ…YYY„XXX‚WWW‚VVV‚UUUTTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ƒ‚ƒ…‡ÕÕˆ„ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSS‚TTT‚UUU‚VVV„WWW…XXXYYY…XXX„WWW‚VVV‚UUU‚TTTSSSRRRQQQPPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ„ˆÕÖ‡…ƒ‚‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOO‚PPPQQQRRR‚SSS‚TTTƒUUUƒVVV…WWWXXX…WWWƒVVVƒUUU‚TTT‚SSSRRRQQQ‚PPPOOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚ƒ…‡ÖÖ‡…ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNN‚OOOPPPQQQ‚RRR‚SSSƒTTTƒUUU†VVV‹WWW†VVVƒUUUƒTTT‚SSS‚RRRQQQPPP‚OOONNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ…‡ÖÖˆ„„‚‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMM‚NNNOOOPPP‚QQQ‚RRRƒSSSƒTTT†UUU‹VVV†UUUƒTTTƒSSS‚RRR‚QQQPPPOOO‚NNNMMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚„„ˆÖׇ…ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLL‚MMMNNNOOO‚PPP‚QQQƒRRRƒSSS‡TTT‰UUU‡TTTƒSSSƒRRR‚QQQ‚PPPOOONNN‚MMMLLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ…‡×׈„„‚‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKK‚LLLMMMNNN‚OOO‚PPPƒQQQ„RRR‡SSS‡TTT‡SSS„RRRƒQQQ‚PPP‚OOONNNMMM‚LLLKKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚„„ˆר‡…ƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJ‚KKKLLLMMM‚NNN‚OOOƒPPP„QQQ‰RRRƒSSS‰RRR„QQQƒPPP‚OOO‚NNNMMMLLL‚KKKJJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚ƒƒ…‡ØØˆ„„‚‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIII‚JJJKKK‚LLLMMMƒNNN‚OOO…PPP•QQQ…PPP‚OOOƒNNNMMM‚LLLKKK‚JJJIIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚„„ˆØÙ‡…ƒƒ‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHH‚IIIJJJ‚KKK‚LLL‚MMMƒNNN„OOO•PPP„OOOƒNNN‚MMM‚LLL‚KKKJJJ‚IIIHHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒƒ…‡ÙÙˆ„„‚‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGG‚HHHIII‚JJJ‚KKK‚LLLƒMMM„NNN•OOO„NNNƒMMM‚LLL‚KKK‚JJJIII‚HHHGGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚‚„„ˆÙÙˆ…ƒƒ‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFF‚GGGHHH‚III‚JJJ‚KKKƒLLL…MMM“NNN…MMMƒLLL‚KKK‚JJJ‚IIIHHH‚GGGFFFEEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒƒ…ˆÙÚˆ„„‚ƒ‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDD‚EEEFFFGGG‚HHH‚III‚JJJ„KKK„LLL“MMM„LLL„KKK‚JJJ‚III‚HHHGGGFFF‚EEEDDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚ƒ‚„„ˆÚÚˆ…ƒƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCC‚DDDEEEFFF‚GGG‚HHHƒIIIƒJJJ…KKK‘LLL…KKKƒJJJƒIII‚HHH‚GGGFFFEEE‚DDDCCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒƒ…ˆÚÛˆ„„‚ƒ‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBB‚CCCDDD‚EEEFFFƒGGG‚HHHƒIII†JJJKKK†JJJƒIII‚HHHƒGGGFFF‚EEEDDD‚CCCBBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒ‚„„ˆÛÛˆ…ƒƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAA‚BBBCCC‚DDD‚EEE‚FFF‚GGG„HHH†IIIJJJ†III„HHH‚GGG‚FFF‚EEE‚DDDCCC‚BBBAAA@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚‚‚‚ƒƒ…ˆÛ܈„„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???‚@@@AAABBB‚CCC‚DDD‚EEEƒFFFƒGGG‡HHH‹III‡HHHƒGGGƒFFF‚EEE‚DDD‚CCCBBBAAA‚@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ„„ˆÜ܈…ƒƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???‚@@@AAA‚BBB‚CCC‚DDDƒEEE„FFFˆGGG‡HHHˆGGG„FFFƒEEE‚DDD‚CCC‚BBBAAA‚@@@???>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚ƒƒ…ˆÜ݈„„ƒ‚‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===‚>>>???‚@@@AAA‚BBBƒCCCƒDDD„EEE‰FFFƒGGG‰FFF„EEEƒDDDƒCCC‚BBBAAA‚@@@???‚>>>===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚ƒ„„ˆÝ݈…„‚ƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<‚===>>>‚???@@@‚AAAƒBBBƒCCC„DDD—EEE„DDDƒCCCƒBBB‚AAA@@@‚???>>>‚===<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒ‚„…ˆÝÞˆ…ƒƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;‚<<<===‚>>>???ƒ@@@‚AAAƒBBB…CCC•DDD…CCCƒBBB‚AAAƒ@@@???‚>>>===‚<<<;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚ƒƒ…ˆÞÞˆ…„ƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::‚;;;<<<‚===‚>>>‚???ƒ@@@ƒAAA…BBB“CCC…BBBƒAAAƒ@@@‚???‚>>>‚===<<<‚;;;:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚‚ƒ„…ˆÞ߈…ƒƒƒ‚‚‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999‚:::;;;‚<<<‚===‚>>>ƒ???ƒ@@@†AAA‘BBB†AAAƒ@@@ƒ???‚>>>‚===‚<<<;;;‚:::999888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚ƒƒƒ…ˆßàˆ„„ƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777‚888999:::‚;;;‚<<<‚===ƒ>>>„???†@@@AAA†@@@„???ƒ>>>‚===‚<<<‚;;;:::999‚888777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚ƒ„„ˆààˆ…„ƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666‚777888‚999:::‚;;;ƒ<<<‚===„>>>†???@@@†???„>>>‚===ƒ<<<‚;;;:::‚999888‚777666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚‚‚‚ƒ„…ˆàህƒƒƒ‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555‚666777‚888999‚:::ƒ;;;ƒ<<<„===‡>>>‹???‡>>>„===ƒ<<<ƒ;;;‚:::999‚888777‚666555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚ƒƒƒ…ˆáህ„ƒ‚‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444‚555666‚777‚888‚999‚:::ƒ;;;„<<<ˆ===‰>>>ˆ===„<<<ƒ;;;‚:::‚999‚888‚777666‚555444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!! ‚ ‚ ‚‚‚‚ƒ„…ˆá∅„ƒ‚‚‚‚ ‚ ‚ !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333‚444555‚666‚777‚888‚999„:::„;;;‹<<<===‹<<<„;;;„:::‚999‚888‚777‚666555‚444333222111000///...---,,,+++***)))((('''&&&%%%$$$###"""!!! ‚ ‚ ‚‚‚‚ƒ„…ˆâ≅ƒƒƒ‚‚‚ ‚ ‚ !!!"""###$$$%%%&&&'''((()))***+++,,,---...‚///000111222‚333444‚555‚666‚777ƒ888ƒ999…:::—;;;…:::ƒ999ƒ888‚777‚666‚555444‚333222111000‚///...---,,,+++***)))((('''&&&%%%$$$###"""!!! ‚ ‚ ‚‚‚ƒƒƒ…‰â㈅„ƒ‚ƒ‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---...‚///000111‚222333‚444‚555‚666ƒ777„888„999—:::„999„888ƒ777‚666‚555‚444333‚222111000‚///...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚ƒ‚ƒ„…ˆã䈅„ƒ‚‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---‚...///000‚111222‚333‚444ƒ555‚666„777…888•999…888„777‚666ƒ555‚444‚333222‚111000///‚...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚‚‚ƒ„…ˆä䉅ƒƒƒ‚‚‚‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,---‚...///‚000111‚222‚333ƒ444ƒ555ƒ666†777“888†777ƒ666ƒ555ƒ444‚333‚222111‚000///‚...---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚‚ƒƒƒ…‰ä刅„ƒƒ‚‚‚ ‚ ‚  !!!"""###$$$%%%&&&'''((()))***+++,,,‚---...‚///‚000111ƒ222‚333ƒ444„555†666‘777†666„555ƒ444‚333ƒ222111‚000‚///...‚---,,,+++***)))((('''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚‚ƒƒ„…ˆå戅„ƒƒ‚‚‚ ‚ ‚  !!!"""###$$$%%%&&&‚'''((()))***+++‚,,,---‚...///‚000ƒ111‚222ƒ333„444‡555666‡555„444ƒ333‚222ƒ111‚000///‚...---‚,,,+++***)))(((‚'''&&&%%%$$$###"""!!!  ‚ ‚ ‚‚‚ƒƒ„…ˆææ‰…„ƒ‚ƒ‚‚ ‚ ‚  !!!"""###$$$%%%&&&'''‚((()))***‚+++,,,‚---...‚///ƒ000‚111„222„333‡444555‡444„333„222‚111ƒ000‚///...‚---,,,‚+++***)))‚((('''&&&%%%$$$###"""!!! ‚ ‚ ‚ ‚ƒ‚ƒ„…‰æçˆ…„ƒƒ‚‚‚‚ ‚ ‚ ‚ !!!"""###$$$%%%&&&'''‚((()))***‚+++‚,,,---‚...ƒ///ƒ000ƒ111„222ˆ333‹444ˆ333„222ƒ111ƒ000ƒ///‚...---‚,,,‚+++***)))‚((('''&&&%%%$$$###"""!!! ‚‚ ‚ ‚ ‚‚‚ƒƒ„…ˆç牅„ƒƒ‚‚‚‚ ‚ ‚ ‚ ‚!!!"""###$$$%%%&&&'''‚((()))‚***‚+++,,,‚---ƒ...ƒ///ƒ000…111‰222‡333‰222…111ƒ000ƒ///ƒ...‚---,,,‚+++‚***)))‚((('''&&&%%%$$$###"""‚!!! ‚‚ ‚ ‚ ‚‚‚ƒƒ„…‰ç艅„ƒƒ‚‚‚‚ ‚ ‚ ‚ !!!"""###‚$$$%%%&&&‚'''(((‚)))***‚+++‚,,,ƒ---ƒ...ƒ///…000›111…000ƒ///ƒ...ƒ---‚,,,‚+++***‚)))(((‚'''&&&%%%‚$$$###"""!!! ‚‚ ‚ ‚ ‚‚‚ƒƒ„…‰è鈆„ƒƒ‚‚‚‚ ‚ ‚ ‚‚ !!!"""###‚$$$%%%&&&‚'''‚((()))‚***‚+++ƒ,,,ƒ---ƒ...…///›000…///ƒ...ƒ---ƒ,,,‚+++‚***)))‚(((‚'''&&&%%%‚$$$###"""!!! ‚‚‚ ‚ ‚ ‚‚‚ƒƒ„†ˆéꈆƒ„‚ƒ‚‚‚ ‚ ‚ ‚‚‚ !!!"""###‚$$$%%%‚&&&'''‚(((‚)))‚***ƒ+++ƒ,,,„---…...™///…...„---ƒ,,,ƒ+++‚***‚)))‚((('''‚&&&%%%‚$$$###"""!!!‚ ‚‚‚ ‚ ‚ ‚‚ƒ‚„ƒ†ˆêꉅ„„‚ƒ‚‚‚ ‚ ‚ ‚‚‚ ‚!!!"""‚###$$$‚%%%&&&‚'''‚(((‚)))ƒ***ƒ+++„,,,…---™...…---„,,,ƒ+++ƒ***‚)))‚(((‚'''&&&‚%%%$$$‚###"""‚!!! ‚‚‚‚ ‚ ‚ ‚‚ƒ‚„„…‰ê뉅„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚ ‚!!!"""‚###$$$‚%%%‚&&&‚'''‚(((ƒ)))ƒ***„+++…,,,™---…,,,„+++ƒ***ƒ)))‚(((‚'''‚&&&‚%%%$$$‚###"""‚!!! ‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„…‰ë쉅„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚‚ ‚!!!‚"""###‚$$$‚%%%‚&&&‚'''ƒ(((ƒ)))„***†+++—,,,†+++„***ƒ)))ƒ(((‚'''‚&&&‚%%%‚$$$###‚"""‚!!! ‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„…‰ì쉆„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚‚‚‚ !!!‚"""‚###‚$$$‚%%%‚&&&ƒ'''ƒ(((„)))†***—+++†***„)))ƒ(((ƒ'''‚&&&‚%%%‚$$$‚###‚"""!!!‚ ‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„†‰ì퉆„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚‚‚‚‚ ‚!!!"""‚###ƒ$$$‚%%%ƒ&&&ƒ'''„(((†)))—***†)))„(((ƒ'''ƒ&&&‚%%%ƒ$$$‚###"""‚!!!‚ ‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„†‰í…ƒƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚ ‚!!!‚"""‚###ƒ$$$ƒ%%%ƒ&&&„'''‡(((•)))‡(((„'''ƒ&&&ƒ%%%ƒ$$$‚###‚"""‚!!!‚ ‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ……‰î…ƒƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ ‚!!!‚"""ƒ###ƒ$$$ƒ%%%„&&&‡'''•(((‡'''„&&&ƒ%%%ƒ$$$ƒ###‚"""‚!!!‚ ‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ……‰ï„„ƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ƒ ‚!!!‚"""ƒ###„$$$„%%%‡&&&•'''‡&&&„%%%„$$$ƒ###‚"""‚!!!ƒ ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒ„„…Šïð‰†„„ƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒ ‚!!!ƒ"""„###„$$$‡%%%•&&&‡%%%„$$$„###ƒ"""‚!!!ƒ ‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ‚‚ƒƒ„„†‰ðñ‰†„„ƒƒ‚‚‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ ƒ!!!ƒ"""…###‡$$$•%%%‡$$$…###ƒ"""ƒ!!!ƒ ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ‚‚ƒƒ„„†‰ñò‰†„„ƒƒ‚‚ƒ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ „!!!…"""†###—$$$†###…"""„!!!ƒ ‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ƒ ‚‚ƒƒ„„†‰ò󉆄„ƒƒ‚ƒ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒƒ„ „!!!‡"""—###‡"""„!!!„ ƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ƒ‚ƒƒ„„†‰óô‰†„„ƒƒ‚ƒ‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ„… ‡!!!—"""‡!!!… „ƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ƒ‚ƒƒ„„†‰ôôІ„„ƒƒƒ‚‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„„‡ ™!!!‡ „„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ‚ƒƒƒ„„†ŠôõІ„„ƒƒƒ‚ƒ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ƒ‚ƒƒ„„‡› ‡„„ƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ƒ ‚ƒƒƒ„„†ŠõöІ„„ƒƒƒƒ‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚ƒ‚ƒƒƒƒ…††…ƒƒƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ƒƒƒƒ„„†Šö÷І„„„ƒ‚ƒ‚ ƒ ‚ ‚ ‚ ‚‚‚‚‚‚‚ƒ‚‚ƒƒƒ„„†Ÿ†„„ƒƒƒ‚‚ƒ‚‚‚‚‚‚‚‚ ‚ ‚ ƒ ‚ ƒ‚ƒ„„„†Š÷øŠ†…ƒ„ƒƒ‚ƒ ‚ ‚ ‚ ‚ ƒ‚‚‚‚‚ƒ‚‚ƒƒƒ„„†ŽƒŽ†„„ƒƒƒ‚‚ƒ‚‚‚‚‚ƒ‚ ‚ ‚ ‚ ƒ ‚ƒƒ„ƒ…†ŠøùІ…„ƒƒƒƒ‚ ‚ ƒ ‚ ‚ ‚‚ƒ‚‚ƒ‚ƒ‚ƒƒ„……‹‹‹……„ƒƒ‚ƒ‚ƒ‚‚ƒ‚‚‚ ‚ ƒ ‚ ‚ ƒƒƒƒ„…†ŠùúІ…„ƒƒƒƒƒ ‚ ‚ ƒ ‚ ‚‚ƒ‚ƒ‚ƒ‚ƒ„ƒ……ŠŠ……ƒ„ƒ‚ƒ‚ƒ‚ƒ‚‚‚ ƒ ‚ ‚ ƒ ƒƒƒƒ„…†ŠúûІ…„„ƒƒ‚ƒ ƒ ‚ ‚ ƒ ‚‚ƒ‚ƒƒ‚ƒ„ƒ……‰“‰……ƒ„ƒ‚ƒƒ‚ƒ‚‚ƒ ‚ ‚ ƒ ƒ ‚ƒƒ„„…†ŠûüІ…„„ƒƒƒƒ ‚ ƒ ‚ ƒ ‚‚ƒƒ‚ƒƒ„ƒ……ˆ—ˆ……ƒ„ƒƒ‚ƒƒ‚‚ƒ ‚ ƒ ‚ ƒ ƒƒƒ„„…†ŠüýІ…„„ƒ„‚ƒ ƒ ‚ ƒ ‚ ƒƒ‚ƒƒƒƒ„„†‡›‡†„„ƒƒƒƒ‚ƒƒ‚ ƒ ‚ ƒ ƒ ‚„ƒ„„…†ŠýþІ……ƒ„ƒƒƒ ‚ ƒ ƒ ‚ ƒƒƒƒƒƒ„„…‡Ÿ‡…„„ƒƒƒƒƒƒ‚ ƒ ƒ ‚ ƒ ƒƒ„ƒ……†ŠþþЇ…„„ƒƒ„‚ ƒ ƒ ƒ ‚ ƒƒƒƒ„„„…†£†…„„„ƒƒƒƒ‚ ƒ ƒ ƒ ‚ „ƒƒ„„…‡ŠþþЇ…„„„ƒƒƒ ƒ ƒ ƒ ƒ ƒƒƒƒ„„…‡‹‹‡…„„ƒƒƒƒƒ ƒ ƒ ƒ ƒ ƒƒ„„„…‡Šþþ‚Ї……„ƒ„ƒƒ ƒ ƒ ƒ ƒ ƒƒ„„„…†‰•‰†…„„„ƒƒƒ ƒ ƒ ƒ ƒ ƒ„ƒ„……‡Šþ‚þƒŠ‡†„„„ƒ„ƒ ƒ ƒ ƒ ƒ „ƒ„„…†ˆ›ˆ†…„„ƒ„ƒ ƒ ƒ ƒ ƒ „ƒ„„„†‡Šþƒþ„‹‡……„ƒ„ƒ„ ƒ ƒ ƒ „ ƒ„„…†‡¡‡†…„„ƒ„ ƒ ƒ ƒ „ ƒ„ƒ„……‡‹þ„þ…‹‡……„„„ƒ„ ƒ ƒ „ ƒ „„…†‡…‡†…„„ƒ „ ƒ ƒ „ ƒ„„„……‡‹þ…þ†‹‡†…„„ƒ„„ ƒ „ ƒ „ „……‡‹“‹‡……„„ ƒ „ ƒ „ „ƒ„„…†‡‹þ†þ‡‹‡†…„„„„„ ƒ „ „ „ ……†‰‰†……„ „ „ ƒ „ „„„„…†‡‹þ‡þˆŒ‡†…„„„„„ „ „ „ „ …†‰£‰†…„ „ „ „ „ „„„„…†‡Œþˆþ‰Œ‡†……„„„„ „ … „ … †‡ŽŽ‡†… „ … „ „ „„„……†‡Œþ‰þ‹‹ˆ†……„„„… „ „ … † ‡‰‰‡† … „ „ … „„„……†ˆ‹þ‹þŒ‹ˆ††„…„…„ … … … † ‰¥‰† … … … „ …„…„††ˆ‹þŒþŒˆ†…………„… … … † ˆ ‘ˆ † … … … „…………†ˆŒþþŽŒˆ‡……………… … † ‡ Š ŸŠ ‡ † … … ……………‡ˆŒþŽþˆ††…………† † † ‰ © ‰ † † † …………††ˆþþ‘Œˆ‡†…†……† ‡ ‡ — ‡ ‡ † ……†…†‡ˆŒþ‘þ’ˆ‡††…†…‡ ‡ Š ¥ Š ‡ ‡ …†…††‡ˆþ’þ“‰‡†††††‡ ˆ ˆ ‡ †††††‡‰þ“þ•ˆˆ†††‡†ˆ ‹ £ ‹ ˆ †‡†††ˆˆþ•þ–‰ˆ†‡†‡‡Š “ ‡ “ Š ‡‡†‡†ˆ‰þ–þ˜‰ˆ‡†‡‡‰Œ ¡ Œ ‰‡‡†‡ˆ‰þ˜þ™Ž‰ˆ‡‡‡ˆ‹¯ ‹ˆ‡‡‡ˆ‰Žþ™þšŽŠˆˆ‡ˆ‰¡ ‰ˆ‡ˆˆŠŽþšþœŽŠˆˆˆ‰Š³Š‰ˆˆˆŠŽþœþžŽŠ‰ˆ‰‰¥‰‰ˆ‰ŠŽþžþŸŠ‰‰‰‹•‹•‹‰‰‰ŠþŸþ¡‹‰‰ŠŽ©ŽŠ‰‰‹þ¡þ¢‹ŠŠ‹’—’‹ŠŠ‹þ¢þ¤‹‹‹±‹‹‹þ¤þ¦Œ‹Œ£Œ‹Œþ¦þ¨‹Žš…šŽ‹þ¨þ©‘±‘þ©þ«’Ž“¡“Ž’þ«þ­’¿’þ­þ¯“’³’“þ¯þ±”•¥•”þ±þ³•‘‘•þ³þ¶•“¿“•þ¶þ¸––³––þ¸þº˜š£š˜þºþ½˜§ƒ§˜þ½þ¿›É›þ¿þ¿þÂþÅ ³ þÅþȤ¥¤þÈþ˲ƒ²þËþÎãþÎþÒÛþÒþÖÓþÖþÛÉþÛþà¿þàþæ³þæþî£þîþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒþþþþƒï Ù4 Paint Shop Pro ºœTRUEVISION-XFILE.gource-0.56/data/user.png0000644002342600234260000017232215152463042015176 0ustar andrewcandrewc‰PNG  IHDR€‹Ÿ»úbKGDÿÿÿ ½§“ pHYs  šœtIMEæ+04ct IDATxÚì½y°­YU'ø[ûÜûæ)ßˑ̔©°°Ôpê¨j£Ê ‚°ŠþÇj»Ã¡¢T¤*¢¥QK-´,µÅ:"¥pÂ.TZJ…Ò   5AQIZ¥4iÖÁ„³’œÈ|ïe¾á¬Õìµ÷^kïýûr¸÷åZ™ï½{ÎýÎwÎù¾5üÖoýöD4Š l/ÛM¯øIÜxý8rä0:„`{{[«-¬V ”R»Ò…@ˆ@dõ .^¼^3Ο?sçÏáìÙ³xðÁñ™ÏÜ…ßÿýßÃoþæoƇ ,ìñ°—þï/Ç—}ù—âø‰8rø0öíßóçÏáÌ™³¤DØÚÚ’Õj…Õj…”V)eïÞYöÿÖ¿ëõ‚‹ë‹X¯×¸pá<Ök&fFJ 'OžÄ¹sçpöÁqß}÷áo?ý)¼ð…ÿk|1aÂÂi{Ãހ뮻GÅÖÖ:$´Zakk «Õ d»©ÿ(Ž}ÙùK) "ú7÷Lˆ´ãˆÖë5.^¼ˆ .€yM[Ûû°½µ…ÓgÏàîÏ|ïÿð²—½,¾¼°aaÇ^ÿú×ãÉO~2Ž?Ž­­-¬×k!)%¤”(˜¹:|ëò18oãТAƒ‚ª—7!¤üž€Ùÿ>åà@˜qñâëõE Ÿ/=sÿíÎ;ñ;oûüêüÕørÃ"„…Y{ÊSž†_ø…ŸÇ©+¯Æáƒ‡dµ*N^ R.Ë€Qp+BâSyëÔ'@Оo‚ЂÏ$LÐÁZ|ñ"RJX¯×¸ë®»è£ý(¾ÿû¿?¾ø°aOL{Ó›Þ„cÇŽáÊ+¯”#GŽxç-û`ž@6Åq³:btÏÿ,WöñV´Z#W²ð»9 Iw®¥Z¸xáî»ï^ºí¶Ûñ=ßó¢¸ Â"„]¾öö[ÞŽ®¿ŸúÔ§pâÄ 9|ø0¶¶¶³ñÏÉ`áifO,¹~0Üâýý9øçJD„‡ `›Ç}%‘ng€ÁÈPRëIŸ;w÷Ü}7»pÇŽÅ­·ÞŠ—¼ä%qÑ„EÛÛöGôG8|ø0àСC²oß>4´DÕ×f$œa¤1À”½óèäg gî%0 Ž”ƒGuøâ‚‘¸J£T ÜŽe‚UˆÎœ9ƒx€Ž;†}èCxá _QX€°½c/}éKñOþÉ?ÅÑ£G°^¯åÀX­Vʤ½ÐÈ]uDGïûOiÏåñ·'ÒB#XšG®iÿƒçW‡ ×9†÷íðØO!¨˜@Àâ*Yj*ƒΟ?3gÎÐÖÖ>ñ‰OàùÏ~\XaÂv¯ýÒ/ý¾ò+¿DJ$ÛÛû†+Œô2“Ïó‚3ÌÍI%!Дñã‚Ai K. ˜ÉdûÒžïÂí(Ü ® è§V :ÉPo‚­ò/ª)Ñm·Ý†¼àq¡…EÛ=vÓM7áYÏzNœ8!D¤TÍ’Ùï|Y™ˆPÿTئ:D‰lL†¿ñgL„J'•šÛg³pÈæøMÖ/†Ž*ÌcP2Õ@~m®Ä&æ9É™ëk¬×k03þúMßþmß^X€°ÇÏ^ñŠüÿNºªºÙ ËÐlèVFÙiÏ»”Š@P üüìŒÇ|¨Г°)„X'œ¯©Xñÿ¼c¡Ÿò33 A@<ÄÄÌË•€ˆé´ sîÜ9üõ'þš¾óùßbX€°ÇÆ~õ×~×?éI8|ø®¼ò¤¤”²c2ðNƒ{Ú_è’.1-ˆròOËS¼#¨CšÁ—ÃŒŒÏàçUA œ ƒ~ ÌP;½ÃÏQÂÑFgNÝÂ@†Äà Hî0ÄUD„û￟þÛOÓ¡ƒ‡ð­ßú­q†E{tì]ïzöíÛ‡ÈÀ¬ ]²~qúʼnÏ1ú|›%¤ÁI–² ±1c‘~ÚØ@Ò¨›Ò* Æ$$Z)´ibÖcØdƒ…˜‚ð¼1œãŽ2—je‘]šÆ÷Þs/Ο;OwÞu'¾ëù®¸XÃ"„=2vóoÿžþ…ë äð¡ÃŒB UP§åòTuÏ4]›Â$hôÆ%Ãw¯K 2ÌiÀO‘gp°‘ð íPÎÅ3~º@‚‚ó³2yÌÄp_YÌú€2†wûŸ¿þëñÃ?öc8tà€ìÛ·Ï5wB"BçÝ;‡OÕucS3˜²+ö]`E‡ÆRŠè"*$“vïÐ8VçÚÓ:eü»sìêÄmFßsüíëyJ¨Áþ$&Úœ@†„f”R©ÓǾùìûΟÇÅõš>øÁàÅ/þÁ¸Ã"„=<ûÝßý]Üpà rðÀ¦£_Ñjn~–å/t€éRZ½­ €KÞ ç@Xtì­A;ל¯cï(˧ÎÌõP t?sÏ5s¶é;ž7À²nƒg$Õª Æúâ÷Ü{}Ó7~ào|#¾á¾!.î°aËvë­·âꫯ뮩4yÉB<>Û' 쓇¦>Þ6‡/Ý*Þ^1&Ÿ9ûîIÒŽöéa QÈ6‰×U{Ž=ö?@<&ÐL‚@_ Tjj]-CAãñlð¸pá>üáÓ‹^šCaÂ&ö_þËoaß>ÂSžò49tèPÎp‹ƒ7ö>u^ÜR=}öÿhšåáûŸ’ˆcýÌ0ûÁa»ƒÆHýŒŽÝ`õ"àNÂV$%›/36€X[¯ÙÁOcðA‰/2î¾÷nú«~?üïþ]\ða²ýéŸÞŠ­­Nž<)ƒsOÍy/™“§¢íð_U…¹ ΘAâ>“Ž¡ì :Ü%lzKÙ}“rOAºšA|°hA`0JÓ¸¾F'7áæô}Þÿý€€~öç~·ÜrK\üažØÎÿOpüø Ù¿uêDÖÁSãøO2y*`Á8 °KÌöda>`iº×9qŒƒ]ÌmòWzÖ»à¢Õ€›“<âÆ ËÏq@F8J¤ö"úÆs_”s$"œ;Üÿ}ìcÃýÐÅMà‰hï{ßûpøðaÙ·½ 1ð«J×&Ù}Ú‡hé¾—w¶ydò`2 &Ì•¶i³r™hõNzÈî;ñ¸ÆùG°‹äá´…ã» ÐMŸ={ò9zô˜lWçOÞùMœ¿y<ÑÞsþî}ip#8fSþwƒ¹R}ŸT:á“;'é±(ßDz\Ha^³¿^}~¢öÜTž7flÉßþiaºØó¹ áàÁƒ8uꤼîu¯‹›#,*€'‚½ý–·ãÉ_ðd¡®±ë8þê©N¤]&WJŸíÛ?]ÖŽ&î¶´6°ôMÖÉÝ¥ž€B?22ø}¿‰,ãý¦)Œîx¬kfÌ–³RU,UVˆ|æî»é3w}ßûÝß7I€°ËÑÞûÞ÷àØÑã’VÉaü)5êf›ä¥š÷ååd‹=é Ht?hVžÃ:9œf ³(¦ƒü{:ªÙ*–›¾Ád@̰†ü¹¶~ƒ¨|DŸ³ ¤|DV«UkØ@” ¼ã+€ËÝù/‚±0¹ƒ›U $þ¿VRLe Jf/<9}M7 Öm[³®;›Lϼ^ûªEi¿.\Äí·œ^÷+¿‚[ßýî¸y"„íEûÓ?ýS|õW5þàþW_}5>"–¢Ÿ¨LC&/ÛLO ËbÒ ž›Ñ_zðdzٿ;®Ó,jšCìËB2'ŸGØ»[joª‡ºg ´N‰ôŽ;î |àø©Ÿú©¸™"„í%ûó?ÿs|é—~)n¹å\sÍ5rðàÁÊ/–RrÓ¼Ôóû‰ž¸DÍznØl{XqÚß™¬Ÿ™C=ÄÓ³{Êrš™¤D¡….2‚Ü\ ë5ØTýóï½ï>ºýãÇÿðÇM l/Ø}÷݇'NàÖ[oʼn'd{{Û9v²ìçüGè‰lÔ0èfX ¹ÐÐJ€HÜånUqÔÓ~ƒ×÷±Ø=w´P +‚V8ÉdþÃki0ZK›_çÜÿ>sÏþwÄÍu™ÛV|{ßNœ8÷¾÷½8räˆlmm¹Øž çqÈø=–?'MM­”'‘h™…ôVÅ.å ô+`@©íp¯ExØeã3´ü*)%0óT0t¿f™}ƒ}%*ÇÐ÷E ©ÌhcHß‘+áè±c"—¶Í'l[Ììq;uêÞûÞ÷âðáò½½U†Í콓·<ñ¸Çg%±ëÀ°¤ }–’›‚h¡×¦Ô>ÿ4>7ußWÞ6½»[ÆY JTgìyÞ»{ƒõ,¯ãÇŽãMo|£ü‹ñíqQ¶í¦›n³Ÿýl=z´eþ†Ö™(u´Î6ôDû\$$ß柳ëâx#>g ¢¶Y¯3ý~ªà eVOC‚ü>aáöÜ^'ˆÙêÿ̧ív1»xâg Êñ‰gÏ>ˆ¿üËÿ~äG~$.ˆa»ÉÞýîwãØ±cSç_&Jû¡®êøö¹ô P™9m·o 2YÞÃä-{ŸŽ¥ÓkúLùü€i,˼À#µfm0,³x“²¨þóüùóøÄ'>Aßc…í{ßûÞ‡ãÇÌßr¥¨òáü^†Tå"¨ÎQØýÃgJÔÁIP28yH‰Ì@ÞÒ,†ym/õПkû M¾g¥…ßü`{{7Þx£üÌÏüL\Â/{ÊSžRÿ‘#G$¥Ô £ãã™=Ùyˆ­Âf™ì›ç½³&d»º:k©¾P ³ c_m‚ó]"êƒGWÐÓŽï!ëå¿·¡@t²à6€lïÛ‡n¸A^þ¼<.ˆa‡Ý~ûíxÿûß_¿»±»ÄÍ);ÛÌ2üÿç|5ÿ![ͤ¥ +ð ,“é#A¤Væ¶Ý=¡¸®  rSšÐmþìÎ׿ÿàO†üóoþ–¸&"„=Öögög8pà@–v°¨fúdÜD—!†ãÿ|± PµÖ­JžlP# Ù A²|jdM“íÓü’Řº‡SÚíÊ(`5ž¦a%ÿKDpèð!|ýÿô?J\ÂC{×­ïÂöö¶ìÛ·¯.;q·*Mª[ôóHÄêk‡Õ§4aÔ™§”Ú 7ËW ’‰#wГÎ,Ò&I@¡¡Jêœu 4G;v ¯{Ýëåû¿ÿûâ¢Øã¶Š`÷Û-·Ü‚ãÇŽËáÇ«vK/ãP!¡¡*ˆA¯G%Lå³Å>ˆžÆö&ˆ“`ä²}NLôH0/BdÇü“…Ê ¼~9˜B­8pàŽ;ö’£Gâƒü`\Q„=ök¿ö+¸òÊ+åð‘CN¸kêÛ¬ŒÌÿ‘õsî™;í¿Vy™ïª[ÀC“ âšeô¦™5ŒS= *B[‘9Ï™ ¹¸3>~òŠ+äYÏzžñwþN\Âiû‡_ýñe_ö*ìæ¿«æ=æÓAñ9> @³tê1£¬j°|ëôNtN5?OËòÜK`-ùUÖ’xThA –v¨†®¼òJù×ßPп”Ãv“­V+¬×k¼ÿïÇ¡ƒ‡ (èñõ÷_ÝßÃ-³Óµ¨;|!ËÛ¹4±8]Óv7ƪ‰s‘8·/ “u.ÏsrnÒWœr)$O·Å6~=ëÞ&Éqꡇ§?ýé‹ ì‘°õz÷¼ç=8¸ÿ€ä/i>µÓÿÞá‡óLr§iO`ôVd‚ŠLhHå‡l<¥i&_·4V”ã‹¿O €S;·ÉÓi€¢Z•)"8°ïN]yJ^ÿŸþS\Â>_ûÃ?üCØ¿_(%··w@uª®MúazXسKÙÇo"%]ÐF ¸{w°4qÜýƒãË´Fð0œ†¾)À S¢ê%(À8vì8N?pZžóœF€°ÏÕÞòÖ·àø±c²oÿþ Æë9ç/šÜ®³: eÈ^‚¨±| (rä³õ>3Ÿ:_|hcð=Ä¿ÆJé Ò† û¦Ç*§Îë5®¿þ|Ý×ý³¸("„}®võUWãÀÁC€-ÿÞÿÓ" 4Ó£ {ÔËÐýÓRÍÖž“T¨_ÌÓ•M_©þ›dïuV wà}P &;Õ<É(d Db>‡õZð¤'=I^õó?øéŸí ½À„í{Ç;Þk®¹FÒj…¤ƒCîv§ž÷OÎQP½=.VšÀV9Ô.¯ë!Ή²Q uk(Ë»6²4†Ëkéçöûܯ sQü”©âgQ)•u^=)F2Ú>×­°Ä¸³5ŽçÎ]À>ðAzÙË^GTa—b¿ø‹¿ˆk¯½VųWr„ ’/åÃçïŠ,Šì²q}š|§vv£@FªÙeàýë Õ¦í|z2Ž›¼' Ád´xš)º«T*!ÌÀþ}ûðÌgþ]\wÝuqqD»ûÿý?"ӻɡgg!ƒC! ¹‡Ç šl»~sþݤö+_t¿L0oöˆöû·5Q Çÿš1Çhò÷!a®S‘]ŠàðÁƒòÊW¾2.Œa;Ùÿñc{{"â|7Og…*8¼°Ï7üÿ®ª hâ{‡K¤ÉB`*Ý<ä”;Ék@ÊØä8 †©•DÓÎuÉbMP «ím0s숶ÉÞö¶ßÃÉ“WHÍòMX#4s+]"Þ·ø~¢–ÝïX5¤~)L­ 4Ðûj¯»«†h±T.(Œ’Äýxzúh ¦*-EÀ8zô(>Œ›ßò–¸."„õö†7¼×\sµ4L?gl3DZ±¹»}w D3ÄÃdö¨ûã9úä„|"4 ÿdú }ZªÌoÈ2”ØÉ éÓÉ+f' ¼œvÛmqqDëíÆoÄÖÖVs¢=€Yé¦3Óïý ÛÁÀdÒC¶L“¾ÀÿïèDsç-²|hC"!~ŽD¦áitøCÙcžYʉ‘V ×]{­\ýõqQD+ö'r+öíÛ/«Ujwݦ=¯öæt?‹Ý»6 MÕçilã;Ifš¢1äöO&eCt2;ìÚÉöj²cë™C1 LlïÛ‡—¾ìeqAD€›o¾.œÃ¡CÁ"ÍQèB‘aTæCbèkWCAC:=4íMSÕN Ï¾Ó ‹àû 2Ãî%-\F⟊,& ƒ¬ô´jhçSV N?.?øƒ?G€°S§NáÔ©S"Õùë]Äè`à°‚cK,¼°]ý8Çíð‘¾Ú£Å[‘äêua+B*ƒY²XŒÈè¶;î\Bwi8MÎMa‚ Tlꫢ\@RJÃö¥”ÄÝpîñROÓ°ˆ» ø™ýˆÌÔö,Oiëv>ø B0ò̦Q¼“£î)ÄCåð¹¾û¤ó ’À’ )‡¥´Zá?ü‡WÇ%à‰k¿óÖ·âøñãsdž]²æ¯²C31lU´–¾5ÁÆ¢{6º]±ê¢ý]¾0HfÏU»Ñ ˜4¯—"…9o±'Mî= `kµÂ©S'åûñ‹ $ÀðÃ&µOz’Øè¤R/ ,Ôßçùìú`óÔÓ|­ ç˜zBq;eøCü˜…õ£cY¤žF+Ù\UØ×e(ïL«í-Üpãq‘DxâÙ-ïx¶·¶Ð³¸¬–¹½æÙb¨ýï“•À ·“<½‹6Ο¶ŽØaý}¬ *C=±TaˆÿëÈ"%øÄDR­rÑ &lÑ8,¯yÍkâ2‰ðıŸø‰ŸÀW\1mÇ9Y÷îÎZLÅæ)XØ.pÿ´S‰à¿;¶Û½hcÆ-‹Èõ©X­¶v ÝpOí<|¶û"ÀN<{ß J),~¡»ºúR5ƒ|Ä¡‚”y1J2LŸKß@KHÊcc3˜ê[ÉúÉ‹Ž ^ãú믗'NÄuàòµ·¼å-ØÚÚ’­Õj¯MîëØIí! ÿÝo›ôyø†6T:g®º]Ë=_!÷Ø .Qã+б`“¡˜æçæc9@:t?ú£?J€Ë×Nœ8èŠ=š&ˆí§¼¡ªö·µÄú—Ý_`„gZÆÜAziI¯¡]+R]¯,'2©4¬Ç'Y($©U”ËNšV Â†F/IÒSh C²<õÉOŽZ6ÀåioûïãÂ…óº¿w¼Î™ú/#eôèN. ÛE@d¬ìºË!1ïŒø(•2MâÍ·4«*ýëHƒv†ñKIÇdZš´ø‡ÁHI ˆ Z­pÓM7ŵàò³ýûâØ±ã"yF‚“ú;» @¨Ïý­&v¿ó:|šùap꓃ ULH©˜²áVæy²ÞÿxXñØŽB4-=ºÌs¢ÊSŽs*Ç÷퀧=íiQD¸üìÌ™3ØÚÞδÙ}ÔO„b,•S×’ÉØ¹7ü¿Œ@‹w^íô^QhFÀ¿šL¤…‹cáb‘îõd<ˆfÉG÷7ñ0SÊ çSJœGXß+ )‡—¿üåqÑD¸|ì~àÅ8uê”@Ädl2¿û|’¶9›tXk$N»Õ¤W¨ïz-¨Æ3ÏìrÚ|œ^FVhtüúér™ì# þ»Š‚˜ó40 ¤<%œ(¯‹$*âuŒ”VxêSŸM€ËǾæ}5¶··UïÿÒ݆ϼ¨ËÃöRx8?—ÄÿÏõµHó¹z)ù×¥ÉYmb-I`(µ(R ·÷¼ÊZDòc?"q.»æI×g½‘*þ5dg2½—†{˜  " àg/† üù¥ ~S†)ß|åÿÓN’вøxÎî“wæÝ%Ú_³bÓÒ†žsqúI•ˆ 9äÇR¾}ûð%_òÅqÑDØûöêW¿û··óÍ(ré /'sUì‹¢ØkÀ÷m.m‚[–‚Ñ %xmñ´0èÅuZ™ÛyÊ$¨-Td·ˆ!’$e&\jŸEÊú'zLFJ §OŸÁóž÷¼¸n"ìm{æ3ŸiîÌB- ûÇ%y“úÜØ¼ë0삹†Sª³²Ý÷+Ö¡ DdšÜKÿ÷¾¿”/¶ú:<\[2^²“®Ö°xX+'†e¹J=AU ÒÇ:,Ï~ö³ã‰°·íøñãõn`ˆ×ÿùÌÐP¹ã« zs%²ÓŠî°Ýh^Îé÷(]ñ'È¢¶ƒT—\~èßiidw²„†h¹ܼt¡ÇHY¥ìb$'AÌ )5´ MœÀ¾V[qÝDØ»öæ7¿Ù9sb6™t@:ƒ ¬>KÍÔv9$2w¶½75U,T‰îƒìÃXyH·Ü×9êEµoÒVdg‡Þ„c;Y ŠPbí#HUmY¬!$O6”.œ“W½êUqñ÷8ŽŒn\v*$†º®G@zUвý…Zà‚"´¡%yM$±`[3®8q…N·E°Çì'~üÇ•¯#S_?£Ñ„“,f\ ¥‚&I¿D/`Wgþ³¿ËRÄ5¸Œ,eF¦a©Á<¡;„a™„$‹˜ùS5ƒHò ˜Â@æJ Hbˆp®°½½}èCqEØ{ößýý¿ŸoÄD‹·,ÝPÜ=Þ7{)ú¾{*lr˜"ó„]Eí IDAT€—€ +&ed©?±E‰ÑÉi»ÄS\©ý\„I¹ Œ^¤NÛÞVÂHòÄóµW_Wz€½g'OžÂÖÖ Ìsn™fœ,Ýë,CiŽ®¢_,Û=žŸL3Gvøª¸úšjï,W|µ7Ì›ÏI¼.³¹©>úpIÆ<"2P”êþçÊ6!©ÒU{ ®»“ùkàøWÄu`oÙOÿÔOᡇœà—Rû¿Ng]æYaŸ¥õS3Y¸ˆ»0óï"IXÞF€ pOÑ‘2ß¶Ì+&ÞxnÔMO>OZD€¦ÙH™X—ò°/,HÌàTvM6UDfhH‹Áj{ /~ñ‹ãbаwì‹þÞßÃÖÖÖBzfô€dyˆ¹_ãBæUø06´ëB€åâKi~ÚðÝ­Y6{ze ’‡¬~x¡•+mo¤¯¤?gmÌš`3C†dÃz:©E@)³×J? 4Ÿ©Î2X’L¢B1áéOz\JöŽ?~û÷ï77q¿!ÃÅ?ð#öœßÂùÆ3EºÈÆ$-l7„ÙP´ïQdIð{ÀpºëCúP·mMëÈ ^ùy>„Hÿ;´ð^drÄL°Û‹_ÿM:ÚN"]5Ì YãÔ•WÆe`oØOÞtî½ï>¤UÂ"ŠjïA‚oRwƒöν *‚9Ë$l:þ‰ß—Å4Þºrûå_º~Ь0T’ ¢Sñד,5œ}DèGÛÊ<@^™´²HHe¤ö= c•`¥†®l¯Vøæþ-q1EØýö´§?[«­V/orÊ4Ñ}´KBxù†î·ú…ô®F|LwY@¿ ¦ƒkÈÇ|Y˜vY…l .þ|Dú¹‚¥dbó¿ei9gê'±€…³“a'©Á!qó>el&Q M ÁW~ÅWĵ`÷ÛUW]…ƒj9/#—_Ì&Xlâå숻$P†â`Ç <ìqôü=D7¶êiÜé¡Cy¸}ê.²‡[­P –ƒ‡ÿ¹DÅ>ÎD`²ÔCãF”¹貘V( ×dˆÜpÃõqiGØý¶¾¸ÆööDØgíÆ‰Ë„½Ñ· Ê-tŒ‰cYê´KÜ¿Ìt™TÍÛ2ï\9ÖéÞ ¸™¼)Ýõ!Ëa@D©ÊËÇ™WÒyR('ú æp²,´(“C•ý ]JK¢ƒÆE`÷ÛŸ¹)%CÔ”ˆ¦¿Ñm¶h}ƒ c—¡y/b:€?ï/°f0ËéÐîÙ¼MŽÅ±û‡kN ­S&AÉeðDÝëŽXÖ’ì´ýy*E¬°®$1’“uËI§v’<@`žÿüïˆk+Àî¶ÃGŽ8G<ÝÞ'ã E 0QÏ’a€@k /¾PÐãœýÛï¶&ìµúb9ʺВ°ké°Ö¦ …AV ÇÙ˜´ŒÚöú‰â| ×§Xš[˜‘äÔèÎD~> ƒÊ²êžÌX|ÙôÅ_ü%qqEØÝvôÈqå½Èìwïý5* 4(¨»áDzàfòhØãQˆ§O <÷×9URßœeúEò2§ë»@@—ð½Ï·õ0êñ€ª×þôçÃbL­§M”«bâòöÉ@ÊŠ°¢*\ƒ•ˆ€VÀÕW_U€Ýmû÷ï×Až¥&àüÆ›£¨Ú([ÚfËŠo fÐãêôgY±MûsúàðÍyXPSˆºØ² 9Îó»¶„\Ô!ÂB°ñÑIúãP|’$Î]ßÌôɹ~bf݉Aår¿àС£qEؽöŠW¼¢ µX%ÇiRî×"É ¾®¹<矧Å‘ >¤f™'ðÇW}öóß%ëž–…™^×-ñ¸…0ceVÍ8™<\8ŠÇ“é%Éò8šÿuú¥‰Õ«H ¨Å`Õþa|“¤L  Ê§ä&tBJ¹1LD¸xñ‚„:t€]kW]u•/éíPM7•Ã;dYE3=?ƒ±ždþõøÐ2sû\™ _‰ö…yéyõ}™Îž´Â‹G–ƒLßëTW— å쟒žoa‰d¼Ð×â¼38‘Îáà‹°Km{{_—Í›~îCgËå—ážãðWöÇÄÕ»]°£Ü´lšé{„²q0 éwÁn¼Ë‘E2ôÓy-`/úov—ؤÚ©èÒd=pVmB{ÊúEFèÕN IÄ™ÚI%°Ô—2ÕÕL¹sbäAà¤H„„”×èH+ '`O¤‚θ¯îE†Ç ~zS&´ÀšåñxëºX#Ã-9N {„¾u+É`¼|y§ÌÀ b3ôòÃ7¥Â:;\}Ä!O«Cs|æ9¼3ô³–ÑHÖüÉ?ìÎ…ÍU/H1SÕJÈ=@÷"³N' ðàƒçâ‚‹°wƒ8ÿœRÇyðÝÄuú3·BÀ<ßñ¿]s¹ßaàÍý')µH¡/̲ò 7ž^?Ösòrø,bðÉl® š¢Œ%R4çðã1MÏ“+›G5}X³}˜þuQý+µ9?짠甄‘+4„‹|/xÁ âÒ‹°ûŒY6¨æÎ³ªòPEŽ'Ó$ãb,kËŒ.ÞÓaŸW€!åïÀwÒiàC&ߥˆáá//j/N[¸ lðO/Ý·«óÎ H2ßðä"/ôR!•s¦6ðÝIœÿRÖ` ¿1’N+SHá4f€Y§’…@‰ä†/¸1.¾{ #Dc•A%7”Qã§©€r-º Ñy‘n–Sü_½ãñŒ$‘`}žßrë·XÚnÕýYþ|Y“ÞBÿÔN€yCXà‡ÈÜ¿¥-SÁ†å/sÕÐ.ߨÏ5ƒ°³½¨É 6Ö5(“*®™iœ­Î§Œó ’Îä GÔ: D5TBàVÚ±#Çã"Œ°{aŸ%n‘ŠlMî¡– JÍæìSÈáËšC:î¸8ÈIÑŽ$È(ðð?†ïÏ~‘cǖ٬ Û(¡ .h/o +/S†YxâÜ—È”ÃÒ¦Ñá¡ÅaáXãEÜ6{Q­<Ä­(&$%‰ZÒ‚6†¥4Ó³ÛO:K ¬¶V8|øP\ˆvif'5É‹·‰Ùýë;_ÄN› N\Ć’Ü¡IÞ¹Ä0bÀÃtþ2Tgö;¬B~4¯äÖlªø)ú>‘ÈrŸ!¿8Mwç6’ dCÅ0Éð—MxNZ†vH)¥T¦âópƒƒSÒA±";Ñk^%]!™¥ ‰@ «­:c€Ýê!ÆØ)б‘Fî¶´žC¤ãdŽ¡›îáñU}ÕŒûœÊ;ÿ5XUVÌÄØF S¹u:;l=÷Ú‘ÊÈ(XŸÌSÏ-¡Bàž1F„ÅX8–ù”ïϳ)ÔMËXàüÎÜÎ|?p^_›À)å6 „Š"hÊ×¹‚´µŠk1Àîu¢’¾½ï°[b2J=®Žß³ˆ;Ș5CHb†y6(W†-dÇÆåötPÎ&çßgöÒ0Súàí°Ó$^JüuâL‚Šˆ¢ëêO·ºí+P°¾ŠÀ¥ºž Tèžµ'\‡…5\èþ`­lPfôQZ#Ø^mÇ`wÃS9`Øwz'Í™;aë—4e0„y²¦Û8't¸Ow vvþ‚±ºòÎÜ4ç;çÎÕKûzÅ5ëûaü·[2ƒÅ…CdgúÝöÜÑ­.í^wœþí›ÊE¸9Oí‚SvâÄ~[”,REÞRYF“$3éôüˆ3läÆ_µß ‹°»œ¿u×OqôJé?ãIW,u³1¼üEÁõ“1µ(ð3ûjcr Š‘÷ï©=¶©û&ÊXdÌó'ƒ…¶m•(2±_é›y ã;EÍÓ0©ÊQÛóÐ1Iz~A›Æer8,ÀîÌá²™ð¥ó€Žoö°+[&ºÑ^:Z…³Ä´ôæóÜøç.óôMÅ'6$ä3q™ÁA†â¹4pW2뵬›˜ßTÎY:ˆ‡ç°âpŠ#ÝØþ®Hß‹š9rÙY ˆ6Ccõ)œôø‘<Ø•”Å“’{ƒ.Ÿ‘üX©j‹ (¤ CàÄ NZ„¯‰°Û¡ ñ"¦9ŸiÎpaîKó®衈",& 7jIB™½óqçE\mØOœ=·9‡ÏÊvqbos‰[ÕñÀûÏØáþj˜†-Gvù¼•ž`®ƒd‚‰ö/¬zì¯efp*³*dèL)÷oÙ¼7.Î&!å¾@>—ܦÈÈ›B"`…ˆvq ¤— ¾P9àF¬¿¥[€0Cb¦ó7Ü´“¬tLÏê±ì)›å²Üój"«ÁÒ9Å Nþ[&{ªZ¨mÒOädP˜›·}Õ(݆8 ß$îh¢S‘ Z ˜úÈÊ鑲Խ®ýj‹Ý³ºgs3œB:Æ&ãIY‰šŒ(ŠX\Q]'G`7[Ӏ祒ž‡¶­Ëôꑘa§?yr¿²‘2Ä#Sš¡w=¶‹A@ ‹Œ¦Ë3pwuVßÔí¨—²ßÕÆ=óôyž’)ö“IÀ“µÝž~°‹ûŠÎ8÷në*+iR–úzaaj]Êàª×O ÍèSãõë‚wJ*Í ¡ª)¾¯?Q†‘4˜PÉ’½f ´Ž&U€]íLü.óïa"´¥àó©MAÇÔßÐ6ëä5Mé½S§_ÃŽÂX‚—tÍMæË4Xm%[]Mä,CKd2£aä8Ö¥ò³•Æ‚gs¥ràêày‘ù#˜í°Ÿ†`1”¬ÞÔ$uâ†ÉT"dVI¶]¾ZôQDå2Ň4[¢ü?…“tº˜õy Ülæ¨ ÛŠàóÏ"I§[ì”$™œLæže Ûãåf!=™ã¶Uyu€FKt*£öúc"eŒ¾t=VW>Ø×¢Zf×½­öqø!6©SîÇßC,2 ÂC?`š0Ì&“¯Ú:Ì  JÁM÷'LºPE„†WgÙ$gy1J¤2 võÞ^ê5×'vPM¯vj:HÒ$>uPQ¯Q½~JU"êÐuåRÕ=¥ZTª«2†›Ö+…EØÙ?™‹¶RÜ@`¡L…ëo62Óº¶D®ËUBJ© eÕÜŠÇFfT‡´‚¤ä‚€ *îO½y‹š£uþ6µ÷ä¹¾ïÄ_~†;ôFdÚd/Û½´2Ñ„2NÝ¿&Õ£™Ø®b3ìŸ;èPÆ=náŒö˜»@èj™EVÅèõJD a…u’Á|Ф $AR/Ì×MJÆ*×/8«P «|4œÊ$0éñó1_”Z h·º—ŽNÇâÕd=ä/b4‚,ìÒï/AÀAÑ3§Öe¯kÝ;k ÷œn©4Qun†”FiêÝ[ù¦ì˜eC|¯¤×ö‘†Uøx¨|¿¥~?æSgæ®±#î»-[#y¶ÒýBy™aûæß¬p÷KÁdÞ“èå‰Eæ8fý%±›aòk*j•¤”ôS]ü. í{ñ¸T Óú:¤ŸÇ:œMT»4Á4›.p¢9µX0Tâ&5 £¥D·dz]ƒ¨ÃW©f©•I±dÕL^Ôa*û*šõg8Èè¹§f`ˆ*Ø.U÷e·9~‡^Éê¥/Âd–‚süsì'•Å|6À7ÞyYê¯ëˆ«í• †3é5T6‚O?úx&$FCn+Õ A7u!!±Ve‹K¹^µjåJˆšñSƇtyŒ€%ïÿMÌU::WÒ‰éµyáÂÅð5v'üƒ (/Í 2bý3ÑàLäšub±ýÖL)¥äðàê Õç—f\]Á±^g½•Œ&«ž ù Pz#M=‚Zç¡:S<ô¯ xìAžAÐlØc">›•vé«„!ùæÖ nMä1xØ,ÛVQ–ïªG‘¡>ùgÌÖº÷L²Úħ"/ή?Ùi©°‡¦êÀ²^oIò @ÁþE2%ˆt³t=&((÷G’ŠÂ åõ‘,YŽ9C?µo¦WVªTRËëu€»¸È™°ÉÜÛLKuÌ%«î³+bP²‰u½4È,œ1}³ŒtÍ’”>B¹×ïNŠ$Ô½:”¬Ê·øDô¸mŸqsþÂd²VrÅ£y¥¤NNeµK Êv]çà e‰‘eö.Ë—‰`âpÜû»a/™@nKp–S’å…©sD¸$ïfH0_%j›—,/ë‹Þ2e§ì–¤Ë`ç/ý%[-JŽùQ™èr½h†‘Ÿ@`¬/®qöÁ‡ÂÕDØ%€XwG¾lNHŽq“Lfß²8ªŽªnHBɦÛÑ[Sد†$m[gÛúÑfΚRåWÆ–®ÙX¬/_-ò‚íO¸mv*™›S"Û`­±} O†á¤wÙ°ðdãÞg§Ë#2ìWF÷¹ˆ¡ÎÚLŸ;6éaŸŽöÛ§Öm™½ò³Ì°Ã0‚ì6°Ùë–Q£’vÈž·ÌPÿŽ&Ê­HUÿdêÂÌX¢ÊJ\‘P’ªêYÖF&d…Ð|I‘»ÈRr `¾ˆ3gN‡¯‰°óaÕ²PÊdJìÂŒÀ޵[ç[Y=†O-ŽÙÙ‚€ƒ¨MÜ@žŒ£*$“§YY{Ù#PJcöH-‚¸,ŸjhÎZl…"Vð1¯ìòÓ~×+÷¨GÃíÛoÑl"––« «6{˜£º3‘iЛC. òaî´‚d6ÀU…Öù;¨ÈNïvÔSûüŠ <ùÎú»ëRð›ô&Hª îÛÑ˘SB"®ÕU"©ûE+Ò²Ý.%]ðR—Bæ?‰¸/ÍwC ¬°^Üw8›»ÐÀªP>‰’KŽm³‘(¯ºKIš#†O¨{±­Š©š(ÀÌ Ïçiœn &%@QÃpy­Ë:ȧ¯h4ã/w&‘ËZË™˜ªÞ½×#€•÷5N¡CÊ—a!ÇИÄX]k8í´±ÉñWÊd?lÕÁ&³ Bº¡2îv8»JDZÕç šéEf«ÍqË›ÍôíôðRU1ÀîwpT/!‘Z_ªôª9åÆpRfhýœÜ1R½†¸nJ.¿#BJ,•úkxMõñ…¯‰°;ý?ÖŒUZ)¢ÍÞæÑ³C¥†Í—,Þãû¢Á£¼si´Rû,£•|OÀ6akSÍôКε()^Ó|¶Í&Ôþ|VØ4ÛÛÂW ‰_#胛‰W¥ΓWXÖð'ØKz= U¼Ã•Mœ½,o‚ùÓ«fZÜMo˜5°ÚPèà+›±“V|ŒnÏ®x5Ò¾1žÛ=1Rþ~ ~gÏ< A@¯LÒý™ê™êÈ@#äI_½è‰¤&Jå¹åÚ¤Õ ¯ûµ_ g`B@k­2µ5\orKŲ’!d,}DZ³ =òªÅÙ7 BQeü•Ö¢õLYÇסB&KtSÉ&’¹uhÈÐ<ãô)z··A Sº»4ÈkæÔ³‡ fCÍg¯‘/ʲóã¼ÆÏÑU,tÙÄdÞ2få2ùwxÙѣ쒘5ê›5ºV\¯[áìœ\œ·öµå}'$’F#”Y?åøy6,  éøÒITø>Ž&Àî´ ë Ø·ÚW¡ õK¥l_éÐí51R}œGHE«.Å€£šÚ›¹ì_-ì!ÖçtäÍ^¢ºp$¯rMy«“X6uN&‰…+Œ$VBá®üúR«²z15ˆ•Ï#aªJFËpPi̶ىIÀbìÖë/Èf³Y¦"LSçÞW½l³Ô@$œÿ¤ =Såd¿—}<ñAY:#^¨RlUB4“¸˜¯}Ì{¡d®Â† M $½˜òjG M¹»‰â’+$í_¥ JCe „5¯!ë‹°Kí¡‡ÂöövužÅq²pVÈ;àªÄNeHlt¶5s·ä²9'•ƒŽ4Ú:iô™xõžª'D¹Aw·’ë7xÚêˆwù½…Rj°íÔÀPü‚Ê‹ô ê\—Þª¬.cÜËø·åàûA0™rë]/``ðÌvúʰ3ÚËNÌVˆê$7dXGi+1Ÿ­°ÂE;œsÿØÒðZýŒ,ÙÐ[•«c[ä ¨¦»þÊÏÄw’øU¸‰qöìÙp4v§>}šŽ=*¨ ’Ô°ou²dÒö ¶ÏIÂjäË+d!œh`*,âË ÆéGj\…V$vò¸ô Ê ‘¶©õˆ&t~q«gËP™ƒ¨ } Ÿƒ–D…Ú–v,bMØg‹iÄË*÷S´NbYàWWBÆ5Œne—yËrTɸwv÷ÌY>›Ý~™ ¿ ’Ëæwì÷ǘcêld¶a´†æÎwm?‚™Ð Ö¦Ka¤ë8ª¨ôûfAUœ&UÕ¶M p*¤Í ý$0(±ÊASs㬣&¬ JÊÌ7Ö>0q‘”°Î‡•­V #Nùß»íöp4v§}ⓟlZëŠÿ²½Ÿé¬+ìV[òŽy €™FµÎdFñ³-Èž3k(Ú d%“â¥TQ1V4Þ¨Ñëvõ€±« Ý9.dÞC0جÉàz¾õûa†ÈÚh¡òüE° ÑlÁÌËSïvò œéªC. Ô§°Oãû³£ƒŽŽt{ ÄìÀÒ$³}¯½tûjZÿIæ’VÙÙ HåH²sæþ“²u ŸŒQ¦âUØMyžœìjÔ¶+,‹)mY« NyMdJ WýüÏ…£‰°;í§_ùJ¬ù¢¿™8«ºIÐ~²R„u:lª‡ì.Y¹¸jcqwk­F,Ù⾃0p©bl«ò¢ÿeê«:+fÝN†ÕAóO&Ð<Œÿ.1**N-›fa¬™óÒûÞ‹òätÑz«†X¸[&êÐyŸ(v=ì\^PQµŒŸ¶|†rN_õëºç²´Ð~¢†êÔ Ÿ²ˆÆT”‚,ý̺æKXª¬s÷ë°¤Óã(8žN¥DÊK„óDº2†*ÔL‚¥Bh¾´/œLôv·=ôÐ9:t¨Ãø©ÎÔ¦-àh”ÕAî;3#­üŒ@{^*Cí°ÊGŒ ¡¼ \oTj½ƒâಶ»2t:Œ_ªÎö4ˆr` ­u¨ËNsÓˆ)sµQ=žØç`V0Æ 0À8!6ðþ÷`Äóx—ñ¶ý’DtlöâÎfiŽÇý—úâ!¢~mú~z9Œq ¯2ˆêPaÆcòuÓ‘A¡l[)7sQç8¤Ì®H¦Sb&$Yš„mÿH"n}'!ˆ¬ñÀ„ƒ‰°»í³÷–:Tghm£·põ¥úzq¢p.`èðT™(îÛ®RY6wi@$NWÅ:|k•…TØ@BMè­œ Áiál#mî‘8'OdöºZ ìÉë»æ±™f.^¥…’ùÔp…ÝÊ‘Ž\»»´1LÛö« Ûˆ®çç¼²çLü ½X› ` &³Ø¾,({Ú縰ß2& ‹ê1¡Úï¥ì1f‘ÆÊªýô<¼XÈ ÅÁ7"¹†UIçÒK(s-6àŠ´o¿~ËšŒ”äBXpçw†ƒ‰°»í¾{ïÃu×^§YLË4×DYõÇ8OGïœÐCEHi×:-ÜËiVz«Ç ÅQ›õjªX’6”,ÔnÊN¹Ô)–Á3]ìA3&5´‡ %jCnõß5(eß9EÖÓÌ›dYb©G0NÂnŒ`qƒa½ó÷¬œemæ?§ÇüõõkÃ&¥äò IDATcïg`œÊèBAå(´*ÀOeS—’$°6kK‚ å3µ-xEêDå X%È“YJS&3åSÙJ)·Ž·25ÃK¹ç°†à]ïzW8˜»Û¾ð ¿Ð4Ûð˜!)a­yz¢ä¦i}°Ùq'1AODØ|6A@2¶¬´Î‚û*U“Ù<¿ÓX‚A+°šEù²ÖW_¯fbQý€Kƒ…šà›Ù;yúí[ï,Èp¯Yõƽ»s‡¿ùè/»Mo=X,Ð9¥RŽD:uÑ)³g!`5¬©–ÒEÊòäó³< ,Р œÁLnà•!T题TÆà\HtÊÊ0­BÊBÈT¯ý7¾éá`"ìn;{ö4¶¶¶qàÀÁ¦’Ùïõ…Ô¹t‹VlÖÝ;Û*ضšðð«ÎP™à¥š•IuÊ3MþR¢n—ŠÀª~ÂÂE6¸õIÙˆfúm°ĺ4û’‚̿õI–»Ä2Rf¥h[qØÆ7óBñµI£éúŸM3ÿºV‘''×5oC5ÁFža #Ùä`€0 b’ÿ¬ácÔÚÔÊjq—PQý‘Näë ª¢oTh@mvsÒ³RD)$×~ÂgOŸ¡ð.v½}êSwàäÉ“tðà!‘Z ô8¿NÛRr[´ª.?Í3TR]þ<_“æ°ŒP›ÈÕML0kÄNC ¨Ûš =°4”í®‚Ö¶{ 4dÎ=ÎkxåîwÅ@ÿæˆÔEÝŽò©<œ\B¶?[ßeÿÖI-C>ý1n™ýB`³ø½ `Òõ,U¶²ÃL…à*§LzÙê>´ôÍêBçÕ¥£56dä'“5YûQ”rµèa·—˜¹öp©öʱÊlJi%ÎÃf‰Ûq8óÉO†sy”-h €ýöoÿV.É{L¶ƒò”§ÑŠéä†]f/^¿Þwå~å©sz*4Ó":æ†ÃœÓàö;ý´¬Ù+Šçz– oÜdŒü}K×,N“Áfy¡–*í´ç¿oªf²l݆½c?/«4…y/Š+²ÜÁR£·ŸŸÅc3Ï_X°^y¶ ÁZåÑGFÆ¢zi«ÄGŠÃ瀖êf¸Ê V:O&t2sþÔVe1× ÛdS¥uªÌsÉ(ª¸)1êø .×È&g3ðÑ~4œJ@@{Ën¾ù·A”$UØÇ7Lm6e|Hl$ݘ¿÷Ð ™E섦ڹ øÉž‹…ò! fÛ ‚í”9¤yA´ó¥ENUÒëÆ;:ëNEBÝ›°1o’,5ö]s×C<=4?^˦¥ÇÝ¥—ÝÀÀ󗪄Aa´ï1, š ïÉô\“ÛlåJêËíÞæLÕLúTý RÙòUžÕŸSvÞíØIU¿[s7ÓA+¨^GY;¨.^¸€oøÆ€¢Øcö©O}ç/\ÐiÈ1Ó³«ùJf3K1;]Å©NÇè÷³2j¶=—£gã•E†-5ƒt¯½P”óg. dq8¸Uùì§k}?²ÉÀ9¡º.Á–8¥Pr]|f#Z·ä¨g[½`šõÚ°›~opþõùæýÍ>ïš‘W¯î·Ÿ± Ì žT`?¿ÅÍjõœ=T•X{Jš$8d¨”ƒäH¸dèZ1%˜ÕúŸ­FX”Ò™ 0å@Fº*23‡ZôÏŸòÉ” ƒpÏ=÷†ó°÷ì×ã7ê–¤McJxq»aY¡îà«ýÞëÁs'•Œê„yC“´°*»F÷ T`à²pˆaç[ìÊy–OQÈtÌ 1l&ꌛ ãGÉÞÙ oæ l"Q¡É «Ðžx5ÖÅh(õ}£‡¹¸ÿFÃ‡í –&<öM¼Óïd*`µ€.GÐ,Ÿ¥ì ¬áO ê›+%“ª’ÙíÓöJõ%ÍøK$+ "¬=‚<|HnÜ[\Ü}oèÿG؃öÿ¼ãX¯×ÄF:˜eÌa³‡&b6¬#-4Q(”¿.¿S$¦dyñÔJˆw:\qb®N×í öL^ÅU3Þ–Ÿ/5PÙ¬[¦ ˬÇ`ý¾ <&p•éYK™ªŒªà)Žæ9èû`æümiÉ& ÌF}ܱ|ŸºrZ´Q»„äU¿ëý´ÇÌk(ÚV‚úê¯-‰ÏÏ=wî<žþŒ/ gòY°€aû«} _ôÌgš­]Ýbõ.CO,¬[¿tð«Ü8U:ÂìØµ˜0 í8ïŒ×kQúµ²…¦ØyÛÜôõ†N iq7¹ù›\„tà>- _ÇdÎa#æÞÎ ~÷oï0Ë3-jÑ0 ·ô]6,–iÔNµõõÜóó-„Ôï!PG\‚îDUa&H¯ïÈâú²ö^’”åtCE爯±fìJéTÆS#¢‘¹n2z_¾¢ŒŸú(3Ú#¨½Ýj£ˆ î¥¾÷ž{èÌ™P}¬,°¶GÁÞróÍ24€ MˆÍùË~o›È:@fNÖrú»©Þá8•£OH•ŸO›¯ä&µ»R¨í~MVÍ}Ó•:HNûá}žEd¯A²¸ù±HQ0ü.åöÚbhõA¼ƒ2…ÔÞŽ…u¬ÔasÙ‰S«`ê§Ï׊dzPYuû[$áBúLÚ§âL e}D¸O=µ2H gΜÁÙ³§ÃD`oÛ;ßù_±„Ž/NqºÝ³¨œû¶/XLÿ€¦ï‹Àm“2sEùæ•õø9Lï‚»ÉTT>|Ù=lÐ\3_`šµÂ´A?¶°àÑZƒÄ­Ä¬4I6[Êf= ¥)Ù•Â) ŸC~½µáã˸UÌuW½DƒXfY[çÏ~~ÁHSxÇÏ9Ì‚J &VTPHY?š¬›Š-ïòMªU¨úy$T•N¤bë³óƒÉº}B©¤,"â„DùÂ+É¾è ‰p›Ðs?þ<½éMÿw8€€ö¾ýúoü†;zÔI>7©eª)íã”ç9Hh˜¹ûDM!´UfgÉmöÚáB©33œ¿ô'ÆCð¥gRíˆ2Ùì0Õ"Ô¯¬ìá#«.Z¨·Z®Ûì©ë6»B78'“LÝ7æË~ݶ[Ùh‰Š§Îà,+­- Õ5Æm*[¬@›n©zü„„š’SžÏPÕÆl>>™iö²Ô]²´é ¡ &ÝAFÚ~¾yƘˆêäøš/⡇ÎÑsŸûÜpí}ûøÇ>F_þå_.bÖ/йÅ9M#ý+qL¥I—RÕh©½“ï÷*¤]óÖ·HóC{}æì¯ @e3W?º5ÍöUbÂ>X´cºŒyldØç,´íÜ´`öÞÈ8b·ª^¬T÷lÉŒ8•۠†2 {Çcõ Ÿµ™ˆî!Ãîq••¯D¿kòÕ"‰&í\©œ™ž)Mm5ѨÓ#ìT\-AÔn¦kè½¢²¾4µj–²ìgJŒsç/â=ïyO8ŽÇØVñ<:vÇwàk¾æk~|k{Ûeó.»üh¼K¨Gñ46«Ë0O¾ßhÈÒ—›¾â22¿ ¾9¹Aêù¼h'3_×4.fÉÞ²QS=µ³ù_ÁÔ“^‚㇥벗h¶]‡3H&ÍX±A:Zo7â6?n«dözþämÍ¢?"3·¥K’V{BªÇFU¡³l†«kjò¡Tɲͥšk;Ü“V’bvZ·e”üZ›Õn«?It‘<3Î_¸@ÿæþM8ލ.û‹¿ø |ò“Ÿ¤g<ã†_n—ýÁe‡*\sØ"â(—Ä)gÏ XiGOd é¸Å4ÎÙ+çº!·´ÞfœI‘Þ%jçp>xN¹0)Ï\:ˆ®b±Hª’çÎâ—âô™+Å¥U|¡õýg¢p¹É[fô«kÐè–• Æ ß¾ák™E½h]JY‚A4pªïE4¹È;«Q™=Ò •‡È=VRQ²'zXwT4ª,Š!Uþ,tÑÚ @²ZÐEþâÏÿ"œFô./{ó›ß f–}ûöM°y¸¾@ÉØMÍØˆ|F_šwÚMÊå¶þŸ|¡wâe[˜nd¨% 2•/¾×.éÔ8­@D·M¬šÊöYœI0t·DÞoürÔË^º¢‡³&Ç–%ÅS·|† qÀÐ1õ{Ln«š?*`Afæ˜6o5˜”ƳéÞVˆ©)zfÚ'+ß?€¤ˆJå=¤„õùó¡ýÀåg·Ýv;Ž?J×]w­°°Ë¸k³Ó-vŸìàí²E·jR©, pÉlÓr ߺ>Òa15ûiÍiéΣʯ3Öž(5Nþ®K#Æá¬zþ2 š¨‹]p>åaÒ»ï±V­µUí<T[»‰ÞYÖWU‰¦…f’¢6¬Ô˲™‹Q=nfê˜ X‹ Ä`Ñü½|Åϳ8iì&á–Z!G¯J©µ¬És¬çSz_ rd|èÃçÀåi¯ýå_Ɖ+®­­­Ivm²[Ô2W-?›U É,›éºý"˜ZsÐx94¢M/·Çø…3ŠÛ…G×ßÃQ˜pé1ͼ—3íùq´A=8þN/hI¯Wœ\„­*6¬rìþNI¹øÒ ¶ªª [H¡¶< WvTå÷””'y (Ï‚$›á âÑ&rBk~W²—N³×æ/׉â29|îâ|sdÿQ\¶UÀÇnÃ3ŸùEtüÄ aÙÞîÀí Á[V5@5ã®Dms–VÙ9´eJÔ˜:R1&7æo«”¼Â`É$vÙ0뮲S,“ ·½¥„j6Y êóeVè‰,Þ=Ë<ªóÂÅáÛ·Ú¸¥›¹LX9?ŸýN€~Ò·UaóãaÖÈ`&sÞvºP:gƒryHÐIZ×í[¢}"Ô©=!QáÂúÁäc¦Æ¤²3wU×GûQlÑŸªï`øT”W¯G˜Iòð×mõÑpþQ\æUÀk_‹ãÇŽÉÖö¾ XûB5`©¢4‘ZÀX”5”ïO]ön3ýî2è*ïÀÑšx‹Ïkï­Ð a¸#ä.=³Zpè·äá’>[ž7…«´ìù,£k‡Ëxí1ÜÂŒKZú}Î>XõRβXqØåðbæXŠsWq~ËÁ¢ ÖTþ]HÍñÛÛ­¹yR¢‚4A{²².Š×†² ¥ l¯*Òvq~BÓ¯:}ú žûÜç†z-&{Ûï¼ç×k§0éîxž¾ˆ,ˆ¤õÊ’úó*-¬kc‡¹k$ÒùwPÄþT¦Í½1*ÔÑz@åõk¯§èTey·|Þ%€°]ç™_·¬¡L \™°àã·ßN¿ðêWãÃþp8‡ÇÑ¢ ü™°àÓŸúÝøä/Oûl®±òËs¨sdÔ9Á­#f"”Äв"±h Xk6¨ÞtNɧ 4óuKÁH&çµèäwôä—öDÁ"\f_Ìjï´Y*öUX§Á3ëÌÃK'=c%•_=6›šH›ÏÅïg‡OµùÊå«‘*HÊbl I]¦øegÎ —K0 ¶å•äDûrÐ!i?iz?úÙ‘BGR”a«®¸vD[åÌ3gÎààþýáü£xâÙë_ÿërôЬ‹À[­ÒBƒx¤dªîJR¶Kaõ]ÖA¹¼©kz-9S¤²0|)U××&]ZÓgøNïÈR‡Leb¥à¨jËf‹ÉÉ»]dðèå°êѰtça2z3=Kbµ“°HÛÈɉFë« LƒÝÜÕï=N ¼4ÆL'åö“£f•cAÑÅìyÈ!Kû¨hÁl}‡k´—åBÙ™—‰ßÜì-ÔÒÆÈšTBF7ÈÔb¾¯,|‘q÷=÷пúWÿ2œÁ.°è<Æö‘~˜°*“—v²“®lqz™Hj"‹ÇŸeaG£_‰á¸¥ÇÀÚ8e³\]ôg.ke¿³·_Éè{V;ÚôŒ.½Ø5Ìì–e`²jïcÜ\÷ ×¾‡ÍÄY,›ÝÅý*LÛ6Ÿ]}œGŽ¿žwùÌÄ“u•€kô ºÏÞ3£ÄÙq1³<…êý4ö¥TºnÁÿŠØ1å _-¤R{Í^º©¾TÒc0*S«ÌèÓÅæƒäˆî¾HRå¥:”Æk¼û=ïGÀ×^ýê_Àu×]+ £Õñ}Çã®.»^ëá¢Í4Íx¾ŽˆZÉ ›2Ø>ÆŽÀ~9Y¨Pj6‹—Ï‹…°¼¸q@Œ ü…eLöû×CNèž;ABùuçåq{d=ÕòçÛ i¯(½P«Š’Ê.覮Âϧ”*þŸÇ+Ê5¢ÓÁ5s—¶âQ?¥²M¬ÎjˆÊC€u­…‹î"Ó“qñÂ|ⓟ¤ý½ßN`—Xô»âŠ8þ<ömïÏ·›pß×|¬éZjcš¤Ùþ€ÇÝ«¼,F+ÕÑÏœ:16çÌ™Cª›Ì˜šóDhmà%¯Kme'dã7Â";„s\íX9†4´DѼT§.£ïa'LÉA7÷Nj+6%5Ù)œ:ÈÇ>Þ*­ÌÐѼœ! ü½™Î: P%|ô»Ná"Õ–zsþ B[ð˜ûF;H TMI©¬Ì¸¸f„óè oÿï»Þ…¿½ã’¤7rjp,œ™Å;¬a á_†øU–Xr¦v(“cÂ+Ïp9Û/1ƒy ^¯uCÖ"릱Ë× Þiû ©ÝrÕh™‚õš±†R4a`޵Ãzše¾`IÙ“޾ºÉé{JçØ§m®qþmSšªgp‹»…F)“.˲ÅòYP[]W¯·@R†ÿG}eÃ\žÈNm– ª§†TN5ò4TJ§J•‘ 'Üžšt™<ªÈ1þøˆC€°ÿÊWâð¡ƒxðôi]ô¢Rº¨ Yq§1ÓõjÜsæ1ŽW Z\žððæY³é‡·êïkÖúØÚâî:‡°6=†uÜb†Èk0ÖkÖ¬½ \xÝðúu~½õº ¦YŒ¿l6À‡½ó†ªÃrõ^ƒc—‘ýd_î#pí”%š}'˜ÃWÜ>ëø'¤DµÀ¢”Xy5EýÙùRjÍß|DÍæÑÔ\«,´ –ꑽ(1ÕÇ’Ñò/‚o\·Ê¥*c’¸G™G %Üy×ÝôªŸ{^ò’—„ˆ@XîüŸ¸êª«ekµ•q\4}—6¦ßÖBVÝ £Ô‹3-­n}¤íìDÐï–8ºÒ¦K‹¤ @ÐNW¡`ó<€Ë¯i‡å/þ3YÒÜÙ©×àçò"+½Œûûs³)§Éì4Äí{`ÍØWÝæ²žQP$¼Õ¹¦¼ìRY—êf6FÑáIµ¡L–"Kä¹/Tgªô‡µ©Ãjº(FUFûmty/@ÁŸòù®ðÀgðÜç~køš¨Â¬Ýü[oÅ…‹k]á¤djˆßêU&–]Re¸[èå– ;ÝËõ8s5LpC눖eO˜3âå,Íäî%üÇ—òð’Rx%ѱÔ‹©ÆtªÍôÌ÷/]زY« PU¬½H: ªôç ^¢*˨)þ'®:Iì –%äJ ¥6WÅß {¨,§¶6´l¼lÅÈMi•ª¸ï¾{éÛ¾í;âÆŽ ìRìmo{>ñ7Cë òB‘êÔíNÛ:êU´ÛÁʾ€§ÂÈD” Î,%·Y²¦4G—ív}e•+¼eØ eC”"j©–¾w¡G‘yf><­™Zvê)òÚ·>Ìî @Wa˜Ÿ´F6æ[º]ã|”sC:µï‡©Ão«~ ¬U·l[á¯æüUæ)YYVªh* ‡Tó‡þKZQ5Åþ¶z­ *ìV’T·ˆ}!J Í)e—Dñ(u”t“ž}ïÿŸÇM@ØÃµ×ü_¯Á•§®,þչ“Û ÕÔDë„0!7 Ž[ò´*ò‚a IDATè¶¼¬- [ªúß¶—É£™ÉfQˆ)2´a$Í«Ád'yKÿBÔS¶k‘rûów‚:qç>rã4‰Ý„ Ø>²B§€3Î_"½,:y[ŽAT§í¡3"ªrbô|Ê—+޳($ÒZ¬&±Ùa ßjÒyá*A`YãÃþýÛûCq3ï )ˆ]fýÈG°õE[¸âŠ“šA;ÍÌê ’ÉpkVŸt L PP–´ëÆ^s[¸ÈhùØé`š@@;:Ya¥^¦ß*b;€†0õÊ—êìgû6œ¯t¿;ëda¹”eʺDX%íÂÍo…~RYǨRÍu¯VÊ¡'"ÿÙ×L]jÓ\÷)sÛ ¤h¥\¥”@¬ý#(,U¿å Ê'ÎÊV‚öʈ²”!2®Ð€A:´F)/—ùÐ_†ó ìó²ŸüÉ›pýõ7ÈÁƒ3«£4ë@V†jâ.–5Ô)Q"Õfçú„†û©^êþî’ºÄ ‰ ô8]P"ÆÑí£ÞO[ÑÐ` J=Ùá¡‘T ©~Ö…qS¾»¶›¡?Ó^ÀÊ0Wà¶c·P¿*)È ÇÕ nÄãì2fÕ÷KÊ …[ \7vÕJSws£ 5…ðÔ^_¯-láöOÞN/zá‹âŽöùÚ/¿öµ¸âØ1)›Ëö0Ü)"aL¹!\![sƒR…&òM_G‹ð;Œ¾|Ý3ÐÃ:ï’1;èu`™45p–)l6ylq»j~5°AiªµT(›”«­¤ŽX’‰"% rføÍ¢–É¥]›¹ñLúÜÂêÕNnþS!›ò3(Ö¯N>ÓÛBuN¦¥[¹eÈ(%Œ“×ï_@ZTIÝ Ç̶—¯ç”.ŒØ_L:% çżÊõÏ ]*{§ônR[RénpKqRT7UÅ­lc¥}&–vk—moRV3&]’C•½ÉZ¥©ã§¤£9Ò±i-è1i¥"D8wþî¸ãŽpþQ„=Òö_û«8yò¸pÕh±˜6ÕPô¦,™®$Q¸¢ìreËebuQÉ @)c„lêN¦ŸK hÈÌ×@¨ú0 :ztšÀ#¶OíMŒèPÍR}E'l‘!›„hVŽ ÿg€˜üc[@ë¦jëpq÷¦}^ÐáªWÓÀM~B Ýؽ'I•óðøá{ˆJ7Oq·ƒêÖ'Ú¨¶>¥…g:[,Kl9y0DÚàõGôyjH&À!¢ÈÌâÌø‡Ýl}ÏKþÖÝך§õP$5ü_{×µBS6n|¦Æõ9@rñê»V4¶Èê °4NÛŠ*d<_þ,<ö˜þʯüʼAg˜Çë}üÅ_ü…¼å-oÁ[Þò–.,I{YÙ‰4p¡xÀë‘È}gWMc™ôáog ˜¹ˆúÀºèµô ÙzdYU‰}?t¾áW–9˜Q™Ûbûv Š+ž½ô%»Ö"¼-ºJ5$ K|ý3Z,Üš~‹DŸ·té…þIëÃRÓn k.Z{s‹Íõeú:ý—¥Ñ\×ΤôÖÒñ_Ýä]ˆY5‚”^y}6£¦Z§Ú?¦ º6G‹<ñÔòþ÷¿Æ~Ì!ð 9>ðÈáá¡^9º"8H1Ï+ãÅÆÅm½©-14%=™n¨"²ôÊ“æ…ìë­„ú x…&Ìkeí¤³Sºð²¬ß3xÈcÖ54—”6éæE>Ü#׊ðUC§¹YëÆ1Í·nÓƒ•ö$ØÌ½jý>T{Î늛–óLÂ¸Ü ËBó‹fUrëZ:Ý,Åuz–òù-Ρ_z% ´5ˆ»WspJScÛ7u3'/Wdó‰lë”Ò¥ïb-~:­XÓÖÎЄ%–¤W ˆF¤‚F[Í‹_G"­ëAä@åÒs—äýï¿þõ_ÿõ¼1g˜ÇuüüÏÿ¼kÐØ¿Z½Fßì4VÓC5Û’…@Õßf U‰fV‡}Ä@ÁX;5 a´fÃ`4>o x ‘6â\­;jÁàY€Ž®Áuƒ"WË5"4{ ›вÐ$¦(d/‘ƒÁ²BJ>ÿüóò³?û³3FÌ0«ýø‹ÿã/ä­7ÞŒs×sÜV;×Ji„ùZ Bw®j­›ÏË: V¬Ka^«+úR‹Uohq9ãÅX)Õv“€…´Ï" ruÊeÕ˜Ä0¶Š™™DBS‰¥«ºø¶Ø»õÅ';WKzJ*  Ó–ðUQÛ%èñuÑÞ™téåÎŒBß ƒic—`Ž¡Gß%ðÑ@@/-¤¢û ä+U{ÿlZ¬kÊë™ÛÆïÒg%AB ^?º`6/0m£€ÆL¦Beõðñ{ƒ<ÿüóúsÿËÏÍkÎæqµÿõ¿ýWùÀû? >þ¸¾ôÒ‹iqË œ•×­ëÿ"¯á¶ä’¥nEÙzÅ¿*YŠ+G8¾V¯¤×¯AÞµ…$x(&Ç£É/wØjQÒÅ‘N¿„ißwR"´w'6± ÓÖ«öïÃÌåUã¹±nOÃ>Xðï^k³‹³!±¿·Î‘‡‹(¢Ã{½>T_“æúYÅìÀ³µ#Yâ=5¤?W ¥cתkBi&—ÈF;ȆU™´Yçã¬'•]ÛÉ3—žÒOöoç5ÀýÔS²,K,I(IZ,¢º”péÎTê~¯*ÁqæŠ 0M#È*[ 1f Ó£,bòØY@½Öøß`·6ΧÕ5+¢XßA\äKÎã‚~ƈa²ÃIîj¹-Fú'\'HÃù¬¿æ¶Rµú¯„ˆOÈd@8YÂa!V2éfHØL6á¤Ð»7ÝxmKŒ °/ŠØ³&ÓÖš<þØãú©ÏÞ/þ“?›7Ö„€æqÛn»MÞþö·Ë¿ø¶(‚¡Â„óÐá’º:Câp¦üèAÕSÛƒŠÈ:nK,ƒu`½¡±ù¬{ #È(œ+†¾‘ÉÓiœë€V]ÎB ÞjSß),jºù䜣½qÅd*¯Ýn±e»LöÁ2˜hMx0I¦>WèAÛ=ÐÓª¯•¸6Í]»³Dß!†x-¿Ã@†o-‘,íï©ù½™‘¢%}Ÿ•µu$Ÿÿüô£Ÿ¼Wþïÿóÿš7ÑLó8ÉÇ/üÂ/È¿ù×ÿF¾õÛ¾ gΙˆkàôðÝ7›´¾}šÍS!Iaöz°í•$Ì…ª-¾`€¿Úb\÷Õd…›êAo!†ÐŠ«k×é·„#D‰ìBD¡Ó3誶n¨Ó»…pÔÊ7Ò{[VósJõOͧÍîúµæ¼Þhó-Ýeéɦ'¾ÐФ¹ÊA Â:b!€C ¢õ¬`Â럌†žøxhÜâ/jzP"/¿ø²ü—ÿç¿èŸýé¬úg˜Ç5uüùŸÿ¹ÜrË-8weÖà&^I:¥ ɼ/æ»´´ÛfÖ‹s.®75®kWºˆ=W¼Íž¾åUµ±dØ+q5]RX%ýH2›\‚[$‚¹Jö–žº,Æ*íºøF”y/¬×p[ãpŸ„,ÒM^º´šÃ4M !ûU½u@au±9Ûâm=Ó/­­ &QY´ &aº,òôSOÉ/þâ/Î8pJ9¸Æ_þå_–OúÓúòËWÂŽVþ"R@÷ÐeÕÊqÊ AÓ>¸M.T]̲ÖÆP“ê¢lK##*S©†;T-¡Z©+ÖfK_VÁJÿžx(dj£jˆ¸™l¿ÁDè’± $9îj»Ó`™ ôúÞͳWü¹¡]#©SIÍë o=yš œmã6ÀݽZkáÖL“i}ð‰ö!ÔïÈt J‰F'õž®Ë1}õá¯ê þ3Ìã>îºë.ùƒ?øùë¿þ+}é¥õÊáѺÝÛ«Hœº|ËL¬AÜØ01l5sÆþvÌ'ÁÇÅá·«KL;B¹”4òÀtANµ]!ú F:.¿ì'äœÔPs%°È¿ê'µ¾¹ll(“Ÿ6J)¹´YÒRÈ /¼(_ýêCúk¿ö«ó™оk 6t]ÜX— ›«4Â"1ìõÙ*©>¬ÖŒ‘3\‹ÈvÎÎY%º{´ÏÝæ}yo3ÅS»NO3¿^‰$ß°Ý #M-òòË/ËßýÃßËx@¾òå/Ïa³˜ðÐÝò®wýKÎ x%¦³q}¨¸âÒ ¹y/E—¥³5!¤Õàì#í´M×Ìï‘Ó–¢PërŠÐK ñ7“t¶e,|ÆÞBÿ¾±“@ÈB>.MG‹Énj#}‹Ú¤2Öát£-Ýæó…eY«îu¢á ¶´,™Ñ‡³æ`^æ.¦-‰X8Õsé”Y‡„-»b¨ôÁ4 ³—E塇”x@^¾|ٓϹsçô®;ïœ7ÁLó8ÍÇÿü?ý´ü»ÿñßá–[ÞN‚eÝ«­š5Ú1tTN'³É$ZåÒùø …ÈFbÆ,­˜ÚUrifQG•–ÑCܺc`„Rº¢áÊš+¾)dAÊ"ÎÐq®ç \dÂk1D È .•±&².‰bóôÄ`ð~ì ðy÷s …:‡Õtél$’ØÐÞF™Ñysz‡@,®ËGGrÿg?+>ú¨,éï~tx(×]½^8~ÞšÇi=þå;¿KnyûÛå©§Ÿ’¶k]"y 0­;i[§á¶HÈ0,Í<Ê–|id^¶T³Rg‡”U§1.&Ž&áM»,¡"jOÚ´q¸ d#–NcZéÁ¿¯tµ¨ôMýni´ÝÆT‰½‰EºûšÛ/6òZn>?X{MZãå-²YD7yÁ꟰ÄZ—Ã:@sûMé_ãný´aýsÅQQ9<¼,?ù¤üíßü<þµ¯ Á_DäÌÙ³ÒZïÿÆoÌ›àSúþð‡å{¾ç{ "rË-·È‹/¾(äÜÙ³röÜ™U+¾l¢]]Ô¤ŠAÜ>ì²Ãªæƒ‹PŸp …>@†mý®-G3 ªiu«FAèØ¯¬¤ÎBB¯Ž±SÝÓ gTWýU•fÿ+†«¿K÷äuv-ƒmTÍ‘Ìåõ|V!¶é+A±]_wqù tÝžÐð‰üãT#d¯´©~ê‚w±‰ÝuD|ÈmäkO?)<ò¨<þøã[ºé°¿õ<&4Svœ?^ÞùÎw!âèèHv»\¹rEÞrã²tÁàÈi1Ø0êq·k×è:°m¡ ´t×–fÁw¿šwM×7S—CîÁÚ™‘Æ®A×,#aê:Äjaé ]\çß“Ý ¶òÛÍL*Ã}Š[–¤WŽÁµiæÁ¡¢PÝD‡©<Á,}èíBß»6­$ÓðéÃðf~]ä¹çŸ“¯~õ«òÐCypuäÌ™³zþî»çM1! yœ†ãâÅ‹òñ|»%ññ˃>(„¿½êðÊ•+øÍßú­ycLh§áxüñÇåßÿûl”8wˆÜ|ÓÍòì¥Krpp 7ÞxS/™ÛН»,%‚¬Ó²Q(£»ƒiX®èHæÒ;ŽÝ…à\“Ç’ˆãÞ Vt‰³m„.¾lªBÓ,}{¸Û/:â¾ô­ÛŽÇëÒúnt &5ŠŸ¶Á»žKŒn™`Ú¥ ÌwaQßuª&…­”X»ØÝÃès6…Ѿø%ùÒ—¿ìÕ¾~]•?å›eU’ Ç„€æqmwÝu—¼ûÝïþº£Äáá¡<ûܳòMoû&ô%Õ²‘>à\µ†ºM‘:Iz±.»´Ð!²Jw‘¥Ó(…³H'õ1³Üg2íâ¤:Óˆ¶l}ÞÛV4üœ³Ô7hƧÑL{À5 ±®)ä¶ŒöºBnÖ:,&½ÑB« k LS] ¶Ôúž×në«_}DîûìgF0çŸüéÁrîºë&5t&€y\ËÐÏw~çwâyŽÃÃCyá…ä­o}«´9s°8¿­SÕd@Û·dº® Õɽªí ¢&ܬkp¿—%6Œi*d¢Mn¢wn!¹ˆyÑ;†Îrué3 Ѻ–~ƒwO@X”õdÃY-4P¸ë—„¸œ±Œ!6GÉs­Î!»äèÊyæÙgåþÏ}N‡àoøêXß왳spšŽ98EÇç?ÿùoø9Ξ=+o{ÛÛäððP^|ñE¹råHÅôç›I4 Ýc¸™wnÇìÕHñhaOiXøbÿf#õà‹ZÐ_ÏŒ'¯ÒÖå/é{ ºtl-É›™Ø˜ŒVm,6w0m¢eÕ2C‹–a]]‹ÚÔvª]eteîØp§J[õ“ºËYÓæ»º¬TRäé§/É#<"ÿÑʧï»o þ"¯Aðßê;::šÔÐStÌÀ)9þäOþD¾ïû¾¯ÕóÙ øÊ•+"€<ÿâ‹rp ò–Þ"-YŸÀµêuQ7”q!cÖk¦Ó`Øy/°Gã~ÃÖ !ç]F(d$BîÛÞu®Y­þ¿f.’ϽŸ°ùk3ÙMƒß ¾ÆÓY7`Lƒ¬ü¹ºÌ„™×X§t´ÛÉc=*Ï=û¬<þøcrxtôC<¯®äº>ÿ™Ç„€æq .\ïú®ïz]£Ç•+WDUew´“—/_–›o¾YΜY—™z®&C0)Ñ®Hʺ‹ö º°kß‚m®·¶B,b̆ŸF²Ã7ÍLXNW¶Éÿ÷–À| %Ç.³­Ï@=/n¯È6‹ÒßšÒu‚vÎë_³HX5öé¢rùåËòÀ—çž{^^|áÙ±€ÿ˜ç5M ˆŽëúë®Ó;ç<`&€yœìãµÀý¿¾i­ù¬à¦o”s×ß°.ˆIÆIÒ§ïê’Æ~ªzž†Æðù.Ű´Gö€fþ²bðîDfÄUbM"6™I}sQus—NJêã%4ú˜'‰…ýÎÖÄ”±~íÂn;yìÑGåK_þ²ìv-A<)¸ƒó¿vI h¹­59{ö¬ÞsἉ&4“z|õ«_•ïüÎï|ã* U988ƒƒ¹þúëEDäÉ'ŸU•·¾õ­²œYܨev ì[ÒLk§‹¦…¹<¹Úö-ºÏn×űPlJ ­ ¸­”Êþü}K*<¾7à.a} Û,ñôÀÝÁ³Ù¯ÉSté ƒ³l’m¿ïRÚØI[D^xîùâ¿(O?ý´3—ŽóÃY~óGVË}cÉ $­'5tvó8áÇwÜ!·Þz+®¦szâ‰'冮—n¸A°Û ô@– =eÃUL|sýr ÷7y1¹‡4(Ú¤éÒ¥—MTŽûWù:Y@¯”DÊÏÈ 7Ü wÞqǼ©f˜ÇI9~õWU~ò''å|_xáQU9wî\ÇÂ/‹.‹œ;{VΜ9ôOíâlMÃù fÕ®AÿÔb‡Øe'B‡a»J+j•¸š^Dÿ½•E$1Ì…¨´v$W._‘çŸ{^^xù%AkòòË/_FÛ IDATÉ¥g.ÉK/½,gΞ¡î&Õ÷NEç•bO¯ÁùÕ}âÃ+úáwJâ,«eÑ‹ÿù?Ïë;æ à<þøÿX¾ÿû¿'éœo¼ñFÿ÷ÁQ+U–å@ŽvGòÒ‹/Ên×äàÌ"gÏž“³gÏÊÁrЯb^jºü"k0ß…ƒØÒù£ëNA·¯LÁ_ܲqéÂw«ŒÃʺrt$/?ÿ²<÷üsò /ÈÑÑNDÖå¸Ë—/˕˗½ÊGkraE °T¹×…U £ÅÜÀu‰†Ê ÃxÀ«û’É1%a,ÀÅÿ¿¡Ïsæ1;€y\ÅÇ>•Ï“~ìv»ÜTÕ—ÑvG;W]ƒÊÁÁYÖ%.ífñ) Š)‘®w­59:ÜÉááe¹rùeyéòe¹rùŠ\¾|YÐ;“«¥ÛÉžC» ˜½†ýÜ*ìãÚxõXÿfðÞåìýþþï-@ù mÿä­o}«~èCš7ÙL󸓀û¿‡_ûïððP®\¹"»Ödwt$ÈNDÚn׸š‰.«7òÑn'‡‡‡)À£5OèØ Wߞ˒Tëós"¼ß½úÑ@ZEûá N( ßl%‘ëM›ðTt+ÈK/½$ßúŽwèí·ß>o¶ Íãj;¾ò•¯¼¡”Ï«¶ªÑUJaY°š¯¿^ŽŽv²ÛÉ•+Wäèh'íà@v»ÝJ[]Ö€ tꬠ5ÙY"YqYô@Zƒ4ìV¨h¥KŠôà¯ôõº‡²ïþ\Úè<«Šš*©H • TĉFùy%¨¬üäUÀAÞ $úL3…&?éŸËõçÎy‚›Çìæq·ß~»¼ç=ïÁü$^]w°ÛÉá®ÉÑááZíïvrt´ 9äÑÚNv­­Éb·@¤!: ¬ªwÔ%874Á>éw¸ °n‚ß”¿¯ ØúÚ"þÞE²òoîûˆþ[Ïe•ºx÷»ß­¿û»¿;/¦™æ1¡Ÿ“—<ØÒv;ÙÒvMŽÚN¯\‘Ãã5äc‰c·[a ÝÎ5Ðvr´Û‰û»Ë q0†P°÷àÞܲÒ\Ñ€–+øfÚýDˆÊäÃÖûºdà¶œ{ÏÖè¼aX×8jp½£üÁÔ_ÿõ_ŸÔ„€æñf3ø=ðPWˆÐ•÷¿èºvpp gpF®ë4ÔÝîHÚ®ÉáÑáÚ ‰tÈžКœ1¬ßÊσĻŠ™u=±˜Áþà mϬ³àÄ`, Ü’Ô06€îqìFÌ«S_[v6ªÛtšÀÞ'>ñ‰y1Í`oöñÁ~PÞ÷¾÷Íðõt¦PÚUJæЃw뿬Uú:øm+ößv²kÝîH°ƒµWÈmgUþú»Àø_ëþʾÖ;‹­m×óÖ°F ´ÄPôdÖ" Ni¸µN`J²¯¹ÓópBÈ_7‚‡*iŸ]8S§cûÖ4SÝ‚µZgøXçÑá«æ0SëÏYÏ/’rë­·êïýÞïÍ‹ê„Óø„.\˜Áÿ5ì¬ ZíY¯‹´û:ºöN‘‘È¢<æÖíýûaW©j¦÷Ú½…”H]‘šÓS~þ­RÌæÕÝÅ|¢ÛÁ£WQòCUVczïØòlùùϦyÌLóxýŽ‹/¾îÖŽ§³^á”–‚±I·i¸?*eË=ЫJ%ŽE4% {̶¤›¥ÕÐ;Ê–,EÏH5=R²î[!&?æ­Ÿ'ƒž´Èy?l ò±} /^œ—ÕLóx=ŽÇ{l~¯S"XD£z§0§J[Ä+m¶p©‚ŽÊaû[ƒ¿Ž7a X&ˆü<¶žF}>¡)Á`è6t3(€Ï9oéÆc—e™×èLóx=Ž;ï¼S~ø‡xVÿ¯S ‚nZ¿Ô Êß]Žy…ƒ:ªJÀÐÎݰ^#Y ÐUæ¦ñc¶5ª%øªöŸ#wt¢éé»ÏWõŒýÔÎÆº—á´T†'¦¤öàƒbšÉÏ0×úùîïþîü_— ÀMÅàoõhÛ‰˜†ÅcÒ¿¢DžFºÏ@<¯–*{»Wú?³Øï3°ܘ[´÷ è®iž|_¬§°¥íOtÐôô>ÓÀšò>ù©ON(h&€y¼VÇç>÷¹ù!¼9@t+`š»Xxþzál\­ŠÖ‚¯ïEYšIÁÛ†9•‰¦Çêžs7#K†e”3GM*t¤B ²Úin¦£ü-{ýxàš¦æ5;À<^ƒã¶Ûn“Ÿø‰Ÿ˜Õÿëx TñÛÑ;þ‹ù*:z¢®‘¿móígÙŒ«àjœº ˆìeã †ÆøI… ¤Çwí:BmOÒ)I ÃIvŠ+ĹtéYÜvÛmóâš `ÿÜãÂ… òÞ÷¾wÿ×=hªhǘ1£wÆ"˜Zªý¹“³ã€µçŸq2×Þè0_k"é0 ú몱” K´2@H˜þQЬXªü^ÖÿEÏ\Ÿýìý“:À<þ9Ǥ|¾ñ&³^ŽÓ½²×\¡s ×=’ ¬¥Çœ´K%$´ftè ·Uù¯\ gç°²k [ð’Fh(Jéñ[}ïADäïþîïæ<`&€y|½ÇÃ?m”nAÀexMM•5ö«‡2€£ÁJŠ~})l[ÒÁµÜ¾w,§Çç€v ÜŽxllÓy98˜×üLó¹ýöÛåÇ~ìÇfõ5ØŽæÚµžS½ÌCÏ‚õ£þ[Iü­ÂGÇ(O .aa²ÊªŸž¯ô@ÁŠò`CN7?(VM „(.@*">ôn¿ýöyÍÍpº¡Ÿ÷¼ç=3ø_í€Âg¦^Ý¢.ŒmTäöÅ:’~“KO¿oT"£nÚÀxk(èþ¬KgíË|Z -È– h>Ù$9Äz@¦ATW ‡ÍûØG'4Àé þ÷Þ{ïü ®ÆÀ¿\Óÿ!“,=eÆŽ„ ?Á]jöØÊ°áxöü Ïã‰'ž˜ßL§ç¸ûî»å}ï{ß þWé4SÚÜ ¾"hù1‹®åË6ê1ú€ÖÍZ¬âÞ$•ud;çã 2¸^°lE{ úéñˆÄ¾È{vÀ¹ÿ³ŸÅÝwß=/¼™Nôsó[ožÁÿ*Æ€jN’hœÉ¼±š¦ƒ«qMK]+_›iÇÂïª7„ÒE„¶äøKˆ•CQѨ=2;ˆ:}U)S¶²oA±¿+ÒL;ýÈß}dÎf¸ö/|á òŽoyÇü ®âÚ{骘¬(…`ÍXU-:UüÚ1zÄÂU ³AëìðÐÖ–-ÆeÝ0¢‡µ¤ÍâZχÈgúþšhàËpŒrò# f/‰¬ŠŠò¹ÑûSôyò½1™®ÙãCúüøÿø¬þ¯êð/{´ö5¡=¶<¤ Ý®Žó2WelÁ,èt!?aI˜°Ô•%,oºÅ“yEv4kf Q~³pš½:Ñ™rES‘ö#<Š}èCóBœ àÚ;.\¸ ßû½ß;ƒÿ‰Êå[TѲЛr€Å4’Ò„ ;pm& Uzõ¥3 `6å«H*êTÌí—)3É ¶XAÇ|%tnÊ_ˆî]s0¥uÓ}™ òñß;]Äf¸¶Ž‹/ÊG?úÑùAœà„ÌX$º{—Zо-Äî2Wu72§…ÊH£Õ“+~ê+(¢È‹fë?ÛèÃk¿ôü)1ƶóFÔ“Ÿ›ºÜ4Dä£û3\CÇ£>*?ýÓ?=«ÿØÀØ8€sMPF~oÓ‚¨—ª›Ùd; "òНkLre±&o¸&ÏÚ `3ϘÏ6ŠnÖû6 ‡n=§÷7&å¦ÝcÞ­¨ˆ\¾|E}ôÑy!Îpò»îºK~äG~dÿt( ­2¢Cpç­×»:§’0œ¾^)£Z6ƒ=ƒî1 “w΋U—bÀqªÐR ßQë|ÛýKTèø>ö=Dh̲ÖÖ1ôû?þãp×]wÍ‹q&€“ ý¼ûÝïžÁÿ$UýY(šªçñlá?J%ìG|dCȳˆ³å×Úz"ÐkKçþë`оÙ.ØÑ@-éµ=Ÿ°1S0[KRÉ8U ZkäDÏ`fÅ4”Ÿ àdÓÝëUýŒ!*Í„p ¶ÙAu#Ø—¾4¸ÇZzÝ45èGö.Q”Û@ã_ƒ_À)g 6"8J]zZ†Å³½…|97åo8õˆô-uBéA¡U¸E&Hî¿ÿþyqÎpòŽÛn»m~'°0Ë’b%¨€Ý¨å9±ƒ.”Æu¨ð‹7º7S%½ýžœj‡2¸Š%í" Æ>HÂaß„ôY„’KL u;—…+ª‚†'ÿ¨'³<Ú6éè¯}ík˜÷ÒL'ê¸çž{ä½ï}ï¬þOT@BGZ“=S% w/šƒû¾Þ»-IãÕáTY[Ⱥ o§xL¿ïÂm@˜Û¼ÒKÚ΀í¯j?8t­+R^‚‘­7UåŸøî¹çžyÎpõ/^”|ä#óƒ8¡ÐüPWXeäKB6Qþº; ÚÀ6Bþ3ƒQ¥bª:A‡3Eu¤ò‘)1À 8~øaù™Ÿù™YýŸDhcÐ Õ€v@è:öNd3®¥ò-SÔ1Il ¯rW 0ŠPø´€½‘AùÔ© {à A?õî$ËE‡*j¸•¥<õº²ÛíäᇞêLWïqÇwÈþèÎà"£ÿF0Tß«îâ¸@k±«À?š½uH ÜäY‚cïý›Ç±‰6;{]®¹{ÀÖy8¦-I@”ɲãùè ié³AIrê6;Ö®^jÃlÞeþÒ—ÀwÜ1¯×™®NèçÖ[oÁÿ$ã?6LmÞÙW…®q¬ Þ A:ï7©é}FÂK¶v6(Ï6ŽÇHZwãoi €9›ØD›Ö ¾òøÍÓ«ÿ¦E‡—¶‡]ûˆÏ`ý,ÿáÿû‡ Ípõ“òy’b¿Òz¡ñ=Þ‚bÐËX” Ø*èVŸ“Y4ŽÌhbEpÖ-AТ4AS·Ç”Š’Eb. Î_Ø‹v9V©PŠü{\Öb±Ù6ú»Ö`yÂUIþŸúÔ§æE;ÀÕsüáþáü®ˆ¡ßzw6ˆ˜ÆMÚ:›­®_Èvê.áÌÀÞÈkAÒ¶pA3‚¶„í„_ jT;c¨UþÆs¤Îˆ2 Rë±­®Ö•= ÐÆ4ŠLP½ôÌ3˜÷ÜLWÅqáÂùøYýŸÔØŸŠÛXvý0åy€‹­šœF¢È[± ¸D‚8HW¿šÇlÂÐ<®öâŸõwbðÉ,œ½¾R–¸Ps=Rk7“ÍR÷z …ÈÆÏkϸ="ÀÇr’£8Ï)¥ôè¯kz/æ$ªÿllßËØÌ“) ´|WÀ#‰ëànͱ™ÞÐãüùóòC?ôChvÓÎêÿDÖýéh»¶‘ëêdCh-~;‚XX¬„܆Ío×û¶±óJÙdpE;×þØj>å¤}Cj©Uþú~Ôi°ë·Ž7¢q˜Év´¨eèpR±]œälЫ‘œ¹SR“âËú¹>ðÀ8þü¼¤gxcŽw¾óØÝR0`6',ü[o)¸#Ø00Še]†%!À"™àÍÞR©Cd[mßxø±ýë cÙ $”ܾê^Uñx´!5ERó:HÙdc/˜öѰ!A”g1dŸNÝìF¥:…v’áŒúvpZ´+PØÇ>ö±yëÍðú·Ýv›\¾|…*ǰÝ+}ö<®æè¿GS¥š3R2Â*ö« ûÿî I躠#œÃŒ ç=¢'  ,I°†6·¯K &þ¥ã±ƒ`Ê,0 ªÜ<Ðáƒà3ƒq4¤¥ù4}~ (2Ù{'õbý±—/_žì3¼¾‡;|)ow¶h¡çqâD¤µlþb¬—KN1ÁjIÞ½’ðlN«„#©_4IçÍÍc¬ %‚à%­~SûDéH×€a€q\Ï ^¾hµl&#þª·,þž rÒ0­ÏF}×Â%0ìq*ñ8JjêA¦É~òŸ˜á™^¿ãpš¨bÛµ–t_&tuG}$£–] a1ÐD‚{Êl@ æ’›„Lî¤Ë×G¡U" ”>-ž1=pö ¨²}.iP\OûN`.sÀÆûIúCBËo!ã@…ÞªA#U ÅP5•P‘¤'dKr¼û ÅÎæ˜—øL¯ýqçwÊüÈ¿ônä!ÌãjCi%¡ÍÄyçÿmð®(wÎzg<¨2TëžlÑ_H0ÎVðßxÿÈŠ“íæ±ZjÒÚ¢Óеù‰–×€fŠ”²ä³†X5ÛY¢n/ %Ãô6ÃuLTåá‡ÆwÞ9/ô™^[èç[Þþ-Vßäeœ*Äy\­`…kv¸AQÓé‹–ì5û9ºÍ»+CØQý9ˆºè׎û,]8±ïmP•ŸºšÔH1 bý<Ó“’£aÕ¶RŠ'2øulNÀ¦š’7ØÒLÒ<wùìÀÆëBðbœŠüýßÿý„‚fx펧žzJΜ=ÛÛQ¥OXî×` “gpuÅ~Ôª{©Ñ.Ïb1ĺÍùqæ×oM•KâÙ¤gø0áú2.¸£d'äΡ¾¿äëRËàÏà CQY^Á$G$»„ ýçБæÏ¢„µWø¤|œ: 2âyê©§æ?ÀkSý¿ë]ïBnã3\‚¸Òšñÿj*üsõÚd·!£E#éñ`+ÃF¼¡È“:B•d“yZ@×¾I>ÃÃà5$£ N¯z"`§Ó;c8ÄkQ'Ý·L&%‰ÖO]‘ &˜ðÛíÄë’qò@H‹ksßìføÆÏ~ö³T‘åÿ¤ÞôÉI|‹)17 ÷aã®vµ,sq…à îhñ+YDf"@}¾}YÔ™d—ÎïAF Î›ºÍåqKð“eõØãZ n:"(+ùïÑÔãÑmèH‚”a!ê0Œ~ê›ÂÒÄÜX~ýM¿wç1À?ç`‹Ç-]  pA/*¯ìÝ77 ú©m[+ñRD9½VÙÜ: —½ãŸ|£êl$¥Ê?`L>ö;ša—¬Æ1!ÂhêlªÇp« ͼRçÂngt±Ħä9ÀŸFøÿzòÕÁÒF€< @ßPÍëcuâDO O>ñÄ´œ àŸýœ={£ö9u ÊÑo©&4]fpÕôýïB*Õ“Y;c|z‹õ"­€¯ÎÇÈH’57@1äœÈÜqâˆÒÈÑÇ^ÁèVö’‘d+¨ìîÿŒÊþ»(טù=¢ÊZqëP]M¢šd"j!•©¸&v÷‘çÄú›¿ùo š àë?{ì1yÛÛÞV½’®-n[Ù•®a.‹½IÕ?C4êÑTý‚CA•|(•sÐn0ˆâ0C?kü Ú%‚¦9ÌWm)qÜFÇØ¶æ¡·ÁADcæXƒÌDí¬êiñ»úónø«%ç­þd MÃba¨IAšJ”xíy:Åôºë®—Ç{lÞ3¼úãž{î‘w¿ë]IÀ É5*C6æÀ1sÀ›ü½x¤ívDßGpÖû&¯Cà ½¡þé›®’‚JäwÞ F(Ó53$‹úâÎ}LЕT17lÌ (øC3ÞEL;±Ü|Ÿ‡}Øš5ç":«$ÜýÿÁEÞâyŒZ«žtWM #]$Œç•>×üüçqÏ=÷Ìb&€WwÜtÓM$ÕREà‘$X°+ÃÍ7†QÁày¼aÁÕêɸ[¬?o¢ÎÀÈh²GvíßpãÙƒú9ñ:UÞæbs0;©cèÙX¾ÂLq.ç¶™p$ £°4;‰M%*Ù&˜<” ‘O2Çš«}R¤p‰‚§’‚ÃG!?ùä'?9oŠ™^ùøð‡?œ.~6¸Ü Õ[øFoÒ:äÀ¬¡™Þ¨à¿þ{ýüÓ¢8‘Óüwçh.,ˆÍ@ÍmÜÑ Ñ÷ÚZ5Œ@Ø@ñ!Ò3QycªÐ~+ÊL©¢÷z\«;YÙh0¡šO´3tX‚ºY‘ÔÍϤt7ª¾ŒG ÀÄj ÛJW®S‘çžþð‡çÍ1ÀþãâÅ‹òö·¿Žñb¬+f¢õ¹%vPã˜1“ÀëüeƒRI²Ý‰Ê+¤ËŒÁ{+xðnkðFwà9ÑD‘9ún±X†Ð«®l°k$a Ïf+!¾–!"ÍPSævœÝàò-N Ö-iéªõY!0¢lF5¼d&´&\èó°¦ÿ1;ÈhèUÎ"“L÷°™Ž?zè!ÕWH§¤2+xØgê‘•Ý!=ƒ@Ø<^ëÊ¿Â+0$./{%¬|Ù‚WÅ IDATý›5ÙØn’Ù^LϤmpÖ·!Ð&²b‰Á¨H-¾‹¶ÇÌE ÅÉ %èn…éÌXcŸ‚²`&2Ì3†ôŠØF>»²sLˆa[}®ž@fð*Åú2Í„u£=I€³IV§…µí÷øD%9;ë(+†&*ª1ƒTäèèP.]º4ož™úà÷–·#éMA7”#Û ÃCº¤ë=“Œn´V¶‰gøçVþµ›BCqøjI¿Çôب°ý ucc±‰H¨Î`û¯›U ŸT)W¾D†u²Ý¢º4P¨ÕV§®þ^•·¿h›–“ ¦l:óVo2jI“øã}¨«Q‘Œ¦"Y¡6']ˆñ}ø]$*ÄXM” ©‡ðáò§>ùÉÙÌ ò…/|¡ûü}Q–uzŒès ñæÍ.ÛL@fæ¶Ø« þŨ}ÚÛh¡)U铯"lù@Áï‹p¥]b_GR®‹aq8wi=,QŽ[º®@ÁÀÐ!Óø åŒ]B9Ϻ{p ú“?³-šðG°7¬E2Zc|LC¥ú1ëðâZº‰¾¦JÌ&´sžhf|­÷þL§ö¸óÎ;åÖõ¯VT£’£ úÐDêÔ.)=&Ìs…ZËóš'¤Û9 g8òÁà¨eLž–’x¦|¶¾F3û“4îêZ–øÆ Á0s&S…‹N'Í„²Š¨’õ¢€±¨×œÊ¦ÆÿM†-uPZ+I¾<‡N‹pŒY%ÓöÔ9•g0¥ÐsF üèåŸ0’zHÔÒ¼—çþóÌ¡ßËzò£>Óñ9N+ËN…‹ßòòT¦pÊÍ· `O%\š:›j¡äÔ6%{W$YëÒ=ȶ׼ly%3¦4t:,f%ÉgÙ#u}!ÓýOq]sîI'ËDå=¼ðâ §zpjÀ¥K—|ùÆ.ÚVnļ(ƒ ð™ª qÿ+%uóT¡R‹Ù¶þ_­Ädd ¾¸,ÌÖ?‹@véÏ¿—\ÙUÅè¥Ì[˜î©ŒÅcS ‚QZ·‚¸‹ä×Ë,#lªEˆ±À=qNÚ ²¼4Fyê”ðмeÜ]«”E±]¤9‚2Š!éû‡+}uj¦ŠÙ;Ì›¿B2Ñš˜C)oP@A9§¿Z ®%Å%‹§õ8sZßøM7Ý·à+$ºµ_4¤ìR†vѺ_`I“E!‹¨ )ݘ®Ý$­ÉNY„oªÆPÍ4NØ_m-7á¦2< ƒ-RܾRàæÙÔ«Úa‹Ûž¯UÍ~d¸*íƒÔíñ<³HO1!¨2ÓØêÙÙçr ¹&x©.‹Ùëi™qH—Œ¨þÀu6Ÿ§*=W—pFÙš& “ªàà¼>Œ %SuÊiðþÕŸSi–bŒ>uѽè&×ß»ÿþûÀhv×ðqáÂÿ··ÿ(㳄­Rµ×0ˆ$í– «Ðµ éyI,Œ )?Há4TýuÈÛÿ&­ÁÖ½5 ¶zÛ#žíCxb%¼…óž)Ál.“X ¨ÔÑóš4-&Lè7ß|3¢H [=•¨ÊTJ0 ››Wx5¦^E„6É (¯Àw¡*D…Q ¤ÙPË;Ù0̶—ED°¸‰†Š¦ÊHõ¤w°Ø°\1·¬è#%q-P« —H5ƒg1´­)¶r-BÀVÕ/¾½ƒ—nËË\2&§Ì(’Áj²Î£†DIÒY»g,uaˆb\iȳ§V>OʨÃ㜚j ã ¹3„crÐÞ9ؽ¦±Ì $ŸÇš(¬2Aw8o [RøÌg>s*a S×\¸paƒ¶9Þhe¥Ÿ°æ&B[¾#Û¤êÉd¸"\ã-–ÓÖœv;f«` ž(|(I,ÈéXðiCðoɀǡ„'³³Ê^G+Ñ„_[çÐê†pîDXÈþ££<ûE È8cÓœ>{Î?i‚©Z¥•Ù"Þ³" Ü5ÒFÂpÝ`4¶Gî~‡¤0°€¸Oˆ©­>*¬ ¤Å{€ªfJ®ÁC,ÉânbC=ïETJÓJX‘iˆº‰Ìú÷?0Щëžyæ¹ùæ·'X5w*I7݇Hæa ÂQ ªiÕJC)¿ØbÐä/iXI,á¹WÂÒD°,vݺœnªŽ5Îèª úº±ü†\š$›òĹ'âÒµA»ª2Ë0d£g¹ Ôô «´2#PÉ[½Ãù ü<ç ®Ð«tsãnH¢‹„°û6;”Ñ|Ûx?×>R XdÜ»H Ä–Õɰ^‰›CØ.ýì¿N2Ú>ˆ2^eC]dD¿ùÎHº'©þKQb²¿Í3Ï<3Ài€ìæZ ÄH@î&•&Lt9FÛjñY©5Wß: ²ô qqzQn‹—¸Ê»¡õ²a¬ªª=¬ÁqYÇY•~'3hú{Lô‹7â)"b<èkÒdiìOžñwT/†P]ÚP07»0þÞh§Xõ÷‘U3‹|5›çsW쵊o³d›L1ÎìüVäÉÛ ¥If'ÃÁ†»WŠÂôÙ¶jøï,+ ¿ßäè5Þ^îœ|-©SÍ ¢¢’‹ ɳ`¤òL2dD¬£{ï½÷ÔÁ@§ :þ¼4¶BÆ!buqJŽNƒX ãÆjëkˆÉH Á?ÕŒ#±ƒ+n¾}Œ/6X¶µ®)´Ël£ ãšÊ]}ƒ}ý/¡ÕþYØ{Ûµ¾ÉÛj.ðM¤§å<ŒÂzÔ9•ÁgR}­*¯ÛÙ*CMUöYÒ5#ÂÄKv­û¿”-”ß-‹_2øOHÑàG‚|j‡¾Ø–xˆg(‰9Kb£ðê¥89s‡æTBÃ\Ý!©HÞìÅ– ©™Ç‹Û;´”Ìî¡.zõP/ÚÒ£P×]wœ?~v×êñôÓOËÍ7ß¼þ͘”àICº’Ó—„½ %n~­. "K¿1–õA­µ¾ÁH\gư͵Âïø¤µ°„U¢4ëyô$ MdYd)öz© Dn$ÍCm…dM{r¼2â“’¬RõÛ’QïhÃhjU6©¯™8ÃÙjÚ3$W¢u2Ó6:)ÉHöPƒ%K8¤÷ ”¹H-Š <#!©Ã(>¾[› -½ï´Ñ+ÑŽ•ý8ÌÞFlªé;Ã_jC0Q¡R_IJbðT@VU²dã6œ”h1Œ¡SM•8JY?Z„*(OÄZóæ/@ϪÑeØBg¿OèÔ@@wß}·œ={.5ï¼”›2VlrhÉ[•tWܬ°|€‘}Q¬Œ2Ä55‚‘ jj´6œfÒÈÍÆ;Dv5cª˜| €QànPÄL²2@=­Ã^ƶÙ²kMÐÖ½†dÑÈLa&\æ²Ù->Ç6àõU¿©¥e° ±E§cÙ"gGîlÃ6³aøïE» )y‰ìN¯ŸÏØ¥¨Œ˜þ g]=*¬Sj-]Óù}¶’äêß9w=2@\ö«^¼ÜÈ Ý‚s—Âï4™‡¹ê3ÉIØÂ˜3… ®)Qžà.U9X9M–‘§¦xòÉ'åæ›oNS%@ ¥éìšµ~6õÂà«d“ IÎD 5Ú°j¥Q¦µî@´3{4:¿`U¿P…ßÛ ÂbFj WXYÛ‚€ˆbÎ(K?#ˆAU!ݨLÙ8Ý ìö„bB7dséì(;[êAxøª½ú¶×”‹G0ï:HnƒC›dÁ·  ®l4 æ`!¿çŠKW‘I°’fª…佩v”U˜-‘ïûå„芚l+‚ÿ #4 UæGܪ9ûÉ›VÕçÝîµQÊ!T>³‰KZ#Àv:aXÉaFM/A{;äJÆÅ—æDcpÒ“O>9ÀµvÜØµ2£ùp¨ t‰ßj"ºÀ—»ÄqÃÌ ò$ÐI=à€\lØÆ;Mp”’w\§­Ï Í}MÙAª/†#ƒ( hÜîdYDZ[|Ò,Gìš`éR»ݫ™KÙn°lKA¢5ifè­d‡³,‚¤j*…bIý]#ÏÙÕr’)’öšŠXÖ•q›xÐ÷IP6%Æ·ØDþ­Vÿûß$1ŽJ…ÌNuÛ&ñ„á‹R"̓Ûû÷Ï»%Ø'ÒеoM”J‚[ fu•xûFT.˜ß_“i3ü“5Á?É€`Y‡ŽŠ]@òè°î?~áO t*  »îº«W?và «9V^Ç`z=û(„[—n­,vÕ¯ÑRBb‚pµ¸—=¡e‚eZUJÚÙİ3gëZ‡n„!œ&Y‹§ÂçÔ’$CË2 Òú¿[¦ã¦åÅ»Q— ®”‹[·´,ÅmO^cÈuPÛìómÛ2Ë 6!½*¶K7ƒ 7ÜÀîÆÄ5¤ò#™X‡Ëé>iøH•A)¦6Ý|fKâ'‰I‘zNPb~&´+lÈ@Y”…ܘ*J'æTÒðvo>—AŠ9#ôŽè®»îšÀµr<ñÄrÓM7…ÔBø}RuAEÃC‹Õ)>4^Û‹ªÌ jî….þ ¢Êå6U»ô‹ß–ÑÐX„ Ç]슌4¤ó‰tGå!4~©5QêJ¸Ó %8…¬°WÛrZE_6}‡3C%9†ÑÈ R6Ûb‰j\«Ê€ûKÞ¶ê>&9¨ õ‘jçP7½ërY!,8Sl+õ´È_´–>o áÒa =xYä!M¡¾æâ$pÍ C%50ˆáRëˆ%6é iøl÷JÒôÞ­±Á1è>·ë¼jõ¡|ï‰'ž˜ àšn¼@`*käbÝñry&†oðŠ{S‹m7rµáÙcƒ Ø(XdQH£ z ëXÐ0…ê%»•Úª!ăd“”FKç2ÛÈÌ: þ-ßH›˜¨Á!ÇxW¶TmÁ^GY~6ƒZziÅÿ•íEF¦Ï˜ÊÂªŠºå>¬~œE {q~ ¤ªÜJßæªRÌmXx‘J“„BÐTZÛ•Ym$ÙHZY„ªë*kbÚttA U»«’j°r‚ûÖ…ÝÂ3åš±Á-2ˆßƒxÒƒð{ÔEø™°¨œw ¶ ,1ç’pƒ¨<ðÀOE¸æ! håÖQ^Õð©Ë4þýÔZWH"le[Cº6µÑ[f}$y]¿éZxÓB2,„&£³eÂ8kÎ#à•Ý$(ª­ ¨æÌ+ó¨å€GÐR@UÈ—ÂìIÿ. « ÛÖš-TZYò9=gýz+O?ÓR[r±Ê›Õï9þ‚ ½%¬¥h%SzlPkýziź²l; ý^y?(ZÿU=3iÁvc©0Wý¡9”PŒ;y(Á_k¢—Ä©}UZêêK0½‚Ïñ›[n£ä2œ!9çR!ƒ^iö`C`Êë4À@×|ðøã¯ðUå!ðþéç ÷ ²©4eG«bhÀeÃ[Ui ¿Q]’…”ˆÕl—ŽäĺҲ Ÿ§¤]MõíE†= Ñ–5´ã 켪’×ô7W»t¨þ$-§3‘a® à!&v*»™Z(ƒüÃú”u¼Z;ƒ­ê¹Vï’†°uΡø0ý³IIZ~ŽÌüA—«²ŸµxÈÐ’±¼l¬aØL¢åp¡Ë¶Ú=Ô­mžQ$7°íà›öJ¤vBX6¥Q ü©?fH²ÑœÛH)Œ%°+ÝOñ}÷Í’pÍ/ Àã?®3œðã™gž‘›nº)8 K4G'«±ÄÕ±í†ù÷¶•…¤6y M–žlŒÊ©ÄZIBë¿[ë­³_Ã,íÌîI4 ‚«:ÖZ%w!ôˆ¨Ð¨BR wÀN2¨,òWЏy<àéq]…Ì´ÄE‰1q³Qyê,áɤ¥ß¯¾Ä¯ïe^m‡MÛ†"õ,C·![Ëoûö+e@dH 2Ì DöÌ4|÷¤&„­ù tVÿ­ÌFÉkOå¹fÿžÊ zçÉE|Qjµ€ñü•ÿ"nŠ…8/–@@© ÛÄØ\NCÖ!Bt§AîT̘÷«É%ˆñÊÕ’±-ºv""M¥õ*š„7©c™&r•¶À+úØ#è\ÿ¹˜Œƒi¡;|IÁ;’&åI¥–¯Óë”ÊHÁTVj܇ÏC9 (… ÄM»" º/%¬hÁ¶A(I{¼M•·h³ÔuE .xÕÍ`ò‡ÒF¿Ý¡È*˜£3VvÉžÒœL܃ uP”0[M(µ0Þ%醬kDl¦†ÍÁrz^˜÷p¡€ò<­A½éÉl¸©K,kŒÄî`BÒ+f¹eüý€} M^Šƒ¶èÁ'u&~ïÒìBNÇqjTWÍUg "8ýg‚T‘‚zGPƒ×›¢-QS•“ÙfHCa–yˆNY‹31ÀÐÙA>„ú’M-âGõõ¤Ãœn%fH±PSTäi{qÇn`ÇafÉU{ãqO€(È"É´›É¦âäH¼zæÅWÁµU²BEΫ$®=¾AE4N˜–<²¢²&k !-iù[«Œ¡eH {#ùSò›joD{u¤X£É‹7]v±^Át>ššY$]!‡=‘©´3AY˜Kœ>Wæ:ÌDÆM^vNÌF?àÁ •¡”;¥¶aºb¬(!¤Ëþ‚ ™‘Özoš\çT^iŸC”;­ÚÎ¥m‘B¤Ž|ÖÀ¼›L‰Ÿ%:+tè›ùšˆ*£$;ˆ9¬ÄM‹eä©hAø¦™À56àup¦ yÅ‚eQ—qh:?l6¤ªRjAƒKÜú€v1,r­òÕMb”n~2ÄÖrcP…"m=çÖ–`û0¿ßõ#´`ï&9MŸƒ=s—AUÉîb)Yô-a”¡m•¾W Ÿä‘Ûò,¢ q-°'xdßœG¬RÎ @ü9F·/)bkµÚ [­8Gå¼c€Bu%Ç1–“à÷Yßw’`Ξdó(’UOS0Çæ.AÚ®¶™GRK­^‚* RæÉÚ?vÝfyÃýÍZÒ ®äÓ¹¨Tµ[7ç®’É$U»…Ò:Àµør·êš»)†àYëUȃËrÁÆÌ@SÍX¿`I“Ùø[•ÂYùÅ2DTÛ€À3˃ò­ªµ*JcÞ¬ŠˆÔ‘Õ~½mЕ«f¤Ùè³m 'ãvð6 5nòÖ ØÑ'y;ÀçÇ ÉJÔ¤6…9lTîÜe$ñ9PrÚЫª³õÜ·–ÊZ7HeSžŸ("YJ F%Ü’½gtÄv‘(\‡V™|á³*ÕcaD͆™žKX“Ö!A’$§ßÍ›‘1l.`Àµ•H-Szü_¸“äÛzRXÈÂ/Bû¢:P“g HáRLV”žœ2µ¡ Ÿ9ù„ߪª&ÃlÇÊA £ñðBd,¾˜iAš ”»*C+Sv mHåŸinUuÀCÒDXñ=HëøtòÇ|nšæ†*eÛ‰îå–ßEñV:M!¶è¥’+ׯ]l[$núä–4Š/r(÷á/›Ç7ó'¨ânHU~°pʼ‚à”Lõ,¦ñÔY0d$¨zBYê!Ï dCê›“ÌØ<Ô”æ5aÛ5žvA¢ƒŽ[¥¦©–Ö‘’]í;SÌFðô-xûÈÑ—'²¿õ˜D„6Ù‰¦[=ÁL'úöNwè"Š'hš«l6íµ@#¸(Š]Z–ê’XÄ¢ kI@ec =ù ?ì,­J†ñdIP}ö<-M¬Á£>•ݸØ{§Ð†Vj `Ó \]–¯E [j–DÕ ‡§`ïD²Ûhϯ IDATëc{O!Uóó0D2 ŸyvPLµ8XÄÏ7ÆÀ`À.ÅFTn"|¿J/X€OŒÙ0Ù˜q¤ßkîmÑ"cY"…ÎêR Ð|Mmøøê8™ÔÔ2<¹± Ãcà\ÆkV÷¤äc»š$RJ3+±/é>È~ܘ4Ðk¯ÈZ¨cQH˜¹'×Ð,Éì-ã S`Ͻ¸ƒW2çêCÞºéõŠ"­Ù+•êÉŒWæ¥`–eCÙ‡º2@ù$\·ý±% uã¦Xcv+Ý€lª­DJ:X%†”Až@» uaj£Bgv ²Þ®ü( -¡1”-Yþƒd´–á´lÀF¥É/ÛWô-Œaò†ô8[pŽvûI¶’((ʈç#1Œ‹ט†}(UÛIÊËÉ”cc¡iúãZõ׳¹/r¦­óQ¨’Xù¹Sä/§i€0p)+™@Ð 7¦Ó’bmwzì¢G–Ê<Zej>mSL ¦OÖH ÈGûթнÙè¢rª" ´'¯ÜN—u~'õ€}àÏñßK+"›¥hŒâ¢,Aqàªëø%±€Pjj x¿d/†º'°QõKYð¤œ[1t‘-Ñ6ó. H‹½}ë'ˆ–‚¿šØ'Ò6üÍFsy$#øîA1t´à˜ä«Kè»:`yyÛžæW&ÐоJ3„e)™4‘”4Ølž4QêwöŒ¦_§‡&6`æ‡Ìp­Ä)Q΄PÑÔ6-[·B8ôZuEA*‘+‘+"I9KAäýùí¬ËO¶¬e'WvØ;À–Ûlš³…úfå8oaêOš»ü3Þ<ü† YjRf„æ¡®¢0VP,M°Sm8…ÿ€0zß&' iUÍCfl`ù(Ï×6*êÊèd-i¥è‰/ܽhÇ€˜?£Ef~½ê”Ò"ʦñ9Ñeè”*q ¨Rézçmªþi±¾|É<–>¯ûÅJ 8ý ã°½ÐýZ.;.ä¶®¬6! kr `ҟ륹ð M©¥d9fEÈËY‘&Jû™O½~m¡È«,c eÞ+žª›‚Þm(Í Š@­Ëy#8–,×ä¦é¦B=e´sÕòyÄ<î LZ@E.­›ãLñ1áñÕÜÕãW˜»OŒä5°°7ºƒêò…´ÙËqyŽÔð–jËPÔÆ@74zr²pd½ŸÁ9Lrr±õ e§³˜¶d+Ò¯f;Æ’+ ’¼7øoTå|\’!ë%@>³”$³yML9¥ óäº £û´µf8¹3ª²Œ¤Ê"‚Ú²,¤:h·ÁB’‚¿Š|1VÐÆ+_%v‚8V²y¥=Åõ¡ÂWÒÒ—’’$µÛHr‡ÈÝÁ–²#‰Ê`ªÕ ÞÁ4|®Œ ä½ þ -ø´bÖ!<Áz5Y¦¸êÖW|ãG…žªpݨ´ŽL6C’Ÿ–Ê‚BÞ‚`ÉeÐ&;“+5¼!"cQ¥à‰QÓßÜ fq†,D 3sŒ©èB¡ë{Á¼O)–ª‰ô!iÛ<ù c.‚]›I@O;]&hE«î*y£PÑU4SU®ÉmhtDTÉ 5oIi‘™(  –{Ü3kR4/´¶ä ´ä¢t·ÄÍ`mvÍŸ>Ê^¡!âÅöGÓ´aó«ãËV dT““-ÞP‘¨Ì ¼U¥¢1Î'ª.>dPñÌ‚mA=—¹Æ9€Ãcìž:ðMƒæjëÕÍ[²³WÑ )¦¶ò™õ. w !AHÉYòì#±s†:!Ó"7pÀ%¹u_p„ -¢Í†@ËæìuÒYRF2)È{·¯´µ]¥fÿ_zβI<ÀÉ?Z³À½rte?Y‚–Õ8`£¼K¸ǽXFCŠhM—$ŒãÓ÷%SI[±,1ã[ÉΦÐÑF°ÚñÙíN0WCoPľ§›}bͳCÞi(ƒÛ2þÝ”UßrîªðP²dˆhs¨Z;è›ËHŠöý6½S ÃhÐúh¤ ©jŒ>Á[–‹²áÅK_·=R 4UެÚ8íð\rP£ä‘(­\¬3†÷,¸qõ¹¸;'`6ÐU¡"ˆ:Õê*–KˆØî\6‹%iÙy#çî`À’Ð’=SÝ6! kj¼½ÞY>§ên_$EYM'ZDµ¤Ò+kªÖc𙃯ªúüœšÛAb5•7B)í4£†¤½„ÄäÙRѤû°AË ƒ˜ÜD…€¼¢¤êØP*6Ƀ:l-ÛÈX­ª£øYL_ÈŠyÕ7¥¢Ú5H–JqKŽä!+kö ÏÉÐÅÀb¢Üy¬_îHÜsã½”¡t^ËÝA„f²|žyØLÜî\ÇðbÄÛ _j¡õ&‚Z¼JççÓŒåƒf&U Å¡¿Bƒ¶çÕ´}x¿P2p‚mÉ+I?kò“6Õg8éñp62½’^VdùcÍ–a.›¶ËpW’¼•ܽdm7˜Ñ Á½nÞ’krÐ…ZÜXiÔŒ"׬yó—+ì:™.¾²lÃçòA@¹iÆd[ ÔÈ/L—”¼¼•º‘$7š‡ÊÎa±]«2Z"–±‚ËNxE‹Y{‘™®šÿµ#I6”…á“eò¹sð7©gNPIà­lK„Ány±ÑYÆyQÜ%bnš–Úƒ17´²$Ñ ’°y“"S0’b¡áºx©÷§ÐîLåòoÍ¢¢üW‘´IîZWUŠz¯µ!0sšíâmìÙó—ùòÙK3ÁÒ¹´¯üÓ¥c•°V®º]¤­l‘i1‘Ѭ‚ÕÛ’ž[FÓCÓHRV-3ýhª‘ZaÊ(†VO/ö-ò¤Â‰›¬¤áv­¢+ÂþÉç‘-±¸tÚ”šl.ÕMß* ]}ˆ‡A0{—E´Tù[l£áÌ›ÃÜ ›¹Øµè¤0 LW¯s›€Õ™+Îê\™ECc‹™]>KÒlÍ ¨dÃ*$+MKeñ5«Þw² _°|­ò=:g×T°yeÕßgm~^w׬›‚±ÙØé¤“Õ)ú,Áìs°KT5Ý(•­ªaåPáè¾áÌU1ÑçÀrÒù†[·v3éf€ìÙmÈ-NC3έÇlGW“9íR ÜY#? ž5S¥nàR»Q†Ñ£aФàÏU56œÉªóW]èªÒóÜ"»6üí“d4óø‹Âê° ¥ƒi™=¤É„³°@ uGºÅfSÖàá]l­T‰‘Ð5 •™¿_·u£ IF…$P„ݨ˜ˆÏnxÁÓq×óÊ”‚¸¶¦À½…tñËVìá@ë0~ádÝv é$üÖÑ™&¿ï¯ÒCZärLÙNi„ó«A0¡cž[r­€-ÊdíôD6tePwDIi× ÷˜®wŒÌó¿_jI¶[j0N' ƒ’' *…¢ 4ΨVnµ²Ïéy^P‚0Ïø5M¡îMª²'Í P0üa€Ï3ûÔÁ6Ê0˜“(K,™ ‰ÁYR©2îqì“/a¥Æ–v:´vÒv-†Q¡JGÇ I.‘šé±¬‰• I‘+ìë±Gne&€“?av0 Eî+™÷ßЂ݀Åé’I,®?ó’à ¡Š–Y«j[ÖôiDg¨Œ )&ö!wKŗȈ÷{UHË9[zÛK©Åÿ7~¡Ñ€¼VöÙ1ªÈt4Ned ¾ñþ [g êÙž¦à]†²™_ ˆj„­rÇBA¾˜ÐG ïŸAçÛî(¬%–ª&èìg¡°¬õS¤¨üñëžmL¹ûC¹'” ¨kÞ÷P);}uöE?Äɨ4XyÊÁš=5²Ù0€“X¸Ìó=M~:®ÂÏpm$!‰õ;KâØgÏV \ T2Œñ‹» ó—Í)¥uÖjbÔŽ€o2®¶6e:A;[ÊõxÒ‰3œt6A›Š¡W4ÅÀø¹Š R@Ål<gZêAZïÊóä­Ò´Y»gÞSÃF€¨ÒÁJ; 2l ç„lsûEFã/ÔWœ¾÷­|~™*ŠÍy‰diêBð‘ Šølº8( 2ˆê’™2érÏþ{4+Iµš¸JŸyU0¯æGbI´LZ&Ó)]WBÐV°¸³‰ë#{zÖNÑ @xý¾±Û´ÄÂúò̲HX/òª»?’ÝM‹ˆ"Ñ2]ã¾d•æ`ÊæòBØk¢Å¨WÊâϹ~­ÂT=0tÆßY¶Zˆp”%ÎÇ+Þ ü™ ë··Gª²k¼U{$Y\JŽ`ôXóëÛR ¸xj;bò [ŽaF’±ßo¬ Z-ŸƒklÅ×E6 ÕAÆ+ ó/‰žÙC™Fš¦ÆäâU§ÍYÞºÉÆ¦1_ªˆû@‰Vl•wÒYJ“¨™Ð ½¦º@–UAA‹,`.>rw´Íº™¬ÄF*p.ËDp¼'-ð†ü–Å©ÊÀœ à„»]“eY|ÛJ‰rfAß7µL ‚E}†LMŽ_ ÍH×Ò¬uÏ-°o%;Ì¡’ îEÀ„ky_üjÁ§^·|[¾Æ­n¬ÊX 4üÿí][˦W‘­zÔ¤MÄ39t!‚il/oýù QñAQ0"Dñ'˜â^©#bk`AH_ØAÒm²k.ÞgïZ«ö~¾îO1ïZt÷÷½çCUíªUk9¸õâ9l4¦Ån—8ÇXÎ_¼«ÜFæÛ Ç:¨Ôàh0¬úHtÏuO?Hå´¶{úmÕkÔV‰h(:Úxíl–­°j†c‡îcìRvú³¡xܘ”I3ù”WÛ+hËi%hæ ,è„7Z1VÞgd¿ïøœi­øøæÇ ¤;ÇNJ½c~gQOíž( NŸG|ß\†0oC´f±Y¹9 ¥*Z™¥KX€¨ºy¡¬|ÀÖ@-x¨ì`ží)oÐí%Q …¶<§Ð¼X4D°0ÐÄk¶ór œd"ÍÛÇɼy}j µ½mæ¹ks÷X¼eÉbaRc¤u“$Ê×W&ÍÂWw ¾6msÕ_+õyp\å’‡‹—çBW0s"ØO#=Ñ´yàk­HHÀ üdèbäïk“„DYê*³¨±C«‡…ƦsžÒã‘IݱïŽÁÆÛ·N…ž8ÁK]õÀOÀ¢øô¥û$õÁ‡O˜¿Õ²Bj o³)@Û+å½µ¿ÓB«îMÆ,m§ö„ã5uû‰þh§ÖŽyšÇ&“âÕkÈÑGVÐøû" ÓC}QlñÀÓIÖ!Ž«™I»HôÀßö`/’Ãq{}+s„)¶ÇÁ¦0¬ÐA±Ô‹k˜­ki!‘!PQÁ<þQÌÚç¡ð²O?~Ù–LŸ’[röÓ´~Ñ> ôàáu=MTùí@eN”á¤Yš!ÏßX–A¨Bëp2È…É0\ÄÍq »±ë62Ëú¶=&…<,zzk®G9Õ°Xâ4ãÅ“Fµ€ÞV#€ñAm­ÙfÛ®ªÐ°ç1Õg6ïÕÜØ:ÜØÖγ‚ó"£èà¤=>˜S5F{)p<÷=áï0ˆ ü@Ç…ƒÛ f)^ätƒáûåÆ`yµ©‹‡—`½Ÿ‹ß (\[žk¥‚Knµdk¡¸¶¨Ô'Ó•˜{þܦ‰ÿ\LÉò©I"ª¬({Îû<,®½~6§™ƒ?FRZyÁöˆ±^ÚgÑ^¯—¦°µXbÙ‘"9½Ô@IwnñùŸc¨Û© èáå_\ŽŒ˜3°‘ÂSßÈÕz{àòåËöÚk¯Q@>±16Û6СAU~ÖOÜjpë ³ðVÚFÎl¡à¬Ó+Š!^5NãìÊ #ÃD–†Ãˆ†½“³äƒÛòv@ׄΑ.uÁz>|ɺñzÏà­1 îÑZöéç0÷Èô¼œ×*¼níVéþ#¨ÛBÌ þm ç°þûVPUVbEeb¿â¡QN/E2_rµ3 OͲF©±>é=ŽÙ(o!w"S جǢ€g ¹ ä4Y¨`"‚ÂÈK]ïE㟉Îòé°£âŽ'¥Ó/_¾¬ð~ØnݺÏÞ¾9Uj§–Ð\9ö9@òêÉo®LÜ© Òàˆšén¾9†Zqé²ãû ók+ׇ˜Üláë¤ 1¥•Xºá2¿w[¾ANhD“¶AAóñ"/tK4¡^þ¾EPMf@f%C½âì7Úä­TÏ2{ –Pq>†SÛ ˆxK[%øÃ0œÄê&©j–«¦ž/i¯XLã&®'E“]â¼Á€Ds5@%3ZJ:;žA_ž¶ª±»g?ˆãqÊfOv°¨i$Ì8ZUÆË`˜˜z‚xøá‡•þÝqéÒ%{×»Þåýë_óó¾SBûŒng ™UߪIÿó¦m?´ ÓEêù³Òb²elßîºé¼éC@kx±ì2îðô`¯âÔÝrÿ죕|>«Ã6te}>%í“£3û'o‰û×}}?À˲êö'ë§M~»VŒÜYC¿^Þ.s‹â¯K#äé6òg¸Øe‡²Ô­Í c¶Ú6¦@Þ ”~Æu™†Šƒn#)ò€ÙÜwšÉ¸9-e¥OvV߸à‹'I7ÖÔ7ÔÙŸök[‡™G¨,j“ì5E‡,J晽èV' úôŸÇ‚1•Òc>ê—.]zÛ'€³uîsŸ³×_}Ÿãžü|»ALôúf§Ù€eDÔÓe|H98ôßü{s >/ÃÕLŒë÷ËjÅŽ´ÐÇ,%ûœy»¬Sê…Qá°Þ ±ð>õzÊ€:”¬O@yª&ÙÕ‰ÞH³4«PòŽÒ:2ˆŸûÇU®êÕvÎá.\§‘},i™Í^¸ UÅíì`),гX´q™VZ]˜(»ÍÞÔP „8ü»1U:¢:ª{±S%‹G¤d) YGe p¡¢¶˜æ ªÂ¨•9[´ë—¹zåªï{ßÓ àí€ÇÜ~ý›_çV­ûÜ^i§ÙÀ¶m,‡}ü ‡"EzBûçp£â¬–Ê™^ÔÖ2(W1º…Jµgò4‘,PЄÁ/g¯”š[óÆI‹°œöRÐõÒ«¯ª¤AûQØUAΘì°eû‘ÇfUϰâSë*Vô¿ð‹”4õ³{õ²P´Ú›¸S6zÎ#e4ŸcÌ’¸ŠP]#Z*oýVß"[ÇûL åU´|tÇÀƒÜ¡Ïç4Gè2£§_ûôå^ˆEà94®{“œs­•½ÆðÔõI]"°,ê¡ÉÈËŸ;J\LZRn?þøY ÏDòÈì™gž‰÷¾÷½# ŸNsš±ÊÞNçQ¥—~º×Š¿kSÅÞ—Á64ÏcÚÒï½ j…Ÿ½}–¯c›J/÷•¦ónkþÜëFLê+å)~Þ`&ƒw³yÞÂÿ+¬–XÚD-é°ýõòsµy*–‰dü¶¢ãY=¨Ò‡áñäâµ·s ¥Ãó7²²'•Ð*a=¶(N¹is–«l,t¢2 R³zïÑ9ÈÏM’r¡’Ie| qÔZò m­œHHJ…;Sé›Q~,õépRÚÞ±ÙË/¿|±q;—pýúuªåÒ‚ŽíĦhÍZC-øP‚´à£„uJàIšŒ¸„[éïž‚ÂbÐGÒ¾mØŽVAkù|öÛh£mÐòçûch§ëDÐïù¿¯O\fÿî¿?¾rûm7\ß/ßcÿÝh½D xÙŽ9]Ö˜I;]Q‚oƒ÷"¬õ“ÙJãJïËúëv¢“a{yçÖö¶ø´Ýl¿}œ[„Að§ÛÚ›K ¶}Û¾ ¶ëüWZª¶Ú„†,£(─AÕ¼ïó<-w ±[eAžãЪڷ$ã€(aådõ¼²S­Ç–.)ëfµŸÒ °ŸàX ±ät-‹:/öXq.qñl6|ðÁŪå-ÿlë5ÃÎÚO¹üâ\É!Ÿ”c;rÛNÒ½°s0lòð˜ pëÒ1¬us˜ìèc9VH6ºüˆÒ€åøÞ4 +§;p #Å¡.BqÀùøÏþhÚ^µ|ÑpÝcvùŠ˜Ûx(¼êõï·Ù꣓¯@Xk­b 3ȲmÕ‡‘™Ä=¾ñ|bE/E9ˆ’ø[ÂQ¼ XRÛ€T°’ºtc¹+Üú ÅB£EF+Ýþìô¸9w~˜ÁåóâeT ¬a©JbÕ@AEº(hx¡71v(aÏ!ê ¾±â\p6™ÎÌìßø†ýá/C^w_þ½_·ÍÌ|Kºh‰”óõœ˜;ƒhJÃ[hßà@Ø·=¢3 s[;ü¦ƒ üzõ#óØ_¨rÓw‚žXG ¾uÑsg­ ´^»õeÐ;Oú¦%¡ÑÛmSϘ•:Á°% %`íYÕµ‚r ÎO•~—ùžÔD-iž­´r,Àï ŸŽàÄ@ÈsôfA 6’o†€ZÜÞœdœùsR§\QHc˜“ÿ/m+ì:gÏê@íÿ@?ì²æV'ÏìX³…ô¦Ñ6Œêf›Ò|ä#þõ¯ýlbâYù<ôÐCöûßÿ~î Ö¿a … ÇN5;-‘eõàÅ8& ^N\NìkfàF©èìurµ6$'¨é§V]4ªÌgú[ÙæÊ‘yÒ¾«è Ð7£a)ˆµV“»¾<7í9Ì2 K•O:Á§õ¡Ÿ$ª¼´UÝ/ZúpOC´m§Ýrð[n › ]žS N;ÕĦ,±UM"bûØÂ X¾¥Ýu.|ñÉÂHÌǃß×JÁ p\sK’zcÊ&£ˆ³‰Ìx~n¼•k $:¹ õƒ8,„y‘‚Æï«§™M‹×y¹éjz,n4bÄ9á¬Nff_þò—íæÍ›Ñ?”.Hc$¼Õj}¿œ—ñɶ·‡ ”KyÝ<Þ‡—@Àí:èÍ¡ûöÅ›KW8BFa-”Šiæ…ú+#ˆbuˆi©øç)#f'1¯ÚDPë-Ôö UúA”êp‘ŒˆƒöQ§uò*/TßûëˆTK`ý´Ñö)ÏgŸ¹X±h$.?ý¶’—Žb•ae‹*Ø' æJÌY9‘öׇÂQ˜çd…õiƒ¨Ï@@¹e'ª°“Úgž2Á<oo9Øõü¨£ei¥9åRûÏ'žðï|ç;gßyn àêÕ«vóæMvеNÔ‚.äNjÛôj±mfÛ›ÛI•¡Î°šs'©p–6&IŠºøb© êÎÇé<>Û$´†­§ Ñ =Œ'ìù¸ûì¯GCÙˆ–ý\lñ’–—Ű£ÁBÈ¥ ¾s{¦µìŸ ½ªªFŠm¦‘”ˆÙƒ=v›‚r&£ ,Ùú1ªêmò,Ž5µåbœÍ:ÿøÞàç‡ö'ÜAë¶ÖÇÞlâUÛµ[8铆 ßQB¡Z¿;sím’ìp˜¬w4ÜŒúú°¦´VIrÔ1ÔmÁÞí98gòaÔÝ®^½znáðüNffŸþô§íÎ;1÷îOÂÙ¶Ù+p¦xâ¢V_$_‚Úï¯÷nLD5ļXfv8wà±ÄÝßZì«zõÄ$é‹É­‰Ñ2ѽ°Fû:¥rm%ùj“,߀Q·èÀS °ÍÔ¬µÍŠ…/d•jŸâì€6àŽVdœ}2øG1¾/3ŽjÈE>=}–c%q8UÇè’Uú*çGŽÚ;tÒðâ—§[ÖîÁF*PGAxÓJÛ’”3z¯&ªι`î…R×\FÙCÿñÿà?8»XøÎsLO>ù¤ýò—¿ä~ý^]GëœýÞpØ œ&æ/ ¥ @³f[¿Î†ê 0ìªô„¡>× òÊ$ä-Wóqhf‹ãì)æx¡äÁÐÙïFìa IDATq‰5}xñ©:ÂÇ¢n·É¹ ãsL˼¹ëe™«[ÌÔ k4û˜–·Œåª¶ X=òäÿ™=ľÀs¯žN.ÐFÿhV¼}(E³oqLÃ]üw‰àS¼¼°EÞ£Ue [qÙ ?ÃÁ‰5`¡«ß_z¸DéèI]9ŠºÎ¿+Xöåç „‡èL0¯¢—ÇYk’דO>yŽ¡ð£ ÐŸøö·¿m¿úÕðý˜éî´=ë›O.‹PÿÃXAhÜ>b²§ÒDOË!À‰EÔF»(¥¬Ù[ø`pðfÇtaqO·°ÊLA48ÆßÛ•àQmGé è´¨€½ä«¶Ì ÝÖVO¹?”G þ~[/šM2,ð6µˆjRñ¹‚ÆàdUÊúuíŽ ´ÐbÌÊ‚®3Çb:,hOC– šEp_¤!¢z†e’w2hOú4ç¢Ì*ÜŽõâgÍ¥ÿÇ>ö1ÿÊW¾¢`§°Æ÷¿ÿ}ûÑ~ÝÚÍAŽ´•9Výu \OpÈ€ì`kJiomͶÌ4Ø[µ«¾ðÿ2 ^u„âíÖŒõûdò«È›MîZ$,ga‹Áki8^6ÿ‚ÃßÛ¶Á׫TТ_ƒ¾ôÆÌgÕLY)ïØ¼ˆ‡U½_ÜÞÁV»ˆU—ß…/@4½*.ÆS·ы#$w4­j¾9™¾°©Oƒ9wžC¸™½~û¶}êSŸòÏ~ö³ rJwŸ ܸqÃþüç?ÇÄÿ‡tã¶Ï¢M”_¾˜™DH‹ë5܆'Þ Þª±…l‹ULƒ^ÃM¨ÝîB ª¿Žõ48VsþÊ塯w—‚Á¾zaUCt:M f-]ÄæYÀÑÀø`S4{¢&™…ÙMD›G+`¸ÐæD¬»S–Ëõ2’z@^iô”=¡ÿŽ{!Vùÿ|Ò öÓêtv<°ƒ¿¦†Õ¨þÙ¡Ž>K"œÞzïÿÑGñ§žzJ-%€ÿ¾ùÍoÚ+¯ü&º\òìûà¼tú2â&ó2ØEfL{uuOCaÈ §ÉòÉÏ ÓÛÁGÚ0Nâ)>›†•|’‚oÔÏfÖöSK*/´{h ¥­åNéK6P‡žÃÆÂ`JL¾rõÂ=&š¸8`Û§JE §©V’0>ªg𥧳•8&:¨äÿ …Ô‹FÎÔ8âÁ«!1a9 }|ïa‘L’ÜŒä|²•ÌyÀhVVùk¯'™œy?}íšík_S0Søÿá…^°Ÿþô§A»æ Ëì¿ØÊ1¿¬TC”u†@Æ-ùe-,ç‹Do·l¶çÖ'ÖÆy¢DïÀof»†ŽÙf§ì’ôËS‹ê®½-t2ªaݤ Bß½˜õÖ…¬T›ÃL×é­)6ê¥~ý¸½¡Óϧ¼n³"äVÖbUñƒ˜™kÖOKÎø™@‰ ;r;¬óç`Z†Ã]ê}ªiø¼8¤ü4·ªæ_ç }~¯kÎTKÖÓ0{ÉDÝïò“Ÿü¤þóŸWSøÛ[B?ûÙÏìÎÛPý;ð:3P³|êuãîÜ'5››¹ËiVÍ`Sw2üç÷ýy¥tÚbH7-’Uw'ÒÔ÷ÅubI+Õv«ŽaQNHÝÕPË ¸J5Ï·aEç‡)‰ÉÛ_Uº,ÕíšE߃"wøsdñ¾¸Í»°ÂDZð©o=(œÔ$Æ;-3ãÉ‚[[器Lk >¹!¼Ë—/ûG?úQµ|”þ¾IàOú“ýö·ÿ£¹u“-O /~¤ÅSª9ëNÓ©!`î°÷?·ùKkJ¡ëd2b°–X,®WtCS…Z¥R\ætäˆy0пà΂n¼G€ÔJ+¦ñu›4ó.ÛeË Ibq0 F»ÆÈ×a‡ãe/³"[†ý~ùK¨5kéxõTp§…¬TKÍÏѼ8f´{À¥zåßCCÒ!©$µœ}Á ?o°8ˆd^vEèòév† Ô÷“ȇŸú°?òÈ# þJÿ|÷»ßµŸÿü¿¢šN;÷|X6ÿ¾ |²8‘ù -ÈÜQÁên• Ž}àµ|[²Ï˜Q/:«ÕÑ^ø:Ô«A!&»ÇÒ˜6[nãz¬ªÊŒ"{Ž>¬ÕŸm¡}0Þj¢Á9®#´Ôìo î<Ë6Ì}ëÒ>!UcÜœ%ÃfZýBÙçÚô/›¿ÙRªº6nºÝàJœO"“dî¡éKÝ=p޳ò+þwnÌúøÇ?î_ü⤔þñ§Ÿüä')ÐLÚþTÓ#ãÓú09¬Ìc—å{5ó.U¾/ºý«–ñ©92m¶d›À:0K €ûWT ã~ªP±ÜžõK~l6Ž1Ã¥¨@ÇÕ ªùVÔãÀTÆgÉf+³‰ð¢€Êÿö)aÒ.ë2ØbžóbÊ’¬¬‡O~¤ë„z«Y…CŸIk7…krIÙ _2¦À¾¶±ùĪ‹‹Z/Ösƒé‘q6 Áwy{(1zêÓûEc6´}ˆ]Dùeö.NY”C6R¯$ƒt˼± f–ê?eIe»ÅÉkzÙD=Êtàp$I9Oó_Î^¸²§æ˜±ÓK®óâ2\_¸‹Û·oÛµk×ì[ßú–‚À[/¾ø¢½öÚköÊ+¯Øo¼\é#+ûü>ªFUTN î>µqüžßÂ:¾·kP€ñ¸ f—ê¯léÚ=…z›ªÑÚ·Ÿ¬34ÃpØx¯ PCI7(fúç¬Öé6í P»XT±&/âûK¼ù%¬½¶æ€Õ$2Ñ5Ë)ªîžôxøš—#ùèévúI#Ìhî‹"©?ïlW¡ŽÊJ<øàƒþ¡}ÈÞóž÷سÏ>«à¢ðï…—^zÉþò—¿ØÿøG{õÕWóàÌJn© äè!Œ ›÷ÏßyÉà­d…Z©Ö‘çczËC]èÏ{0ÿ…ú϶2WÇÓ€ÍÖŽ¥—_·„m2RÉe*£ Zrù²“a@EŒï9ý¼èã¤U#‡ÕºL\µXܺ 5{¼ÚH¦¼Mürt[*„b2¬çH[ÉU­þ«W®ø•+WìÐ`W àí• îܹc7oÞ´7nÄ¥w¿Û²ÃÊ’N;Bl,ÏÕ¹E´R ×_¾¤©ÆßüAˆBÏ4Þ4šæ¼Q  •]ݽœMééº8À…¡+Ê!Œþ=¦D±:uŒÅ-Ôlj(¯bÌ|/±Ó½>>>ˆ====„<<<<ƒ;;;;‚::::‚9999‚8888‚77776666‚555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!! ‚ ‚ ‚‚‚‚ƒ„…ˆáህƒƒƒ‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555‚66667777‚88889999‚::::ƒ;;;;ƒ<<<<„====‡>>>>‹????‡>>>>„====ƒ<<<<ƒ;;;;‚::::9999‚88887777‚6666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ ‚‚ƒƒƒ…ˆáàˆ…„ƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666‚77778888‚9999::::‚;;;;ƒ<<<<‚====„>>>>†????@@@@†????„>>>>‚====ƒ<<<<‚;;;;::::‚99998888‚77776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚ƒ„…ˆààˆ„„ƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////00001111222233334444555566667777‚88889999::::‚;;;;‚<<<<‚====ƒ>>>>„????†@@@@AAAA†@@@@„????ƒ>>>>‚====‚<<<<‚;;;;::::9999‚888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚ƒ„„ˆà߈…ƒƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999‚::::;;;;‚<<<<‚====‚>>>>ƒ????ƒ@@@@†AAAA‘BBBB†AAAAƒ@@@@ƒ????‚>>>>‚====‚<<<<;;;;‚::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒƒƒ…ˆßÞˆ…„ƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::‚;;;;<<<<‚====‚>>>>‚????ƒ@@@@ƒAAAA…BBBB“CCCC…BBBBƒAAAAƒ@@@@‚????‚>>>>‚====<<<<‚;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ ‚‚‚ƒ„…ˆÞÞˆ…ƒƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;‚<<<<====‚>>>>????ƒ@@@@‚AAAAƒBBBB…CCCC•DDDD…CCCCƒBBBB‚AAAAƒ@@@@????‚>>>>====‚<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚ƒƒ…ˆÞ݈…„‚ƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<‚====>>>>‚????@@@@‚AAAAƒBBBBƒCCCC„DDDD—EEEE„DDDDƒCCCCƒBBBB‚AAAA@@@@‚????>>>>‚====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒ‚„…ˆÝ݈„„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====‚>>>>????‚@@@@AAAA‚BBBBƒCCCCƒDDDD„EEEE‰FFFFƒGGGG‰FFFF„EEEEƒDDDDƒCCCC‚BBBBAAAA‚@@@@????‚>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ„„ˆÝ܈…ƒƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????‚@@@@AAAA‚BBBB‚CCCC‚DDDDƒEEEE„FFFFˆGGGG‡HHHHˆGGGG„FFFFƒEEEE‚DDDD‚CCCC‚BBBBAAAA‚@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚ƒƒ…ˆÜ܈„„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????‚@@@@AAAABBBB‚CCCC‚DDDD‚EEEEƒFFFFƒGGGG‡HHHH‹IIII‡HHHHƒGGGGƒFFFF‚EEEE‚DDDD‚CCCCBBBBAAAA‚@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ„„ˆÜÛˆ…ƒƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAA‚BBBBCCCC‚DDDD‚EEEE‚FFFF‚GGGG„HHHH†IIIIJJJJ†IIII„HHHH‚GGGG‚FFFF‚EEEE‚DDDDCCCC‚BBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒƒ…ˆÛÛˆ„„‚ƒ‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBB‚CCCCDDDD‚EEEEFFFFƒGGGG‚HHHHƒIIII†JJJJKKKK†JJJJƒIIII‚HHHHƒGGGGFFFF‚EEEEDDDD‚CCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒ‚„„ˆÛÚˆ…ƒƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCC‚DDDDEEEEFFFF‚GGGG‚HHHHƒIIIIƒJJJJ…KKKK‘LLLL…KKKKƒJJJJƒIIII‚HHHH‚GGGGFFFFEEEE‚DDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒƒ…ˆÚÚˆ„„‚ƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDD‚EEEEFFFFGGGG‚HHHH‚IIII‚JJJJ„KKKK„LLLL“MMMM„LLLL„KKKK‚JJJJ‚IIII‚HHHHGGGGFFFF‚EEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„„ˆÚÙˆ…ƒƒ‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFF‚GGGGHHHH‚IIII‚JJJJ‚KKKKƒLLLL…MMMM“NNNN…MMMMƒLLLL‚KKKK‚JJJJ‚IIIIHHHH‚GGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒƒ…ˆÙÙˆ„„‚‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGG‚HHHHIIII‚JJJJ‚KKKK‚LLLLƒMMMM„NNNN•OOOO„NNNNƒMMMM‚LLLL‚KKKK‚JJJJIIII‚HHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚‚„„ˆÙÙ‡…ƒƒ‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH‚IIIIJJJJ‚KKKK‚LLLL‚MMMMƒNNNN„OOOO•PPPP„OOOOƒNNNN‚MMMM‚LLLL‚KKKKJJJJ‚IIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒƒ…‡Ù؈„„‚‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIII‚JJJJKKKK‚LLLLMMMMƒNNNN‚OOOO…PPPP•QQQQ…PPPP‚OOOOƒNNNNMMMM‚LLLLKKKK‚JJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚„„ˆØØ‡…ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJ‚KKKKLLLLMMMM‚NNNN‚OOOOƒPPPP„QQQQ‰RRRRƒSSSS‰RRRR„QQQQƒPPPP‚OOOO‚NNNNMMMMLLLL‚KKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ…‡Ø×ˆ„„‚‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKK‚LLLLMMMMNNNN‚OOOO‚PPPPƒQQQQ„RRRR‡SSSS‡TTTT‡SSSS„RRRRƒQQQQ‚PPPP‚OOOONNNNMMMM‚LLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚„„ˆ×ׇ…ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLL‚MMMMNNNNOOOO‚PPPP‚QQQQƒRRRRƒSSSS‡TTTT‰UUUU‡TTTTƒSSSSƒRRRR‚QQQQ‚PPPPOOOONNNN‚MMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ…‡×Öˆ„„‚‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMM‚NNNNOOOOPPPP‚QQQQ‚RRRRƒSSSSƒTTTT†UUUU‹VVVV†UUUUƒTTTTƒSSSS‚RRRR‚QQQQPPPPOOOO‚NNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚„„ˆÖÖ‡…ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNN‚OOOOPPPPQQQQ‚RRRR‚SSSSƒTTTTƒUUUU†VVVV‹WWWW†VVVVƒUUUUƒTTTT‚SSSS‚RRRRQQQQPPPP‚OOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ…‡ÖÖ‡…ƒ‚‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOO‚PPPPQQQQRRRR‚SSSS‚TTTTƒUUUUƒVVVV…WWWWXXXX…WWWWƒVVVVƒUUUU‚TTTT‚SSSSRRRRQQQQ‚PPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚ƒ…‡ÖÕˆ„ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSS‚TTTT‚UUUU‚VVVV„WWWW…XXXXYYYY…XXXX„WWWW‚VVVV‚UUUU‚TTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ„ˆÕÕ‡…ƒ‚ƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTT‚UUUU‚VVVV‚WWWW„XXXX…YYYYZZZZ…YYYY„XXXX‚WWWW‚VVVV‚UUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ƒ‚ƒ…‡ÕÔˆ„ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTT‚UUUUVVVV‚WWWW‚XXXX„YYYY…ZZZZ[[[[…ZZZZ„YYYY‚XXXX‚WWWWVVVV‚UUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ„ˆÔÔ‡…ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUU‚VVVVWWWW‚XXXX‚YYYY„ZZZZ…[[[[\\\\…[[[[„ZZZZ‚YYYY‚XXXXWWWW‚VVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒƒ…‡ÔÔ‡„„‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVV‚WWWWXXXX‚YYYY‚ZZZZ„[[[[…\\\\]]]]…\\\\„[[[[‚ZZZZ‚YYYYXXXX‚WWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚„„‡ÔÓˆ„ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWW‚XXXXYYYY‚ZZZZƒ[[[[ƒ\\\\…]]]]^^^^…]]]]ƒ\\\\ƒ[[[[‚ZZZZYYYY‚XXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒƒ„ˆÓÓ‡…ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWW‚XXXXYYYYZZZZ‚[[[[ƒ\\\\ƒ]]]]…^^^^____…^^^^ƒ]]]]ƒ\\\\‚[[[[ZZZZYYYY‚XXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ…‡ÓÓ‡„ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWW‚XXXXYYYYZZZZ‚[[[[\\\\ƒ]]]]ƒ^^^^…____````…____ƒ^^^^ƒ]]]]\\\\‚[[[[ZZZZYYYY‚XXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ„‡ÓÒˆ„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[‚\\\\‚]]]]‚^^^^ƒ____†````‹aaaa†````ƒ____‚^^^^‚]]]]‚\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„ˆÒÒ‡…ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\‚]]]]‚^^^^‚____„````…aaaa‹bbbb…aaaa„````‚____‚^^^^‚]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ…‡ÒÒ‡„ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\‚]]]]^^^^‚____ƒ````ƒaaaa†bbbb‰cccc†bbbbƒaaaaƒ````‚____^^^^‚]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒƒ„‡Òш„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]‚^^^^____ƒ````‚aaaaƒbbbb‡cccc‡dddd‡ccccƒbbbb‚aaaaƒ````____‚^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„ˆÑч„„‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____‚````‚aaaa‚bbbb„cccc‡dddd…eeee‡dddd„cccc‚bbbb‚aaaa‚````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚„„‡Ñч„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////00001111 22223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____‚````aaaa‚bbbbƒccccƒdddd•eeeeƒddddƒcccc‚bbbbaaaa‚````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<< ;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡ÑЈ„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,---- ....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````‚aaaa‚bbbb‚cccc‚dddd„eeee“ffff„eeee‚dddd‚cccc‚bbbb‚aaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::99998888 77776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„ˆÐЇ…ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((( ))))****++++,,,,----....////0000111122223333 444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____‚````aaaabbbb‚cccc‚ddddƒeeee„ffff‘gggg„ffffƒeeee‚dddd‚ccccbbbbaaaa‚````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@ ????>>>>====<<<<;;;;::::9999888877776666555544443333 222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ…‡ÐЇ„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----.... ////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbb‚ccccdddd‚eeeeƒffff„gggg‘hhhh„ggggƒffff‚eeeedddd‚ccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>==== <<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Ðψ„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((( ))))****++++,,,,----....////0000111122223333444455556666 777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbb‚ccccdddd‚eeee‚ffffƒgggg„hhhhiiii„hhhhƒgggg‚ffff‚eeeedddd‚ccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDD CCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666 555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„ˆÏχ…ƒ‚‚‚‚  !!!!""""#### $$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@ AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeee‚ffff‚gggg„hhhh…iiii‹jjjj…iiii„hhhh‚gggg‚ffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKK JJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000//// ....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ…‡Ïχ„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999:::: ;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeee‚ffff‚gggg‚hhhhƒiiii†jjjj‰kkkk†jjjjƒiiii‚hhhh‚gggg‚ffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHH GGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Ïχ„ƒ‚‚‚‚  !!!!"""" ####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccdddd‚eeeeffffgggg‚hhhhƒiiiiƒjjjj‰kkkkllll‰kkkkƒjjjjƒiiii‚hhhhggggffff‚eeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000//// ....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„‡ÏΈ„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>> ????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggg‚hhhh‚iiiiƒjjjjƒkkkk“llllƒkkkkƒjjjj‚iiii‚hhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLL KKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ„ˆÎ·„ƒƒ‚‚  !!!! """"####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffff‚gggghhhh‚iiii‚jjjj‚kkkk…llllmmmm…llll‚kkkk‚jjjj‚iiiihhhh‚ggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////.... ----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Î·„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAA BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhh‚iiiijjjjƒkkkk‚llll…mmmmnnnn…mmmm‚llllƒkkkkjjjj‚iiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPP OOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Î·„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++ ,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggg‚hhhhiiiijjjj‚kkkk‚llll„mmmm†nnnn‡oooo†nnnn„mmmm‚llll‚kkkkjjjjiiii‚hhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMM LLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++ ****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„‡Î͇…ƒ‚‚‚  !!!!""""####!$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFF GGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjj‚kkkk‚llll‚mmmm„nnnn“oooo„nnnn‚mmmm‚llll‚kkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRR QQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFF!EEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ…‡Í͇„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''((((&))))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkk‚llll‚mmmm‚nnnn„oooo‘pppp„oooo‚nnnn‚mmmm‚llllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPP&OOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Í͇„ƒƒ‚‚  (!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJ KKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkk‚llll‚mmmm‚nnnnƒoooo…pppp‹qqqq…ppppƒoooo‚nnnn‚mmmm‚llllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUU TTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJ(IIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Í͇„ƒ‚‚‚‚  !!!!""""####$$$$,%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllll‚mmmmnnnnƒooooƒppppˆqqqqƒrrrrˆqqqqƒppppƒoooonnnn‚mmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRR,QQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ„‡Í͇„ƒ‚‚‚   !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666677778888::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMM NNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkk‚llllmmmm‚nnnnooooƒpppp„qqqq‘rrrr„qqqqƒppppoooo‚nnnnmmmm‚llllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXX WWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::888877776666555544443333222211110000////....----,,,,++++ ****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Í̇„ƒƒ‚‚  3!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmm‚nnnnooooƒppppƒqqqq„rrrrssss„rrrrƒqqqqƒppppoooo‚nnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUU3TTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Ì̇„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>@@@@ BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOO PPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnn‚oooo‚pppp‚qqqqƒrrrrˆssssƒttttˆssssƒrrrr‚qqqq‚pppp‚oooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZ YYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOO NNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBB@@@@>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Ì̇„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000#22223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnoooo‚pppp‚qqqq‚rrrr„ssss‘tttt„ssss‚rrrr‚qqqq‚ppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVV#UUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::999988887777666655554444333322220000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ„‡Ì̇„ƒ‚‚‚  -!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPP QQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnn‚oooopppp‚qqqq‚rrrrƒssss…tttt‹uuuu…ttttƒssss‚rrrr‚qqqqpppp‚oooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPP-OOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Ì̇„ƒ‚‚‚  !!!!""""####2$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnoooo‚ppppqqqq‚rrrrƒssssƒtttt“uuuuƒttttƒssss‚rrrrqqqq‚ppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXX2WWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Ìˇ„ƒƒ‚‚ = !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnoooopppp‚qqqqrrrr‚ssssƒtttt„uuuuvvvv„uuuuƒtttt‚ssssrrrr‚qqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\=[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡ˡ„ƒƒ‚‚ 6 !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqq‚rrrr‚ssss‚ttttƒuuuu‡vvvv…wwww‡vvvvƒuuuu‚tttt‚ssss‚rrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXX6WWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBB@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡ˡ„ƒ‚‚‚  !!!!9""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666677778888::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqq‚rrrrssss‚ttttƒuuuu„vvvvwwww„vvvvƒuuuu‚ttttssss‚rrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]9\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚  !!!!""""####$$$$0%%%%&&&&''''(((())))****++++,,,,----....////000011112222444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrr‚ssssttttƒuuuuƒvvvv…wwww‰xxxx…wwwwƒvvvvƒuuuutttt‚ssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXX0WWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::999988887777666655554444222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚ > !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssss‚tttt‚uuuu‚vvvv„wwww‘xxxx„wwww‚vvvv‚uuuu‚ttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^>]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚ 3 !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUU VVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssss‚ttttuuuuƒvvvv‚wwww†xxxx‰yyyy†xxxx‚wwwwƒvvvvuuuu‚ttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa ````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUU3TTTTSSSSRRRRQQQQPPPPOOOONNNNLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Ëʇ„ƒƒ‚‚  9!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrsssstttt‚uuuu‚vvvv‚wwww„xxxx‘yyyy„xxxx‚wwww‚vvvv‚uuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]9\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::999988887777555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Êʇ„ƒ‚‚‚‚  !!!!""""####9$$$$%%%%&&&&''''(((())))****++++,,,,----....////000022223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrsssstttt‚uuuu‚vvvv‚wwwwƒxxxx…yyyy‰zzzz…yyyyƒxxxx‚wwww‚vvvv‚uuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````9____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBB@@@@????>>>>====<<<<;;;;::::999988887777666655554444333322220000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ; !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrsssstttt‚uuuuvvvv‚wwwwƒxxxx„yyyyzzzz„yyyyƒxxxx‚wwwwvvvv‚uuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[;ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ? !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666677778888::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrsssstttt‚uuuuvvvv‚wwww‚xxxxƒyyyy‡zzzz…{{{{‡zzzzƒyyyy‚xxxx‚wwwwvvvv‚uuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````?____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ? !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvv‚wwww‚xxxx‚yyyy…zzzz{{{{…zzzz‚yyyy‚xxxx‚wwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbb?aaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEECCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::999988887777555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚  8!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222444455556666777788889999::::;;;;<<<<====>>>>????@@@@BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvv‚wwwwxxxxƒyyyyƒzzzz“{{{{ƒzzzzƒyyyyxxxx‚wwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]8\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPNNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBB@@@@????>>>>====<<<<;;;;::::999988887777666655554444222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚  !!!!""""9####$$$$%%%%&&&&''''(((())))****++++,,,,----////0000111122223333444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvv‚wwwwxxxx‚yyyyƒzzzz…{{{{‹||||…{{{{ƒzzzz‚yyyyxxxx‚wwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````9____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::9999888877776666555544443333222211110000////----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Êʆ…‚ƒ‚‚ D !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuu‚vvvvwwwwxxxx‚yyyyƒzzzz„{{{{||||„{{{{ƒzzzz‚yyyyxxxxwwww‚vvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccDbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚…†Êɇ„ƒƒ‚‚ : !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666677778888::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUWWWWXXXXYYYYZZZZ[[[[ \\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxx‚yyyy‚zzzz„{{{{‡||||ƒ}}}}‡||||„{{{{‚zzzz‚yyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffff eeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[:ZZZZYYYYXXXXWWWWUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Éɇ„ƒ‚‚‚ > !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555777788889999::::;;;;<<<<====>>>>????@@@@AAAACCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwww‚xxxxyyyy‚zzzzƒ{{{{…||||‹}}}}…||||ƒ{{{{‚zzzzyyyy‚xxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````>____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPNNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCAAAA@@@@????>>>>====<<<<;;;;::::999988887777555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ @ !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333355556666777788889999::::;;;;<<<<====>>>>????AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzzƒ{{{{„||||}}}}„||||ƒ{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddcccc@bbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA????>>>>====<<<<;;;;::::999988887777666655553333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ A !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011113333444455556666777788889999::::;;;;<<<<====????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxx‚yyyyzzzzƒ{{{{ƒ||||“}}}}ƒ||||ƒ{{{{zzzz‚yyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeAddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????====<<<<;;;;::::999988887777666655554444333311110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  B!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....0000111122223333444455556666777788889999::::;;;;====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwww‚xxxxyyyy‚zzzz‚{{{{ƒ||||…}}}}‰~~~~…}}}}ƒ||||‚{{{{‚zzzzyyyy‚xxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggBffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====;;;;::::9999888877776666555544443333222211110000....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  !!!!9""""####$$$$%%%%&&&&''''(((())))****++++----....////0000111122223333444455556666777788889999::::<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzz‚{{{{ƒ||||„}}}}~~~~„}}}}ƒ||||‚{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````9____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<::::9999888877776666555544443333222211110000////....----++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  !!!!""""####$$$$9%%%%&&&&''''((((****++++,,,,----....////000011112222333344445555666677778888::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwww‚xxxxyyyyzzzz‚{{{{ƒ||||ƒ}}}}‘~~~~ƒ}}}}ƒ||||‚{{{{zzzzyyyy‚xxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddcccc9bbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEECCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::888877776666555544443333222211110000////....----,,,,++++****((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ F !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666677779999::::;;;;<<<<====>>>>????@@@@AAAABBBBDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzz‚{{{{‚||||ƒ}}}}“~~~~ƒ}}}}‚||||‚{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeFddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOOMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDBBBBAAAA@@@@????>>>>====<<<<;;;;::::999977776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ F !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666688889999::::;;;;<<<<====>>>>????@@@@AAAACCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz‚{{{{‚||||ƒ}}}}†~~~~‡†~~~~ƒ}}}}‚||||‚{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffFeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCAAAA@@@@????>>>>====<<<<;;;;::::999988886666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ H !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555777788889999::::;;;;<<<<====>>>>????@@@@BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxx‚yyyyzzzz‚{{{{‚||||‚}}}}…~~~~‹…~~~~‚}}}}‚||||‚{{{{zzzz‚yyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhHggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBB@@@@????>>>>====<<<<;;;;::::999988887777555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ H !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344446666777788889999::::;;;;<<<<====>>>>@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzz{{{{‚||||ƒ}}}}„~~~~„~~~~ƒ}}}}‚||||{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiiHhhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@>>>>====<<<<;;;;::::999988887777666644443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„‚ƒ‚‚ > !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333355556666777788889999::::;;;;<<<<====>>>>@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz‚{{{{‚||||‚}}}}„~~~~„~~~~‚}}}}‚||||‚{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````>____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@>>>>====<<<<;;;;::::999988887777666655553333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ ? !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222444455556666777788889999::::;;;;<<<<====????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz{{{{‚||||ƒ}}}}ƒ~~~~‘ƒ~~~~ƒ}}}}‚||||{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbb?aaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????====<<<<;;;;::::999988887777666655554444222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ @ !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzz{{{{‚||||‚}}}}„~~~~‘„~~~~‚}}}}‚||||{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddcccc@bbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::999988887777666655554444222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ A !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011113333444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzz{{{{‚||||‚}}}}ƒ~~~~“ƒ~~~~‚}}}}‚||||{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddAccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::999988887777666655554444333311110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ B !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011113333444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz‚{{{{‚||||‚}}}}ƒ~~~~“ƒ~~~~‚}}}}‚||||‚{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeBddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::999988887777666655554444333311110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„‡ÉɆ„ƒƒ‚‚ A !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011113333444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz‚{{{{||||ƒ}}}}ƒ~~~~“ƒ~~~~ƒ}}}}||||‚{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeAddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::999988887777666655554444333311110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„†ÉɆ„ƒƒ‚‚ A !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011113333444455556666777788889999::::;;;;====>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz‚{{{{||||ƒ}}}}ƒ~~~~“ƒ~~~~ƒ}}}}||||‚{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeAddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====;;;;::::999988887777666655554444333311110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„†ÉɆ„ƒƒ‚‚ A !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011113333444455556666777788889999::::;;;;====>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz‚{{{{||||ƒ}}}}ƒ~~~~“ƒ~~~~ƒ}}}}||||‚{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeAddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====;;;;::::999988887777666655554444333311110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„†ÉɆ„ƒƒ‚‚ A !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011113333444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz‚{{{{||||ƒ}}}}ƒ~~~~“ƒ~~~~ƒ}}}}||||‚{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeAddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::999988887777666655554444333311110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„†Éɇ„‚ƒ‚‚ B !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011113333444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz‚{{{{‚||||‚}}}}ƒ~~~~“ƒ~~~~‚}}}}‚||||‚{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeBddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::999988887777666655554444333311110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ A !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011113333444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzz{{{{‚||||‚}}}}ƒ~~~~“ƒ~~~~‚}}}}‚||||{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddAccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::999988887777666655554444333311110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ @ !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzz{{{{‚||||‚}}}}„~~~~‘„~~~~‚}}}}‚||||{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddcccc@bbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::999988887777666655554444222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ ? !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222444455556666777788889999::::;;;;<<<<====????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz{{{{‚||||ƒ}}}}ƒ~~~~‘ƒ~~~~ƒ}}}}‚||||{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbb?aaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????====<<<<;;;;::::999988887777666655554444222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„‡Éɇ„‚ƒ‚‚ > !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333355556666777788889999::::;;;;<<<<====>>>>@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz‚{{{{‚||||‚}}}}„~~~~„~~~~‚}}}}‚||||‚{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````>____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@>>>>====<<<<;;;;::::999988887777666655553333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„‡Éɇ„ƒ‚‚‚ H !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344446666777788889999::::;;;;<<<<====>>>>@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzz{{{{‚||||ƒ}}}}„~~~~„~~~~ƒ}}}}‚||||{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiiHhhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@>>>>====<<<<;;;;::::999988887777666644443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ H !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555777788889999::::;;;;<<<<====>>>>????@@@@BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxx‚yyyyzzzz‚{{{{‚||||‚}}}}…~~~~‹…~~~~‚}}}}‚||||‚{{{{zzzz‚yyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhHggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBB@@@@????>>>>====<<<<;;;;::::999988887777555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ F !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666688889999::::;;;;<<<<====>>>>????@@@@AAAACCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyyzzzz‚{{{{‚||||ƒ}}}}†~~~~‡†~~~~ƒ}}}}‚||||‚{{{{zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffFeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCAAAA@@@@????>>>>====<<<<;;;;::::999988886666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ F !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666677779999::::;;;;<<<<====>>>>????@@@@AAAABBBBDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzz‚{{{{‚||||ƒ}}}}“~~~~ƒ}}}}‚||||‚{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeFddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOOMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDBBBBAAAA@@@@????>>>>====<<<<;;;;::::999977776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  !!!!""""####$$$$9%%%%&&&&''''((((****++++,,,,----....////000011112222333344445555666677778888::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwww‚xxxxyyyyzzzz‚{{{{ƒ||||ƒ}}}}‘~~~~ƒ}}}}ƒ||||‚{{{{zzzzyyyy‚xxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddcccc9bbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEECCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::888877776666555544443333222211110000////....----,,,,++++****((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  !!!!9""""####$$$$%%%%&&&&''''(((())))****++++----....////0000111122223333444455556666777788889999::::<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzz‚{{{{ƒ||||„}}}}~~~~„}}}}ƒ||||‚{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````9____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<::::9999888877776666555544443333222211110000////....----++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚  B!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....0000111122223333444455556666777788889999::::;;;;====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwww‚xxxxyyyy‚zzzz‚{{{{ƒ||||…}}}}‰~~~~…}}}}ƒ||||‚{{{{‚zzzzyyyy‚xxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggBffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====;;;;::::9999888877776666555544443333222211110000....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ A !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011113333444455556666777788889999::::;;;;<<<<====????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxx‚yyyyzzzzƒ{{{{ƒ||||“}}}}ƒ||||ƒ{{{{zzzz‚yyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeAddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????====<<<<;;;;::::999988887777666655554444333311110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ @ !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333355556666777788889999::::;;;;<<<<====>>>>????AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxxyyyy‚zzzzƒ{{{{„||||}}}}„||||ƒ{{{{‚zzzzyyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddcccc@bbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA????>>>>====<<<<;;;;::::999988887777666655553333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒ‚‚‚ > !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555777788889999::::;;;;<<<<====>>>>????@@@@AAAACCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwww‚xxxxyyyy‚zzzzƒ{{{{…||||‹}}}}…||||ƒ{{{{‚zzzzyyyy‚xxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````>____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPNNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCAAAA@@@@????>>>>====<<<<;;;;::::999988887777555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Éɇ„ƒƒ‚‚ : !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666677778888::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUWWWWXXXXYYYYZZZZ[[[[ \\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvvwwwwxxxx‚yyyy‚zzzz„{{{{‡||||ƒ}}}}‡||||„{{{{‚zzzz‚yyyyxxxxwwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffff eeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[:ZZZZYYYYXXXXWWWWUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Éʆ…‚ƒ‚‚ D !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuu‚vvvvwwwwxxxx‚yyyyƒzzzz„{{{{||||„{{{{ƒzzzz‚yyyyxxxxwwww‚vvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccDbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚…†Êʇ„ƒ‚‚‚  !!!!""""9####$$$$%%%%&&&&''''(((())))****++++,,,,----////0000111122223333444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvv‚wwwwxxxx‚yyyyƒzzzz…{{{{‹||||…{{{{ƒzzzz‚yyyyxxxx‚wwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````9____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::9999888877776666555544443333222211110000////----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚  8!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222444455556666777788889999::::;;;;<<<<====>>>>????@@@@BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvv‚wwwwxxxxƒyyyyƒzzzz“{{{{ƒzzzzƒyyyyxxxx‚wwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]8\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPNNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBB@@@@????>>>>====<<<<;;;;::::999988887777666655554444222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ? !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssssttttuuuuvvvv‚wwww‚xxxx‚yyyy…zzzz{{{{…zzzz‚yyyy‚xxxx‚wwwwvvvvuuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbb?aaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEECCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::999988887777555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ? !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666677778888::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrsssstttt‚uuuuvvvv‚wwww‚xxxxƒyyyy‡zzzz…{{{{‡zzzzƒyyyy‚xxxx‚wwwwvvvv‚uuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````?____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚ ; !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrsssstttt‚uuuuvvvv‚wwwwƒxxxx„yyyyzzzz„yyyyƒxxxx‚wwwwvvvv‚uuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[;ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>><<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Êʇ„ƒ‚‚‚‚  !!!!""""####9$$$$%%%%&&&&''''(((())))****++++,,,,----....////000022223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrsssstttt‚uuuu‚vvvv‚wwwwƒxxxx…yyyy‰zzzz…yyyyƒxxxx‚wwww‚vvvv‚uuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````9____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBB@@@@????>>>>====<<<<;;;;::::999988887777666655554444333322220000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„‡Êʇ„ƒƒ‚‚  9!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrsssstttt‚uuuu‚vvvv‚wwww„xxxx‘yyyy„xxxx‚wwww‚vvvv‚uuuuttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]9\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::999988887777555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Êˇ„ƒ‚‚‚ 3 !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUU VVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssss‚ttttuuuuƒvvvv‚wwww†xxxx‰yyyy†xxxx‚wwwwƒvvvvuuuu‚ttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa ````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUU3TTTTSSSSRRRRQQQQPPPPOOOONNNNLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚ > !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrrssss‚tttt‚uuuu‚vvvv„wwww‘xxxx„wwww‚vvvv‚uuuu‚ttttssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^>]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚  !!!!""""####$$$$0%%%%&&&&''''(((())))****++++,,,,----....////000011112222444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqqrrrr‚ssssttttƒuuuuƒvvvv…wwww‰xxxx…wwwwƒvvvvƒuuuutttt‚ssssrrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXX0WWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::999988887777666655554444222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡ˡ„ƒ‚‚‚  !!!!9""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666677778888::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqq‚rrrrssss‚ttttƒuuuu„vvvvwwww„vvvvƒuuuu‚ttttssss‚rrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]9\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡ˡ„ƒƒ‚‚ 6 !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnooooppppqqqq‚rrrr‚ssss‚ttttƒuuuu‡vvvv…wwww‡vvvvƒuuuu‚tttt‚ssss‚rrrrqqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXX6WWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBB@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡ˡ„ƒƒ‚‚ = !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnoooopppp‚qqqqrrrr‚ssssƒtttt„uuuuvvvv„uuuuƒtttt‚ssssrrrr‚qqqqppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\=[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Ë̇„ƒ‚‚‚  !!!!""""####2$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnoooo‚ppppqqqq‚rrrrƒssssƒtttt“uuuuƒttttƒssss‚rrrrqqqq‚ppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXX2WWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Ì̇„ƒ‚‚‚  -!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPP QQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnn‚oooopppp‚qqqq‚rrrrƒssss…tttt‹uuuu…ttttƒssss‚rrrr‚qqqqpppp‚oooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPP-OOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Ì̇„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000#22223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnoooo‚pppp‚qqqq‚rrrr„ssss‘tttt„ssss‚rrrr‚qqqq‚ppppoooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVV#UUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::999988887777666655554444333322220000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ„‡Ì̇„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>@@@@ BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOO PPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnn‚oooo‚pppp‚qqqqƒrrrrˆssssƒttttˆssssƒrrrr‚qqqq‚pppp‚oooonnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZ YYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOO NNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBB@@@@>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Ì̇„ƒƒ‚‚  3!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmm‚nnnnooooƒppppƒqqqq„rrrrssss„rrrrƒqqqqƒppppoooo‚nnnnmmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUU3TTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Ì͇„ƒ‚‚‚   !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555666677778888::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMM NNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkk‚llllmmmm‚nnnnooooƒpppp„qqqq‘rrrr„qqqqƒppppoooo‚nnnnmmmm‚llllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXX WWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::888877776666555544443333222211110000////....----,,,,++++ ****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ„‡Í͇„ƒ‚‚‚‚  !!!!""""####$$$$,%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllll‚mmmmnnnnƒooooƒppppˆqqqqƒrrrrˆqqqqƒppppƒoooonnnn‚mmmmllllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRR,QQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ„‡Í͇„ƒƒ‚‚  (!!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJ KKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkk‚llll‚mmmm‚nnnnƒoooo…pppp‹qqqq…ppppƒoooo‚nnnn‚mmmm‚llllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUU TTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJ(IIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Í͇„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''((((&))))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkk‚llll‚mmmm‚nnnn„oooo‘pppp„oooo‚nnnn‚mmmm‚llllkkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPP&OOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Í͇…ƒ‚‚‚  !!!!""""####!$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFF GGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhhiiiijjjj‚kkkk‚llll‚mmmm„nnnn“oooo„nnnn‚mmmm‚llll‚kkkkjjjjiiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRR QQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFF!EEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒ…‡Í·„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++ ,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggg‚hhhhiiiijjjj‚kkkk‚llll„mmmm†nnnn‡oooo†nnnn„mmmm‚llll‚kkkkjjjjiiii‚hhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMM LLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++ ****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„‡Î·„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAA BBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggghhhh‚iiiijjjjƒkkkk‚llll…mmmmnnnn…mmmm‚llllƒkkkkjjjj‚iiiihhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPP OOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Î·„ƒƒ‚‚  !!!! """"####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffff‚gggghhhh‚iiii‚jjjj‚kkkk…llllmmmm…llll‚kkkk‚jjjj‚iiiihhhh‚ggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////.... ----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡ÎΈ„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>> ????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeeeffffgggg‚hhhh‚iiiiƒjjjjƒkkkk“llllƒkkkkƒjjjj‚iiii‚hhhhggggffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLL KKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ„ˆÎχ„ƒ‚‚‚‚  !!!!"""" ####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccdddd‚eeeeffffgggg‚hhhhƒiiiiƒjjjj‰kkkkllll‰kkkkƒjjjjƒiiii‚hhhhggggffff‚eeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000//// ....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„‡Ïχ„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999:::: ;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeee‚ffff‚gggg‚hhhhƒiiii†jjjj‰kkkk†jjjjƒiiii‚hhhh‚gggg‚ffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHH GGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Ïχ…ƒ‚‚‚‚  !!!!""""#### $$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@ AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbbccccddddeeee‚ffff‚gggg„hhhh…iiii‹jjjj…iiii„hhhh‚gggg‚ffffeeeeddddccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKK JJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000//// ....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ…‡Ïψ„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((( ))))****++++,,,,----....////0000111122223333444455556666 777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbb‚ccccdddd‚eeee‚ffffƒgggg„hhhhiiii„hhhhƒgggg‚ffff‚eeeedddd‚ccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDD CCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666 555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„ˆÏЇ„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----.... ////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````aaaabbbb‚ccccdddd‚eeeeƒffff„gggg‘hhhh„ggggƒffff‚eeeedddd‚ccccbbbbaaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>==== <<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡ÐЇ…ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((( ))))****++++,,,,----....////0000111122223333 444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____‚````aaaabbbb‚cccc‚ddddƒeeee„ffff‘gggg„ffffƒeeee‚dddd‚ccccbbbbaaaa‚````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@ ????>>>>====<<<<;;;;::::9999888877776666555544443333 222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ…‡ÐЈ„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,---- ....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____````‚aaaa‚bbbb‚cccc‚dddd„eeee“ffff„eeee‚dddd‚cccc‚bbbb‚aaaa````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::99998888 77776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„ˆÐч„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////00001111 22223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____‚````aaaa‚bbbbƒccccƒdddd•eeeeƒddddƒcccc‚bbbbaaaa‚````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<< ;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„‡Ñч„„‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]^^^^____‚````‚aaaa‚bbbb„cccc‡dddd…eeee‡dddd„cccc‚bbbb‚aaaa‚````____^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚„„‡Ñш„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\]]]]‚^^^^____ƒ````‚aaaaƒbbbb‡cccc‡dddd‡ccccƒbbbb‚aaaaƒ````____‚^^^^]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ„ˆÑÒ‡„ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\‚]]]]^^^^‚____ƒ````ƒaaaa†bbbb‰cccc†bbbbƒaaaaƒ````‚____^^^^‚]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒƒ„‡ÒÒ‡…ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[\\\\‚]]]]‚^^^^‚____„````…aaaa‹bbbb…aaaa„````‚____‚^^^^‚]]]]\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ…‡ÒÒˆ„ƒƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ[[[[‚\\\\‚]]]]‚^^^^ƒ____†````‹aaaa†````ƒ____‚^^^^‚]]]]‚\\\\[[[[ZZZZYYYYXXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒƒ„ˆÒÓ‡„ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWW‚XXXXYYYYZZZZ‚[[[[\\\\ƒ]]]]ƒ^^^^…____````…____ƒ^^^^ƒ]]]]\\\\‚[[[[ZZZZYYYY‚XXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ„‡ÓÓ‡…ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWW‚XXXXYYYYZZZZ‚[[[[ƒ\\\\ƒ]]]]…^^^^____…^^^^ƒ]]]]ƒ\\\\‚[[[[ZZZZYYYY‚XXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒ…‡ÓÓˆ„ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWW‚XXXXYYYY‚ZZZZƒ[[[[ƒ\\\\…]]]]^^^^…]]]]ƒ\\\\ƒ[[[[‚ZZZZYYYY‚XXXXWWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒƒ„ˆÓÔ‡„„‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVV‚WWWWXXXX‚YYYY‚ZZZZ„[[[[…\\\\]]]]…\\\\„[[[[‚ZZZZ‚YYYYXXXX‚WWWWVVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚„„‡ÔÔ‡…ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUU‚VVVVWWWW‚XXXX‚YYYY„ZZZZ…[[[[\\\\…[[[[„ZZZZ‚YYYY‚XXXXWWWW‚VVVVUUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒƒ…‡ÔÔˆ„ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTT‚UUUUVVVV‚WWWW‚XXXX„YYYY…ZZZZ[[[[…ZZZZ„YYYY‚XXXX‚WWWWVVVV‚UUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ„ˆÔÕ‡…ƒ‚ƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTT‚UUUU‚VVVV‚WWWW„XXXX…YYYYZZZZ…YYYY„XXXX‚WWWW‚VVVV‚UUUUTTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ƒ‚ƒ…‡ÕÕˆ„ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSS‚TTTT‚UUUU‚VVVV„WWWW…XXXXYYYY…XXXX„WWWW‚VVVV‚UUUU‚TTTTSSSSRRRRQQQQPPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ„ˆÕÖ‡…ƒ‚‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOO‚PPPPQQQQRRRR‚SSSS‚TTTTƒUUUUƒVVVV…WWWWXXXX…WWWWƒVVVVƒUUUU‚TTTT‚SSSSRRRRQQQQ‚PPPPOOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚ƒ…‡ÖÖ‡…ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNN‚OOOOPPPPQQQQ‚RRRR‚SSSSƒTTTTƒUUUU†VVVV‹WWWW†VVVVƒUUUUƒTTTT‚SSSS‚RRRRQQQQPPPP‚OOOONNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ…‡ÖÖˆ„„‚‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMM‚NNNNOOOOPPPP‚QQQQ‚RRRRƒSSSSƒTTTT†UUUU‹VVVV†UUUUƒTTTTƒSSSS‚RRRR‚QQQQPPPPOOOO‚NNNNMMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚„„ˆÖׇ…ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLL‚MMMMNNNNOOOO‚PPPP‚QQQQƒRRRRƒSSSS‡TTTT‰UUUU‡TTTTƒSSSSƒRRRR‚QQQQ‚PPPPOOOONNNN‚MMMMLLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ…‡×׈„„‚‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKK‚LLLLMMMMNNNN‚OOOO‚PPPPƒQQQQ„RRRR‡SSSS‡TTTT‡SSSS„RRRRƒQQQQ‚PPPP‚OOOONNNNMMMM‚LLLLKKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚„„ˆר‡…ƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJ‚KKKKLLLLMMMM‚NNNN‚OOOOƒPPPP„QQQQ‰RRRRƒSSSS‰RRRR„QQQQƒPPPP‚OOOO‚NNNNMMMMLLLL‚KKKKJJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚ƒƒ…‡ØØˆ„„‚‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIII‚JJJJKKKK‚LLLLMMMMƒNNNN‚OOOO…PPPP•QQQQ…PPPP‚OOOOƒNNNNMMMM‚LLLLKKKK‚JJJJIIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚„„ˆØÙ‡…ƒƒ‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH‚IIIIJJJJ‚KKKK‚LLLL‚MMMMƒNNNN„OOOO•PPPP„OOOOƒNNNN‚MMMM‚LLLL‚KKKKJJJJ‚IIIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒƒ…‡ÙÙˆ„„‚‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFFGGGG‚HHHHIIII‚JJJJ‚KKKK‚LLLLƒMMMM„NNNN•OOOO„NNNNƒMMMM‚LLLL‚KKKK‚JJJJIIII‚HHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚‚„„ˆÙÙˆ…ƒƒ‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDDEEEEFFFF‚GGGGHHHH‚IIII‚JJJJ‚KKKKƒLLLL…MMMM“NNNN…MMMMƒLLLL‚KKKK‚JJJJ‚IIIIHHHH‚GGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒƒ…ˆÙÚˆ„„‚ƒ‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCCDDDD‚EEEEFFFFGGGG‚HHHH‚IIII‚JJJJ„KKKK„LLLL“MMMM„LLLL„KKKK‚JJJJ‚IIII‚HHHHGGGGFFFF‚EEEEDDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚ƒ‚„„ˆÚÚˆ…ƒƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBBCCCC‚DDDDEEEEFFFF‚GGGG‚HHHHƒIIIIƒJJJJ…KKKK‘LLLL…KKKKƒJJJJƒIIII‚HHHH‚GGGGFFFFEEEE‚DDDDCCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒƒ…ˆÚÛˆ„„‚ƒ‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAABBBB‚CCCCDDDD‚EEEEFFFFƒGGGG‚HHHHƒIIII†JJJJKKKK†JJJJƒIIII‚HHHHƒGGGGFFFF‚EEEEDDDD‚CCCCBBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒ‚„„ˆÛÛˆ…ƒƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????@@@@AAAA‚BBBBCCCC‚DDDD‚EEEE‚FFFF‚GGGG„HHHH†IIIIJJJJ†IIII„HHHH‚GGGG‚FFFF‚EEEE‚DDDDCCCC‚BBBBAAAA@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚‚‚‚ƒƒ…ˆÛ܈„„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????‚@@@@AAAABBBB‚CCCC‚DDDD‚EEEEƒFFFFƒGGGG‡HHHH‹IIII‡HHHHƒGGGGƒFFFF‚EEEE‚DDDD‚CCCCBBBBAAAA‚@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ„„ˆÜ܈…ƒƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====>>>>????‚@@@@AAAA‚BBBB‚CCCC‚DDDDƒEEEE„FFFFˆGGGG‡HHHHˆGGGG„FFFFƒEEEE‚DDDD‚CCCC‚BBBBAAAA‚@@@@????>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚ƒƒ…ˆÜ݈„„ƒ‚‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<====‚>>>>????‚@@@@AAAA‚BBBBƒCCCCƒDDDD„EEEE‰FFFFƒGGGG‰FFFF„EEEEƒDDDDƒCCCC‚BBBBAAAA‚@@@@????‚>>>>====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚ƒ„„ˆÝ݈…„‚ƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;<<<<‚====>>>>‚????@@@@‚AAAAƒBBBBƒCCCC„DDDD—EEEE„DDDDƒCCCCƒBBBB‚AAAA@@@@‚????>>>>‚====<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒ‚„…ˆÝÞˆ…ƒƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::;;;;‚<<<<====‚>>>>????ƒ@@@@‚AAAAƒBBBB…CCCC•DDDD…CCCCƒBBBB‚AAAAƒ@@@@????‚>>>>====‚<<<<;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚ƒƒ…ˆÞÞˆ…„ƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999::::‚;;;;<<<<‚====‚>>>>‚????ƒ@@@@ƒAAAA…BBBB“CCCC…BBBBƒAAAAƒ@@@@‚????‚>>>>‚====<<<<‚;;;;::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ ‚‚‚ƒ„…ˆÞ߈…ƒƒƒ‚‚‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666777788889999‚::::;;;;‚<<<<‚====‚>>>>ƒ????ƒ@@@@†AAAA‘BBBB†AAAAƒ@@@@ƒ????‚>>>>‚====‚<<<<;;;;‚::::9999888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚ƒƒƒ…ˆßàˆ„„ƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////00001111222233334444555566667777‚88889999::::‚;;;;‚<<<<‚====ƒ>>>>„????†@@@@AAAA†@@@@„????ƒ>>>>‚====‚<<<<‚;;;;::::9999‚888877776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚ƒ„„ˆààˆ…„ƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333444455556666‚77778888‚9999::::‚;;;;ƒ<<<<‚====„>>>>†????@@@@†????„>>>>‚====ƒ<<<<‚;;;;::::‚99998888‚77776666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚‚‚‚ƒ„…ˆàህƒƒƒ‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////000011112222333344445555‚66667777‚88889999‚::::ƒ;;;;ƒ<<<<„====‡>>>>‹????‡>>>>„====ƒ<<<<ƒ;;;;‚::::9999‚88887777‚6666555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ ‚‚ƒƒƒ…ˆáህ„ƒ‚‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////00001111222233334444‚55556666‚7777‚8888‚9999‚::::ƒ;;;;„<<<<ˆ====‰>>>>ˆ====„<<<<ƒ;;;;‚::::‚9999‚8888‚77776666‚555544443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!! ‚ ‚ ‚‚‚‚ƒ„…ˆá∅„ƒ‚‚‚‚ ‚ ‚ !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....////0000111122223333‚44445555‚6666‚7777‚8888‚9999„::::„;;;;‹<<<<====‹<<<<„;;;;„::::‚9999‚8888‚7777‚66665555‚44443333222211110000////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!! ‚ ‚ ‚‚‚‚ƒ„…ˆâ≅ƒƒƒ‚‚‚ ‚ ‚ !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....‚////000011112222‚33334444‚5555‚6666‚7777ƒ8888ƒ9999…::::—;;;;…::::ƒ9999ƒ8888‚7777‚6666‚55554444‚3333222211110000‚////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!! ‚ ‚ ‚‚‚ƒƒƒ…‰â㈅„ƒ‚ƒ‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----....‚////00001111‚22223333‚4444‚5555‚6666ƒ7777„8888„9999—::::„9999„8888ƒ7777‚6666‚5555‚44443333‚222211110000‚////....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ ‚ƒ‚ƒ„…ˆã䈅„ƒ‚‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----‚....////0000‚11112222‚3333‚4444ƒ5555‚6666„7777…8888•9999…8888„7777‚6666ƒ5555‚4444‚33332222‚11110000////‚....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ ‚‚‚‚ƒ„…ˆä䉅ƒƒƒ‚‚‚‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,----‚....////‚00001111‚2222‚3333ƒ4444ƒ5555ƒ6666†7777“8888†7777ƒ6666ƒ5555ƒ4444‚3333‚22221111‚0000////‚....----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ ‚‚‚ƒƒƒ…‰ä刅„ƒƒ‚‚‚ ‚ ‚  !!!!""""####$$$$%%%%&&&&''''(((())))****++++,,,,‚----....‚////‚00001111ƒ2222‚3333ƒ4444„5555†6666‘7777†6666„5555ƒ4444‚3333ƒ22221111‚0000‚////....‚----,,,,++++****))))((((''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ ‚‚‚ƒƒ„…ˆå戅„ƒƒ‚‚‚ ‚ ‚  !!!!""""####$$$$%%%%&&&&‚''''(((())))****++++‚,,,,----‚....////‚0000ƒ1111‚2222ƒ3333„4444‡55556666‡5555„4444ƒ3333‚2222ƒ1111‚0000////‚....----‚,,,,++++****))))((((‚''''&&&&%%%%$$$$####""""!!!!  ‚ ‚ ‚‚‚ƒƒ„…ˆææ‰…„ƒ‚ƒ‚‚ ‚ ‚  !!!!""""####$$$$%%%%&&&&''''‚(((())))****‚++++,,,,‚----....‚////ƒ0000‚1111„2222„3333‡44445555‡4444„3333„2222‚1111ƒ0000‚////....‚----,,,,‚++++****))))‚((((''''&&&&%%%%$$$$####""""!!!! ‚ ‚ ‚ ‚ƒ‚ƒ„…‰æçˆ…„ƒƒ‚‚‚‚ ‚ ‚ ‚ !!!!""""####$$$$%%%%&&&&''''‚(((())))****‚++++‚,,,,----‚....ƒ////ƒ0000ƒ1111„2222ˆ3333‹4444ˆ3333„2222ƒ1111ƒ0000ƒ////‚....----‚,,,,‚++++****))))‚((((''''&&&&%%%%$$$$####""""!!!! ‚‚ ‚ ‚ ‚‚‚ƒƒ„…ˆç牅„ƒƒ‚‚‚‚ ‚ ‚ ‚ ‚!!!!""""####$$$$%%%%&&&&''''‚(((())))‚****‚++++,,,,‚----ƒ....ƒ////ƒ0000…1111‰2222‡3333‰2222…1111ƒ0000ƒ////ƒ....‚----,,,,‚++++‚****))))‚((((''''&&&&%%%%$$$$####""""‚!!!! ‚‚ ‚ ‚ ‚‚‚ƒƒ„…‰ç艅„ƒƒ‚‚‚‚ ‚ ‚ ‚ !!!!""""####‚$$$$%%%%&&&&‚''''((((‚))))****‚++++‚,,,,ƒ----ƒ....ƒ////…0000›1111…0000ƒ////ƒ....ƒ----‚,,,,‚++++****‚))))((((‚''''&&&&%%%%‚$$$$####""""!!!! ‚‚ ‚ ‚ ‚‚‚ƒƒ„…‰è鈆„ƒƒ‚‚‚‚ ‚ ‚ ‚‚ !!!!""""####‚$$$$%%%%&&&&‚''''‚(((())))‚****‚++++ƒ,,,,ƒ----ƒ....…////›0000…////ƒ....ƒ----ƒ,,,,‚++++‚****))))‚((((‚''''&&&&%%%%‚$$$$####""""!!!! ‚‚‚ ‚ ‚ ‚‚‚ƒƒ„†ˆéꈆƒ„‚ƒ‚‚‚ ‚ ‚ ‚‚‚ !!!!""""####‚$$$$%%%%‚&&&&''''‚((((‚))))‚****ƒ++++ƒ,,,,„----…....™////…....„----ƒ,,,,ƒ++++‚****‚))))‚((((''''‚&&&&%%%%‚$$$$####""""!!!!‚ ‚‚‚ ‚ ‚ ‚‚ƒ‚„ƒ†ˆêꉅ„„‚ƒ‚‚‚ ‚ ‚ ‚‚‚ ‚!!!!""""‚####$$$$‚%%%%&&&&‚''''‚((((‚))))ƒ****ƒ++++„,,,,…----™....…----„,,,,ƒ++++ƒ****‚))))‚((((‚''''&&&&‚%%%%$$$$‚####""""‚!!!! ‚‚‚‚ ‚ ‚ ‚‚ƒ‚„„…‰ê뉅„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚ ‚!!!!""""‚####$$$$‚%%%%‚&&&&‚''''‚((((ƒ))))ƒ****„++++…,,,,™----…,,,,„++++ƒ****ƒ))))‚((((‚''''‚&&&&‚%%%%$$$$‚####""""‚!!!! ‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„…‰ë쉅„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚‚ ‚!!!!‚""""####‚$$$$‚%%%%‚&&&&‚''''ƒ((((ƒ))))„****†++++—,,,,†++++„****ƒ))))ƒ((((‚''''‚&&&&‚%%%%‚$$$$####‚""""‚!!!! ‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„…‰ì쉆„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚‚‚‚ !!!!‚""""‚####‚$$$$‚%%%%‚&&&&ƒ''''ƒ((((„))))†****—++++†****„))))ƒ((((ƒ''''‚&&&&‚%%%%‚$$$$‚####‚""""!!!!‚ ‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„†‰ì퉆„ƒƒƒ‚‚‚ ‚ ‚ ‚‚‚‚‚‚‚‚ ‚!!!!""""‚####ƒ$$$$‚%%%%ƒ&&&&ƒ''''„((((†))))—****†))))„((((ƒ''''ƒ&&&&‚%%%%ƒ$$$$‚####""""‚!!!!‚ ‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ„†‰í…ƒƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚ ‚!!!!‚""""‚####ƒ$$$$ƒ%%%%ƒ&&&&„''''‡((((•))))‡((((„''''ƒ&&&&ƒ%%%%ƒ$$$$‚####‚""""‚!!!!‚ ‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ……‰î…ƒƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ ‚!!!!‚""""ƒ####ƒ$$$$ƒ%%%%„&&&&‡''''•((((‡''''„&&&&ƒ%%%%ƒ$$$$ƒ####‚""""‚!!!!‚ ‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒƒ……‰ï„„ƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ƒ ‚!!!!‚""""ƒ####„$$$$„%%%%‡&&&&•''''‡&&&&„%%%%„$$$$ƒ####‚""""‚!!!!ƒ ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚‚ƒƒ„„…Šïð‰†„„ƒƒ‚‚‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒ ‚!!!!ƒ""""„####„$$$$‡%%%%•&&&&‡%%%%„$$$$„####ƒ""""‚!!!!ƒ ‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ‚‚ƒƒ„„†‰ðñ‰†„„ƒƒ‚‚‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ ƒ!!!!ƒ""""…####‡$$$$•%%%%‡$$$$…####ƒ""""ƒ!!!!ƒ ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ‚‚ƒƒ„„†‰ñò‰†„„ƒƒ‚‚ƒ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ „!!!!…""""†####—$$$$†####…""""„!!!!ƒ ‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ƒ ‚‚ƒƒ„„†‰ò󉆄„ƒƒ‚ƒ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒƒ„ „!!!!‡""""—####‡""""„!!!!„ ƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ƒ‚ƒƒ„„†‰óô‰†„„ƒƒ‚ƒ‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ„… ‡!!!!—""""‡!!!!… „ƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ƒ‚ƒƒ„„†‰ôôІ„„ƒƒƒ‚‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„„‡ ™!!!!‡ „„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ‚ƒƒƒ„„†ŠôõІ„„ƒƒƒ‚ƒ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚‚ƒ‚ƒƒ„„‡› ‡„„ƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ƒ ‚ƒƒƒ„„†ŠõöІ„„ƒƒƒƒ‚ ‚ ‚ ‚ ‚ ‚‚‚‚‚‚‚‚‚ƒ‚ƒƒƒƒ…††…ƒƒƒƒ‚ƒ‚‚‚‚‚‚‚‚‚‚ ‚ ‚ ‚ ‚ ƒƒƒƒ„„†Šö÷І„„„ƒ‚ƒ‚ ƒ ‚ ‚ ‚ ‚‚‚‚‚‚‚ƒ‚‚ƒƒƒ„„†Ÿ†„„ƒƒƒ‚‚ƒ‚‚‚‚‚‚‚‚ ‚ ‚ ƒ ‚ ƒ‚ƒ„„„†Š÷øŠ†…ƒ„ƒƒ‚ƒ ‚ ‚ ‚ ‚ ƒ‚‚‚‚‚ƒ‚‚ƒƒƒ„„†ŽƒŽ†„„ƒƒƒ‚‚ƒ‚‚‚‚‚ƒ‚ ‚ ‚ ‚ ƒ ‚ƒƒ„ƒ…†ŠøùІ…„ƒƒƒƒ‚ ‚ ƒ ‚ ‚ ‚‚ƒ‚‚ƒ‚ƒ‚ƒƒ„……‹‹‹……„ƒƒ‚ƒ‚ƒ‚‚ƒ‚‚‚ ‚ ƒ ‚ ‚ ƒƒƒƒ„…†ŠùúІ…„ƒƒƒƒƒ ‚ ‚ ƒ ‚ ‚‚ƒ‚ƒ‚ƒ‚ƒ„ƒ……ŠŠ……ƒ„ƒ‚ƒ‚ƒ‚ƒ‚‚‚ ƒ ‚ ‚ ƒ ƒƒƒƒ„…†ŠúûІ…„„ƒƒ‚ƒ ƒ ‚ ‚ ƒ ‚‚ƒ‚ƒƒ‚ƒ„ƒ……‰“‰……ƒ„ƒ‚ƒƒ‚ƒ‚‚ƒ ‚ ‚ ƒ ƒ ‚ƒƒ„„…†ŠûüІ…„„ƒƒƒƒ ‚ ƒ ‚ ƒ ‚‚ƒƒ‚ƒƒ„ƒ……ˆ—ˆ……ƒ„ƒƒ‚ƒƒ‚‚ƒ ‚ ƒ ‚ ƒ ƒƒƒ„„…†ŠüýІ…„„ƒ„‚ƒ ƒ ‚ ƒ ‚ ƒƒ‚ƒƒƒƒ„„†‡›‡†„„ƒƒƒƒ‚ƒƒ‚ ƒ ‚ ƒ ƒ ‚„ƒ„„…†ŠýþІ……ƒ„ƒƒƒ ‚ ƒ ƒ ‚ ƒƒƒƒƒƒ„„…‡Ÿ‡…„„ƒƒƒƒƒƒ‚ ƒ ƒ ‚ ƒ ƒƒ„ƒ……†ŠþÿЇ…„„ƒƒ„‚ ƒ ƒ ƒ ‚ ƒƒƒƒ„„„…†£†…„„„ƒƒƒƒ‚ ƒ ƒ ƒ ‚ „ƒƒ„„…‡ŠÿÿЇ…„„„ƒƒƒ ƒ ƒ ƒ ƒ ƒƒƒƒ„„…‡‹‹‡…„„ƒƒƒƒƒ ƒ ƒ ƒ ƒ ƒƒ„„„…‡ŠÿÿЇ……„ƒ„ƒƒ ƒ ƒ ƒ ƒ ƒƒ„„„…†‰•‰†…„„„ƒƒƒ ƒ ƒ ƒ ƒ ƒ„ƒ„……‡Šÿÿ‚Ї†„„„ƒ„ƒ ƒ ƒ ƒ ƒ „ƒ„„…†ˆ›ˆ†…„„ƒ„ƒ ƒ ƒ ƒ ƒ „ƒ„„„†‡Šÿ‚ÿƒ‹‡……„ƒ„ƒ„ ƒ ƒ ƒ „ ƒ„„…†‡¡‡†…„„ƒ„ ƒ ƒ ƒ „ ƒ„ƒ„……‡‹ÿƒÿ„‹‡……„„„ƒ„ ƒ ƒ „ ƒ „„…†‡…‡†…„„ƒ „ ƒ ƒ „ ƒ„„„……‡‹ÿ„ÿ…‹‡†…„„ƒ„„ ƒ „ ƒ „ „……‡‹“‹‡……„„ ƒ „ ƒ „ „ƒ„„…†‡‹ÿ…ÿ†‹‡†…„„„„„ ƒ „ „ „ ……†‰‰†……„ „ „ ƒ „ „„„„…†‡‹ÿ†ÿ‡Œ‡†…„„„„„ „ „ „ „ …†‰£‰†…„ „ „ „ „ „„„„…†‡Œÿ‡ÿˆŒ‡†……„„„„ „ … „ … †‡ŽŽ‡†… „ … „ „ „„„……†‡ŒÿˆÿŠ‹ˆ†……„„„… „ „ … † ‡‰‰‡† … „ „ … „„„……†ˆ‹ÿŠÿ‹‹ˆ††„…„…„ … … … † ‰¥‰† … … … „ …„…„††ˆ‹ÿ‹ÿŒŒˆ†…………„… … … † ˆ ‘ˆ † … … … „…………†ˆŒÿŒÿŒˆ‡……………… … † ‡ Š ŸŠ ‡ † … … ……………‡ˆŒÿÿŽˆ††…………† † † ‰ © ‰ † † † …………††ˆÿŽÿŒˆ‡†…†……† ‡ ‡ — ‡ ‡ † ……†…†‡ˆŒÿÿ‘ˆ‡††…†…‡ ‡ Š ¥ Š ‡ ‡ …†…††‡ˆÿ‘ÿ’‰‡†††††‡ ˆ ˆ ‡ †††††‡‰ÿ’ÿ”ˆˆ†††‡†ˆ ‹ £ ‹ ˆ †‡†††ˆˆÿ”ÿ•‰ˆ†‡†‡‡Š “ ‡ “ Š ‡‡†‡†ˆ‰ÿ•ÿ—‰ˆ‡†‡‡‰Œ ¡ Œ ‰‡‡†‡ˆ‰ÿ—ÿ˜Ž‰ˆ‡‡‡ˆ‹¯ ‹ˆ‡‡‡ˆ‰Žÿ˜ÿ™ŽŠˆˆ‡ˆ‰¡ ‰ˆ‡ˆˆŠŽÿ™ÿ›ŽŠˆˆˆ‰Š³Š‰ˆˆˆŠŽÿ›ÿŽŠ‰ˆ‰‰¥‰‰ˆ‰ŠŽÿÿžŠ‰‰‰‹•‹•‹‰‰‰Šÿžÿ ‹‰‰ŠŽ©ŽŠ‰‰‹ÿ ÿ¡‹ŠŠ‹’—’‹ŠŠ‹ÿ¡ÿ£‹‹‹±‹‹‹ÿ£ÿ¥Œ‹Œ£Œ‹Œÿ¥ÿ§‹Žš…šŽ‹ÿ§ÿ¨‘±‘ÿ¨ÿª’Ž“¡“Ž’ÿªÿ¬’¿’ÿ¬ÿ®“’³’“ÿ®ÿ°”•¥•”ÿ°ÿ²•‘‘•ÿ²ÿµ•“¿“•ÿµÿ·––³––ÿ·ÿ¹˜š£š˜ÿ¹ÿ¼˜§ƒ§˜ÿ¼ÿ¾›É›ÿ¾ÿÁ¿ÿÁÿÄ ³ ÿÄÿǤ¥¤ÿÇÿʲƒ²ÿÊÿÍãÿÍÿÑÛÿÑÿÕÓÿÕÿÚÉÿÚÿß¿ÿßÿå³ÿåÿí£ÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTRUEVISION-XFILE.gource-0.56/data/fonts/0000775002342600234260000000000015152463042014636 5ustar andrewcandrewcgource-0.56/data/fonts/FreeSans.ttf0000644002342600234260000256333015152463042017075 0ustar andrewcandrewc0FFTMT˜°ð æ¼GDEFb2? d8¦GPOS7Ÿ§œ žTHhGSUBñÆtý jà3rOS/2)s¾@¸Vcmap¦èöäT´¦cvt 6»i fpgm´/§f\egasp d(glyf s&‰»Ì¤$headóôûO<6hhea¥•t$hmtx+!ÀR¤kernÈü¦_ðõîloca8LŸ¸i$R¨maxp55˜ name°ñ! UàLpostf€ k,øùprep\‘nchÄRX³ÔÂô_<õ èÈ»° È»° ûrþ+îèþÔZÝûrý:î©©¸du¹Š»/ŒŠ»ÿ]ß1 äŽÿBýÿ0 GNU @ ÿÿ ÿ8è,`¿ß÷¼XX|c4,,!y›4¿0MIM&…(H2WM.Wÿø,+,f,", ,,#,+,.,%,&nnH-H2H2,M÷"››OÒ0ÒY›ZcZ ,ÒSdô›O,PAKÒL &›[ &Ò]›0cÒU›°›› c@ÿøÕ,,ÿêM,*,6ô,,(,,FÞBÞÿîô:ÞDAF,F,$,6,MEô",Aô ÒôôôN+dNHKz,4,,C, d,+Máÿór%À-H(M.áÿóM^—H2^^M\,A0WM'^Em(À.e=e=o,`››››››è Ò0›Z›Z›Z›ZGÿÿ ÒÒL & & & & &H_ ÒUÒUÒUÒU› š[cC,*,*,*,*,*,*€*ô,(,(,(,(ûû)ûÿùûÿð,$,F,$,$,$,$,$H2c,A,A,A,Aô+6ô›,*›,*›,+Ò0ôÒ0ôÒ0ôÒ0ôÒYÒÒ,›Z,(›Z,(›Z,(›Z,(›Z,( ,, ,, ,, ,,ÒS,FÒ',ÿöûÿáûÿõÿýûÿçÞÿî_ûTäd€BôÞÿà›Oô:ô:,FÞ@,PÞB,PoD,PôD,ÞÒL,FÒL,FÒL,F¾.Æl,F &,$ &,$ &,$è+ª$Ò]MEÒ]MEÒ]M1›0ô"›0ô"›0ô"›0ô"cc»c ÒU,AÒU,AÒU,AÒU,AÒU,AÒU,A°Ò› ô› côcôcô,V0œP,6ÍTÒ0ÿ0?Òƒ0›O,64&›ZÒ/›0c",› yFBY›Oô:Y0A@Òÿô,F &&5$°&Ò$J0,6š[›0ô"cMÿîccUpA ÒUÒ ,côc c ô ô",",@,6drdH2|Y¸Y  P P¼D†L°L F›,*ûÿï &,$ÒU,AÒU,AÒU,AÒU,AÒU,A,(›,*›,*è €* ,, ,,›Oô: &,$ &,$c Þÿß5YÆY  ,,v[ÒL,F›,*è €* c›,›,*›Z,›Z,(ÿ{ûÿ|ÿýûÿç &, &,$Ò]Mÿ¹Ò]M-ÒU,ÿóÒU,A›0ô"c ‰ÒS,Fcô›,*›Z,( &,$ &,$ &,$ &,$› ôÞÿî,*2;,6ôô `Z,(,($(ô"ó$æ"þ!T,,ô, ,F,F,F ÿBÙ«DjDAFAFAFRTF7F,$ $ÒÚ.M M t MEME‚Ts"6"6ô"+*5ÏTr"Bô Òô, 5ü(4,/,/,/Ò0 &úF"o.FÕ&&®FZ,/,/¬¼°± ü”DUD-æ:wM M § ì&ìg(ôJ1Æ1WWWM•MOMMMMM3M3MMM‚MM\MdMMSM#MgMgMzM{M M M M MMsM=M9MMÿÝMþMº:MMN(((((HHMMM1M3M.MMG:µµM nÈÈÈÈM M MþÉÿþÇþ¸þÏþ=þÂÿ&þÌþäþñþ´þÆÿ1þìþ=þÂþÂÿ)ÿ2ÿ,ÿ+þÉþþþèÿÿ5ÿwÿ þäþäþäþXÿUÿ­þòþ“þ°þóþþìþýþÏþÀþÆþÆþÂþÂþ}þý§ý§þ>þeý9ýCýCÿþ–þ”þ‚þÓÿ!ý¨þÉÿþ¨ÿ2þžþ¿þÏþŒþ¸þòþþhþ‘ýàþ”þ»ÿ:þ¡þQþkþ|þÿ;þ½þnýýþ¯þ´þ¸þ¼þ¼þ©þ´þÔþ©þ–þäþ“þ®þµþ¤þ¹þnþâþÍþ”þž1ÇLnMsM›VÿØ<ÿØqÿØAÿêMÿØ ÿØÿê››OFR 5›ZtÒS &d›O›AKÒLvA &ÒP›[t(c› Í›é4 4› T0'$382T024$'Ç&$ (8þ<'<ô Ö"$k92#"l"ì2å.; –*ä$ÿÚ2"$2ä$D6æ4M l4å9ä$,,69 &H0›P‘PþFPÒ0›0dô8SöSþtPÚPe ÒSšœPœPFP,"‘P‰ ›0ÚPÚPxP¢!NPÑP.ÑPŽPÒ0ce ]0‘æPr8>PSPIjPžPÍ*éP®(&&&úF”FZ#&óó$7F7FéFjF.F&&-FAF&¼$Ôa&ÒBFò0´FÈF˜²F F$÷F%&%&A”F&ö$àFûÿðßÿî-UFAéF7FÔ.F®µú<–* 0&&®µ®µÔþ„þþÿÿ ý×ýüýûPGF± ŒP<FYPFM ˆ OPÛFŸ >•*í"’PþF£PF¬ GäP:FÛPÊF"P(F*0…&Ò0&c’œ Bœ L ˜è¨§~0 0v<ò0vPòFŸ/»$Ÿ/»$þP‰ óœPF¸  ÑP.FèP;Fv<ò0ePwFþPš(&š(&è o"‘P#&Ò/ Ò/ ‰ ó›0ó$c (ÚP7FÚP7F.&& 0&& 0&&Í*$e Ôe Ôe Ôr8ò0FP‹FjP²F›0ë"™ý &?$¦ÈsPéFÐF¸Fî<Õ<»Fï2¾F¿FFA¹F†FTF#ºFI2‹A’(÷<S- [(¿FˆBºAè-âF¿FãA”-µFo<F-x-Ê(MOÞ5ÈMMM MAA'F<#9A"AE#aF'A8F9#(FFF#)FF#8A(,AùÿìF•#'A†#AAý& A!AHAoA(A(#-FtAB,#œ* FZM  fn€ ȸÏÒ@„àåè&yÔ>FnŠ€:O:ÒV&n?Ô>_'o?`=È:&&9X%o?m0Ô>z3_=K$?98? N3^>#%<¯#¨>œ<8¸,X7X8É4É2É3É,ôjôjôjrTrW>>…ˆ>Ä#Ä9>ÿ¸…ÿ¸…ÿ¸ýkýkªmId”±sÿ¸Îÿ¸Îÿ¸äÿ¸ªÿ²Xa”ÿ¸ªkkÎÿ¸ΧÎÿ¸>ÿ¸>ÿ¸~Iÿ¸ýkªÿ¸ªcÎ,õÍãõÍÜ}© «ý §§ª¨§ÕþÔþÔÿ>1?¾Í<ÐÐF$™±±±±X ;E Xí  NŠl„¿´¨8c`4”*ôQ(88ßÝìB,³³••ì†ß›æþšºÓÿßâáÿ þ2þÄþÐþÐþÔTþÓþ|þLâÿ¸áÿâÿ\âÿ3ÿ^ÿsGÿ‡ýàþ,ˆþÔí  ¿cÝ,„rqxqv¢s¢î?Z?q?X?d?N?e?e?"?‚?mjƒÍ.,8¿?XcìþÌ,"=ûÿò4/XátD#s#e:Óá+¶ã ˜ýY3‘ÿÑ”˜Ì?ÿßÝ¢ÿé±-½ó R5ʱšü½üÌþ„¸Áÿ±½´þwÿÿ@ÿþ·'/ÿÆþ6þJÿ/d Ûþì)˜·RátþïýÏôAµMß1ñ9ô1â÷`$áyÿçyÿç­ÿû­Þ(! žm+eþ¼ÿw_0\ÿù@ÿùeÿà ÿöÓÿùÓÿù™ÿöYÿùÌÿùZÿùªÿøzÿó¸ÿùèÿù‰ÿ÷¢ÿúÿøÿöuÿùÿúÿù‘ÿöŠÿøÿ÷‹ÿù€ÿúzÿú–ÿøvÿöqÿô…ÿ÷ÿøpÿ÷eÿ÷’ÿùÞÿúlÿú¤ÿöÏÿërÿùšÿùšÿùfÿöÿ]ÿóBÿû-ÿ"ýúýúþ ýßþ!ýÏþ®þ®|ÿóúÿúŒÿöÿúÿú !nn@Mý…•þÑþœšÿöÖÿùÁ þêþ˜ÿ<¹ÿÏÓÿÈR8 Ôÿì®ÿÏ.ÿæÿæÿæÓÿÕÓÿÖÓÿÕbÿö oÿõbÿ÷Yÿöfÿö‚ÿõ¬ÿðzÿô„ÿôýÿþÿþ ‘ÿó#ÿühÿøîYÿôsÿõ lÿ÷³ÿï¯ÿðÔNÿùý;ÿù¯ÿñÿýlÿö?ÿülÿö%ÿû5þÄŸ ñ<ºÙÿ, þ’þÆ&þƒþË-þr)þt.þOÏÿ_¾ÿ)¶ÿÿ ÂÿεÿÏaþeþfßöä×õÿõÎ ÆïðK<l<‚</<X<S<<}Pn<U<«<Z<[PPK<o<YP<ÔO<W<,<[<NPò<T<P‹<TPx<Q<´ë´¿¿tÞÁ½KÁÁªÁàªÔÆo¹¿¾¿Ö¸xÁÖÁÚvŠ£¦´<ÁN¦5ô5\ÿêÉÏ5y* $Ú5± ÿê¾ÿë}5 ÿÓÿã5O5GÿýÃg 32Á 5.pÿþÆ£5Ý  #ôBÿæ\5x]‘J ì¨ÿøJ x$œ2 r5ö¸‚53¸ÿón Æ ÿæ, ÿón q#øÿû4275ÈÍFi5±ÿØ5²5'[½„ÿù %$mÿæ\$J áÿèY2…5­2­2­2­2Ö2Ö2Ö2Ö2Ö2Ö2Ö2­2­2­2­2­2­2r2r2r2r2Ö2r2r2r2r2Ö2î2[2¿2I2I2Ä2Ä22Ã2Ï2!2Ø2222‘2­2*2ô2­2­2­2­2Ö2Ö2Ö2Ö2Ö2Ö2Ö2­2­2­2­2­2­2Ö2r2Ö2r2r2Ö2r2Ö2Ö2†2Ÿ2L2æ2æ2æ2æ2è2è2è2è2è2è2è2’222’22’2è2”2è2”2”2è2”2è2“2Ý2W2W2W2W2P2P2P2P2P2b2É2P2`2Î2ü2ü2Î2ü2Î2Î2û2ß2û2ü2Î2ü2Þ2û2i2i2Ä2Ä2Ä2‹2P2P2P2P2P2b2É2P2`2`2û2û2`2û2`2a2û2s2û2û2a2û2q2û2i2i2P2P2P2P2P2b2É2P2`2P2û2û2P2û2P2P2û2b2û2û2P2û2`2û2Z22Z2K222È2È2È2È2È2È2È2È2È2d2<2<2È2<2È2È2Ò2Ä2Ò2È2È2È2È2È2È2È2È2È2d2<2<2d2<2d2È2<2È2<2<2È2<2È2Ò2p2ø2 2ø2 2ø22p2ø22l2”2“2l2¤2l2l2”2}2¤2“2l2“2|2“252m252Ê2;2;2[2ò2ü2h2h2>2>2>2V2V2V2V2é2ê2é2ê2é2ê2æ2æ2æ2æ2æ2æ2æ2æ2R2222222|222Ÿ2 2Ÿ2 2Ÿ2 2Ÿ2 2¯2 2Ÿ2 2Ÿ2°2Ÿ2t2ù2Ð2Ì2>2>2>2>2>2>2,2,2,2,2,2,2³2È2W2j2p21212121282828282Ô2Ì2Ñ2æ2æ2æ2æ2æ2æ2æ2æ2æ2æ2‚2P2š2æ2æ2è2è292æ2æ2è2è2 2 2 2 2 2 2 2í2P2Ì2k2k2k2 22k2k2„2P2P2P2P22222 2 2 2¯2Á2 2 2 22†2†2†2†2È2È2È2È2Ò2222222Ò2~2~2~2~2~2~2~2„2è22222P2P2P2P2222212121212v2v2v2v2­2­2Ö2Ö2Ö2Ö2­2­2Ö2Ö2Ö2Ö2­2­2Ö2Ö2Ú2Ö2­2­2Ö2Ö2Ú2Ö2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>2>22Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2Ò2 2P2P2È2È2È2È2Ò2Ò2Ò2Ò2Ò2Ò2>2>2À2À2À2À2‡2‡2‡2>2>2>2>2>2‡2‡2>2>2>2>2>2>2Ñ2Ñ2Ñ2Ñ2>2>2>2>2>2>2a2a2‡2‡2‡2‡2ã2ã2ò2ò2ò2ò2>2>2ó2ó2ó2ó2>2>2>2>2>2>2«2«2>2>2>2>2>2>2>2>2Î2Î2Î2Î2>2>2Î2Î2Î2Î2 2>2>2Î2Î2Î2Î2>2>2Î2Î2Î2Î2Ò2Ò2Ò2Ò2Ò2Ò262r2k2 2$2"2Ã2Õ2"222œ2 2 2º2º2 2 222Ö2Ö2Ö2r2Ö2Ö22è2P2ü2PÈ2È2È2ø2ø2>2>2é222,282|282|2È282È282ä2Ä2Ä2Ö2Ö2®2 2Ä2i2i2Z2Ò262æ2?2?2ß2Ø2Ø2,!,2Š2Z2Š2è2è2ö2P2(2†2v2Š2Ò2Ò2Š2‡2Ø22?2c2›,*›O,6›O,6›O,6Ò0ôÒY,ÒY,ÒY,ÒY,ÒY,›Z,(›Z,(›Z,(›Z,(›Z,(cZ ,,ÒS,FÒS,FÒS,FÒÿñ,ÿßÒS,FÿöÞÿÏûÿô›Oô:›Oô:›Oô:,PÞ:,PÞÿå,PÞÿå,PÞÿÞAKAFAKAFAKAFÒL,FÒL,FÒL,FÒL,F &,$ &,$ &,$ &,$›[,6›[,6Ò]MEÒ]M;Ò]M;Ò]Mÿæ›0ô"›0ô"›0ô"›0ô"›0ô"ccccÒU,AÒU,AÒU,AÒU,AÒU,A›ô ›ô °Ò°Ò°Ò°Ò°Ò›ô›ô› ôcôcôcô,FÒô+*›,*›,*›,*›,ÿÇ›,*›,*›,*›,*›,*›,*›,*›,*›Z,(›Z,(›Z,(›Z,(›,ÿÄ›Z,(›Z,(›Z,(SûN_Þ9 &,$ &,$ &,$ &,ÿ§ &,$ &,$ &,$&5$&5$&5$&5$&5$ÒU,AÒU,AUpAUpAUpAUpAUpA› ô› ô› ô› ôT0T0T0T0T0T0T0T0››æÿòôÿó´ÿï»ÿí¡ÿñ›ÿå''''''ÚÿóÊÿî„ÿðrÿñcÿïoÿñ$$$$$$$$ÿñ ÿ÷±ÿò³ÿø¯ÿô²ÿôUÿÝUÿÝ,8ÿôÿ÷ÿûÿùÿËÿËBÿñAÿõâÿòåÿñÝÿñäÿóŠÿà†ÿÞ"$"$"$"$"$"$ÿïÿôÞÿòÛÿówÿñÿó22222222ëÿî“ÿïËÿô_ÿïä$ä$ä$ä$ä$ä$ä$ä$ÿóÿñÌÿñÊÿïoÿó–ÿï…ÿ÷…ÿóT0T0''$$8"$"$22ä$ä$T0T0T0T0T0T0T0T0><”ÿò”ÿóUÿï\ÿíCÿñ;ÿå$$$$$$$$ ÿñ£ÿ÷PÿòUÿøKÿôNÿôñÿÝôÿÝä$ä$ä$ä$ä$ä$ä$ä$¦ÿó¦ÿñjÿñhÿïÿó5ÿï&ÿ÷)ÿóT0T0T0T0T0T0T0›››ÿÝ›@MtÈMtM M $$$$$Aÿ÷ÿã°€kSRBM ÿÍÿÛÿäÿðÿÇÿðÿý ÿåxÿâDQM 2222929222› › 1ÿÚ;ÿÉåÿó‰"‰"M ä$ä$ä$ä$ä$Aÿ¿AÿêPÿÇ.ÿÚ«4MRMvôèôèMú§,ÈdM.M.,ÿû,ÿûèÿ÷èÿ÷8K6ÿkÞAÝ@ÞAÝ@M0M1M/M1,&,&^2^FWšsètWôè P 1Õ1¨11Õ1¨1x ú1ú1nb,|,M,ÿê’;’;¶#H 5§ÿNNyNXMBMB|,.0 …(?’;…(z<ô’;$<W1Ò<Õ<à<Ò<\<à<à<^Œ*^^^^^^^^ ^ ^o^Nh-^^E^^^^^^^^^^ ^ ^o^LknhE ^g&Y c,,AFªG%[²]o2e<6$›c:"¬'ÍZ››[€! ýùýùÿ6ÿýýý¨ý¨þwþxþxþ)ý¯ý2ý1ý4ý2ýwûrýCþËþPþ)þ0üBý®ýüýùý·ý¨þÔf)[)Ò0ù,30@0›0Ò+—(É!g‡.,<V):^„)áëÒL¦<rX4›[ &Rÿþ»Ò]B]Ò]"íè›c 4 ›O›Œ"o,(Õ2-)L)8€:P:ÒV&Cd$:0kFRÒP ,,P,P› °$³eEeeEeeeeEeeEeeeeEd,dBd±d›±Çݱd›±Ç,PÒ0ÒYAKÞB¼BšBÒBô Ò ° Ž ÒBôÒ°ÞDô,AFÛ [-Û1[-    Û0ÛÛ-’Û Û |8‰#Û Û-|8{ Û Û['Û-[,['D ›,+›Z7Ç Ç H7H7H-H7H7É-7i7i$)H(H2H2þÿüˆ(H]H§ÉÉÈK 8KT[[((,dd¼d,__£HKHK=Kô%H3H*H(H(H2H2H2HIHI*H2H2H(H(H-H-»-»-*H-H-H-H-HHH-H-H(H(H-H-H7H7H7H7HH6HH6(|4|P|B|B|E|E+++++’L’’’XL`L|>|>|>|>èèü=ü=W×@Æ>H(H(|B|B7'ÈbÇHÇ_ÈI,æ,d’;’;II€(€(€(€,€€,„X„X„X„7„à„7,æ ? 3 3 G = G 5 = Ó » Ý Ã é ½ Ø Ý O Y Y Y Y ? G Q ? È D [ ß ½ è Î Û Y,ÿ÷ô k##########èèèÌè¤èèèÌè¤èèèÌè¤èÌèÌè¤è¤èèèèèÌèÌè¤è¤èèèèèÌèÌè¤è¤è¤è¤è¤è¤èèèèè¤èèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèè|èÌè|è|èèèèÌè|è|èèèèÌè|è|èèèèèèèèèèèèèèèèèèèèèèèèèèèèèôèèèèèkèèôèôèèèèèèè 2 2 2 2 2 2 2 2 2 2qàqà d d ú úèè|#|#€€|^|^´ž{^{]|#|#€|^|^ˆž{^{]$$$ 'é ' ' ' ' ' ' ' ' ' ' ' ' Š^ 2 2 2 ' ’ Š' ' 'è–è–è–è–^2 2 2 2 2 2|#|#|#r 2 2 2 2 ' ' ' '  œ œ ž  È È œ¡Br"¶#S"#r"¶#S"#M7+7Ò7Ò7ŸBy<’2‰"'''ü=ü=H(`(h8h8ÐHÐHÐH 0Å0Å0ÐHÐHT6ºHæH>HæHh8h8$H¸0¸<ÐH 4ÔHô6X: 0x<D6 HÐHZD6à&¦?|6h8h7ÐH <€8h8h78¨6ÐH8ÐHÅ0ÐH<<6ÆH<6ºHM.ºFºF¤F F FRF¢FÐFôFîFîFîFFF F F:F:F F FÐFFXFXFXFXF×F×FíFíF8FzFeFÐFãF×F FHF F¨FHFÇFÎF¸FßFßF FîFeFFF¤FúF¢F¢FèF\F6F#FSFSF±FLFÄF‹F‹F‹FdFdFHFF FFFÀFÓFwFwF¤F1FúFwF8FzFÁF FÁFF F¶FFFF|FÇFÇF@F@F°F°F@F FçFßFÛFFSFzF¨FwF/FþFPF¼F¼F¼FÔFÔFyFyF-FBFqFwFPFFFFFwFwFÍFÍFF{F FIFôFF F F‡FiF/FRF«FBF‚F F4F4F(F`FF(FeF„FLFLF,F,F,F¢FÞFF`FvFŽF¯F¯FèF¯FÔFæFÔFæFèFèFèFèF FFFSFäFlFF’F’FYF FFwFÞFíFFF´F´FŠFFXFXF>FæF>FæFôF\FÀFÀFêF4FÛF%F^FÖFÖFôF-F«F‚F”FyF’F±FÏFFÆFÖFÀFFOFFlFlF¢F¢F¢FFF-F-FËFËFÑF!FFF\FjFFF#F#F#F#FÐFFÓFÑFFFFFFlFzF&F9FžF FFnF,FFCF½F+FFfFÐF†FýF˜FFßFæF0FËF´FÈF¥FF€FSFF¥FôFËFwF0FMVV2Â2Â2þÝþüýè{è2;,,Äþ^þLþL)&êÿ²ÿNþ†ÂSþ'þpÿ—þäýìþAþ/ý‰þiÙÿíM' 2ÿîÿè4ÿî ÿç’ÿôGÿæ£ÿî&-ÿå!ÿ÷‘ÿâ#ÿáÏ T 5 0ÿè¼ÿÓMK¡ÿîÿî‹ÿïÈÿé/ÿêÿÿÕòšÿÎâÿ×:ÿîwÿî#ÿá2ÿñÿÿî®þÞ"ÿ5ÿ°xÿFxÿYñÿá¸ÿÕ|ÿòß×ÌÿôêÿóÿôOÿçÖÿîØÿó ÿÙäÿñÿåÿßï÷ÿïááÿ÷ ÿáó }ÿù¼ÿð ÿç+ÿéØÿö×ÿøòÿíÒÿëïÿìâÿ×ÅÿóØÿí»ÿó˜ÿÕ8ÿé¸ÿé¸ÿÍ”ÿÙÙÿí”ÿÙÙÿí”ÿÙÙÿíßÿó:ÿÝ8ÿÝ:ÿݘÿÕ˜ÿÕ˜ÿÕrÿéäý++×+×++¬ÿçÿÕKÿó·ÿò·ÿêÿû×ÿçéÿíéÿòéÿóGÿè‘ÿëÿçÿçÿçâÿï˜ÿåÿæÿæ]ÿéŸÿÍq!:!ÃÿàëÿôÿÇVÿâwÿé§ÿÙX X  ²ÿöš,²ÿö1`Â?n?+ÿÝ+ÿÝõÿß!ÿé¢ÿßÿßþÿÑÕÿÑêÿÓêÿÓÿìÿéÿé¢ÿéÿËíÿËÿååÿé±-Z-PÿÓPÿÓÏÿç@ÿç@ÿç¼ÿÓÿñÿð ÿáÿð ÿánÿÓmÿÓqÿð ÿë ÿëDÿô½ÿØhÿØ~ÿñùÿðë3ôó ó ó gÿÜòÿîHÿçkÿç[ÿé[ÿé+ÿéyÿçÿõyÿç+ÿéÿê.ÿéÏÿé©ÿéÀÿèVÿéXÿéÈÿéÿÙÿÙÈÿéÈÿéÈÿèƒÿé_ÿèÈÿéÀÿèÿéÿéHÿÓñÿݱÿÒ±ÿÒjÿÕjÿÕñÿñÆÿÕeÿòñÿñ‘ÿßÈÿÕzÿôÿíòÿí“ÿíòÿíÿÎSÿÎCÿî·ÿÝOÿõ ÿëOÿõæÿà¬ÿéÿÎÿ΄ÿé„ÿé/ÿÎHÿéhÿ׃ÿ×hÿ×0ÿç÷ÿß%ÿã÷ÿß%ÿã ÿóÿ÷âÿ× ÿñâÿ×úÿÓïÿìÿ׌ÿ׌ÿ×ÊÿñÊÿñÿדÿìâÿ×ïÿì¸ÿç ÿÓ˜ÿé.ÿç¸ÿçFÿç:ÿÝ×+¬ÿç˜ÿåýÿñOÿç}ÿÇ ÿÙÂ?ÿßÝÿèÝ-±- ÿá½ÿØó Àÿç+ÿéÈÿéüÿèÀÿèÐÿôòÿßòÿíâÿ×ïÿìÜÿç¸ÿçßpÿù—q˜+t+ ÿçÍÿç½ÿåšÿå–rÿûÄÿî‡ÿï–q ÿá ÿá ÿá ÿá?ÿë÷ÿëž q ž x ‡ÿú_ÿúCÿçÿçÃÿç£ÿç–ÿöoÿöðÿéÍÿéJÿçÿçñÿññÿñ¬ÿíÿí­ÿí„ÿí·ÿΕÿÎâÿ×$ÿ×âÿ×ÿׯÿì†ÿì3ÿ×ÿ×*ÿ×ÿ×­ÿì‹ÿì¹ÿÓ ÿÓCÿçÿçGÿçÿç™ÿítÿí:ÿÝÓ×+¬ÿçã ˜ÿåýÿñOÿç3ÿç}ÿÇ”ÿô ÿÙ˜ÿÕÂ?ÿßÝ¢ÿé±-½ÿØó Hÿçyÿç+ÿéÀÿè§ÿá†ÿçòÿßòÿí©ÿéïÿì¸ÿç ÿç˜ÿé¬ÿëyÿçyÿç™þWþþaþaþ ÿáþ‘þíþÔþn2þþþFýΚÿÉÄÿí¤ÿHÿÿÓ‰ÿ߉ÿíÿïâÿ×–ÿì¸ÿçò·ÿÝþc›ÿ•qÿ³ÿïØÿòÿï8ƒƒÏþ|ÓÿUþLþLÿ'æ aŸ¡\´ÿþvu®ÐËÿÅÒÿóoÚÄåÿó?]ãc‚®Òɾ'„)èB'iN¨)¡g'>>øÿóÒ|)CÒ»¥øäþ|à2ùàbÚx˜jj¢r­tèJÿÿ„è**jUUüØ Úÿµÿóèâ ÿó‹Óÿ5Óþ]ÖÿJÔþkÓÿ5Óþ]ÓÿùÓÿùÓÿù )º¾uÞ#Ïÿÿ³ þ=ÿ ùÿ'þ!áÿãÓÿùÓÿóÓÿðÓÓÿÓÿþ|þ|þ|þLþLþLÓÿUÓÿ,þL¯ÜÿD[Š8côÚùþ?z]s®»—*U QY„)è*à; ù§ÿç€bÿþ(.õ&Áÿôb³NE9EoEøÿóŠæô8côäŠ(EE9EÒÒ3ÿôôÿúÆ·ÂÿÿEÿó[ÿöØÿóÏ´¹ÿýÍÿþbù&ÿø ÿúA ²§ ÿúr¹œÄÿÿÿúØÿîÆ¯éÿüÿíÿúëÿõ¼Ïÿÿšÿ츿Ùÿþ– ÿùÿúH uÿîKÿú;ÿû,ÿþ(ÿèÿÞvÿø,ÿèôÿìÖÿì¶ÿï/ÿþ.ÿüÿò/ÿü6ÿüÿù‰ÿôêÿçÿóhÿ÷îÿé”ÿÛæ…[ÿêQÿø¼ÿð­ÿòÿí*ÿëÿÿ‚ÿò^ÿ÷KÿúÿóÒÿå®ÿðŽÿõXÿøhÿö[ÿ÷[ÿ÷uÿõ2ÿû˯ÿðï ÿæÿþèÿàËÿåäÿã+ÿ*)þL\ÿß3ÿã3ÿã\ÿßÿóÿþÿþ ,þG:þ<0þ1,þT$þq0þ`.þ^)þV2þ[/þX1þ¦*þK*þKåÿÐâbÿö oÿõbÿ÷Yÿöfÿö‚ÿõ¬ÿðzÿô„ÿôýÿþÿþ ‘ÿó#ÿühÿ÷îYÿôsÿõ ÿþlÿ÷³ÿï¯ÿðÔNÿøÿÿô;ÿù¯ÿñÿýlÿõ?ÿúpÿÒ%ÿûäÿúÄÿö þ¿ þa þTÿö þ1 þ@ þ> þ[ þ£ þ³þ¿ þB þg þ˜þ¿ þRQì1Šÿôÿóµÿù´ÿùÄÿù©ÿøïÿù‰ÿ÷¯ÿú‘ÿørÿù‚ÿú‡ÿò•ÿöÿ÷‹ÿù‚ÿúrÿú™ÿø{ÿöuÿôÿ÷oÿ÷jÿ÷ÿùáÿúmÿúuÿùšÿùgÿöZÿù ÿùhÿë›ÿöÖÿùÖÿùšÿöZÿùÎÿù]ÿùCÿùlÿó þa þb þ¿ þ_ þaÒLïÌ ÑŒ…ìAAA AèAÈ:18K%z:P&h? 9R%i?%©#H2<<<<€:€:€:O:ÒV&n? _ `=&&9X%m0z3_=?98?N3^>#%<¯#Ô>O:&98?€H„ Þ a?ÆÞ\¿üJ.€d>-£¶Œšâ€Çþa|£,d€ËìqV Âé‚€2Cê#€ìIèö³ Cå €øoñM}€ù#pn_åÿÿÛÿÿC™1a\šÿþê<KŽ9øI&7ð7Ê6OF09057^1F?Ð:’9Y=&2í5í9\FV9#OHI+íN8d03òDçN/0r7HJ1<n6Añ8L.`O Næ7Ð7·7ï7£7é7É7H6—7‚7ô7Ø7&7€7@7u7Û7M7A7R77”7 7Ä7»77Á7b77,Dœ, D‚‚~»õ37ouz~ŠŒ¡Î×ñõasùV_‡Š¹Äêô ,J 9 N U r  ƒ Œ ¨ ° ² ¹ Ä È Î × Ý ã ú   ( 0 3 6 9 < B H M Q \ ^ u ƒ ‘ ¨ ° ³ ¹ Å É Í Ð ã ï ñÀõùüôõ›ùEMWY[]}´ÄÓÛïôþ d q Ž ” ® µ ¸ á ð! !$!3!"I"M"P"b"e"k"s"}"‰"Œ"™"§"µ"Ã"Æ"È"ã## ###*#¦#®$$$i%K%l%ÿ&,&g&o'@** -e-o.¦+§Œûûû6û<û>ûAûDûOÿýÿÿ  ¾÷$7Ptz~„ŒŽ£Ñðôp|‚1Ya‰°»Ðð0 < P X y … “ ª ² ¶ ¼ Ç Ë × Ü ß æ     * 2 5 8 < > G K Q Y ^ f … “ ª ² µ ¼ Ç Ë Ð à æ ñ Ðùû °  HPY[]_€¶ÆÖÝòö p t ¡ ° ¸ Ð ä!! !&!5!>!A!J!M!S!!¦!©!µ!¼!Ì!Ð!Ý""""""" "#"4"<"@"M"P"`"d"j"m"z"€"Œ""¢"²"À"Å"È"à### #)#›#®$$`%%P%€&,&`&i'@** -0-o.¥§ˆûûûû8û>û@ûCûFÿýÿÿÿãÿÂÿÀÿ¿ÿ»ÿ¸ÿ ÿœÿ˜ÿ•ÿÿÿŽÿÿ‹ÿsÿqÿgÿYÿQÿOÿ9ÿ3ÿ"ÿ ÿÿþùþøþíþèýÝýÜýÙü$ü"ü!üüüüüüüüüü ü üüûüûûûùûóûòûîûìûëûêûéûèûæûåûáûßûÜûÕûÔûÍûÂûÁûÀû¿û¾û½û¼ûºû¹û¸û¶û§û¥û¤õöõçõäõãó@ó4ñëúëöëðëîëìëêëèëçëæëåëäëâëáëàëÞëÝëÛëÚëÙëÎëÌëËë¿ë¾ë¼ë¥ë£ë”ë“ë’ë‘ëëëŠë‰ë…ëuëiëgë]ëWëOëLëEë#ë"ë!ë ëëëëëëë ë ëêùêøêôêóêíêëêéêçêßêÕêËêÊêÉê²ê–êê{êvêéÿé®ésèÝèÙèÆèšègèfç–ä×äÓá­á¤àýjh¹ÙÌÇÆÅÄàXÆ ~ »b¾õ~÷¶$3ß77ïPoðtuzz~~„ŠŒŒŽ¡£Î0Ñ×\ðñcôõeagpsÉ|Í‚ùÑIM1VSY_ya‡€‰Š§°¹©»Ä³Ðê½ðôØ Ý,ë0J 9$ < N^ P Uq X rw y ’ ƒ™ … Œœ ¤ “ ¨¦ ª °¼ ² ²à ¶ ¹Ä ¼ ÄÈ Ç ÈÑ Ë ÎÓ × ×× Ü ÝØ ß ãÚ æ úß  ô  ÷  ý  (ÿ * 0 2 3 5 6 8 9 < <" > B# G H( K M* Q Q- Y \. ^ ^2 f u3 ƒC … F ‘O “ ¨R ª °h ² ³o µ ¹q ¼ Åv Ç É€ Ë Íƒ РІ à ㇠æ ï‹ ñ ñ• À–Ðõ·ùùÝûüÞ ôà5°õ ´› ú ù – ð  E HM 2PW 8YY @[[ A]] B_} C€´ b¶Ä —ÆÓ ¦ÖÛ ´Ýï ºòô Íöþ Ð d Ù p q > t Ž @ ” [ ¡ ® ` ° µ n ¸ ¸ t Ð á u ä ð ‡!! ”! !$ ž!&!3 ¸!5!< Æ!>!? Î!A!D Ð!J!K Ô!M!N Ö!S! Ø!!™ !¦!¦ !©!ª !µ!µ !¼!à !Ì!Ì !Ð!Õ !Ý!Ý """ #"" $"" &"" /"" 8"" :" " <"#". ="4"4 I"<"> J"@"I M"M"M W"P"P X"`"b Y"d"e \"j"k ^"m"s `"z"} g"€"‰ k"Œ"Œ u""™ v"¢"§ "²"µ ‡"À"à ‹"Å"Æ "È"È ‘"à"ã ’## –## —# ## ›#)#* Ÿ#›#¦ ¡#®#® ­$$$ ®$`$i Ó%%K Ý%P%l)%€%ÿF&,&,Æ&`&gÇ&i&oÏ'@'@Ö**×* * Ü-0-eÝ-o-o..¥¦+§ˆ§ŒAûûÙûûßûû6äû8û<þû>û>û@ûAûCûDûFûOÿýÿý€ŸÃ1ÈÕV€§d  Œ  ¨   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a†‡‰‹“˜ž£¢¤¦¥§©«ª¬­¯®°±³µ´¶¸·¼»½¾ ùrdei ûx¡pk µvj Yˆš ;s \ ]gw $ 1 /M El|6¨ºcn 9T U 'm} ÿb‚…— ì í õ ö ñ ò¹Á:  k  ÚÛ úy ó ÷ „ŒƒŠ‘Ž•–”œ›óf|qxyzz}{g°,°K°*PX°JvY°#?°+X=YK°*PX}Y Ô°.-°, Ú° +-°,KRXE#Y!-°,i °@PX!°@Y-°,°+X!#!zXÝÍYKRXXýíY#!°+X°FvYXÝÍYYY-°, \Z-°,±"ˆPX° ˆ\\°Y-°,±$ˆPX°@ˆ\\°Y-°, 9/-° , }°+XÄÍY °%I# °&J°PXŠeŠa °PX8!!YŠŠa °RX8!!YY-° ,°+X!!Y-° , Ò° +-° , /°+\X G#Faj X db8!!Y!Y-° , 9/ Š GŠFa#Š Š#J°PX#°RX°@8!Y#°PX°@e8!YY-°,°+X=Ö!! ÖŠKRX Š#I °UX8!!Y!!YY-°,# Ö /°+\X# XKS!°YXа&I#Š# ŠIŠ#a8!!!!Y!!!!!Y-°, Ú°+-°, Ò°+-°, /°+\X G#FajŠ G#F#aj` X db8!!Y!!Y-°, РЇ °%Jd#а PX<ÀY-°,³@@BBK¸cK¸c Š ŠUX Š ŠRX#b °#Bb °#BY °@RX² CcB² CcB° c°e!Y!!Y-°,°Cc#°Cc#-¸ÿ…°K°PX±ŽY±F+X!°YK°RX!°€Y°+\X° E°+D° E°+D° Eºÿ+±Fv+DY°+ ÙR]]((((T„ä$Àà 8t ÈäüdŒàL„èXˆlÄè8˜ P ˆ ì H „ ´ à L | ˜ Ô , ` Ü € ð| Ü8t Ðô4Xt$xÈ „Ä<€¨ä4˜Ø$xÌp´ôP„ÄôTpÌ$8 8°øÐèxü0Pl,t¬tà  , | ¨!!!t"" "´"Ì"ä"ü##,#D#$0$H$`$x$$¨$À$Ø$ð%@%X%p%ˆ% %¸%Ð&&x&&¨&À&Ø&ð'4' '¸'Ð'è(((0(ì)€)˜)°)È)à)ø**(*@*Ä*Ü*ô+ +$+<+T+ˆ+ü,,,,D,\,t,È,à,ø--(-@- .P.h.€.˜.°.È.à.ø//(/@//ô0 0$0<0T0l0„0Ü1x11¨1Ä1Ü1ô2 2$2<2T2l2„2œ2è3<3T3l3„3œ3´3Ì4 4X4p4Œ4¤4¼4Ô4ì555L5d5|5”5¬5Ä5Ü5ô6 6@6p6ˆ6 6¸6Ð6è777€7Ø7ð88 888P8h8ì9|9”9¬9Ä9Ü9ô: :$:<:T:l;8;ð<< <„== =8=l=¼=Ô=ì>>>4>L>d>|>”>¬??€?˜?°?È?à?ø@@(@@@X@p@ˆ@¼A A¬A¼BBdBÀBÔCHC¬C¼D DtDÌDàEE E¤EäF<F¼GG”GÈGôH@H„H°I$I„IÈJJ`JÐK8K¨LL€LèMDMÌN<NpNÔO,OpOÈPPXP´PÈQ$Q|QÔRRPR¬S SXSÐT4T”TøUU U\UlU„UœU´UÌUäUüVV,VDV\VtVŒV¤V¼VÔVìWW$W@W`W€W WÀWàXXX4XPXpXŒX¤X¼Y8YÀYØYðZZ Z˜[ [$[<[T[l[„[œ[´[Ì[ä[ü\`\x\\´\Ì\ä\ü]],]D]\]t]Œ]¤]¼]Ô]ì^^^4^L^d^|^”^¬^Ä^Ü^ô_ _$_<_T_l_„_œ_´_Ì`L`Ä`Ü`ôa<a„aœa´b$bÈbàbücc,cDc\ctcc¨cÀcðddpd„dìeeˆeøfdf¼fÐglgÔgähiiDiÔj`jÄkk¨k¼ll€l´lèmmtm¼mìnLn`nÄo<o”oìppppÐqXqhq|q°qør,rxr¨rÜs(s<sÈt tdt¨uu0utuÌvDv˜v¬vÀvÔvüwDw¨wøx”xày,y@y y¸yÈz4z¬z¼{({<{X{Ä| |||ð}Œ~<~ÈDô€|€ô,H€Ø‚D‚X‚l‚€‚”‚¨‚샃ƒ(ƒ8ƒPƒxƒ ƒÈƒÜ„ „X„¤„Ȅ܅……8…\…p…€…… …¸…Ì…à…ô††(†<†P†p†„†¬†È†ø‡‡X‡‡Ì‡ôˆ4ˆLˆ`ˆtˆˆˆœˆ°ˆÐˆø‰ ‰H‰h‰ˆ‰¬‰À‰Ø‰è‰üŠŠ$Š8ŠLŠ`Š|Š˜Š¬Š¼ŠØŠô‹‹‹<‹\‹¤‹¸‹Ì‹à‹ôŒŒ$Œ8ŒLŒ`Œ¤Œ¸ŒÌŒàŒø8Th|¤ÌÜðŽŽ$Ž8ŽXŽˆŽœŽ¼ŽÜDp„˜¬Øì8¤¸Ìàô‘‘‘8‘L‘`‘t‘‘¬‘À‘Ô‘ü’L’€’¼’Ð’ä’ô“““,“@“T“l“„“ “ð””0”H”|”|””¤”À”Ô”è”ü•4•H•\•˜–”–¼——0—L—`—´—È—ø˜ ˜ ˜4˜H˜\˜p˜„˜˜˜¬˜À˜Ô˜è˜ü™ ™(™\™l™€™°™À™Ø™ðš š$š4šDš\štš„š”š¸šàšð›››h›x›ˆ›¬›¼›Ìœœœ8œHœ|œŒœœhÌäüžž,žDž\žtžìŸdŸ¬ , ˜ ð¡L¡¸¡ì¢¢ˆ¢Ø¢è£l£|£È¤4¤¨¥¥<¥„¥ð¦X¦¤§§0§H§`§x§¨ ¨€¨˜¨°©©˜©øª\ªàªð«0«H«`«´«Ì¬4¬D¬T¬l¬|¬ð­L­Œ­¤­¼­Ô®®®h®x®˜®ä®ô¯D¯Ì¯ü°°H°”°¤°´°Ä°ì°ü± ±±D±è±ø²(²\²Œ²Ä³ ³`³¨´ ´l´¸´ÈµHµ¨µÈ¶¶¶\¶Ä¶ð··8·€·¸·ä·ô¸¸(¸8¸\¸l¹¹¹<¹p¹ ¹Øººpº´» »t»Ä»Ü»ô¼d¼|¼Ô¼ä¼ô½ ½½|½Ì¾$¾<¾T¾l¾˜¾ø¿@¿P¿`¿¸À À,ÀLÀdÀ|ÀÄÀðÁÁÁ8ÁxÁÀÂØÃ0ÈÃÜÄ,ĈÄðÅÅ8ÅhŘÅäÆ8ÆŒÆØÇxÈÈ@ÈtȼÈüÉ@ɀɼÉðÊ(Ê\ÊÊÀËËtÌ Ì¤Í$͘ÍÄÍðÎÎHÎ„Î¸ÎøÏ4ÏlϤÏäÐÐdФÐÜÑ Ñ¬Ò@ÒèÓ„Ó Ó¸ÓÐÔ$ÔtÔÈÕÕ\Õ˜ÕÐÖÖDÖ|Ö¸Öø×× ×8×P×h×´Øl؄؜ÙÙÙ4ÙLÙdÙ|ٔ٬ټÙÌÙäÙüÚÚ,ÚDÚ\ÚlÚ|Ú”Ú¬ÚÄÚÜÚôÛ Û$Û<ÛTÛlÛ„ÛœÛÄÛìÜÜÜ¤Ý ÝhÝÀÝÐÝàÝðÞÞDÞˆÞÜß8ߤ߸àTàÔàüáTáäâ<âŒâ¨âüã„ãÜä(äÌå å|åÐæ\æ°ççhçØè,èÌé(épéÌêLê ë0ëTëØì@ì¤í8íHípíŒíÈíØî$îHî¬ïïdï¼ð ðhð”ðàñ`ñ¸òò òpòàó$ólôôPô¤õ$õ`õ´öödöÜ÷H÷Üø0ø|øÄù0ùxú ú,ú¤ûû€ü üXü|ü´üÌüøýý,ýDý\ýxýý°ýÈýèýüþþ0þHþdþ€þ”þ¤þ¸ÿÿDÿˆÿ°ÿð,`¸Ô@Ì (X¤ð0¤è(t ü@h”Àà”Àì4€Ìd¬ô Œ Ä ì ˆ ˆ Ì  0 ˜  P ˆ è 0 l   Ü 4$hÄè„PœìD°è,d¼Tx¤ÐP„¨Ôü$P˜à(X„Јð,¨ 4|˜´ˆ8èŒTÔ€ $ Ð è!„!è"\"t#`$$Ü%ˆ&@&ˆ'''ð(”(ü)¸*,*€*ì+p+ô,D, -,-˜..\.t.¸/,/ 00T0´11,1œ2D2\2¼3<3ˆ44˜4°55<5Œ5è606„6Ð7X77Ø7ô88d8À8ð9(9D9d:l:ˆ:¤:ä;$;l;„;œ;´;Ì;ä;ü<<,<ø=è>„?\?x??Ü@,@A A¨BBBüC<C´DD D8D`DÈEEˆEÔFXFÔG0GˆH H€I IÔJ„KLLL´M\MàN O0PP€QQ€QôR°SS¸TlTàUÐV\VèWTW°XXœY$YpYèZ@Z¸[4[„\\x\Ü]H]¸^P^°_(_˜_Ä`0`h`¼a,a˜aäbb@bŒcc$c@c\cìdLdôeheäf˜gÐh`hxhÌi@i¸j,jÀkXkèltmm˜münpnœnüo(oppHp´q qŒqèrr´sdtt´uTulu„uœu´vlv„w wŒwèx|yypzzX{{¨||€}$}¬~0~¨xЀH€¬8¸‚X‚°ƒƒlƒì„ˆ……x…̆,†X†|†È‡‡P‡¬‡ìˆXˆ°‰(‰X‰ˆŠŠŠø‹˜Œ4Œ€ tŽ ޏÌH¨‘<‘œ‘Ø’L’ü”X”¤••,•|•ð–x–ð—x˜ ˜¬™H™Ð™èššš0šHš`šè›@›¼œ0œ¼0ÔždŸŸ|Ÿð p Ø¡@¡Ä¢¢ ££”£ü¤P¤ð¥P¥Ä¦¦ˆ¦à§L§À¨¨¤¨ø©d©ôª ªtªŒªÜ«$«l«È¬ ¬l¬ ¬¼¬ä­$­L­€­œ®Ø¯€°8°´±\±¸²4²¤³(³”³ô´„µµDµœ¶X¶Ì·<·Ì¸l¸Ð¹<¹ØºXº¸»$»Ô¼D¼¸½½œ¾ ¾Ä¿¿ÜÀ|Á4ÁŒ ÂÃÄÄÄTÄØÅ\ŰÆxÇÇxÇäÈ„É0É”ÊʨËË`ËØÌ„ÌôÍpÍäÎdÎäÏlÏÐЄÑ$ÑÄÒ,ÒÈÓ0Ó´Ô0ÔÈÕÕ Ö,Öx×H×èذÙ ÙpÚ Ú˜Ú¬ÚÀÚÔÛÛˆÛ¬Ü@Ü´ÜÜÝhÝìÞ0Þ„Þ¼Þøß(ߘßèàˆà°àÔá„á¼âHâãã<ã”äPä°äàå<åŒåäæ0æœç0çdç”çôèhè”é8éØêdëë¤ëìì€ì¸ííPîîdî îèïxïÌïüð0ðTðÌñlò,òpòòìó\óøô<ô¬ôàõDõ|õÔöLöÈ÷”ø ø¸ù$ùŒúHúàûTû¤ü$üˆü´üÌüøýý8ýPýpýˆý ýÌýäýüþþ,þDþ\þtþŒþ¤þÄþäÿÿÿ4ÿTÿtÿ”ÿè(Hd”Àì0H`„ Èì4LtŒ´Ìô ,D\„œ´Ìäü,D\|œ´Ìäü@\˜Ôì$<x°Èà0H`x°Èàø(@Xx˜¸ð   8 P œ ´ ü  ` x ˜ à ø  ( @ X p ˆ   ¸ Ð è   0 H h ¬ ð   8 P Œ ¤ à ø4Ll¨ÀØð @`x°Ðè @`˜Ðð(@`x˜¸Ðè0Hh€˜¸Øð(Hhˆ´Ô$xÀØ$<„œ¼4Ld|”¬ÌDˆÄÜ,h€ Üô $<Tl„œ´Ìäü4TŒ¼ð$<l„¸Ðð$<Tl„œ¼Üô ,Ld|”¬Ìøl˜Ä`¼Ôì   x Ô ì!h!€!ü"","D"\"t"”"´"Ì"ä"ü##,#D#\#t#ð$$0$X$p$˜$°$Ð$ô% %$%<%T%l%Œ%¬%Ä%Ü%ô& &$&<&T&l&Œ&°&à''<'x'¸'ô( (L(d( (¸(ô)0)H)ˆ)¨)È**4*d*¸*Ð+ +8++¨,,,<,\,¬--t-Ô.4.L.d.Ä.Ü/@/X/x/˜/ô0 0$0<0T0Ì1,1Œ1ì2L2 2ô3 3`3x3Ì3ä4,4\4l4„4œ4¼4Ô4ô5 5,5D5”5à606€6Ì77h7´7Ô7ì8 8$8D8\8|8ä9€9ð:`:Ð;<;”;è<@<˜<ì=0=H=ˆ= =à=ø>,>`>˜>°>è??4?L?€?È@@4@h@œ@È@ðAADAAØB BhB˜BÄBðCC`C¤CèD,D`D”DÈDàDøE,E`EEÄEÜEôF(FXFˆF¸FøGPG€GÈH HLH IITIIÌJJ J8JxJÀKKLKdK|KÄLLPL”L¬LÄM M,MˆMäNHN¼OLO¬PPtPÜQTQäRLR¼S,S¤T,TÄU8UXUhUxUˆU˜U°UÀVVpVÐW8WPW¬X(X¤YY”ZZŒZø[h[Ø\H\À]D]¸^(^˜__x_ô`t`èa8aˆaØaðbbXb°ccdc|c”cìdDdœdôe e$e|eàfDf¨fÀfØg<g¨hh|hìiliØj0j„jÜjôk k`kˆkÔkìlll4lLldlÜmTmÌnLndnÜohoôp€qqÌrTrðsˆt t´uXvv¨w(w¬x,x¼yhyìzhzä{`{ð|”}}p}¤}¼}Ô}ì~~~4~L~d~|~”~¬~Ä~ä~üD|Ø€4€¨xÔ‚H‚¸ƒ4ƒÈ„„˜……„…è†L†à‡tˆˆtˆÌ‰8‰˜‰øŠpŠè‹H‹¨ŒŒ”Œè<¨üŽh޼Žä`˜¸ü( Ü‘‘X‘|‘Ð’$’x’ô“l“Ì”,”Œ”ô•X•Ü–d–À—4—°˜(˜ ™$™¬™Ôšš\štšŒš¤š¼šÔšì›››4›L›d›|›”›¬›Ä›Üœ\œø(H`€˜°Èàøžž(ž@žXžpžˆž ž¸žÐžèŸŸŸˆ   $ < T l Œ ¬ Ä Ü ô¡ ¡$¡<¡T¡l¡„¡œ¡´¡Ì¡ä¡ü¢¢,¢D¢\¢t¢Œ¢¤¢¼¢Ô¢ì£££4£L£l£„£¤£¼£Ü£ü¤¤<¤T¤l¤„¤œ¤´¤Ì¤ä¤ü¥¥,¥D¥\¥t¥Œ¥¤¥¼¥Ü¥ô¦¦,¦D¦\¦t¦Œ¦¤¦¼¦Ô¦ì§§§4§L§d§|§”§¬§Ì§ä¨¨¨4¨L¨d¨|¨”¨¬¨Ä¨Ü¨ô© ©$©<©T©l©„©œ©´©Ì©ä©üªª,ªDª\ªtªŒª¤ª¼ªÔªì«««4«L«d«|«œ«´«Ô«ì¬ ¬$¬D¬\¬t¬Œ¬¬¬Ä¬ä¬ü­­4­T­l­„­œ­´­Ì­ä­ü®®,®L®d®„®œ®¼®Ô®ô¯ ¯$¯<¯T¯l¯„¯œ¯´¯Ì¯ä¯ü°°4°T°l°Œ°¤°Ä°Ü°ô± ±$±<±T±l±„±œ±´±Ì±ä±ü²²,²D²\²t²Œ²¤²¼²Ô²ì³³³4³L³d³|³”³¬³Ä³Ü³ô´ ´$´<´T´l´„´œ´´´Ì´ä´üµµ,µDµ\µtµŒµ¤µ¼µÔµì¶¶¶4¶L¶d¶|¶”¶¬¶Ä¶Ü¶ô· ·$·<·T·l·„·œ·´·Ì·ä·ü¸¸,¸D¸\¸t¸Œ¸¤¸¼¸Ô¸ì¹¹¹4¹L¹d¹|¹”¹¬¹Ä¹Ü¹ôº º$º<ºTºlº„ºœº´ºÌºäºü»»,»D»\»t»Œ»¤»¼»Ô»ì¼¼¼4¼L¼d¼|¼”¼¬¼Ä¼Ü¼ô½ ½$½<½T½l½„½œ½´½Ì½ä½ü¾¾,¾D¾\¾t¾Œ¾¤¾¼¾Ô¾ì¿¿¿4¿L¿d¿|¿”¿¬¿Ä¿Ü¿ôÀ À$À<ÀTÀlÀ„ÀœÀ´ÀÌÀäÀüÁÁ,ÁDÁ\ÁtÁŒÁ¤Á¼ÁÔÁìÂÂÂ4ÂLÂdÂ|”¬ÂÄÂÜÂôà Ã$Ã<ÃTÃlÄÜôÃÌÃäÃüÄÄ,ÄDÄ\ÄlĤĸÄÈÄàÄøÅÅ(Å@ÅXÅpňÅ ŸÅÐÅèÆÆÆ0ÆHÆ`ÆxÆƨÆÀÆØÆðÇÇ Ç8ÇPÇhÇ€ǘǰÇÈÇàÇøÈÈ(È@ÈXÈtÈŒȼÈÌÈÜÈôÉ É$É<ÉTÉlɄɜɴÉÌÉÜÉðÉðÉðÉðÉðÉðÉðÉðÉðÉðÉðÉðÉðÉðÉðÉðÉðÊ ÊÊ,ÊHÊdÊtÊ„ʘʼÊàËË,ËDË\ËtËŒ˸ËôÌÌ8ÌHÌ`Ì€ÌÌÌÌÌÌÌÌÌÍ\Î`΄μÏÏ,ÏdϰÏÐÏðÐШÐÀÑ(ÑDÑtѤÑÌÑðÒ Ò(ÒˆÒèÓÓÓ0Ó`Ó˜ÓÜÔ Ô4ÔhÔ¸ÔÐÔôÕDÕtÖˆÖ¨ÖÐÖø×,×H×p× ×Ä×ì×ì×ì×ì×ì×ì×ìØ$Ø8ØlØÈÙ4Ù`ÙÜÚHÚtÚÚ¨ÚØÚìÛÛÛ(Û<ÛPÛdÛxی۠۴ÛÈÛÜÛðÜÜÜ,Ü@ÜTÜhÜ|ÜÝ0ݨÝìÞŒßߌàdà|á áˆáüâŒâØã$ã¼äDäÈå,åÈæ<ælæ”æ¼æØæôçDç˜çÐçäè(èŒè¨èÌèèé@élé ê ê€ê¬êÌêàëë$ëHë€ë°ëÄëØëðììDíXîœïïï ðtñ,ñ<ñ¨ñÀóô(ôpôÀõ(ööœ÷øøŒøÌøôùù¬ùüú„üüÌýLýØþtþ”þ¼þÜÿ$ÿdÿtÿˆœ°ÀÐ0xˆìðPd °ÀÐø<„°ð   8 L ¤ ¸ „ ˜ ¸ Ø ð  0 P h ˆ   À à   ( @ ` x ˆ   À è   ( H X h x ˆ ˜ ° Ð è ø0Xp€˜¸ÈØèø0d˜ÐD¸ø(D„Ô$Ltœ¸Ôèü4LÔ\Ä,Èt¤Hp¸$xŒ@dœ¸Ì4t„°tt˜´äü@TxŒÄ,Lì<Lœ  ( Œ   ¸!(!@!À"D"\##¨#À$$ $t$¤$Ø%%(%è&,&t&Ð','„'Ü((,(H(d(Ä)$)d)x)Ô*,*D*\*Ì+8+œ+Ä+Ø+ô,,,,@,œ,ì-T-¨..,.@.h.Œ.°.à/ /4/P/l/”/¨/¼00,0X0”11€1à2@2¸2Ø2ø3343h3 3Ð3ä4 404d4€4°4Ä4Ø4ì55$5D5X5l5€5œ5Ä5ì66<6d6Œ6´6Ü6ü77<7\7|7œ7¼7Ü88,8T8|8¤8Ì8ô99D9d9Œ9´9Ô9ô::4:T:|:à;;$;Œ<4= =ˆ>,>ð?d@4@ôA A¼AØAôBB@BpBŒB¨BäC C<CXCxC˜C¸CØCôDD,DHDdD€DœD¸DÌDàDôEE0EXE„E°EÔFF,FTFhF|FF¤F¸FÌFàFôGG,GHGdG€GœG¸GÔGðH H(HDH`H|H˜H´HäII(IXItII¬IàIüJJ,J\JpJŒJ¨JØKKKHKtK¬KÈKäLLL8LTLhL|LLÀLôM8MLM`MtMM¬MÈMäNNN`N¤OOO4OLOhO„O O¼OØOôPP,PHPdP€P˜P°PÄRÜVèYY(Y<YXYlY€Y¤YÐYìZZZ0ZLZhZ”Zø[[`[|\H\¼\Ø^^0^T^p^˜^´^Ð^ì__8_d_x_ _¼_Ø_ô``,`T`h`|``¤`À`ìaa$a@aTata¨aìbPbˆbÐd8dØeXeˆeÌeàeüffdf¤fÈfÜgg„gÄgØgühh,hHh|hh¬hÈhÜhøi<ihi|i¤i¸iðj(jPjxjÌk k(k<kXk¸kÔkèll,lHldll¬lØlômn¤oo¼p p¨qhq´qärüs,sxsÌt,ttÈu0yØyðzz z8z˜zÌ{{T{À{ü|4|p|¸|Ü}}4}`}Ø~~P~¤~à0¨€€<€h€  <Ìð‚@‚”‚À‚胃@ƒpƒØ„@„€„è……l…ì†D†¨‡H‡t‡¬ˆdˆ¤ˆÐˆô‰$‰Œ‰¬Š,ŠPŠx‹ ‹ÄŒPŒ°<ðŽÔ(¨ü`„Ø‘<‘ˆ‘Ü’”“x“Ä”H”€”à••T•”•è–p—(—œ˜™™°™ôšp››ðœHœÌ4Ôž¬ŸœŸÀ ¤¡$¡Ð¢p££¤4¤ü¥ ¦\¦¼§H§l§Ä¨¨Ì©Xªª|ªü«d«À¬L¬Ø­D­È®l®¸¯4¯Œ°4°¬±T±¼²P²È³@³¬´X´°µ,µXµÄ¶¶€¶ð·t·Ø¸L¸Ü¹|¹´º$ºtºô»ˆ¼L½¾D¾¸¾ð¿lÀÀHÀÐÁxÂ,ÂØÃÃXØÄÄTÄ”ÅÅŒÆHÆèÇ4ÇlÇÐÈÈtÈôÉhÉôÊhÊôËtÌ,Ì|Í Í`ÍÌÎ@ÏψÏÐÐ(ÐpÑѰÑèÒdÓÓ Ô8ÔèÕ\ÖÖ„××\×ðØ€Ù<ÙÈÚ€ÛTÛüܸÝ8ÝÀÞÞpÞ¬ßß„ßÌààˆàØáTáÌââlâäã@ãØäDä”äÜåDææ€ççÈèèÐé¨êPë$ëlëäìtí4í„îîï8ïlïìðLðøñ`ñüòŒóHóÌô€õõØöxöø÷¤øDùùÌúLú¤ûHüdýýÄþ ÿHì¤Ø8tà\¬ìXàpüÈ ¼ ô ` Ä  € (  ä\ÄH´Lðlè,˜0Àè LüøìHÀH¸ð€ÐÄ$\ÐDäd€@¬ð @ ¬!<!Ð"t#$#Œ# #°#Ä#ä$$$$L$€$´$ø%%,%L%l&&`&Ô'0'¨'Ä(8(”(ü)T)ä*`*¬*ð+`+´, , --œ..¬//T0 0”0ü1Ð2X2à3L3 3ô4t4è5D5Œ5ø6x6È7X7Ø8,8H8¸9H9´:(:¨;8;¨<<4<œ==˜=è>4>”>à?˜@`AAØBˆC$DDôEÈF¨GTGøH„IPJJˆK0KÄLˆM8MèN€O(OôP˜Q8RR¬S`T0TàU|V(W8XXìZZì[Ô\È]Ô^à_È`àa”bLc$cðdèeüfÀgˆh<ijjàkˆl8làmÈnðpXrsttðv wwôxˆylz|{ |Ä}`~˜ô€èÈ‚¬ƒÈ…†<†üˆˆÌ‰¨Šx‹ ‹ì ÄŽˆ0H‘<‘Ø’x““¸”x• •Ô– —P˜(˜à™š šà›˜œ8 xžDŸ @ è¡Œ¢D¢ô£ø¤È¥h¦\¦Ü§¨¨ ©pªŒ«L«¼¬h­­¼®Œ¯h¯ô°˜±\±ü²ä³´´tµ µÔ¶À·Œ¸x¹Tº$º¤»\»ü¼„½4½è¾Ô¿°À¤ÁTœØÄÜÆ<ÇÈ,É Ê$Ë\Ì,ÌÔͼÎxÏ\ЈÑLÒÓÔ8ÔðÕøÖÐ×dØ@ÙÚÛ0Ûôܼ݌ޠߘàdá@â4âôãôäðåÀæxçˆèé`ê,ëìDí îîÔïtðHñDòXó,ôõö@÷pø<ù8ú ûDüü´ý\þ\ÿ¤è è¤h´t P  < è t   „\À8äŒÈhŒ(À|( ˜p¨<Èpô Ì!È"°#È$Ì&'@((Ð)ä*Ü+œ,€-D.4//è0”11Ü2è3Ô4ì5ì78899ì:Ì;°<˜=d>P?(@°BBÔCtDÄEÀFàGèI JDK¸MMøN¸OHP8QDR8SÀU4VàXxY˜Z¨[@[ì\”]$]Ü^€_d`D`Üapaøb€cLcÀd„eXeäfäg|hhœii€jj jøk€kìl„mm|nnŒooˆp pÌq<qÄr@rôs„tt„uu¸v@v¨w w˜xxDx€xÈyLyœyèz\zÄ{¤|Ô}4}Ì~X$€€¬|‚8‚ЃLƒä„T„Ä… …„…ô†\†t†ä‡¬ˆ°‰€‰ÌŠ(ŠÀ‹D‹´‹ÌŒ„<ŽŽØ„Ü0Ü‘`’’¤“4“Д$”´•8•ä–Œ—`˜˜™™Ä™üšpšÐ›T›¸œ`œè`žž”ŸTŸ˜Ÿè \ Ô¡\¡œ¡ä¢ ¢€¢ø£`£ ¤¤d¥¥l¦¦Ä§$§¤§ä¨L¨Ì©P©Øªxªè«h¬¬ø­è®ì¯ˆ°T°ø±Ä²L³$³À´„´üµ€¶¶˜·D¸¸¨¹„ºl»»°¼ ½„¾0¾Ø¿¿¤À0À”ÀüÁˆÂ¤Ã4àÄÄXÅŘÅàÆ0ÆÈÇ8ÇÔÈ|ȘÈäÉxɸÉØÊ,Ê`ʰËËËŒÌÌ@̈ÌÜÍ ÍdÍÈÎ$ÎÏÏÐÐ4ÐÄÑpÑÔÒPÒèÓ€ÓüÔ”ÕTÕ Ö ÖÌ×<ØØxÙ,ÙÀÚ4Ú°ÛXÛðÜPܤÝ<ݰÞXÞ¬ß$ßœààŒàìáhâ<âÈã`ää´å8å¼å¼æ,æœç4çìè”èøéˆêêdëëë4ëLëÔì|íí4íLíüî”ï@ïäðˆñLñüòhòÜóXó¨óüôdôÐõ|öö|öô÷<÷´ø,øˆøØù`ù¼ú,útúäûLû¸üüœüìýXýÐþdþ°ÿ ÿ¬xÔD¨ ¤„È(¬ ¤<ØD  ˜ 8 ø p ( Ô È¤ˆTè`üØp@È(´0à¼pÈlÈ(È4œ€ð|ü l ´!!œ""¨# #´$d%%D%d& &À'x(T(Ü)t)ø*++„+Ø,<,ˆ,È--h-¬-ð.L.œ.ô/L/h/¼/Ø0x0ø1 202è3Œ4X4ü5È6L6Ü7„88¬9X9Ð:x;;¬<,<¬=h=ð>”??¨@,@ÀA\AÜBˆBüCŒDDDÌEdE¬F FlFÈG(G„GìH@H„H°IItIØJJˆJðKPK|LxLÀMÄNäOÀOØOðPP P8PPPhP€P˜P°PÈPàPøQQ(Q@QXQpQˆQ Q¸QÐQèQøRR(S SÌTˆT¨TÈTèUU U@V,VDV¬W4WŒWÜXPX˜YYLY˜ZZ„Zô[À\|],]Ð^Œ^¤^Ø^ð_,_€_¨_è`,`x`´`èa,aPaha€a aÀaØaðbb b8bPbhb€b˜b°bÈbàbøcc(c@cXcpcˆc c¸cÐcèddd0dHd`dœe eHe°eÜf4fÐg$g¨gøhhhÈihiÈj8j„jÐk kxkØl@lhl¬lèm m¨npnÐnüoloäpœpÌq8q¼r4rŒrÐsDsØt@t´uu v0vœvôwtxxhxüyXy°z z|zð{t||`|ð}d}Ð~ ~”ì€X€Ìp‚”ƒÄ„T„Ô…d…Іh†œ†Ä‡‡8‡x‡Ðˆ4‰‰”‰°ŠŠ”Šä‹,‹¤ŒŒ(ÀŽ< ˆüTÔ‘d‘ð’|’ì“8“˜”$”ˆ”à•X––(–8–¬— —0—´˜˜d˜¬˜ü™€™àš$špšÔ›8›ˆœœ dÈž,ž€Ÿ8Ÿ€ŸÀ ( È¡¡h¡À¡ð¢L¢è£4£„£ø¤$XdÙ3!%!!X þGfþšÙý'HI|ÐÙ #'#5Ð'STÙþ®ßßRýhh4Ð1Å 3#'73#'4]' ]'Åo††oo††ÿì¹3#3##7##7#537#537337#3å$]jiu'L&|'L&erly$L$}#0| }¹ÄD®DÓÓÓÓD®DÄÄÄþø®!ÿ‚.4;%#5.=3&'&546753#.'%5>54&'oi;emO $]!Ge`;[gO@243"þí8<¯CC9MÃ`sggna % 3_Ug 66iU7Fù '8±ð>1ZþzJ716ÿì[Å $02"&46"32654&%3#2#"&46"32654&ÇHcdŒedF)<<*)<;oBþuBÚHceEGddF)<<*)<;­dIEdeŒeF;*)<;)+;^ý'VdHEdeŒdF;)*;;(+;4ÿé}Å*3%#"&5467.54626=3#>54&#"'32Ò2 ;D\qE]/"dŽ\?2EljÙp&;Y$]]$Y;&2ÿöÚ ##5#5353ÏFÏÏF FÏÏFÏÏWÿmÀh 73#5>=#Wii#32#"& 3265+.@;!èwqrvvþäŒJFWYˆM0þŒ¯¹»ÓþßþÜ—f[Å#5>73#f>:Xù? .Rý;"ÿÅ632!!>?654&#"2ãe~–dA8uþ(Ro\`P<… Ïöt\„R6#B-Wu?47U9L© ÿéúÅ$"#632#"'332654##5>54&L9XÙesc@8ƒmÚXHHEN“% _OCxSEåh[l'ODexåMJKCK,A8AÅ %!533##5GþÕBAiiXÞª]¾þ4Oªù6þÊ#ÿéÅ!!632#".'332654&#"#ÜþÙ;Hfˆk)E-%XrHSTG):Q5ÅWÆ+ƒipŽ)/wXLO[%‚+ÿéÅ%4>32#.#"632#""32654&+"3G?#Qk X >.LQ:i_zƒeîòARR>=PJC^R3bW38‹‚O~ch‡‚SBD[WCGS.Å #67!5x‹^(|þÅJ þϪ¯ µW%ÿéÅ("&547.5462&"32654"32654‡z…Ò…y6*w¼w*spCC87D9„RQACSu:waz{av:"@1SjjS2@á=32=<24ìM|NM?>&ÿéýÅ##"&'33267"&54632"2654&ý"3G@#Qk X >.LQBÀzƒeïð=PJ€SRk^R3bW38‹‚O~ch‡MXCGSTAE[nÖ 7#5#5Öhhhhhh¤hhnÿm× #53#5>=#×hii#< hhþ\xƒ&&4-ÿ÷Ú75% -éþvŠÆEÏO¡¤O2oa!5!5þäþaFF¬FF2ÿ÷Ú5-5þŠþv EÏO¡¤OMýå#54>54&#"#4632#5ý%45%Z%54%F:I8Uolat³Z%.J1-9 /7%B00=#3?RJswhýëhh"ÿr·å5A332654&#"327#".5467>32#"'#"&546322654&#"™SZ @hÑžëØŸOrpr|ÒyTJB²Y¯ûVLn`BLF]œeT&¾A[6(?b:õþè#ŽX}¶êà C*k¸mb½C54&+ovaþ·(=Z-eF?}’´´/1>D?ãÐ^rÙ$;;p/Tèèþ³+49Eû0ÿé¥å4>32#.#"32673!".00GyLî+_^Wj{€mZ``!þõKwG/d2bjO4îNN¢Œ‰¡ejþß3Ni`Y›Ù3!2#'32654&+Y‹žŸŠ¼¬lppl¬ÙÂþ¬ÃRŠ‹ZeÙ !!!!!·®ýõùþdLúRÙRéRZCÙ #!!!·]éþt\Lþ´ÙRéR,ÿéÅå$326=#5!#'#"&54>32#.#"‰$9^]§Ù&#&=4&+#!2'4&+326 +q:>ð]Pks6+LCááJEh&0* ")8.IAC?þÆÙe^>RƒH6û<0ÿémå0%2>54/&54632#.#"#".'3V8N%†µ‹x~ŒX^WJY6B·JQ(>gA)KN8%X+U;*)S#0%…cswkGMD7*01`C9=. #7\<64QÙ##5!b]ð<‡ýy‡RRUÿé…Ù3#"&533265(]™€‚•]eUXdÙþn‚oþOOTJ…Ù!#33ˆdþúdÖÊcÙý—i¡Ù !# #333èf¨£f»h‰¢d¦†hWý©Ùý°Pý°P‰Ù # #33‡sÇÈqòq»¼ovþŠ0þÐvcþâ •Ù#33ƒ]þçsÖÐoþâ»þcGÙ !!5!5EþL¶ýÕ¶þfÙTýÍRR5R@ÿ,úÙ#3#úggºÙHüãH­ÿøÿìÙ#/í7íÙýíÿ,ÐÙ53#53ggºÔHHüS,I©Å3# #ÅI›EzyEÅþ„,þÔÿêÿPBÿ‚!5Bý¨~22Pçä#'‡`<•ä””*ÿé)4632327#"&'#"&54>7>=4&#"26=AÌad- #()T^O] -<$1&=8:<SEXeJ<6qªIFþÌ)? %(MTG& &(-0þÁI*^  -P,6ÿé Ù3632#"'#"32654&6S9ihx|hk;KåBPPBDUSÙþìV”‚ZCÍo¸ooY^pÿéÝ#.#"3273#"&54632×T@4DMNEkTp^k}j[m\7;ob]j~`k•‚œbÿéïÙ#5#"&54632"32654&ïJ"O6jz{fl5“DTTEBPPÙý'E1+™…}—Qþôp[\on[^o(ÿé%!3273#"&632!654&#"þ~+Sf#TvZn€ƒmJqþ€&T=?RêH(DiV`•›J@7,AYWÜ###5354632&#"WSFFA: : Dþ8ÈDY8?E5Rÿ&é("&5463253#"&'3326="32654&õ\|{db>M0_I\nUqT>#K!CNNDBLK—}€ž[LþJKeV*TJX_a2,ån^_mk^bmFæÙ4&#"#3>32#“C)@NSS%K8LYSk70aPþßÙþë0'MBþtB–Ù#7#5–SST ýô Íiiÿîÿ&™Ù 3#"'53265#5FS  $SS ý‡mG'%ii:öÙ 73##Þk¶Ög±QSÙþUÞµþ©PÌÙD˜Ù#˜TÙý'ÙFú!3>32>32#4&#"#4&#"#FM"K4a,%H4IOT3.3HT3.3HT J/*P,$KGþwi27P9þ·i27P9þ·Fç3>32#4&#"#FM#Q:LZS:2@NT X70NAþtk/8aPþß$ÿéþ 2#"&6"32654&q}np}~oFPPFEQO•ˆ”••Mm¾mm\an6ÿ& 3632#"'"32654&6M;lhy{ea@’BPPBDTSÚæO^š„}—Nþï§o¸ooY^pÿ&ï##"&5463253"32654&ïS9ihx|hk32ATTTM$C( ÃJgþð _;3"ÿéË$732654&/.5462#&#"#"'z5E7C&+N]In¶bXf3<.3PNFucËœ/7-%" C>IWTMT+$# E:LZ³ÿéþœ#327#"&5#5353þV'14GGS Dþ™F+(ŒDAÿéâ !#5#"&5332653âK%P:L[S:2ANSI4,NA”þ/8aP) æ !#33[¸^Œ”^ þW©Ä !# #333*_je^˜\kdfgh^›þe þh˜þh˜Ù #'#373$µaƒ…_¹¯_~~^þñÉÉ ¾¾ÿ&Þ 3#"'5326?3„Zé)^ ±Y† ý†l KSþhÉ !!5!5»þÉEþV9þÜ Jþ‡IKxI+ÿ,Ù!#";#"&=4&'5>=463%$.R%.49",,"94ÙA'µEF&xµ'AE>§E< E ;F§>Edÿ, Ù3#d<<ÙüSÿ,Ù 5326=47&=4&+532#%RR%/4:!++!:4ÔA'µx%&xµ'AE>§E< E EK ü¶"#>3232653#"/&µ/571u5i'*bsNFKE%&?ÿÿÿÿzÿ3Î J À4ÿˆþt673#5.546753#.8`TjW*euue*XcT9XƒEÎþg tZmab “wz˜ ZYcV2<þm–¸UgÿéÙ53#632327#"&#"'>54'#53.54632#&#"“& ˆ3C;?!h(+*9J+†#580E8nQ"‰e5>,X„@M ,> 7+'RD'B8.%B;V.&(791![{ 1W9šFC…é'&%'#"''7&547'76327'"32654&å:5(<5)380 687,5:(;97,>?,+?>¾65391+;9-7575:7)42/É>V==*,> !Å#3##5#535#5333着ªX¬¬¬—ÍU¹³UÉb3M3¯¯3M3cþ¾Bþdÿ, Ù3#3#d<<<<Ùþo‹þo+ÿ+úÙ4?32654/.5467&5462#54&#"#".57654/¢=)+57ª1+27,kœaT5,&3 ’=0mkP.4'o¦II¡' E50&2&u"J12G33E`bO/70%"^'J6s)"4 H`*J0ó{'?=3m-<(ÿÿd4Ì&yYy¦ÿóÿêïæ%0#"&54632#.#"327 #"&54$ 32654(!@(VlmXƒ#G -(9DE8Vþò<àᢚßþü¸·…¹8@$fi‚›2+]OHb|®ßž ß✞¢¼„ƒ½»†ƒ%/Mæ#-!5%#"'#"&5467>=4#"#63232'3265@þë"/1808DYC";~zTS.9%6b33_,++4,11 , l^³z /(-j’¶ 757757-˜jj5˜jjãYzSSSSyYzSSSS(V w!#5!(øFþNwþßÛ.ð8#5î8HHÿóÿêïæ#.9#&54574&+#32'3254&+& #"&54$ 32654ïO"†FÎþK#(=<àᢚßþü¸·…¹h/ -#%($ ¹½~"*C# Üßž ß✞¢¼„ƒ½»†ƒw.½!5.þî½FF—Æ® 2#"&46"32654/>YY@=YYfN87&(8®Y>@XZ|Y98&'87('2ÿõo ##5#5353!5ÏFÏÏFÏþ FÏÏFÏÏþ›FFFÅ"#6323!>?654&²$>“@R`?! åþÐ3H:;1 ˜F8R/ #:IL& / +BÅ%"#632#"&5332654&'춮&©.#?@K9GUFHO>,-*0 3@.)-,Ž@8;L=IJD.++&'3# $\P-ä3#¼q•<ä”Aÿ$  %#"'#"'#33265332 !S;h6$SS:1ANS-1? SSßèþ/8aP)þL)0ÿO Ù.546;####ÿan‚^ú9@R@ƒ^e‹@ü¶Jü¶ÿÿWã¿Kyÿäþ'ÿ*32654#"'73632#"'< ! . *& &)B9/NŒ%\8# +2"EæÅ #57>73#¨c6$ +>D.0þW(/Dæ!52"&546"2654&:þùƒDJK†KKC'--N-,b33„ZTOZZRQZ4@78@?79@ÿÿ.j“¶mÀ À=ÿìQÅ #57>73#3#%#533##= c6$ +>ã:þ<:¼Ì.CC>D.0þW©ý'x; þð5d™ªª=ÿìLÅ *#57>73#3#"#6323!>?654& c6$ +>Ë:þ<:$>“@R`?! åþÐ3H:;1D.0þW©ý'ˆ ˜F8R/ #:IL& / +ÿìDÅ%)47"#632#"&5332654&'춮&%3#%#533##=³.#?@K9GUFHO>,-*0 3@.)ª:þ<:¼Ì.CC>-,Ž@8;L=IJD.++&'3# $5ý'x; þð5d™ªªÿÿ`ÿ' "] Àÿÿœ#k¨¸$ÿÿœ#j¶¸$ÿÿŸ#f¬º$ÿÿw#|¯ª$ÿÿq#j®¥$ÿÿÆ#z¨Â$ ¶Ù%!#!!!!!!#ÔþóUg+nþ`þ …þdŠÖÖÙRéRúR(_þ¡0ÿ*¥å7%2673!632#"'732654#"'7.'.54>32#.#"zZ_`!þ÷ &)B90M. 8XyÜ!4@Šr!ªª«q3=HFþYkbR"6$ f2zK–Œÿÿ*ÿéØ"ksôDÿÿ*ÿéØ"jsôDÿÿ*ÿé×"fpòDÿÿ*ÿéÅ"|qøDÿÿ*ÿé×"jp Dÿÿ*ÿé"zlD*ÿéU/;B%3273#"'&5#"&54>=4#"#632>3226=%!4&#"Ó01e%TvYˆ88e;L\*FGf$vp TÊ€/\6IpýFZgG86&P@?Rê4K%iUak:4TG&9$ N]ªR&,J@7p¸Qe  ,('-üGYWÿ*Ý5.54632#.#"3273#632#"'732654#"'á5N&j[mT@4DMNEkTt\ %*B9/N.  8=P,‚œb]7;oc]j^m!# +2!)%ÿÿ(ÿéÚ"kvöHÿÿ(ÿéÚ"jxöHÿÿ(ÿé×"f{òHÿÿ(ÿé×"ju HÿÿÑÚ"kêöóÿÿ)úÚ"jÍöóÿÿÿùÙ"fåôóÿÿÿð Ø"j× ó$ÿéþç*4>32&''7&'77"&"32654&$-<8'';a$U4,%Ja(Z*F+"|â|íFPPFEQO@e<' (1-'(,/-%)#MLs>‡““Rm¾mm\anÿÿFçÂ"|tõQÿÿ$ÿéþÙ"kmõRÿÿ$ÿéþÚ"jnöRÿÿ$ÿéþÚ"fnõRÿÿ$ÿéþÄ"|n÷Rÿÿ$ÿéþÙ"jm R2Ø !5#5#5þ&hhhFF§hhphhÿâ##"''7&54632732654&#"?,}og<= B0~oeA:\î+?FPþéï)EFPÿGIm„•>EJGs„•AA¨þó0m_B· 4m_DÿÿAÿéâÙ"klõXÿÿAÿéâÙ"jlõXÿÿAÿéâÙ"foôXÿÿAÿéâÙ"jh Xÿÿÿ&ÞÙ"jQõ\6ÿ& Ê3632#"'"32654&6S8ifz{ea@’BPPBDTSÚ¤ÿPœ‚}—Nþï§o¸ooY^pÿÿÿ&ÞÙ"jV \ÿÿf#i¬©$ÿÿ*ÿé"inàDÿÿ#x¬±$ÿÿ*ÿé×"xnûDÿ3´Ù"&5467#'!#3#327 h8L3. KþçMcx7'H%0ÄpxÍ4*$:ÛÛÙý',6 - öLþ´+ÿ3T4?632327327#".5467&'#"&54>763>=4#"26=CËad- LH&*:1%9QaO]%(@5)1%u:;QEXeJ<6qªIFþÌ)?=7 - ,!( CMTG"3" N-0þÁI*^  -P,ÿÿ0ÿé¥#jÙ¹&ÿÿÿéÝÚ"jnöFÿÿ0ÿ饜#fÏ·&ÿÿÿéÝÄ"fcßFÿÿ0ÿ饄#yÚ¸&ÿÿÿéÝÙ"y\ Fÿÿ0ÿ饞#gÚ¹&ÿÿÿéÝÜ"gg÷FÿÿY›ž#g°¹'ÿÿÿé²Ù#òqG›Ù #53!2#!326&+3YEEŠžžŠþæ]­kppk­«SCCÂþ¬ÃSþÿñCÿé-Ù!3##5#"&546325#5353"32654&î??JFbf|{ea@––SåDTTDBPO5ý¨;R‚|—N‹5Lþðn²nlY\mÿÿZef#i²©(ÿÿ(ÿé§"isêHÿÿZe‰#x±­(ÿÿ(ÿéÙ"xrýHÿÿZeƒ#y°·(ÿÿ(ÿéÙ"yq HZÿ3ŒÙ"&5467!!!!!!#327@8L3.þ=ùþdþs®7'H%0Í4*$:ÙRéRúR,6 - (ÿ4.6%327#"&54>?#"&632!32?54&#"÷&)(&"&)?L  (pƒmJqþ~01e%T=?RŸ)B,(0 - 0( “›J@6b4K%iAYWIÿÿZež#g¶¹(ÿÿ(ÿéÚ"g|õHÿÿ,ÿéŇcfð @7 *ÿÿÿ&éÏ"fuêJÿÿ,ÿéÅŽ#xè²*ÿÿÿ&éÚ"xaþJÿÿ,ÿéÅ„#yå¸*ÿÿÿ&éÙ"yX Jÿÿ,þÔÅå'ÆR*ÿÿÿ&éê#²¥JÿÿS„™#fÈ´+ÿÿFæ—#f2²K'°Ù!5%53!533##!##5°wþ,]w],,]þŠ^,øZZH™™™™FþLþ´úFæÙ4&#"##53533#>32#“C)@NS??S––%K8LYSk70aPþßX5LL5”0'MBþtÿÿÿö0i#|ÿñœ,ÿÿÿáº"|Üíóÿÿf#iÿæ©,ÿÿÿõ§"iÙêóÿÿÿý*ˆ#xÿî¬,ÿÿÿçÙ"xØýóÿ3êÙ"&5467#3327ž8L3.^7(H%0Í4*$:Ùý',6 - ÿîÿ3¾Ù"&54673#327#5r8L-(S 0#H%0TÍ4*!8 ýô*6 - ¦iiÿÿ_Çs#yÿì§,T§ #§S ýô ÿÿdÿéšÙ#-ð,ÿÿBÿ&;Ù#M¢Lÿÿÿé ›#fض-ÿÿÿàÿ&ÿÏ&ïfÌêÿÿOþÔ’Ù'Æ4.ÿÿ:þÔöÙ'ÆðN:ö 73 #%#Þkþð0gþþS ÞÞþüþøØØ ÿÿF«#jÿêÇ/ÿÿ@«#jÿäÇOÿÿPþÔÙ'Æ /ÿÿBþÔ¦Ù'ÆOOÿÿPÚ'\µ/ÿÿDPÙ'\OÿÿPÙ#y/ÿÿDÙ#yÞO(Ù 7!!573­««{þ(PP]–yLz÷R9M8uÔÙ 7#573’BBS??S¥3@3þ›92@2`ÿÿL†#jɹ1ÿÿFçÝ"jzùQÿÿLþÔ†Ù'Æ>1ÿÿFþÔç'ÆðQÿÿL†ž#gǹ1ÿÿFçÛ"gtöQÿÿ._Ø&\×Qxlÿð™è$".#5232654.#"#3632š(B?l)@>Dm]]:)VR5-LVG½‘Nt;dMþÙM\%HRt±c0Fÿ&ç#"'532654&#"#3>32ç &:2@NTM#Q:LZŒþmG'·/8aPþß X70Nÿÿ&ÿéæf#ià©2ÿÿ$ÿéþ§"ikêRÿÿ&ÿéæˆ#xà¬2ÿÿ$ÿéþÙ"xlýRÿÿ&ÿéæ#}/¹2ÿÿ$ÿéä#}²R+ÿì¿å-4>325!!!!!!5#".7327&#"+(=RM'y>­þ°Hþ¸UþNCu(MR<'])94};;|59'dX‹T6XLRîRõRJ^5QˆZIn?' xex'@n$ÿé*1%3273#"'#"&54632>32$"32654!4&#"ý01f#TvY„>?ƒq||q‡=e=JqýØŒPPFEQX&P@?Rê4K%iV`gg“‡†’j28J@7päm^`ml^a3GYWÿÿ]§œ#jø5ÿÿEKã"jÿUÿÿ]þÔ§Ù'ÆH5ÿÿEþÔA'ÆSUÿÿ]§ž#g¹5ÿÿ1På"gUÿÿ0ÿémš#j®¶6ÿÿ"ÿéËä"jWVÿÿ0ÿémœ#f¬·6ÿÿ"ÿéËÐ"fVëV0ÿ*måJ%2>54/&54632#.#"632#"'732654#"'7&#'.=3V8N%†µ‹x~ŒX^WJY6B·JQ;wT&)B9/N.  ,YgX+U;*)S#0%…cswkGMD7*01`C(ED+ # +2"(%E€[64"ÿ*Ë@732654&/.5462#&#"632#"'732654#"'7&'z5E7C&+N]In¶bXf3<.3PNF4.&O&)B9/N. ¨œ/7-%" C>IWTMT+$# E:/N # +2"(%G ÿÿ0ÿém#gª¸6ÿÿ"ÿéËÝ"gTøVÿ+QÙ"32654#"'7##5!##632#"'¼ ! . * ð<ï &)B9/N‹%[‡RRýy7# +2"ÿ%œ/32654#"'7.5#53533#327632#"'B ! . &(*GGSVV &)B9/N™%S*$ŒDDþ™F/# +2"ÿÿQž#g‘¹7ÿÿÿéšÆ#Ú^WQÙ535#5!#3##xð<ï]eHÚRRÚHþ›e ÿéþœ#3#327#"&=#535#5353þVOO'14LLGGS DHF+(´HDÿÿUÿé…i#|Ëœ8ÿÿAÿéâ¿"|pòXÿÿUÿé…f#iÈ©8ÿÿAÿéâ"ilàXÿÿUÿé…ˆ#xȬ8ÿÿAÿéâ×"xlûXÿÿUÿé…Å#zÆÁ8ÿÿAÿéâ"zjXÿÿUÿé…œ#} ¸8ÿÿAÿéÛ#}¶ÿ÷XUÿ3…Ù#"&5467#"&53326533279L"'9,ƒ–]eUXd]%44%H%0Í4)/ €pþOOTJþ4W9046 - Aÿ4  $327#"&547#5#"&533265â#*$'>J`%P:L[S:2AN ýô; -2+>1I4,NA”þ/8aP)ÿÿ¡›#f8¶:ÿÿÄÑ#fÂÿìZÿÿ •˜#f®³<ÿÿÿ&ÞÏ"fVê\ÿÿ •q#j®¥<ÿÿG#j ¹=ÿÿÉÛ"jZ÷]ÿÿGq#y˜¥=ÿÿÉÙ"yP ]ÿÿGž#gœ¹=ÿÿÉÝ"gXø]Ü3##5354632&#"«SFFA: :ÈDY8?E5ÿé-Ù!533#632#"'##5"3264&YS––@ae{|fbFJ?$COPBDTTLL5‹N—|‚R;X5Äm\Yln²n0*Ù 0%2>54&+4+3%"5463!2#!#"3263J1>D?ãF’´´þ{=G~=Z-eF?vaþ·R1 R+49EûMèè!š1N$;;p/TB^r‚:OÿÿPpÙx6ÿé Ù "32654&!!632#"'BPPBDUSþÕ‡þÌ9ihx|hk;Ío¸ooY^pþ3ÙIËV”‚ZC¡Ù732654&+332#!'ÞÔ@RQAÔ]]¥–ˆ‚dþÆ€RR=@PhþêxfcËÿé3Ù "32654&3632#"'#'CBPPBDUSþÕS9ihx|hk;K]Ío¸ooY^p þìV”‚ZCËÿÿ0ÿé¥å &ÕÎÀ0ÿéíå(4>32632&#"#.#"32673!".00GyLŠHP _^Wj{€mZ``!þõKwG/d2bjO4O;ORNN¢Œ‰¡ejþß3Ni`ÿé.,"632&#"#.#"3273#"&54632”R T@4DMNEkTp^k}jTî>ER7;ob]j~`k•‚œÿÿ›Ù’0LÙ!%32654&+"5463!2#!#"3263g¬lppl¬¼{=Go‹žŸŠþçR1 RŠ‹Çš1NÂþ¬Ã‚:OOoÙ754!35!5!!".6;#"O´þtéþ·=Y-] 8'ãã'8Ú×ÔRý'+EF:.)-,6ÿé Ù "3264&#5#"&546325!5!&FSUDBPP£K;kh|xhi9þ̇Íp^Yoo¸oþ3CZ‚”VËIÿÿ&ÿ;$ A6ÀZeÙ !5!5!5!!5!þsþdùýõ®LRéRý'Rÿÿ/ÿé¥å'0ÿémå/".547&54632#.#";#"32>=3MQv<‚i‹x~ŒX^WJY_?XlC`%N8;U+X6Y\+GG&}1-lcswkGMD7.[RT.)+47Ji5ÿ&CÙ!!!!#"'532Zéþt\þ¤QH DL%RéRþG58Qÿ&Ü##"'53265#5354632&#"W &FFA: : DýËmG'DY8?E5R,ÿéå.326=#5!#'#"&54>32632&#"#.#"‰$9^[»þcþEgI>K57FÿéAÙ+#"&54&#"#3>3232>54&'7/714C)@NSS%K8LYI-F&5Hf1?';d+(/70aPþßÙþë0'MBþÕ/#1=+.t3&}; ªþPv:öÜ34632&#"73#:A: :Þk¶Ög±Qe8?E5þÐÞµþ©PÌSÙ #5333##‚||T}}TSCCþ½Cþ­ÿö,â"273267#".' #'527.#76„*:ˆo»0!! z’`ƨ‹%6 !Ü$5_LMþFbþ\tMbR @ÿñÙ !#5#"'#"&533265332653S"K4a,%H4JT_/-3C_[3C_J/*P,$LFVýÕ27O: ýÕiO: ÿôÿ&†Ù33##"'532Le}Xiþ‡MG DL%ý¬Tý'OýD58LFÿ8ç3>32#4&#"#FM#Q:LZS:2@NT X70NAý¬3/8aPþß&ÿéæå #"&632.#"!26æÀ žÂ Á^‹pmýþ ‹ÔŒa¢ÖÓVÓÔ}•–|Fu‹Œ&ÿé ""2654&#"&63232>54'7…tŽèŽëÀ žÂÂ>lB @%k=“¥þò¥¤„Цþ΢ÖÓVÓ$$ 6+8]a$ÿé5w !"32654&7#"&63232654'FPPFEQO¸%\%np}~n8R Îm¾mm\an©+8VEg”••# &ÿéœê #"2654&#"&632632#4&#"…tŽèŽëÀ žÂÂqVT`SI^%&*X“¥þò¥¤„Цþ΢ÖÓVÓ8=gTýÑM5i$ÿ8  #"32654&#4&#"#"&632632FPPFEQOHT"'#4np}~nT8@>F@Îm¾mm\an]ýÇM'*I|”••))I0Ù#3264&++##"3263#"5463!2gÂCKKC±q[å]R1 {=Gƒlu‡DxD„]qþË‚:Oš1No6ÿ& Ü ""32654&'632#"'#4632&#"BPPBDTSÞ;lhy{ea@T>9 :Ío¸ooY^p‘¡^š„}—Nþï?9>E[ÿƒ†Ù3264&+#332#&=4&#¸ÂAIIAÂ]]ÐhxVI+q;=DxDþ®½Ùxqct:+o.IAC?0ÿémå0%2>=3#".546?>54&#"#>32G;U+X%8NK)Ag>(QJ·B6YJW^XŒ~x‹µ†%N;46<\7# .=9C`10*7DMGkwsc…%0#S)*"ÿéË$%3#"&546?>54&#"#>2326sXËcuFNP3.<3fXb¶nI]N+&C7E4œ³ZL:E #$+TMTWI>C "%-7GÙ 5!!!!5÷Ù þfÛÛ¶ýÕmTRþæþåRRÿîÿ&=Ü "2654&#"&4632327#"5i%%2%$2II29B& ž$$$#°IdHD8ýT'Gmÿ&þœ.5#53533#327#"'53265ª),GGSVV &+$ŒDDþ™£mG'QÙ4>7!##+"327#"?2Íï]+R16 {Z4+Rýy‡tOÿéÿÜ3#327#"&5#5354632&#"¨VV'14GGA: :^RDþ™F+(ŒDY8?Eÿ&QÙ#5!#327#"&ð<ïD HQmôRRý-;Q8UÿéX#"&5332653>54'ã%ƒ™€‚•]eUXd]X+8f þSn‚oþOOTJ Aÿéo‹#5#"&5332653>54'J%K%P:L[S:2AN]‹+8kþHI4,NA”þ/8aP) ÿÿÿü¶Ù 6êÙÀUÿé”Ù".5332>=4.'3N7MM(](('GF3 4)+l޳,aJ ýÎ - '=a?8ciDA¾Á¯Â ÄÙ&#"#3632Ÿ  ³]þçsÖ­-A  iþÞþâ»þ#@  ÿ&$!#"'5326?3632&#"µÀ)^ ±Y†r)^œýöl KU þhAl KGÙ3#!!5#537!5E¹MǶýÕÇW‹»þfÙTïCþÿRRCñRÉ 3#!!57#537!5»{SŠ…EþV„]•}þÜ J•C¡IKŸC–I ÿéEÙ7!5!#"'332654#52>Eþf ´,1›|øX ªQjí ÒµRTè +F,dyå—MAžK  ÿéEÙ3"3273#"&'454>7'5!! íjQª Xø|›1,´ þfÒ KžAM—åyd,F+ èTR ÿqæ '5!!#"32673#"&546ƇþÜ0“NEHHXÚmƒa®JI«K€CKJMåxeXc"ÿ6ã )#"&#"327#"&543232654&+57!5!,·aW=6Wb]Baa`\0aSH0þ܇“Pb &E"LBO40+;K«IJ"ÿÅ632'!!>7'57654&#"2ãe~‚W§(A8uþ(I_S¡'`P<… Ïöt\{O$MD#B-Wo|9"MB7U9L©@ÿëðœ#%#"&5332654.=#53533#ðx]hsO?H?H&66&GGSVV&66&«]c|nD^8:)5=.DD-"&D6ÿ&  !>54&#"#3>32Š#O'? 7*haTT=_NBW%FGa;' hþ²9$A6F"))ýó›æP;%^N1aSDB&ÿÿdÿ, Ù_ÿÿdÿ,Ù"_n_2ÿ,Ù33#3###535#53<ÖÖÖÖ<ÒÒÒÒÙþˆFfFþ½CFfFÿÿ|ÐÙÿÿYž#?¼'ÿÿYÝ#@Ä'ÿÿÿéõÝ#@,GÿÿPÿéÖÙ#-,/ÿÿPÿ&ÅÙ#M,/ÿÿDÿ&wÙ#MÞOÿÿLÿénÙ#-Ä1ÿÿLÿ&kÙ#MÒ1ÿÿFÿ&ÅÙ#M,Qÿÿ£#g®¾$ÿÿ*ÿéÙ"gpôDÿÿ"£#gÿð¾,ÿÿÿïÙ"gÜôóÿÿ&ÿéæž#gâ¹2ÿÿ$ÿéþÙ"gnôRÿÿUÿé…ž#gʹ8ÿÿAÿéâÙ"goôXÿÿUÿé…·#jÈ"8qÈúÿÿAÿéâ5"jnå"XqmxÿÿUÿé…è#jÊ"8vÕÿÿAÿéâ‡"jnï"Xv˜£ÿÿUÿé…è#jÊp"8gÊÿÿAÿéâ‰"jnå"Xgp¤ÿÿUÿé…è#jÊ"8CÃÿÿAÿéâ‡"jnå"XCI£ÿÿ(ÿé H)ÀÿÿË#j®"$qªÿÿ*ÿé9"jpí"Dql|ÿÿÂ#yª‹"$q¬ÿÿ*ÿé!"ylã"Dqndÿÿ ¶g#qȪˆÿÿ*ÿéU½#q¨,ÿéúå-3267#536=#5!3##'#"&54>32#.#"‰$9^M $5kL\nÎn^_mk^bmýöX(4$@2,—}€ž[LþJ[3468TJÿÿ,ÿéÅž#gè¹*ÿÿÿ&éÙ"gZôJÿÿO’ž#g̹.ÿÿ:ös#gfŽN&ÿ#æå&"&5467.54632327"2654&†8L-)‹§Â ÁN–d0#H%0tŽèŽÝ4*"7Ξ«ÓÔ°e¦g*6 - p¥þò¥¤„Ц$ÿ#þ&"&5467.54632327"32654&8L.*\e~nq}qd0#H%0FPPFEQOÝ4*"8‘v„••ˆy“*6 - «m¾mm\anÿÿ&ÿ#æS#qà–ªÿÿ$ÿ#þ‰"qkÌ«ÿÿ ÿéEž#gœ¹yÿÿÿqîÙ"g_ô2ÿÿÿßÿ&þÊ&ïgÌåÿÿYÙ#=Ò'ÿÿY›Ù#]Ò'ÿÿÿéõÙ#],Gÿÿ,ÿéÅ¡#v½*ÿÿÿ&é×#v‚ÿóJ[Dç!>54&#"#3>32º#O'? >#)k5__=_NB^#.S8d"+þº9$A6F"!*/þ!„×P;%^N,[EP.BÿÿL†¡#C ½1ÿÿFç×"CNóQÿÿ³#z¨ b$@0vÕÏÿÿ*ÿé®#v™Ê§ÿÿ ¶¡#vó½ˆÿÿ*ÿéU×#v=ÿó¨ÿÿÿéè¯#v Ëšÿÿÿâ×#v—ÿóºÿÿ£#¯¿$ÿÿÿéÙ#¯ÑÿõDÿÿ”#±ö¸$ÿÿ*ÿéÊ#±µÿîDÿÿZe£#¯¿(ÿÿÿéÙ#¯ÔÿõHÿÿZe”#±û¸(ÿÿ(ÿéÊ#±¿ÿîHÿÿÿ{ú£#¯>¿,ÿÿÿ|ûÙ#¯?ÿõóÿÿÿý*”#±;¸,ÿÿÿçÊ#±%ÿîóÿÿ&ÿ鿣#¯=¿2ÿÿÿéþÙ#¯ÉÿõRÿÿ&ÿéæ”#±-¸2ÿÿ$ÿéþÊ#±ºÿîRÿÿ]§£#¯!¿5ÿÿÿ¹AÙ#¯|ÿõUÿÿ]§›#±¿5ÿÿ-ZÊ#±kÿîUÿÿUÿé…£#¯¿8ÿÿÿóÿéâÙ#¯¶ÿõXÿÿUÿé…”#±¸8ÿÿAÿéâÊ#±¹ÿîXÿÿ0þÔmå'Æ*6ÿÿ"þÔË'ÆÐVÿÿþÔQÙ'Æ 7ÿÿþÔþœ'ÆlW ÿœëÅ)"#632'>54.''67654&ÿL9XÙes1b0;ƒPX>£Š @[{%LCxSEåh[1O1{/O3:WB\$) "K20<8Aÿ¬z("#4632'>54&''67654À'5VbOL`"F52\:8 #ZE9.Ja,Ð80PfXD(: #]4,$J "5E' )QÿÿS„ž#gɹ+ÿÿFæs#g†ŽKÿ(GÙ!#"'5326=!5!5EþL¶ &þ)¶þfÙTýͽmG'JR5Rÿ(É )5!5!!#"'53265uþª9þ܇þÉE &KxIJþ‡´mG'ÿÿ„#yª¸$ÿÿ*ÿéÙ"yl DZÿ1eÙ&32654#"'7#!!!!!#632#"'ä ! . 'ðùþdþs®õ &)B9/N…%UÙRéRúR1# +2"(ÿ/832654#"'7.54632!3273632#"'!654&#"š ! . 'esƒmJqþ~+Sf#TmT &)B9/N&T=?Rœ%V”z›J@7pH(DiR_1# +2"òAYWÿÿ&ÿéæè#qá+˜ÿÿ$ÿéþ9"jmï"Rql|ÿÿ&ÿéææ#qç)—ÿÿ$ÿéþ;"qr~·ÿÿ&ÿéæ„#yÞ¸2ÿÿ$ÿéþ½"yiñRÿÿ&ÿéæã#qà&éÿÿ$ÿéþ""yiã"Rqkeÿÿ •S#q¬–<ÿÿÿ&Þ‰"qTÌ\ÿîÿ&™ 3#"'53265FS & ý‡mG'ÿÿ*ÿé DAÀÿé$ #4&#"326"&5463253327#"&'OF?HUC@D¤K„plZBS- #(+&JWySQxwÁšvzžPBþL)? %+$"ÿÿÿò# ñ2 À6ÿé Ü ""32654&4632&#"632#"'BPPBDUSþÕA: :9ihx|hk;Ío¸ooY^pþ3e8?E5™V”‚ZCÿÿÿéÝ FüÀ ÿÖ× -%265.#"7#"''7&54632#.#"676328D-]ñ[mN800D0j[mT@4DMW)+-6 M,0I)*<6Il‚œb]7;obN0H  7ÿ&LÙ $"32654&#"&546323327#"5 DTTEBPPY"O6jz{fl5S"' ‹Íp[\on[^oþx1+™…}—QüÛ&GmÿéFÜ $"32654&7#5#"&5463254632&#" DTTEBPP£J"O6jz{fl5A: :Íp[\on[^o‘ý¢E1+™…}—Q›8?E(ÿé732#"&'332>7'.#"(åmƒ€nZvT#f.3!R?327332>7#"#".¨þÙY8?Rþ…‚!,#f#TvZd?YE '    -*O=E#ƒm0L0# ÖMSW-D%iV`>]ŒT r-GB^›&=0G""ÿéË#%3#"&547&5462#&#";#"326sXËcuVAn¶bXf3<10>J+;@6E4œ³ZLV&%KIWTMT+$!5L6%-7ÿÿ$ÿéÍž"ÿéÐ:>732654&+532654&#"#>327332>7#".'&'#"'z5E6@;+J>01<3fXb[`7UE (!  -**">AVucËœ/7-%6L5!$+TMT0OT r-(SE:>K%&VLZ³!ÿéà(>32#"&547"32654&+532654&"az\p",*rcyoßG?GO6=;+5)01?ˆ…WI(5;-LZ„ÂYsm_-%6L5!$+ÿ&  33##"'53265#53lSMM &NN ÔHþ£mG'#K1\|{db><9 0_I\nUÎn^_mk^bmýž^b2,—}€ž[S9>EþJKeV*TJXÿ& /"32654&"&54632>2&#"#"&'3326=CNNDBLKT\|{db<$> 0_I\nUqT>#KÎn^_mk^bmþ—}€žY#. H%þ¸KeV*TJX_a2,ÿé !326=#53#'#"&54>32#.#"vMb.`‰á,Lln‰$8^;]vV C?UVÿajUB=þàHVš|#HO;'ZR3,kÿã 254''4733".û `4¼ZZ¼47L0“#/(*/‰½þ²NþBŠ(F<+4 ÿè #/2632#4&#"#"&5467&"#>32>54&¤4:;5>`L2 (+<-.=^8)%.4Lb¡E-! ,??Af@’%6O)Zf)‘?.Y)T}ÃmG?3'1gÿÿFÿ3æ  K, ÀFæÜ4&#"#4632&#">32#“C)@NSA::%K8LYSk70aPþße8?E6š0'MBþtFÿ&æÜ%4&#"#4632&#">32#"'53265“C)@NSA: :%K8LY &k70aPþße8?E5š0'MBþmG'ýÙ#5533##5#5­TSPPSKÙiiþ_ÔÔHððHBÿéë 327#"&5•'14 þUF+(Ð 3#3#53#îIIîRR Hþ„HH|ÅÙ"#>32332653#"/#&~/571T 5i'*T"sNFK2þœ %&þÙ]—Ù533##"54>5"«T˜˜T—?*("ÿÚþ‹Mþéq&$™R(Dÿ&ðÙ 3327#"DT& mFüÛ'GDÿqJÙ#"'732654#"57!#3!Yaƒm•5I7)EN“þÜTT‡ cXexg.KC‚K«þ=ÙÍJÿÿFÿñú  P@ ÀFÿ8ú !##"'#"&533265332653úM"K4a,%H4IOT3.3HT3.3HTÈ/*P,$KG‰þ—27P9Iþ—27P9IFÿ&ú*3>32>32#"'532654&#"#4&#"#FM"K4a,%H4IO &3.3HT3.3HT J/*P,$KGþ mG'µ27P9þ·i27P9þ·ÿ& 3>32#4&#"#"'53265lM#Q:LZS:2@N & X70NAþtk/8aPþrmG'Fÿ&@3>32327#"54&#"#FM#Q:L[& :2@NT X70NAþ('GmØ/8aPþßFñ ##3ñmëSlë ýôþc þc$ÿéþ 2#"&6."!26q}np}~M€N)þØN|N•ˆ”••ùRZ[QFNXX$ÿéä "3275&#3#3!5#"&6325!FPPF_&$nöÔÔúþ²7Np}~nN8JÎm¾mbÔb ŽL›L&••%ÿ÷·/%4.#"326=332>%4>2#"'#"&c-EA*‚x3:7,T/3(4ý¸,G|¢{G,$<=!`0.b^`ë:T1 qsIc9!ßß"85H5)JU=('=SL*Fh4ZZÿÿ.ÿ8®È`õÿÿ ÿñ  UM À ÿñÙ 7>53#5#"' TTTM$C( IJgÝý'_;3 ÿ&` 7>53327#"=#"' TTT&  ‰$C( IJgý¨'GmÌ;3Eÿ8A #3>32ATTTM$C( ÃJgþ(Ô_;3Eÿ&A327#"53>32ATT& M$C( ÃJgþ¤'Gmy_;3Tt 3#4 #4&'¨T T""®mm!%%ÿ8. 4&'#54 Ú""T ÈU%%!mmýŠ6 #'##324&+32ÉRCÍgËETø,@![6%‰‰[wHLÝÚÚ 0/#.'›ÿÿ6  ¶ À"ÿ(Ë0332654&/.5462#&#"#"'327#""X5E7C&+N]In¶bXf3<.3PNFucN/& k/7-%" C>IWTMT+$# E:LZL'Gÿ&Ü#"'532654632&#"À &A: :^ý5mG'±8?Eÿ&Ü##"'53265#534632&#"W &FFA: :8DþŸmG'@D-8?E5þÚÿ&!4#"5632327#"5u: :A& 5E?8þ'Gmÿ&ÂÜ &3265&#"4>324632&#"&'#"&\#(0#<"#M/8 31A: :"SGœVLg  *5 e8?E5ý‰ HpIÿÿ´ WÀÿ&þœ#327#"&5#5353þV'14GGS DýÖF+(ODÿéF !#5#"&=#53533533#!326=øK%P:L[IISûSNNþ²:2ANI4,NAxHÔÔÔÔHW/8aP "ÿéF *#".5467#5332>54&'53Ö1?';d>Af9& ?1nÔH5%N4,E'5HÔ×&};54&'7Þ714SI-F&5Hf1?';d+(ÐþU/#1=+.t3&};54ßSNH×9þ܇þÉrB4+Ht &"_6)``KxIJþ‡->5   ÿqî #"'332654+57!5!4YaƒmÚXHHEN“0þ܇ cXexåMJKC€K«IJ4ÿv )4&'#".54>32654+57!5!"3267&,Ya!%nI)</8  '“0þ܇Í##(-G E cX H /2&&*5   €K«IJþM$/åÅ"#632#>54&L9XÙesC8T_OCxSEåh[9fþ¶,A8A/åÅ.#"#&'.54632=H:CO_T8CseÙàJNA8A,þpJf9[håÿÿ/åÅ 4ÅÀ0ÿ+¥å4>32#.#"32673!".500GyLî+_^Wj{€mZ``!þõKwG/d2bjO4îNN¢Œ¿ˆ¡ejþß3Nh`1ÿÿ&ÿéæå&2ûÿ’ÿÿFÔ ™"ÿéà$#"&547&54632'";#"32654&ßnzcrVAp\~^ß3?10)5+;=6OG?œZLV&%KIW|/+$!5L6%-_msYÿé[ *326=#53#'#"&54>32632&#"#.#"vMb.`‰á,Lln‰$8^;c;N :V C?UVÿajUB=þàHVš|#HO;'27E533,kÿÿFè ¤ÿ&ÁÙ!#54>323&'#"&73265&#"LSë/8 31S"SGœVLM#(0#<"#ÙiiüÄ*5  ýÛ HpI* ÿÿ&ÿ7â NÀF| 333FTâ þ@Lÿ&FŠ $"32654&54632&#"##"&54632 ETTEBPOU<9 S9ihx|hgÍp[\onZ^pI9>EýS”‚/åÅ"#6323##5#535>54&L9XÙesC8mmTii_OCxSEåh[9fHððHX,A8A/åÅ.#"3##5#535&'.54632=H:CO_iiTmm8CseÙàJNA8A,XHððHf9[håÿéÙ #"32654&%!!5#"&546323 DTTEBPP'þÉEþ$"O6jz{fl5S!Íp[\on[^o?Jþ‡IE1+™…}—QÍIþ¥[ÿqžÙ*6#"'732654#"57!#5#"&546323!%"32654&äYaƒm•5I7)EN“þßJ"O6jz{fl5S„ý–DTTEBPP cXexg.KC‚K«þ=E1+™…}—QÍJ p[\on[^oÿ ™Ù 7:"32654&"32>54##5!5#"&546323!354632 DTTEBPPÙ &"ISNHþõ"O6jz{fl5S†þÉrB4+HþV#Íp[\on[^oþ»   )6)``E1+™…}—QÍJþ‡->5'þ¢^ÿéœ1732654&/.5462#&#"#!"&5#53533#Öö2H&+N]In¶bXf3<.3PNFvbþõ05GGSVV6.$" C>IWTMT+$# E:LZ+(ŒDDþ ÿ&ïÜ#+#"'5326=#"&5#5353354632&#"#32˜ &s14GGS A: :S ^ý5mG'C+(ŒDY8?Eýª‹þ™ÿèœ7A#327&54632#.#"354632##5"'#"&5#5353"32654þV a.j[mT@4DMNFB4+HSNHP: YM14GGSÌ 7 Dþ™Fi‚œb]7;ob]j->5=6)``*+(ŒDþi   ÿ9àÜ0#"'532654&#"####5354632&#"3>32ßJF &:2@NT“SFFA: :à#Q:LZŒþ58G'¤/8aPþßÈþ8ÈDY8?E5RX70NDÿézÙ(7#332654&/.5462#&#"#"˜TT+ F7C&+N]In¶bXf3<.3PNFucŒ22Ùý¸&5-%! B>IWTMT+$# E:LZD-Ù !!3þÉEþT$ Jþ‡IÙÍIþ¡_ÿÿ-ÿÿ÷Ú/Z*…)™Z*)™wÈh!#5!#!#5!#ªFþâFªFþâFh‰CC߉CCÿ: Ü4&#"563232653##"&5l& C)@NSS%K8LYN'Gmþ(70aP!ý80'MBÿ&cÜ%327#"&=#"&54&#"563232653 : :A%K8LY& C)@NS\5E?8¡0'MBØ'Gmþ(70aP!ÿÿ 0÷Kÿó)™ÿÿ 0øÿó)™ÿÿ |õM)™ÿÿ&Ê{Uÿù)™ÿÿÂpUïpÖfŽøp>=3327#"=#"'776  Y,1 K0C±þz.G„Gÿÿ(Sr ¶\qÖfÿÿßrZ)™ÿÿ;q\)™ÿÿ1¶âÌ ÿÿ1¶²Ì' Ð W÷Àò #5433Àii#<÷xƒ&&4WÉÀÄ 3#5>=#Wii#<Äxƒ&&4WÉÀÄ #"=À<#iÄh4&&ƒxÿÿ•Cíò_<5ÀOC§ò "3"&546§$44ò,,4$#45ý"#>32#5>54&©2%9IEBK,$7>3+Ê6-JKC<%B u¢*%*5ý.#"#5&'.54632ü(/&+3>7$,KBEIg03*%*¢u B%î3#'#–!c&MN&î¯ÿÿ3>ïdM-ÀO3å3#'#t_`?QO@å–``O2å#'373Ò_`?QO@O–``ÿÿ‚LÊ­Qÿÿw.½qÿÿ\P-ävÿÿPçäCdþý¬ÿÂ#53¬HHþýÅÿÿÿt/ÿºqüýÿÿSÿ7$ÿËC=üçÿÿ#ÿ7ôÿËjÿÇüçÿÿgå"/qL"Àqg°å"3g~?"rÿÿzÿÿÒ®_!ñÀÿÿ{Ó±_,ý¿ •B’7533!5„FxþÉÛ··FFÿÿ •B’tM'À nB¦ %##5#53533ByFxyFxçyyFyy çB-!5BþÉ-FFU<Ü 332673#".;T(0; $<4ÜB" ‡@sdÛÌ#5ÛhÌhh=1 2"&546"2654&§,>?V??+$>,+=>+*?>9ÿ3 "&54673327½8L3.F7'H%0Í4*$:,6 - e?Í23273#"&#"#>[X :Jd :-Í%%h&%16ÿÝN\ä3#%3#=q•<q•<ä–––êA:57332>7#"&'JE/# -*-NŒcK›N&r-£_ÿÿU·G™ID0 ÿÿ…?q)™ÿÿ:röO)™ÿÿ1}V)™ÿÿ;q[)™ÿÿ6é5ÿú)™(Æ #!5ÆHþª üàØH(Æ #!5!5ÆHþªV üà3H¥(Æ #!5!ÆHþªV üànHj(Æ #5!5!ÆHþªV üà¥H3(Æ )5!3ÆþbVHHØHÿÿß^3!HHO_ýéHHßf#3!HHOþïfþôIÿÿÿ86ÿÎgüéÿÿQ. &qcqÚÿÿ1ñ.Ù öÿÿ3ÿ7ÿçdM&Àÿÿ.ÿ7ÿçdÿûüùÿÿÿ#.ÿðbÿþýÿÿÿ$/ÿñcÿÿýÿÿ:þþÿÑzÿýüÍÿÿnçkÿÿÿn—'k°ÿkÿÿÿl’'jÿ¶ÿjeÿÿÿ ÿcCÿË|üþÿÿnAÖMA°í3##˜PHíH¥²í#5#5²HPíí¥Hÿÿÿ·°¤šÊ¤Àÿÿÿ¸°¥™È¥À ÿ8Bÿä53!53úHþÉH€d¬¬d ÿ8Bÿä!53BþÉH€H¬dÿ$Mÿí!'&/76?Mþò%33%h +00+!ÿÿþÉPÿšäCþ³ÿÿÿPÿàävþ³ÿÿþÇOÿæåfþ³ÿÿþ¸eÿòÍ|þ³ÿÿþÏwÿá½qþ³þ=us½!5sýʽHHÿÿþÂUÿïÜxþ³ÿÿÿ&dÿŽÌyþ³ÿÿþÌdÿçÌjþ³þä4ÿ}õ#532654&#"'632Û,, %(04F@ 2&$3ÿÿþð1ÿÄzþ³ÿÿþ´O3å}þ×ÿÿþÆOÿåågþ³ÿ1Lÿy#53‡HHLÅÿÿþìLÿÅ&­L­»þ=Nÿ¼ä#'##'¤`<•=`<•ä––––ÿÿþÂUÿï/#yþ³cxþ³ÿÿþÂUÿïÜ xÿþ1Àÿÿÿ)Gÿê ³þ³+Àÿ2AÿŠä 3#5265#ÎX/)-äI+/*ÿ,Aÿ„ä #3"&=|-)/äJ*/+Iÿÿÿ+Aÿƒä³ùÿÿþÉÿ8ÿšÿÌCþ³üèÿÿþþÿ8ÿÏÿÌvþ¢üèþèþßÿµÿÍ3#5#53“HH……3îSHÿÿÿþàÿÎÿθþ¶þ­Àÿ5«G½!#5#ËF̽þîÌÿw¸C‹ +53>54'%Ÿ-I‹+8pT ÿÿÿ ÿ&ÿxÿÕsþ¥ÿ$þäÿ8ÿÒÿÓ53533þäSHSÈHSSHþäÿ8ÿÒÿÓ##5#5.SHS-HSSHþäþàÿÒÿÎ ##5#5353.SHSSH…HSSHSSÿÿþXÿdÿÿªwþMþ}ÿUÿ&- '3#"'53265SS &-šmG'ÿ­ÿ&X- 5327#"=& -y'Gmšÿÿþòÿ[ÿZÿÃyþü÷ÿÿþ“ÿ^ÿ®ÿÆjþzüúÿÿþ¯ÿÿƒÿÔzþrüÐþóþÔÿWÿ´ 3+52=#þód4.77Lg8A&Nÿÿþÿ*ÿˆzþiÿÿþìÿ3ÿ¼{þ³ÿÿþýÿ ÿEÿÒ­ÿÌüÁþÏÿ;ÿáÿÄ!#5##þÏF†F<‰CCþÀÿTÿòÿÎ#"'#"&=3326=3326=3%&'$3,,2"%34$"""""ÿÿþÆÿ8ÿåÿÎgþ³üéÿÿþÆÿ8ÿåÿÎ gÿøÀÿÿþÂÿ8ÿïÿ¿xþ³üãÿÿþÂÿ8ÿïÿ¿ xÿþÀÿÿþ}ÿEÿ·ÿ­|þxüàÿÿþÿgÿ¢ÿ­qþtüðÿÿý§ÿPÿÿÿ‚Bý½ÿÿý§þêÿÿÿ‚'Bý½ÿšBý½ÿÿþ>Ðÿx8|þ9þkÿÿþeèÿw.qþIþqÿÿý9Þÿ‘Òÿ’ŽýCÿóh3#YLýœLhý›ýCÿÃÿóí3#YLýœLíüÖÿÿÿÿÿZÿ²¼þzþØÀÿÿþ–ÿPÿ¨ÿÙÊþwÿÀþ”þÔÿ™ÿÙ!!75#þ”þûÁ}'þûD}}þ‚ÿRÿ´ÿÅ4632632#4&#"#54&#"þ‚3%&'$3,,“%34$þÒ3ÿÓô ''7'7N __ `_ __ _óGHGGHGGÿ!Fÿ‰R5654&547w61%&h%%†", g7 ,  eÿÿý¨MåÓcÿÿþÉQÿšåCþ³ÿÿÿPÿàä¡ÿÿþ¨\ÿâÄ|þ£ÿ÷ÿÿÿ2AÿŠä³ÿÿþXÿäöþ—ÿìÿÿþ¿ÿVÿ[ÿöþ@ÿÿþÏQÿáÚÊÿÿþŒÿ/ÿžÿÙ&Ñü,ÑüÈÿÿþ¸ÿÿÿÖ&ÉHÉ»þòÿÿ‚ÿ£3#5#þò=S]WþSÿÉ#7&#"#>32733273#"ÉC+ :-!%'>1  :J‡4G%16@T%hÿÿþh4ÿ¢‰#yþ0ÿÐ#yþ’½|þcFÿÿþ‘=ÿË,#|þŒ_|þŒÿØÿÿýàÿ ÿÔÿÓG ýÔÿ þ”þÔÿYÿÉ #5'67&'ÿ9 4.8+ A þÔÊ, -19% 5 ÿÿþº!ÿÎîcþžÿÿÿ:Mÿ’ü¼'ÿÿþ¡3ÿÎ #yþ’ÿÏ xÿÝuÀÿÿþPÿÿQÿÛÝÿ~üçÿÿþjÿ#ÿ~ÿð‘þPÿÿþ{ÿ$ÿÿñ’þ`þÿ&ÿãÿ× 57'5%3#'#þýé¼¼K!c&MN&uJ:;¯ÿÿÿ;=ÿ“ì_ÿâ/Àÿÿþ½|ÿ%äyþJþmþäÿRÿ¼37''7'7þÈ/PQ5'./&4QPDT,CFFC,ýüÿÿ¤ÿÐ0Ib2>32#".1#"&54>32>7".#"2654&#"þW   & 2$  $2 &!  *    1   "8   8" \(     &M(&     þ¯"ÿ™ 37#7#þçA%–9?'™ eš_þ³ÿ9NÿÝ267>73"&'.'33232653#"/&²3C+WL**·,"C,317 =A™% *$FKE +); ?ÿÿþ³xNüUÀþÓþû+ÿâ 5!'7'7þÔäE%9YY9%E¨.?3@?3@ÿÿþ¨9ÿdDþ˜BQÿÿþ•:ÿJHþ†CQÿÿþã?ÿULþÊ?Qÿÿþ’:ÿHRþ…CQÿÿþ­:ÿL Xþ•CQÿÿþ´;ÿ^Fþ¨DQÿÿþ£:ÿVXGþšCQÿÿþ¸9ÿXPKþž:Qÿÿþm<ÿu PþS<Qÿÿþá<ÿA UþÇ<QÿÿþÌ:ÿ(AWþÇCQÿÿþ“:ÿIYþ:Qÿÿþ:ÿK[þ—:Qÿÿ1¶âÌYÿ>‹7j B‚ˆ@ˆÿ8ÿØ2>73#"=3å !1JL£*OQO,ÿÿnÿm× ÿÿsPDä¡dlM  3#'#5!#5²Za:SES žUSSSSÿÿå œV¤¾ #5¾h hhÿÿÿØßä&#zÿeÿÿÿØ ä'%…¡ÉÿÿÿØ5ä&'sÿeÿÿÿêÿé"å ÓÿÿÿØDå ÈÿÿÿØÙä'¡É6ÿÿÿéÿø0ý"ãóFÿÿÙ$ÿÿOoÙ%R6Ù!#!6þ|`ä…ý{Ù5ÓÙ)3!ÓýbtöŽÐÙý{;ÿÿZeÙ(ÿÿGÙ=ÿÿS„Ù+&ÿéæå!5!#"&632%"2654&)þ°P½À žÂ ÁþŸtŽèŽ@R1¢ÖÓVÓÔ‚¥þò¥¤„ЦÿÿdÂÙ,ÿÿO’Ù.Ù3#3#tcxhÕÙý'uÿÿKùÙ0ÿÿL†Ù1AcÙ !5!!5!!5!Sýî9þg™IýÞ"†SþsSþaSÿÿ&ÿéæå2P€Ù!#!#!€^þŒ^0‡ýyÙÿÿ[iÙ3(^Ù )55!!!^ýÊìÊþtÊòÈU#RRþñþÙÿÿQÜ7ÿÿ •ß<°Ù%"&5463532##4&'>={¥¥|Q}¤¥{SoVWnþèVon_•}yžQQŸx|–_vVk þc r{ lUYqÿÿ‰Ù;4¶Ù%##5#"&5;332657Æ"^"zvZKWVWKZ‚«««laaþÉQAÉþ7AQ7þŸkb4ÙÝ!%>54&#"!53.546323!»;D.Žqm‡iMþø¤OZ»ŽšÂhT°þîL /MwAqš nc´#LH.¬eŠÌÂi®,Hÿÿ#‰#jÿï½'ÿÿ •‰#j³½2ÿÿ0ÿóGä#–>ÿÿ'ÿöÜä"{BÿÿÿJòê#…Dÿÿ8ÿø+è"çFÿÿ2ÿòèý"`óR0ÿóG(4>353327#"&=&5#"4&#"3260 1S4o3H +%#_BäxRBJFŽHN!CJ9%FRþW E  8Nni[Àf2ÿ:øÜ)4>32#"&'#4&#"32654+53262*Q;_ihžo_;F!VH?4;)qAE¢2*?Gê7RE$dXw%ž_w$úè3?)jþªTJDˆJIÿ: #5&#"'4632 ¼V§ $.'v þìì˜F #7þÐ~$ÿðÙ-74632'5!! #".7";27>54&$v_ ÓŽþó¯   y… =A1ôFRPD/ %RòsŽ¢HHŠ%$/‰$8]ùgO[]]5Rb'ÿöÜ$%#"547&546732#.#";#"267Ü mgÖffpf ch LV;@@..?AHrXˆPB’_`Q?CO'%U/(;(/,(%'&ÿ>¸Î".5467#5!'654&&7L=+‰gàdq§­ED&L" .T6ŠÞBH<@ℎ.A7aE!#ÿJò4&#"#4#"'632632'š.>ŠX  $CaR[Xn{ßÿlLHþ¸6SU.v8ÿø 7327#"&53 .,<@XˆQHE‡<ê !##373êl¬>XXÐrÆ <Î ÒÒÆÿôÚ".#76323267#".' #Õ  6 !$¦0!! z’`') R !0:þJFbþ\<ÿ8à"&'#332676=3#5+6XX 8)*=VP; "üÎÚx##*17jÜýú>%%ÿÿ æ Yÿ>¹Î/%2'654&+".54>7.5467#5!#";#"jI'J#&8Ca1'3"6D, dt¦*@LXRnJd^F*C=^V"!78.H) K9+HFFT0+E@RxDÿÿ$ÿéþRÿüR %27#"&5###5!#$ 0.,ì^F(@@ >0FTþ:ÆFFþ®2ÿ8"4>32#"'#2654."20B>!r‚>D+Gc5Xð>\11410/1=_8% wlm&Gþû\l8Q)*RpR*"ÿJ&4632#4&#"'>54&'.'."Œtc|[JB01(H;/H@0Z -(FI2.9vŽu_@F'L4.B%  -<,n P %p"ÿôN4>32!##"&732654&"",KO,ˆ@qsZ[=IOL˜LMo9RRf{•”|k[lZVprÿüØ "&5#5!#3272I1¤ÄÈ! #CQ3IIþÕ+O 2ÿòè 7327>53#".53Š1S<# XjnEZ.XèbHD<$þº~V:H7F.ÿ8¹ #"&5467;32+#54&+3267yZF*3CiNXy›†n X]OK] –nZŠ$D!d;NiŘzn–¾¾Ohþ•f ÿ,<+"&/#.##56323327<$=a¸hê•   B ƒ™`Ã$È 3&ÅþîhN<ôþšû$*ÿ8l %##5"&53332653luVt‚ZGUVUGZÖllÆÆjn6þæYQ²þNQY$ÿ÷À'%2>54'7#"'#"&54673>=3œ.4(4lP*F$<=!`0.b^`<4Pl3:7,T™"55H/”u"­NFh4ZZj<¸)lIc7 ßÿÿÿÚÿø¿"jÁóFÿÿ2ÿòè¿"jhóRÿÿ$ÿéþè#Lÿÿ2ÿòèè"qRÿÿ$ÿ÷Àè#îV6ÿô-Ú4"34&454>323##".'33265C#ªâ $8$,! CC 1L24N, P>-AI’GSJ—iþ¸ 46_5D# " 3'@*#HAeX8 &8SG+;^@v–4Éå52>32&#"#54.'&4Df>! •PK> '&'@2&`.&-…`3ZQ3^³E$. 9\¶x¾¾ETp_+4ÿÿ ƒå"—ÿ]ºÿÿ4É¡#j„Õ]9ÿ8¹È!463532##5"&73"4&#269ˆŒXzš?nJXzšTa_b^Ø_ae[u™´´—y8^M+¾¾—xSk|oOSkþ„i$ÿ÷À+%2>54'!3>=3%##"'#"&5467#5œ.4(4Nþ§M3:7,T#>#$<=!`0.b^`!>™"55H/€ee€Ic7 ßžF0y6Fh4ZZj(„3Fÿ(  2733#"'5326=&5#7654&# †”™cgjÏ &Æ”h:”ka Tc·}NqºmG'O–³F³c8*ÿï0!>3273327#"&5#7654&#"Z1;O™cgj-#/,6]1=O”h:”%.+º(9_eµ}NF9ÿF.4>32#"'3263"#"&572654."90B>!r‚>D+Gc54)-1'-Dmð>\11410/1=_8% wlm&GR4Rl3[\l8Q)*RpR*ÿÿ&ÿéæåa0ÿô%"4>3"3#ä 1S4CFFBN!CJ9%LVLBJVÿÿP[•&|CرÿÿP[‰&|j´½ÿlÎÙ2+53254+##5!#)J[ 54Rc9Bî]ÇêÅÆWEþÖ,? BBK9þŒ‰PPÃÿÿP9”#jаz0ÿé¥å .#"!!32673!".54>327^W^x lþ’gZ``!þõKwG/0GyLî+÷NN‚sR~“ejþß3Ni`12bjO4îÿÿ0ÿémå6ÿÿdÂÙ,ÿÿ#jÿêÁ,ÿÿÿéªÙ-SþÙ'!##52>=!32#'2>54&+á,F.%“ua 1>M@µ‡{Ch‚_T,^!DNteG¨þÆtY^rR+48FûSÌÙ!!#3!332#'2>54&+áþÐ^]1]Œ|…w` 1>M@¤Lþ´ÙþÅ;þÆuZ\rR+48FûÎÙ2#4+##5!#)J[]Bî]ÇêÅÆWEþÖ;9þŒ‰PPÃÿÿPn”&jª°ÿÿPŠ”#Cé°ÿÿ [ˆ#x¬ŠSÿy…Ù !#5#3!3”Pñ^v^‡‡Ùýy‡ý'ÿÿ‹Ù$þPpÙ%#!!!3 4.+32>p-Y=þ·éþt´] 8'ãã'8Ú$FE+ÙRÔ×.*,þñ-ÿÿPpÙ%P9Ù3#!!­]éþtÙR"ÿy Ù%!!>=!3#5!#5KþúÎE*Â[Pý¸PR5hþÓv ñÙ¥ýqч‡ÑÿÿP[Ù(ö Ù # 333 ##–þânEþåtî]îtþåEvþê]Dþ¼wbþÌ4þÌ4þžþ‰Dþ¼0ÿémå1%2>54&+532654&#"#>32#".'3V8N%`ClX?_YJW^XŒ~x‹i‚(>gA)KN8%X+U;*).TR[.7DMGkwscl-1}9=. #7\<64PŠÙ 33##PX}eXþ‡iÙý¥[ý'VýªÿÿPŠœ#xÆÀPnÙ 3#33 #­]]1oþ§z|þ»ÙþÎ2þ§þ€M!ÿöRÙ!#52>=!#ôþú,F.%Â^‡RDj„aV-^"FPvgG©ý'ÿÿPþÙ0ÿÿPÙ+ýÿÿ.ÿéîå2PÙ!#!##þ‹^1^‡ýyÙý'ÿÿP^Ù3õÿÿ0ÿé¥å&ÿÿQÙ7 [Ù3#733ìqòq¹¸oôåþ…{0-Ù#/;32##5".54>;532>4.#"Þ &CcF3'?6K._.K6?'3FcC& _0H5''5H0_0H5''5H0|7jH6W8( ^^ (8W6Hj7]ý×%JdJ%þ†z%JdJ%ÿÿ‚Ù;ùPÿyÄÙ %33#5!3#^CPýÜ^R‡ýqчÙýy8"Ù#"&53;3#ÅèMX]Lä]]\A)þÅ9tý'PîÙ %33!333ÎÂ^ýb^Â^R‡ý'Ùýy‡Pÿy1Ù)333333#áýo^Â^Â^CPÙýy‡ýy‡ýqÑÙ 3#5!32#'32654&+ûçD¥–ˆ‚dÝÔ@RQAÔ‡RþêxfcRR=@PPÙ %#!33232654&+#p‚dþÆ]¥–ˆþ=Ô@RQAÔm^âcÙþêxf“R=@Phý'ÙPpÙ %#!33232654&+p‚dþÆ]¥–ˆþ=Ô@RQAÔâcÙþêxf“R=@P*ÿéŸå 3267!5!.#"#632# Š`Zgþ‘l x^W^_+îLyG0/GwKþõ! je“~Rs‚MOî4Ojb21`iN3!Pÿé»å#"&'##33>32%"32654&»»Ž•±v^]y«ž¯þ³r|}rq~|ažÚÁ¢þ´ÙþÅ—°Ñ¢þ좡‡£^Ù 463!###"&6;5#">vaI]oþëneqQ7>53"32654&w,oq}np}$F2?)/J1%S(:“FPPFEQOÕF•ˆ”•„L„€U  ( N=m¾mm\anFÔ %4+3265'4&+326'2+y[„„*1.;bb;.DRFE2.TGó¡F›+$Ý,Ž)°P4Q"5!3#5!#573#W0"S@FþnF­Ý¬@÷Ðþ4¸xx¸ t;àÿÿ&ÿéÿHþî 73#'#5#'35£ÀkòjáSájòkÀ ÉÉúþîââââúÉÉ$ÿéÍ#732654&+532654&#"#>2#"'|5E6@;+J>01<3fXb¶nAVucËœ/7-%6L5!$+TMTWIK%&VLZ³Fñ 33##FTëlSëm þcýôþcÿÿFñ»"xvߟFä 73#'#™Ô`ûjáS ÔÔúþîââ ÿö¿ !###52>5lST¬ !2  ýôÀb%F$ 33###Fh‡‡hT‚2‚T þºFýôkþ½Cþ•Fè 3353#5##FTúTTúT ××ýôééÿÿ&ÿéRFç !###F¡TùT ýôÀþ@ÿÿFÿ&Sÿÿ&ÿéäF$˜ !###$tT Lþ@Àÿÿÿ&Ï \ñ&ÿ&;¢&2632#"&'##"&5463253"32654&!"32654&Ø-dflmd1>#S?5egke^1Sƒ@CC@CFFþdCBBC@CB½^˜†•#+þï-&ƒ†™^åÕl¾ll\`nm^_lk]amÿÿÍ [ôFÿˆ$ 33333#5FTùT=F þ@Àþ4¸x0¬ 3;53#5#"&50T"šTT—;V Å÷ýôÉB9Fn %33!333„–TýØT–TLÀýô þ@ÀFÿˆª )333333#dýâT–T–T32#"&'33267#53.#"*m[j}k^pTkAMãà I:4@\\cœ‚•k`~^TMIP;7FÿéÑ#4>32#".5##3%"32654&ú 1W7q}n7W2! ^TTJFPPFEQO51D8'•ˆ”&8H>é ×™m¾mm\anÙ 4>;#5##7.7;5#"F!@,øTEËgÍCR[[‰‰*1w/0ýôÚÚÝL=F›+$ÿÿ&ÿéÿä&œCrÿÿ&ÿéÿÍ&œjyÿ]Ù'4&#"##53533#>32#"'5>5²B*BKSTTS«« *;#KZ7PP 5{\70bNþíT@EE@Ÿ!JDþì?k@#(|\ÿÿF|È"jäš&ÿéä%#3273#"&54632#.#"3_âMAkTp^k}j[mT@4:I ßèT^~`k•‚œb]7;PIÿÿ$ÿéÍVÿÿFšÙLÿÿÿð Å"j×ùóÿÿÿîÿ&™ÙM  72>=!32+##%#32654&SqmkaFö¬'B8||:81P,‹ŒyÖCXEVÀaŒ6êž,+(F1 !#5##335332'#32654&ŠöúTTúTqmkbk||;72éé ××ÖBXEWêž.))Ù4&#"##53533#>32#²B*BKSTTS«« *;#KZS\70bNþíT@EE@Ÿ!JDþ‚ÿÿFäÄ"jAà¡ÿÿFñÉ#CšÿåŸÿÿÿ&Ï»"xDß\ñFÿˆè !#5#333:F®TúTxx þ@ÀýôŸÙ!#&53>53653#&'6fKpdFG-*6dBKPRd)EB&f[38~‚Ù¹þê‰TW—^´ë‘•´oß¾@˜Ó½¤ 3#&3>53653#&'ü^ŽRk31RkdR‡^C#"á+Áïp¹i£ïÛÕþâîjwyÿÿ<¾Ù5ÿÿ*ÿ8l U0ÿéðå #"&632.#"!26ðÀ žÂ Á^‹pmýþ ‹ÔŒa¢ÖÓVÓÔ}•–|Fu‹Œ&ÿé 2#"&6."!26q}np}~M€N)þØN|N•ˆ”••ùRZ[QFNXXÿÿŸÔ'Õ{|'Ö*ëÇÿÿ© 'ÕúÿÈ'Ö©7ÈÿÿŸ„'HÁªÇÿÿ¤Ù'HAÿÿÈÿ$À''#7'57'573Àœ@‰87;ˆœ?ˆœK7MCÉC²ºBÈBëôþ„cÿì 53353#5#þ„HØHHØc’C’BÿÿþþU+ܱ<ÿÿÿ`ÿª¸‡´üÆäÀ@ÿÿÿ fÿ°¿‡³ð4@Àý×Cé"#46323".þ}' @[QJFN (N>~— '$I]!)!; ÿÿýÿ† Y&F'FDÿy'Fþºÿy'FÍþ3'FFüî'Füf'Fþ»üíFþ3þ3üýÿUk "/<IT_3#5265##5463"37'654''&5477#"'7327''7632&#"#"&5335532#4&#þüX/)-YX/)-É?3 ýà?3 >4"   >4" ýI+/*\I+/*JI+/*\I+/*üø>4" ž>4" ý¡?3 !?3 þX/)-ZX/)-PÿyÍœ 332673#".333#5##Ö;U(0; $<4‡X}eCPKþ‡iœB" ‡@ý¥[ýqчVýªFÿˆ-» 333#5##332673#".FTël7#!#53533#32&]vaþ·YY]\\´öÏ1Mû+4^rFxxF|è %4+3267#!#53533#32[˜˜)2[UFþù>>THHvph™N›* CS~FHHFKLP^Ù 654&+327'7+#!2ÞKCÂÂ62L$0å]-lu<:2°!6a@TM;lhys7U^po¸o@2ƒ?2CNþïæO^š„P993#!53!­]Œ]þtÙ`²Fmu353##FÓTÓT iµþ@ >Ù 3###535!!²jj]KKéþtíFþY§FìR ~ 5!#3###5H6âDDT>HÄLxFþþFPÿR9Ù3#!!32+532654&+­]éþt¬\]]\40+55+¨ÙR²fZþýZfR/-'-/Fÿq« 26=4&#"#!#>32+ì)C$*=3T'ÓA9I>YLF079.[Vd L¹0'IFÏBM ÿyÙ%3#5### 333?@Pþâ]þânEþáxî]îxþáJчDþ¼Dþ¼wbþÌ4þÌ4þžÿˆ* %3#5#%#5# 35373àJF!þþSþþg0þðkÞSÞkþð@¸xØØØØÞÞÞÞþü*ÿ3gå:%#"'53254&'.'332>54&+532654&#"#>32g€v6L80%H!u„X+U;8N%`ClX?_YJW^XŒ~x‹i‚È\x "7*4 - 6% €t64*).TR[.7DMGkwscl-1"ÿ3Ë2732654&+532654&#"#>2#"'53254&'&'z5E6@;+J>01<3fXb¶nAV_S6L80%H!£œ/7-%6L5!$+TMTWIK%&VDX%5*4 - 6&¢PÿynÙ%3#5##33%IP,þ»]]1oþ§JчMþ³ÙþÎ2þ§Fÿˆä %3#5#'#373¤@F$áSSÔ`û@¸xââ ÔÔúP™Ù'#375373#%#Ý0]]0Fõxþ“vtþþF)þ¼ÙþÅ*‰MÕþÆRþ³Þ?F 7'#375373#'#Ê1SS1FgkÒòg‹F¯)Ø Þ1k%gÉqÒt* ¢Ù3#3 ###5353¼``kxþdŸnþˆ]UU]oF‹;þžþ‰Dþ¼)Fjý 533#73 #%##5ASGGÞkþð0gþþS<Þ..FjÞþüþøØØ˜F>Ù #5!3 ##ûçDkxþdŸnþˆ]‡RþÅ;þžþ‰Dþ¼ˆ #5!73 #%#̸ Þkþð0gþþSÀLÞÞþüþøØØPÿyÄÙ%3#5#!#3!3CPQþ‹^]v^JчLþ´ÙþÅ;Fÿˆ$ %3#5#5##3353è32+9)C$*=3TùT¡A9I>YLF079.[VdÀþ@ þû0'IFÏBM0ÿéå2?"&54>3"327.54>322>5#"'7654&#"c…®#KŠ^~{mm 1:1JD_cz  J-T741?Ls6/%+?ÆœP‹yFR¡Œ…¦0ƒHZ…B u¼i (!*wK·nT-fK8y&ÿép%."&5463"3263&54632327#"'7654#"vtŽ}KiFL ?[4AS< ;: KA6.-):7$“ˆxŸM^fuaDegjeOGC$&Dh+hvA9d0ÿ3¥å,#"'53254&'.54>32#.#"32673ÑL80%H!Hm:$ 0GyLî+_^Wj{€mZ`` é5o*4 - 6&CUlL"2bjO4îNN¢Œ‰¡ejþò$&ÿ3ä'#"'53254&'.54632#.#"3273jL80%H#Xfj[mT@4DMNEkT\N7o*4 - 6&‘q‚œb]7;ob]j~Vh $ÿyQÙ %3#5##5!#bCPPð<ïJч‡RRÿˆƒ 73#5##5!#ó32'Y8?R01f#TvZj~PN3*$+: " c0L0# .MSW4K%iV`‰xU>9A-'!%+m€&=0G"/ÿ;rõ <.#"#>3 !32673#5.=.54632#4&"3 &C-Vu_ 3>Z4,ýè{jW^_(ØHAg>)fgM?7AP.C0Ò!-9"f[ :17'þ›Œ¢MOá ¯±:Ne\.uSN];7 4*6B$ÿ;›/6%3273#5.'.54632#&#";>32%!4&#"01f#TbJH[lPN3*$+: " c0L0# þ€'X9?Rê4K%iL^ °° †nU>9A-'!%+m€&=0G"DMSWP®Ù#®^Ùý'Ùÿÿ ˆ#x¬}ÿÿîº#xÔÿÞPÿRÙ2+5326=4&+#33«\]]\40+55+ú]]kxþdwfZ¥ZfR/-É-/þÛÙþÅ;þžFÿqâ %4&+#37372+5265qC)lSSÞkþðMLYYL)CY70À ÞÞþüMBzBMI07 ÿy˜Ù!#52>=!3#5#óþú,F.%ÂGPU‡RDj„aV-^"FPvgG©ýqчÿˆô !3#5###52>5dS=FK¬ !2  þ4¸xÀ0)CXDG.PAAqQDPÿRÙ!!#3!3+5326#þ‹^]v^^\40+5Lþ´ÙþÅ;ý9ZfR/Fÿqè 26=##3353+)*AúTTúTYLF07Èé ××ýôBMPÿyÈÙ!#3!33#5#$þŠ^]w]GPTLþ´ÙþÅ;ýqчFÿˆ% 33533#5#5##FTúT=FKúT ××þ4¸xéé<ÿy&Ù!#535#"&53;3ÖPCÔ\]]5+Ð]‡ÑºfZþÙ-/ƒý'0ÿˆ¬ !#535#"&=3;3aF=AZTDTx¸LC¾»FýôPÿyEÙ!##333#5#ÙbÏXØÔGPOcýÙý…{ýqчcFÿˆa 333#5###Fh‡‡h=FK‚2‚T þºFþ4¸xkþ½Cþ•ÿÿP®Ùÿÿ‹¨#x¬Ìwÿÿ&ÿéÞ"xn—ÿÿ‹‰#j®½wÿÿ&ÿé¿"jpó— ¶Ù%!#!!!!!!#ÔþóUg+nþ`þ …þdŠÖÖÙRéRúR(_þ¡"ÿéM.:A%3273#"'&5#"&5467>=4#"#632>3226=%!4&#"Ë01e%TvYˆ88e;L\s‘3$vp TÊ€/\6;W1ýFZgG86&P@?Rê4K%iUak:4TGQN N]ªR&,&9VL0¸Qe  ,('-üGYWÿÿP[¨#x¦Ì|ÿÿ&ÿéÿÞ"xrœ/ÿé¥å #7326?# !654&#"#632› &C-Vui/GwKþÔ{jW^_+îLyG0ü!-9"f[h1`iN3eŒ¢MOî4Ojbÿÿ ÿéùœÀÿÿ/ÿ饉#jµ½'ÿÿ ÿéù¿"jpó(ÿÿ ‰#j&½}ÿÿî¿#jÜÿóÿÿ0ÿém‰#j®½~ÿÿ$ÿéÍ¿"jJóžÿÿ ÿéEÙyÿÿ(ÿq 2ÿÿPŠg#iǪÿÿFñ"ivàŸÿÿPЉ#jɽÿÿFñ¿"jxóŸÿÿ.ÿéî‰#jì½…ÿÿ&ÿé¿"jwó¥ÿÿ0ÿéðåËÿÿ&ÿéÌÿÿ0ÿéð‰#jâ½7ÿÿ&ÿé¿"jmó8ÿÿ*ÿ韉#jµ½”ÿÿ$ÿéâ¿"jQó´ÿÿ [g#ižªŠÿÿÿ&Ï"iTàªÿÿ [‰#j ½Šÿÿÿ&Ï¿"jVóªÿÿ [·#}áÓŠÿÿÿ&ëí#} ªÿÿ8"‰#j¡½Žÿÿ0¬¿"jXó®Pÿy9Ù 73#5#!!­CPPéþtJчÙRFÿˆ| !#3#5#F6â=FK Lþ€¸xÿÿP‰#j½’ÿÿFl¿#j¶ÿó²0ÿémå1%2>=3#".547&54632#.#";#"G;U+X%8NK)Ag>(‚i‹x~ŒX^WJY_?XlC`%N;46<\7# .=9}1-lcswkGMD7.[RT.)*"ÿéË#%3#"&547&5462#&#";#"326sXËcuVAn¶bXf3<10>J+;@6E4œ³ZLV&%KIWTMT+$!5L6%-7ÿRIÙ!#52>=!+53265ëþú,F.%Â^\40+5‡RDj„aV-^"FPvgG©ý'R\R/-ÿq· !+5265##52>5dSYL47¬ !2  ýôBMI(Àb%ÿÿ&ÿÅæå4ÿÿ$ÿ&ùT ÿÿœÙ:ûÿÿà ZÿPnÙ3#37'373#'#­]]±ru2Ko}hu(§z|þ»Ùþβ](K}U §þ€MFä 7'373#'#'#™qXu.`Z`u ljáS ÔqH.YOlþîââ Fÿ×ÐÌ%2653'#"&53YrO_W;[ ˆ1¡z^&:Ipvý¬]De$$œžžþc#6"(FyÖ2#54.#"!!#4>aRp=_'O=1D&Ñþ/_&>eÖ-XlIRQ:LA)LE8]–œ;ZR4<ÿÿÐÖ&%##5#".54>3234&#";Ðk_×?_1:kLBd9# nË^K5J*»´†‡‡/@U8:MZ5$*:4þàTSq=RR_ #K:rO_ 8mÙ+VmL°^8HC"pvQR/F^<+FÿöyÝ%26=3".53!!YsN_%=dDSr=_Ñþ/ %:LovQQ9XR6!+XlL¬˜]· 6"*2Ûß.32#4&'!#5332>54.#"3!54>32(4+{…S!$þYZZ ;[O:,GF"Y¼þåEƒ]E}YÕ:hH=! ƒ3·7,BvI=Y-siQLud65}F Ñ %#33#@ú`úúOOÑéMþ´FyÙ#54.'"!!4>32y_'O=9I& ÕýÍ&>eDRp=ŸŒ9KBAM9þ¹WŸ;ZR4-WlFÿþØ 3"2=#".546;54&'#"#4>;23#ÎE.4Y™_5pQ8Q-Wx´?U³,1_.KL)¿i„66p8^U8‰›¢%AC''>7$iBAE:-ýþ :U+q\KNAÿö|Î%"&=4673533#2675#"mjƒ€m\c`îEH–AEÃ[po^~\oÀÀKþ~:Où=Qk‰FxÜ4.#"#3>32#%I8Jg ^b y/Ts>^8MA45%:þâÜÖ"-ZlKGF^Ì333F_¹Ìý’^FÿôÓ%2>=3#".=##33$#-+_ðTp9k__Ë %II,`KàáþÆ,YjL‘þ@ÓÃá9KA #ÿüú".3!2.#'#"&54>7'"=4&#"26v\Ÿ^$ A~'‰³Á8fC4Qþkpš£k`FyÝ%".532>=3#5dTr>^$G2.C) _a \Ÿ,XmLÿ)4C'!">.)LýØ×$ÿ¶4Õ2&'"#.'%6õ,%'þñ€ /þ†t-Õg.þ¸°£0" ª¸82ÿÖOØ/8"'54632&'"&54672>=4."327&KD[_otŽeV I/(9OFA:$55?U)2#š5 2*WG=BXЇo?c°< ( "''K*>C+ (¢Y,+D%þ0#9A|Ø23#4&'"#546.jƒaÀ=QCK_‚Øq\þ@K@F3&'7672''"jý¾+;?)/<  ?†BwC,@<+XA‚ 13/ `µy^,G  9=C5/2f€· †(L_><ÿöÙÙ%2>53#".53\8J%Çj>qSRp=_NK BL7©]þµMmV*-XlI¨þXvo-ÿô&Ø4#"&5332>54.+53254&#"#4>32»)B’ny€](2 )##!5-èç…X45G`.[?5T2! ‚cOds{S!35!-= Ms:35,77"&31y ÿ÷×Ù".'#53326=3¦o=šù&9%sN_< 'UmQJ^þX!6")ov••IjY(ÿô,ã467'5'"2>=3#".5(nRŒ¦„ôXK*=)`Žq;_8%Ms”TaSþ[R[ F2@FYŠ%7A3FyÙ#4.'"#4>32y_'O=9I% ^&>eDRp=Ÿþb9KBAL:þcž;ZR4-WlBÿòGØ#%5>=4.'"547632G-JT-—þnƒŒ61!GW_@Ks>c5$ ‚32t_,+'a^&>eDRp=ŸþbBV0 þZ¥æ*+;ZR4-Wl-Êß9674.#" 632#4&'!#5332654.#&'54>32 )*HL+0L, _¢(4+{…S!$þYZZDk>gI)n)>iB2K?:UH?\."3A5]thH=! ƒ4¸793'4Y#GP<(%7FÄÙ3##4.'"#4>32yKN\'O=9I% ^&>eDRp=Ÿ¥Q¨9KBAL:þcž;ZR4-WlFÿôyÌ%2653#"&53YrO_:sT¡z^$GIpvþbFh\0œžžþc(3E)AÎÙ %".=332>=33#5_Tr>^ &:&.C) _Z¼ \Ÿ,XmLed !9)!">.)üý†^×$-ÿôgØ.%4.'4632#.'"#".53326 0M^`O6‘kHl4[VRJZ2Oa`O2˜qFnB+YÆHiÂ(3'O9\i(5D&C>75$0)O7\z 2D> Ÿ?FyÙ#54.'"#4>32y_'O=9I% ^&>eDRp=Ÿyx9KBAL:þcž;ZR4-Wl<ÿô9Ø(34>32#"&5332>54.#"'67&62654.#"O.bFêX)FsqŒ]WI)-"#/$h#jJU[RxP1;!: 9<$¸e% kNb}w`?M6#%95A ž`@79(3FYÓ33##F_´´_ÓøPþu-çÕ'-%.54>7532#3674&'\<^E42D]=^;\L8!9@H4^,=/"Ð^Ëob0,?tIGp>,77 (?vL54.ÚÀ–™¼¼›–¾þ­ =E2"†n)OM0!3C=e¤ÍÏš®ÌÌz '?pI~˜5;5#"#".533'".546;32C/,..--þYm")fl…Ac7# ]§-48#ih_.j~0D þ’?+hG’þG_{$4-mp ;)X=ÙpbÿÿOC§ò_5é›Ó 53'65=^35mfP9G"NL­Î73X7iL‚‚A2Ú>32327#"&#" 6=,0../8%x"0705ÿÿPçäC L14>32#"533254#"# #E/:C4*U7%Hn721?/,3a)7e*=3Ä'?3! TJQÐ=2TP7Aÿö !%2653#5#"'#"5332>53(E;XOT4t=c¡X$8()X*B_ZýõI$0[[®hþµ?@ A.1þ«9<Fÿ8ë%#54.#"!!#3632ëX &ŠKþµXO323##4'"#3” !BLddXNGEXS¼   D>þª>È6\_Kþß AÿõêÑ%2=3#5#".57!!ŠWO:k$9% XQþ¯/A«aþ³JU'!1îBÕDG#ÿ8;7"&54632533#2674&#"ìWrqf7GRc¸1ÖHC:CACEA–muœ+6ýg;LTitKVtrFÿ‡MÑ %'5#33#&L”V±±JÃwÑþBþ¹Aÿ8æ"!!3632#4.#ŠIþ_O323#2=#"aEBHYB=>:(? VNT%B^+)(¦PH $©G^JC>XA79&7.ýùÔA,"$81P<£e@4(I#ÿý9Þ46;533##".2>=#"#mbŒYbb}_1O. à'4 z… h—ÒÒDëfz%9KE¨"FQ;‘½ÆFÿ8ìÌ"#3632#4&'*-XX>]dOX4Ç"H3þ”þÿGhaþ·I?>Fÿ8 #3ºX9ÔýeFÿ8ÚÉ%253#5#".5'##33øŠXO9l1D$–XXï+?«"ýóJV%D7-àý}‘½þ¾BF#ÿøì$#"&54637&'4734.#"32"Óe}~P=U3;^’+ZJBIyÄ\LþêšvuŽ*C=64(2@D»8I1ce[mFÿ8íÑ%2>53#"&'3 *-XX=_fKXG"H3ý, Eia ýô~FìÌ"#3632#4&'*-XX>]dOX4Ç"H3þäÌþÿGhaþ·I?>#ÿòÓà&42#5#"&54>74.'47332>54&#"þŽ  KVM D9dx1HJ>@D)H‚EF*: H9=R™- ƒ_þì?3œv4bH;0 -. þPUs.J8Un}Aÿ8.23#4'"#3>8)=d¹QwXRB*)ýç?2\Šþà W$,ûÛ747'767!%4&',¡@1>fh1'•³þ:eb ()#ÖØ1@2{T0'žÆþÿF]×,ITƒ=AÿöÍè-4.54>;#"#5#"&'332>7u+3+-,MT6**T) !!AQX$*,: ´6&@&$D%&+9þO8G6™þ-+2*ÿìÿ8³ 2>53#"'7& X9I*{ !ýâ^X KFÿöÎé%273#5#"&54>;"ÿ_XPWOAQ%M3A_@1?‡FýôS]F4¼9B-=7>#3(3.+53(E;XOT4t=c¡X(()X*B_Zý,$0[[®hþµ%) A.1þ«9<&ÿ7Ï#5;#"54>54.54>">54&ïA].Ÿ7*k‚Æ…%+%!0/!))4 9/%%(9.GB#šŒ," "?H0#2-$+L4.G) JB@!7(*@)79R&ERAè72>4&#"#36323#ý GD:4ŠXOÌ%2>533#"&'3*-XV®=_fKXG"H3Úü¤8 EiaGþ¹~Aÿó8&%253632#4.#"#5#"&53‰U.þ¹&/ ±þäLXpaHþÚSTAÿ8æ"#3632#4.#ŠXO5#"&"32654.#wj\;Q "1J/0<'UA1)89Wiuå5W.-8V-/sœJ?þ:)>*/ ;),.;1-D–?`f;V*ai7R+F 3#›~Ó þ6B Aÿ88Ó)%2673632#4.#"##"&53M;T32'"254&umQ15þËVddQ E;%HG+ä4LE:@g}A¨BLLBFA47kvU_Hf±V^#ÿô %".54>32"32>54.+NL. 1C>!m†"1E; 1/]<2/01 9pM>b;&wDh:$ Û+U9ka-U98S+*ÿ8oÕ#+2"&54>;32##5#".533332654#'35"Ia!=I/>=Yl*:7-W/(9/!N W%DDã5638±PC*; ߆i<_9%ÇÇ7#Jnþ’lS¯–-%!Fÿø Ó".53326=33#5Ø+> V%*GHVO£>-# `ýÈ-+KD’þàBR$Z¾5353Zddd¢eeþ^dd ¦&27"':'0AU+Y  "ÿÿ ÿPÿÄ&­ƒ­ÿÿfÿÊÿÄ'­ÿ]&­§ƒ&­ê&­zƒ­zÿÿnÿ§ÿÄ&©W°Ÿÿÿ€ÿ¯ÿÄ&±®&­_Š­_ ÿ}PÿÄ3# GGÿœ•¼3>Wd üà€ÆÇ3#GGÇGÿÿF€Ç¹ýÇÿÿnÖ ÿÿŠ€Ñǹÿ :FX##5467'36=3>Q;”fä&,WP<”fäcW¿D‚'ÒE 'W/H†(Òþ»Je–:6X4&+5323!5!•ao‹‘Qv>Jþ[sCVL(CJ)þÒLL±X%#73'.#52#B¯uÏQ3G36TC82X¬¬Ë§2C L,V9þ…&X#!5!ÌWþ±ù ýô LL?:X #.'#53@{lWAZùWXamþ†tQ: Lý¨wþ‰>•X33>WXý¨'(X##5!ÕWW ýô LL?;X 4&+#!2#äaJ£W\ŸWt=[ýôX}aþ†=:X%26=4&#"5632#"&53?Y Rzdœ[ƒ„ZzþŒ5c:‘X3:WWXþé#&ÿ8ÚX 2#4&+5ài‘WaJ²X…Yý¾7>=!53!!'.2W%,4 þ[W¥¿5V+, *bD?Rn(*@5á•?;X 2!4&+w¬þ¥xT‚X_þ†Xýô+@Uþ@0:X4&+##532!53ãuWA:X:Nç{¨þÖÓwATýô L`þ‰L>ÿ8•X3>WÈ üà3FX 2!534&#GqŽþí¼RVX€^þ†L(>Z=9X  "&5!24&+3265¨Ú‘t‡WWT£WPL[ƒ[zvhœrJNþØ>ZY?$ÿÉX737>737ÍxYs# W +C:þÖCþ  &!Xþ¢5:9'LO9ÿ8 X4&+;#"=32#´N]y,@"(½×~}WtTD1L“Òský¾?X*2+532>=4.+;'.=ôAj=*(GqAµ¯753å [UWÄc¥#W¾Kcþ/ê6þü +“3X!5!3>=3 f<«þ&Fþ²d¥0-W¾@jþóL þý4'“>ÿ8&X#53>7!5!#&l|>7$5#þoèþoWÿlbL)L®ýŽr%ïX 2#4&+5ôu†WO\ÈXuiþ†tNJL<ÐX6753+;2653#.53öbWpFd x>WB†W¦{R}¤W,YÏÓG^8\nLRþ©X¦¤ZWþÔ#{X4+#5265#5!2#$«ityMI<y‚Wt˜þÔukLDM/Lqmþ†>jX!3!3XþÔXXý¨Xý¨<_X3354.'33##:D! U ;«Ü!,‰kÍWHV,,Ÿ54'¾*Œ½ S*IC25^H7Z,‰MuGÿ¸«)5!5!5!ýžþÜ‚ZùXÿ¸ÿa #"&547'!5!73#".5'2632 tþm¦þûM ¯8#&'f ²Z–-þ=Z #}ÿ¸ÿa%#"&547'!537373#""&5'2>33 tþmÔb(˜þûM ¯ 6?'f #²Zšš–-þ=Z#} kÿqÙ­#532!5!4654&#ñyyB\oFþ’(T’Sé 1)þ×Z a Q/kÙ­2!5!4654&#¯\oFþ’(T’­ 1)þ×Z a Q/mÿ»…­".5463##'2654&#"2>+_UdYƒ /\&44*&>9'X<_„þ”,EX!gOI14XY+6Ld« !"&54632"3264@bz|`ay{1bNQ43J~WZ|}Y[zQK/2KHb±ÿV[s.54632'>K"2X ): 3€_2@(ÏHdfˆÿ¸O"!#'#'!53547O$JzþÐøÃÖppssZ½Ã\rÁÿ¸ÿ_ª '!5!73#ª¯_þ´þðJô.¦Dš¡Z–,þ>Z_ÿ¸ÿ_ª '!5!73ª¯_þ´þðJôš¡Z–,þ>ÿ¸À%'!5!5Àjþie£O`Z·Áÿ²ÿSõ #/;U2#"&5462#"&54632#"&546'2#"&5462654&#"".546335'##Þ" ! K" ! Û" ! K" ! h&44*&>9.2>*_Ud†£j¸[ƒ /> ! "² ! " ! "Œ ! "ýNI14XY+6LO)V;_„þ°·Á?ObD”,EX!gaÿ(%Û#654#"%632×Z\@Dt€aþþE\I;@Ø•WHO]qZU´;I@nÿ¸p˜)5!7pýHfþUJ³ZûCýÍkÿv…« )##5!5#…þ‘=S½ØOŸ^ŠÝXþ¯ùùkþ§“?ksµ'þ¿<žeýÈ$7ÿ¸ÿþ±¨%22632#"&'!5!&54254&#"">545):5-AASXDfmþÉ(hj7&$ "&/.(# ¨#xOaI8UZ-_Âþ¨Y+M Y :1 0#`n§ÿ2±¨"6E2632#"&+"''7.'&54676>54&#"3">=4&5):5-AAWT<  "dHš*h "  7&$ "¹&/.(# 1¨#xO_J.†2´ H+".1`þ¨ +M Y :1 0#`(2ÿ¸¤%#"&'!5%277327¤kF3C$þ€&8,ÜA¼(E,71D1Z)m+þÀ>CKÿ¸@ %"&546?!5!'7327SdVF9Å?ýœ >"pA0(F)åOL8F3ýÀZ‘ó!."$ÿ¸@ #"'!!32654'./;Vd%>  ýœ?Åþé)F(0J""€LO‘Z@3*°$"$þ“‚#!5!".54735'#"&'iþ)Œ‚•t6/¢¢i ¬#% W||W þ“Z8V|9_ SI´Â>O] "J?<9!ÿ¸&« 3"&'#53!'5#ó@ÎàŽFý5AdGþUdïïkÙ`#532!5!4654&#{{n\oFþ’(T’R³ 1)þ×Z a Q/ÿ¸…«!#"'!5!'#5!3…Í/þ\° ÈÁ  Ã;;Z÷ZY÷cÿökë%"#"&54>732632&\ n69KN(Gþ¯n*i :((/C9E¢e*þlSˆÀJ*+99&ÎTŒ''7'77''7' &%Y(,$"5'=d+jA!5þϽÿ77''7'77m &$Y(+#"5(>ƒ+jA!5,þ÷Oé3#3#,####s–ò–õ*à/'ÂK7K½ÍÍþü¸ÿÚ/'šK7KqÍã5ø 2#"&54'2#"&546©.! !n! "!¤ ! ~ ! "õ*à '7''7'7Œ8!8 8K K7®^_`‚]_Íþü¸ÿÚ 77'7!9 8 8K K7ª^_`‚]_Üÿ•ÿµ3#'3#r##–##K–––}þöšÿÀ/'|KiK@K©L[Ê 535#53#3©HH²IIL"< <" ÿDÒÿ 535#53#3 HH²II¼"< <"ÿOvÿ¾ 2#"&546>" ! B ! "«6{ 2"&546/537ù$•/ƒ++•U y!;9ýÿÍÿÛ 2#"&467#'7yi.ƒŒ++-$ w";8jvÙ 2#"&546>" ! Ù ! "ÿfqÿÃ#53qbbš]jvÙ 2#"&546>" ! Ù ! "ÿOvÿ¾ 2#"&546>" ! B ! " çx 2#"&5472#"&546).! !7" ! V ! Ì ! "þ±wÿÊ 2#"&54672#"&546?" ! ! "!à ! "ª ! "§Ú #2#"&54632#"&546'2#"&546Þ" ! Û" ! K" ! t ! " ! "Œ ! "§þÉÚÿÊ !4632#"&74632#"&2#"&546§"! Ä"! ," ! n! 0"! 0"E ! "ª€Ø %ªþæ¾N,`¨ÿHÚÿâ%º þâRHf§7Ô!#7777''7''7''7''7'²$"$$#" ï ; ; ;> ? ? @ @ ( D C C C B @ B A ÕV¥  )3533##5#6#"&542#"&2#"7#"432ÕV'SR)UÁ, …, ,  ÌOO%QQg, z- ,ÿÿþÔJ„%ÿÀþÔJ„'72673#"&'3&IDI+FIoKLnG*!AICI¬-6N]_L+ÿ>ÿíM'7[TZù\T\ÿÿ?)îð'&ýŒ&þ£ÿÿ¾XQ23275#5354&#"#"&=3326323##"#"'"&'73254&#"'254'"'4>8P9T"/hm! o(8A]5DLGJ)J¤±;.)5PC*,HG5; 3IeS32ß: hVJ,œ/eE.;-)5PC*,7AHI3;7\):Q9W@ ÊIIýã ™A*(ÿÿ<e@23275#5!####"#"'#".'73254&#"'22674'"'4>å32.'"'46322674&5XN4*""&R* XN4"ÂþÓÐZêH39 "0Œd-'D",™,5)NhkM62 ;$F_þvE] `IIªM ; ,R?8"-[ 8+ÿùFe+4&'!5!##".'72654&+'326¶ þ~Fr+7,/hK(N<9'!?*Ed072D0aHDE­EIIC2A(U1OZ';PIL+&d…d3&4LIÿù$e=2'>54&'"#".'72654&+'32654&'!5!!6{325!5!!674'432"ó)::PCJ7(“Jþì,b %’-2š VFþ5™þ|{F7 %,?>:R71C *?îÔŸ;˜oN8DFIïIIæ4 J)!-d$Aÿˆe>.54632675!5!#327#"&54>54&#"#54&#"sh2-AuX@Q+Kþ_–89'77'*(9';DFd'77'7%&4J2,)@„@¬SDa73cIIf J20Q4+'!=)M;%;**>& )/"FU >ÿÿÿ{±?'gB3ÿ{±X72674'%#5!54&#"#"&=3326323#'>75##'& þï*J# m$75##'' þï*±%U<1ÏY7 M÷7IIÒF3 Ãþëî( @=ÿ{±Ž#2674'%#5!#'>75##'#'7' þï*±%U<1ÏY7 ‚Kìå;R:3(!/f# r&;A`7DRMGLK(.dF.;%8?Q=2-6BGN/;6\eU:A* ÊI1"!0'M57 TJýæýä ™ûMMHMI(;K:.)6PD*,6AHI3:6[eO@A*&ÊIî:þØJýåýã ™]m #)<'P:3 <7.CI, 0+ÿÿW¥D23275#53%7'73####"#"'#".'73254&#"'22674'"'4>:S9T"/hüþ×1Õd?‰UMGLJ)+`I1;r[SC*,7@HG5;6\eY6A*&ÊI™6„Ñ$þÀJýæýä ™8MN#ÄP;2 <50CI, 0+ÿøíe<7267!5!!632'>74&#"#5#"&54>32."#"Ø%Hþ¥íþ·9I8]yFT.#7IH+@m"L2 % #/>´(  II²P[9XŠ0m1!,/' þþ¦$`D'O:P4)4-ÿø eA%#".573275#5!##4>32&'"3275!#'32675#"&{"•;9eE9" < 2'Û HIþþ#*  =L($D)þª0/$8X2(Š94D:Pq7)@PLD%$."-ŽIIýÜX1F: 7Λ&3::%:(3.Dÿ÷ e#".54735#5!'#Õ E.(; GH¦ :DžIIýÜ$ÿøNe).547#5!##5#".54547"327!;…"6ENIIoW2=*£(2.*Vxþæ*IM*^I0%IIýܼG 9&6-$P'(/LÿúŠe/346;5!5!##32>2#".573254#""&#53½1Áþ>Š€û6.>.,"9="4lRB$34P_-q H6yÍ__y"!`IIª1= I 4L(6MQ7."FX7p"…]ÿøle%2675!5!##5"&547#5!#8e þ$lGIt5@NEªiY&;,º`:ÈIIýÜÝEFb-#ü46 uIIýÜg)9PCHnX%*-g'ÿi´e0C%"#".546;5!5!##5#"'.'"'46322674&7##"3>3232C YN4"ÂþÓ´HI7‹T&-'D",™,5)NέêH 7. '&)ÞE] `IIýÜÄ|-F ?8"-[!8+.ªM ( ÿø¨e(6323275!5!##5#"'"'73254&#"pN*‰)'ýê¨II3%D*Ur0INpK4 –&› óIIýÜå!2&V:Fv95 ÿú8e746;5!5!##"327#"&Ag6—þ‹8zÔ)5+6(_3DV{l™òMmpIIºL()A$V*te&732654'7#".546;5!5!##"s(1'FB96LzX6_<"`HŽþ¡lÞ$ ò%;#197'1*iP`.HS'De}IIÆ#ÿúce/46;5!5!##32>2#".573254#""&½1Áþ>cYû6.>.,"9="4lRB$34P_-q H6yy"!`IIª1= I 4L(6MQ7."FX7p"…ÿúe%.74>;5!5!##"&54632#"&>54#"1A+˜þmØ)2YM>4#5 #:<g¦>(2.ü7@,hII²>.?i'-4B,& *= ”L);31ÿø`e####"&=#5!26=#`GJ€MC@U*`þ[-“ýÜ$Á?YU>ÆIþ¨)1µ¹Vÿø4e4>3!5!5!###"'.*1'þ\4GIð?…%4 !! 84+hIIýÜr;>¡6 !*+04*ÿø”e3%275#53##5".'3254&'"327"54>320rahùHI!&*5eC)(1£5.B; •"3+K^Ç-¼‡ÙIIýÜÛ  0FH {)6.0Cs 0 eE AÿÙôe&46;5!5!##"34'432#&'".*E4¿þžôHð!(ËF&,/b$In?' &?W`IIª+!„C&1*M >B)93(ÿøQe/%2675#53##5#".547.54632#54'"63"e9`òHJ_r$: 7-5G3.CI(1:0S ư89ûIIýÜÍ_ & ;*W*0HG(%0"R ES4ÿø8e463!5!5!####"*JþY8GJà B(%IIýÜOX ÿÿÿç8e'^X6Lÿøße 7"&=#5!##5'275#ßMh*ßIH*I<7Û;¦X@ÞIIýÜÕ'J7õÚ%-ÿøÝe'7"&=#5!!632'>54&#"#5'3275#ßMh*Ýþ¹D1E^{E"S955H2©;-;8Û¦X@ÞIIº?WDVƒ0j2)&&1þöÑ#œ%-0üÿøìe$%67!5!##5".54672&'"327'M þ¥ìHIA=5L#YF G8+'7.#$¥ð IIýÜ®/)<0Eg PN,6vÿøBe&235#53####"&546;54&#"#&546.I¹hùHI¹ b )4N Fc/7°ÏIIýÜ c r!š/0=ÿøe46;5#5!####"&%5# )^HIÏ bgÏ "ÏIIýÜ NpIÏÏÿø,e4'#5!##5#"&'326275#¼9ƒ,HJ=Q`$)5LPD¿)A5¿4)IIýÜÚ5xd ,µQå,30ZLÿó³e#"'.'732=!5!#dK6 :y3 "'0?;J>þå³OŒ3BT“ 6")3D[)-).ŽIIÿÿÿh³e'^›ÿ·Tÿõe%73".54632675!5!##'47&'"s4F?%NN8cLYCBHþGJ/b B&1./Fø$K3!@-Fe0E^GB|IIýÜ`r*!!(. ,:•e/;>75!5!#"'#"&5463232654&#"'.#"32>P >%þA•Œ,RK^'(`HS\DWR:-"+(( I3)VV' `4kIIn 1;,UfY]gVQh¸'NK0+<  *Amu- ÿÿÿ¯•e'^óÿþWÿøìe&'"327!5!##5#"&5467202,.!"B<þ»ì^I@CGfWHFl9'( <!IIýÜ®4j?Dh ÿð†e )&'"327#%72>7#".547#5##7E'(d+yP´2þå./6@,28:.b†MGÎM*!z8EWˆœ4ø5( =(*6&5IGýéÿøße 7"&=#5!##575#327'ßMh*ßIH**Ç:.EÊšXAéIIýÜÉ'¯Óå&,)Öÿó›e#)###'#"'.'732=!5!5#›GK¤&D 2a,3 "'0?;J>þå›’¥ýÜ&%,Iw.6")3D[)-).ŽIÿ¶ÿ¹æe57".547&546;5!5!#!"632'674&#"{§Y=_R;AK#îþ­æKþç&:!99!;,=09X{7K< *I-98K>&`IIª ; 7' .! :þšÿ±þù#53þù__O]ÿð¸K##".'732>54.546;#"…?ZZ?bK)\A+3Z`.)?[[?>3æé ßN +;470Wþ2þö"'632#"33254k@ 6=S&7 rPÂ\G wBxA!.:)'AS`]L5þÃþõ£27#".54632#.#"¿B6Â.9)(@R.SQ4a^(%4þÐþþÿö2>7#".546;#"‰ &)D;='E9aTC9º <*8%8IG6&þÐþA!/46;#"63>767#"32>7#".547&þÐE9aTC.!"&)D <"  ')E=:$C{8IG6$ <* !  ;)6#0#$þÔJ;2673#"&'3q+FIoKLnG*!Ø-6N]_L+þÓcEX#54&#"#"&=332632E?# p$Lš7…Ò#ÿ¸-H###53'2673#"&'3âMHMâq3@HoLLlG1/ýäH6.N\^L%1ÿá\###53/54&#"#"&=332632áMGMáX? l&:B\5CýéH2 0'M58 ÿ\â ###53'73âMHM=á=ðYýäHâ:þäÿ3âš###53%7'73âMHMBþñ1Öd>|RýäHŽ7„Ñ#þËÿ^ÿ9ÿç'39!ºWÆ Íÿse##3MH•ýädÿú8òb#53"&533265232>32#"'732654'"##".5732654'.#'2>54&#"'4>{RR­}´zFR96]þ;P5" C7ECRPB:* %!+Q#(1G( /3(S<29{Q)(.%$>3' 8*Y¦LTqqT6FE7¨ZAF& 2;2o\Ys1G0@/– .- -@!3HK2!Ô/"3 G0 ()  (.2ÿ‡ ÿË6#5D6þÕ*ýàþÿÿ2!5!ýÚ&þÿ3þ,Mÿ2ñ.#"67632Î2(1(! 0!R +1$&;ˆ<Žà>32&#"ˆ!0 !(1(A;&$1+ þÔjJ„!!72673#"&'3þÕtþŒº+FIoKLnG*!°F·-6N]_L+ÿÿÿ±íe'^Ý9ÿÿÿh e'^¬ÿ·:ÿÿÿ÷ e'^Áx;ÿÿÿ·¿e'^m@ÿÿÿhce'^mÿ·Eÿÿÿhe&F^Eÿ·ÿÿÿøÝe&O^ÿOÿÿÿh,e'^Eÿ·SÿD„eH%"327#"32>7#".547&5467'#5'%&'"'>325!5!!7'432+ML>88O#7( &)B=<& +4)ŽHþñ+b"’+Ç$oþ?„þ…|Bà-&A-=8:% <*7#5$&>/C )=éÏ›9•lM7 S]-èHHá5J* -þÜ¢eZ.54632675!5!#32>7#"32>7#".'47&54>54&#"#54&#"pg0,?rV=O,Jþhr“4="00",1 '*H="'*E*4)";"10"3$%7G,"2=‚>©SE\61`HHd L3*G-'+/ <* " =)1 8$&>$>-+6!$(%DR"0xÿÉ@f77.5463267327#".54>54'"#54&'"®J& /WA.=6,= %.%"$0&'9 '.'K'6%#å.a/>4E*'$ #B(.#, # 9&34"3>'vÿ:SfO7.54632>32327#"32>7#".'47&54>54'"#54&'"®J& 0XA0= /&2'/'$#$$  + !8&.,'.'K'6%#å.a/B(J*."?14 $,  .+*/;'34"3>'sÿ ¶€'¶C;ýeE›ÿÿîÿ®Ž&ƒPƒÿ{Z]äò #"&546322654&#"äi]^fi[\jÆ:CB;6E@'aigc`kmàG>:DF<>Cq¿e 2##"&'463254&#"M]I#9J\i8!a?"$5egRþX7YFI^£,/\'26Xÿ¼òe>32'#"'472>74&'"X}/Z}#72<‹eB;/0SN?5^#.qU4W7 Í+ÞJ4/q97D/dÿæe3%4&+'3254'"'>32'&545463226œb6A,kpfO-'%66!@&W?P7osB/BÍ1?KMDB  ;(T!"8!HX t0Ÿ>*ENþe#,#"&547.5467>74.'3254Èœk_GE[eZD-?(d,CJX$9X]eDUiWI@OOCHW?L3 B $=]+L ) þÁFKK9eÿüf2#'#"&547327.54Š'%XML-5Og:D E.- â?I*þåôn[_m"f0G=8^eÿ˜äe0;#"3274'432'"#"&'47.54632&#"°V$HZ/@@0 @!'8C8" RjV43_BH!)G(+ÙDIH)(7 V(1'€#ƒ_K`2K(74&#"3L#fPš +! $ ÝWR"+ 2'^/e%7,H_þø *  1BYï%%/Y*#jQ) 2#"&54>32654&#"¯1I49:" (,!))A42F0 #n+",!ÍE#53Íxÿÿÿÿ ;'gÀ)ÿÿÿ‚¿e'^á7'^jÿÑ'^÷;@ÿø,e 4'#5!##5#"&'326327'5#¼9ƒ,HJ=Q`$)5<6#]<2p–¿)¿4)IIýÜÚ5xd ,!,L+«…å,ÿì8e463!5!5!#3!5!##"*JþY8GGýȧà B(%IIþIIX ÿì¿e&%4.'5!5!5!#3!5!#".'7326v*ýÒ¿GGýA.’#T97b@% ;>b-#ü46 uIIþII*)9PCHnX%*-g'Xòe>32#52674&'"X}/Z}&;?HOmN?5^#.qU3Z<&©â{A7D/ÿìce/46;5!5!##32>23!53.'73254#""&½1Áþ>cYû6.>.,)Pýã0\,34P_-q H6yy"!`IIª1= I P/II#hD."FX7p"…ÿììe(327'67!5!#3!5!5".54672&'"s7.#$¥Ú þ¥ìHHþ[A=5L#YF G8+!,6vI IIþIIq/)<0Eg PþÌxÿÆ#"&'3274632#".: @#,M0& ƒ!÷8GVN#h " +( 3254&#"'7#"&54632V&/"2 â*à$;(1C9%5DË&)!þ6á*ß_1)@42&C"0åû !-72654&#"7#"&54632'2654&#"7#"&54632… 3%k4&(AA"D_ 3!o,.90@#(8c80$?3;'10¢80FB,$4@.%!5!##5'#".'732654&#"'632Û>ýëG3R4C;aA* 3{F(7?()/S<^2 [?33þ\~I:bi:…—=-'N< ek={6&'##5'#".'732654&#"'632!5!533##À4-3R4C;aA* 3{F(7?()/S<^>ýë…   3JJ3±:þ\~I:bi:…—=-'N< ek9 [?3 …M3þÿòÿÎû >3!5!654.#"#"&54732632'&/32654&#"'>32”nþX $l6J0 42Q9HŽR¤@‘®o'";+*9(EAÿö4*?&547#"'73274&#"'4632>3'23!5!4+"&=33àG)..48+5G"3'!=513>(.^J(c>.]ýÍ«:ÜE1+$‰hkUUkr:d F;#%d1[0N +.N)#,ï5=33?,J23!32?67#".'32>54'#"&=#5!6=4&#"5473V-BSþõ' 'fP9^8)32R.(< "  7Ý–.>f¥- 7W©6E3¯)2 (/!ZoD_|V'!jwU#3)*%( +-³3 f01@/C23#327#".'&'32>54'#"&=!5!4&#"#"&547326h.DUú2@S'AA#QˆE3313-$B'2"<>)þþ£%-TSR- ==T­7H3©"p9u2J%‡¶V‘Lˆ^R#/ >*4S:­3.8.21X‹092675333##54&'#5&/67.'#"&547^O>393TT3 632¦$eo  L&*'"$ÿpC; #ö8"6#›þÒ'%y\3þj;D+þìt`N8H4 21& G/3$ t5y;2>54.'&547#"'7>54.#"&54>:F55&8,7 ‰F.6R^R6d,* , %* &-#gK>!+;%4 2J.1&6($*R8Mi*1+ %'/!9-#õ;.2#.#"#"&547326324&#"327#"&546›(23GG ORR,BI>F,€ #–;3þO9H_5A@1:'+Sz %/9•#LYG#4.#"#"&547326324#"327#"&54632654/&5467LW3 >.DTQ,2BTD.+ #›7# %\­Z%*IhiIùW(þ†(/G_A5@1/1+T#x"+'8”(0:&9(D$)!*"I>ø2#".'732654''254&#"&54632ö/ "2)(H75%)3 5Q]L#".'732654''2654#"&54632654.'&547QP5,"2)(H75%)3354&##5.'7z™þÒ8×6H0/")( [63 Eu6ù"•)‰C`*.33.&N4#B%'6MþfXOMFX/Ó„+33##5./>4'"&54732677W$Ld3443¯:3:*4(%1( &'=¦5FaÝV3þR,‡1-45)*%/DJ+à{+2533##&#"32632'>54#"#"&546Å9M.3443V^!F O",&"'*I N  W15HÇM3þ`›7#)"5"% O %1^µ.%27#'47#5!##5./7#"&²& !&')ÞAt5´33„JN &H“ $ #a133þAAZ (R8 ¿ 8B>32#"'326?#".'732654'#"547&'74&#"32 I4 '.',69(#)ZJ>g@&3"5R0<3% =!o#>(ä<$U¨E$) W<P-JcM|ƒB @ykAE.0,"4”!W>1 —.72>54.'&'#5!!2#{#bDLgH—þä"L6: ºG5Yi þŒÔ33=.(LÄÿµý./:.#532654&'#"&=#5!!22654'#"'%8/$22D"9ÉrGWw%.\30%ýþ[ML  þæC1  ;) %> $@t3\2&?^.á33! (/K&†ÿýY.@7".547#5!!327&547".'32?#"&'&5332654'ó(3 KÖYþÒK9<10 #BP2$*%,SAHƒ3(4&"@(ø2.a1337'!kmHTjN]X !!# B!-"')!3_Žx+FS}A) 6'$&3†$675!5!33##5.'#5.#7p¡þÔ_ 63JJ3(3+@Y+÷)ˆCa,+3þÎAÜX3þ=£W8?-KV1ë:CY#"&'#4&#"#"547326324&#"327#".5463267>32'"2654&#"532654&»0g,[3EG g!}/69`:, @*  "#! Ÿ*7%!/,=j7_-X83%'/(240gCÈI:¡E9 C<9*#S )5. $ $>Ab!>-4lxE49!,3%ÿÑF‘'223!32654#"'632#"&5#5!654'".5473þ.Iþæ;d&!"-:c4,'E<[š #,!*a°7>54'#53&5472654'ƒ/2°™CfHFV2 ¾ P6&):4I<"G0ß,N73k*EFHZD N=%3]G54#"'62 ,'M˜þè 35% *>.9d?'’33þq 6Y1&"!=8€[?Ì‘#327#"&54>32533##4&#"r, )F>)3& 3553Y$5@‰?3^+1:('Êc3þW+w=ÿß&U.+/&54>32#".'332654&#"%5!ü, 8&KcfS5+# 3  $2BLF57þãva '" '{¾y 1&@)I%%7;X/:\IFa!w33ê†033##5./67654&#"32727+"&54624\%jI3QQ3";,C&,n'B7) ? (V~Q§8P)YïX3þI% 58<"*$3- 2DJÿéÿþ³.'#5!!67&54Mc3OÊþ¸g”,./j´2"33ê†!PO_ Lcb-Í5%"753##5./7&54632&#y…R3GkMp^),*' ŸyU-J1& DJ3þVGK)[F=8Y325!5!##5.#"c4#4,b3þ©½33B$&3"„&D/F"fÌ33þÃBE--,  ós&>32533##.''654&#"72767&#" n6…F4==4* »$%.% # 3#43B£1P‚ÑE3þ:H Á"&!$ 9 ,+2&) S.(3254&##5./67&'#5!!32#"'Ì I<38b($f4Rþ9>(69vKZr7 #1?þZFA_ %M#6@33*8&1,'aOaP'% Œ.%.#'675!5!##*–M!~”þÖŒ/3“%ˆY*Š6b++33þIX,G5.,0#".'32654'#"&54632&#"326%5!¥%`K9bC:"9%”T,P"5R3O)4! K%3þ|5® #!9 @s1Jm_:“¥Q?3Z7?#00:2”33Ê.!.'5#5!##54&#"#"&5475Å>N)É33`#B2U)D>=79.&!"33þ­C+P,],‰–82Nà±.67.+5!##5.')9Ye 6±33)“9?Y7?J"1#9CE33þLCR F7'2jš."675!5!##5.#754632#"&€™þËš23*@Z+09twF&A^6&33þY8?., \'ð"þâü.&3"&546326325!5!##.#"4&#"V+8>FG;1.+&þkû33 3%'9#.%&;0S>@R0+ ‡33þ!JL0)5…6#"'73>54&#"563263533##4&#"327#"É 4$E5‰N3::3Q$!, <X&)-1=8k_  $ÀW3þ^s/6 +½.&'#5!##5./6&'5À-~½:3BdE*÷I;0|UÖLŠ—#A33þ@]G:%3(?+7qc{šü.(6325.'5#5!##5.#"#"'7326s@5"'2Ä B_$ü53 :'30A,-û84E®¸K7"33þõN4?4j" EÿËñ.#2&/32>54&#"&546'5!æ6l•¥Y&©Ù_:&: M$B0d¶ÉëY:o2[p!ºH9!(# $<"%*9+K33þ„ÿ_þôÿÏ 4632#"&þ„"i2"ÿËç.$5!&/32>54&#"&54635-A•¥Y&©Ù_:&: M$B0d/û3NK+o2[p!ºH9!(# $<"%*9+Kÿ±Á{.+532533##L)Rb3BB3±.38…M3þ3###53'>32&#"BIC3G9* €DX’V#‘ŠBUe3þû3:IdNJ&‹Wþw´)$23###53.#"'67."&546цž AA3@@—f,[€o -@Hi)Žm3þû3Rv$ *!$%Hÿÿ*iL"'2654'7&'#"&5463267&#"š0 *:()(0M9< */)?/*8BA9/"9S ÿ@þîš$463'7&#"327'#"&ÀB1. !+1(£ ˆ)3&0b)5?"!#&r/ÿþÛ%)?ê‘+d§sj2QG~8þ·þQ%) 7'?'þ·Ž/‘+d§šZ§ýi!j2QG~8l@~8/.7267#"&5467#5!Ç CL^O<±&[rD3  :ŠfKœ$31›n5qÿÆL,7467#534&+"&47326323#3267#".(GA°Ò-Y)*3,2 K@<G>³=0 C0H"êQ‘/342H #6M3j @~  :9TDÿÿþ6¢{'ÊáÑþ5ÿÿþJ£4'×ÈÑþIÿ/ÿZÿóÿý'7+¦¦¦{({ ‘13"'654.'&54632#".'732654¢+9 &-Ÿ0 J[g7_G:OC# & /þ8- Li 4 ,#H/5.PBTA4(84'  >þìÛ426323###5374&"#"&547c)B&GRR3VV3(B`T*±4(,3þù3$63!,7ÿ).1<%"&=#5!!>7#".'32>54' 4632#"& %Ü)þæ S(4wY=a9'3‘Q)=#   * í6(°33¬[%p"YoIg€]$œÓ$6-2(   þÛ4 ÿa˜.(3"&5#5!!32654#"'6324632#".š#4C˜þà9e"(Hv!- /7•33þh0ŸC# "mP¯_-!·. '!##5&/674632#"&¼eW·83C°,=,E$y/(" !É%&Ÿ]23þLp/8B–*5j "fþX '&ÿR‹:2675333##54&''75&/67.'#"&547HpCD96þþ0O>393NN37ds4ý™2¦$eo  L&8!$¯/3#(8,8"6#›þÒ'%y\3þi=C+þìGT*8²jU`N8H4 2!$& tþó€yu2>54'.'#"'7>54.#"&54>32>54.'&547#"'732654&#"&546¹5,".]," #,* , %) &-# :F55&8,7 ‰F.6R^R6BCT G0 .8(!*4F2!$19"  *1+ &&0!9-K>!+;%4 2J.1&6($*R83W )$8 3 %1   #&$þïþ¬,32654.5467#"'732654&#"&54632R=2GG2 LZL/D7#!+45,à$/",( I5'9 &-  #("2ÿÿýÏþ¬ÿ÷’'ÝþàÝâfAA£® 4&#"326'2#"&54>pA4>I@4O<8DRè^IXncK*8. Ml,)%#"&546332654.'&547ls=.A?1   19O+$==* 1EE1²Mc09/ M=4/!1 40 +0=b1ÿÅâ#%#'&/&/33254./&'7‡^2aŠ"HC39@!* R'u  H:''*„"6E@~$@;#''=.V  *!&#-?,ô'2#"73>54&#"&54>&/;1!)BD$¯a3+mG$6O>$1: 3 #4X7A^/z CŒ„!*4#Dz%1= &,9ŠC 262654'7>=&#"#"&5467.54>32½\>s(>h%:r"B+%3~aGER'D@=&7/43(J/#C.@ $Þ:O0", *1b8JL?'13M/%8 8&+61·%23&5467."&546?6?&'ø>32#".'732654€ Z #+) .! cI>jF+3=o@1BL2228* #3-(8.!(! A*ZwEo? H“m]E?`Ù0;6363637&54&#"+"./57"#"'463237“5' 89/"NF 6¢ l6(,x&CWLþ),*&v=g 4X:¤7 $  0"32>54&%#"#"'4'76326323;2?Ë*-,;3N#dJ/%,$/-9/'   18#¤@>/#  J†Og3"# ½>4%>5.'.547?654&#"3"&54632H('E6Q &1$&\xšwR:)&:?G;7Kp I4%  - " *#/=pN` 3 0=+!7.258El: ÿçž. '.+'675!5!##*9Vˆ$ %ˆš9!~”þ½·A3@>e X,X.ˆ6b++33þÿçž.!7.'77.+'675!5!##Ò`:,n6š9!~”þ½·A3H''%ˆ&&Q . I7 .ˆ6b++33þ$X,b×a %.#52¤9Õ{M„]M/báë3=a‰‰OÿûIf$ 3#2654'7#"&=#5354'80AA/F-,4_D99VV1$19F3Z/&R*."'<=sJXB3KNbÖa 72673#wÜ63/M]„M•ìàOˆŠa=(K&$ %>75>54.#"&54>32%<… 3ïŒ@" '%*8(1[é,µZ „þî:3+$'$. 4)34P: <1732>73#"&5463232654&#"&54>32#'"@8K}S5 3AR-2BY., " .9(7, ,!L;h7H“# V‘¨]nÑ«"D8#3(#3'(?=8N/…' 73#"54#62i %*L‰9TG&7N#V.(7"&=4#563232>323#"&=4#"l + 2" *š1î&3 Nü?M?)"Ç 34)Î51e+’‡é%72654.#"".=4>32Ø1K)! 2,# 1G$#G/98#`ÅP(#3 $ "3 3 554<)"C.Qdt Ù$326?63"#".'#"546326.,O+&?43473#"&53£%/YHJX 7º,½( RlkS%0 ÿwÏX 4632"&‰00!H $!&000'(m+82#"&54>4&#"3262#"&54>4&#"326¬2GC84F.e2&$ "!)C #+C86D 6k.  )("mD86DD8 ${&"3 (· 6%5CC8 #,| ) #'+ÿùh>26?53###"&54>5&'#"&54>54+532676“6+;džAN/7 '$+$BJ;& G8\>]P "3[9'ÔAýÀi JE>&9)H+‹&WI]7/$;"°A /X8DaÿùPB26?5!#####"&54>5&'#"&54>54+532>“6+;¯ž@AN/7 '$+$BJ;& G8\YWP "3[9'ÔAþºFýÀi JE>&9)H+‹&WI]7/$;"°A /X8 aJÿàt¥05.#"!##"32>2#"&'67&'###535463235Ž98G4׈iëY¤K$>! c6\êœw€@}}kc43 q-{©âL:b…AóŽ!f# (asINagnýÀ@A:ƒg)Q7¢œ³ÿö±¦83567&'#5!4&#"#4>323####"32>2#"&-{©þM“wZÌ2JC*@#B/am¯¯@£_3LcP¤K$>! d/uÎAœ³þ|T[gnAf>H&@;"gƒ:AýÀ@ó>/!f# 'coÿÿÿùÿ@ã™"@&Êÿÿÿùþ¯ã™"@'¼ÿÿÿö§¡"?(‹ÿÿÿùhÎ"÷)Xÿùÿùßµ/@3>7%!2#"!##".5#54&#"#326} xJ[J0þCß]Ž=Z5%biMFu'L54W?2! DY- +Z= '9S26F@Q0NCA41 *H8*AXo#Dk64 +EC]Ic>+Aþ 8[0OG(5ÿÿÿùhÕ"÷+ÿø¹%87"&54632>7!5!##&''327.#"ÝPny]cn-ýïÁp! C A3³ .% jZ#  7H7rSXky—EAA!-%3,3M:3"®UDÅ'9 ˜$ Jÿóˆ#%2675!4.'#532!53##5#"'763%Tþð )@E ikY ȇABc›L%³0“@Z=1 A··AýÀ®54'#53232>54&54632Ú'*ʉA$0EA 3:p <>2SDHJ&)4)!¬ AýÀ"Bd#¸'KANE.ÎJ3A'+c 'TZz.}ÿ÷›'074>327654&#!5#5!!32#&'#"&7327&#"<>*>\4+B:þáM¤ýê÷/E"_6,E")Y^D]@;*L;KHY¯+)265-"¶AAv/.NM1mH4SL8(?Lÿú¼!4632!5!5!##".'#"5!32>F3#<þÂ’pZ1MG*9#ØþÄ]O!;1S.?6ÔAAþsOd?zY~~„f3ÿø &.74>3!5!5!#!"632#".54>3&>54&'#;$ 6þ ¨ˆþ-t+™o&tnrn,  "54&#"#"&5467'32>7Â;4=‰q86:;kb 2 ; (K'' &% )3!W- g\'"'(l*";%™=KAAATW2OQ? &8, - 3M  ¶KA!4%ÿúÿý2;5&'#5!#!"3!#327#"&'.'".54¦[ ‹þöK l•‰þÃ>2Oû+†#! ;+)X  @=;xx7AAA·$,@‘ )70  hÿùÿý“%#"&'6%5!5!#"32>32zM>àk<þ1š‹&,SAOK#)¦/#>"! euCç!ƒAAà )G/3Lÿöÿþ¡ )%4&#"32>".54>75!5!!wWPuÈ2K, œ\VT3/[<þÚ«þ»4(5,0A1þ 4$ÿ÷ÿú›".4>32!5!5!#!632#"'&'#"254#"77%þ!¤…þ›(%EaG

‘h4:}YK"3# $ u(7A¬AAì!1X-mL37:’K}þä9@(,ÿù›.76325.'#5!!&'#.#"32632#".&Z€<; I3 ¢þQàEG2$i!HG‰U² Bn0 PiW´Ö0W AA#W < È@5–*P7 3-"Nÿú‘*#".4232654&#"#"543232765!5! 69x$2/6•f(»H@;mZ*LM?l"€)þ —@Mq.?e(>% .5?=>8B5/ÌAAÿúŠ"7>54'#5!##5#"!5275!0% `ˆAXeb !²JhþÔ >Ñ,±(,>AAýÀŽ=ïG!.¬þR=…,Qÿø¥"4632!5!5!#!32632#".5#"[+#þ­‡þžSi(~ )Z5Id6H>5RJÛAAþåoz0 .+*QdEÿöˆ7>54'#5!##5#"3270 g’Œ@Y_b >YEhèBŒ-+2AAýÀ¤=Ù3.5fKQ<\ÿôÿþƒ)".54675!5!!5>54&&Ay!3%,.‰PþïþÃRˆ  3 wm]H1=A.B/[—AA—Y+" A=1H]ÿ÷š#732>73##5#".54654&+532vOW75Í@Lb(X@)L%*-óH AýÀ°E(( Ë '7!5!5!#!">3274#"26wE–l1þ#¥‰þÏB2% *)A$?Ta!W+ZQ>90MO%;tAAµ>&!1 &G8;I‚B1)+*ÿ÷}!*!#5#".'>7.'#5!#!352675#÷Az&Q^ %5!I††þŠ?>§§0m ²9_Vv3E32/ (1AA?S-¿þ.;oJÿ÷z.8!".543232>54'#".54>3265!5!#3267&#"*pP6`A(; -hi); $K4^HKþ-ƒp^yþì!)1I,=Ij+!1'=*a-'+,JPaAAƒ]:!WqO!&(<ÿù¡74>54&+532!3##!#"+"[giÊŠ@þé&)5YD?o?WEAÏB)AýÀƒvÿúí"4'#5!####"&'76732=35!f `ó‡?•''D˜'@9g+5Öþsä RAAýÀi$5 m*O|Lq“#K_Žãÿúÿÿx".54;5!5!#'26=#"t;‘e‚íþH~…K7$æLZ]i—=l˜AAþeYM?0&Ó(=bbÿöÿý³&*%2654&##'"3"&5467'#5!##!©BZS>]\?T%/! \}iIN‘½“MGj|_Q|ÿ{;[AGY««^B%; >}][p ’AA’ qZX‚DÿÿÿëÿóÞ 157#"&546322654&##'"3"&5467'#5!##!R3‚BZT>\\?T%/! \~jHMºæ“NHj|_Q{ÿ|*!& [AFZ««^B%; >~\Zq ’AA’ sYX‚Dÿÿÿùÿý‚+!5!5!#!"3!#327#".'.54>­ þ?‰‰þ¼$'+Nú +6%8 ;*)H/"+)=ÈxAA·.0@.= 1*?5 4% #)ÿùª%74>4'#5!##!#"&!54632#"&3/.$s±‰Aþñ  )z$Ú!Z]wpˆAAýÀ“Etvêþ!ÿùª74>4'#5!##!#"&!53/.$s±‰Aþñ  )z$Z]wpˆAAýÀ“Etvêÿöt 325!5!##".54>;#"v!6U.]þI~ˆ01;…^ 7$1(LDG3` AAþc.D"L„F #*@ÿ]ÿdÿÇÿÎ 2#"&54}&2%ÿóú57##5!#—@dBžúFAAÿûè¥.#"3###5354632©98G4œœ@}}kc43 âL:_ˆAýÀ@A:ƒg*P6ÿ"B¥23###534&#"#4>;am¯¯@\\2JC*@#C¥gƒ:AýÀ@Af>H#@<$ýúÿ@ÿhÿ©0#"'5327˜  Y_cUX^˜ (A('ýúþ«ÿhÿ©0#"'5327#".'5327˜  Y_cUX^iY$G%cUX^˜ (A('Ö' A('þ ‹ÿz¡2#".'&#"54þ7=}!h&=!4Z(¡J&x)$*3!#'ýßÿ|Õ&4632.#"&5432.#"ýê+#4hL=Š]j&%T*)%(")("2;#M¬:T\HP &  @2 þ!ÎÿmÓ".1&#"#".5432“  -U $) †1+å+/-#4 9ýÏÇÿ‰Õ)#".54&#"&547232632#"'67&#"þÅ2] $I/a3E& C!+2+ 5/)?4&5$&K,þ®þãÿÅÿÌ 53&þ® #?1&#il8# 10 ±þ®þãÿÅÿÌ #.'7; #?1&#iå8# 10 ±ÿó‹ $.%2675!4.'#532!53##5#"&'76#"546323%\þè*q  ik0' ɈAY"=˜" !32Ê š/^) A[\·AýÀ®33X[þ¨0ÿúÿô  !*7#"&54632746;5!5!####".73275#"_\Hvþ‰@…ƒ7!5!#’<^TA8,h32#"&547#".7"32>54 0W8eh  8M5w-I+ ÝFW#4)29'ö,3%e]'Ü)E8/³aRb?(0$‚?2. ,p+ž#463 #"./&543232>54#"#"ŒiþõŸ C^!†>;h2!^H*l‹{\¶%t¼4;7[5~H2=DJP1+2)[-3?YI.,t9 $ !*))ÿÿ’+532654'5".54>4.5474&#"32SZ]`Uj«"+GGJGG,!©jUNPQNŸžÙ5ZX7Z@"“%? ! 5%.C!!C.#3 "@%“"@þm<..<`ò3273#5#".54654&+532¨*$WOMe@@Lc7nCL%*=/<ä(‘8HFý°E&9Æ'5&'&54632&54632#"&#"yH; ]#<`VJ9pÉ1!éAO5mY%47CHK @ -(/(þ"=$7@0 G/V" ^F#7" q BO D DB )$< G˜,2#"54?>54&#"#"546Qi *"9(E*&u8:Fh–K*kJ66  ,‹—z_!;4,*!$"4-^GN-C`+" 3=YX‚"4632!!32632#".547#"V*³þM-IS%/k4dmQ4@ü2TG@"6`jK1 #=]œc j74632!&'.54632#"&#"#!32632#".5#"V* @KG @ !-.#`þÎ#K‰_%/kc’R1@ü2TG%) 0H (*7 ZxB #>^‰wHþÑÃÿè£!2#"54654'&#"#"&546¤(; $ ()=1M£'%+&C!1#<I 5BþœÃÿà#"&532>7 YHIY 8J7 UilR$1 4ÿö§!&767&'#5!##"32>2#"&35.’wZ±ˆg75F;8«L$>! a0nÖD-{©»VZgnAAó . e# 'boÑœ³ÿùã™ *0<.#"#4>323##"&/47#532674&##326@^v7R/ @ &=kFTv8cbLEt'L4ަOzŒy29Z,kaA±6Fjn+=5%EO9&5ZW2AZn"Dk65 в†$AAÒQþb7[î5 ÿÉîØNfrxƒ2#".#"#.#"!# #".'&5#53>32>#"&547#"&54632'2>54#"%3>74.##32È>sI, %4\;@z  #N80$ )  !fTBhC1// {yM"‚ý ) +\FMOdhihWÇ,4$†„@²t‰u4.?,^>+ ,;:) $($A! "! EkI]+:iNƒ>: AŠ™]ELü÷w7 AMD$&  É t}Hh þ˜Ò´ 2#"&56#".'3327w%( #1X98X2$ oxi´!.C1$#0"aaÿ<ðÿÓ‰ 2#"&546y"*+!5*‰.0%'"+¹-NÏ 2#"&5462#"&54  )!+5 B)4"*Ï$!')("þð+&#+ÿÏÿÔæç*%2>=3353###"'#532654+532# (/ kyssyˆiê8¨%IˆÂ9C$A*? 5"÷x¬ýíDPcÃW( BRUD%, uÿÈÿÔ§ç1#32>=3353###"'#532654+532#§ppý[)/ jyssv‹iê8¨%I„¾9C$A*;,þX 5"÷x¬ýíDPcÃW( BRUD%,  $)ÿÑ%ê*726546;#"#"'47&546;#";#"ñ(J8&d)_õFCO£X7!UL/I#,  ?0W þûCU®>1!Y8GS6'X.! /ÿÁ¤246;#"#"'4>3&546;#";3265f4!c*&z^ö;P¡X!?UL#  8'-F1>5H2þ/ES¬'S7IS1?F $;ÿ·÷´<"3674&+'32654&+532#".5467.44@F1Z[('d£3B> Šp>_5! •|X42$= Sd B0þ¡AM*'V( !SK7k GX(6)KqŠ,D;ÿìÿ¸µª346 #4&#"32674+'325&+532##"&5½*âp›j'IH+P;8JHXYIHd£3C_‹ol‘¹m„Œeþ ö3l!B-þ°#@-'OSK=SK7$7 eJUfPÿÏÿÉè62#"'732654.'#5'74&'"'4>327537&54¹S.L6fEX29#(<)1¦sþêNÝR#*O?*Y08]+As†ÜP9OAB@OT12. 0%:Oþ÷Ü Md"¦„c @Bdq&"â¹: IÿÉEß1%3267#"&54>54&#"#54'"#54632632–D& .&DZ-6--[G? SH8S'5OQG(0(K4 G X¡P;=XE5U+/ÿÿÿæÿ½ýê'30Féÿÿÿæÿ½ýè'€8Féÿÿÿæÿ½ýü'=FéÿÿÿÕÿ½»ë'ø1G éÿÿÿÖÿ½µé'€À9GéÿÿÿÕÿ½´ø'Ö9G éÿöÿËBó.4>32&#"3%#".'732654&#'7"&G"9; M^ 6?f(  Õ†ô-*)(^b-6KXþñÌb…. P/% 'P8Y  D;/%*G3UH ÿÓŽï232=3353###"&=&+7~!1>Ckkggi8J,Lg:é+2Ÿ=;Êg¡ýä9JV?¤TÿõÿÓJñ)#34.#"5632#"./4'7326Jhhþâ 3#L->vn /Q32"WE'9;-÷)( X ls.9. # AMÿ÷ÿÒ9õ'732673#5#"&547.54632&#";#"n3nYg-,,ŒL~}K˜ 9?ýìl.[JC*9'TNÿõÿÑYí.:747"&54>;#";#"27#"'4672#".32654&#"X#G(! ‰J<)I&(œˆ?žTA44 º~PxRp'"%'}H/D3"4 S4#X.\}“Of0dEŒ£P ;/#&51ÿðÿÏ‹õ346327#"&5467.#"32>5#".WF*U>3¨LÁ $2;49(‰(" .     /:(EOa):>+ÌRà _7NJ=f $–($'0 X #JÿôÿÒSï=653##".'532654&#"#"'532>7.#"763632Æu, 76 ".4*,;;W*@-%6 0*.B$9C‰H3Q=He0ZYD7G(7_JMW')=/BW@X‡*ÿôÿÓaï#353###"&'732654.#"'6–gxjooj $.V5,o )PBG2&L"=ïkQ¶ýì&E/%;[ /LK-? [ÿÆÚð&4&#"7633267#".54>0+:1C-K%C?&0c9wX+NJ->YZ>f c9'.91(XF*]&>)P8*>!#ÿþÿÆõð*2&#"#".5467&5462654&'"$@-)E[>YY>-JM*@b8# X77p?*NGgIVðYCGnO)$4/AR)@Nþ+=,%1;&7CÿþÿÅøô#732654.5472&#"#"&'X j2:N@\]@Õ<4.BdA\\A/LN)b•}G2&"+<.[<#E05N'X!ÿÆâð$ 54>54#"76323274632þý>XY>l2C/Kqh=XW=@-H/{“:Ã)?#!3 gU8);!(-9K9_2EÿóÿÃdî)#3%#"'53674&#"76"&53327dooþ§G]$H1$%(M-# 1%srO;T@h+bN99"Pa+5RýÕ†e:þÃCT%\ ÿüÿÒüè".5463753##"327ò;F5$wRÆqq 9D™ . 1T6QrlýìSF;{XÿøÿÒ4ý0#5#.5467>54&#"#&54>32326734p,z-oŠTZ.1/5-a3 :%1H$TL[BB:‹o.†""bS .%&06 , "13HR 8F+ÿËÎó%7"327#"&547"&54632&#";É)')LJB[€gŠN;t[=Y=+‡,Õ4* TTXgVJ/;+?MUDPÿôÿÌ461#5#".547.547654';#"326734p3$85%N9-b-<€ Z)1).~LG9,˜o4v ?,A,H)L &!RM'G+ÿõÿÔNç "72654#"'463!53###".µ>%—!QK"$HDSqýíO5G>ÿÔèç7".=4+5323673#5÷6O$%[<%"_rrF7%6+´T,/¸ 5ýí… ÿ÷ÿ_Cý64>32&#"3%2#"'#'&'732654.''7&\ 553b!>9>& 6Ìg€fŠkKCWb"KB þ÷ ¶Q‘,  J( 'YU.LQ~„5A"6&   8dÿïÿÓò"726=3353###"&54>32&#"Õ.;osoos'AA"l‡!77,.9I’A/¤T”ýí)7O'sy9S) Lu™ÿðÿш(".54>32353###"&54354&ó'2"-&RN3RT,8@,kooi\:1X)¶$O6+Š-‘BNr: A*:³ýì s@.]<#ÿÓ·ñ4&#"5632353#5##"&543s#%=jppj.$8+bQ, X rjÑýíì&;&`ÿùÿÑ+è'#5#"&546;2654+532"&#"32673+qW\k£"`+EX”7I|*  .& 3uq/t9x_(;UT@€(2:ÿÔØç7265&+7!2#;!"&/#5ú/>làIe3fGÏþâ(Vô-%MT\D7k TšUÿùÿÓé$#5#535327#".54632&#"pÍÎoþí"6*7E9'„t)0"53 51-ìSÕþJW&9a32&#"3654ÏMhs %!"RAV~ ?+ B2(XçVHþŠl#4=[k[=Šl+QO1 R £F_¦óÿýÿÔöç#5#".54672&#32673öpVYB[,jY5-'64‚+Wp,Š>*GC&P`N/9k*'ÿöÿÒKø1#3"27#"&54>32#.'&+532>74&Kpoþh,&1(>P!79f{Ð5$5 fX¨ {%#.%U3!91ÿüÿÔç73267'"&=4&+5353#5²4:QäOUm ,ƒqqVÔ(".·þ´`6¶ Tëëýí™$ÿöÿÔJç&2353###;#"/#532654&+5ã&0#mpp‹S9 ”æ+ &FÀ10•ç 6%-«ýí1a T1ŸU,*%Tÿûÿ§ý3"&547&543.'"32#"'53254&#"327)‹£–­O+?.-?E]2M`5<1%YYBAM$J3~NOYwˆ0&SP"*4$>AQ0%.B;!9(6[(þÄÿ±ÿ+#53ÕggOe ö#46;#"#"&54323254/&=8*Í$ã6e6 :%Mn 0p6g5¬0>$,S3- +$_*#a47W/<ÿÔ­ç#3­qq,ÿ¾^Ù4>3'.#"#,JM)~¬3_ #*FUpÒKl8SZ)  `Nýìÿ,ÿ½Åâ2#4.#"#&56>@{Hp0 Xâd‘Cþí1A5&'*"<…þ’þð#'2#"&'732654#"'6ƒI][KGh<71J7'H'%78YI D$3*þƒþÙÿ÷"327#"&54>;¼)7v2=.CaXx$, ¡6)\-Q*_H%: QþËþ\#+ 46;#"327#"327#"&547&þËG:dWDU=*'(O$?!*1'(O^XDY9KH7D=*%=+V4/%(þrÔÿú #".'3327=#D&>22`-x)"ã-[=¤þt¥ÿâ°#3`þò•¥ þO¤ÿÜ¿'7#%7¯uh˜]þÐQ›"þå²Gÿ_ÿ¼°ê #".'3327#3°"F&=12a,y) oo.Z=¤ýfÿ)ÿ½Ÿç#3#3•_þó•áooÞ üÖÿÿ»¡ú '7#%7#3 ]P˜\þÐMLoo:ªþã²&ýÿ þú2ÿã#'32g«ŽþúéÿÎÿ²’æ !Js2#"&54#".'33674&#"#"'532?672#".'7326%3274&+73274&#"'63#".'·* %? &5b>-K2*oM4v È*#)5#Z-O)H<9$p]*" +R"4Hý`4a!"db;16b c<ÆD +GE&E}@ æ!)4%  *9'\þ:=X1i;O<3bB  W0x:TK"3VH(Q‚m )/B! CHÿÏÿˈè<2"327#".54>3'#5'74&#"'4>327537&54¸S.QT56* e).6!!-#,§rþëOÝU $U>.E#,O,At…ÜS6Ž<&8F, 8(!6_OþöÝ Md!¨~c +2&I^J !ãº: Iÿ*„ßE%327#"32>7#"&547&54>54&#"#54'"#54632632ŒJ8*'(J$4!  '(O_LF**-[G? SH8S'5OQG))`;=* =+F3CN(.$OLU>X¡P;=XE.E&þeþ—"ÿå-327#"&54>54&#"#54'"#54632632d#1&4F#*##E80&@7+@*;t$þê-'*'$317(9g4&'e"3þfþ+Jÿæ>3267#"327#"&547&'4>54&#"#54'"#54632632W& %8&=I1 !#F61?7+> %@?6þô)'"'+"0%306(8g3&'8,#0ÿü¿¿"&5476;54.#"3265ã_‚B@X`=?# (78+'4_\EB@B\_è&7 P9:JJ:ÿÂÌö*463227#"=.7"3>=4&hSNg+3,t/B ½#,.# #ANgI<þÅ#"d g“ (7+v.*.+]ÿ˱ó&7432654.#"'632327#"&5&XF7c =*=?Q0k’Á ,7H2M^‰ÍT[Q 'OiU  Z[J ÿÇ´ö+#"'7326=4'732>54.#"'6ÏZr""d}]lk6OG-GŒG++51#9 cöR="' lH`FL83(HV   P!ÿõÿËÔó""&547&/7'32654.#àMl}N`7[4$ ›M¡@b•%"!&"L5]E_^Gp+"‰L„j.Gaž-.%8?ÿÔáç!%;#"&=#"&=4+5323273¨ "i!44E[P "$* 4nE TqT:ŠT -"ž#!ÿ.¶47467.54632&'"327'"#'2654. B&.C`v+Y!P Ÿ%o]o]fq-H@\]@‡3HA#ADN   Rb  +?-=NL#8ÿÓâô*%".54632#"54732>"3674&j+JF)`CSf "6W9íO @4+@ 0*#`, +ž)Q9HJiX=c]>%Ä]%7 6)2&!,-3?h,'ÿˤî"&547%327å_€BIþê>0;AI+k5hVY4ØPÚ1%1Qc)"ÿÌÉå%#53'"327#"&54632&Éîî¦>q(>5"#0.nŸ¦s"0'·Q„[M7O&^to™W ÿRÑK B%2#"&5464&#"326%54&+'3254'"'632'&543226e0<.-0=As"%'!#%*þ°g5A.lukU .€3N`B&Y@R:qv7C.*J´@,(5?-0=m342'€/BKPDE4OCU$"8"JY x1¤ A@I?<Ð(#"&547332>54.5473vuc…PPH-?!0::0P 19?2!x{b0310IZ%BG+4N.%#(C, %+!07Z<0Ð%%#"&5467635#"&=3;4&#"3260”ke=54X P ÃKbPWHJk\KJc×hoqc:`¹N%ùnQGPJGJQM<Fä'3%#"&54>7654.#"#>24&#"326F–miž/(6!-%1,Pd˜N'++P\KQreHPmæj|~g#;*$ &/',T>blfM@,I0Ka^OH^X<óä-9#"'.#"#.#"53.546326324&#"326ópXP8$$ ()&$$v(V47LfWY7=jWlP>:=E@<@>Ys/XNH+"#[¡\á2"  P0‰LY‚NN~T=YZ>=UR<ä"%#"&547332654&#"#&54632Ùo„ P QLJEG;DEPy^Zyùù‚o ))!Nf]LJ:?M@]e^W<ä&%#"&54733254ᒐ&#"#4632*+ˆf„PPH4D<7#"&546326324&#"264&"326ã‚dg{ -@B]oLGg 0CbX{þr9)*=:Z5>P„TSADPâd~zg-<M'YAJ[YF#¥Fl)2:*-6>þÂAGRBAX`P-ä*%#654#"#"&=46326324&"26-1P1\43<322VQW$G01F$1&P$3:dABd9¤³ÝÇÉ-TR11RT-[ÜYVäV>n]77]n<ä%%#"&54733254.#53254'5++‰gƒPQG‘0# \ADMP0!ïRNOpeI88CHW©#32<qr< aFc,\<oäA#654&#"#54#"#54#"#&'&'&!"53&54>32632632o/Q0/0,2AXW@BUóRPQsa^w>£AYeLm€rZþÃ>TZA@V\Pä(%#"&54632327#"&#"6324&#"326„cg€PgT;@ -va?e\PXA?VSD@WÔasyfCeIP[Î>z]AZS?EZVPÆä"%#654#"#54&#"#&5432632Æ1P1\34P43\1P1°X3/d¨ô‚^yb5„I5ÑÑ5I„þËby^‚(ÈLLÈ<ûÐ.%#"&547332654.#52654.5473û{\eƒPSCAH//(`:8QQ8P(=F=(S+(¾Zdkb#BMMA(1<0*"'B, '3?/KTÐ.%#"&547332765#"&547332654'5673sij† P RK5--8b7;J(B_PV"6/¶+Qåi|†k0)!Lh#$b–9)8A? M! 0 < H<ãÐ9%#654&#"#4654'&#"#&5467>7673632632ãASD480"%P.29+$ZE{zŽ PNŠi` -A*J=VWlÞk_Uo;U"#L  ' F!K47t*ml€§64#X(,#K2/+$OnPÐ%#"5332654.'3ŠbáP”DUPÐ`péçþ­VD$8+);<Üä2>J#".547332654&'#"&5467.546322'4&#"3264&#"326Ü&@X`51^W@'OPO”pu‡IB4e=Bc9,)3]EBV!…â&.1'%15Â+75'%/+„ä<%#"&547332654&#"#54#"#"&547332>32632„')†o„ P QLIC -"*P 34;P*%( +Z>LùZNQ‚o ))!Nf^K]15."‡™> A47 $>N><ä7C#".547332654.+532654&#"#"&46326324&#"326A8o›pDvWT hSXi-$<9/>>0&> zU[„~ZeC?3N`IÒ<ðä5#654&#"#4654'&#"#.#"5&54632632ð5I.79/! P%$'9=LCBz|R PLni4sAq€h\b6;dQh,c_aO54&53 æi€PTLJEA^Nd#P#I2')Pïïxh*01N`]Lõ:_MD@AH1:I4 6 =ä"-%#"&5463254#"#4&#"56326324&#"26=‚zgŽ’ibDX?!P1#A6IO&-]ROPbGJ^a`üz‚ldfn=ÑpI^`G/"Z3<OXPoä"-.#"#4&#"632#"&546326324&#"26oB#.P!?XDbi’Žg{OR]-(MI6~^JGb`aW!0G``GpÑ=nfdl‚z2Tb<<3þHPOFGPN<wÐ#.'#"&547332=#"&54632537'5&#"32wpÛn‚ P PMŽOM;YU;E[PpppÀBD%5/!I/Áïxm+*)!Pd®³9@9:E=±±\GHhO4!"PÐ%#"&537324&#"32†^h|PÏ^‘^~PQ?BVT@?Ð\t„häþ®wvœ~XQA@Z<<äI%#"/#"&'332654&#"57'&#"&546327654+53232654'7/eCW5aÀ 8‰t—$'À~ #L'²78DùMQ9MTVH+7>-.? 5{©G.!E$?>AM_¯a+Fl&(cô*) 4<Ð7#"&547332654춮춮.'&53$!?)EJ(Y†PU>9S4]a66ad0;JX4PVVþèò¤/9#"&54>7>4646<54&#"#&546324'326ò„c]+922&'&)C \BF<I2F¸gBD[HaoiZ%B-&  $48')*AK^k%.98Gm5(‹AL[þû–¤0=%#"&547.#"#.#"53&54>326324&#"326–lZMg1 -&BR_XVS C^[-YYk‚#T?ÙZkcM7,-":6C[00%'7-C!FO¡:dGEEtXAY`=QRþ衤"#"&54733254&#"#&54632¡dbQl,F,H7‚4>-9FdFKeKcjaP>=5E7I¨/@A:-4!&.FTUJþ衤2#"&547332>54򂂮&#"#&54632¡ÂRoFF9*:> '.8.5@FiQFg5.>(0ècQ@8==9G&&@0&<(2C)-6;5PUND1J ]Vä$0%#"&547#"&54632632$4&#"324&#"326Vg^QpJ,A>QeIG^:2QLPþÕ9/.13*/ 9@B?D>?9Ú`ziQf¸(T>HZUF=”.{ì^=D0*9þøD]lF?Q^À¤'%#>54&#""&546326324&#"326ÀSF&-:7@(n¶rv_Q=8SQcþ®C=GCCDE>äs])t89P429\wu\_t==nS=RXIFYg£¤%#654&"#&54632£;F;@xA;F;mVWk×pSNv?[\>tPUnWvvþ蟤+#"&547332>54&+53254ȔŸ!*, $L:Us F D<, '((A&C*BC2CUF9NI%cT@55@#654&#"#54&'"#54&#"3#&)53&54>32632632-.F.,(SF'+(-F"&a7M*CRþßÿTqN:L!%V#>%TATMUKX+Dbhg4-5)le)<¯1M1&¸”:Q¦8bIII) I`£Ð'%#"&5463254#"#&546324'&#"32£\]Zrm\K5urFiSP]F(&-@>A@xÑ_ruZ\y?´…„ R_]PþµX!!`CB[£Ð*%#"'&54632327#"&#"6324&#"326£k^F:=&%-A@Ó^u01}OIZCnÃ:w[B^V@d##]Œ¤(%#654&#"#4654.#"#&54632632ŒI2K2:&%.3) $>0[%+þè¤.#"&5473325#"&547332654'53273ÂWgSr,F,E9ƒCX4V=;QE($!&,aK<>jp_R@;5E9G”­) 4;>B9$)("/H@ŒÐ1%#654&#"#54&#"#&54>53632632ŒIXW>Q)%W;SR9B.–&53R=@Ï%97)+7:þèQ¤<#".547332654#"#54&#"#"&547332>32632Qqm;mL@cEQWK$$<#:%1=&F&#*(!T89#n‡+[=:/)@CNiSJR4&‹‹--+4+;0-$,%$))#@J9þ蛤.:#"&54733254#52654&#""&54632632%4&#"326›xfhA VIœz9A//[k jmPf53aDMm76þµ>65C?=;5=5E8H¨0$5u:N=Šþü ¤6%#654&#"#4&'&#"#.#"53.54632632 4F446.$ <'<6jT‚%u#VGj]2{[9AfZ(C:dI[ï=QDF8O"3aq9 eAf„ 'b1C ;,‰H[{+$Okþ衤$#"&5473326=#"&5473326753¡a`So,F,H7D>>BJ\3F39/%C=5E8HWGâ2ZJPHEO0F% Ÿä$/%#"&5463254&#"#54&#"56326324&#"32¸dX\mjZQ4$", 1 1?),C='P>9F;@??@A?×Z}v][v:ù"-5-<22:=F)??T@þ?†]^BC]šä*%#654&#"#4632#6324&#">šKFKA9-S |Gi6#E95/þèZ¤6%#"&5467332654&+532654&'&'.5473Z9.05•lŸšE9FAAx~Qk=;?B;<(*!F'77'Ë-< P4jr£XµJ[®e›SOC,y??@;9?B?u=7.2518,#ù:v[]v{\yAS??)þB^]†]\þèÐ%/%'#"&54733265#"&5463237'&#"26wYmQl,F,D9H<3Z=TU@J?=5E9GSKKP=?NP|þ~TonoY6#&78£Ð%#"&537324&#"2£mZRl<’N_]kF>@{7‚ÏZunRþ•£dw¡†`šF`þè¤M#"/"'5326549'.#"&546327>54+53232654'7H/@&c‘+8V„HM0*5.$«P )11J9M#T¨5}Š$=,¼] 33<[.:OÍqB*@F#=.+)#+Iƒª$6779LI¯‚< 5!Ç':$H¼Ð;%#"&547332654&+53254+53264.5473¼pVdtFCM6L $SREDST 6LL6AYI:'$*/&(-RKfcNM.4;'<5=<. 1( &/(+ 1$&/ <ÿüXê=E%#"'&'5767632327654'&'53254'&'532654/54#"6XUC_NC12+V-ËöJ3@3 P4E7E6/XmT/;8Hþ¤)1¡X+"l[ 6lSy-•WþÇ@; 6 :+ 6)7@E5D8#>?*z3^EKDÿûlŠ&'567&5462'4&"6lWPQV1?iXXi=3A6`6ff 56jHZZHj6º3993Z..þî…x!#"&5467327654#"'7#5!632… (rN_$ 'D5NY$!„Ð*‹ …4r/=YL'6)/4A1"W—Ü4èþîˆÇ:#"&54732654&+532654.54632'654#"ˆhXL^*!A1>FT<--%X5LL5NF"#A1g+ W´Ê(3##"&5476;5#"5476323#3'54#"35#"32´OUFN^2/S\\´0/MHSOOO†dr$FNNE$=5dxGUXMO,(H™M(&MEn4H|kaf>þÛu@5;ÿÿþèò¤¹ŒÀÿÿ<ÇD /FÀÿÿNäsÃ8ä05wÙ3!2#'32654&+5‹žŸŠ¼¬lppl¬ÙÂþ¬ÃRŠ‹5ÿö¸Ù'%#".+#!232673264&+)(=X, 5)p]-luE<<7 þÂCKKCÂVG-:;:-þËÙogHeaF65DxDÿê&Ù##5!7]ð<‡ýy‡RRÿéÈÙ,4##"&5332654.#""&4632675#5264&"è0Dk@!ZLNNTF$-/S5?O9X~XX? 6u4Ë&6&&6ÙA~=]l9c‹sX~]B-UJ-><9gZoo´n„Aþf>>f=ÿé­å &"32654&3254&#"#5632+ &632|tŽtsŽåN1 {=GLÀþÄÂÂŒ¹“¥þò¥¤„Цà:Oš1N ÓÓVÓ¤5’Ù#7#5’]]]ýúÓii*ÿé?å2732>54.'!53&54632&#"3##".'{)˜-A";5,ÿ„nuz¢;N%m3=%Ödi5oQ(KJ=žc2,ADYaWo)Je)$!AI\&=<";)$ÿéöå$.732>54'7#".532'654&#"¥=E:CH:%•*&A>#Ò’/VSE4¼-@Û~0'ã2G!1HqDÚBJ6T~L¯æ-KeŽU'D_6å 0’JS[zN5¼Ù25#"'#37&' pA@3/c^^?iiBIþúÙþœ]ÿé{Ù74>732?33#"& G&Lòq¹¸oþ­&U@Ud-#, åþ…{ý_OGÿêfÙ %!#3# ³þçMcxhepxÛÛÙý')Lþ´ÿëÿé„Ù72653#"&=3·@0]o_^m_87TMýÝ_nhY@/@D5@Ù !!!!!’®ýõùþdLúRÙRéR æÙ"7###"&463233!$"32654©ÔiþÃ]) L42L )]=ýÏ8###{ûûþ†{2A]€\B2 þô-3"#32$#äå7#32>54&#"#4632¾^^&C@&\C3MTv`o…3XcÍÍ~`%J5cdV>jwކFi9ÿãÿé¢ð.9"&473327!#"&547332>32!4&#"Ò;LO,fþÝ %=)7 327&54623267#53##"'7654."Ëbl$<   ?0+/wgªgw/*2@6Â/ ehRLMM_bI 6) H   ,.»«ªª«½KIAAb„11Ÿc¥<_7$ $7_<¥Ù !# #333Ôf¨£f»h‰¢d¦†hWý©Ùý°Pý°P ÿé7å232654.'&54>32#4&#"#".54&Á%1(BJ 2:"B+U[S,%Y(88(pq AL9&™%’*?"LI+.6Q*4 !2(]l5BR!D=CZ2`‡ !5]<½2ð3#4632#52654&#"]‰c)MH+p\58S8CK#\q.W32#.#"32654&'#53gKwG/0GyLî+_^Wj{€m^aHSFF~}At3Ni`12bjO4îNN¢Œ‰¡O:A=QìIo_(KA'5ãÙ !##33#¾bÏXØÔXcýÙý…{ý'cñð4>32#5#"&+532;4&"+HL*c‰]SU}%%YK†H;W,q\ýÝ–`R$GZD@ÿþÿéSÙB32654&%4&#"#"'#"&5467'63267#53#32>32"  439³++"6 X'>F9>)PW-*b67J² C 3Â6(!#4!M\k'2P) -CZ"d”*%,%R,.#‘6D\-hBHf7P>j_pAA=R&/&ZBÿé‰å463233###"&"326&¯ž«x^^v±•Ž»Mt|~qr}}a³Ñ°—;ý'L¢ÁÚУ‡¡¢¢5fÙ !#3!3# þ‰]]w]]Lþ´ÙþÅ;ý'ÿéÖÙ##"&'332654&#"'675#5E0Yh}k^pTkENMDMH'V4ÙA€˜u•k`~j]bo<,G‚A ÿé§Ù3#32?33#"&=# ÔC&Lòq¹¸oþ­(S@U8T8 åþ…{ý_OG4JÿéÝå #"&632.#"!26ÝÀ žÂ Á^‹pmýþ ‹ÔŒa¢ÖÓVÓÔ}•–|Fu‹Œÿ~æÙ!535.=#53533#353æþá¡‘@@]¼¼8HA]‚F<[söFÍÍFè09 ÿé·å$326=#5!#'#"&54>32#.#"{$9^>-b   ¡[Ž "ŠþÍ;3)''*9g)h $0=þ,Š M+2 Y5Ù32#54+#’ f‡]©‡]Ùþí„VìÒ¢þŒÙ;Ù !!5!59þL¶ýÕ¶þfÙTýÍRR5R ð!#53>32#5#".'#53#;4&#"ÞÂ2 OZ4c‰]3YN 3Â.mŽKCpGAA>Pq\ýݲL32#"'#"&54>7327&546zDUKˆ‹LJ4_'CI)ClE./`DbDAUqx+$BI3)-Š=ED]‰Ã?E?jg;44z{'C2I8$GZ&6K'hÿéÀå*94632632#"&'732654&#""&547&#"72>54`HC<"7> BQ/.WH¢Hb!4Ì@  Ô‰ˆ11mXZd.18#%51C}¹³¢¢³Áz`_`_—=^8# #8^=–ÿørå1!##"&'732653332>32'7>54#"#"'>dÁ#[CZA5(#*d¶c0 3?„,  1 2?: EkNB#18hMý›eY23h!3E  32& ÿéð?.#"324&#"#4>32#"'#"&54>7327&54632GN#*e;ˆ‹LJ4_'CI)ClE./`D`H@Tqx+$BI1'H8(P3-"‡?jg;22z{'C2I8$GZ",=no9$ÿé>å6&#";#"32654#"#5632#".5467.5432Êx™]A8LBa$O8]ID:2)>[*DE0Ag>(E=81ù¹/GPg,IRf0.3 ,+Q @3+=%"3D=?l85„2ÿébÙ 3#"&53!!3265]™€‚•]vþŠeUXdÙþn‚oÍFíOOTJÿélð*2>32#"&'"&463275332654&#"264&"è2¤K³°šŒew +W~XX?2N1_7'YoŠ{;}#Ó&6&&6l@DðÌ“¸sjZmo´nG>†t"0H-"¼26þ­f>>f==Ù 33##!%5=]]þÃ=Ô_zþ…Rþô Rûû5UÙ %#!33232654&+U‚dþÆ]¥–ˆþ=Ô@RQAÔâcÙþêxf“R=@PÕÙ"&533273632#4#"#A:I0,^'A:I0*^'LLNnþÎLLNþ¨ÿè›â =G32654&7"&54>7.54632>32#52654&#"'654&#"|13($Uz.<S`Mši.*@78G9B@ 6M\XE ,++:KR(02@3'#<Ä&* ^6HftR0L6"-R3;UV>ZB;SQ"*1<@!*!%J5FÙ!4&'5254&+#!2å­f?8™KCÂ]-luOC•wÅ _€:cniÊcýddÙý—)@²²þÄþÓiý' ÿé4å5732>54.546323!53&#"3##".'p)˜-A".JYYJ.uzPq7ÿm$W3=%Ödi5oQ(KJ=žc$=-,-3H*aWXFAAPe)$!AI\&=<";)ÿéŒÙ52#"&5##5!3264&À\p"54.54632&#"#".'p)˜-A".JYYJ.uz¢;N%m>]m]>5oQ(KJ=žc$=-,-3H*aWo)Je =-:9X3&=<";)#ÿéCä,7>54&#"'654&#"#".54>32632%32654&./4*/_W K,X0Uv2pY;X+>nI@dEXW^VMýî<.+E`° A)-CŽD*?4T `Ls­bšZP|I21clLHvKgl ŠTYÿûÿè¼æ3<E"654#"&54>7&54632#"&547'32654%3254[232œDRJFY($B'MQQ>?QQM'B$(YFJRDi±S<)3.)<”>&0/'>þ¶RFaiFJ<8+77 J>DNND>J 77+8<JFiaFRO‹NH><6,66,6<>H2÷å"!!4632#54&ÿ@0hþ;o_^m_8—TMþ\R_nhY@/@D5úÙ!!’hþ;ÙýyRÙÿé“å4>32#.#"32673!".0GyLî+_^Wj{€mZ``!þõKwG/d2bjO4îNN¢Œ‰¡ejþß3Ni`ÿé«Ù&#"&=&5463233%54#"#3265«ifžbËPC=P´]þš9"´],+‚N~]piXŠMbW;eWþ©NZ5,?Wy„XIÿéå(72#'2654&#""&547&#"3#53>3262>54Jbl\@&'=2+/wgªgw/*2@6Â/ ehRLMM_åjSUg\7(84»«ªª«½KIAAb„11Ÿc¥<_7$ $7_<¥5CÙ +#!23264&+Cq[å]-luþOÂCKKCÂ]qþËÙoãDxDÿé‹å'4>323#53.#"32654'7#".-EvLq‚ÔVUOir€mC_6FŽsKwG/d2akO4jnTTDB Ž‰¡D,"O?NOq3Ni`ÉÙ 3##5!#3¿kL˜„M`þ[…g»TþBý'5¿Ù 3#3%632'>54&#"#“^^V'%*/ 3-'$^þÿÙþ¬Æ :')1E  ( þ·”5xÙ #33 #’]]kxþ×,nþÿÿÿÙþqþ×þPvÿêíÙ %5#"32>+"&54>;™@RS?+@ ]„bb„/Ta:jÖ›ZA>\ 30ýþd‰‰dA_4ÿèå&%'#".4>3277'4&#"32657§R2AžIvD##DvIžA2RH/wRFnV_qq_VnFRw/™yS‹Kvz€vK‹Syoºys@}¡‹Œ¡}@syºÿ¥‘å+327#"&'#"&54>32#.#"326=£0?,82FVh+‡?“±2KP}¡_qStŒ3iJSˆL¸MTF \Q27Ó©0ajP5zoFQ£†2_b<‚^1ÿùÿéYå,8I'7327&5463232>7.54632#"'#"&4654&#">54.#"WO1!dHQUb<28>"BK9 sWFBcD8cwGcO><`{!!.þ”%-  Ú MYu󢩬O¥@!5sRui:eŠ»i243ˆ,w^4/;Cþç4ˆ;<_7$ #8^=œÿéÝå ,#"&632654&#"323%3267#"&/.#ÝÀ žÂ Áj ŽvNw“2 -&þ• tIr"";# a¢ÖÓVÓÔþí23ЦNF%!€;Â*/‡¥F>2/o $ÿéüå-7%2>54&#"#4>32#".532'654&#"’:];'/# R+1#Q])R_/VSE4¼-@Ã=E:é~0';+E_b4`’8MBX-Å‹Q’~K-KeŽU'D_6åD2G!ù0’JS[zNÿæÿèEå"73267.54632#"&'%654&#"8"c7CetnuJId+PLU˜,í/"#8KÊFIfT"‘Wcƒ‘–S¤‰VdY >EecW>;b$ÿé"å "%2654&#"632#"&54632#4&#"'QP\B;b V^6jƒ~~xŠ‹‡sjXBIž7TFEU@4^bH:}dm‚¡˜êÙwa:P ÿéðB'777'324&#"#4>32#"'#"&54>7327&547' A4434+_'UKˆ‹LJ4_'CI)ClE./`DbDAUqx+$BI3)MhQQQQœ266D]‰Ã?E?jg;44z{'C2I8$GZ&6K.:ÿñTå 53527&'765462#"'73254+5254&#"'2*!hÖp!4@ŠrgT:k=Dªª<Ç>F)3X75#5à0Qt2ZLNNTF$-/S5%U@.UXE1*€J4ÙA€ g…Jc‹sX~]B-UJ-tŸ”'½ hŠï"ˆA2å4&#"32#54+#4632žAER7 f‡]©‡]…b`„F>E\0„VìÒ¢þŒ\qkVÿéOå*277'.#"326=#5!#'#"&54>lKnCRH/wRW`Qr}$9^54&+Uvaþ·(=Z-eF?}’´´/1>D?ãÐ^rÙ$;;p/Tèèþ³+49Eû2{Ú %!ÁýFIþ\†þâTý&ÿÿ2{}&7Jš2{Ú% !ìþêþëºü·¤TâþTÚÿÿ2{v'[lÏ72¤Ú7-†{þ…TrŒááý²Úþ“ÿÿ2¤'[[9ÿÿ2¤'[—['[Ç[9ÿÿ2¤Ú'~oÿ)9ÿÿ2¤Ú'[92¤Ú Pþ…{TýŽNááNý&mÿÿ2¤'[[>ÿÿ2{Ú&[5ÿÿ2{Ú'[Ô5ÿÿ2{Ú&[7ÿÿ2{Ú'[Õ7ÿÿ2{v&[8ÿÿ2{v'[Õ8ÿÿ2@Ú&[9œÿÿ2@Ú&9[šÿÿ2@N'[ñ§'9œ[ÿÿ2@N'[U§&9[šÿÿ2¤3'[‘å'[nŒ9ÿÿ2@Ú'>œ[ÿÿ2@Ú&>[šÿÿ2@N&['[F§>œÿÿ2@N'[š'[ª§>ÿÿ2¤/'[qè'[†ˆ>2¬¼#"'#"&=326=326=3¼B.3""3.B6"0"6"0"6.B''B.ææ""ææ""æÿÿ23*@&[J¯þÃ2¬Ú'!5VUþ¥­à––4.2¬Ú#ª;­ÚþÒ.2¬Ú3#28­;ÚþÒ2*’Ú "&53265’g’gF>X>ÚIggI,>>,2*’Ú 462#4&"2g’gF>X>*IggI,>>,2¬â 2#5264IggI,>>, g’gF>X>2¬‘ 2#"&46264&#"âGhhGIggI*??*,>> hhg’gþæ>X>>X>ÿÿ2¬Ú'S†Sÿÿ2®ïÚ'~‚~23¦§462"2"0""0U0""0"2¾^ù5!2,¾;;2®^Ú 33##5#53ª;yy;xxÚy;xx;2®^Ú##5#5^y;xÚ;ññ;ÿÿ2_'TH(5ÿÿ2{'T^(7ÿÿ2øÚ'Tá9ÿÿ2Â'T«(>2{Ú 3 {þ\þ[_FFÚý&ÚýÊ6ÿÿ2{}&eJš2{Ú3 # 2¤¥_þºþºÚý&6ýÊÿÿ2{v'[jÏe2¤Ú 5 2rýŽÏþ1Úþ“þ“Zÿÿ2¤'[[gÿÿ2¤&g'[—[[Ç[ÿÿ2¤Ú&g~oÿ)ÿÿ2¤Ú'[­g2¤Ú!  ¤ýŽrþ1ÏmmZþíþíÿÿ2¤'[[lÿÿ2{Ú&[cÿÿ2{Ú'[Õcÿÿ2{Ú&[eÿÿ2{Ú'[Õeÿÿ2{v'[kÏpÿÿ2{v'[jÏqÿÿ2¤Ú&[gÿÿ2@Ú'[šgÿÿ2¤N&[&g[[§ÿÿ2@N&g'[š[[§ÿÿ2@Ú&[lœÿÿ2¤Ú'[þlÿÿ2@N&x[F§ÿÿ2¤N&y[ȧÿÿ2¤'[lk'[œkl2¬T-TþÞ"ÒÒ¬««5vw2®mÚ3#2;;ÚþÔ2mÚ4&#"#3632#ä! &66 4&86#0(‘m€+0!Ç2´Ú"&53265´ÅøÅT•°•ÚþJv®®v¶þJS}}S¶ÿÿ2´}'J6‚2´Ú3462#4&"2ÅøÅT•°•¶v®®vþJ¶S}}SþJÿÿ2´v'[Ï‚2¶Ú!2#!5!264&#!2A…¾¾…þ¿Ab‹‹bþ¿ÚÖþÒÖT¥è¥ÿÿ2¶v'[Ï„ÿÿ2¶v'[mÏ'[Ï„ÿÿ2¶Ú'~dÿ)„ÿÿ2¶Ú'[Ö„2¶Ú)"&63!!"3!¶þ¿…¾¾…Aþ¿b‹‹bAÖ.ÖT¥è¥ÿÿ2¶v&‰[9Ïÿÿ2`Ú&[€¬ÿÿ2^Ú'[¸€ÿÿ2^Ú'‚ª[ÿÿ2^Ú&‚[¸ÿÿ2^v'[±Ï'‚ª[ÿÿ2^v'[ ÏŽÿÿ2¶Ú&[„ÿÿ2bÚ&„[¼ÿÿ2¶v'[Ï‘ÿÿ2bv'[Ï’ÿÿ2bÚ'‰¬[ÿÿ2¶Ú&‰[ÿÿ2bv&['‰¬[³Ïÿÿ2¶v'[&‰[Ïÿÿ2aÚ'‰«&[¡[a2m«#"&46;#"3ªÒEaaEÓÓ,55,³FuªvFOlNÿÿ2%Ú'~¸€ÿÿ2%Ú'~¸‚ÿÿ2%Ú'~¸„ÿÿ2%Ú&‰~¸2Ú#"&54632#4&#";”€b€‘eb”R^FE_`DlARPx“Sþ à:nB45Jÿÿ2}&¡Jñ2Ú532654&#"#4632#¼lD`_EF^R”be‘€bARJ54Bn:þ ôS“xPRÿÿ2v'[¼Ï¡2Ú#"32653#"&5463”lD`_EF^R”be‘€b™RJ54Bn:àþ S“xPRÿÿ20v'[ŠÏ£ÿÿ2—x'[ñÑ'[!Ñ£2Ú32#"&5332654&+¼€b€‘eb”R^FE_`Dl™RPx“Sôþ :nB45Jÿÿ2)v'[Ϧ ÿÿ2œÚ&[Ÿ~ÿÿ2ÊÚ'[$Ÿÿÿ2ÊÚ&[¡¬ÿÿ2œÚ&¡[öÿÿ2Êv'[hϪÿÿ2œv'[¼Ï«ÿÿ2œÚ&[£~ÿÿ2ÉÚ'[#£ÿÿ2­v'[Ï®ÿÿ2Év'[‰Ï¯ÿÿ2ÊÚ&[¦¬ÿÿ2œÚ'[ö¦ÿÿ2Êv'[œÏ²ÿÿ2¬v'[ϳÿÿ2ÉÚ&[¡&[a¦«2l7Ú32#"&533264&+‚+ŠR83H8# #//#+Lp6:7(÷#42l7Ú#"326=3#"&543ç+#//# #8H38RŠL84#÷þñ(7:6pÿÿ2’Ú'~%Ÿÿÿ2’Ú'~%¡ÿÿ2’Ú'~%£ÿÿ2YÚ'~ì¦2Ú4632#4&#"#2‘eb”R^FE_RPx“Sþ à:nB42ÿÿ2}&¿Jî2Ú#54&#"#4632R_EF^R”be‘224Bn:þ ôS“xÿÿ2v'[¼Ï¿2Ú75332653#"&2R_EF^R”be‘È224Bn:àþ S“xÿÿ20v'[ŠÏÁÿÿ2—x'[ñÑ'[!ÑÁ2Ú%#"&53326=3‘eb”R^FE_RÈPx“Sôþ :nB42ÿÿ2.v'[ÏÄÿÿ2.Ú&[½ÿÿ2ÉÚ'[#½ÿÿ2ÉÚ&[¿«ÿÿ2.Ú'[ˆ¿ÿÿ2Év'[gÏ'¿«[ÿÿ2.v'[¼Ï&¿[ˆÿÿ2/Ú&[Áÿÿ2ÉÚ'[#Áÿÿ2Av'[›Ï&Á[ÿÿ2Év'[ŠÏ&Á[#ÿÿ2ÉÚ&[Ä«ÿÿ2/Ú'[‰Äÿÿ2Év'[›Ï'Ä«[ÿÿ2?v'[Ï&Ä[™ÿÿ2ÉÚ&[¡&[aÄ«2l7Ú#"&5332657R83H8# #/Ü6:7(÷#2l7Ú3326=3#"&28/# #8H38RÜ#÷þñ(7:2Ú#!5RþfÚý&ˆRÿÿ2}&ÙJÜ2Ú!!#2ìþfRÚRýxÿÿ2v'[¼ÏÙ2Ú)5!3þšRRˆÿÿ20v'[ŠÏÛÿÿ2—x'[ñÑ'[!ÑÛ2Ú33!2RšÚýxRÿÿ2.v'[ÏÞÿÿ2Ú&[×ÿÿ2ÉÚ'[#×ÿÿ2ÉÚ&[Ù«ÿÿ2Ú'[xÙÿÿ2Év&[Ú«ÿÿ2v'[x&Ù[îÏÿÿ2Ú&[Ûÿÿ2ÉÚ'[#Ûÿÿ20v'[ŠÏ&[Ûÿÿ2Év'[ŠÏ'[#Ûÿÿ2ÉÚ&[Þ«ÿÿ2Ú'[xÞÿÿ2Év'[›Ï&[Þ«ÿÿ2.v'[Ï'[ˆÞÿÿ2ÉÚ&[¡&[aÞ«2m(Ú332;»mmþÍ:2pâÐ "&463"3âIggI,>>,pg’gF>X>2m(Ú#533(ö»;m:32mÚ4>54#"#63232%56%B4r2@3>3¤m(A+&/7{:.&F).22Ú34>54&#"#632!2)AOPA)P<… Xãe~3NYN3\;cE<89L,9I¦öt\4fKK8;P2–ì332654&#!5!2#"&5ýRJ54Bn:þ–~S“xPRblD`_EF^R”be‘€bÿÿ2–&öJûÿ2–ì#"&5463!!"326=ËRPx“S~þ–:nB45Jb€b€‘eb”R^FE_`Dlÿÿ2–ˆ&ö[Óá2–ì754632#!5!2654&#"ýRPx“Sþ‚j:nB45JŠ€b€‘eb”R^FE_`Dlÿÿ2–ˆ&ø[dáÿÿ2–ˆ&ø'[Êá[úá2–ì%#54&#"3!!"&54632ËRJ54Bn:jþ‚S“xPRŠlD`_EF^R”be‘€bÿÿ2–ˆ'[Œáûÿÿ22ý&[Vôœÿÿ2 ý'[dVôÿÿ2 ì&[Eûtÿÿ2–ì'[ðEûÿÿ2 ˆ'[áÿÿÿ2–ˆ'[Œáÿÿ2–ˆ'[öá'[&áû2l q#54&";!"&5463284#÷þñ(7:6p¼+#//# #8H38RŠ2m’Ú26=3"&=hHdH6g’gÚ½2HH2½½IggI½2l q5432#!532654&"Àp6:7(þñ÷#4¼+ŠR83H8# #//#+2–ì!#532654&#!5!2Î224Bn:þ–~S“xR_EF^R”be‘ÿÿ2–& Jýÿ2–ì3"&5463!!";úPx“S~þ–:nB42‘eb”R^FE_Rÿÿ2–ˆ& [ðá2–ì2#!5!2654&+5ÎPx“Sþ‚j:nB42ì‘eb”R^FE_Rÿÿ2–ˆ'[2á ÿÿ2–ˆ'[˜á'[Èá 2–ì3#"3!!"&546ú224Bn:jþ‚S“xìR_EF^R”be‘ÿÿ2–ˆ'[ðáÿÿ22ý'œ[Vÿÿ2 ý'[dVÿÿ2 ý& t[Vÿÿ22ý& [ŒVÿÿ2 ˆ'[dáÿÿ22ˆ'[ðáÿÿ2–ý&[V ÿÿ2 ý& [dVÿÿ2–ˆ'[2áÿÿ2 ˆ'[2áÿÿ2 ý&t[Vÿÿ2–ý&[ðVÿÿ2 ˆ&[V&t[2áÿÿ2–ˆ'[ðV&[¾á2l q";!"&546¢#÷þñ(7:q8/# #8H38RmÚ %7'%’’þúŸŸ’$L65bUW_442>Ú  ->þÐ0ýô\þ¤ þÐmžt[«°½Yq2ÆÚ!".=3;rAo[5TƒUhE3rThUƒT5[oAÚþkXJ£Eh<ÿÿ2Öv'[0Ï%ÿÿ2>v'[˜Ï'[ÈÏ%2ÆÚ2#54&+†Ao[5TƒUhÚþ»43,J?A=à  +(.971"*%1:8;2mÚ 3#"#5463Ò1;+:1\DÚÒ%%QGCA2m˜Ú "&=3;;mœ6‚]Qm›ndX]‚62W Ú&+532#"&5432ËDA7FZ44,|4%ï#È’9C5@)*@' 2W Ú#"&546353#"32654.pu,44ZF7AD%%ï@*)@5C9’ÈO@ 2)F462"462"2#54&+5Ò$$º$$(D\1:+;$$$$¢ACGQ%%Òÿÿ2ÀF&?lÿÿ2ÊF&?‰ÿÿ26F&?¦ÿÿ26F&?Ä2 Ú%326=3#"&54&#"#54632ÈE42GR~MLE42GR~MLú;mT6‘¥NzŒP;mT6‘¥NzŒP2 Ú%4632#54&#"#"&=3326vLM~RG24ELM~RG24EúPŒzN¥‘6Tm;þüPŒzN¥‘6Tmÿÿ2 v&E[ÖÏ2$â+%&5463232654&'52#"&/.#"ê„XEn >,-?@/WloSVa H%1P %*TT ×w‹TT~=+GNPTSur|K^|64PX- ÿÿ2$~'[A×G2$â+%>54&#"#"&5463326?>32:*% P1%H aVSolW/@?-,> nEX„êT -XP46|^K|ruSTPNG+=~TT‹w× ÿÿ2$~&I[A×ÿÿ2·Ú'D«[ÿÿ2¸Ú&D[ÿÿ2·Ú'E«[ÿÿ2¸Ú&E[ÿÿ2·v&['E«[Ïÿÿ2¸v'[&E[ÖÏÿÿ2´â&[Gÿÿ2´â'[Gÿÿ2´~&[Hÿÿ2´~'[Hÿÿ2´â&[Iÿÿ2´â'[Iÿÿ2´~&[Jÿÿ2´~'[J2k ¦*2>54&#"#"&546332?>32†  4 0 ?86JG9*)? I-:Vš¡ :4##R=0QJMS6743/DS77[OŠ2ÒÚ33#!kgùùTþ´Úþ½þiCÿÿ2Ò}&\J22ÒÚ!#3™9þ´TùùÚþiþ½—Cÿÿ2Òv&\[Ï2ÒÚ!!3#kþÇLTùù—Cþiþ½ÿÿ2âv'[<Ï^ÿÿ2Jw'[¤Ð'[ÔÐ^2ÒÚ3##3!™gùùTLC—þ½ÿÿ2âv'[Ïaÿÿ2mÚ'Z›[ÿÿ2nÚ&Z[Èÿÿ2mÚ'\›[ÿÿ2nÚ&\[Èÿÿ2mv&['\›[›Ïÿÿ2nv'[È&\[Ïÿÿ2mÚ&[^›ÿÿ2nÚ'[È^ÿÿ2}v'[×Ïiÿÿ2nv'[<Ïjÿÿ2mÚ&[a›ÿÿ2nÚ'[Èaÿÿ2mv'[‹Ïmÿÿ2~v'[Ïnÿÿ2mÚ&[¡&[aa›2mBÚ#7#533zH››;ÕmÈ¥j2mÇÚ '#7#'ýV@5l_ai4>mÃÃmêêþ“Ã2nžÚ 33##5#53Ê;™™;˜˜Ú•;œœ;2nšÖ ''7'7p*ŠŠ*ŠŠ*ŠŠ*ŠÖ*ŠŠ*ŠŠ*ŠŠ*Š2 È26=!!"&=ƒEhI“þ¿}¤xÈÒE_`DÒR”b€€bæ2 È3#"&=!5!265»QzPR}þ¿“IhEÈæb€€b”RÒD`_E2ÿþ Æ54&"!5!5462»EhIþmA}¤xÒE_`DÒR”b€€bæÿÿ2ÿþ k'J¾þîz2ÿþ Ç#54632!!54&#"ƒQzPR}AþmI44Eæb€€b”RÒD`_Eÿÿ2ÿþ d&z[½2úÚ532+#3264æb€€b”RÒD`_E‰QzPR}þ¿“IhEÿÿ2úv'[—Ï|2úÚ73264&+332+2ÒE_`DÒR”b€€bæQEhI“þ¿}¤x2úÚ#";##"&46;úÒE_`DÒR”b€€bæ‰EhIþmA}¤xÿÿ2úv'[ðÏ2ÿÿúÚ%#"&546;3#"3úæb€€b”RÒD`_EQQzPR}AþmI44Eÿÿ2v'[wÏ&[‡ÿÿ2–v'[ðÏ'[ð2m%Ú#";#5#"&46;%F2A@3F:HWYFT¢(F"¥lFpK2m8Ú 7'5572’’ŸŸþú’#L65bUW_442>Ú -5 5%20þÐ þ¤\ýô0mžt[«°½Yq2ÿÚ &5462+264&"ÿþ\þõdŒddF‚Fýå3F33FÚý&Ï3.FddŒdâ6‡F33F3ÿÿ2ÿ}&‰J 2ÿÚ!#32"&547264&"ÿ^þº‚FddŒd Õ3F33F6âdŒddF5,ÏýóF33F3ÿÿ2ÿv&‰[ðÏ2Ú35'"&4632%"32654&20ÜdŒddF/1ÊýÖ$22$#34^LˆFddŒdþîÜ3#$22$"4ÿÿ2N&‹[0§2Ú! 632"&="32654&ý,Ê1/FddŒdÜ0ª"43#$22ªdŒddFˆþ´(4"$22$#3ÿÿ2N&[0§ÿÿ2¢N'[š§'œ[Cÿÿ2šN'[0§&[ôC2yŸÚ%7632#"&'6264&"œþ–è#22# /Zµ<΄2F2*2K2´Ú"&5462#"'265264&"´ÅøÅdŒddF-)•°•þ&3F33FÚþJv®®v FddŒdyS}}S¶‡F33F32´Ú326=#"&462"&5$4&"22T•°•)-FddŒdÅøÅ.3F33FÚþJS}}SydŒddFþôv®®véF33F32´Ú!#4&"632"&5462264&"´T•°•)-FddŒdÅøÅýÒ3F33F¶S}}SydŒddF v®®véF33F32´Ú3462"&463254&"$4&"22ÅøÅdŒddF-)•°•Ú3F33F¶v®®vþôFddŒdyS}}SþJ‡F33F3ÿÿ2´v'[Ï”ÿÿ2´v'[Ï•2´Ú35!264&+"&46;2#"2642^S}}S!dŒddF´y««y‘F33F3T°Ò°)-FddŒdÔþÎÔ†3F33Fÿÿ2´v&˜[Ï2´Ú)"&6;2"&547#"3!"264´þ¢y««y´FddŒd!S}}S^‡F33F3Ô2ÔdŒddF-)°Ò°23F33Fÿÿ2´v&š[9Ïÿÿ2Pv'[£Ï'šœ[ÿÿ2v'[Ï&š[x2mhÚ264&"#";#"&546;2"&54ôB)33)¤¤>-,?†. . n19,+:,4–?-,??,2mÜÚ'/7326=3#"5!"&546323&54632&264&"264&"ûW85)`þ€->>-,?J>-,?¢ . .þÞ . .819,+:,4–?-,??,,??,6. . . . 2TÚ'4&#"3254&#"#432#"&54632#oNRk<5oTs2I+L1Vužsp¡TÌNoTKLKy&“S,$D=%ƒemƒŸoþ42TÚ'#4632#".54632#4&#"32654&#"†T¡psžuV1L+I2sTo532#"&53†oNRk<5oTs2I+L1Vužsp¡TNoTKLKy&“S,$D=%ƒemƒŸoÌ2–f!5!332654&#!5!2#"&5–ýœdþgRJ54Bn:þ–~S“xPRRþülD`_EF^R”be‘€b2–f5!#"&5463!!"326=2dËRPx“S~þ–:nB45JRR²€b€‘eb”R^FE_`Dl2–f5!54632#!5!2654&#"2dþgRPx“Sþ‚j:nB45JRRþv€b€‘eb”R^FE_`Dl2–f5!#54&#"3!!"&546322dËRJ54Bn:jþ‚S“xPRRRþvlD`_EF^R”be‘€b2m Ú!5!#54&";!"&54632 þ’nŽ84#÷þñ(7:6p¢8þã+#//# #8H38RŠ2ÒÚ'5!";#"&5463 |BþZ:nB422Px“SìztþÀ^FE_R‘eb”ÿÿ2ÒÚ&Ô[¸32ÒÚ7!2654&+532#ø|þ¾¦:nB422Px“Sîzt@^FE_R‘eb”ÿÿ2Òì'[ EÖ2ÒÚ%#"&546;#"3!5 ôS“xP224Bn:¦þ¾î”be‘R_EF^þÀtÿÿ2Òë&Ø[(D2m Ú#"&5463";5Œ)697:A÷¿ó>25B6A:¼L2LÚ333##5#535!kgùùzzTxxþ´Úþ½ËTxxTw2LÚ !3##5#53539þ´xxTzzùùÚþiwTxxTËCÿÿ2Lv&Ü[zÏ2LÚ!!5#53533##kþÇLxxTzzùù—wTxxTËþ½ÿÿ2Lv'[<ÏÞ2LÚ!##5#53533#!gùùzzTxxLCËTxxTwÿÿ2Lv'[jÏà2mRÚ#7#5#53533#3¸HpkCC6DD§m‘i6==632¶Ú 3632#"'#6264&"2T1=PrrP=1TT@\@@\Úþ‹#s¢s##ò\@@\@2ÑÚ#"'#3632ÑtMP:TT8NSrSn8þuÚ76v2ÑÚ746323#5#"&2tMP:TT7OSrÆSn8‹ý&76v2ÑÚ%#"'#3632ÑrSN8TT:PMtÆOv67Úþu8n2ÑÚ463253##"&2rSO7TT:PMtOv67ý&‹8n2Ú !!!!#2ìþfšþfRÚRóRþ½2Ú )5!5!5!3þšþfšRRóRC2Ú 33!!!2RšþfšÚþ½RóR2Ú #!5!5!5RþfšþfÚý&CRóR2ìÚ2>=3"&=##$ , RHŠHNRÚ½ ½½MccMkýxÚ2ìÚ354."#546233ú , RHŠHNR½ ½½MccMkˆý&2ìÚ!#335462#54."$òRNHŠHR , ÚýxkMccM½½ 2ìÚ3##"&=32>5úòRNHŠHR , Úý&ˆkMccM½½ 2ÿÚ  ##37ÿÑ¡T‰ssÚþ“ý{ÚÉÉ2ÿÚ 333#'2Ñ¡T‰ssmþè…ý&ÉÉ2ÿÚ !#'#33ÿ^ss‰T¡ÉÉÚý{2ÿÚ 373##2^ss‰T¡ÚÉÉý&…þè2DÚ46233#"&54&"2g’g1-TTU]6L6 IggIFo†ý&˜q&66&2DÚ#4&"+3265462DT6L6]UTT-1g’g &66&q˜ÚýzoFIgg2DÚ326546;#""&2T6L6]UTT-1g’gÑ&66&q˜ý&†oFIgg2DÚ"&54&##32265Dg’g1-TTU]6L6ÑIggIFoýzÚ˜q&66&2{Ú !3 373H¢^þ\þ[_ÒttÁý&Úþ“ÉÉ2{Ú !# #'zþ¸¢^¤¥_ÒttþçÚý&mÉÉ2¤Ú  57'72rýŽçç;”Úþ“þ“Z‰‰»°Xÿÿ2¤Ú'~ÿ)úÿÿ2¤Ú&[ú2¤Ú ! %5¤ýŽrççþÅ”mmZ‰þ쉻°X2{Ú 3 3!!^þ\þ[_90þFÝÚý&ÚcTþ2{Ú 3# #'!7!^¤¥_9ýæ0ºÝÚý&cT2¤Ú 5 57%2rýŽPT+€Zþ“þ“Z0Æ1þœ²ÿÿ2¤Ú& Lîÿÿ2¤Ú'[Í 2¤Ú % '¤ýŽrPTþÕZZmmZ0þ:1d²2{Ú 33{þ\þ[_RÚý&Úþïþï2{Ú3 ##2¤¥_þãRþãÚý&ïþïþ2¤Ú 5%!5!%2rýŽŠþvŠþvÚþ“þ“ZêRê2¤Ú!#5#5353!%5 5¼þù;HH;þvrýŽDmmRmmêZþ“þ“Z2¤Ú #5462"7#64'3%5 5™ gz#.##.í‰ ‰þvrýŽ–.RB2++2).êZþ“þ“Z2¤Ú! !!¤ýŽrþvŠþvŠmmZêRê2{Ú  3333#'#{þ\þ[_šƒRƒšÊSRSSÚý&Úþô þô þ¢‘‘‘2{Ú 3 ####353'2¤¥_šƒRƒšÊSRSSÚý& þô þô^‘‘‘2¤Ú 5 575#535372rýŽªªªRŽŽŽ€Zþ“þ“Ze…R…1TRTT2¤Ú37!#5#535335'5 575.ŽŽŽþß;..;AªrýŽªêTRTTmmRmm…eZþ“þ“Ze…2¤Ú  64'5'5 5777%462"&'#5ð ¾rý޾Rzzzþ¶.. -C,xqZþ“þ“ZqIRHH)**))B.R2¤Ú % 3#'5#75¤ýŽrªªªRŽŽŽZZmmZe…R…1TRTT2 Ú2657 &5†¥è¥TÖþÒÖ†þ½b‹‹bCTþi…¾¾…—2 Ú%4&"46 ¸¥è¥TÖ.ÖTCb‹‹bþ½T—…¾¾…þi2 Ú7!264&#!'!2#!†Cb‹‹bþ½T—…¾¾…þiT¥è¥TÖþÒÖÿÿ2 Ú'~Òÿ) ÿÿ2 Ú'[ 2 Ú!"3!!"&63!¸þ½b‹‹bCTþi…¾¾…—†¥è¥TÖ.Ö2 Ú% &5-2652mmÖþÒÖmþç¥è¥ÚÓÓþi…¾¾…c¢þûb‹‹b2 Ú!%46  4&" þ“þ“Ö.Öþ“¥è¥ÓÓ—…¾¾…c¢b‹‹bþû2 Ú3!2# !264&#!2ÓÓ—…¾¾…c¢b‹‹bþûmmÖþÒÖmþç¥è¥ÿÿ2 Ú'~šÿ) ÿÿ2 Ú'[ª 2 Ú!"&63!"3! ÓÓþi…¾¾…c¢þûb‹‹bÚþ“þ“Ö.Öþ“¥è¥2 Ú26= &53!5†¥è¥TÖþÒÖT2ÑŽb‹‹bŽ þi…¾¾…—µµ2 Ú54&"46 #5!¸¥è¥TÖ.ÖTýÎ Žb‹‹bŽþ÷—…¾¾…þiµµ2 Ú%3264&+%!2#!53#;Žb‹‹bŽþ÷—…¾¾…þiµµT¥è¥TÖþÒÖT2ÿÿ2 Ú'~hÿ) ÿÿ2 Ú'[x 2 Ú#";!"&63!#3Žb‹‹bŽ þi…¾¾…—µµ†¥è¥TÖ.ÖTýÎ2®^Ú535332y;x®;ññ;2 Ú%#"'#"&533265332653 hIO77OIhT7&%7T7%&7T²Jh>>hJ(ýØ&66&(ýØ&66&(2 Ú4632632#4&#"#4&#"#2hIO77OIhT7&%7T7%&7T(Jh>>hJýØ(&66&ýØ(&66&ýØ2 Ú 2#!5!2654&#!5!2654&#!5îGk##kGþD¼$88$þD¼$88$þDÚ€L*__*L€TO)(OTO()OT2 Ú(2654&#!5!2#!5!2654&#!#5#5353î$88$þD¼Gk##kGþD¼$88$þù;zz;–P()OT€L*__*L€TO)(PmmRmm2 Ú 0462"'#5!2654&#!5!2#!5!2654&+64'¬#.##.6 g¼$88$þD¼Gk##kGþD¼$88$» T2++2)k.RP()OT€L*__*L€TO)(P.2 Ú 3"&5467.5463!!"3!!"3!äGk##kG¼þD$88$¼þD$88$¼€L*__*L€TO)(OTO()OT2 Ú3265332657#"'#"&5†7&%7T7%&7ThIO77OIh†þ,&66&Ôþ,&66&ÔTýØJh>>hJ(2 Ú%4&#"#4&#"4632632L7&%7T7%&7ThIO77OIhTÔ&66&þ,Ô&66&þ,T(Jh>>hJýØ2 Ú 7!2654&#!5!2654&#!'!2#!†h$88$þ˜h$88$þ˜T¼Gk##kGþDTO)(OTO()OT€L*__*L€2 Ú(!2#!7!2654&+#5#732654&#!3532¼Gk##kGþDTh$88$£;ŠÅ£$88$þ˜Š;Ú€L*__*L€TO)(OllTO()Oïl2 Ú!0462"72654&#!3#!2654&+64'!2#!ù#.##.Ò$88$þ˜` `h$88$n þ²¼Gk##kGþDT2++2)kP()Oð.ðO)(P.D€L*__*L€2 Ú !"3!!"3!!"&5467.5463!Lþ˜$88$hþ˜$88$hTþDGk##kG¼†O)(OTO()OT€L*__*L€2 Ú"'32653265%#"'#"&553?¹7&%7T7%&7¹ hIO77OIh TÄ„þj&66&þî&66&–%·ýØJh>>hJ(··2 Ú"4&#"4&#"74632632%#“¹7&%7T7%&7¹þóhIO77OIhþóT„–&66&þî&66&þj%·(Jh>>hJýØ··2 Ú$2#!#53!2654&#'32654&#!îGk##kGþD»»»»Š*$88$  $88$þÖÚ€L*__*L€CTCþiïO)(OTO()O2 Ú ,!2654&+#52#!#5332654&#!353NŠ*$88$<;wGk##kGþD»»»»€<$88$þÖŠ);CïO)(Oll—€L*__*L€CTCþ½O()Oïl2 Ú2462"732654&#!!2654&+642#!#53`#.##.d$88$þÖ‰ ‰*$88$ Gk##kGþD»»»»T2++2)kP()Oð.ðO)(P.V€L*__*L€CTC2 Ú$3"&5467.5463!3#7!"3#"3!äGk##kG¼»»»»þäŠþÖ$88$  $88$*€L*__*L€þ½Tþ½—ïO)(OTO()O2mØÚ3732EŽŽEÓÚ÷÷þ“ÿÿ2ÚÄÿÿ2Ú½ÿÿ2–ìÿÿ2–ìôÿÿ2–ì'[øÿ~ 8ÿÿ2–ì2 Ú%#"'#"&53326=3326=3 hIO77OIhT7&%7T7%&7T²Jh>>hJ(ýØ&66&»»&66&»2 Ú4632632#4&#"#54&#"#2hIO77OIhT7&%7T7%&7T(Jh>>hJýØ(&66&»»&66&»2 Ú 2+532654&+532654&#!5îGk##kG……$88$……$88$þDÚ€L*__*L€TO)(OTO()OT2 Ú$%#332654&#!5!2+532654&+j;;„$88$þD¼Gk##kG……$88$„×,lO()OT€L*__*L€TO)(Oÿÿ2 Ú& >[ž2 Ú 3"&5467.546;#";#"3!äGk##kG……$88$……$88$¼€L*__*L€TO)(OTO()OT2 Ú,"&54632#".5332>54&#"3Ylq\i‹/N†[AypCT%:MH%=\=([Ey>3jYW^bžpM{}S4$N`xþˆ>a;&2>\W32#4.#"3254&#.Ylq\i‹/N†[AypCT%:MH%=\=([Ey>3pYW^bžpM{}S4$N`þˆx>a;&2>\W54.+532#"&54632¢T3)kkN5Y6'&;a>úú`N$5KsCpžb^WYü3>yE[.CPA%HM:%TCpyA&\dR5‹i\ql2ŽÚ+#"32>54.+532#"&546;53#1AikN5Y6'&;a>úú`N$5KsCpža]A;;myE[.CPA%HM:%TCpyA&\dR5‹i\qkþÔ2ŽÚ-462"'"32>54.+532#"&5463("0""0XkkN5Y6'&;a>úú`N$5KsCpžb^z0""0"yE[.CPA%HM:%TCpyA&\dR5‹i\q2ŽÚ+33254&#";#".54>32#"&T3)kkN5Y6'&;a>úú`N$5KsCpžb^WYÞ3>yE[.CPA%HM:%TCpyA&\dR5‹i\ql2UÚ&32654&#"#4632#"&54?!5!ü"- uOGp1" TUA=f™ru£ òþn#±(!-7aZ0*6&2Q[cQRŒZ´\ŒTa2UÚ&%5!!#"&54632#4&#"32654.‹þ§#þnò £ur™f=AUT "1pGOu -±ÈaTŒ\´ZŒRQc[Q2&6*0Za7-!(2UÚ&>54&#"32653#"&54632!!5‹"- uOGp1" TUA=f™ru£ ò’ýÝ)(!-7aZ0*6&2Q[cQRŒZ´\ŒTa2 #&#37632#"&5463"32654&#"[ÈaTŒ\´ZŒRQc[Q2&6*0Za7-!(Yþ§#þnò £ur™f=AUT "1pGOu -2 #)#37632#"&546753#532654&#"[ÈaTŒ\´ZŒRQcE?;;06*0Za7-!(Yþ§#þnò £ur™f=8Q LôS 41pGOu -2 #.%32654&#"#37632#"&5467>32#"ë6*0Za7-!(ÈaTŒ\´ZŒRQc84 '"00"*Û)1pGOu -"þ§#þnò £ur™f=2M0D02 #)4&#"3"&54632#".##2326¸O/)/&2Q[\PQyW>rTKHTAkI=54E(5IIn0" TUA>e˜sx \„ƒ\þA#3RbcR3r2 #&%3##"&54632#52654&#"32>ãÈaTŒ\´ZŒRQc[Q2&6*0Za7-!(ÊYýÝ’ò £ur™f=AUT "1pGOu -2UÚ%32654&#"#4632#"&546?'5Uþ§G/pTKl1" TUA=f–u|œGY,ÌÚaþþ5E=2:?-*6&2Q[cQOqfXSnA ™aÇ2UÚ%35>54&#"32653#"&54632%2YG/pTKl1" TUA=f–u|œGY,Ìþïa5E=2:?-*6&2Q[cQOqfXSnA ™aÇ2 #%337>32#"&5463"32654&#"2ÇÇa™ AnSXfqOQc[Q2&6*-?:2=E5þþÌ,YGœ|u–f=AUT "1lKTp/Gþ§2 #)337>32#"&546753#532654&#"2ÇÇa™ AnSXfqOQcMF;;#6*-?:2=E5þþÌ,YGœ|u–f=;SJôV 1lKTp/Gþ§2 #+337>32#"&547632#"'32654&#"2ÇÇa™ AnSXfqOQcP."00"$6*-?:2=E5þþÌ,YGœ|u–f=l&'0D0(1lKTp/Gþ§2 #%#'#"&54632#52654&#"3267 ÇÇa™ AnSXfqOQc[Q2&6*-?:2=E5#þîþïÌ,YGœ|u–f=AUT "1lKTp/GY2 n32=3#"&547!5!  J:¡TŠk`zþân*Lž||u}|N8T2ÿÿ m!>54&#"#54632!$!  J:¡TŠk`z+Kžzzv|{O7T2ŸÚ73632+53254&#"2T8N||v{{žL*òèþâz`kŠT¡:J  !ÿÿ2ŸÚ& XL¤ÿrÿÿ2ŸÚ& X[\ÿl2ŸÚ%.#";#"&546323Ÿ*Lž{{v||N8Tò!  J:¡TŠk`z2 Ú7#3!32=3#"&547#m;;­!  J:¡TŠk`zã®,m*Lž{{v||N82ÿ“ m%3#5!>54&#"#546323Ñ;;þS!  J:¡TŠk`zã¿þÔm*Lž{{v||N82 Ú#632+53254&#"#5!^k8N||v{{žL*m,Ÿãz`kŠT¡:J  !­;ÿÿ2 Ú& ^Lÿrÿÿ2 Ú& ^[Êÿl2 Ú5!#.#";#"&546325à,m*Lž{{v||N8Ÿ;;þS!  J:¡TŠk`zã2/#53#"&5467#532654&[Ô€:E•Ò•E:Ó7HeŠeH–T!rDg‘‘gDq"TX8D``D8W2/#%#53.54623#5>54&"Ô€:E•Ò•E:Ó7HeŠeHT!rDg‘‘gDq"TX8D``D8W2Uý#53>32#"&'#533264&#"¿T!rDg‘‘gDq"TX8D``D8W)Ô€:E•Ò•E:Ó7HeŠeHÿÿ2Uý& dL8ÿ•ÿÿ2Uý'[ðÿ’ d2Uý%3#5#"&463253#.#"326ÈT!rDg‘‘gDq"TX8D``D8WÔÔ€:E•Ò•E:Ó7HeŠeH2±Ž!5!53#5#"&5467#532654&[;;Ç:E•Ò•E:Ó7HeŠeH–kþÔm!rDg‘‘gDq"TX8D``D8W2ÿ–±$!%!#33.54623#5>54&"ˆþå;;Ç:E•Ò•E:Ó7HeŠeHŽk,m!rDg‘‘gDq"TX8D``D8W2À!##5!#>32#"&'#533264&#"*k,m!rDg‘‘gDq"TX8D``D8W);;Ç:E•Ò•E:Ó7HeŠeHÿÿ2À& jL«ÿ”ÿÿ2À'[^ÿ’ j2À!.#"32673#5#"&46325#5!#ÈW8D``D8XT"qDg‘‘gDr!m,k)7HeŠeH7Ó:E•Ò•E:Ç;;þå2 $#"'#"&53326533265353#5€`IG77GI`T/&$0T0$&/¥;;ÏþãJh>>hJqþ'55'þæ'55'qlþÔl2ÿ” #$74632632#4&#"#4&#"##3¾`IG77GI`T/&$0T0$&/¥;;TJh>>hJþq'55'þæ'55'þl,l2ÁÚ$!2#!5!2654&#!5!2654&#!5#5!#òJh>>hJþq'55'þæ'55'þl,lN`IG77GI`T/&$0T0$&/¥;;2ÁÚ(!2#!5!2654&+#332654&#!5#5!#òJh>>hJþq'55'à;;à'55'þl,lN`IG77GI`T/&$0m,k0$&/¥;;2ÁÚ,462"!2#!5!2654&+532654&#!5#5!#Â"0""0Jh>>hJþq'55'¯¯'55'þl,l0""0"a`IG77GI`T/&$0T0$&/¥;;2ÁÚ$5#5!#!"3!!"3!!"&547&5463l,lþ'55'þæ'55'qþJh>>hJNQ;;¥/&$0T0$&/T`IG77GI`2 Ú463""&54426n\B+«ð«+B\zªz"C_T- þéxªªx -T_CþêUyy2 Ú#52654623"&54&"Ð\B+«ð«+B\zªz¸þêC_T- xªªxþé -T_CUyy2 Ú!"&533!2#!"#463!264&êþêC_T- xªªxþé -T_CUyy<\B+«ð«+B\zªzÿÿ2 Ú'~–ÿ) vÿÿ2 Ú'[î v2 Ú%!2#4&#!"&463!2653#!"TC_T- þéxªªx -T_CþêUyyž\B+«ð«+B\zªz2myÚ!3!#2GÙÙþ¹ÒÒÚþÉ672'y 333##5#75#5357·6ŒŒŒŒ6…………M FÉn6FFÅr6þÉ!!""ÿÿ2 Ú& t^Øÿÿ2 Ú& u "ÖþRÿÿ2 Ú& vM2ÿÿ2 Ú'~ÿ) ~ÿÿ2 Ú'[® ~ÿÿ2 Ú& yNà2 Ú*%#"'#"&544326533265463"Â_HE77EH_+B\.%$.T.$%.\B+²Kg>>gK‡ -T_Cþz'55'qþ'55'†C_T- 2 Ú*46326323"&54&#"#4&#"#5265|_HE77EH_+B\.%$.T.$%.\B+(Kg>>gKþy -T_C†'55'þq'55'þzC_T- 2œÚ*2#!"#463!2654&#!5!2654&#!"&533êKg>>gKþé -T_C'55'þÿ'55'þêC_T- _HE77EH_+B\.%$.T.$%.\B+2œÚ.2#!"#463!2654&+#332654&#!"&533êKg>>gKþé -T_C'55'á;;á'55'þêC_T- _HE77EH_+B\.%$.l,l.$%.\B+ÿÿ2œÚ& „[2œÚ*7"&547&5463!2653#!"3!!"3!2#4&#äKg>>gK -T_Cþê'55'þÿ'55'C_T- J_HE77EH_+B\.%$.T.$%.\B+2 Ú )2%#"'#"&54435335463"#3265#3265Â_HE77EH_+B\¥T¥\B+T¥.$%.ù¥.%$.²Kg>>gK‡ -T_CccC_T- jþã'55'þã'55'2 Ú )246326323"&=##5##5265734&#"34&#"|_HE77EH_+B\¥T¥\B+T¥.$%.ù¥.%$.(Kg>>gKþy -T_CccC_T- j'55'þã'55'2œÚ )22#!"#46;5#535#"&53332654&#32654&#êKg>>gKþé -T_CccC_T- j­'55'­­'55'_HE77EH_+B\¥T¥\B+T¥.$%.ù¥.%$.2œÚ :32654&+#5'353326544#!"#46;5#535#"&533=­'55'1;AA;1'55'Kg>>gKþé -T_CccC_T- C¥.%$.llù¥ll.$%.T_HE77EH_+B\¥T¥\B+2œÚ A462"764'72654&+32654&#2#!"#46;5#535#"&533P#.##.d '55'­ ­'55'Kg>>gKþé -T_CccC_T- T2++2)..$%.¦¥.%$.M_HE77EH_+B\¥T¥\B+2œÚ )27"&547&5463!2653+3#32#4&#'5#"375#"3äKg>>gK -T_CccC_T- j­'55'­­'55'J_HE77EH_+B\¥T¥\B+T¥.$%.ù¥.%$.2ÛÚ#*4!#5&'35.546753#&'5>54.";¯X'1:-$[M;OTXIVGcV;&+&f-5  U ¦)4¬:&BTVUSGF ¢%QFWN”)"ož,  2 Ú6#3265#32653#"'#"&54435#5!#35463"u¥.%$.ù¥.$%.T_HE77EH_+B\¥ZZ¥\B+Ïþã'55'þã'55'Kg>>gK‡ -T_CcTTcC_T- 2 Ú634&#"34&#"#46326323"&=#3!535##5265É¥.%$.ù¥.$%.T_HE77EH_+B\¥ZþøZ¥\B+ '55'þã'55'Kg>>gKþy -T_CcTTcC_T- 2œÚ632654&#'326544#!"#46;5##335#"&533=­'55'­­'55'Kg>>gKþé -T_CcTTcC_T- C¥.%$.ù¥.$%.T_HE77EH_+B\¥ZZ¥\B+2œÚ$1>7#335#"&533!2#!"#46;5#332654&+#5'35332654&#†TTcC_T- Kg>>gKþé -T_Cc·­'55'1;AA;1'55'éZ¥\B+_HE77EH_+B\¥¥.%$.llù¥ll.$%.2œÚ$,E#335#"&533!2#!"#46;56462"764'72654&+32654&#†TTcC_T- Kg>>gKþé -T_Cg#.##.d '55'­ ­'55'CZZ¥\B+_HE77EH_+B\¥2++2)..$%.¦¥.%$.2œÚ65#"35#"3"&547&5463!2653+353#5#32#4&#‘­'55'­­'55'Kg>>gK -T_CcTTcC_T- —¥.%$.ù¥.$%.T_HE77EH_+B\¥ZþøZ¥\B+2 Ú.%3265463"#"'#"&5443265#5!#É.$%.\B+_HE77EH_+B\.%$.ZZ²'55'†C_T- þyKg>>gK‡ -T_Cþz'55'ÔTT2 Ú.4&#"#526546326323"&54&#"3!53u.$%.\B+_HE77EH_+B\.%$.ZþøZ('55'þzC_T- ‡Kg>>gKþy -T_C†'55'þ,TT2œÚ.#3!2654&#!"&533!2#!"#463!2654&#†TTd'55'þêC_T- Kg>>gKþé -T_C'55'CZZ.$%.\B+_HE77EH_+B\.%$.2œÚ6#335332654&#!"&533!2#!"#463!2654&+#5†TTz;¯'55'þêC_T- Kg>>gKþé -T_C'55'¯;CZZll.$%.\B+_HE77EH_+B\.%$.ll2œÚ4>462"764'32654&#!"&533!2#!"#463!2654&#!#33Ö#.##.d '55'þêC_T- Kg>>gKþé -T_C'55'þœTT= T2++2)0.$%.\B+_HE77EH_+B\.%$.ZZ02œÚ.53#5!"3!2#4&#!"&547&5463!2653#!"3HTTþœ'55'C_T- þéKg>>gK -T_Cþê'55'—ZþøZ.$%.\B+_HE77EH_+B\.%$.2 Ú&'32653265%#"'#"&55#5!#?¹7&%7T7%&7¹ hIO77OIh ZZÄ„þj&66&þî&66&–%·ýØJh>>hJ(·cTT2 Ú&4&#"4&#"74632632%3!53“¹7&%7T7%&7¹þóhIO77OIhþóZþøZ„–&66&þî&66&þj%·(Jh>>hJýØ·cTT2 Ú(#33!2#!3!2654&#'32654&#!†TTg»¼Gk##kGþD»aŠ*$88$  $88$þÖCZZC€L*__*L€CïO)(OTO()O2 Ú #0#5#!2654&#!#33!2#!%2654&#!353²;)Š*$88$þ˜TTg»¼Gk##kGþD»$88$þÖŠ);CllïO)(OZZC€L*__*L€CTO()Oïll2 Ú6462"764'32654&#!!2654&#!#33!2#!`#.##.d $88$þÖ‰ ‰*$88$þ˜TTg»¼Gk##kGþD»T2++2)0O()Oï0ïO)(OZZC€L*__*L€C2 Ú(53#5#!"&5467.5463!#7!"3#"3!LTTg»þDGk##kG¼»aŠþÖ$88$  $88$*—ZþøZþ½€L*__*L€þ½ïO)(OTO()O2Ú%"./#'.#523%+?¿ûn2Ä(,D¿ûnþÎÄ/TT! äþÕmêT" ä+þ“ê2@ ''7'7 hh gg hh g gg hh gg hÿÿ29Ú'Ÿ„ÿÿ2îÚ'½ÐÉÿÿ2òÚ'¿ÔÊÿÿ2ðv'ÀÒÊÿÿ2‘Ú'ÁsÊÿÿ2£v'ÂsÊÿÿ2ðÚ'ÄÒÊÿÿ2v'ÅÒÊÿÿ2jÚ&Û[Äÿÿ2ØÚ&Ü[2ÿÿ2Øv& ¬[zÏÿÿ2ˆÚ&Þ[âÿÿ2ˆv'[â&Þ[<Ïÿÿ2ØÚ&à[2ÿÿ2Øv'[2&à[jÏ2å^ž5!5!2,þÔ,c;;~;;2‹^ø53533#3##5#5352x3•$$$2¬ThUƒT5[oA„2$$$KþkXJ£Eh<2ÆÚ  4632"&264&"'2#54&+é$$$2”Ao[5TƒUh„2$$$Kþ»"0""0ˆ0""0"þ˜æb€€b”RÒD`_Ef0""0"2¤Ú532+#3264&#462"Üæb€€b”RÒD`_Eþ„"0""0‰QzPR}þ¿“IhEþÌ0""0"2¤v"462"532+#3264&#&462"2"0""0ˆæb€€b”RÒD`_Eã"0""0U0""0"VQzPR}þ¿“IhE›0""0"2|Ú#";##"&46;462"|ÒE_`DÒR”b€€bæý¶"0""0‰EhIþmA}¤xþ{0""0"2mÛÝ #ž—–?ÕÔmþüpþ2m’Ú54&"#5462\HdH6g’gm½2HH2½½IggI½2l7Ú53264&#"#4632#‚+#//# #8H38RŠú84#÷(7:6p2l7Ú#4&#"#463278/# #8H38Rj#÷(7:2m(Ú3##2ö»;Ú:þÍ2l q#"&5463!#"26=p6:7(÷#4!+ŠR83H8# #//#+2mÚ #5326=3#h6B&46VFm»70K>VP2m´f(4'52#"&/&#"3&54632326‚80:<*,2 .%  ~E-%9 æL2B<;@)0>0')2p>G-+?#2m Ý /&462"dÕÔ]ww"0""0mpþ6ÎΉ0""0"2m Ý /$462"2ÕÔ]ww "0""0mpþ6ÎΉ0""0"2_­Ú 462#"&3264&"2$4#$ „2$$$K2f¦Ú462"2"0""0ˆ0""0"2¦Ú462"'3#"&=!5!2652"0""0™QzPR}þ¿“IhEˆ0""0"bæb€€b”RÒD`_E!úv462"3264&+332+!"0""0ÒE_`DÒR”b€€bæ$0""0"ýOEhI“þ¿}¤x2 v462"#"&546;3#"3—"0""0Aæb€€b”RÒD`_E$0""0"ýOQzPR}AþmIhE2XÚ'"&5462#"'265264&"462"´ÅøÅdŒddF-)•°•þ&3F33F+"0""0ÚþJv®®v FddŒdyS}}S¶‡F33F3þÏ0""0"2(Ú')"&6;2"&547#"3!"264462"´þ¢y««y´FddŒd!S}}S^‡F33F3T"0""0Ô2ÔdŒddF-)°Ò°23F33Fþ0""0"2XÚ3#"&53265462"V;;^ÅøÅT•°•„"0""0ÙþÔ-þJv®®v¶þJS}}S¶þ{0""0"2¶v 462"5!!2#!5!264&#!:"0""0þÖ,þÔA…¾¾…þ¿Ab‹‹bþ¿$0""0"þN::ŠÖþÒÖT¥è¥2¶v5!!"&63!!"3!462"Š,þ¿…¾¾…Aþ¿b‹‹bAþ„"0""0P::þ°Ö.ÖT¥è¥Ð0""0"2ÄÚ #"&54632#4&#"3462"±þådáb‘eb”R^FE_`D("0""0“þmARPx“Sþ à:nB45J 0""0"2N 462"#"32653#"&54633"0""0‰D`_EF^R”be‘bádü0""0"þmJ54Bn:àþ S“xPRA2öÚ'/4&#"3254&#"#432#"&54632#462"oNRk<5oTs2I+L1Vužsp¡T‚"0""0ÌNoTKLKy&“S,$D=%ƒemƒŸoþ4ˆ0""0"2ev'/3#"&54632#"5332654#"326462"T¡psžuV1L+I2sTo5>hJ(ýØ&66&(ýØ&66&(þ{0""0"2 v (2#!5!2654&#!5!2654&#!5$462"îGk##kGþD¼$88$þD¼$88$þD"0""0Ú€L*__*L€TO)(OTO()OTJ0""0"2 v (3"&5467.5463!!"3!!"3!462"äGk##kG¼þD$88$¼þD$88$¼þš"0""0€L*__*L€TO)(OTO()OT$0""0"2XÚ (3"&5467.5463!!"3!!"3!462"äGk##kG¼þD$88$¼þD$88$¼D"0""0€L*__*L€TO)(OTO()OTU0""0"2Uv.462"32654&#"#4632#"&54?!5! "0""0/"- uOGp1" TUA=f™ru£ òþn#$0""0"þ¯(!-7aZ0*6&2Q[cQRŒZ´\ŒTa2¦#&.%3##"&54632#52654&#"32>$462"ãÈaTŒ\´ZŒRQc[Q2&6*0Za7-!(c"0""0ÊYýÝ’ò £ur™f=AUT "1pGOu -à0""0"2mæÚ 3#53#53¥A´AAsŸ22 22l v&#"#3632ç# #88'8(/#“ 2m1t46;#";2+532654&+"2,¨¨  m**®® mB+2/B-2 ÿÿÿÙ#z¨üÒ$ÿÿ*ÿ#zlüÒDÿÿOop#y®¤%ÿÿ6ÿé Ù#y EÿÿOÿ\oÙ#yŽüø%ÿÿ6ÿE Ù#y€üáEÿÿOÿ~oÙ#q…ý%ÿÿ6ÿg Ù#q‚üðEÿÿ0ÿ*¥ž#vº‰ÿÿÿ*Ýë#vŽ©ÿÿY›s#yÓ§'ÿÿÿéïÙ"y^ GÿÿYÿ\›Ù#y‹üø'ÿÿÿEïÙ#yWüáGÿÿYÿ~›Ù#q™ý'ÿÿÿgïÙ#qYüðGYÿ1›Ù"+32654#"'7#!2+632#"'32654&+© ! . '¶‹žŸŠ= &)B9/N"¬lppl¬…%UÙÂþ¬Ã1# +2"ÿŠ‹ÿïÙ)5#5632#"'732654#"'7.54632"32654&ïJA+ &)B9/N ! . 'gt{fl5“DTTEBPPÙý'E,*1# +2"(%V˜~}—Qþôp[\on[^oÿÿYÿ.›Ù#fŒüß'ÿÿÿïÙ#fZüÈGÿÿZeè#q¼~"(Cºÿÿ(ÿép#C^ŒÕÿÿZeè#q¼€"(vÍÿÿ(ÿél#v£ˆÕÿÿZÿ.eÙ#f¼üß(ÿÿ(ÿ#früÈHÿÿZÿ\eÙ#|¾ü÷(ÿÿ(ÿE#|tüàHÿÿZÿ1e¨#x±Ìãÿÿ(ÿÞ"xräÿÿZCs#y¨§)ÿÿs#y§Iÿÿ,ÿéÅg#qåª*ÿÿÿ&é"qràJÿÿS„q#yÄ¥+ÿÿFæÙ#y‹ KÿÿSÿ\„Ù#yÄüø+ÿÿFÿ\æÙ#yoüøKÿÿS„o#jÈ£+ÿÿFæ^#j†’Kÿñÿ1„Ù&32654#"'7#3!3#!#632#"' ! . ']w]]þ‰ &)B9/N…%UÙþÅ;ý'Lþ´1# +2"ÿßÿ1æÙ.4&#"#632#"'732654#"'7#3>32#“C)@N &)B9/N ! . 'S%K8LYSk70aPþß1# +2"(%UÙþë0'MBþtÿÿSÿ=„Ù#xÆüè+ÿÿFÿ=æÙ#xpüèKÿÿÿöÿ\0Ù#|ÿñü÷,ÿÿÿÏÿ\ Ù#|ÿÊü÷LÿÿBè#jÿì‚",vÿÿÿô1”"jÛø"óv°ÿÿO’™#vƵ.ÿÿ:ö#vVNÿÿOÿ\’Ù#yÊüø.ÿÿ:ÿ\öÙ#yqüøNÿÿOÿ~’Ù#qÂý.ÿÿ:ÿ~öÙ#qsýNÿÿPÿ\Ù#yŒüø/ÿÿ:ÿ\¢Ù#yÿÇüøOÿÿPÿ\g#q’ª 0ÿÿÿåÿ\÷[#qÿÉž 1ÿÿPÿ~Ù#qŽý/ÿÿÿåÿ~÷Ù#qÿÉýOÿÿPÿ.Ù#füß/ÿÿÿÞÿ.ýÙ#fÿÊüßOÿÿKùš#v(¶0ÿÿFúë#v%PÿÿKùs#y§0ÿÿFúÙ#y PÿÿKÿ\ùÙ#yûüø0ÿÿFÿ\ú#yùüøPÿÿL†p#y¤1ÿÿFçÙ"y{ QÿÿLÿ\†Ù#yÂüø1ÿÿFÿ\ç#ypüøQÿÿLÿ~†Ù#qÄý1ÿÿFÿ~ç#qrýQÿÿLÿ.†Ù#fÆüß1ÿÿFÿ.ç#fsüßQÿÿ&ÿéæú#|ë•"2j'ÿÿ$ÿéþƒ#j—Ÿ·ÿÿ&ÿéæè#|ëœ"2jéÿÿ$ÿéþX#jtŒ·ÿÿ&ÿéæè#qà‰"2Càÿÿ$ÿéþm"ikà"RCh‰ÿÿ&ÿéæè#qè‰"2våÿÿ$ÿéþm"ikà"Rv…‰ÿÿ[iš#v«¶3ÿÿ6ÿ& ë#v°Sÿÿ[is#y §3ÿÿ6ÿ& Ù#yƒ Sÿÿ]§s#yç5ÿÿEAÙ"y Uÿÿ]ÿ\§Ù#yÛüø5ÿÿ;ÿ\A#yÿÈüøUÿÿ]ÿ\§g#qºª Tÿÿ;ÿ\P"i"à Uÿÿ]ÿ~§Ù#qÝý5ÿÿÿæÿ~A#qÿÊýUÿÿ0ÿém#y¢µ6ÿÿ"ÿéËÙ"yQ Vÿÿ0ÿEmå#y©üá6ÿÿ"ÿEË#yLüáVÿÿ0ÿémè#vë©"6y´ÿÿ"ÿéË^#yM’ÿÿ0ÿémè#g««"6y¦ÿÿ"ÿéËT#yPˆ#ÿÿ0ÿEmx#y¢¬ \ÿÿ"ÿEËÙ"yQ  ]ÿÿQp#yŒ¤7ÿÿÿéþ@"y×tWÿÿÿ\QÙ#yŒüø7ÿÿÿEþœ#yüáWÿÿÿ~QÙ#qŽý7ÿÿÿgCœ#qüðWÿÿÿ.QÙ#füß7ÿÿÿIœ#füÈWÿÿUÿF…Ù#jÉüâ8ÿÿAÿFâ #jnüâXÿÿUÿE…Ù#|Êüà8ÿÿAÿEâ #|hüàXÿÿUÿ…Ù#fÈüÈ8ÿÿAÿâ #fcüÈXÿÿUÿé…è#|Ð"8vÿÿAÿéâp#v‘Œ+ÿÿUÿé…Ì#qÆ|"8jÊÿÿAÿéâ?"jos-ÿÿ…n#|°¡9ÿÿ æ¿"|VòYÿÿÿ\…Ù#y¯üø9ÿÿ ÿ\æ #yHüøYÿÿ¡#C@¹:ÿÿÄë#CœZÿÿ¡£#v9¿:ÿÿÄë#vëZÿÿ¡o#j8£:ÿÿÄÚ#jÂZÿÿ¡m#y4¡:ÿÿÄÙ#y¾ Zÿÿÿ\¡Ù#y6üø:ÿÿÿ\Ä #y½üøZÿÿ‰p#yª¤;ÿÿÙÙ"yP [ÿÿ‰p#j®¤;ÿÿÙÚ"jT[ÿÿ •p#yª¤<ÿÿÿ&ÞÙ"yR \ÿÿG¡#f›¼=ÿÿÉÙ"fTô]ÿÿÿ\GÙ#yŠüø=ÿÿÿ\É #yMüø]ÿÿÿ~GÙ#qŒý=ÿÿÿ~É #qOý]ÿÿFÿ~æÙ#qqýKÿÿÿéB"jçvWÿÿÄ#z¾Zÿÿÿ&Þ"zRÿ\ÿÿ*ÿéò#^)Dÿÿ€#y´Aÿÿÿ\Ù#y¨üø$ÿÿ*ÿE#ymüáDÿÿÉ#©#Ô$ÿÿ*ÿé#©ðDÿÿšµ#f¨"$vmÑÿÿ*ÿéc#v6#¤ÿÿ´#f¨"$CÿêÐÿÿÿÇÿé "C±)¤ÿÿ®#f¨"$©¹ÿÿ*ÿé1#©´¤ÿÿè#f¨Ž"$|®ÿÿ*ÿéc#|r–¤ÿÿÿ\‡#f®¢ –ÿÿ*ÿEí"fp —ÿÿè#x»"$vÐÿÿ*ÿé|#vŽ˜Åÿÿè#x±”"$Cªÿÿ*ÿé‚#CežÅÿÿ#x»ž"$©@%ÿÿ*ÿé”#©ŸÅÿÿ#x»¢"$|Ã:ÿÿ*ÿéq#|r¤Åÿÿÿ\|#x¬  –ÿÿ*ÿEÞ"xn —ÿÿZÿ\eÙ#y¸üø(ÿÿ(ÿE#yoüáHÿÿZeÐ#©+Û(ÿÿ(ÿé#©îHÿÿZe…#|´¸(ÿÿ(ÿé¿"|vòHÿÿZ«µ#f¨"(v~Ñÿÿ(ÿéh#v;#¬ÿÿeµ#f¨"(CÿñÑÿÿÿÄÿéø"C®¬ÿÿZ}°#f¨"(©»ÿÿ(ÿé:ü#©½¬ÿÿZeí#f­"(|» ÿÿ(ÿéa#||”¬ÿÿZÿ\eˆ#f³£ ®ÿÿ(ÿEÛ"ftö ¯ÿÿSìÐ#©oÛ,ÿÿNç#©jóÿÿ_ÿ\ÇÙ#yÿìüø,ÿÿ9ÿ\¡Ù#yÿÆüøLÿÿ&ÿEæå#yßüá2ÿÿ$ÿEþ#yjüáRÿÿ&ÿéæÑ#©cÜ2ÿÿ$ÿéþ#©êRÿÿ&ÿéæ´#fà"2v¨Ðÿÿ$ÿévã#vIÿÿ¶ÿÿ&ÿéæ´#fà"2CÐÿÿÿ§ÿéþã"C‘ÿ¶ÿÿ&ÿéæ°#fà"2©2»ÿÿ$ÿé/#©²¶ÿÿ&ÿéæï#fà"2|ä"ÿÿ$ÿéþ`#|p“¶ÿÿ&ÿEæˆ#f⣠Âÿÿ$ÿEþí"fl Ãÿÿ&ÿéž#jêºbÿÿ$ÿé5Ý"j}ùcÿÿ&ÿé #kè¼bÿÿ$ÿé5Ø"kVôcÿÿ&ÿéÐ#©gÛbÿÿ$ÿé5#©òcÿÿ&ÿét#|ë§bÿÿ$ÿé5Á"|~ôcÿÿ&ÿE#yßüábÿÿ$ÿE5w#yjüácÿÿUÿE…Ù#yÅüá8ÿÿAÿEâ #yAüáXÿÿUÿé…Ã#©8Î8ÿÿAÿéâï#©õÿúXÿÿUÿéš#j϶qÿÿAÿéoÝ#j†ÿùrÿÿUÿé¢#kǾqÿÿAÿéoÝ"kmùrÿÿUÿé­#©'¸qÿÿAÿéoþ#©Ä rÿÿUÿéq#|̤qÿÿAÿéo²#|‚ÿårÿÿUÿEX#yÅüáqÿÿAÿEo‹#yAüárÿÿ •Ÿ#C »<ÿÿÿ&ÞÛ"C0÷\ÿÿ ÿ\•Ù#y®üø<ÿÿÿ&Þ #yÆý\ÿÿ •µ#©2À<ÿÿÿ&Þí#©×ÿø\ÿÿ •u#|¯¨<ÿÿÿ&Þ°"|Wã\ÿÿ0ÿóGæ"  w>ÿÿ0ÿóGä" Øs>ÿÿ0ÿóGô" ­>>ÿÿ0ÿóGô" ºF>ÿÿ0ÿóGô" ®K>ÿÿ0ÿóGô" »>>ÿÿ0ÿóGk" ¯q>ÿÿ0ÿóGk" ¼qÿ>ÿÿå"  ÙÿÿŠå" ØÒýÿÿÿòØä& ­ Kÿÿÿóãë" º¯Vÿÿÿï£å" ®­ÿÿÿíªå" »œÿÿÿñT" ¯äêÿÿÿåŠW" ¼Øëýÿÿ'ÿöÜâ"  VþBÿÿ'ÿöÜã" Ø`ÿBÿÿ'ÿöÜô" ­,Bÿÿ'ÿöÜô" º4Bÿÿ'ÿöÜô" ®8Bÿÿ'ÿöÜô" »,Bÿÿÿó¤å#  ÿ#?ÿÿÿî“å# Øÿx#.ÿÿÿðNå" ­ž#éÿÿÿñ<å" º­#×ÿÿÿï-å" ®­#Èÿÿÿñ9å" » #ÔÿÿÿJòñ"  r DÿÿÿJòô" ØtDÿÿÿJòô" ­=DÿÿÿJòô" ºODÿÿÿJòô" ®|DÿÿÿJòô" »[DÿÿÿJòk" ¯fDÿÿÿJòk" ¼xÿDÿÿÿñ¶å#  ÿ}%2ÿÿÿ÷¼å" Ø%8ÿÿÿòcå" ­ %ßÿÿÿøeå" º´%áÿÿÿôaå" ®²%Ýÿÿÿôdå" »£%àÿÿÿÝT" ¯Ðê%ƒÿÿÿÝU" ¼Ðé%ƒÿÿ,ÿøô"  ¸Fÿÿ8ÿøô" ØÂFÿÿÿôÿø&ô" ­¢Fÿÿÿ÷ÿø&ô" º³Fÿÿÿûÿø!ô" ®¹Fÿÿÿùÿø(ô" »¨FÿÿÿËÿøk" ¯¾FÿÿÿËÿøk" ¼¾ÿFÿÿÿñîå#  ÿ}',ÿÿÿõíå# Øÿ'+ÿÿÿòŽå" ­ 'Ìÿÿÿñ‘å" º­'Ïÿÿÿñ‰å" ®¯'Çÿÿÿóå" »¢'Îÿÿÿà6V" ¯Óì'tÿÿÿÞ2Z" ¼Ñî'pÿÿ$ÿéþå"  gLÿÿ$ÿéþå" ØrLÿÿ$ÿéþô" ­:Lÿÿ$ÿéþô" ºBLÿÿ$ÿéþô" ®GLÿÿ$ÿéþô" »:Lÿÿÿïÿéãè#  ÿ{-ýÿÿÿôÿéìë# Øÿ~-ÿÿÿòÿéºå" ­ þ-Ôÿÿÿóÿé·å" º¯û-ÑÿÿÿñÿéSå" ®¯þ-mÿÿÿóÿé]å" »¢-wÿÿ2ÿòèæ"  `Rÿÿ2ÿòèã" ØhÿRÿÿ2ÿòèô" ­1Rÿÿ2ÿòèô" º:Rÿÿ2ÿòèô" ®@Rÿÿ2ÿòèô" »4Rÿÿ2ÿòèj" ¯bRÿÿ2ÿòèk" ¼bÿRÿÿÿîåå# Øÿx2Pÿÿÿïå" º«2øÿÿÿôÅå" »£20ÿÿÿïYW" ¼âë2Äÿÿ$ÿ÷Àã#  ÆÿÿVÿÿ$ÿ÷Àâ# ØÐÿþVÿÿ$ÿ÷Àô# ­œVÿÿ$ÿ÷Àô# º¤Vÿÿ$ÿ÷Àô# ®©Vÿÿ$ÿ÷Àô# »œVÿÿ$ÿ÷Àj# ¯ÌVÿÿ$ÿ÷Àj# ¼ÌÿþVÿÿÿóÐâ#  ÿÿþ6÷ÿÿÿñÕå# Øÿ{6üÿÿÿñ›è" ­Ÿ6Âÿÿÿï™è" º«6Àÿÿÿó>â" ®±þ6eÿÿÿïeÝ" »žÚ6Œÿÿÿ÷TT" ¯êê6{ÿÿÿóTV" ¼æê6{ÿÿ0ÿóGë# Ì–>ÿÿ0ÿóGë" ×P>ÿÿ'ÿöÜë# ̃Bÿÿ'ÿöÜë" ×=BÿÿÿJòë# Ì¢DÿÿÿJòë" ×bDÿÿÿøë" ÌàFÿÿ8ÿøë" ׿Fÿÿ$ÿéþë# ̈Lÿÿ$ÿéþë" ×VLÿÿ2ÿòèë# Ì„Rÿÿ2ÿòèë" ×XRÿÿ$ÿ÷Àë# ÌôVÿÿ$ÿ÷Àë# ×®Vÿÿ0ÿ9Gæ"j ðÿÿ0ÿ9Gä"j ñÿÿ0ÿ9Gô"j òÿÿ0ÿ9Gô"j óÿÿ0ÿ9Gô"j ôÿÿ0ÿ9Gô"j õÿÿ0ÿ9Gk"j öÿÿ0ÿ9Gk"j ÷ÿÿ/å# Ÿ| øÿÿ-å# Ÿz ùÿÿÿò…ä# ŸÒ úÿÿÿó…ë# ŸÒ ûÿÿÿïFå# Ÿ“ üÿÿÿíMå# Ÿš ýÿÿÿñ4T# Ÿ þÿÿÿå,W# Ÿy ÿÿÿÿ8òñ"Ì ÿÿÿ8òô"Ë ÿÿÿ8òô"Í ÿÿÿ8òô"Ð ÿÿÿ8òô"Ð ÿÿÿ8òô"Ñ ÿÿÿ8òk"Ð ÿÿÿ9òk"Ð ÿÿÿñ‘å# ŸÞ ÿÿÿ÷”å# Ÿá ÿÿÿòAå# ŸŽ ÿÿÿøFå# Ÿ“ ÿÿÿô<å# Ÿ‰ ÿÿÿô?å# ŸŒ ÿÿÿÝâT# Ÿ/ ÿÿÿÝåU# Ÿ2 ÿÿ$ÿ9Àã#À Dÿÿ$ÿ9Àâ#À Eÿÿ$ÿ9Àô#À Fÿÿ$ÿ9Àô#À Gÿÿ$ÿ9Àô#À Hÿÿ$ÿ9Àô#À Iÿÿ$ÿ9Àj#À Jÿÿ$ÿ9Àj#À Kÿÿÿóÿÿ—â# Ÿäÿÿ Lÿÿÿñÿÿ—å# Ÿäÿÿ Mÿÿÿñ[è# Ÿ¨ NÿÿÿïÿÿYè# Ÿ¦ÿÿ Oÿÿÿóâ# ŸS Pÿÿÿï&Ý# Ÿs Qÿÿÿ÷ÿÿT# Ÿdÿÿ RÿÿÿóÿÿV# Ÿgÿÿ Sÿÿ0ÿóGÞ"xn>ÿÿ0ÿóG"qoà>ÿÿ0ÿ9Gë"j Tÿÿ0ÿ9G"j>ÿÿ0ÿ9Gë"j Uÿÿ0ÿóG¿"|rò>ÿÿ0ÿ9G¿"j —ÿÿƒ#xª§ÿÿg#qªªÿÿÿÝå" ̽ÿÿå" ׳ÿÿ1Ù# Ÿ~ÿÿtAÌä  ³²72>73#"=3} !1JL %*Oc2( ÿÿtAÌä³Bÿÿ lGÔ|ÿÿ yG„# ¡°jÿÿÿ8òë"Í Xÿÿÿ:ò"ÏDÿÿÿ9òë" YËÿÿÿJòà"|mDÿÿÿ8òà"Ì ¦ÿÿÿ÷å" Ì×#ªÿÿÿãÒå" ב#mÿÿVå" Ìð%Òÿÿ0å" ×´%¬ÿÿS\Ù# Ÿ©%ÿÿRA„ä# Ì“  ÞÿÿBAhä" ×E  Îÿÿ 9Gj' ¡–   øÿÿÿÍÿøÞ"x¾FÿÿÿÛÿø"q¿àFÿÿÿãÿø*ý" ÊÁóFÿÿÿïÿø6ø" ËÍîFÿÿÿÇÿø¿"|ÂòFÿÿÿðÿø*l& ¢ãèFÿÿÿý*„#xÿî¨'ÿÿ g#iÿîª'ÿÿÿå-å" ÌÅ'kÿÿÿâ$å" ×'bÿÿDAsä# Ì‚ ØÎÿÿQA€ä" ×] ØÛÿÿ 9Gl' ¡˜ Øøÿÿ2ÿòèÞ"x^Rÿÿ2ÿòè"q^àRÿÿ2ÿòèý" Ê>óRÿÿ2ÿòèû" Ë>ñRÿÿ2ÿ8å"  ~Nÿÿ2ÿ8å# ؈Nÿÿ2ÿòè¿"|aòRÿÿ2ÿòèk"R ¢\çÿÿ •„#x°¨2ÿÿ •g#q±ª2ÿÿÿÚ+å" ̺2–ÿÿÿÉ5å# ×ÿw2 ÿÿÿó²å# Øÿ}/I"li  #'#5!#5¾A:aSES žžISSSSÿÿ"li ÿÿ PñäC ÿÿ$ÿ9Àë#À `ÿÿ$ÿ9À#ÀVÿÿ$ÿ9Àë#À aÿÿ$ÿ÷À¿#|ÐÿòVÿÿ$ÿ9À¿#À Ðÿÿÿ¿ÿé"å" ÌŸþ-<ÿÿÿêÿé"å" טø-<ÿÿÿÇÝ" ̧õ6FÿÿÿÚýÝ" ׈Ý6$ÿÿ4˜Ý# Ÿå6ÿÿRP#ävöÿÿvAÎä´J.ð8#5î8HHÿÿ.ð8 éÿÿÿûð18 ìÿûð18!51ýÊ8HHÿ÷ðé8!5éü8HHÿÿÿ÷ðé8 íÿÿKÿòí¤ ?ÿÿÿkþêÃÿ‚ÓÄAòžÚ#5473ž]]00òe{& P@ñÙ3565#@]]00Ùe{&RAÿ€žh73565#A]]00he{&R@ñÙ #&=00]ÙhM&{eÿÿ0ò+Ú' ñ ñïÿÿ1ñ.Ù' ò‘ òñÿÿ/ÿ€,h' óŽ óîÿÿ1ñ.Ù' ô‘ ôñ&ÿOÅ ###5353ÂXÁÁXöRý«URÏÏ&ÿOÅ#3##5#53#5353ÂÂÂXÁÁÁÁXöRþÍRÐÐR3RÏÏ2Ü,Ö 2#"&4{hIJ34IÖJ52IIhFÜ,ÖFææÖ|}ÿÿW¿hÿÿs'h'hÿÿtth'µ'hÿÿWã¿Ky ÿêáâ $.9C2#"&46"2654&%3#2#"&46"2654&%2#"&46"2654&ž?WX=>XX=%56J55(BþuB‚?WX=>XX=%55J65B?WX=>XX=%55J65ØX@=XY|X<5%&55%&5Fý +X@=XY|X<5J65%&5XX=%55J65B?WX=>XX=%55J65ûÅ?WX=>XX=%56J55(BþuB‚?WX=>XX=%55J65X@=XY|X<5J65%&5Xé "5>32&K·Y9€UV€9Y—Y@9229@Y#ÿ7“3#'#D>‰š>{y>âûÈÈÿÿ 6Ù' ßþI' ÿâþJ ß5¡[A!5[þÚA  ÿNÿìZÙ3#>þ2>Ùýyÿ,Ù!7;#"&=47.=46;#"Æ%.49R.$94.%",,"V¦'AE>¶x&FE¶>EA'¦F; E <ÿ,ºÙ!74&'5>=4&+532+53265m",,"%.49$.R94.%VE< E ;F¦'AE>¶EF&x¶>EA'ÿÿM)å#","ÿÿMüå',"ÿÿ|å&".ÿôœ #>7!5QJbFaþœJg”cT{‚W0ÿO Ù####532 mb@R@9ú^‚é^ƒþLJü¶J@‹Jú 7".54>3!#33îB`--`B 99ËRJDi>=hF@þª@–þªV Jú %!53#5!2#3+þõ99 B`--`‚RRJ@V@Ci?>iD–þªÿÿ(W" þI?ÿm¨ 3##"=?hhi<#i hþÄh4&&ƒx;XÎ %27#"&'5"5>32&K´Y9€VU€9Y··Y9€UV€9YgY@9229@YY@9229@Yÿÿ(Wå&  þIÿÿ<Hî' î'yÿåyÿ%ñ3#"&/&#"#>32326Å+H>/-##5+O854$0 #91  .14 ;ÿ4Xÿß "5>32&K·Y9€UV€9YsY@9229@Y$ÿòï½a'&546276327632#"/#"/#"&54?&'#"&54?&'#"&463267'&546326q "." m! *™» $$ º›* "m "# m  *™» $$º›* m¨º $$¹š* !m "." m"*™º $$¹š* "m "." n  ™ÿÿ<ÇD'yÿ'yùyå ÿÿ1¶GÌ& ' Ì' ™ eÿÿ<–²&yåO'y×O'yÝÿyÝgÿÿ<™Å'yÿåÿ'yÚÿ'yÿåw'yÚzyßTÿÿ<¤'yÿåÿ yÿåÇÿÿ<ÿ9– 'yÝþV'yÝÕ&yåy×ÿÿ<)  'yÿåÀ& 3'yÿåÿH'yaÿHyaÂÿÿ<ÿÿ¤ 'yÿåˆ'yÿåÕyÿåÿÿÿ<¤&yå'yÿåÒ'yÿåÿyÿåýDÅ4 #""3265*LI•ð¶Z/-éÜßin‡­®U[ÿÿ*böL)™QÅ #533##=мÌ.CC>€; þð5d™ªªFÅ#632#".'332654&#"#7.¾&.BRXE%98I/56.1#4"Å4wO?CU, G4./7(èGÅ$4>32#&#"632#"7"32654&!.)5D8?14&C=OTAšœ*45'(30Ý8W1 ;4@SN/L;>Qç1()64(+1GÅ #>7#5G•$=QR÷Å,¹Äh m4HÅ*#"&547.54632&"2654"32654úNVCDUN#M<=LJH++H+$V44*,4û"H:IJ:G"'1@?2&‡$%%.%&..&%FÅ$#"&'33265#"&54632"32654&F!.)5E9?14)?>NTAš›'30(*55õ8V1 ;4@SN/K<>Q.5(+23')7,Mh ##5#5353L†.††.á.††.†† ³Sá!5Sþ¸á..ÿÿ lS & G¹ G)o¼ý! 3#.546Ù$YY$199 ¢¢@¥ML¥ÿÿN¼Ü! IKÝÀÿÿ-=yQ)™ÿÿÿ+Dá >þÿÿEÿ8æá{þÿÿÿ8Fátþÿÿÿ*Báuþÿÿÿ8Qá @þÿÿÿ*Fá Aþÿÿÿ*Gá Bþÿÿÿ8Gá Cþÿÿÿ*Há Dþÿÿÿ*Fá Eþÿÿÿ‚M¾ FþVÿÿ T7 GþVÿÿ ÿÑTo Hþeÿÿoÿýl IþKÿÿLÿÚl II(Àÿÿÿ+]™Dÿ:)™ÿÿÿ+P™Hÿ:)™ÿÿÿ+L™Rÿ:)™ÿÿ ÿ84[ÿ8)™ÿÿÿ+N™ùÿ:)™&ÿ©A $*0#7&'#7.54>?373#&'>73'&''O 7+#7<8&9];7,# 7BTk=C Uüv .t"OiKU@C[|6°Y/_fO8((<\;~- ýù e_þçL;ýÊI~‰ ÿé9å)4>32#&#"3>32673#". (>fAÏ!RZi?8M$C( TT”S ‚q@f<(d2bjO4ÜŠ¢Œf‘O_;3UJgg³€†3Ni`,Ù3###535#53!!3ÎþþSOOOO£þ°þ‹B7þî7B7RÅ7ÿéÙ93#3#632327#"&#"'67#53&'#53.54632#&#"“& ˆ}†Y;?!h(+*9J+†#580e|nQ"‰e5>,X„@M ,> 7(62Z'B8.%BW>6!!791![{ 1W9šFFÿ§úr&*3>32>?3#4&'#5#54&#"#7FM"K4a,#D0<7>58T'#’T•7Ì3.3HT„Y'1 J/*P*$W[ I;þwi+5Õû€Ù*˜27P9þ·K‚ GG“Ù#&)##'##5#535#533333##5##3'##3'“3]ƒ¾N----ZйO33O“3ï˜2fO::þ±@@7FññññF]FÿÿÿÿF]]]]£lUu[ÿéÙÙN3264&+#327&'332654&/.54632#.#"#"'#"&5#+#!2353¸ÂCKKC–VX5E7C$-4Y?YY«X&0'1S6PDucz2> 14CiKå]-jt8LZ>3 +(ŒDOþËÙjcÿÿ]ÿéxÙ'V­525Ù#'+.14!#'##'#53'#53333333#3#'7#!7#;'##%#3'˜W9©7W5iZF78X3KL>;HGÈ6CF1_nn\_2NNKþW.eRSdcRUdÈ?ýØ>,'ŠwqˆIŒ?))ýJ??$ÿékÅ0".'#73&547#73>32.#"!!!#3267¤>g@/S7O?/@l@c^3K,DsEþÉÿxD)E9G-AQ=;;9QA/CI&d_;;\k"Y+’Ù##533333###¬]77]F%xþ×ë¹ùn÷ÿÿgH*þÖ*þ×Hþ™gQÙ#5575575#5!#7ò]““““ð<ï™F]ö¹_F_f_F_ÜRRŸ]F]f"ÿ8'× 3654&#"2654''#>7.54632#b5( (Ghq;'j…C%ZK:P[DG}R§\F(%3ýÙ."t”êssPu@. (! K[J8e¤c¦aM]'šÙ!&-327!%#3#+##535#535!2)&+!654'¸ÂQ%þÈâ42<fFå]4444-Qlþ]3%LÂM‡1¤0 0=Fþ˸0D0}@=+[DZÿ£“ "+3#.'>=#53#'#5.54>7_Blu¿2:xGPOxkÜ 52JÎþ¨4 @;V@7T2 +<753#.'>73'b;þú(6N0;lh_8CL=`oy;YP~hd"=H;;*64`sG9ýÀDaˆnT> ˆ…þñ äÙ 5!!### Äþ<ij]´‡RRRRþãýø.ÿîì!67þ Z^O S$Mpb ýø.ÿîì!&'7!ýø– O_Yþ S bpMÿ6ÿòÿm¤3Ê7²ýNÿÿÿÿY3ã<ýèý÷ .#"&'67>326•D=–0'zc€$ 4›GM¥i27<* / $zl …#+=;ý÷ >32&'7'67.#"ý3¥MG›4 $€cz'0–=D•6i3;=+#… lz$ / *<72ý§"ÿ÷y !&'67 ýû OAbbAO à$ bM^^Mb ÿÿý§"ÿ÷y {ýžœÀþwmÿ’ $2654&"7#"&5462þí:-*@+ÞX;7!.'>7ýÁô*$!#=##=#!$*þ *$!#>##>#!$ç,+.*#??#*-,,,,-*#??#*.+ûrÿnÿÿT !…þ>þ< ûsGJÿýHæýCÿÃÿóí #ýdLýœíüÖ*ÿÿþËÿòÿm¤ ?þ€þPZH~#!5HHþP~ýÜÜHÿÿþ)ÿ_ÿÇ'yýÒþ|'yþ‰þ|yÿBþ|þ0÷¯!#5!#Gþ¿HÐGgp¸¸üBÿÐ" !&'670üå2y#d——d#y2781—#ww#—1ý®ÿJO###Jþ>GÅOþ>GÅOýN²ýN²ÿÿýûÿ ÿñÿÉ výé÷ÀÿÿýøÿÿîÿÌ uýæúÀÿÿý¶þâÿäG {ýI@0ÿÿý§þàÿ÷ÿâG {ýž{ÀÐþÓ6ÿ˜ò37''7'7ß)E F-!()!-F EòI':==:')ÿì3å4Af3#"#>32327#"5#"&5467>?654&32672#654&#"3273#".546ë:ýŽ:ŽN< ZK8E.  7    07N]I.,@43"0Q…8E='"#7,%P!= #A)&8 yÙýÁC<>-$Ù/8   1,0L  “ #2!R>,  $#1<+*1[2-,s—)ÿì>å0=Ay"#>32327#"5#"&5467>?654&32673#4632#454&#"#"&547332>54.1'.N< ZK8E.  7    07N]I.,@43"0QÓ:ýŽ:]J5A<" )3=7/(aP?G@(&,    58+­C<>-$Ù/8   1,0L  “ #2!ý ;Q/&  ( &!AM1, %0ÿé¥å!4>32#.#"32673!".00GyLî+_^W6+/:Z``!þõKwG/ªMd2bjO4îNNýÖejþß3Ni`¶×Qž—ÿÿÿéÑå"r‡&,3­%,4>753#.'>733!5.4%G1JC> K K CIØþÞ1G%­/45n$GI3PP QCþµ& Ob ACƒ3GG‚O XFCW0ÿìýå(:L3#2#654&#"3273#".5462#"&54>2>54&#"¬:ýŽ:Ò8E='"#7,%P!= #A)&8 yÈ?L /Q2=K /P#8,(#7,Ùýø>,  $#1<+*1[2-,s—þ K<AL=)K<@L=)þ£"0<+,1#0<*+20ÿì(å(?3#2#654&#"3273#".546#7#"&5473326?3ª:ýŽ:Ô8E='"#7,%P!= #A)&8 y.7 ,  $#1<+*1[2-,s—ý):*% #þõ F:Öÿÿ0ÿémåR+ÿé å$#533.#"#632# 33267#KRRõ x^W^_+îLyG0/GwKþõ!``Zg÷Î>s‚NNî4Ojb21`iN3!je“~ÿÿ(oÙ"r‘),!ÿêØÍt}326?623>3232676;2#"&54?#"#"&54632#"'32767#.5476?#"&54654#"+"54632%"67654#!'\&™ä€jÃaG14®tIc9#U( <^$:9L@<.yAÃP9K0#!$ ?4d–+HŸ\  VÒJ3.)%4$ i'!&j3–bÜP0@73%•þÕ©@6FI?fE3K8 FD60TkY¨[ˆ)& @"×>YkyW963 kU™…pD+-ÿ‘OÎi27&#"7>32&'654&#"327#"&54>73254&#"#"'63232654&54>7>58A � *-0Me4(,6 # +#$! &8   Q`K N (2$ %D0R  +'³ W,!  -"’p)EG,,6 0#"0(4 $  Á[n?A1M+ S+$!7)!8.YÙ 33###3#33ä¿¶¶¿¶¶7HH-Hž;ý'Lþ´Ù6ý“mý“mÙ3>32#654&#"#·T9/T8?HPTI/&Dd=TÙþò,$C;þˆW &/`RþßVNÙ>32#654&#"#?3U/T8?HPTI/&Dd=TzVWT ÃH“,$C;þˆW &/`Rþß?HR3:ÿï¸ÍM>74632"'326?&547>7632>54'4;2#"&Á>K(DO4_'M*3<þy/#!$( v?ž=^5&xm£5LtG)(Hq Q;Ý\:NU;!y:UE# ,Tþ«?":{VWAL6G,0ieK[xG *W| \‚(ÿ©O»846323254&54673#"&#"46323273#".#"BT569"Z 'YD1Ž``1J(!0TO>&B';"#W?Z4dAJ#+?GaZ€4% Ž{ !?.l#)# !J8)ÿï_âDMW4>767327>32327#"'#"5463267#"&"327&">54&Ö7B 46:EID]IAN>{W 61@6K'*@#VCw0¯gX@d) [{'D,D>Æ%5V`á">,- E.4!*3Ћ740XZB 91&q$3%2b,P;%†cþÜ #  &qXz1ÿõÆÖ$-327#"&54>7'7>324&#">Æî  /)=@k/5 4"o #63P !#!E?Xt )a) BN;02'B )9LS.A#- K9vl?QÿéÊÙ)!632#"'####5353353"32654&]þë9ihx|hk;KXTDDTXS’BPPBDUS 2©V”‚ZCný’n29999Óo¸ooY^pL†Ù #53##`w÷÷Xiþ‡X¤ý¹˜äþƒ}ý'Oý±Ùÿÿ<ˆÙ/R˜.f133@8ÿÿÿÿ½j&µ3×X.4ÿjÆ-6%#"'332>54&#"#"&547&536324'326*L2m2!'8 1B ?,0(,0/+(((2s–JUþ–9!þ.ZR3š.<'BD%IX$-M/$7\30CG.iWDjT*÷zþ’>X8YG![iÙ +#!2%3264&+3iq[Џ-luþªgCKKCžJJ]qþËÙoÿDxDý­&ÿÅæå!('#"&632/7&#"327%654&Ý/iVižÂžÃg?.1;@54@85þèW¦O2:W3ÓVÓÒª¬q58½ýÝ*ÕS——‰þ9Y‹N|ÿþÿïwÍ ‡‘2>54'%32676;2#"&54?65##"&54632#"'326?46367&#"3267>=4>32#"&547>3272"#"&#"6dDnnp*"0>+ "K]/ ¦" OQ4""J>ÌU;P/#!# >3;Ž=[Ž<{jç@7BF%?&  m1&:8=ûv…J2 $þì m y@'U¶À%E/(+0i(GD…2#qHnX€'$<" wU€ ¾f,wZO4 615 K:D()*H)/?NVˆ/  ßÿø­å!H23273#".5>54&#.54632#"&5332>54&#"[Ž‹),#  P42(9#!&%O[þÀaMLW*L9-YU$&&/ åNF)M+.EP70 16'Ev…`4' š)?PuY‡¼“GD, ?FrbK.J!> ]§Ù&*4&+326#&=4&+#!2#*LCˆˆJE +q:>—¶Pks6þ‡H H6û<`&0* ")8.IAC?þÆÙe^>Rþ®Sý­]ÿÉ0Ù%.#7.+#!273#.'4&+326_ ð]Pks6=!%\^‘" Hq:R8:‡ÕGQJ#ÄH6û<]ÿ˜§~$(037#&=4&+'7#!77#;2654&'7#Úô_d6= +q:>y˜8",ˆ\±•LJED<ð88E8YLdX>R&0* ")8.IAC?þ^SÙ'þŒûû32#"&'"654&#"3"&54>3232732>54.#"#4>7.'6732654.ú9D0  1Z9FQ7S[06%*3& !8 .'++' 6!!  +J.S="1)! ;QJg %@j!E-! (2D8(.\=Bl 4Q-*A%!* .!<&%/ S7 / 4D7'n6  2[G %-%ÿÿÿÿæF ÀÿÿO’Ù.ÿÿƇ"ÿò Ämxƒ74632"'3267>7&#"32>=472#"&547>327632#"&54632#"32>54'#"'#"&>54'632"327&"/"!$( B6;=IR™L?yoã96K:uA ­`5,7<öv†I4  5T78ÀZ /rX'A% !,oL%D5F?ÍU;NÏ(SM€'+   $/><" yVgm¤8'xQL5Any m5#7.54632677'"&464'327632"#".##"&">54&5467&)!!/2 LTs^V*!es!  &L'D1>A   V %P?$85BQJH CT!$N% 5 1²a·E 60!v$'* -$+-?#+A  Y   Aq…k^¨1  +¡.?Q0ÿÿ(ÿéHÿõ»ë %#"&5463232'>54&#"D._p;IÆqe¬s 0ZlCV# %SŒ+lL=“Úv=j(HÁ$&R9-ÿøÇÄZc74>7&54>2#"&54632#"32654#"632#"'32>54#"#"5>32#"&4#"326-9WGaŠzRe3&Y* !D-#S|+X<%3$?%3R.N=1Y6 a'N _1##>zJ216o+X P ]+J>TP JND3/.@:9^6 =n+/ "2OF< )ÿêÞØS}„74632#"'32>7+"5467>763267>32#"'"547#"&4>3232#"&#"32654&5463#"&>5&#")0#!$ ”+bV:@z ¦R *&,3?&  $'#C!t 7(/ûgF`Ù~¼TBÄ? CÃ@G…W5A\{ p#4é-;@"@;_K&%!=J;!.&A5,2 537!.n¶(˜>aM'M4MU!5{>"Gz#E !ÿÿ)Ù)lÙÀÿÜ¿Ïn7;>7676332>7>?6332676;2#"&547>7#"=>7#"&5463632#"'B: *Y:s IV<kþŒ "*1© v-“/G-o  Gl'+-?IvFþô-47…B@Ca"Z[è¤4#"+ÿÿÿôgÐ ›¹À$ÿì‘Ù E3###3#/%2#654#"#"&547332654&/.54>«:ýŽ:XÍXH+VII‰ /C"?n:=KY'+{$,-VÙý~ž ýóÖððt'( N8. # < '8-!JA 2.?-" # 5" #7,!ÿÿ} )½ ÑëÿÿEÿì[Ù#uþê# m{ÿÿÿì[Ù#uþê"t mÿÿEÿì_Ù# Aþê äÿÿÿì_Ù# Aþê"t mÿÿÿì_Ù# Aþê"u mÿÿÿì_Ù# Aþê" @ mÿÿEÿì`Ù# Bþê äÿÿÿì`Ù# Bþê" A mÿÿEÿìaÙ# Dþê äÿÿÿìaÙ# Dþê"u mÿÿÿìaÙ# Dþê" A mÿÿÿìaÙ" C# Dþê mÿÿEÿìÇÙ"{ mÿÿdÂÙ,ÿÿdØÙ#,,ÿÿdîÙ#,,#,,ÿÿd›Ù#9,ÿÿ…Ù9ÿÿ]Ù#,›9ÿÿsÙ#,±#,›9ÿÿ‰Ù#,Ç#,±#,›9ÿÿdŸÙ#;,ÿÿ‰Ù;ÿÿ]Ù#,›;ÿÿsÙ#,±#,›;ÿÿPÙ/ÿÿ0ÿé¥å&ÿÿY›Ù'ÿÿKùÙ0ÿÿB–ÙLÿÿBtÙ#LÞLÿÿBRÙ#L¼#LÞLÿÿBÄÙ#YÞLÿÿ æ Yÿÿ ŠÙ#LôYÿÿ hÙ#LÒ#LôYÿÿ FÙ#L°#LÒ#LôYÿÿB·Ù#[ÞLÿÿÙ [ÿÿŠÙ#Lô[ÿÿhÙ#LÒ#Lô[ÿÿD˜ÙOÿÿÿéÝFÿÿÿéïÙGÿÿFúP ÿñ®ÿ !&'67®üå2y#d——d#y281—#ww#—1-;Ž !#'67&'P81—#ww#—12y#d——d#y21ÿñ¿ÿ 75!&'7'6712y#d——d#y2Ü81—#ww#—1-ÿê;x 367&'781—#ww#—1xüå2y#d——d#y2ÿñÿ!!.'7'>7!.'>7‹A82%6/^66^/6%28AüþA82%6/^66^/6%28DCF @6a00a6@ FCDDCF @6a00a6@ FCÿêŽ!%'>7.'>7.'7òDCF @6a00a6@ FCDDCF @6a00a6@ FC]¾A82%6/^66^/6%28AýBA82%6/^66^/6%28%#654'327+(ýt1 X"q¯S@(ŽS¯q"X 1ÿÿ‡ ÿü&À@ÿÿ "+Àÿÿ‡ &@À0ÿî¿3!&'7'67!#08ä2y#d——d#y2ý8î1—#ww#—1îÿñ®ÿ2#!&'67!254&# NTVIý€2y#d——d#y2}i36æG;DD1—#ww#—1Q#+-ÿñ¿ÿ"3!&'7'67!"&546Ï63i}2y#d——d#y2ý€IVTæ3+#Q1—#ww#—1DD;GÿðZu3!'7!#7þ[¦¦nuýÏTpoT Ü®ÿ!67®ür‰’#y28v­#—1 ÿì®%!&'!®ý2y#’‰Ž×1—#­vÿÿ8ÿb\ñ‡ ÿ\À@ÿÿ#ÿ_Gî‡ 8À@ÿÿ ß® ÎîÀÿÿ-ÿô» ÛóÀÿÿ8ÿ‘\ ‡ Hÿr@Àÿÿ ÿ’D!‡  ÿr@Àÿÿ ÿ•®X& V ©ÿñ«!!!.'>7«ýQQèýHM)B\[[\B)M~5PP5b!QaVVaQ!b'7'>7'#'#H!QaVVaQ!b5PP5m)B\[[\B)MýHèQQý¸-ÿìºü'7!5!7'!5!'7Á)MýHèQQý¸M)B\[[\!b5PP5b!QaVVa,ÿí<z.'7373!QaVVaQ!b5PP5)B\[[\B)M¸ýQQèýHÿìÿþ!'7'7!.'>7!7'!ñ8L(PXRRXP(LýÈL(PXRRXP(x‘TTýoT}_"`^KK^`"__"`^KK^`"þÃVVV'ÿŸ7!'>7'7.'77'7H!QaVVaQ!bb!QaVVaQ!bÕPPPPÿ)B\[[\B)Mþ(M)B\[[\B)MØ0QQýÈQQ ÿø/6%#"#".'#".#"#52>32>3232>;&'7'6¼`w:<=92), (#7A>9;<9D= (#4g2y#d——d#yãgNc bP>I>"854Oc bPcc#1—#ww#—Ù 73#3#ÚKhÿxþücMÿèxþÛý'ÙÛNþ´+ÿéÅ%2#"&54632.#"#>"32654&#@G3!îeƒz_i:QL.> X k]@JP=>RRÅ3R^þ¦‡hc~O‚‹83Wbþ¦SGCW[DBSZTÙ !5!5!5!!5!÷þcþdùþLRéRý'RÿïÍ# 32654 &#"3#"'#7&54632ŠþJVt·ýÙ·Wq·nFi\ט‹fMJrYטˆh*þFJ·uþ÷I·qÎjgŒ˜×[Nsf‰˜×Y ½Ù33 ! &d)þ¦Ô§Ùý'hýê ½Ù!#7! ³þ×d3ÓþYÙý'q7h!".546;#!!;~Es\3³˜”ï”þm-IP4Œ!FyR˜žFÊF;Q)F7ÿ¯!33#3#;#"'#7&54677#?t7}”BÖì76YŒŒ^E7%užˆœ.p }Aº¯GFÑF®F[tM¯Ž þ’b¨Ì²-ùÔ74>;#"!!;#"'&-&5B1íí*6. ”þl -9%ííqJ$ê7W1 6 B/62C 6j2ÿÿ7ÿÿg )IgÀ7ÿı&3#7#537#537&'#5323&>7t7%Œ2ZqD7[q>·Î<2D”P?4 >/H@'±tN½QxF"<32&#"32>7#".'#"&54>32.#"32>d+)H!+.#  ! i)   &6$M,#g7"9|±”1Jd2>32#"&#.'#"&54>32>7.#"2654&#" §  !"!'<N9 5*+(*9N;3-1    )1Ô1-1)    ”   !0*5Y& Y5*0 = ! ^dH! !0Ee3V„SZsS BLÿÿdÿ ¶ÿ" E Eðÿÿdÿ Vÿ" E# EÈ E_ÿ Æÿ 6%654&/7#"'732=.546754632&#";P+%U$- 'ÛN8%<>! ^(: BEdH! !0>H¦ W&<  >/&/ zJYpEe3V„Ž ,6+9?A7.2")Q8‚?J,23 ' A8?::F/;1+#,!ÿÿ%!ÏÒ‡ JÿÖ@À3äæ 7#7'&#"#>3273326=3#"/¦E/571*q@590'*âNFKÉæ!%:Eÿÿ*$"t PJáÀÿÿ(m ½& 2¨ JE( æ&7#7#537'&#"#>3273326=3#"'!!¦E;t›T7/571J9@H590#(AþÀiF•$NFK,e‚ !%:EvFÿÿ2$& µ J 2ÿí,#7#537#5!733#3!"#>32326=3#"/&ÛE!…®=ëCŒµ<ñþåF/571u590'*b7FfF11FfF±NFKE!%:E?2 .7#7#537#537'&#"#>3273326=3#"'3!!!¦E?c5˜¼@N/571`)@6 5902æþ÷4=þ  FfF2NFK8Pk!%:E bFfFÿÿIpüæ& J¢ JþnI,ü:7#7&#"#>327'&#"#>3273326=3#"'326=3#"/¼E\ /5715I/571]>@L 5905>590'*=,£NFK_/NFK7oŠ!%:E `$!%:E'3Ò5$"#>7>2#.'.267>73"&'.'3C[Z# Z[Z "µZ[" [ZZ #“ +5  5+ ñ +5  5+ ÿÿ2o &  u2ÿìØ%!#7#537#53733#þþ6K6—´*Þû3K3ž»*µFƒƒFfFwwFfÿÿ(Y Á& 2”& 2% 2¶(ÿì  %!#7#537#537#5!733#3# þÓ.K.€ ½Ú ú(K(–³ Óð ŸFmmFKFKF__FKFK-ÿõ %!55% þéþvŠ8CC3EÏO¡¤O-ÿõ %!55-5þéþŠþv8CCxEÏO¡¤O-ÿ÷Ú %5% %5% ¦éþvŠüžéþvŠÆEÏO¡¤OÏEÏO¡¤Oÿÿ-ÿ÷Ú ^¼ÑÀÿì ?367>73#.'.#"##7#>76?&'.'3323lKE+" %?&U5 "Z-FKC1# (D&Z8 #Z- ¥ +5\5+ §Ÿ +5Z5+ -ÿì 75%737'#?-&@K0hJÙõ0K;/ ÆE|™r,O;°ZOhsŽApA-ÿ¼ð3#75?'57YK@²þݪ]OjÎCCCCéBj>-ÿ²²!!#7#5375?'5737ÿTSþK.KD·>õGKR$y°ElÇCCCC¡=OK”fOt§ÂAT1ÿÒ.".#"'6323275% $YLF%()|!YPG(þéþvŠ.//P„/0b”™EÏO¡¤OÿÒ.".#"'6323275-5$YLF%()|!YPG(þŠþv.//P„/0b”ÞEÏO¡¤O-ÿ÷Ú752$7&$-|mTqgkxIfþøÆEs\OL@DJOZuÿÿ-ÿ÷Ú gCÑÀÿÿ(ÿÿ [' 2ÿ: gÿÿ(ÿÿ \' 2ÿ: h‚-ÿÚ752?367&'#7&?-Š—MK651\;!3R3`vGKRo‹ "ÆEK¸€#)OTP<4OU7©Ã)-ÿÚ33"#756?.'567&PK[qeŒ™CK+3.Z8#2Q2^u$ $Ù*EMŸe!'OQS<3OS7]7X!".546;#;~Fr\3±–””þÿ'IX9ŒDwR—•FßB\2Fÿÿ7X mIXÀ7ÿŲ33#;#"'#7&546;Ÿ7XoŽ-<ŒŒE97˜±–Ÿˆï²ZFþ? FJ\DÇ—•þ ­ Ø”7ÿ¾«3##7#53&+532654n7%’°•7_u.@ŒŒI:‡é«vFÖ–BBF¿ FUþUÕÿÿÿêº' 2ÿòÿ% mbÿÿ6ÿë.·' 2ÿ& n_ÿ±î$%!#7#537&546;733#;#"''#þŸKLk,z±–+K>È0BŒŒP?» þÿ0F99FbJ²—•44FþBFF£¡ß„6ÿ±.î"3!!#7#537#53&+532654ÀK@G¢‹^þƒK0Oc‚½=nŒŒyO£ÅîKˆ•/F::F.F¤(F-tþ”ÄV(ÿïÜì !&'67%3 &=33265/þõ!RCffCR!pHÌþäÌH¬fd®K&!fQaaQf!¡´ƒÆÆƒ´¾b—˜a4,ú%!!!!,þøþM³òGþÿÿPHó v|ûÀÿÿB:ˆ' 2ÿ= vŽÿÿB:”' 2ÿ; wÿò¡ÿÿE7ù‡ v=-À@ÿÿE7ù z|úÀ+ÿñÝ£ 33##5#53$264&"6  i6ßß6ÝÝþ÷«ò««òàÊÊÊþâAÜ6ßß6^ò««ò«þMÊÊþâÊ+ÿñÝ£ !5!$264&"6  ~þòýâ«ò««òàÊÊÊþâ/6^ò««ò«þMÊÊþâÊ+ÿïÝ¡ 77''76  264&"Á'œœ'œœ'œœ'œþÎÊÊÊþâ•«ò««òä'œ&œœ&œ'œÊÊþâÊÒò««ò«+ÿñÝ£  '264&"6  Hþ &`þ>«ò««òàÊÊÊþâçþ &`Jò««ò«þMÊÊþâÊ+ÿñÝ£ 2#"&546$264&"6  †&$$&þñ«ò««òàÊÊÊþâŠ%4$%(9ò««ò«þMÊÊþâÊLÿÿq"!!#’Þþ"F"äFø"ÿÿÿÿD" !ÀÿÊŒl!#!5!ŒþäFþå}&ý¤\FŒ¢%!5!3ŒýƒFFFF\ý¤Lÿÿ"!!#’ˆþxF"äFø"Lÿë$$ !!!!#’’þn’þnF$ FpFœ8>>ü-5%>þHþÕññþ}Š>>ü7->þH+þÕöñ~ˆŠÿÿ>!>Ž' 2ÿ\ ‡’ÿÿ>%>“' 2ÿ` ˆ—Êœ!##3ÊXüÿXMþ›ÿÿÊœ ‹èœÀÿÿ=ÿÝ¿ ŽüÊÀ=ÿ®¿í%#".5332653¿M–\^˜MR—YaRèLŽ``ŽLý÷X‹S W.Ó« 2#"&546”&$$&«%4$%(@m–² 373'7@‚))‚j(ii(6||L}MM}>ˆü ?'%%5†ššH%%þÛÝš’okþšöÎÎþ ÎBÚk(ÿÈ ˆ#367&'!!#7#537ȏ7£K53.\:$4S3axV5þ¬KYxbnc‹˜5 !ˆu!'OSP=4OV7ÀF77FÚ(ELx(ÿÈ ˆ$33"!!#7#5375>?.'567&mK`h]ƒUkþvK#B=<75I)9V6f~#ˆ×$ED¿F77Fˆ&.O06C>7OZ8YBÿ¸:î33#!!!!#7#537#!!èK3:^´þÊ']þ%K%,P'wsØ´þöîfGþHNFJJFNòþVcþBÿ¸:î%!#7#537#53!5!733!3:þ~$K$+O.}¡³þ¬y-K-4þÐ.³ÇFFHHF\GcHZZþ\þc'ÿè Ï# 32654 &#"#"''7&54632ŠþJVt·ýÙ·Wq·‚$[\ט‹fa%aYטˆh*þFJ·uþ÷I·qâ#[gŒ˜×[b%bf‰˜×YbÿÿÙ!##bÖFÙFýmHÿÿeÙ##5eF×Ùý'“F_ÿÿ|Ù333_F×ÙýmFIÿÿfÙ)533fþã×FF“æÿ4Æ€ 4632&#"ædH! !1ÌZsS BLü“dÿ6;&#"'7325;%<>! ^&ýEe3V„;žXI %"5>32&K·Y9€UV€9Y÷Y@9229@Yÿÿ;›XF “äÀÿ::ê#:ââ;ææêþ(þ(ØØÿ:0ê3#;ææ;âêþ(þ(Ø(ÿ8T #57>7T_{RJ(R:…þÜöó¾b†7(ÿ8z 3#(RR ü(ÿJT #.'&53T.:R(JR{¶7†b¾óöÜþÿÿ,ÿ8X £€XÀÿÿÿ8X  ¢Þÿÿ,ÿKX! ¡€YÀXÿ8MN#3#¤Lõ©ÈLXÿ8¤ #¤L üèXÿ M 3#¤©õ ü5Lÿÿ7ÿ8,O ©„XÀÿÿàÿ8,  ¨ˆÿÿ7ÿ ,  §„XÀæÿ4;$#;U$üðÿÿ?ÿÿß®/1%¶Â/8)ÖÂ/)Âÿÿ3ß±/6#´Â/2÷ÚÂ+Âÿÿ3á±/7,×Â/;Â6#´ÂÿÿGá¯/()¶Â/7,×Â;Âÿÿ=ÿîé¯/4íÂ/1ÖÂ(¶ÂÿÿGÿÿܯ/()¶Â/2 ÚÂ7ÿÿÂÿÿ5Ò®/$0µÂ/&ÚÂ.òÂÿÿ=ÿÿÕ®/%"µÂ/(ØÂ/ÂÿÿÓ`np/6šhÂ%¸wÂÿÿ»e†o/+ŸvÂ7¼eÂÿÿÝdkq//ÂyÂ)¦dÂÿÿÃd†p/7¼dÂ9¹xÂÿÿédap/)œdÂ)ËwÂÿÿ½f‚o/&®rÂ5›fÂÿÿØbxq/6ÈtÂ6¤jÂÿÿÝdo/6ÍrÂ,ÀdÂÿÿOÖ­/(Â//,ÞÂ'1´ÂÿÿY­/';´Â/&&ÚÂÂÿÿYÇ­/';´Â/&&ÚÂÂÿÿYÿü·­/';´Â/&&Ú ÂÿÿYÉ­/';´Â/&&ÚÂÂÿÿ?Ò®/$úÝÂ/.òÂ1%¶ÂÿÿGÿÿȱ/1ìÂ/67´Â<ÚÂÿÿQͯ/(3¶Â/7,×Â%øÂÿÿ?ÿÿ×°/&0³Â/$ ÜÂ1ûÂÿÿÈlwh/(ªoÂ0tlÂÿÿDÿÿ×±/64´Â/8 ÖÂ%ÿÿÂÿÿ[ÿùè®/(=µÂ/61ØÂ&Âÿÿßa}p/)ÁwÂ6©iÂÿÿ½`}m/6©hÂ*¯pÂÿÿè_}p/5ÉwÂ6©gÂÿÿÎb}s/6©jÂ8±{ÂÿÿÛbnn/6ËqÂ3œbÂÿÿYÿÿÊ­/';´Â/(%ßÂ/Âÿ÷ÿé Ù !"32654&'632#"'#57537BPPBDUSØ9ihx|hk;K??SBÍo¸ooY^p~†V”‚ZC2@2zN3@â¸%53!53›Gþ0HHp¸¸pÿÿk±º/1FM /¦ #ÿóòÂ!3##52672#"&546"32654&ˆ%54&#"#546322#"&546"32654'.þßsG/3)(0=T@BW=Z) W‘ÑÒ•–ÒÕ˜–bT¿ˆ‡¿l+r©4 QK.=.-97- ?ST@9P<Õ’•ÓÓ—”Ñ!l\|‰À¿ˆc'-#ÿóòÂ2>M#67>32#"&54?32654&+532327654&#"72#"&546"32654'.66@&=PDQTC32"32654&2#"&546"32654'.3)19 L;LS>%C!M+en)67*&//‘ÑÒ•–ÒÕ˜–bT¿ˆ‡¿l+rè ^Q DSAE\'9nb<(1Ö=.3C<15?EÕ’•ÓÓ—”Ñ!l\|‰À¿ˆc'-#ÿóò %!#>7#72#"&546"32654'.î8SYDmMþ¢‘ÑÒ•–ÒÕ˜–bT¿ˆ‡¿l+rH*yÇibã\¬Õ’•ÓÓ—”Ñ!l\|‰À¿ˆc'-#ÿóòÂ"-9H"&54767&54632'"32654&"2654&2#"&546"32654'.ÊUU‚S/HN<;I)Q&..%&1.+)46P41&‘ÑÒ•–ÒÕ˜–bT¿ˆ‡¿l+rnX72#"&546"32654'.àŽ-'=9"4*'>T.*RþÊ),-Â,K4IH4þ>4IH4ÿÿ2î¼&Äg2î¼ !!!5%!5!%5!!52¼ýDPýäýäýä¼ýD6PPPPPFFþpFFÿÿ2jîÿÎ@À2î¼ #'+/37;?C%3535#3535%5##3#3#373535#35353535#3535!!XFFFFFFFþ*FFFFFFFFPPPPPPPPPPPPPPPPæýD¼–FFF–PP PPðFFPPPPPFFFFF–PP PP FFF–PP PPþʼ2î¼ % 5#'5'35!!›ýɶþn4þX¿þ‘åFŸ÷aáGš2ýD¼25~þIXýÌŒ¨ý¨qŠç¡¡XþŸ€áššýv¼ÿÿ2m2îÀ@2î¼  $(+.26:>ADHLPTW!#7'#77'73'7'3'7''7'7'7#777'/3'7''7''7'7/7'îýDgw<^;;çz=c@?@jF@FX55ýÌ{=b??÷xiFEF#F@FÍ@F@FFFÂ;;šy=c@@@$@F@ËE@E(@@@Ê>>¼ýD¼2<;;š=@?@iF@F55÷>@@¡#FEF#F@FÍ@F@ªFFFL;;$<@@@#@F@ÌE?E¨@@@M>>ÿÿàµfÔàµ35'3#P€°°†SS/¯dá¼ !!dXý¨ þÔdá¼ !5%!!–ôýÚXý¨ÞÎÎ/þÔÿÿúA&™‡rýÀ@ÿÿúC&›‡sÿÀ@lè`!!½+½üÕ`þ lè`!%!!嘷—ý"+½üÕ0þk•0þ #ZÂ)ZüÉœÂ#ZÂ% !ýþÂþÀÛüÉœ3ýá3Âÿÿ€°xo° €°%'!ÂsxEþeÎßÐÐ/bÿÿ^ÿÆ ý‡x^ À@ÿÿ^ÿÆ ý‡y^ À@ÿÿ´†"‡x´3à ÿÿž“0‡{ÿî°À@ÿÿ^“ /‡x^@à@]“ /7-‘èþ3ÂÕŒŒþ¦›Îÿÿ#ZÂx}ÂÀÿÿ#ZÂy}ÂÀÿÿ­x.àÿÿ€°{ÂÀ^ÿÆ ü ý>üüÊœ^ÿÆ ü ìýâ4ý>ŸþÂþÁÚüÊœÿÿˆ„é ‡xés àÿÿž’/‡{°@Àÿÿ^„  ‡x s Àÿÿ]“ /}ÂÀ$ÿóòÁ ‹þ™gg ggþ™$ÿóòÁ% ‹þåþäþ™gg?þâþ™ggþ™$ÿóòÁ %'7 ‹ŽŽþåþäþ™ggÍŽþäþâþ™ggþ™'ÿòùÄ 2#"&4>"3264%2#"&546”_Žd`‘–×x|±þÙ‘ÒÔ•–ÓÖP”a`‘•¾“=¹ì»µòðÕ”•ÔÕ—•ÑÔè # ÀÀ>ÀÀ   ¡èþŒþŒttýT88þÈ'ÿòùÄ"3264%2#"&546 x|±þÙ‘ÒÔ•–Óֹ컵òðÕ”•ÔÕ—•Ñ'ÿòùÄ %-39?IOU[agm3#654'&'7'&'7'&'7&#"5632"'52767767767%#&5473&'&'&''67'67'67»=< 8 q*†…  KQ+ 8 ý<< : s-ˆKO-: y KQ*"5 8ýk;;8 q,ˆ‡  JP. 8 d 8 p-‡'ÿòùÄ #(,2#"&54667&67&'%64–‘ÒÔ•–ÓÖwZZ!þ³!W!=ÄÕ”•ÔÕ—•Ñýj] ý¿ Zý£ B &ýöªþ þXn?BDÀþ=„'ÿòùÄ *"32654&'2#"&4>"3264%2#"&546“IqnILklG_Žd`‘–×x|±þÙ‘ÒÔ•–ÓÖprnJJp:”a`‘•¾“=¹ì»µòðÕ”•ÔÕ—•Ñ'ÿòùÄ 2#"&546–‘ÒÔ•–ÓÖÄÕ”•ÔÕ—•Ñ'ÿòùÄ%2654&#4632#"&v¹¶yþ˜Õ”•ÔÕ—•Ñ.µx|±þÙ‘ÒÔ•–ÓÖÿÿ'ÿòùÄ– ¶Àÿÿ'ÿòùć–ëÿË@Àÿÿ'ÿòùć–5ëÀ@'ÿòùÄ #"&54632%"3265!ùÕ”•ÔÕ—•Ñþ˜uº·v|±þÕU‘ÒÔ•–ÓÖš´z{²´y'ÿòùÄ"!#"&54632‘v¹/hÕ”•ÔÕ—•шµx‘ÒÔ•–ÓÖ'ÿò–Ä"&546–—ØÖÄý.Õ—•ÑÿÿŠÿòùÄœ ¶ÀK^£ !"32654^þ¢ãhII43J£ý¨XÍIhII252î¼"2#".5467"32>54.%!!J–ƒNL†OL†OSÔa¢^] ^^ ]]þA¼ýDƒRˆLL…QT‡JJ‡‡\ž^` ^] ^] ^ýD2[î¼ !#4&#"#2!462¼Ê‹”Ícrªý¾µ¼þŸŽÏË’(²vt´ÿÿ2îa  ¼À']–Ä#463"c<Ö™x»]–Ñ7¹ÿÿ’Uùć¢5ëÀ@ÿÿŠùg¢ ÄÀÿÿ'Žo‡¢ëÿÙ@À']ùÄ "#4632#.•w»<Ö™Ò<±¹w–ÑÔ“y·ÿÿ'ùg¦ ÄÀ–R¼!RýD¼ýDÿÿ–R¼‡¨–RÀ@ÿÿ–R¼¨è¼Àÿÿ–R¼‡¨Rÿj@À2Ü,Ö "32654&2#"&4Í<,,+~hIJ34I¤- +* !]J52IIh2î¼!%!!,ýv¼ýDŠý¨X2ýDÿÿ2î¼­ ¼À2î¼7!%!!a[ýv¼ýD.\2ýDÿÿ2 ¼À2î¼ !3!%!!c/ýv¼ýDŠý¨Xý¨X2ýD#Z #5 !îhwþÂþÀÛüÉœ"hhïýá3Â#ZÂ%!ýþ›üÉœ3ýá3Â#ZÂ7! €>þe›œ3ý®Âý>ÿ½j "32654.'2#"54$¿•êã–›Þf¬`®üþ³´ýíèþØêä—c±k2ÿ±³þÿ¶³ú2î¼ !!!!!!2¼ýD2Xþí2þí¼ýDEþé\þ»Eþéÿÿ2¶îÿÏ@Àÿÿ2î¼¶ ¼Àÿÿ2¶2ïÀ@'ÿòùÄ 2#"&546!32654&'–‘ÒÔ•–ÓÖ~j¤ þé °q|±¡oÄÕ”•ÔÕ—•Ñ8 ¤j.p¨µys´ þ¹ÿÿ'ÿòùćºëÿË@Àÿÿ'ÿòùĺ ¶Àÿÿ'ÿòùćº5ëÀ@j„O%!Ï5þ™çþþÉ72þÿÿœhO‡¾2ìÀ@ÿÿœê‡¾ëÿf@ÀžjƒO!%!!ÐþMåþþ2þj‚O!!åþOþÈ|X !%!!ö4þžþpèþ¸H$þpÈ|X !!Èþp þpÿÿœjƒO¾ ¹ÀBÿ?_ Œ–654> 54.''#"547&'#"&5475#"&547&'&/.54>75&'67.5467.'>7'>54&'ˆGSRL#q 08"5"( ;N$V&[&-2F >3'  x))[&V# ;,.'6:s(2". U_^T%  T`acMUTH)xnABp`L_þÖ P #-(86C# =**rY-{/r2)T"5 ] ]#  04 T*1r0{,4G=:J-?xIWP!‚LJ "   LMpB@n~YT"OÁ$%3!56767#"&54>7#"I(,C$þU,T 4R5K,FJHGKF-K5Rî4P* 8vPJ5-J=BkCBjB>J.5J#ÿò“À:.'.5463267632">54&#"#".'&\Qm<+U>U22F=W6EžÄ1='5?&DJF.84?/ 9K‰ŽOY/?VK,6"8T;8pWÃ/F4%KFR 7(/hX[c/398 /!*J"ÿò0Á &'67>7.(¸8F¡!J¼ÁE;——;8-“Á0ù>PÜ<„äé6jµ¶j1°?0É#åÁ8!5>7#"&54632&5462>32#"’ ".F-þ-F/! O&@\S;""']‚]'  ;S\@n%%9%./$:#,"(_CA\ 82?ZZ?28 \AC_"OÁC%3.'32654.'3263!56767#"&54>7#"=!2ß8"L2.@,740 ??;%@.K((,C$þU,T 4R5K,FJHGKF-K5Rœ?('Ðt?.!7&//O09Z40='.?J4P* 8vPJ5-J=BkCBjB>J.5J#ÿò“À>32.'.54632\Y6=W5QTMQm<+U>w0JFT;6phi†BK‰ŽOY/?V"ÿò0Á &'6(¸8F¡!J¼ÁÁ0ù>PÜ<„äé#åÁ/h%3.32654&#"654&#".#"32>!5>7#"&54632&5462>32#"„!2ß8"c`%G<$vLB44A2.+8!?D(.%  ".F-þ-F/! O&@\S;""']‚]'  ;S\@nœ?('¨H538 l6&DF$e#A37G )(H%9%./$:#,"(_CA\ 82?ZZ?28 \AC_7¶ %#"&46323B,-BB-3"S%..J.-7ò¶"&46323#54'&BZBB-6 ‰T‰&÷þ\%..J.-7mC”88m7™¿#"&4632#"&4632"F0/FF/:#F/0EE0:"kþs&--L-¬“þ'&--L-b7™¿5%#"&46325%#"&4632€þ¢wF/0EE0:"þ¢F0/FF/:#­==þ'&--L-Úþû&--L-¬BÿëpÚ #"577>324&#"326p;W_&(  FNW%'30;b,C|R0Ç þÊ VO7&'32.'>?/&54654'2>2%2367>7632327#"&'&/.'&547#"&'>7&'>;&5477654'4?&54?&472>54'#"&'#"32?632#"'%>7.#"327'&547.'&'6324654.'.#"3263232654&"#"'.'&'&'&'32?6=#"'>7>7&54672>7327"&+"327>32&#"54#"+654.'6767›94OgB/4PB6Ê*'#C  / ˜Fs3IJIž  ý¦  +b] ‚i ),/KImL W!+a>E,'ƒ Y3q2VU U (%# †  (Ø[]DZ ¯A'$04[,  ).P() -2þ >…c`* f…8''j)6 -M01$"" 8 9+ "# vpn #AYI[ o#,ü&g!!jV0D9'0*A   H ! E"   !   Å:## H% þG " # O0•:/B4G/93NF W  >FH ¦   ˆ*{/ ) N !!" %5T ¡Em*a &x18_ Mx'+26LL 8Þ<ÞÞþÄÇ dþ®e ePÿdÎ<ÞÞþÄÞ¤dþÿ´dþÿHˆØ !# #7H@ðð_ÁÁ_ð[‹‹Øþ”þ”$þÜlÓÓHˆØ )33'ˆýÀðð_ÁÁ_ð[‹‹llþÜ$þ”þäÓÓHˆØ )! 7'ˆýÀðð@𼌌‹‹llþ”ÔÔýÈÓÓ0ðâ462"$462"#3\+>++>þ©+>++>ÝPPy>++>++>++>+ý²Ø0•Ø!# #3•UÞÝUUcýØ0•Ø33#0UÝÞUþøUØýcý(HˆØ !!!!!ˆþðþðýÀØPôPôPØHˆØ 35!5!5!5!5!Hðþðþ@PôPôPý(6ÿøÞ#264&"462"264&"462"!5!ñ"."".qPpPPp"."".qPpPPp,þèm.""."qpPPpPþÉ.""."qpPPpPLPHrØ3#3###53#533Šè˜˜èZ蘘èZØPýÈPDþ¼P8Pþ¼HžØ ! ! !iþïþðVþî§þ¡KþµØþ²þ´JþWHÿöâ462"462"462"t+>++>þ©+>++>++>++>M>++>+þÿ>++>+ƒ>++>+HžØ ! žþîýªrþ¡šþ´þ²ØþµKýx©þW8ÿð0è 66  >4&8Þ<ÞÞþÄwo––oPo””Î<ÞÞþÄÞ¦©ä©Sý®©â©8ÿð0è#46327#"''7&&#" 326548Þž†j080TÞž†i/8/U3Qf|°>Ýþ[Rd|°lžÞU080i†žÞT/8/jt>°|fQmþ[=°|dHÿöÜâ462"462"462"462"H+>++>++>++>++>++>++>++>±>++>+>++>+>++>+ƒ>++>+0pØ3# #`ðð_ÁÁ_Øþ”þ”$þÜ<|Ø 3#333#!ŒPøPøPþ`”Dþ¼þlDHˆØ3#35373#¨`ðð_™P™_ðð`Àllèèèèþ”þ”#4@ì462"462"462"462"X+>++>++>++>þ±+>++>++>++>—>++>+þÿ>++>+W>++>+þÿ>++>+HžØ !!!÷þ¡PVýúˆþWߨý‰P6"¾¶462"$462"$462"*+>++>þÛ+>++>þÛ+>++>M>++>++>++>++>++>+:Ø  %5-5%íþÄmþ8=þÃÈþ“–Ur„K¤VrrV¤K„0pØ)5333pýÀøPøPˆýx<ÿð<è "3"&632644#<|°°|žÞÞžý|°°|žÞÞž˜°ø°PÞ<ÞýX°ø°PÞþÄÞ6Ø!#5##5#535#53533533#3#'#3PZPïïïïPZPïïïïPZZïïïPZPïïïïPZPªZHÄØ 3#3753#˜PPÜPPÜØþ_ÜÅý(¡ÜHˆØ%!!!ˆýÀ@þPPØPýÈZªØ3#3ªPPØ6Ø!#5!5!5!5!53!!þ¼Pþ¼Dþ¼DPDþ¼?PïïPZPïïPZ&ÿ ºØ 462"7#3&+>++>GPPµ>++>+àØ?ÿðgØ &5467%!5!32654.'†X‰”ÿ”O<þmþÂKIf^]g&?4¼‚_`v{aI~,ÉPPç6]B@L=I,D'6ÿøFà264&"462"264&"462"…"."".qPpPPp"."".qPpPPpo.""."qpPPpPþÇ.""."qpPPpP8ÿð0è264&"6  ˆ°ø°°øÿÞ<ÞÞþÄèø°°ø°þ6<ÞÞþÄÞ7ÿî0ç4632'#"&"327'7654&7⛟ÝUL8Lh‡ Ý}z³®cSÓ9Ò>®j Ý⛇hL8LUáÈ®y³>Ò9ÓOgz³HˆØ 3###3!8PøPøP Øþlþ¼D”þ¼<ÿöÐâ462"462"462"<+>++>++>++>++>++>M>++>+þÿ>++>+ƒ>++>+8ÿöHâ'$462"462"462"462"462"´+>++>++>++>é+>++>é+>++>++>++>!>++>+ƒ>++>+þÿ>++>+þÿ>++>+ƒ>++>+8ÿð0è462"$264&"6  j+>++>þó°ø°°øÿÞ<ÞÞþÄM>++>+Æø°°ø°þ6<ÞÞþÄÞ7ÿî0ç46327#"&2654''7&#"7Ý ‡hL8LUÝŸ›â}~®>Ò9ÓSc®³k›áUL8Lh‡›âݳzgOÓ9Ò>³y®8ÿð¾è'/7%462#"&54632"&547&#"327&6264&"264&"®PpP6SX) Üá›%UW9PpP$ y³®~ $O"."".""."".ž8PP8,F'á› Ü%H.8PP84)®~y³)K.""."z.""."6rØ 3##5333#üPvvPvvDPDþ¼PHˆØ 3# #3(`ðð_ÁÁ_ðð`ÀØþ”þ”$þÜllþÝ8ÿð¾èB264&"264&"462#"&54632"&547&#"3533##5#327&ý"."".""."".qPpP6SX) Üá›%UW9PpP$ o«aPvvPa§s $Q.""."þB.""."98PP8,F'á› Ü%H.8PP84)”pvvPvvm—)HˆØ!3533##5#!!ˆþP„„PðýÀØPôvvPvvôPØ0•Ø !!ý›*ÀØý(ØuýíHˆØ7!3!3˜ PýÀPPˆý(Ø<áØ '%<w.þçþ‰.ÑBÅÅþùBÅ6Ø#5.5353>53#4&'#5#46wŒµP‡jPi†P´‹‹´P†iPj‡Pµ À  a@r ¼¼ q@`  À  `@q ¼¼ r@a H˜Ø3#3#'˜P_ñ` Øþ”ó6Ø+.5353>53!!#4&'#5#4675!5!wŒµP‡jPi†P´‹$þÜ‹´P†iPj‡PµŒþÚ&Ì  a@r ¼¼ q@`  8P8  `@q ¼¼ r@a  8PH¼rØ353!3˜ŠPþÖP Ìþä.¶575îîîHTHïHTHFtÙ%1264&"264&"%2"&546!2"&546'#5!#3!53‚mþ%34H44¢%34H44¹›r››þŽ›p<3%$34$#43%$34$#4à<<ýŸ<<FtÙ&19A#5!#3#3#3!535#53#532"&546!2"&546264&"264&"?›r››››››þŽ›››››Ý%34H44þ¦%34H44†þq<<<<þ<<<<<<q<¤3%$34$#43%$34$#4MFÿÃ^Ù2%#"'#7&54>7&'#"5325332?373327^5R.($E8A":!Dƒ<Ža?VC4B!;7>謬¬§÷DA,=3,`… .FÚÙ!3!535#5&5#5!#32>5+X‚þÀ‚åo‚@‚C6*# :LS ôþH<<´Ž2í<73#3!535#535#5&'LS þÓ„‚@‚v9&*# ‚‚‚þÀ‚‚‚åO,bDù<&<<<;> þÀ<<<<<<<Ž$ƒFÿô å%-5=46323>32#"&'#"&5467##"&264&"264&"264&"FR:2L œ L2:RR:2L 00>RtR>00 L2:/B//B/B//Bþú/B//BtR>00>RtR>0þÎ L2:RR:2L 20>­B//B//B//B/ýøB//B/Fÿô\å5=EM462"$462"#"&'##"&46323.54623>324&"2$4&"24&"2((((R:2L ì L2:RR:2L X0>RtR>0X L2:/B//Bþ1/B//B./B//BR&&&&{tR>00>RtR>02 L2:RR:2L þÎ0>­B//B//B//B/B//B/FŠÙ326=33!53#"&5467šI4DŽ<}þÊ})u4Mlw_?`):e<ýc<<¦>謬FÆÙ2533#3#3##"'#"5325LŽ<°°°°°ì,E Eƒ<ŽÙ¬¬©<¾<¾< >>謬FÿôôÙ:D#"'#"'#"54675#"'#"532532536532>53323265Ë)9= =H%DOOŽ‹e,E Eƒ<Ž<Ž>H9 C^t®?[È>>謬¬¬þo‹#2992##29=A,-6eMFÿôôÙJT$462"462"#"'#"'#"54675#"'#"532532536532>53323265´((((û)9= =H%DOOŽ‹e,E Eƒ<Ž<Ž>H9 C^t®?[È>>謬¬¬þo‹#2992##29=A,-6eMFÆÙ!#"'#"53253253353#5#Ú,E Eƒ<Ž<Ž>謬¬¬þ]CÄEúFÿRÆÙ1"#43232>53#"&%#"'#"53253253353#5#®>謬¬¬þ]CÄEúFŠÙ 573#573#NÚÚ<<þÒÚÚ<<”€Fý'”€Fý'FÿôÀÙ3##"&546;!5#"3265Öê<®r¬rrVŒþ¬TŒ5‘Q>œ>>N=Q< (!6-E9j9E-l-E9j9E-6#óJ_3333`J+1"]”k{{k”]""]”k{{k”]"( FJ‘09B%#"'"'#"&53327&546227&546232>5654&"654&"‘Q>œ>>N=Q< (!6-E9j9E-l-E9j9E-6#Ý2(æ2(óJ_3333`J+1"]”k{{k”]""]”k{{k”]"( JzIaaIzJJzIaaIzF>§‚#$462"462"462"#3!!!!©&&&&&&þ<<‡þy‡þy((”(( ((òDÈ<<<F>§‚$462"462"462"#3!!©&&&&&&þ<<‡þyÌ((((d((òDþü<FòÙ [>54&">54&"#5##333327.546227.5462;333#5##5#"'"'+*4*þn<<<<<< 6-7n7-l-7n7-6 <<<<<< N>>œ>>N )6)FAAF)6))6)FAAF)6þÇ……Ùýèýè"#(A)f]]f)A(#""#(A)f]]f)A(#"ýèý'………3333F4Ù=2654.7253#.#""&54>7&#"#3>326½! *.* !†)k<<n.6-' DrD '-6.n<<k)N>>É ,(DCCD(,”9+éý'Š;S"2)(d__d()2"S;þvÙé+933FÙ3333#####5 <×<ÅÅ<×<Å‹Nþ²Nþ²<þ±Oþ±O<FŠÙ +32654&#"326=33!53#"&54632#"¥!4"8FI4DŽ<}þÊ})u4MlyK+9H1>c' t):e<ýc<<¦1•`²`•'L~:CG6ô&&&&­n*™[D?`˜*o>;‹ZzzZ‹Â/\§yMKIO€F‘Ù@IR462"$462"#"'"'#"&53327&546227&546232>5654&"654&"H((þÌ((EQ>œ>>N=Q< (!6-E9j9E-l-E9j9E-6#Ý2(æ2(–&&&&þ0J_3333`J+1"]”k{{k”]""]”k{{k”]"( JzIaaIzJJzIaaIzFÆÙ#"'#"53253253353#5#3!53Ú,E Eƒ<Ž<Ž>謬¬¬þ]CÄE¾<<FÙ/$462"462"'#"'#"53253253353#5#3!53?&&&&‚,E Eƒ<Ž<Ž<°<<°}þÊ}Â&&&&d>>謬¬¬þ™CÄEú<<FÆÙ'#"'#"53253253353#5#3!535##533Ú,E Eƒ<Ž<Ž>謬¬¬þ]CÄE¾<<¾EÄCFÿñbè1972653#"&54?&546327654&"#4632#"&264&"±& .D29T:;P&3R:% .D/>QtAHHAAHHAé¼,G+/8SG[5*”+6gD+*>>QtAHHAAHHAþã= Fÿ«Ù Y%32654&#"#"'#"&532653265363232653#"'&''767&=#"'#"&532653265:.2""’,E ED?<R<R< ?+1H)" =%"<ƒv @/PC5*”*5PN(E ED?<R<RÓ= 6>>QtAHHAAHHAé¼,G+(4J59ªˆ>G[5*”+6gD+*>>QtAHHAAHHAFˆÙ% ˆþ¾Bþú··Ù·µFrÙ GQ&#"32767632#"'#.547&'#>54'#"&5463232654&#""7 "d\CC\3`);H1)0 !00H4( ;QQ;,,H8+# 0)1H;)`§." 7=^+ 3:EE:~J1+G8D-paU ]Yv0SF$HH$FS0t`R !`Zs-D8G+1J› +F™Ù"*264&"462353#5#"&5467.264&"‚EfEEfi–i2á<<â3i–i.&'-532>53#"'#"&532>532>53#"'#"‚ -:- < -:- 53#"'#"'2>532>53#"'#526=#"&5332>5463" 7%- 7&'#"5325332?3327#"&ø((x((©":!Dƒ<Žè¬¬¬§÷DA,=9X.+?|Fÿì´ÙB462"462"462"'4>7&'#"5325332?3327#"&T((x((x((©":!Dƒ<Žè¬¬¬§÷DA,=9X.+?|F\Ù3632#"&=#"32654&F<þp2::52:x‡<«Ùþnè<42:<5IŠöóF\Ù".6462"462"'3632#"&=#"32654&ú((((Ð<þp2::52:x‡<«ü((R((Ãþnè<42:<5IŠöóF¿¢462"Ffff%fffFÿR"#43232>53#"&462"®532653#"'3"&54654'&'#"&532653654&5463"64=8r83#264&"462353#5#"&5467.264&"$462"462"Ñ<<ý±EfEEfi–i2á<<â3i–i.&'-32#"&54>73264&#"‚=H<( h9dtƒU|„=VR–/iFVOK5`¶8Gd6Q9KUuKYw¾¾C„Y:ý¯NafQsFÛ#+>32#"&54>73264&#"462"‚=H<( h9dtƒU|„=VR–/iFVOK5`c((¶8Gd6Q9KUuKYw¾¾C„Y:ý¯NafQs/((FÿôÙ"*2<53#5##"54635#"'#"532532536462"462"'"3265Æ<<°OOŽ‹e,E Eƒ<Ž<Ž<*((((‚Jh((,6HŽþ¦F^t®AeÁ>>謬¬¬þoJ((Þ((K.-6eMFÁÙ %"&63"#"&63"Á•ÓÓ•~®®••ÓÓ•~®®<<Ö.Õ<²ü³<Ö.Õ<²ü³FÚÙ+73264&#"5632#"'%&#"327#"&46325O;SUllUS;BLi””i+'F;SUllUS;BLi””i+'ý& )H) ?MxM z…þÛ )H) ?MxM zFÿôÀÙ33##"&546;#"3265š<ê<®r¬rrVŒŒ53#"'#"&53327&5462'654&"ì!( >N=Q< (!6-E9j9E-V2(†1+J`33`J+1"]”k{{k”]"OJzIaaIzFÿÐ09462"462"2>53#"'#"&53327&5462'654&"-&&&&^!( >N=Q< (!6-E9j9E-V2(((Œ((º1+J`33`J+1"]”k{{k”]"OJzIaaIzF1Ù$326533253#"'##"'##"&53325hT"27&'#"5325332?3327#"&":!Dƒ<Žè¬¬¬§÷DA,=9X.+?|FëÙ,!4&#"##"'#"53253253632#4&#"632­,4<,E Eƒ<Ž<Ž<#+4S>,4",4S 66  >>謬¬¬þhT> 66 WT>F´Ù#$462"$462"##"'#"532532536((((Z<,E Eƒ<Ž<Ž<Ú((((¾ >>謬¬¬F1Ù,5>"&546323>3"32#".5##526733254&#'4&#"3dt\Q(:38 Vkf#,thAdt\Q(:38 Wkf#Fº²3@qOKõ3@qOKOqK]qE‰eL…P-3212bej)u+=HODCQQCDOH=+u)jebǵDEJ?T0-u'&'&-&'&'u-0T?JEDFpÙ-2#"&'732654!#3!52654&#"'>32Ü2bej)u+=HODCQþâ<<QCDOH=+u)jebǵDEJ?T0-u'&'&xþð[þñy&'&'u-0T?JEDF¾Ù!2>532>53#"'##"&5‚ -:- < -:- 53#"'3!53d+FTY< -/8˜›<›˜8/- 532>=3##"'#"&5$462"462"‚ -:- < -:- <<-D]22]TY &&&&.RD))DR..RD))DR.¼ý'/;yy¦ƒY((þ2&&F6Ù%-53#2>532>=3##"'#"&5$462"462"ú<<ýˆ -:- < -:- <<-D]22]TY &&&&Ùý'.RD))DR..RD))DR.¼ý'/;yy¦ƒY((þ2&&FÙ3#3#3!!!!F<<´<<‡þy‡þyÙý'Ùß<¢<Fÿ@Ù%"#43232>53#"&3#3#3!!!!øþ(!//!:RR:0þ磣<¡ý/B/32"&6264&"6264&"‚\€\\€"Y}Y:cc:Y}Y²<\€\\€^\€\\€N‚[[‚[þ!92~²:00:²~29Y™€\\€\è‚[[‚[Fÿòjå08@$462"$462"264&"47.4632>32"&6264&"6264&" ((ý (( \€\\€"Y}Y:cc:Y}Y²<\€\\€^\€\\€†((((ä‚[[‚[þ!92~²:00:²~29Y™€\\€\è‚[[‚[FúÙ 1<G73265"4&#"2>#"'#"&547&546326324.#32634&#"‚"UoKj5<"UoKj5#"'#"&547&546326324.#32634&#"ú((ý0((>((((þö"UoKj5<"UoKj532%3&"3&#"•ò´@<Š@´ò)R1<;1%:ýöºŒôºFEîþ…þ{}þƒîk/Q<==<#/E/9sssFÿìÈÙ7273>7&'#"5325332?3327#"&547&'#"'‚†<A :!Dƒ<Žè¬¬¬§÷DA,=9X.+?|Q"%5>ÖF Ù!#"&54733273Ñ%u8Ml\PpI4ŒF<]Bpknm):GþFÿö4ã/264&"!5>54&#"#46323>32#"&¸^„^^„˜þÔ*i66J.75<\LKi;,Tä |Q[[T|„^^„^ºS!K'46$;@!*;LY^%A.6 <Ok¶pFbÙ /5%#264&264&"32+"&5467.546"3r=&5432654.#" I ½<+-ƒdÀB!!H) 1%$1<H."Àdƒÿ I㸠+!E#þ£o!!GÂ=> ]Yv0MÂ;: !`Zs-!!o£õD!+ F¸Ù #5!#3!53á›r››þŽ›<<ýŸ<<F Ù2533!#"'#"53255#LŽ<ôþÐ,E Eƒ<޾¸Ù¬¬þ”þ“ >>謬ýcõõFvÚ353#5#3!53##53§“<<“}þÊ}é<<”þÙCÄEõ<<BÄFFvÚ%$462"462"'353#5#3!53##53Ä((((9“<<“}þÊ}é<<Â&&&&ïþÙCÄEõ<<BÄFFvÚ##53!353#5#3!535##533ké<<%“<<“}þÊ}“<<“XBÄFþÙCÄEõ<<óCÄEFŽ…!53#5#3#535##53#Ç‹<< EÄCëEÄC`EÄCè<<è%<<FŽ…%$462"462"!53#5#3#535##53#Ò((((þÙ‹<< EÄCëEÄC²&&&&5EÄCè<<è%<<F3Ù3732654.5463253#5&#"#"&'#3‚@.Us0L\]L0„c9s<<_gKd0L\]L0’p=F,<<’TA,8$I6Sl2ÿmWK9)4&L8[s2F3ÙC462"462"32654.5463253#5&#"#"&'#3(((( @.Us0L\]L0„c9s<<_gKd0L\]L0’p=F,<<ú&&þÝ&& TA,8$I6Sl2ÿmWK9)4&L8[s2Fÿÿçâ/77>32'>54&">32'>54&#"462"‚1?oxATyQ*+"HVv|qMY K3ZOk5TyQ*+"HV;eÈkÛ&&{+0F"eN8H *6)4C)J;Oé C+?%eN8H *6)4Cp]1((Fñüé46323>32#"&'##"FI3+C Î C+3II3+C Î C+3:fI5))5IfI5))5F+Ù  3#篮¯ çæçkþíþêþ“þ”mF1Ù462"$462"% 3#Ñ&&ýX((¯®¯ çæçZ&&&&.þíþêþ“þ”mF Ù !5!!53'!Îþxˆ<<þ´}Ú‚ý'¹bþžF¾Ù)2>532>53#"'3##5#535#"&5‚ -:- < -:- 532>53#"'3#3##5#535#535#"&5‚ -:- < -:- 75#"'#"532532537#53265OOŽ%N.1,E Eƒ<Ž<Ž>謬¬¬þ¸;ö—";&"-6eMFÿR‡Ù9D"#43232>53#"&#"54>75#"'#"532532537#53265®>謬¬¬þ¸;ö—";&"-6eMFÌÙ733#5!#353#5#3!53#F<é}6}é<<é}þÊ}éÒ5}<<þí}þË}þí<<}Fÿô5Ù <"3265$"2654'##"54635#"'#"5325325332#"&54ÚJh((,6..ŽUOOŽ‹e,E Eƒ<Ž<Ž<³0<<30< K.-6eM*(*)*F^t®AeÁ>>謬¬¬þoI64GI7!FÆÙ33!53!333&=&5432&#"!&=#"', Iù<+-ƒdÀB!!ýÕ."Àdƒ* I f_Z1%$1ãD!+ Áþ£o!!GÂ=> !`Zs-!!o£õ¸ +!Eþ?¾ŠŠF Ø,7&#"654.#"353#5!6=&5432327632!&=#"' I ª I6b<<ýÖ`Àdƒ<+-ƒdÀþÝ#<1%$1㸠+!ED!+ ýæCÄEÀ!!o£þþ£o!!ež–mmFeÙ%##535!5!3##Ï<ÕÕþ³‰–32#"&'##"q&&&&þ¸I3+C Î C+3II3+C Î C+3Ê((:((’fI5))5IfI5))5Fÿô<Ù(08B2#5264&+#"54635#"'#"532532536462"462"'"3265°:RR:!//!šOOŽ‹e,E Eƒ<Ž<Ž<*((((‚Jh((,6HRtR>謬¬¬þoJ((Þ((K.-6eMFÄÙ+$462"462"462"462"7#5!#3!53d((((þÆ((((…›r››þŽ›Ð((.((ö((.((×<<ýŸ<<FîÙ5$462"$462"5##"&532>532>53#"'3Ž((þ,((2À+FTY< -:- < -:- 532>53#"'3462"$462"`‚‚‚þÀ‚‚‚À+FTY< -:- < -:- 532>53#"'3`‚þÀ‚À+FTY< -:- < -:- 54&"327&5462327&ƒ¯ú¯&)532>53#"'3$À+FTY< -:- < -:- 532>53#"'3`‚‚‚þÀ‚‚‚À+FTY< -:- < -:- Ù'/$264&"462"264&"462"$264&"462"^;R;;Rw^„^^„º;R;;Rw^„^^„þ&;R;;Rw^„^^„ÉR;;R;¦„^^„^bR;;R;¦„^^„^ÉR;;R;¦„^^„^FÙ(0264&""&5467.546232#5264&#264&"‚EfEEf´3i–i.&'-i–i2þ:RR:!//!þEfEEfS~JJ~Jþ²:PSrrS5XX5SrrSQ8RtR#2::42:p0Fæ×)3;C3253253#"'3!53#".54632#"'3254&#"462"$462"ˆ 37{<ö<·T'}þÊ}'T%<%<428;544U&&&&08³³³ï*þ®<<R*0(>#2::42:p0þ?((((Fæ×;EO267#"&54632#"'3!53#".54632#"'325374#"326%3254&#"/73 5;824<&:%T'}þÊ}'T%:&<428;5 37{<ö44ýØ44 80 :24::2&;*0*þ®<<R*0*;&2::42: 08³³Í.00F\Ù;264&"264&"#"&463235463"3>32#"&'##526=€/B//BýÓ/B//Bª L2:RR:2L UR:!/[ L2:RR:2L [R:!/ŽB//B//B//B/n0>RtR>0Â:RRtR>0Ã:R32#"&'##526=##526=¼/B//Bý—/B//Bª L2:RR:2L ½R:!// L2:RR:2L /R:!/^R:!/ŽB//B//B//B/n0>RtR>0Â:RRtR>0Ã:RIa53#"&3!2#5264&#!#×32#"&'##526=##526=##"&4632¼/B//Bý—/B//BÒ L2:RR:2L /R:!/^R:!/# L2:RR:2L ŽB//B//B//B/20>RtR>0Ã:RRtR>0F§Ù?GO5463"35463"3>32#"&'##526=##526=##"&4632$264&"264&"ŠR:!/aR:!// L2:RR:2L /R:!/aR:!// L2:RR:2L p/B//Býˆ/B//B‹Â:RRtR>0Ã:RRtR>0B//B//B//B/FÙÙ4&#" 632'6/!"¢áþþþõ¤(;23#"&5467&'!#26'3."´EfEEf³4 e†e 44 G&.i–i.&G (ìBZBäêAXA~JJ~Jª23#3#"&'#5367&'!#26'3."#26'3."F4 e†e 44 GF 44 e†e 44 FG (ìBZBäêAXAâêAXAãìBXBø75#"'#"5325325373265 ŠOOŽ%N.1,E Eƒ<Ž<Ž>謬¬¬þ¸;Ÿ;&"-6eMFøÙ$462"462"7!!!!!!((((ÜþŠvþŠvþN²²((j((¹þî=þî<ÙFÿô Ù1<462"$462"%#"54>75#"'#"5325325373265>((þ0((úŠOOŽ%N.1,E Eƒ<Ž<Ž>謬¬¬þ¸;Ÿ;&"-6eMF®Ù!264&"&"32"&5467.54632‚EfEEf† fEE3Jji–i.&'-iKI3~JJ~J,#J~JtRSrrS5XX5Sr6FÿRÙ7"#43232>53#"&264&"&"32"&5467.54632®32"&547&#"632"&547&#"3!53ð<‘15"0"&JŠKA5"0"&AKªþpª† . *!//!>³1 *!//!<þ×<<FîÙ?462"$462">32"&547&#"632"&547&#"3!53Ž((ýº((p<‘15"0"&JŠKA5"0"&AKªþpªf&&&&= . *!//!>³1 *!//!<þ×<<F•Ù7>32"&547&#"632"&547&#"3#3!535#53á<‘15"0"&JŠKA5"0"&AK›››þŽ›››† . *!//!>³1 *!//!<±<<<<<<FßÙ7?G%3#3!535#53>32"&547&#"632"&547&#"$462"$462"›››þŽ›››<‘15"0"&JŠKA5"0"&AKb&&ý¹&&´<<<<<<Ò . *!//!>³1 *!//!<&&&&FÙ#,5$462"$462"73!53322654.2654.k&&þÅ&&ªþpª<€l$*+#m`P381`P38ˆ((((½í<<4F*) '*G5t~( º~( FÙ%)2654.'2654.32#3!5!#¤`P381`P38å´€l$*+#mªýø"<ã~( º~( ýŸ4F*) '*G5í<<aýŸFÙ!596462"2654.'2654.462"32#3!5!#Q&&6`P381`P38&&þð´€l$*+#mªýø"<ˆ((w~( º~( ýë((04F*) '*G5í<<aýŸF®Ù-56462"462"264&"'462"&5467.6264&"Ê((((dEfEEfi–i-'&.i–i.&'-54.#">32'>54.#"6!2'>54.#"‚<š:Í00+&D, }ÃXEË5Í00+&D, <×2™ÿÍ00+&D, }ÃWƒ';*((-=»%4ƒ';*((>/ØWƒ';*((-Fe:7?G462"$462"#3326533265332753#5#"'#"'#"'462"$462" ((((þ<<<98=8898=89&<<"]1-dc-1]Š((((ö((((þ&Û÷ eLLeeLLeêþ%ª ____‡((((F3<Ñ'264&"462"462"462"$462"&\~\\~˜{¸{{¸,&&.((ýN((_~\\~\÷¸{{¸{E&&ýß&&&&FNÙ5!5!264&"462"Fýøþ*{®{{®­˜Ø˜˜Ø<<ýc<<Ä®{{®{þÂØ˜˜Ø˜F3Ù?3#5&'#35332654.546325353#5&'#5&#"#"'Þ< << <.MQM0L\]L0b_FJ< <<<@L‰0L\]L0llO..2o!t¨PE,8$I6Wh7 2ÿmt¡&„)4&L8_oFLÙo%4>7!63232>7#"&#"#"547>54&#"#4632!654&#"#463263232>7#"&#"#"ÝGv%þ§3$<"    &3f qE=C4*=NeZC4*=NeA(W"    &3f f¢@!Q2T   N 88 ›e,;VJ!:myT):<';VJ!:myT"Ul>x   N 88FkÙ&.7@43267#"&547'#"&54737&3265732654'654#"hu7Br%J" (u7Br&"Yu7B²<\(pv=ýV=QV=3¦\MXE0 < DK¦\MWG0! ¦\MnQqþ¨$B¼533273#5#"'#"'#"'#"264&"F’Ð’/= = &<<"KNMK!"„ShVožoož’Ð’’hIh"*484**48þ ª 6666MbIžoožoFÊÙ7'7%3!53#5!#%'7'9>4›4?þÅ}þÊ}}6};?4›4>l®lþôl°þ<<a<<þ°lþôlF€Ù7@IR[#"&547'567&5432>7&543267#"&54732654'654#"32654'654#"Ä'h(u7Br&H'(u7Br%%i(u7Br%J" (u7BrýV=QV=nV=QV=w' DK¦\MWG0 < BL¦\MXE0& BL¦\MXE0 < DK¦\MWG.5;m)A;ß5;m)A;ß5;m)A;ß5;m)A;FÙGPYbk462"$462"%#"&547'567&5432>7&543267#"&54732654'654#"32654'654#"0((üú((ê'h(u7Br&H'(u7Br%%i(u7Br%J" (u7BrýV=QV=nV=QV=X((&&:' DK¦\MWG0 < BL¦\MXE0& BL¦\MXE0 < DK¦\MWG.5;m)A;ß5;m)A;ß5;m)A;ß5;m)A;FzÙ92654'"&=.547&#"#4632632#4.#"26=3=:=X\6EpE4D^'-!( 32#"&'$264&"264&"[ L2:RR:2L ì L2:RR:2L þ;/B//BÏ/B//BO0>RtR>00>RtR>0?B//B//B//B/F\ù'/7$462"6462"'#"&46323>32#"&'$264&"264&"5&&»&&Ï L2:RR:2L ì L2:RR:2L þ;/B//BÏ/B//Bž&&&&Î0>RtR>00>RtR>0?B//B//B//B/F®\,'/7462"462"'#"&46323>32#"&'$264&"264&"¡&&&&c L2:RR:2L ì L2:RR:2L þ;/B//BÏ/B//Bè((þþ((¡0>RtR>00>RtR>0?B//B//B//B/FËÙ '%%XÖ þ¸=Hþí×f{þ¯¸þ¸G¶Hý¸á{RFËÙ$462"462"'%%Y&&((Ö þ¸=Hþí׬((v((„{þ¯¸þ¸G¶Hý¸á{RFÿÿçâ/7>32'>54&">32'>54&#"‚1?oxATyQ*+"HVv|qMY K3ZOk5TyQ*+"HV;eÈk{+0F"eN8H *6)4C)J;Oé C+?%eN8H *6)4Cp]Fÿÿçâ/7632'>54&">32'>54&#"¾<<<‘TyQ*+"HVv|qMY K3ZOk5TyQ*+"HV;… 2þ¢3Šþ£ceN8H *6)4C)J;Oé C+?%eN8H *6)4CF…Ù +5"3264&"&547##33&54632353#5#"3264&å3EE34EE4Ki3â<<á2iKLi2á<<â3iL3EE34EEJ~JJ~JýcrSP:ZŽ8QSrrSQ8Žþ¦:PSrNJ~JJ~JF…Ù)KU462"462"462"462""3264&"&547##33&54632353#5#"3264&¨((((ÿ&&&&û3EE34EE4Ki3â<<á2iKLi2á<<â3iL3EE34EEÖ&&Ý&&&&Ý&&ÞJ~JJ~JýcrSP:ZŽ8QSrrSQ8Žþ¦:PSrNJ~JJ~JF‹Ù-39?E7367&'##33>2353#5#353#5#"&'##3%#26'3."#26'3."ƒ4 FG 5<<5 e†e 4<<4 GF 4<<4 e†e 4<<\ìBZBäêAXAâêAXAãìBXBâ[/2ZddH]]HdþüdZ2/[dþüdH^^Hd²3::o188þA199m2::FÛÙ=CIOU462"$462"367&'##533>2353#5#353#5#"&'##53%#26'3."#26'3."Ž((Š((þ3\ FG ]<<] e†e \<<\ GF \<<\ e†e \<<„ìBZBäêAXAâêAXAãìBXBZ&&&&[[/2ZPðdH]]HdðPZ2/[PðdH^^HdðÆ3::o188þA199m2::FÙ #3#3#A<¿<<þ‚<<Yþ§Y€þ¨Xþ¨FÿRÙ!"#43232>53#"&#3#3#®5332653#"'#&'#"&5332653ô<-&<2?<55332653#"'#&'#"&5332653((ý§&&<-&<2?<55332653#"'#&'#"&5332653((ý§&& ((ý§&&<-&<2?<55332653#"'6462"$462"462"$462"0›þŽ›]wSZ<532#!12bej)u+=HODCQQCDOH=+u)jeb2YO=DEJ?T0-u'&'&-&'&'u-0T?JED<<FÏÙA$462"462"462"%2#"&'732654&#2654&#"'>32#!Ý&&&&u&&þ¥2bej)u+=HODCQQCDOH=+u)jeb2Ø((((d((=DEJ?T0-u'&'&-&'&'u-0T?JED<<FÙ=462"462"'2#"&'732654&#2654&#"'>32#!53#5Ë&&&&·2bej)u+=HODCQQCDOH=+u)jeb2 <<Ö&&Ý&&=DEJ?T0-u'&'&-&'&'u-0T?JED<Žþ¦F‹Ù-2#"&'732654&#2654&#"'>32#!3#12bej)u+=HODCQQCDOH=+u)jeb2<<O=DEJ?T0-u'&'&-&'&'u-0T?JED<ý¥F¾Ù%%3!53#"&532>532>53#"' ›þŽ›+FTY< -:- < -:- 532>53#"'á&&þÅ&&À›þŽ›+FTY< -:- < -:- 532>53#"'YþR6&&þÅ&&À¹þR¹+FTY< -:- < -:- 532>53#"'3# ›þŽ›œœ+FTY< -:- < -:- 532>53#"'353#5È<<œ+FTY< -:- < -:- 532>53#"'!!#"&535#35#'35335‚ -:- < -:- 32#".543264&#"J9:!Dƒ<Žè¬¬¬§÷‹:&IWuKYw7[8W´%)afQtF¹X!75!5!Fýî¹<<,<<FÃ|3# #ßI›EzyE|þ„,þÔFº`753'773#''7F†C4CC4C††C4CC4C’>d(Œ´L€"(*!//!5QO7Qk>>d(Œ´LFæÙ_327&5462#"&/4&"327&5462#"&/5#".54623275462327&5462#"dN&"0"51ˆ+,{®{N&"0"51ˆ+,?35"0"&2@˜Ø˜@2&"0"53 B!//!* *‚W{{Wþ©B!//!* *Ë" *!//!)tl˜˜lt)!//!* F¾Ù&33265332653>53#"'#"&53&5>53&'‚553#"'>謬¬¬þU, $FÂÙ0%654&"333#5##5#"'#"&53327&5462;`2(à<<<<<<"N>>N=Q< (!6-E9j9E-6"ÕJzIaaIzºý­Sý'JJJ33`J+1"]”k{{k”]"F Ù$462"462"462"!!!&&&&&&þ&Úþbb¦&&…&&—&&þÃÙ<ýŸaFŠÙ 573#%3#'5NÚÚ<<þÒ<<Ú”€Fý'E”ý'FF@é2'%632"&547&#"632"&547&#"3!53ŒþÊ‚ƒQ5"0"&JŠKA5"0"&AKªþpª›T:hG7 *!//!>oD1 *!//!<þ×<<F·Ù#5!#!2#5264&#!3!53á›r›:RR:!//!þò›þŽ›<<ôRtR>謬¬¬þ{F™Ù !!##PþöSþö´´<··Ùý'þðþF Ù%#32>%!#"&'#"'3!5332>5d~( þŒ°4F*) '*'ªþpª<( `P38m<€l$*+#þ{<<a`P381FêÙ'$462"462"#"'#"532532533#n((((°,E Eƒ<Ž<Ž<ÔÔ„((((þ˜ >>謬¬¬þ]<úF…å74&"2264&#"'632#"'3"&547&=.5462"/B//Bò7//7‹@AkVIWa?“T1+J`##0>RtR>08B//B/þ·=:=X\æ**^TCDQ^'-!( 3232>7#"&#"#"5.5462Q&&&&þöRtRRtXH"    &3f Iav¤vaIÚ((((™tRRtRý­    N 88H qJSuuSJq F¼æ$264&"%2#524#524##"&4632ÔtRRtRRè>>¬<¬¬¬¬ qJRvvRJq’RtRRtXƒE Eqn¨Ž<ŽIav¤vaF:Ù333####3'3"< << <Ü<ÜÜ àslý'1þÏ1¨€FþÙF Ù3'>325654&#"#F<ÜÜ)u4Mlw_šI4DŽ<Ù€Fþc3232632"&5467#RtRRtXH"&   &3f Iau¦uaIŽtRRtRT  N 88þ¸ qJRvvRJq F®œ/462"$462"264&"7"&5467.53265N((þÜ(( EfEEfç-'&.i–i.&'-54'#"&546326©/B//BòŠA@‹7//,0>RtR>0##`J+1T“?aWIVzB//B/þ\X=:=æ* L2:RR:2L *IC@L=Q< (!-'^QDCT^*F1Ø5=654.#"3276327#.=#"'#'76=&5432&#"Ð Iù<+-ƒdÀhÞàH) 1%$1<HàÞhÀdƒ* I ãD!+ Áþ£o!!}Ó€3 ]Yv0MÂ;:3€Ó}!!o£õ¸ +!EFÿþêå!%26=3"&=.5462264&",!@!32&54>32#53D!$MNHMP$MwR9?!H!57U½B$,8& PP9 $ DYHýéH-3O@*,   +?_;>/%2 ³JþLbm¨#%7'7&54637#'75H?þÓ1Õc>LK&II@7:/Ðmkeš6„Ñ$°;B; AB&eþLm¤!$"3###53%7'7&5463753=I$1MGM3þÛ1Õc>LK&I0mkÐe -).;7HýéH–7„Ò#±;CÚf†>&/173:>2>7#"&5467Y6   CL_˜bN\ÙLD  :‹hjÃ3!ebÿ²)4&#".547323267#".546¾&<(*2,2MS1 O_?/ C/G#^"5  !$ " +=;/“QBx  :8QFY¯ÿ5QM'%Ë  5&ò&þ†ÿì_. $'2'32654&##5.+'676753”VG E`\)H.2'[A!M)ž©?E)#ãRDP(#$*þ¿GN70C¥33Sÿé—{7253#5.#"327#".54>Ü1G33 c$7B &"1(þH$éþ…C%c.5L0 5$,@ þ'(f#2#".'732654&#"&546{ #-Uc‘#k3='I] „<ÿÿˆr4#53533##5./>54#"327"&54>32=>?&&3>>3?[C"/># .!-% !/ -;P¼3DD3ýÐ,HB , :(&,*!þäÿÖ§.#'3##5.'&/753632&=654©©G4;E  µ491,$€r^.3ðþê1*1vZKW(=>E_/**"$*GDýìÿ(ÿ#<%253#5&#".546þV.H$33=_%&+><21_þðP‘ *1(#CþAÿBÿ%m%'673#5.#þò ) J±Ig43Q+0   54'#"&543367B5oXO˜34P- (0" 0!'!C   LE;H_«b@L3 4"668& #ý‰ÿ9ÿ0”.#"#"&5473263253#þýC PYM.9S 6 2833’( W6-( -32 *ãþ¥þiÿðÿÄa%'63253#54&#".#"#"&54632Ì 33**!" .9E%0‡ Ñþ±(  $*(-7,*@ÿíÚé."*2654&##5.#'>75#5!#2#"'7%25"h <"3$4M(/RLýüÌJB5'$þù1@ wB'*Õ&/5('33T.*'; -q7 sl)33##5./>4'#"&5473267Þ>;C3<<3 w/4D 5#'+!-Í$4CU>3þ¥+]2-.6-  &- 6 Ê”.,253#5&#">32'7>54&#"#"&546¡(G.33Iq%E!-8)A&2 J&U-.'…þù$²8, $&%8K!9 1!'2[ÿî >.'275#'47#5!##5./7#"&„M   ”V 9P3[6 6 4¿(L    Þ 33þ¥./@:&ÿèp€.,547#5!2#"'3267#".573254'#"&72654#y6Ç:1, +":#_5_>%34b6U)2*4š'(+"ZMT3,#2940_yHjv1 :ŒjI,=8”%ÿî¢E.72654'&'"&'#5!#he97GWÝ2JƒÕb+ ú @33"55Œÿç8h.73265&'.5#5!#3}1rrF #c2œ!ƒ?‹$~<]þ¤'m33 9OP¥ÿô`§.1C.#53>54.##"&=#5!!3232'".'32654'CB * $W3:J C$6>³þ¿ !5³  m0;  3+R3< +7’33 -B ÿæ—./467#5!#3"'327#".'732654'#"&l'¼Šf‚ 3 $7=G:'>) 3PE($"("3J 33G* _57T<-ƒ•0+!,ÿî ¸m!675#5!33##5.'#5.#7Psé(3>>3 3l4°] ] ‡D 3Ú /T?3þÍu?"Sc, >£%:<O2#"&'#4.#&5473263254&#"27#"546327>"3254#"532654Ø,!I"?3 4?54'#53&5472654'lF~c :'7G}v4'* 9*13­.Q32*9*2=*S-8' 3?6+2%ýÿM7<=2Q#Qÿ⣡.$"&=#5!#267#"332654'ß$À¿Ì8!$^Cª*3 !:"-?6:!33}6K&4d82R<-G'!ÿá“3.7"&5#5!#32654#"'632r2ERÚ (I  & n“5#33þò |& (0 C %;2.#"37#".54>–#> f$8C .- ;;-*Qk.5M/>.,6&  mm-33##5./654&#"327#"&54632Ü:+33::3 $ 3 ‹!=-,;Î*8R?3þ¥4# 7F 5!$05  W3$"753##5./7.54632&u  Vm:32L8B*"  d(6&4/! 053þ¥=252-"( ? #!ÿèçz.'5#5!#6?#&54C+G1*k`ÁCV? 3 ‹*¾33‹9 (&+/).ÿÓ±1.&#"&546325!5!#þ<6!(E5<þÕ^3 v)2+M’3þƒK.K9#>3253##5&''654&#"72767&#"KK;\PÆ“2 (+8"?Î!J_T3¤:  ( 5 & /ÿî‘».*#"'73254&##5./67&'#5!!532')3l*<&I8Íþ¸/. ,2$%=0g21%þâ11@ /!%033(* #à<ÿî‘7.675#5!##5.#"75WmçI/3 q(0!Q $KxD!33þ–?c :Š "ÿï´œ..24632&#"32>7#".'32654'#"&'5!u '    %4O:-K0* 3h=(1%<)4†­ 1  (>?P#3SC1 jv:-@:‡33ÿéÕ. *4'#32%#5!##".#"327#"&54674\#µ U:þòeìa,)#G7 $*›4,75¢3309)5))30#(ÿê‘L.!##5./67.+35b-3h)!=,V=”.#DZ4.3þ–6/;)8 <*>Aôÿ5QM'%Ë  5&ò&ÿÕò×.%25!5!##5&#".#"&54>326 þ€O3&)+#$$$3 4"*-Æ%Z33©>?$7( "E$)/)ãÈ.0263253##5.'27#".'#"'72654&#''/ #!7j3# % 8- #/IK[3þè‹34 0 +#,1!&30ÿÎ"¬.!327'654.'"47#5!##".x/b1a4«Þrk7 $Ž%Y( MK$33-;X ,ÿ×J.%#".'#"&'6732654'#5!!3254'·:(4 "<6 " $Ø7þò8$=û",6(‚3!'@* 33$H8 (ÿî[\.%)&/32>54&#"&54632%5!) (zš/,"2 5%"H!'.þÏW†([6'†37 ("1 ,X33ÿî2}.(2"&=#5!#>7#".'32654'4632"É"¡» 3 !/!-*0L) 3e7,=$Z$+7~33{CC#$9" 8NbC u’@#!Kã$ÿá:.'7"&5#5!#32654#"'6324632#"&n -@Yæ0A+a_ ƒ7 !33þÝ"g+ '$*@„Eÿñ‘M. #74632#"&&+5!##5&/675O /CA \532{ +/0P>((Ç B33þ–6Q )-m(E(ñÿ5QM'%Ë  5&ò&ÿî‘7.7.'7'675#5!##5.#"75–D++DWmçI/3 q(/!R $Lž9 0 6"±D!33þ–?c ;‹ "þÞÿçÇ,'233##5./32654'#"&4732>54'r=Y3ll33P]+ 4]?? 9/( 0GC=W3ýê&-!?2 JJ3Z0Hÿÿù..'5!4.##5&/7'7632#"'7326Bpk/&3>’(y&)djF4Lf< û33À#þnAW6P!4#>#=>G83, ;ÿ°X.7.#'675#5!##5½ /AT&‚‹Þyg4Ç,~›X:<*6g&+33þ: N6òNÿFÿo.4&#"3"&54632#53## R! *5'72B¸C3[? (&/7ý33ýtÿY©.'463&'7#53##54&#""&§5& 3>wíC3]+ ' )È(3 .>3 333þoZ((ÿáÿåý.47#5!#'>54&N2Ÿ;ACZ+3xK833G@­EE0 )! ®ÿÕÿÿ¾.>B2'65.#"#4&#".547326324#"327#"&54>326%5!M*9!#)/3=TFRD )7=&Q7-%y# +SaU7ý¹éuG' &(0þí9+'{™þ£ñ9F0/#)( Z63›,ƒ/"2)/# L3D0†6`*.33.(L1#B%''5NþþJ Q4ÿ™ÿ„A.#"#"&547326325./>54'"&547326733##wCQLZ/EF<46³86q4)$1( ,(74#"#"&54632533##yCM /E#.DG 6 28V^!F O",&"'*& N  WC9M.3CC3' --$1 *;) *<›7#)"5"% $%1^5HÇM3ý³ÿôÿ—ß.+=.##"&547326325./7#"&547#5!##27#p#l1D.*"† ƒKN &Hcë<3& €  Þ34O:0% L3 2>] (R8,33ýœü $ a0 ÿóÿ+.-5&#"#".547326325#&'#5!!#2654.'o+( t "+.*" ^K§þÊL=7(3¢(¡Lg 9 ;(.' P1ÄeÔ33=() "%+?þƒ £8 ÿôÿ7<.KW.#"#".547326325򂂮./#"&=#5!!32&'#2654'#"'}C J0E#.13þ´6‹E$"1'-4þÿóÿíTEQ.##"&547326325#"&54>7>54'!53&5473##2654'r   g 2C.)#ƒ 33=EV2 þòñQ6& 00ƯE 3r7F<"G/­P90% L3)§:ZD N= 3\H8J",O63o.BA!"þ†x@TV>NAqÿÙÿY.>.#"#"&547326325#"&'332654'#"&=#5!!3267#DPLZ.9S 4 56*3m†3b[;RR%(úFþç^K3r' M@'. *32 +ÔÁ°²[3'&?.É33ÄS2lFþáÿñÿ&ú.:.#"#".547326325#"&5#5!!>54#"'632#p#y "+.)#ƒ ?D 3© þÔ .q,.3¥' :&.' (&3 ²M/7’33þq \&"!<5>þƒÿåÿõ./!!4632#4&#"#"&54732632&#"327"&5ýË͘6 3.*ˆ>L, Vx'&w  >%.3Ù9‹!-þ]B4]I/A*3$"m&$ -ÿßÿVU.GK.#"#".547326325#".'332654&#"&54>32#5!’B Q/D#.DG 7 83%.":,'3  $2BLF57 + 8&Kc33þMvu' ,.), '<) *l0'F+R'*7;X/:\IFa!#'" '}º>þó¥33ÿý†B.#"#"&547326325&'&/67654&#"327#"&546233##xCL LZ.EG<46PB`,p'@7) ? (V~Q]$iJ4QQ4<( M@*+ .;) +BW68;"*$3- 2DJ=7Q(ZïX3ý”ÿïÿþ.+3".5472632&547'#5!!67&'"Ž '0!1-Hh'#* ‚d.žþ¸e•,-.(5*f@*/:!3:gV³2"33ê†!S|^P "ÿ™þ55:.#"#"&547326325./7&54632&#"753##yENYM.EF 6 46FkMq_<+( $y…R3yUwW2) W6), .<) +EFL)[E/(8 DJ3ýž325!5!##{B OYM.DG 7 65"5- "!4>)b3þ|P3m' W6), *<) *ë/:'' , '&D2;(fÌ33ýcÿáÿæ.H7326325.#"&54>323>54'!5!##5."#".5472*"…  9; ))&)H2 $þk>j3 k "*.È'3 æ-" !2% ,,>33-&5þ™4  ;'0%  ÿ™ s1<.#"#"&547326324&''654&#"'>32533##267&#"‚CPLZ.EG 6 462»$%.# n6…F3VV3þÏ # S34 ?2( M@!4 -<) +) WÁ"&!$ $1P‚ÑE3ýž ,+R)!ÿùÿ„.>.#"#"&547326325./67&'#5!!2#"'73254&##xCL LZ.EG<199b($fp”þ3@&69tMƒh," K94F' M@$1 *;) *IA] %M#6@33)9&1,&bNIg2 1 #3=ýÞÿðÿ™á.,3726325.#"'675!5!##5.##".547„ƒ  Ÿ8"z˜þƒñ@4#:/ #*.) “2" H,Š6`-+33ýž5 ;'+* (&3{I`!ÿç!.8<"32>7#.##".547326325#"&54632&%5!ï 9 !1- -!49;$1C1g7aD0;3%þí:œ 3 !þ]#"J5214B "èU>0!+$+_33ÿéÿhA.FJ.#"#"&547326325#".'32654'#"&54632&#"3267#5!œA MLZ-EG 8 38 %9bC:"9%”T,P"5R3O)4! K%3!%33þMXc' M@*+ .;) +w1Jm_:“¥Q?3Z7?#00):2G #!9 D8þê“33ÿöÿ=è.18.#"#"&5473263254&#""&547.'5#5!##5|C H YM.EF :56`#/*U.C‹ AMLò93ì?59.Ž( W6+* *;) +ø‚5+P,`)‰%""33ýB¾73Nàÿøÿ™ì.'5.#"#"&547326325./67.+5!##zENLZ.EG 8 46)“9-9Ye nô>4¶a/:R#-2) M@!4 .<) +;CR 89CG33ýžbN/- /jÿíÿ™…M.#"#"&547326324&#"327#"'#"'732654&#"563263533##ENYM.EF 2 56P%!, <" 4#I5N3QQ32) W6), .<) +Ms/6 +:')01=8k_  $ÀW3ýžÿëÿ™è.*.5.##".547326325./67&'#5!##5&'o#g #*.)"† BdE*g-~IýF3ÖLŠI;0{V2 ;'+* (&3 /]G:%R#A33ýžb{šé(?+7qÿìÿ\ü.6?.#"#"&54732632.#"#"'73267.'5#5!##6325”CPLZ.EF 7 29 :(20A,- B_853þß@5"'2n' M@*+ ';) * N4?4j" EK7"33ýaŸ84E®ÿ×ÿü.FN726325.'#"&'6732654'#5!##5."#"#".5473254'}†   2 "<8 " $Ø7W33   k "*.*¥8$=„ è'‚3!'@* 33"<þ•4 ;'0% &'3w$H8%ÿóÿPó.:>.#"#"&547326325&/32>54&#"&54632'#5!zDNYM.EG<64‰¦_:&9 VB0d/7k•¥Y&4þyà{' W6'. .<) *Uy79!(# )7#$*9,JZ9o2Zq!!œ«33ÿíÿ¾ò.)-4.#"#".547326325.#"'675!5!##'~CP/D#-DG<19š:!~”þoA39Vˆ0 %ˆ& ,-&- /;( *%-‰6b++33ýÃß@>e X,ÿóÿqà.)18.##"&547326325.#"'675!5!##'.'7l$;.2D.)#‰š: !~”þ‡íA3X_:,n6”(†Z%O:1$ (&3 o-‰6b++33ývµ&Q . I7QHY*ÿÕÿ™¼.M`e.#"#"&547326325.#.'474.#"#474'#5!#2#"'73254&#"#25".5#7#3‹FL LZ-EG 8 38Q*  R+&69'jçþ$044"  ,4 3÷8a?  úS3 2( M@%0 .<) +h5F 1#2  Q 33Y.!1&/ &,þ*4\D8¦ ,0)ÿéÿÄU.D%'675765254.#675!5!##"'#7254&'#5./7&',EX.4"kP*Œ-ÎD !4þ¼X¹þ½löGq' %+!O3)"M."M.(û,"±m ?   [X5-33. Q>" 5$,3#3þÇY%( )0" ÿéÿÿÍþV67723##"'73>54'32654#"'632#"&547./675#5!4&#"#"547326c' 'Fy52\Â,0!K  Y8H%%P #'Ks93@<(2 DoïW1 A™/DRkAYø)<3!7!H, F^iH8#Q*&%4[54'32654#"'632#67AC K55 .

 ýóÊH&;$6 .*>,C"<þ®6) 1&,)#.$&<4G:)1050*0! Ÿ33ÿíÿìç.LT2#".'732654&#"&5475.#'>75#5!#2#"'73>5654&#6'25"7!0 "D-7a:#32M*.;!"+ 4Q( PTýúÌ'; 6&$ 5$Ð1@ u!0'*2"B_OGP85)9+/5*33.'*';)#²oq7ÿÙÿO£.SW%.#'67.'32654'#72654&#"&54632632#"'7654&#"#5!w#) JR, 1.(!   *433þbÊ= >!)0%,*@,G"Aþ®4) 1&,)#.$&<4G:)1050*0!&;:#þð¬33ÿíÿç.Ya2#5.#'67.'732654&#"&5475./>75#5!#2#"'732654&#6'25"A K !0 3S+!"+.Q132M*.;!"+!/U( PTýúÌ'; 6&$ 5$Ð1@ u !0';þí2,0#! FVGGP85)9,05*33.'*';)#²oq8ÿÙÿF£._c.#"#"&547326325#".'32654'#72654&#"&54632632#"'7654&#"#5!¤EOLZ.EG 8 46371('   *44þ5Ê…) M@!4 .<) + .*>,C"<þ®6) 1&,)#.$&<4G:)1050*0!&;þ¬µ33ÿíÿç.NV7&54675./>75#5!#2#"'732654&#632#5&#"#"&5473263254#"'25"Ô&+$*W( PTýúÌ'; 6&$ 5$33)1@)L--" 6 '-7z1@ uw ?25*33.'*'; )#²6&þî*#F2$6 / *"µ(<àq8ÿóÿí.ah.#"#"&547326325#".'732654&#"&5475.'"#'675#5!#2#"'73>54&#632#25"zCOLZ.EG<643;5^=%32M*-<%+1I(B‹ýúÌ'< 6&$ 5$ &34þæ=<vÄ' M@$1 *;) *“&>[SGP86(4+-54633.'*';)#²&>&þ¤iq7ÿÝÿzT.7>&#".546325.#"'675!5!##"'72>54&+#0?^&+>,RH›@z™þ®wò9F0/")( \22œ)‰7‘! *3&#Cc-/‡6`*.33.(L1#B%'7Lýà JX/ÿÝÿñM.8@65654&##2#"'74635.#'>75!5!##4&#""&'25"^*/5Y©1[%'&$¨-/W(PEþópV3‚B#''P1@ u3 "8Ï@2“T=8;š$!"15&33ýö@ )&õq8ÿÝÿ¨T.EL726325.#"'675!5!##"'72>54&##4&#.#"#"&546x4& (›@z™þ®wò9F0/")( Z72,'(#-74'#5!##"'73254##5.#.'474.#"725.'#7#3c6 'jçþ1"#4"  ‡3Q*  R+&3)?!? FDúS3 n 33Y)1&/ &EþŽ|5F 1#2 V$878¦L=0)ÿÕÿx¼.HUZ&#"&546325.#.'474&#"#4>74'#5!##"'73254.##25'.5#7#3‹Gg6)KE#3O-Q*  RJ'6'jçþ1"#4"  ,(3÷BV? +">úS3 ?7/G'6:9[5F 15? !33Y)1&/ & þ Um@8¦U)0)ÿÕÿà§. )-d25.'#2654&#"2#632#"/'#3'.'#5!##5.#"327#"&547.'#"&5463.'#"&54 '/"/<3M >) OS¢#C  fR<ùkÒI3m+  "4!&&+'Û!A)'‡*? ¹ Âi™=9)!* 5 Ä< 33ýå8'^ /)0 -)#!&ÿéÿ»….!;A675!5!##5.#"#"&'732>7&'2##"'732>54'6!„†þ¾œS395%,#5*!/ N˜S> ¢BG # V._a]9idR'33ýÀl0#)3@ ˆ,„„R.A/<'þì  <Z'ÿò߇ K4&#"632%4>32533##54&#"632'>54#"#"&5467654#"#"&Zx=UBSB,þ´>*y>3RR3S>`D . %' O$U:)E!?;|eL 5—+1!rÓY3þgPlh"% $)+&9G   .A25!!67&547'5&#">32'>54&"#"54>yPG.¶þ}e•,7ƒd-Iq09"*+ #& ! J8-.'…3çƒ!wCq8Nmx7³2r²<6& $'! $   -D+1ÿÁ8{GQ4632533#632&5474&#"#5&#'675.#">32'654&"&25\GaJ1´²@23Cw2K¡"0!?)+ (  '$fJ 9¤,g-* ¥6Pn¾M3½UQUbCdE) þ¸Am@H< -03-1 (!  #"U' ) Ä:­ÿ%8{MW].#'67&#'675.#">32'654&"&54632533#632&5474&#"#5'=2SU*!9M7X2K¡"0!?)+ (  '$fJ 9\GaJ1´²@23  Jx2,f¨-0:.5@H< -03-1 (!  #"U' ) =6Pn¾M3½OWqFCdE) þÝ   º¬-+9+ÿÊï{L2533##54#.#"#"&546326325&#"32632'7674#"#"&546Å9M.3CC2#- .%$ -0ù›7#)"!E( 6)%1^+ÿ–ï{=2533##5&#""&54632&#"32632'7674#"#"&546Å9M.3CC3=_%"/>,.H$V^!F O",E**8+ N  W15HÇM3ý›<‘ *2(#C210›7#)"!E( 6)%1^+ÿoŽ{:@4&#"3"&547&#"32632'7674#"#"&54632533##'32#R!  *&V^!F O",E**8+ N  WC9M.3âC3l72l[? (&"=›7#)"!E( 6)%1^5HÇM3ýtÆ7ýÿçÿl¿.927#'47#5!##5&#".546325./7##"&²& !&')Þ3fOØ=3=_%&+>,.H$„JN&H“ $ #a0 133ýqP‘ *2'#C21$AZ (R8ÿÕ.>DR#"'#'654&##5. #'76?4#""&5467&'#5!#572>747474+Ñ' ;Wiªœ$:/3  ~#k%3'4 *nHU ³cK:d c 2Õ'i ~x50%"*þì2  3FU&$!33Õ4F“±&ÿóÿ™Y.[am.#"#"&54732?6325. #'76?4#"".546?&'#5!##"'#'654&##572565474+];2QH* ?A  )5  ~$k&3" * -‹fU(:Xi«œ$173hK;d c 22(W6%0 ,<)+!  3F U&  33%i ~x60$0þ…{5H“±%ÿòÿýÛ.jsƒˆ47#5!25!##"'73254&+##5.#&/4>?54&#""&=47#"'3267#".573254'#"&72654#725'.5#7#36Ñ=þ'3 3#  ,4 3Q*  H7$ %7#_5_>%34b6U)2)5š'(- ¬8`B+">€øR3ZMT33Y 1&/ &,þŽ|5F     -;  #2940_yHjv1 ;ŒiI,=9“% ^B8¦U)0)ÿêÿ©Û.KTŸ¤.#"#"&'#".573276754'#"&547#5!25!##"'73254&+##2654#"&=47#"'326732?6325.#&/4>?54&#"725'.5#7#3ªA 6?W 5_>%35b5*2)45ÚFþ'3 3#  ,4 3þ~())$y$ ":$_,C?38Q*  H748`B+">€øR3"'81Hjv1 <Œh(-=9+PQ33Y 1&/ &,þ:%T  #0 940_C++X5F     -;Y^B8¦U)0)ÿû5„NW47#5!2326733##5./>54'"'#"'3267#".573254'#"&72654#Œ6Ç3f *(<44Ld3TT3±87p4(0 %7#_5_>%34b6U)2)5š'(- ZMT3A4?JJ>`ÝV3þR-…1C*5)!#2940_yHjv1 ;ŒiI*=9“%ÿçÿúé1_g7>54&#"327#"&5467&'#5!##"'#67.4&54>7#"&'732654'†)58"%(2 k#@64 ( =MHk-4    $O3="-}$ÒB">' 3!+22 %N!@%2kyHY+    R=.'; -+ ÿíû.:CP47#5!25!##5./7##"'#"'3267#".573254'#"&72654#27#6ÖB¢<4„MNG%7#_5_>%34b6U)2)5š'(- ¿P!M82ÞZMT33þA>] (R@#2940_yHjv1 ;ŒiI,=9“%/ $%4aÿòÿ™û.3<Il.#"#"&'#".57;67654'#"&547#5!25!##2654#27##"'3267326325./7##"‹D)EW5_>%34b6  .)2)56Ñ=¢<4þœ'(- ¿P!M82Þ*%7#_HD? 2 46„MNG2'?6Hjv1 ;Œi& !,=9+MT33ýž)%/ $%4a#2940_U, +0>] (Rÿóø."O2654#7567.'#"'326'47#5!##54&#"#"'#".573254'#"&('(+"˜?4<+þª/"O $. >":#Œ6Ñ84`#$%T3%#O5_>%34b6U)2)5Â%963Màƒ$3 !#0 9MT33þ­‚ .!O,B%Hjv1 ;ŒiI,=9ÿèÿnP.1:V47#5!##54&#""&54>3&'#".573254'#"&72654#7#"'3267y6ÇhC3]+ '+(+5_>%34b6U)2)5š'(+"ˆ,*":#_ ZMT33ýs;Z(* / Hjv1 ;ŒiI,=9“%9 * #2940_7(  ùÿëª.!*07265&'&5#5!!2+&'52654/&/#–2qoJAb¿þÊ!;'9(ºG"`¶&£$,\4À i7k}=]þû$3&0m33=,'+JÆ ‡3C£8 $… 3H ÿçÿµ+.6AIO.+532654./#"'#&5#5!!;26722654'#"'3265&'5#Ÿ_AmS."C`z;GVx _1u?AbDþ=#) NþæC1 ù1rrF¸¸e2]&S)$7='4[2@]Eg&0m33@ZK&†z$~<]<£ /Hÿçÿ +.GRZ`.#'67&+532654./#"'#&5#5!!;2672&'#2654'#"'3265&'5#G  JP, AYlhGVx _1u?AbDþ=#) N_AmS."!/4ÂC1 ù1rrF¸¸e   > *0C0<4[2@]Eg&0m33@D2]&S)$$$ðüK&†z$~<]<£ /Hÿçÿ7+.Q\dj.#"#".547326325&+532654./#"'#&5#5!!;2672&'#2654'#"'3265&'5#xC L55 .32>32#"&'#4&'#&'%4&#"32654&#"5326if0C G™QN5+'W@5o "#!)=b*7%B3"- ,0g*^3=c}o Hà$5a/W2% $-Õb+ ú@33@?%  S x$ )!`QE]A' 4&7-gBÈO-yQÞ xE67"+3%ÿåþ³±.,5.#"&54632+&'#5!!#2>54.': +="6(K=+4K/+n+cÌþÊ=2-* 4¿#bDLgþü*9#7 /G =7<09NÔ33=&(ýÏ‚Yi ÿæÿù$.#u%2654'"#".57"'327467#5!!327327.547#".'327#"'#".'&'73254'#"&ã( #~4 $7/%:þ®)¼>ýæ‚! @l7J 22 7$:@C1cF 8!;& 3/L$&B‰!  1#4`M8>.K 33GQ =Gf%=#`O (!+(Z2Bm#-!@z)2K..M"6ÿæÿ7$.)‚%'2654'"#".57"'327467#5!!327327#5.#'67&547#".'327#"'#".'&'73254'#"&„,J¤( #~4 $7/%:þ®)¼>ýæ‚! @l7. 3Q,!K\2 7$:@C1cF 8!;& 3/L$&B# á!  1#4`M8>.K 33GQ =,J7È3 *0K.`O (!+(Z2Bm#-!@z)2K..M"6ÿéÿG{.OU%47"';2?#5&##5654/67.5332654'#".5467#5!!327³6 @.29 , ‰+20ž1#<9S(1°$;# ,#2æ’þ¯S;?·C.9–ˆUp+' 0, S)’ r+".9þºL7©  e38+CMg9þÝ%*) ,,*7*33!3þ»# )ÿÍT·.1FO2#"&'#".'&'732654'#"5467!5!!63254#"';2654&#"&'32696)'€P S,BQ0L-%)(7 =/e5þ÷êþ}2M<^06@%1'Bš/D61ÀK65k@$2N7> h @#/~&U33)P`šCY5:232537632%32654'#"'732654&#"iF$cF.=",M(æ"PG !"3)32#"'24&#"3254'#"'7;26&'32qzƒ/34+44(#ve A1,?66c- @!<^H&4.1.&0"((.l2&?M5E/Q*  )Ø|- *‘O!@r''' E4 *A!= ,B)2+5;HB=!7)-"?9–LK6m†( (6ëC)$ ÿÇ!0^v327#"./32>4'#"5?>5'.'#"&54632>32&'&=467+"'3254'#"'7332654#"> +!- & :]/2 h; !# ,I!  $8&P;+*8#>"#! H$%" X,#<-* .*)[yV/) N*0Pj9]sŽ *B_>7  9 '.1X'(+%%. /^6?(W)++¥C.  - #8!ÿ1ó- $o%7'72654'#"&5432654&#"2#"'#74'#5&/67&#"#"&5473724&+"&54632>°L7U.h*}1 )9d_80:)/4%!*449?[0<€?> ! DT$,A?iP .m &—;.))&E! Kà*+BM º#< $ˆ t\A-7/>+5þß H/£F\9,/oS&C8M; Bw. '6:Œ>f$ ÿàÂ'G%#"'732654'#".=#5!>74#"&5473723!32654#"'632P#?*Œ\.Lq!?6.)‚y[˜5G!* aš3D/þÓ#;T *")ð)/&-ݾ( (*! õ3 5 <1) $ / E3 3ò7q9-$!B2Hÿôÿ;ê'd.#"#"&54732?6325#"'732654'#".=#5!>74#"&5473723!32654#"'632#g>2RF* 7I $ .3(:\/KrD6.(–\˜5G"* `›4B0þÓ#;T (!")$3‘(V6)+ '30*…ݾ#%* *" õ3 5 <1+ $ / G1 3ò7q9-$!B2L*.þ®ÿÇÿo 'I4&#"3".54632!32654#"'632#"&5#5!654'"&5473723##«Q"    5'73þÂ;d&!"-:c4,'d[[š3G!*a™6AµB3[@ (!/7ýþ´6ŒD$"1'6vS?'O3 2 ?/) . F63ýtÿâ5n{FQ%"&=!5!632533##&#"2632'7674#"#"'#"&'332654'7&547#326!#þýC9M.4BB4T`"DL #,F)+8+ T 0E:qu30M0?32>54''#"=#5!#3267#"&'#".'732>54mþ¿ !730)%&7 #Rú^1à~ú S-6aEH_1W/2MI</5· 0 $ȇ975e;"2)%:(7€#63¡33¬T]4BzH^0IJj þÎ!0)"ÿÙÿo¬.=4&#"3"&54632!32?67#"&'332654'#"&=#5!##6Q"  *5&82þÐ4 K(R6m†3b[;RR%(úÓC3[@ (&07ýÄ-2l7?+ÔÁ°²[3'&?.É33ýt ='L#".54>3253>74#"&5473723!32654&#"'632#"&=4&#"37 % :&#? ÷[—8E!*4”/þÔ@b  "'KˆC/(h[B , 5#,6&.,c 5 ;1)  w 3þ™ŸI %"nO±=(Ös_M ÿh'm.#"#".54732?6325#"&=4&#"37#".54>3253>74#"&5473723!32654&#"'632#æD6/E#.EF56;5/(h[B  % :&#? ÷[—8E!*4”/þÔ@b  "'K(3c',.*+ *;)+›>=(Ös_M- 5#,6&.,c 5 ;1)  w 3þ™ŸI %"n8Fþ© $U4A".546324.5473##"&54747654&#"3732654'y &E3lB99<8Í«wW6c«a*#)ZÅ[c2$ET"* 8%327¯ %N?¿i4#6K&/ %&)*.$ "/(" ='(5h49K­ #`v\ &# XKA>$ /E% 1 )FDZ,!®.=46325!!32?67#".'332>54'#"&=&#"&ž7*.5Lþç4 K .U6RƒL33 >GV80I$S%#40!(Ÿ%7;n3Ä-2l->2$Gd_&a“M/ *<2#*@3;[ÿöÿh¯2f.#"#"&54732?6325#"32654'#"&54632654'.+"27+"&54>327#vC  L[.DG( 46%3¿i4#6K&/ %&)*.$ "/(" ='(5 %3c'LA(- .;)+­ #`v\ &# XKA>$ /E% 1 )FDZ*4þ·1ÿ7².IZ%"&=&#"&546325!!32?67#5.#"#".547.'332>54'#"'32?632¢(4/!(8)02Lþè4 K3C K55 1A3 :FT?/I$SM4FmQ 325!!>54#"'632i 32ZB  &"2(2F`þÔ 36% ,.ƒ/7Ö#6cL0 5",@ H$Ÿ3þq 6X2&"!<Yº?ÿrö‘;327+"&54>32533##5.#"37#"&54>3254&#"r, )F>)3& 3__3f[B L!1)1GY$-H‰>3^+1:('Êc3ýwª!icM/=B+@ H$ê+w4?ÿo{‘=%2#53##54&#"3"&5474&#"327+"&54>32533#—;3…C3Q" *$Y$-H, )F>)3& 3,,46ý33ýt6@ (&"3+w4<>3^+1:('Êc3ÿÝJ.04#"./732654''254&"&54>32%5!ö cM 71=71832%5!‰*"Mm 33R,!(v^7186u) &‰.X*Yÿ?3ýö1™ ZD.++  5 %09&h;$ #1ÿßþçU.;?.#"&546325#"&5/332654&#"&54>32#5!p +="6(KE#3M.À83XYBLF57 + 8&Kc-(3þovÐ*9#7 /I'69:ŸV­š\IFa!#'" '}];cþ£33ÿéÿßE.J"&54632!5!##54&#"3".5463&'#"732654& +0& )1"@B þ\H2} #(/  ‚].  ,!.,»  !1 7%f*33ýä6!U )+ #<*D%8ÿßÿo¬.>4&#"3"&54632!5!##&54>32#"&5/332654&#"6Q"  *5&82ý©ÍC3þÆ + 8&KceTÀ83XYBLF57[@ (&07ý33ýtò'" '}]\|V­š\IFa!ÿßÿGU.JN!25#"&5/332654&#"&54>32#4&#.#"##"&5463265!["#À83XYBLF57 + 8&KcA2,'(#-ë9+ &*/6-$F1û33ÿÑ{@2533##&#"2?632'7674#"&547'#5!#6746Þ:M-3BB3T`!F  # "-F)*8' !) /ƒd-n\½\xZ17FÇM3þ`›7#  )" F( 6' NkWG LcdY³233è{4[ÿÑÜ.:27#'47#>7&&547'#5!##5./7##"'Ð&  ß3fä2t2ƒd-n <3ƒKN“ $ a0 1èDEþPLcdY³233þA>] (RMrWGÿÓÿõ-..?6?'&547'&547'#5!!>7)'!#2")3!#)2>32TZþ,k(—N!* oZ8`Pc,H#"E (37>7#5&'“R,!EZ  2F?2TZþ,k(   (")3 % J–+0G//1,H   + (37>7'&#"#&'7Ž   8!#2  2hnþ,k( ')-X")3#F"¦W!- *Q 02,H !6- (332632'ç."33 FGµ! 4F0þIf.A;°s3@Š32632&=474754'#567  JQ,!!2µ! 4F0þIf.A;."33s%†   >!)0+wD}*33©'I6* '0 <54'#"&5463367&547'5#5!!>?676ª5qVN™43O- (0" 0!&"%   3%#)¡JþŠ &"y?H8G`«b?M2 4"75& 0#)#¾33‹"!ÿËÿÊ.M%25#"&54632"2?&547'5#5!!>?67#5&#""5473265!'$2&'4##< 3%#)¡JþŠ &"y*38 ¨2:;Kª -1&%# 8)#¾33‹"! þ²5—;,<*ÿåÿ7/.j.#"#".54732?6325#"&'332>54'#"&543367&547'5#5!!>?>?>767#„B K55 .3!"&547.=47##5!##5&#"27d%  2- *þóy%"V$3 ./MQ3U0  80  #z0 $sþH5= MK0G33þAp  ' -ÿYÍ507"753##5&#""&546325./7&54632&#y…R3=`#.>-TFGkMp^),*' ŸyU-J1& DJ3ý^P‘% )3'#CcLGK)[F=8Y4&+#3"&475./7&54632&#"75!###632ñR!  *GkMp^),*' #yC3©yU-J1&©v 72[? (&88GK)[F=8 DJ3ýt:L654'!53&/&5473##"&54>?654&#"7#"&5432654&'è*þñü!F 47! ΰT$4>./U9(-a <-§ .:8&.MC%!%30%16D<)%4*P23sv5S. G4- *%.$/^.$1ùµkFsM20 /7T3;OA8   '+Ã3k33ÀH^HtBq}I 5Pb?,\F!a".: 0%"(ÿçÿEe.[.#"#".547326325#".'732654'#".'&";27#"&546325!5!!327#ÓC  /E#.EF :2965FsM20 /7T3;OA8   '+!:þÉ~þìQL3…',.%0 &;) *©+Bq}I 5Pb?,\F!a".: 0%"(3k33ÀH^-,þ¦ÿÓ^.,%"&=&#"&46325!5!!>54#"'62Q,'<6!(9(5<þÕ‹þÓ 35%*>.ƒ@&£vR3L’33þq 6Y1&"!=Yºÿñ/.I4'!5!##".'732654&#"&5467.#"&546323> $þu>t,+$N71[@43d/&$5I4$)/% )* )-0=!& ¨>33-&3_"142JYG c}@1(7% "&!5  !25ÿðÿ3..W%.#'67.'732654&#"&5467.#"&54>323>54'!5!##„!  JP*!"*6a?(4\=&$7G4$)/% () ))&)H2 $þz>y*>3!  >"(0# MdZ! Oˆ#A0(7% "&"4  !2% ,,>33-&2 >5S,þóÿáÿÆ.L"&5467.#"&54>323>54'!5!##5&#"#"&5473>3254`C$=(+ ))&)H2 $þk>j32: O 9J,8'#<(AH %"$P !2% ,,>33-&0'þ·3*V02: >(1Ø1ÿðÿI).i#5.#"#"&54732?6325#".'732654&#"&5467.#"&54>323>54'!5!#ž"* >3C   LZ.EG  55)33-&2ÿáÿa).F%#&/532654#"'63. #"&54>323>54'!5!#º %@(}¡"wÜ66 `SaG1 ‰   ))&)H2 $þk>j(å +#AŽ#m€3<)H] „    !2% ,,>33-&= 9ÿÓÿþy.$&547'5&#"&46325!5!!67ƒd.<6!(9(5<þÕ¦þ¸e–,.Lcb[³23vR3L’33ê†!PUYÿÓy.5;"#5&#"&46325!5!!632#7. /6754&5Ð'g3<6!(9(5<þÕ¦þ¸MN12 -cRTM>˜}*vR3L’33Ÿoþ   +R#E ä: &ÿðÿþ‡.A3".547;26;2&547'5&#"&46325!5!!67&'#"#þ &/!24 i , ƒd.<6!(9(5<þò—þªe–,./'5P@*81!3:b[³23vR3L’33ê†!PUY ÿëÿñ.06#5&/67.#""&546325!5!#632&545¯5(3=e&=q9"4D$7?".WþÌ4Í6#2þýD&2Nþ½;b!35:%&4)0")55*z33f;8lWq>;&!±ÿëÿK.6<E.#'67&/67.#""&546325!5!#632&547#5'O+!?J3G&=q9"4D$7?".WþÌ4Í6#2 5(3~D&22' J‚#'0?*635:%&4)0")55*z33f;8lWq>7þ‘&!±æ    ÿôÿ™Y.HN&#"#"&547326325&/67.#""&546325!5!#632&547#=Y22#;]* ?A * '6=e&=q9"3C$"1?".Wþ›eÍ9 2 5(32LD&1<DL$3 8=* +b!35:%&4)5)55*z33f;8lSu>7þeÞ±6&ÿØÿpÚ.1.#"&546325.#"&54>325!5!##W +>"5(LD$.J7"5- "!4#4,d1þP3G*8#6/J'60CÎ.9'& , '$E/F"e©33ýuÿØÿov.3:4&+#3"&475.#"&54>325!5!###632R!  *"4'"!4#4,b3þžC3v 72[? (&8£.:& , '&D/F"fÌ33ýtŒþ97ÿñ†.7D%4>3&'".#"&546323>54'!5!##54/&#""&#6'$;E )-07+' $þ¯•C3)" '*Ú.È' ,, !25#>33þo)((U0#,;  ÿð..7"#"'727&#"+"&5463267.'5#5!##.'6325J $": <+,6"K (&0&T1IX`$J01¬O#,€ESEU3:x "&'o)*&"33þ)<{0!B„3'GR#"=74754&''65&#"'>3253>74#"&5473723!>54#"'6267&#"2¹9d4T3 »$% .# o5ŠF÷[š5E!*3”9þË 9f+<-þ/@)9 D $E9Z‰ YÁ"&!? $1P‹½ 5 <0)  w 3þ  ’J&"!<4+E/" ,K~=I#"&/732654&#"&5475&''654&#"'>32533#2767&#"¸!0yAJ¢5$3 E:=)5I1,3e #K;\P0–“þÓ(+8"?=>;J^¦{XVF* A0!C &%NR  ( $!J_¤P3 & /y 5?727&#"63%&'4&#"'67654&#"'632533##5&''27&#"6’)'kA+E!&/03Wß!) L&)PwZW5OQ1Ÿ-&m9)4;ÊBt2HŠ% *)E •'4€ •~ÏK3þ…°˜.'`9G ÿo•s*5:4&#"3"&5474&''654&#"'>32533##267&#"2#R!  *(2»$%.# n6…F3àB4þ2 # S34 ?R82j[? (&# WÁ"&!$ $1P‚ÑE3ýtI ,+R)!þe7ý ÿ“ s0>>32533##5&#".5463254/.''654&#"72767&#&#" n6…F3VV3=_%%,>,OK »$%.% # 3#2$ ?£1P‚ÑE3ý˜O‘ *0($Cd÷. Á"&!$ 9 ,+2&(! ÿ¾ sFT7463263254/.''654&#"'>32533##4'5&#.#"""""&2767&#&#"YC/5% ( »$%.# n6…F3VV2,'(#-< # 3#2$ ?!$F1Ü. Á"&!$ $1P‚ÑE3ýå = &*/6Ä ,+2&(!ÿÜ‚.1;D>3267.'5#5!##.#"#"&'7267&/'654&#"72767&"76325Z.jZLUâ¦J05 (2%$( ”,%#' ")V¢[ X(E{)+&"33þ EIe '$*Œ& 5!+`E!#„ÿîÿ×üàW23!52732#"'73254&#32654#"'632#"&=./67&'#5!654'"5473;{"="þw/. ,2%=0')*G *n71l*<&I8¹Anf-% ›=,3(* #ß(69vK Zr8 #1?þ 8- -407X>0A_ %M#6@33*8&1,'aNaP'% ÿçÿÿ‰.I'675!5!!327&5467+".527#"&'&'332654'#"/.'ö, 2ˆ6Sþð¢þ¿ _%+19/"#  -@«%s$ 20:+.-7'%&¾ .J-* 33., /hx+e s(4  ›31SZPE‰l…."2("2ÿéÿþ.'5675#5!!67&54?67'&'Q\[p@‹ô˜þf–,. 4W59'}h<¥%2;33ê†!4aQNI Qi "Z7I9&Z0ÿéÿï.8>74732632&54?67'&/675#5!!67&#"#"&5S2)0x!0  4W59'}!@‹ô˜þf–,.)9q%>J\[ ,A,9B "Z7I9&Z082;33ê†!4aQNI -[<¥%ÿéÿÅ=.+2%&546?#5&/67./675!5!#636750_I-);¥"Y1Ky0%*"(˜þ¹TÛ` $þº-E^w7ý2+[uo)þ¾;T&? *e#+33º+W#T`l L ÿçÿdž.+.+'675!5!##5&#".5462*H''%ˆš9!~”þ½·A3=_%&+=ZH%$X,X.ˆ6b++33ýiP‘*1($B21ÿõÿ¿.7=%#"&'332>54'#"&547.+"'675!5!##36?6'5ª5oXN™44O- (0" 0!&"9p(\gþÑ%Â, ð S]æD46326325.+'675!5!##4&#.#"""##"J(3' *š9!~”þ½·A2- 1%$.îH''%ˆ0,.ˆ6b++33ý´<)  +60$X,ÿéÿhA.SW%6325#".'32654'#"&54632&#"3267#4&#.#"""&546325!' (9bC:"9%”T,P"5R3O)4! K%3!%(#2,'(".;B05þçXE1Jm_:“¥Q?3Z7?#00):2G #!9 &RÞ:* &*/7,$FÆ33ÿê. P4'#32'4'#5!##".'732654&#"&5467.#";27##"&5467’#µ 6:î š&f %#hQ1[A43'=[06H-#1)0! +%!›4,("&T!-33543VD\1JXI V^A@1!>!&. #3+'ÿé8†O[33##5./67654&#"32727+"'#".#";27""#"&546754'#5!6324'#32\%jI4QQ4";,C&,n'B7) ? D#G7 *& e¨)7?QþÛ#µ '*:§8P)YïX3þI% 58<"*$3J))3+'!-3JI4,#)ÿéÿþ×.1=&547'5#".#";27""#"&546754'#5!!674'#32nƒd.#G7 *& eîþ¸e–,.þ¿#µ '*:Lcb[³2[))3+'!-33ê†!Q~UY”4,#)ÿéÁ.2>#5'.#"&546325"&#";7"&546754'#5!#4'#3224L"3 #QA"+c   && oØM4#«(&:”B þÎE1?7 /G%:B|X,#'4335*5* #,ÿèÿ Ð.-47254&#"#"&547.'5#5!##5&#""&5465Ê.H$`#B2U)D‹>NBè93=_%#.E-=79.!21ïC+P,],‰&!"33ýP‘ *3(+;Ú82Nàÿébs Z2767&#&#"4'#32'4'#5!>32533##4/.''654.#"#".#";27""#"&5467¨0)3#2$ >`#µ '*:î e‹ N$…F3VV3 »$%!/,#G7 *& ¸(82&(84,#)T!-33 '‚ÑE3þ:. Á"%" "9))3+'ÿéÿ™bs^kw.#"#"&54732?6324/.''654.#"#".#";27""#"&546754'#5!>32533##2767&#&#"4'#32ÙC  LZ.EF 46 »$%!/,#G7 *& e‹ N$…F3VV3þÏ0)3#2$ >`#µ '*:2(M@%0 .<)+). Á"%" "9))3+'!-33 '‚ÑE3ýž(82&(84,#)ÿéÿ¾`shv‚%263254/.''654.#"#".#";27""#"&546754'#5!>32533##4'5.#.#"""""&5462767&#&#"4'#32 2) (»$%!/,#G7 *& e‹ L#†F3UU2- .$#.;DM % 3#1% !?\#µ '*:‹1Ü. Á"' "9))3+'!-33&‚ÑE3ýå % -3/7,%E--+2&(!54,#)ÿÙ . J4'#32%467&'#5!!32732#"'73254&##5./7.#";"&5¶/ ;þË*dÇþÄ Zˆ< ^r#%/"(M83'–5!ll *Ú" #33 O6GM^O7-&-=þZC;V -VK ,ÿÙÿ™ .Zg.#"#"&54732?6325./7.#";"&5467&'#5!!32732#"'73254&##4'#232‹F6LZ-EG  38'–5!ln **dÇþÄ Zˆ< ^r#%/"(M83V¶ *';2(M@%0 .<)+2;V -VK , #33 O6GM^O7-&-=ýóAÿé'Õ.NZ#"&'332>54'#"&547.#";27""#"&546754'#5!##"'36?6'4'#32‚5pWN™43O-'9 0!4*0" *& eìa1$ #µ '*:NF9Fb¬bAL2,$ 7$'/ #3+'!-3309-/ " \4,#)ÿéÿØÕ.T`%25#"&54632"32?#".#";27""#"&546754'#5!##5&#""5473264'#32!'#7")2# F#G7 *& eìa/3: ¨2 0DR#µ '*:Yª -2%&# A))3+'!-33098þ²5—;442B4,#)ÿèÿZÕ.kw&#"#"&547326325#"&'332>54'#"&547.#";27""#"&54674'#5!##"'3>7#4'#32\7<QLZ.FG 929/=N™43O-'9    4*0" *& eìa1$ !.5(3#µ '*:q: M@+* +9, +n¬bAL2,$   $'/ #3+'(-3309-/ 5F9;-þóA4,#)ÿé‘.3?J%463&'#".#";27""#"&54674'#5!##54&#""&74'#327#A5&,#G7 *& e¨C3Y/ '*#µ '*:¿§2DÈ(&#))3+'(-33þo] ()ô4,#)¢09 .>8ÿèÿop.4;%#53##54&#"3"&546754&#"#"&547.'5#5!#!5—30* C3Q"  *`#B2U)D‹>NBÏ þá=79.55ý33ýt6@ (&/{C+P,],‰&!"3382NàÿéÿèÕ.JV%25#".#";27""#"&546754'#5!##54&#".#"""&54632674'#32 #G7 *& eìa 3 *-#+& .9A).3l#µ '*:ŸŸ))3+'!-3309*$þÆ(  @-7,$G7 ü4,#)ÿèÿ\Ð.;B%254&#"#"&547.'5#5!##4&#.#"##"&5463265;`#B2U)D‹>NBè92- .#%.;K'2( ™=79.°C+P,],‰&!"33ý„7- ,4",07-,=0æ82Nàÿé(.>JS4'#5!##5.#"#"'73267.'#".#";27""#"&546?#325476325n e?53 :.10A,. 0;1$#G7 *& ˵ '*:D@5"'2­!-33þõN+(Tj# F?9!-/))3+'U#)B4,74E®ÿéÿh(.Yen.#"#"&54732?632.#"#"'73267.'#".#";27""#"&546754'#5!###325476325ÀA 6K\-EG 38 :.10A,. 0;1$#G7 *& e?53þyµ '*:D@5"'2c'LA(- ,;)+N+(Tj# F?9!-/))3+'!-33ým“#)B4,74E®ÿÓÿì[.;C3&54632635!5!#'654.'#5.+'67.#"&#"I!SK'; !þuˆÏ7J 4 :1-'X= !C " +@%"h8-i,L,=!  a33¨ (3"6!)& ) þÊ)K:0O;"_` ;ÿÝÿÀÿ.L46326325!5!##54&#"632'67&#""&5463254&#&#";"&=29- !þ‚"s3ZB!AH"+ '%A & 'bEAH"1@#!  %,a1G5&L33ýÅ“+\;+$'  %$1&!=QL©  ^1,1ÿÒ7Ê,W3723!32654#"'632#"&=4/.#"&#"&546326325!5!>54#"&5473”Cþ =f*2ƒN$, ,<!8QI(8#%"þy{[š5E!*Ù z 3þ¥ šH&"!8#Yº:,š . ^ ++N,=1&3h3 8 <0 (  ÿÒÿUÊ,u.#"#".54732?6325#"&=4/.#"&#"&546326325!5!>54#"&5473723!32654#"'632#@!L'F:.EG 8356$, ,<!8QI(8#%"þy{[š5E!*3”Cþ =f*233v& D4%0 ,<)*œ2:,š . ^ ++N,=1&3h3 8 <0 (   z 3þ¥ šH&"!8#LTþ«ÿÕ6‡.B&54>326325!5!#>7#"&'332>54'#"5&#".#">$$3 4"(/& þ€²ÿ+"OzCRs9>-<)&:M8&)+#$G( " C #*/)$Y33Ñ :<[ rSk$&-#3,$*@i>?$7ÿÕÿY‡.b.#"#"&54732?6325#"&'332>54'#"5&#".#"&54>326325!5!#>7#í@!6K\.9S29+,Rs9>-<)&:M8&)+#$$$3 4"(/& þ€²ÿ+"O33r&LA%0 *32+Sk$&-#3,$*@i>?$7( " C #*/)%Z33Ñ :<[PF8þßÿñÿÖÿ.P32654&#"&5463254&#".#"3254'7#"&546326325!5!##".'N›M8F40)H5 /+3''=. 1-=C0; .þd?gQ326325!5!!67g‚e.&)+#$$$3 4"(/& þ€ûþ¸e–,.R]b[³2|>?$7( " C #*/)%Z33ê†!P`Nÿòÿï‚.HM25!5!#632&=656=4'#5./75.#"'.#"&54>326: þ€Ý: ."332>7&#"Û3d/+3''=. 1-=C0; .þd?3# Z#' # 3'Cü@"Î(D!/&9-%C 1 F33ýõa ' $)E]  ,.Q&'.#"""""&54632632&/#5!!3273#"'73254&##5./67d--*"(:-(69vK ;P$ 5 K:/,: %kB-/6-,=0#%33*8&1,'aN %51 &$ 1 #2>þZFFX %ÿ™.n.#"#"&54732?6325./6?&'.#"""""&54632632&/#5!!3273#"'73254&##E  LZ.EF46,: %@--*"(:-(69xM ;P$ 5 L:32(M@%0 ,<)+5FX %3B-/6-,=0#%33*8&1,'aN %52&$ 1 #2>ýóÿßÿo .I%2#53##54&#"3".54754&#"4&#;27#"&46326325!5!#¿84“B3Q#    '@'." 0&;GG;1.+&þS )57ý33ýt6? (!îY&&3))90Q€R0+ ‡33ÿÕÿø×.I%25&#".#"&54>326325!5!##5&5&#".#"##"&546326*&)+#$$$3 4"(/& þ€O3 */",%/8C(.3¹³>?$7( " C #*/)%Z33ýýW) B.9+$F7!—.?H%"'.'27#".'#"'72654&#'326325!!'2654/&'\ %# % 8- '/ #!7lþÇ/"C  Y{+5—1-S%G34 0 +#,1 &30/IK[3=#$ 0ƒ]3±* ÿôÿµG.[f4.'#"=&'327#"&'#"'7254&+'632>325!!32632.+732>'2654+"'` _0N)&%  - ):(  W&2     þ&N.?b>g6Q"9ÈmCP6çD3*AYwKG% +11 &' ,A* N3< M81^(/K$Aw2<J(ˆÿíÿä!…-]32654&#"&5463254&#"327#"'#"#".'7&'7;>54&#"56;263533#Q&54&#"56;263533##5&#".546324&#"327#"¿ 4#I5N3QQ3=_%&+>,.H$P%!, <X')-1=8k_  $ÀW3ý™P‘ *3&$B21s/6 +ÿíÿo …S%4&#"327#"'#"'7;>54&#"56;263533#2#53##54&#"3".546P%!, <" 4#I5N3&&54B3Q#    )5r/6 +:')-1=8k_  $ÀW3þ:7ý33ýt6? (!"ÿíÿ¾…\726324&#"327#"'#"'7;>54&#"56;263533##4'5&#.#"""&546Ø1) (P%!, <" 4#I5N3QQ2- .$# .;C‹1s/6 +:')-1=8k_  $ÀW3ýå > ,4/7,$FÿÎÿì.8@327'654.'"47#5!#'2654&+"#5.+'767&x1b1a4«JÞPc])/$  2'[A!)7Ç\$ EŽ%Y( MK$33+## P:Q(#;þ¿GN70$0#)#ÿÎÿÞg.JT]"&547#".547#5!!>32'654#"#5&#"#".473263254'326?'654.'"1G$ $4«™þÓ '' !0#"1230< S'-()T 0,Þ ! a1WI # ,K$33+9) 8-##Bõ2* 218#9+01S1':K -A*3F31B 6 5ð +o< .'ÿõFm'<@67'&/&'#5!654'"&5473723!32654#"'632#"&'.'7#')=[›3G"*`š4B0þÓ;c %!".:c4.r=Ũ4tG5/  3 1 ?/). D83þ´6C$"1'6vS %6Vâgÿëÿh'$U]f.#"#"&547326325#"&547"&547#5!4#"#"&547326323#32654'7#4&#"6'327‰CPLZ.DG<46JN*3^B<å¤:NWJ0 zSE5g~M[M8,u#=3!N!” !0"c' M@*+ ,;) +“+3&:K37@+3F31<  4=:35'N6H"#9+/þÎM +o< .'ÿõÿjm'[_.#"#"&547326325#"&'./67'&/&'#5!654'"&5473723!32654#"'632##µB   L[.EF 046*+.r=!)=[›3G"*`š4B0þÓ;c %!".(!3¨¨2va'LA(- 1 <) + %6V.5/  3 1 ?/). D83þ´6C$"1'+b'þÙ‘iÿàT1;G654'#4>7'&5467'#5!&5473##"&7&/62654' … D%,;\P6&+   )ÚÃ>0cGEW™;9)<&7F<&:3|1þ¦ )&N?3]G#ìx@TV6\8!qÿéÃ.$:AE%"&'#5./67&'#5!!>32'4&#"'67654&#"32%&'5(.g3AcG*g-~"Úþ¶# ,<+.1'-P$ D20f".þçH;0{UÕT‚]O$Ð@\H:%R#A33ƒ%  >-5%13gh3. ( FDKGƒ(>+7qc#wšÿÎs IN2767&#&#"327'654.'"47#5!632533##4/.''654&#"#".%67#c # 3#2$ ?ý1b1a4«Þ…F3VV3 »$%-V) $ÿ"¸ ,+2&(!B%Y( MK$3 ‚ÑE3þ:. Á"&!$ (5 ,y ÿÎÿ™#sGT\ej.#"#"&54732?6324/.''654.#"'#".547#5!632533##2767&#&#"327'654.'"767#›F7LZ.EG  38»$%-X* $4«Þ†F3UU3þÎ0)3#1% ?þû1b1  '2(M@!4 .<)+). Á"'  )7 ,K$3‚ÑE3ýž(82&(E%Y(  ÿéÿù.D27'74&#"26"&547#5!!632#"'732654##5&/67'x*\'‡ )> ‡:Ah´þq)diG4Ke$!  †3>’(a8^Nl>.–=&7533#&(4#>">>E:%0 ;PþnAW6=&ÿéÿ™.KS^.#"#"&547326325&/67'#"&547#5!!632#"'732654&#"#27'74&#"26wCNLZ.EG 8 46=’(a8?:Ah´þq)dgH6Ke$!   2( M@!4 .<) +*V6=&=&7533#&(4#> @>E:%0 ;#/þÅNl>.ÿÎ:.4A327'654.'"47#5!##54&#""&5463&'#".7#x1b1a4«lC3]+ '*5&3: $ñ/ŠŽ%Y( MK$33þoZ()!((- ,-<  3+#ÿéÿoR.)04%#53##54&#"3"&54675./67&'#5!#&'5y12“C3Q"  *BdE*g-~"±!3I;0|UÖLŠ44ý33ýt6@ (&# ]G:%R#A33é(?+7qc{šÿ×ÿì}.I3254'"'3'2654&+"#5.+'767&'#"&'6?32654'4'#5!hVG?8&h8$=9)IY]&7  2'[A!)CO?"<8  $ئ?E",l$H8$"5 N7P(&4þ¿GM80$:Q‚3  @*33ÿ×ÿÞ˜.T^%&5467&'#"&'6732654'#5!#>32'654&#"#5&#"#".5473263254#"'3254'"'$1#."<8  ØÁá))!0#"231;V%7 (+2R 1,%C8$=ð # !H?‚3!3.33"5/ 8-#Bõ2* #3*)A"8; Ø/Ií$H8$ÿ×ÿv}.RXb.#"#".547326325.+'767&'#"&'6?32654'4'#5!#'2654&+"#3254'"'h:B/.) >>2,2'ZA!)CO?"<8  $ئÆ)IY]&7  3VG?8&h8$=T' ;(*+ *;) +EN70$:Q‚3  @*33"5 N7P(&4þIÉE",l$H8$ÿçÿåS… L254'#233##5./2654'#"&5473274'"&'#"'7327#5!2'!]  z*?>X3ll1:@g,Hd=A-*-  K10 <"1% $ ™?2)>™'   §,$C=W3ýê&/?')I0&J 3/6::!)n3EdIÿß'KS%2654#"'632#"&'5.#"#"'73267.'5#5!467474#"&5473723!25!6Þ?a*/6a6 +4-!21@,%. B_2¥[—8E!*a™3DCþ² —'1þã`$R–K&"!<9Z!™-?4?4jOCK7%3 4 <1)  / C73þn=E±oÿãIC$Y4&+3223#32654'7#"&54>7.'#"&'6732654'#5!4#"#"&547326¥%V9#=CE5g~3HH38+v#7.'#"&'6732654'#5!4#"#"&547326323#32654'7#4&+32‰EM/E#-EG 8 38@<*3 )/';"<8  #ØÈ:NVK0 zSE5g~3HH38+v#=33 $V9#>c' ,.(- ,;) +…3&!#=*‚3!A) 3F31B  4=:3#B419#9+/&%þæM+$Hÿó9*.>G#".'732654&#"&5467&'#"&'67326=.5#5!!3254&#Ó&#"dT7&'#"&'6732654'4'#5!##3254&#† JO+!%6b?(3-5N*5I41* +"2"<8  #Ø7W&$"43f9#=B  >!)0NdZ ;PA.@1(7!& #,F‚3!A)33"#2 UK+þò§$H8 )ÿ×ÿÊ.JT"&5467&'#"&'6?32654'4'#5!##5&#"#".5473>3254'3254'"'`C$;'6"<8  $Ø7W$30< O $7 ,5*#<(„8$=EH%"#OH‚3  @*33"1 5þ·3*!/) 2:;&3Ø1¶$H8$ÿñÿh(.bk.#"#".54732?6325#".'732654&#"&5467&'#"&'67326=.5#5!##3254&#uD6/E#-EG (38)1[?43\>&%5I3$)2(5"<8  $Ø7W% #">3[9#=c',.(- ,;)+b 2HZG S†"@1(7%! E‚3 @* 33"!4 UO.ó“$H8 *ÿ×ÿq&.7A%#&/532>54#"'67&'#"&'6732654'#5!#'3254'"'·#J1|¢"vÝ54!$0>!`G1z/"<8 #Ø7W.&?·8$=ô+3#B#m3,"I] |?‚3!E# 33"%7#Á$H8$ÿÓ. ?2654'#%3267#5!##5.#"&546325.'&'+"/P ’ 'þÛ 4ÌA¥-5 , /ÿìÿƒü.;6325.'5#5!##5&#""&546325.#"#"'7326s@5"'2Ä B_853=_%#.>,-H% :(20A,-û84E®¸K7"33ýˆO‘ *1)#C21ÂN4?4j" Eÿ× s Y2767&#&#"'3254'"'3#67632533##4/.''654.#"'#".'#"&'6?32654'4'#5!æ0)3#2$ >ú8$=`' B!…F3VV3 »$%-44 "<8  $Ø7¸(82&(($H8$)‚ÑE3þ:. Á"'  )(‚3  @*3ÿ×ÿ™ sZgqv.#"#"&54732?6324/.''654.#"'#".'#"&'6?32654'4'#5!632533##2767&#&#"'3254'"'3#6E  LZ.EF 46 »$%-44 "<8  $Ø7!…F3VV3þÏ0)3#2$ >ú8$=`' 2(M@%0 .<)+). Á"'  )(‚3  @*3‚ÑE3ýž(82&(($H8$ÿ×ÿ¾™scq{€%63254&/&''654&#"'#".'#"&'6?32654'4'#5!632533##4'5.#.#"""&546322767&#&#"'3254'"'3#6´ ( »%&14 "<8  $Ø7ƒH3UU2-1$# -3&'#".'#"&'6?32654'4'#·".  þË8$=þYÕC4\+ ' )(% / 4 "<8  $Øû".0< 3$H8$33þoZ (+" /!(‚3  @*ÿìÿo .C6325#53##54&#"3".54675.#"#"'73267.'5#5!#s@5"'2313/¤B3Q#     :(20A,- B_8ü!û84E®þ:4ý33ýt6? (!, ÁN4?4j" EK7"33ÿ×.LV726325.'#"&'6?32654'4'#5!##54&#".#"""##"&5463254'"'¨10!2 "<8  $Ø7W33** $.9B€8$=ë6 ž'‚3  @*33"<þÙ(  %*(-7,$F$H8$ÿìÿ²ü.N6325.'5#5!##4&#.#"""##"&546326325.#"#"'7326s@5"'2Ä B_852- 1#!-.#""&546325&/32>54&#"&54632&'#5!K '7!&"/>,-H%z’_:&: M$B0d/6l•¥Y&&3þœà|"8 *2)#C21Tc09!(# $<#$*9+KZ9o2[p!*ÚÆ33ÿÓÿÈI..22'654&#"&/32654&#"&546326%5!Û0:.;&A|¤Z&¥Ý[,CXK&1++ Q?0a 5þ'v¥;1$:*.#a!Yr!»G9!@3$=4 %4EF*-V33ÿéÿú§./=B4'#5!#2?&547#5.#&'>354&#"/46725'.5#7#3f%X¾ê9 0D3O+$1J5-+B?YG+DûR1!Å#33]*/‹O…n=þŽ|6E!+;( h9 ;¦M52*ÿçÿË=.O;27#"&'&/32>54&#"&546326326325!5!##4&#"4&#|/'-@ %C¥Y&©Ù_:&: M$B0d/'V":0/+&ý+VN3@'." %*801+"[p!ºH9!(# $<#$*9+K4''0+ ‡33þY&&3)ÿçÿJç.FJ%25&/32>54&#"&54632&'#4&#.#"##"&5463265!"z’_:&: M$B0d/6l•¥Y&&2-+"#! .;J(2( þíàOc09!(# $<#$*9+KZ9o2[p!*¢7-  B"07,+?0ø33ÿçÿ“W~P[g2533##&#"32?632'#".'32654&'#"&=#5!#26754>4632#"654#"+1;K-2AB3S^*= # ,&D(#p[=b7'/Z4(-CP4 %á« Œ Y&7,þÉ "åb,!/0HÇP3þ `›:  7(>'WjIe[&†©$[H4 7!5+­33©" b (< ýƒ2i^ 7ÿÝÿhT.,39.#'67.+"'675!5!##"'72>54&+#/P+!AU(w2z™þ®wò9F0/")( \23œ)‰L Kf!*0D,4U6`*.33.(L1#B%'7LýÎ2JX/W)  +ÿÉï{1.#'675&#"32632'7674#"#"&54632533##yQ,!LeV^!F O",E**8+ N  WC9M.3CC3 *0L2o›7#)"!E( 6)%1^5HÇM3ýÎÿçÿN¿.,5.#'67./7##"&547#5!##27#OQ,!ES"q=N&HOØ=3& !&')Þ3Å  J *0E-0B (R8,33ýSE $ #a0 þ©   ÿåÿU±.#,%.#'7&'#5!!#'2>54.'$  JP,! cÌþÊ=2-* 33–#bDLgC   >!)0Ô33=&(4Gþ¾àYi ÿñþò.EP&'#5.#'67&+532654./#"&=#5!!;26722654'#"'\# J3%80?R/."3O+!B]€}GVx _104*þ= "12 NþæC1     ¼ <(3/)$î3#'0F/U4[2@].á33 @ZK&†ÿçÿ7a.M.#'67&547#".'32?#"&'&5332654'#".547#5!!32?#ÜQ,!DY #0C( $*%*`4Hƒ3m9"@(1'2KåzþÀK9# 3–!)0F../]X ! B!-"$,!@RŽx+F! c…6'$&1/a1337'!>_;HTÕÿÇÿZš'@7523!32654#"'632#5./7.5#5!654'"&5473G$B>.I/þÓ;d&!"-33  !&d[[š3G!*a!#/š%l32533##dQ,!MdY$-H, )F>)3& 3__3 *0L2c+w4<>3^+1:('Êc3ýÎÿßÿ.U.48%.#'67&'&/332654&#"&54>32#5!`JQ,!-3—13XYBLF57 + 8&Kc503þv  >!)0." úV­š\IFa!#'" '}]AiþôÍ33ÿ[ë†3833##5.#'67./67654&#"32727+"&54624\%jI4QQ4P,  (V~Q2JL§8P)YïX3ý`3 *0@*=@ 8<"*$3- 2DJþe&ÿè«.&,"##5!!632#7. /6754&5'g3HÃþ·LP12  .cRUK>˜}* 33 pþ   +R#E ä9 &-ó5 .5:5%"75!##5.'#5./7&54632&7675#’0{&]þò#y«g3†C3GkMp^),*' ŸyU-J1&3gwÞ: O4ò  2½ DJ3þX/{ þõVGK)[F=8Y323>üD'@s$þk>j3  !$z 94 ))&)H2 Ò#/š"°>33-&5þ¾"*!L, !2% ,,ÿØÿ˜Ú.$,767.#"&54>325!5!##5.#7¦JfA&'"!4#4,b3þP3Q,# KEN0?C , '&D/F"fÌ33ý3 *q   ÿÉ s%3.#'6754/.''654&#"'>32533##2767&#&#"‚P*!Md »$%.# n6…F3VV3þÏ # 3#2$ ?"(0N0F. Á"&!$ $1P‚ÑE3ýÎï ,+2&(!ÿçÔ. ).5.+'675!5!##5.'#675s.{%]Uš9!~”þ½íf4…D3H''%ˆ3on: M6ò  1í.ˆ6b++33þX/z þõ$X,J”L+ÿéÿYA.=A%4632&#"3267#5.#'67.'32654'#"&'5!…  Já)4! K%3!%(#2M,!'*:_B*9%”T,P"5R3O»XG   ®#00:2G #!9 &Rþñ3!)0) LukD“¥Q?3Z7Â33ÿéÿðÕ.<7574'#32%#5!##5./67.#"327#"&54674¾G$Ex#µ '*:þòeìa3  !'l$c +& ·#/š&Â4,#)¢3309;þ¼"*#CG3*'(ÿèÿc .BGR.#".547326325./67.#";27"#"&54674'#5!##574'#32^;V%B6+@D7.4  !:Y$c  ,+ ›"a33kH#H{#µ  V:g' D5'/ /:, +1!*/7G3*#(-3309Bþ.T"0š)Å4, K 9ÿèÿhÐ.',5.#'6754&#".547.'5#5!##'5x=79.S+!Jg`#B2U=4‹>NBè93hO/û82NàýŸ +0L1C+P,L/‰&!"33ým¬+}ÿôþ÷à. J%55>754&#".547.'5#5!##5.#"#".54732?6325.#O/½=79.±0O2`#B2TB.Š ALGì83B!6/E#-DH (47R,+}·73Nàþ27 €C+O,G1ˆ$$"33üü5',.%0 .<)*+,ÿßÿ˜ .6.#'6754&#"4&#;27#"&46326325!5!##ŒQ+!Md@'." 0&;GG;1.+&þS.N35 *0O/QY&&3))90Q€R0+ ‡33ýÿíÿ˜…;76754&#"327#"'#"'732654&#"5263533##5.#ÞIhP%!, <" 4#I5¸N3QQ3Q,EM1›s/6 +:')01=8i_  $ÀW3ý3 *ÿ×&.*2757#5./67&'#"&'673265#5!!3254'ûD'@‘33  !(kK$"<8 " Ø7þò8$=í#/š#é"<þ¿"*$B]‚3!'O/33$H8"ÿìÿ˜ü.&/7675.#"#"'73267.'5#5!##5.#6325ãIh :(20A,- B_853Q,‘@5"'2EM12N4?4j" EK7"33ý3 *æ84E®ÿçÿËö. 75%5!##5.#&/32>54&#"&54632675•.{%]þHf4H"^¥Y&©Ù_:&: M$B0d/3gnq: M6ò 1·33þX66 [p!ºH9!(# $<#$*9+KQ5L+ÿçÿ'ç.26%.#'67&/32>54&#"&54632&'#5!KJR+!EZu…_:&: M$B0d/6l•¥Y&&3þœà  >!)0F/X,9!(# $<#$*9+KZ9o2[p!*èÔ33ÿ™›„_#".'#5.#"#"&547326325./>54'"&547326733#3274#"3"54632ƒK+( 4CQLZ.EG 7 46³86q4)$1( ,(54'"&547326733#67O/_4CQLZ.EG 7 46³86q4)$1( ,(?>54#"&546Î#0%s/O;5SKI/ &@b8M 6$,E-/()"9$ &[OY…Y6#80B:[¬o ;$YkGO *"%Q[%`;+1># 3 .Fÿ®{`"&'#5.#"#"&54732?632&#"32632'7674#"#"&54632533#3274#"3"54632„KT)3CYM.DG28V^!F O",E**8+ N  WC9M.3ññ  6 *>0#$,96G##þ¬6'W6), *;)*<›7#)"!E( 6)%1^5HÇM3‰G,X'$;(<ÿ®{{W%&=47#5.#"#"&54732?632&#"32632'7674#"#"&54632533#67=/^3CYM.DG28V^!F O",E**8+ N  WC9M.3ÏÏ@7ˆCB _¥! þ†6'W6), *;)*<›7#)"!E( 6)%1^5HÇM3#`%+ÿ¾{j"&'#4'5.#.#"""&54632632&#"32632'7674#"#"&54632533#3274#"3"54632„KT)2- .$# .;C/1) (V^!F O",E**8+ N  WC9M.3ññ  6 *>0#$,96G##þÞ   ,4/7,$F1›7#)"!E( 6)%1^5HÇM3‰G,X'$;(<+ÿ¾{{a%&=47#4'5.#.#"""&54632632&#"32632'7674#"#"&54632533#67=/^2- .$# .;C/1) (V^!F O",E**8+ N  WC9M.3ÏÏ@7ˆCB _¥! þ¸   ,4/7,$F1›7#)"!E( 6)%1^5HÇM3#`%ÿçÿº.|.#"#"&=7332632'&547#".'32?#"&'&5332654'#".547#5!!32?3274#"3"54632#".'ïA t"?O2)/!y '$#0C( $*%*`4Hƒ3m9"@(1'2Kå(þK9#  )7 *>0#$,A4   --4XA ,F4 2H']X ! B!-"$,!@RŽx+F! c…6'$&1/a1337'!#3X'$;(<-,Q ,M6A…ÿçÿºÕ.q.#"#"&=7332632'&547#".'32?#"&'&5332654'#".547#5!!32?67&/&=47ïA t"?O2)/!y '$#0C( $*%*`4Hƒ3m9"@(1'2KåîþLK9#  ,8/ ]--4XA ,F4 2H']X ! B!-"$,!@RŽx+F! c…6'$&1/a1337'! #`% 1T .KE/! K5A…ÿåÿõÂ.IM#"/#4#"#"&547372&#"327#"&546323274#"3"546327!5!©L*: .\Š =K, V²'&w !)•7.  5* >0#$,ý#Ý97F/þõr]I4<*3$#m'$#*8Œ. ) 4X'$;(9’3ÿåÿõ¡.<@%&/&=47#4#"#"&547372&#"327#"&5463267!5!b/ ^.\Š =K, V²'&w !)•7. @7?ýD¼ˆ>G .KE/! þÍr]I4<*3$#m'$#*8Œ. :¡L3ÿœ†h#"/#5.#"#"&54732?6325'./67654&#"32727+"&546233#3274#"3"54632„K+9 4CLZ.EG (46A1]A,p'@7) ? (V~Q]$iJ4ðð )6 *  >0#%,94I/þ5(M@*+ .;)+BF11 8;"*$3- 2DJ=7Q(ZïX3Š 3X'$;(<ÿ{†[%&=47#5.#"#"&54732?6325'./67654&#"32727+"&546233#67=/^4CLZ.EG (46A1]A,p'@7) ? (V~Q]$iJ4ÏÏ@7ˆCB _¥! þg5(M@*+ .;)+BF11 8;"*$3- 2DJ=7Q(ZïX3#`%ÿûÿ·.B%&#"3262&'#"&4632654#"#".5467#5!!32>F$ $%3@-   (0M9<("/24:3;-,9 †!þ +0&0\LD4WE BA9908?JV!?-:#&K22O&7(/(ÿîÿþÓ.T#"./4&5&'#"+".547;26;2&547'#5!!673274#"3"54632°A4)  .(5 P '0!1-$ i#* ƒd.žåýìe•,  6 *>0#%+9,Q1C^P @*/:!3:jS³2"33ê†!F+X'$;(<ÿïÿù›.E%&=47&'#"+".547;26;2&547'#5!!6767S/[ .(5 P '0!1-$ i#* ‚d.ž¬þ%e•, +8ˆCB b¢! 1C^P @*/:!3:gV³2"33ê†! #`%ÿ™5W%"&547326325./7&54632&#"75!#3274#"3"54632"&'#5.#"yyUDU™F`.EF 3 :FkMq_<+( $y$ñ  6 *>0#$,KT)3D =œ ×$#& Â$þk>j ,-)=52$.6&6 o& )6')H2 §þ>33,'2 (!4/&QE'+H,' " Q !2!+,,ÿáÿä.=74632'.#"&54>323>54'!5!#&#"327'#"&Þ;,  :1 ))&)H2 $þk>j(#%" …'o"*E¼(39- !2% ,,>33-&> SªŠ'ÿá(.+4'!5!#'7".#"&54>323>š$þk>jd3bý:D  ))&)H2 ¨>33-&1,G (J8²g,, !2% ,,ÿáÿü.G7467&#"&54>323>54'!5!##"73254'#5>54&#"3&Å80?' ))&)H2 $þk>j!D"4ZIÝj0(˜Wp2 89,O*51]ý$? . !2% ,,>33-&($0426BG‹—C) 1(%'4 ÿëÿþQ.c#"./&'&'#"+".547;26;2&547'5&#"&46325!5!!673274#"3"5462$K*)  /'5P &/!24 i , ƒd.<6!(9(5<þífýàe–, -7 *>0F-96G5AUY @*81!3:b[³23vR3L’33ê†! 3X'$;(:ÿëÿù .T%&=47'&'#"+".547;26;2&547'5&#"&46325!5!!6767Ä/\ /*2 P(. 24l$) ƒd.<6!(9(5<þí!þ%e–, +8ˆK: d ! 4@UY @*81!3:b[³23vR3L’33ê†! Œ ÿ™¦sXf#"&'#5.#"#"&54732?6324/.''654&#"'>32533#3274#"3"54632%2767&#&#"A4*)3C  LZ.EG 46 »$%.# n6…F3ññ )7 * >0#$,ýÄ # 3#2$ ?9,Q##þ—5(M@!4 -<)+). Á"&!$ $1P‚ÑE3‰3X'$;);Q ,+2&(! ÿ™}sM[%&=47#5.#"#"&54732?6324/.''654&#"'>32533#672767&#&#"?/W3C  LZ.EG 46 »$%.# n6…F3ÈÈC-þ # 3#2$ ?ˆCB _¥! þo5(M@!4 -<)+). Á"&!$ $1P‚ÑE3œ#`%# ,+2&(! ÿ¾¦scq#"&'#4'5&#.#"""""&5463263254/.''654&#"'>32533#3274#"3"54632%2767&#&#"A4*)2,'(#-0#$,ýÄ # 3#2$ ?9,Q##þÞ = &*/6-$F1Ü. Á"&!$ $1P‚ÑE3‰3X'$;);Q ,+2&(! ÿ¾‚sXf%&=47#4'5&#.#"""""&5463263254/.''654&#"'>32533#672767&#&#"D/\2,'(#-0#$,A4))4#:/ #*.) H''2" H,Š6`-+33Š3X'$;(;.,Q"!þš5 ;'+* (&3{$`!ÿúÿ™k.?H726325.+1'675!5!#67&=47#5.##".547„ƒ  Ÿ8"z˜þqÊA1/Y4#:/ #*.) H''2" H,Š6`-+33œ #`% 1T d ! þp5 ;'+* (&3{$`!ÿçÿN.Q5#"&'#4&#.#"#"&46326325.#'675!5!#3274#"3"54632g~E0oªA4*)2- 1%$ .;J(3' *š9!~”þ½gñ  !6 *>0#$,:$eì8,Q##þ­<)  +607X>0,.ˆ6b++33‰G-X'$;(<ÿçÿ+.GP%&=47#4&#.#"""##"&46326325.+'675!5!#67í/]2- 1%$.;J(3' *š9!~”þ½DÎ"TÂH''%ˆˆ1T d ! þ‡<)  +607X>0,.ˆ6b++33 #`%$X,ÿçÉ.RV#"/#.#"##".547;725#"&54632&#"32?3274#"3"54632%5!°A49- -!  9;$1C1*m7aD0;3% 9/:81 )6 *  >0#%+ý7â9,Q/ù#"J5214B "èU>0!+$+ 38883X'$;(:“33ÿçÿù¬.EI%&=47#.#"##".547;725#"&54632&#"32?675!n/^- -!  9;$1C1*m7aD0;3% 9/:81A6ýzň1T d ! þØ#"J5214B "èU>0!+$+ 388E-Y"f33ÿöÿ= .PW#"&'#5.#"#"&5473263254&#"#"&547.'5#5!#3274#"3"54632%5‡L)(*3C YM.EF :56`#/*U)D‹ AMLªñ  !6 *>0#$,þ ?59.97F##þ;5(W6+* *;) +ø‚5+P,],‰%""33‰G-X'$;(<•73Nàÿöÿ={.FM%&=47#5.#"#"&5473263254&#"#"&547.'5#5!#675=/[3C YM.EF :56`#/*U)D‹ AML…Ì?5þT?59.ˆCB _¥! þ5(W6+* *;) +ø‚5+P,],‰%""33#`%f73Nàÿéÿ™úsx‡“"&'#5.#"#"&54732?6324/.''654&#"#".#";27""#"&546754'#5!>32533#3274#"3"54632%2767&#&#"4'#32áKT)3E)LZ.EF46 »$%!/,#G7 *& e‹M#…F3ññ  -7 *>0#$,ýÄ3#2$ ?[#µ '*:96G##þ—5(M@%0 ,<)+). Á"' $":))3+'!-33 %‚ÑE3‰ 3X'$;(9O)!2&( 64,#)ÿéÿ™Ñsl{‡%&=47#5.#"#"&547326324/.''654&#"#".#";27""#"&546754'#5!>32533#672767&#&#"4'#32“/W3F6YM-DH :38 »$% /,#G7 *& e‹K#†F3ÈÈE+þ3#1% !?Z#µ '*:ˆ1T d ! þo5)W6%0 ,<) +) * Á"' $":))3+'!-33 %‚ÑE3œŒ#)!2&(!54,#)ÿçO..4@#"&'#5.+"'675!5!#3274#"3"5463254632#"&6A4*)3™>$€™þ¼hñ )7 *>0#$,þ09twF&9,Q##þþY/†4^6&33‰3X'$;(<- \'ð"þâÿçÿù'.#)5%&=47#5.+"'675!5!#67%54632#"&é/X3™>$€™þ¼@ÉB/þ~9twF&ˆCB _¥! þ×Y/†4^6&33œ#`%¤ \'ð"þâÿñÿyÿ.%#".'732654'#"'732>54&'.#"632'>54##"&54632754&#".#"3254'7#"&546326325!5!#ñ P+@uL.3Sz7%  #;%!, 4B  H"%!/+3''=. 1-=C0; .þd?1d'  ):X}r% E—f$ - @I'D/   "C  "IDF(D!/&9-%C 1 F33þëDÿñaäJ[#"'732654+563632>76?67#"&'732654'#"'673264'.'32>7#"&É(  `   M%%- )E$M9mÆ%2€Q!?"  '1"     1 G,A#=! ~"Y/Tà²jÆ&/ *,d%P   ( + ÿíÿ™³…o#"&'#5.#"#"&547326324&#"327#"'#"'7;>54&#"56;263533#3274#"3"54632šA4*)3E  YM.EF 2 56P%!, <" 4#I5N3ññ  !6 *>0#$,9,Q##þ—5)W6), .<) +Ms/6 +:')-1=8k_  $ÀW3‰G-X'$;(<ÿíÿ™‰…c%&=47#5.#"#"&547326324&#"327#"'#"'7;>54&#"56;263533#67J/V3E  YM.EF 2 56P%!, <" 4#I5N3ÇÇC,ˆ>G ^¦! þo5)W6), .<) +Ms/6 +:')-1=8k_  $ÀW3œ¡ÿíÿ¾³…x#"&'#4'5&#.#"""&546326324&#"327#"'#"'7;>54&#"56;263533#3274#"3"54632šA4*)2- .$# .;C/1) (P%!, <" 4#I5N3ññ  !6 *>0#$,9,Q##þÞ > ,4/7,$F1s/6 +:')-1=8k_  $ÀW3‰G-X'$;(<ÿíÿ¾…n%&=47#4'5&#.#"""&546326324&#"327#"'#"'7;>54&#"56;263533#67R/]2- .$# .;C/1) (P%!, <" 4#I5N3ÎÎA5ˆCB _¥! þ¸ > ,4/7,$F1s/6 +:')-1=8k_  $ÀW3#`%ÿÎÿ™Áserzƒˆ#".'#5.#"#"&54732?6324/.''654.#"'#".547#5!632533#3274#"3"54632%2767&#&#"327'654.'"767#¨K*) 3F7LZ.EG  38»$%-X* $4«Þ†F3óó  6 *>0#$,ýÁ0)3#1% ?þû1b1  '96Gþ“5(M@!4 .<)+). Á"'  )7 ,K$3‚ÑE3‡ 1'X'$;(þ0)3#1% ?þû1b1  'ˆCB b¢! þr5(M@!4 .<)+). Á"'  )7 ,K$3‚ÑE3ž#`%#(82&(E%Y(  ÿ×ÿÿ. FP73267&#"&'#"&54632765'&5&'#"&'6?32654'4'#5!!3254'"'Ï(#è 8-$A71%-7'9X)"<6  $Ø7þò8$=¼  ""1 7);(&HM'-"$-' "! j‚3  @*33$H8$ÿ×ÿû1.9C74632'.'#"&'6732654'#5!#&#"327'#"&3254'"'Ý:. #7"<8 #ØZz%##" …'o:3#8$=Ô&42.'‚3!E# 33" 4 XªŠ6G$H8$ÿ×6.%/?&'#"&'6?32654'4'#5!#3254'"'Í‘Y)"<8  $Ø7W)!d§Ê8$=èj k‚3  @*33D6,G~8Å$H8$ÿ×.MW#".'73254'#5>54&#"3&5467&'#"&'6?32654'4'#5!!3254'"'·#."4ZI.PDM0)—Wp278-F )2]17/"<8  $Ø7þò8$=û"/ ,527B%A‚YŒ—D) 1%'4NG >‚3  @*33$H8$ÿìÿ\¸.Yb#"&'#5.#"#"&54732?632.#"#"'73267.'5#5!#3274#"3"54632%6325ŸA4*)3C  LZ.EF29 :(20A,- B_8Ìñ )7 *>0#$,ýÔ@5"'29,Q##þZ6'M@*+ ';)* N4?4j" EK7"33‰3X'$;(<•84E®ÿìÿ\“.NW%&=47#5.#"#"&54732?632.#"#"'73267.'5#5!#676325U/[3C  LZ.EF29 :(20A,- B_8§Ìcþ@5"'2ˆ1T _¥! þ36'M@*+ ';)* N4?4j" EK7"33#`%f84E®ÿ×ÿ™;su‚Œ‘"&'#5.#"#"&54732?6324/.''654.#"'#".'#"&'6?32654'4'#5!632533#3274#"3"54632%2767&#&#"'3254'"'3#6"KT)3E  LZ.EF 46 »$%-44 "<8  $Ø7!…F3ññ  6 *>0#$,ýÄ0)3#2$ >ú8$=`' 96G##þ—5(M@%0 .<)+). Á"'  )(‚3  @*3‚ÑE3‰G,X'$;(ú8$=`' ˆ>G ^¦! þp5(M@%0 .<)+). Á"'  )(‚3  @*3‚ÑE3¡ (82&(($H8$ÿ×ÿ¾6s‚šŸ#"/#4'5.#.#"""&5463263254&/&''654&#"'#".'#"&'6?32654'4'#5!632533#32>74#"3"54632%2767&#&#"'3254'"'3#6K*; 2-1$# -0#$,ý # 3#2$ !?ñ8$=Z! 96G/þÜ % +5/6-$F1Ü'Á"),%(‚3  @*3 ‚ÑE3‰F,'#'$;(9O ,+2&(!+$H8$ ÿ×ÿ¾ sx†•%&/&=47#4'5.#.#"""&5463263254&/&''654&#"'#".'#"&'6?32654'4'#5!632533#672767&#&#"'3254'"'3#6Î/ W2-1$# -0#$,ýÔ@5"'29,Q##þÓ:*  +6"06-+?0¢N4?4j" EK7"33‰3X'$;(<•84E®ÿìÿ²–.Zc%&/&=47#4&#.#"""##"&546326325.#"#"'73267.'5#5!#676325X/ ^2- 1#!-54''4&#"3&546327%5!žw=3+!*W "h¹~G29S&+H$+#!&A[G6H&B22þ5üGDi&R $j|"F"!0&8%`'2-$02T5FKV!_’33ÿÓÿÈ!.6:%47""./32>54&#"&54>32632'&5!¨  o¢\&Dý?[>&: L%/,#<(6k :þ+NÀ@/L$Xs!U¢?!(# $=4!3 "*W6 39OW ,33ÿçN.,08#"&'#5.+'675!5!#3274#"3"54632%'5A4*)3š9!~”þ½gñ  !6 *>0#$,þõ9Vˆ$ %ˆ9,Q##þþY.ˆ6b++33‰G-X'$;(<7@>e X,ÿçÿù&.!%-%&=47#5.+'675!5!#67''ç/X3š9!~”þ½?ÉB/½9Vˆ$ %ˆˆ>G _¥! þ×Y.ˆ6b++33œ#`%î@>e X,ÿçN.,4=#"&'#5.+'675!5!#3274#"3"54632.'75A4*)3š9!~”þ½gñ  !6 *>0#$,þ`:,n6H''%ˆ9,Q##þþY.ˆ6b++33‰G-X'$;(<þÀ&Q . I7Q$X,ÿçÿù)."*3%&=47#5.+'675!5!#67.'7ë/[3š9!~”þ½BÌ?5þè`:,n6H''%ˆˆCB _¥! þ×Y.ˆ6b++33#`%o&Q . I7Q$X,ÿíÿ¾¢.MQ#"&'#5.#"#".54732?6325.+'675!5!#3274#"3"54632%‰A4*)3C  /D#-DG 19š:!~”þoµñ 6 *>0#$,þõ9V9,Q##þ¼4&,-&- /;(*%-‰6b++33‰X'$;(<7@ÿíÿ¾.AEM%&=47#5.#"#".54732?6325.+'675!5!#67'A/]3C  /D#-DG 19š:!~”þo’Î6@Â9Vˆ$ %ˆˆ1T d ! þ–4&,-&- /;(*%-‰6b++33 #`%@>e X,ÿÝÿ,T.*1'7675!5!##"'72>54&+#5.+"7¦¦ýïz™þ®wò9F0/")( \23›@ùœ)‰Ô{({ï`*.33.(L1#B%'7LþfX/‡JX/ÿ,w„/'733##5./>4'"&5473267Z¦¦þÀW$Ld3TT3¯:3:*4(%1( &'=Ô{({R5FaÝV3þR,‡1-45)*%/DJ+ÿ,t{.'72533##&#"32632'7674#"#"&546W¦¦þQ9M.3CC3V^!F O",E**8+ N  WÔ{({Ý5HÇM3þ`›7#)"!E( 6)%1^ÿçÿ,Q.*'727#'47#5!##5./7##"&3¦¦þa& !&')Þ3fOØ=3„JN&HÔ{({? $ #a0 133þAAZ (R8 ÿ,2 <F'7>32#"'326?#".'732654'#"547&'7&#"325¦¦þk I4M.',59(#)\H>g@&3"5R0<3% =!o#>(ä5<$UÔ{({TE)+) W<P-JcM|ƒB @ykAE.0,"4”!W>&1 5ÿåÿ,ê. "'7%2>54.'&'#5!!#̦¦þ‘#bDLgcÌþÊ=2-* W{/Ô{({áYi þŒÔ33=&(0‚^ÿñÿ,.9D'7.+532654./#"&=#5!!;26722654'#"'|¦¦ %80?R/."C`z;GVx _104*þ= "12 NþæC1 Ô{({Ë <(3/)$7='4[2@].á33 @ZK&†ÿçÿ,˜.I'7".547#5!!32?&547#".'32?#"&'&5332654'z¦¦þQ'2KåzþÀK9# 0 #0C( $*%*`4Hƒ3m9"@(Ô{({¤1/a1337'!>_;HTjN]X ! B!-"$,!@RŽx+F! c…6'$&ÿçÿ,†"+'7675!5!33##5'&'#5.+"7q¦¦ýp¡þºz63VV364–?÷#q#)ˆÔ{({ïa,+3þÎ@ÜX3þ=$£W2„;V1ÿ,ë:H^'7#"&'#4&#&+&547;636;24&#""327#".546327>32'4&#"2654&#"5326¡¦¦0g*\3B^#H}/69 ":, %n  "#! Ÿ*5'2*,=35a.W83%'/Ô{({Þ40gBÈL3šE9 C<9*#S x $ $>Ba1>-44'xE67!,3%ÿÇÿ,š'5'723!32654#"'632#"&5#5!654'"&5473|¦¦¦6A/þÓ;d&!"-:c4,'d[[š3G!*aÔ{({\F63þ´6ŒD$"1'6vS?'O3 2 ?/) .ÿôÿ,ªT(4'73##"&54>7>54'#53&5472654'|¦¦þé/2Ư2@fHFV2 ʬP6&(:4I<"G0Ô{({‹,N73Pr^HZD N=%3]G54#"'62|¦¦ú,'xØþÓ 35% *>.9dÔ{({¯?'’33þq 6Y1&"!=8€[?ÿ,]‘('7327+"&54>32533##4&#"@¦¦þ, )F>)3& 3__3Y$-HÔ{({5>3^+1:('Êc3þW+w4ÿßÿ,U.'+'7&54>32#"&5/332654&#"%5!¦¦þÏ + 8&KceTÀ83XYBLF57þãvÔ{({ '" '}]\|V­š\IFa!w33ÿ,]†4'733##5./67654&#"32727+"&5462@¦¦þ×\%jI4QQ4";,C&,n'B7)!> (V~QÔ{({S8P)YïX3þI% 58<"*$3- 2DJÿéÿ,-.'7'&547'#5!!67¦¦ãƒd.OÊþ¸e–,.Ô{({ªLcb[³2"33ê†!Q~UY-ÿ,:5")'7"753##5./7&54632&¦¦þU#y…R3GkMp^),*' ŸyU-J1&Ô{({® DJ3þVGK)[F=8Y325!5!##5.#"0¦¦þ4#4,b3þP3"4'"Ô{({0&D/F"fÌ33þÃ.:& ,  ÿ,{s"0'7>32533##4/.''654&#"72767&#&#"]¦¦ýŽ n6…F3VV3 »$%.% # 3#2$ ?Ô{({O1P‚ÑE3þ:. Á"&!$ 9 ,+2&(!ÿçÿ,Y..'73254&##5./67&'#5!!6;2#"'¦¦q I<38b($fNrþ3>(69vK Zr8Ô{({È #1?þZFA_ %M#6@33*8&1,'aNaP'% ÿçÿ, .'7.+'675!5!##¦¦öš9!~”þ½·A3H''%ˆÔ{({.ˆ6b++33þ$X,ÿéÿ,A./3'74632&#"3267#".'32654'#"&'5!¦¦þ„)4! K%3!%`K9bC:"9%”T,P"5R3O»XÔ{({$#00):2G #!9 @s1Jm_:“¥Q?3Z7Â33ÿèÿ].%'7.'5#5!##54&#"#"&5475@¦¦þh>NBè93`#B2U)D>=79.á{({:&!"33þ­C+P,],‰–82Nàÿáÿ,J.$'767/.+5!##5.'-¦¦ýß9Y KUÜ?3)“9?Y7;G&4Ô{({Ï9C 233þLCR F7""5jÿçÿ, .''7675!5!##5.+"754632#"&¦¦ýò€™þ¼¾G3™>09twF&Ô{({í^6&33þY/†, \'ð"þâÿßÿ,.3'7;27#"&46326325!5!##4&#"4&#c¦¦ýË0&;GG;1.+&þS.N3@'." Ô{({Ñ)90Q€R0+ ‡33þY&&3)ÿíÿ,Ž…<'7#"'7;>54&#"56;263533##4&#"327#"q§¦þ1 4#I5N3QQ3P%!, <Ô{({')-1=8k_  $ÀW3þ^s/6 +ÿéÿ,D.'7&'#5!##5./6&'5&¦¦þr-~"ÖF3BdE*÷I;0|UÖLŠÔ{({C#A33þ@]G:%3(?+7qc{šÿìÿ,Ž. ,'76325.'5#5!##5.#"#"'7326q§¦ýå@5"'2Ä B_853 :(20A,-Ô{({§84E®¸K7"33þõN4?4j" Eÿçÿ,ç.#''72&/32>54&#"&546'5!|¦¦¾6l•¥Y&©Ù_:&: M$B0dÆàÔ{({—Z9o2[p!ºH9!(# $<#$*9+K33ÿçÿ,J.3>'7"&=#5!!>7#".'32>54'4632#"&-¦¦þÂ%á.þæ R(4wY=a9'3.EN#)=#(0 Ô{({™6(°33¬X(p"YoIg€]$TY2$6-2(+þÛ4 ÿéÿ,Ú.!/'7%"&5#5!!>54#"'6324632#".¼¦¦þÀ#4ZºþÕ.M#"(Lj!- Ô{({¬/7•33þh]d# "mL³_-!ÿëÿ,9.!-'7&+5!##5&/674632#"&¦¦þxeU ÒI3C°,=,E$Q(/(" !É%&Ô{({K]23þLp/8B–*5G# "fþX '&ÿçÿ,#. '7'.+'675!5!##¦¦ù9Vˆ$ %ˆš9!~”þ½·A3Ô{({I@>e X,X.ˆ6b++33þÿçÿ, . %'7%.'77.+'675!5!##¦¦þ²`:,n6š9!~”þ½·A3H''%ˆÔ{({Ò&Q . I7 .ˆ6b++33þ$X,þWÿÞ.=A'&54632>32'654&#"#5&#"#".5473263254#"753Û$i.$. +"0$"531;V$6 ()R 3)%CÍ«ð #3g;- 9+#Bõ2* "2+)A(2  Ø/Hì33þÿóg/2#".'73254'#5>54&#"3&54>¦5e"4YJ.PDM0(˜Wp2 88-F )2]$5)g9)327B%A‚Y‹—C) 1%'4N!1 þaÿþ,"2#".'732654&#"&546s0A\G+N8,3 2L*+>*+3,M9AM*?L?DN64*!.Bþaÿäÿ¹R*%&54632#5&#"#"&5473263254#"þ÷]*34'2  )M.,#1',7š)^6&þî)# C4$6 3+"µ(= þÿÞÿ Œ*%&54632#5&#"#"&5473763254#"þÍf1<31; :I,8'/='$C¹ 2f14þ·2*W.2: ;(1Ù0I ÿá<.#4'!5!##".#"&54>323>š$þk>j6:D  ))&)H2 ¨>33-&"E,, !2% ,,þ‘ÿRÿÚ„&#"&546323#YId6(KE#3M.33e7 /J'69:ŒýÎþíÿ~ÿÑÌ'.#'673#bF(B,D<Md33” ) 2L/0/N0þ²þÔ!ÿ²Š'56753#5.'ìI"5v0{33  !è&,š )L!þ—!þnÿßÿÏ?.'25#"&54632"2?#5&#""547326¬!'# '4##>U$-- ]_sX'. 0',/#šþFÿkÿáî'.##"&54732?6323#R    %,1D.*"$ B 33`   O90% %(1  þ}ýÎÿ‡ÿ*Œ"463263253#4&#."##"ýÎK'3' (32-+F% .BX=0eã7- C",/ÿÉÊP#".'732654'""""'732654&'.#"632'>54##"&54632&25F43aF83 ©T$   #7$%%*+3 < G#&Ê5Y2 !#@:WfXqÐ# -(>IL. ".B  !Jÿíÿ™Ð)cr23####5.#"#"&547326324&#"327#"'#"'7;>54&#"56;26354&#"&5463.#"B4]XGJJ3‘3E  YM.EF 2 56P%!, <" 4#I5N6?HHiÏ‘•f,[TMG )7eE3ýžbýž5)W6), .<) +Ms/6 +:')-1=8k_  $z"$%HûSu$#!ÿÿÍ®.'26=33265#5!##"'67¡%30" C3‰X 64YA &)+""*2 FHm33þ“:Q'P w.5%25!32>3247#5!##"'6732>54#"#".MŸþ»,/'04?šü;mwXbpYB2 &@28K %'3Ž:P%7(/(D4«=?S633þÆ]dP$CJV?@ ;ÿÓ.$/726=&#"&46325!5!##"'>73265¿(<6!(8)5<þÕ;X65YB %…0"B3\(evR3L™33þÆ:Q'PŸþ¤*2 GG:ÿßÿÍœ.>I%26=4&#"4&#;27#"&46326325!5!##"'7673265M%@'." 0&;GG;1.+&þS½W 64YB & {0"C2)+¨Y&&3))90Q€R0+ ‡33þ“:Q'P  Òþq*2 GGmÿíÿÍŸ…EP%26=4&#"327#"'#"'7;>54&#"56;263533##"'673265P%P%!, <" 4#I5N3ÝX 64YB &…0"C2)+òs/6 +:')-1=8k_  $ÀW3þ“:Q'P Òþq*2 GGmÿïÿï. (,7%5./67'&'#5!##"'?3265&'533265 ,$<!!E7.(X 74YA '(90`G¨8p3/#C30.,8(33þ¶;Q'P 'Å 3$  \g|þ”+2FHJÿש.1;H%26=#".'#"&'6?32654'4'#5!##"'>?3254'"'33265Z%4 "<8  $ØÒW 65YB G8$=90"C2\+È (‚3  @*33þÆ:Q'PŸ$H8$þÖ*4DJ:ÿìÿͤ.-6A%26=.#"#"'73267.'5#5!##"'?632533265U% :(20A,- B_8¸X 64YA  Ï@5"'230"C3*,ˆN4?4j" EK7"33þ”;Q'P Ñ84E®þq*2 GHlÿçÿË^.4#"'&/32>54&#"&54632326=!5!# 65.#¥Y&©Ù_:&: M$B0d/6l8 C3þwWt;Q' [p!ºH9!(# $<#$*9+KZ9D-GH‡33K.+%>54#"#".547#5!!32>327028K %';mþ -/'04?  KAhV?@ ;)T622S%7(/(D4+'#ÿÝIÕ$923#32654'7#"&54>54#!5!4#"#"&547326ôE5g~2HH28,u#<—J(5L\LBþóV:NWJ0zS¥=:31 >218#9+01S1'$T>CL3F31B 6 5þcÿÿÇ"274'7&'#"&5463267&#"þÄ5 2  "(0M9<("/"& " $-"BA99:Qÿ•¼¹. $#"./&'73274#"3"5462%5! K*) "  -6 *>0F-þõ$96G 4 3X'$;(:“33ÿ³ÿù‘.7&=47'6753S/c F@m¬ˆ1T d ! 3¡f33ÿï¾°.'6325#.'5#5!##5.#"#"'7326Û!)ç*03U/Á+4/"*)6% &“9‰i;(33þÃbA,4,Z 9ÿò a.$6325.'5#5!##5.#"#"'7326`# #‰$I'o3)!("+ û0/gn+33ï<699I *ÿïìQ."632.#"#"'73267.'5#5!#Û!)/"*)6%&3U/bç“9RA,4,ZB9;(33 "ÿÿÿâ8e'^x1Cÿèe'#5373264'7#"'&546;5!5!##"_SS);5EC96LxSkEI]JŽþ¡lÞ$ O»)C$3n'1*iR^FI\Ie}IIÆ#„„F%"3267#"&5467'#5'%&'"'>325!5!'&54>32'"!!7'432+M(!'88OCF5(ŽHþñ+b"’+ÆSGþ?Â*.,8)D $Q‰þ…|Bà-&#=8N50C )=éÏ›9•lM7 SDFèH9H5$2 ; % JWHá5J* -ÿD„„_%"3267#"32>7#".547&5467'#5'%&'"'>325!5!'&54>32'"!!7'432+M  "88O#7( &)B=<& +5(ŽHþñ+b"’+ÆRHþ?Â*.+8)D $Q‰þ…|Bà-& =8% <*7#5$%>0C )=éÏ›9•lM7 SCGèH9H5$2 ; % JWHá5J* -ÿiЉL#53&54632'""#"&546;5!5!##"32632.'"'46322674&ÃaaŽXN4*D!$R*O -s ÂþÓÐZêG i"0Œd-'D",™,  )NÁZ³kM62 ;# F_þv4`IIªP; ,R?8"-[  8+þ|KZt#532653#"&53#'7DD%!'/D31E, $Kí=Ar$2??2 Šî;ÿUG#532653"&53###53'73õCC%-/FbE-4 MHM=á=ðYð@r$3?A1%¡ýäHâ:þäþLÒ£,043###53%7'7&54>212653"&537#533'=R7LMGM3þÛ1Õc>L!&!-/FbE-3;CCå'e%>BUHýéH–7„Ò#±*â$3?A1%2@>5þLJÒ'+'"#&'#%7'7&54>322653#"&537#53=D $R:- ?þÓ1Õc>O,7+,/D31E-*DCC$ %IY>Jš7…Ò#·%1 ¹$2??2&2@ÿ&K‰k%#532653#"&53&54>32&'"7DD%!'/E21F- $wY 1#*4 #*(×@r$2?@1 ZsI, : & #T*ÿÿþÙæe'oEÿ¿]ÿ „e *@#53'3.547#5!##"&54654&#"&5475!"327"2USS€ »WÂ*8#P„€ @cs6Ua‹."MVþñ#C"$!?Q|Z)Oü ÍR_5<IIp5(DwM-iOMOaEptKO%tQ&37#"32>7#".'47&543254&#".54oF:þˆ KþÀ?18Ä4H&#1! #3;=8( &)D<9%:•/\"8p'@43F>7^HH¥8v#  L2' <*7#+=h=.Ma;"R"0'>ÿóaW<D23275#53###"'3274'4632.'#".547&54632'4#"6ý*SFeòFGKNF>&)b  *&2@,61/eAH5=DG:587x%zHHýéO /O"* )-.4!@*HC1C3;C/59'1&"ÿµ¡W8<463!5#53##!"32?2'#"54632327654#""&%!5!+/žMãMIþ{@D!'5$a5{w&'; 0!7kŽþE»y]HHýér63, $X,tB .# rÏH¡g%.547#5!5#!5!53###"=[P…âMþB¾ãMIÑ)6T8 M84HoHGýèa4($w.Xg!5!53##5'%&'"'>325#vþŠvâNGþï+b"’+Æ,ˆMHGýáÕœ9•lM7 Sîÿþ´e2;463273267#5!##5#"&547'7''67.74#"6dA58GF\S*‚#: ^(ˆFG"`/6A©)ëP"U&-„­8.$1ý0880D4J'?9;8,X5EHHýäm38B6&"UAx7'9 D* ++(xe"+4>3275#53##5'7''67&74#"6w*27GE‡32&#"4#"6v AMÜFI   .9'M= B -‰=*27GEd'-#*,1*9- 1Z"HHýäC  >*Z.+  9F;7&29/E3EF1"%2˜++ * ÿì¯e-#53'-32654.'5!5!5!####".5 >>õ-"þC „=  ý߯GGŽ# :(:i<#D¹¡8ºëY´!$%# qHHýäc(6./XrX ÿáÌe13275#"&'5#5!!632'>54&#"#5'%p;,78ÖjKe)ÌþÁE@(C 8>E!S3   Gõ,!;I"//öþ”U@×HH¶A5E "pB.k.'&  þ÷€ 7»"ÿÅÿáÌe153275#"&'5#5!!632'>54&#"#5'%#53p;,78ÖjKe)ÌþÁE@(C vE!S1   Gõ,!",êIII"//öþ”U@×HH¶A5E U.k.(%  þö 7»HEÿáÔe7275#"&'5#5!##5'%5×;4Ö;/Ke)ÔGGõ-")ø7îÔ"/GU@×HHýã 7º&ÿóe&.##'7&#"#"'.'732=!5!25!6FGÁ2·ZI% A2 4_%11 @_9 G<þßþCl7þäýä¡5’M $/Ju&58%X!ˆ',(.ŠH¦24Äeÿõoe,!632'654&#"#"'.'732=!5!oþí#)<\8/7X1 ,+ ?- Š41%,8M9 G<þìoqS84X/1K=&',¿+5(6!N$p',(.•HÛe=#"'.'732=!5!!3632'>74&#".547B; /[,11 @_9 G<þìÛþz$:\B=.!)2IBq158%X!ˆ',(.ŠHHmUbk' !,'N$0>Z*ÿìÛe;7267!5!!632'>54&#"#5#"&54?.54672'&#"Ó"Hþ­Ûþ¿8H6ZwC!Q/4FG£% q@/.XEJ',06¼*HH­NX<]|/g0 ,tþþM? A )M+Ab N 4$'<ÿóÿe"L"&54?&'&5732=#5!##5#"'32675#"&54>32&'"32675^pRœ\; .-äMGþß  O% 5W4%+7C;L"2*6K( Aq?*$!ú< ","-ŠHHýäx‡ Ž˜+ 4='A#31D8&8 E4 "Áÿ¹?e #7"&'47%.547#5!##5#".547"327!;p£%µ<D?FG=K:0G Ÿ8,)Sxþì'#K)G>)OM? ªA5&HHýã¼ # 0%: '#NIÿÉ]e,0747#5!#32675!5!##5#"&'4?#"&75ŒC¦aW%;(3f#þ0]FG¡ py3N5úC;GGQW@ÃHHýãzM !>*:A Ue.7267!5!#632&#"#5#"'&5467672'&#"Ó"Hþ­àF7D")4FGI*?36-DJ')?¼*HH­MX tþþ©#-1B$B1 N  #&9*qe<#"&54>32&'"3267#".'&57326=#5!!#3267q7C;L"2*6K2 A—?7^@7#; .×þÿJ65W4&œ+1D8&8 E3#"Ú<#4QJ0; ","ŠHH˜224='@$Ýe##"'&54735#5!L!45'9‰þô456šHy¶e'"32767#".547.547#5!#;ê 8+'6J8yM0G 6,*DdÆ'#K)B'%%TF 0%:- R!&HHIzÕe!5!47#5!#32767#"'&ƒþ}ƒ÷C¦aW%;&039$ ~>4'&Hþ•C;GGQ*.I{Q"!ÿ²¯e-32654/5!5!5!##5#"&'47%5##"'&5c „= **ý߯GG¢&p Ž# 9(†`ÉY´!0>7 qHHýé]N?=*³(6//Ú@t&e!5!32654.'5!##"'&5Ôþ,Ôþ „=   “#C4†`HœY´!$%# H(6"=3Ú?ÿze=72654#"#"&546;5!5!##"263227*"'&'"'4632å)M#K,p#½þÚÉ\å@(W%4 &‡`+Mh—!)'S6+3Š.^HH¥J'Qz+N?-oX"Pe,!5!632327#".'#"'&'7232654&#"¾þB¾þ°G+FU!"#   bG47'2/V(469/3HÊ$IMLF[&9/=,/H (e'463!5!5!###"&'4?5#""'&).8 þf(GG]& rÇë!M?1L\>1HfHHýé,@ ?)_@^O4^s)ÿË…e@%2>75#53##57#"&'4?#".'3254&#"37".54632)+8=eóGG32£#ry3bA(*-Ÿ7)B:-= U9HZÂ-Å 8(ÓHHýãÝ*OM= ?) :.CG x*5-/C&#0=`DAÿ€èe/46;5!5!##"34'432#'#"&'4?".)B4»þ¦èGê)ÈB+ N_ƒ rÓFl>& -=U^HH¥+ B001c9>6?) e(92'ÿ¹CgG"&'4?#".547.54632#4.#"6;"3275#53##57pœ+.,@ 5,3K)-EH  #(6"Â9.Cs`íFG&&I¤ G=)J.% 21T)1GI& ',$DRoôHHýäÍ##OMÍje ##"&=#5!26=#j#PþÂ>þëHà iHþ÷&GV s.¢e7#53!5!463!##"&ÓeekþÂ>þëHà i.cŒHþ÷&GV sÿóÔJe27#"&=#5!#×>5*FKf6œ;;X*U@´HH±"/1e 7"&=#5!#632&#"#5'3275#ÚKf)ÔGD/43G.¨;,78ÖÔU@´HH’>L &/þÙð"˜"//ÓuXe%!5!0#"&54632&#">7'27'þúR EgYCJ9! ­ è8+&¡HþDZGEc N},4s)ŸÏe$#534&'46323##"&546;54#"Š11þ« J2#$ºº_ (+0H£' 38 *¬Ga o !—2. "qe46;5#5!#3##"'& (\|ÎÎ/0% ÊHHÊGO7:¨•e327#"&'22654'#5!#þ=6 <'RI>Q^~)57€Cl'Á/W!)Ud7v`,"6$HH+ÿÙÔe 7275#"&'5#5!##5#"&'4?×;4Ö;/Jf)ÔGG£%r¾ø7îÔ"/GU@×HHýé…N?@)[ÿËÌe43275#"&'5#5!!632'>54&"#5#"&'47%5p;,78ÖjJf)ÌþÁE@(C vE T7.GG£ r .I"//öþ”U@×HH¶A5E U.h1)$>þüvM6?) "øe !5!".54632>7"'67&'"¦þZ¦þÊ4$JN9aJX@%<+)g A 1*+HHþœ:=(Ad2E]F%Gj4!+.+Fbe.:!5!>32#"'#"&5463232>54&#"#.#"32>ýêÎN'ER ?,\&'^ESXEVO:* #0  G3(SS( Hÿ"/aR;:$W\gSJi²'L% <:  )@js+ÿ½be2>#53!5!>32#"'#"&5463232>54&#"#.#"32>#bbóýêÎN'ER?,\&'^ESXEVO:* "1  G3(SS( CYHÿ"/aR;:$W\gSKh²'L% =9  )@js+uXe!5!267#"&54632'&#"þú3'R (+0EgYCJ')?HþW/UZGEc N  #&9ÿÿže)#%72>7#".5467#5!&#"32>V+wN°0þë,.'N>27+)_žnB&' 6DT†˜2ñ4'B,) /* HHLL&0  ¥Je 7"&=#53#'327'ÚKf)øuÇ*°;,<$Ç¥U@ãHHÓ{*˜"/)Ñe "'&/732=!5!#3#B#D"D1V[‚9 F<þìô˜­¥J*0S& 5Uƒ¹',(.ŠHHGÿ Qe-3!!3. 54>7.543!5!5!#!"w+§þzC0E<5#%" 'Q<þJþpJI0!.F#1   "-5 WA^HH¥Ïe)!5!4>32"&'46?&/"'"#".#&}þƒ}þ«]\#9,06Î p%×?$ */$Hé 9@;l8/oI D!21 ÿ»àe-%'32##5#"&'4?#"&54632&#"?!5!¡7+"ìFG„&r•EcZB G9! ­ þ­àÚs*7Uýé]E?>) Kf=Ec M} Hÿè2e<4&'463235#53##5#"&'47%5##"&546;54#" J20"µeòFG”  pÿµ_ (,1 Â' 390¬ÊHHýéŽI   >( ~(a o —2.ÿÍúe $"&'47%46;5#5!####"&%5#Õr £&â (\úFHÉ_^É3@)NN?X ÊHHýéOnFÊÊÿ»àe+##5#"&'4?#"&54632'&#"327!5!àFG…&r•EcYC G'& :,C;þ­àýé]E??) Jf=Fb M  +6;Hÿøbh 94#">"&'47%.''7&547>325#53##59.5 8q Â4u.œC$ 11"%:d\MÚFG£&ø(#'    þ?*Q H9c4B3 +7>.ÝHHýé£M@ ÿ´Ûe8ES2675!5!!632'>54&#"#5#"&547&54672&#"%654.#"6322675"'Ó#Gþ­Ûþ¿9G9W54vC"P-!5EG1MFg87XD 7+6&370"! 5E7Cþ¯#G-N2$ÏHHoGP58C):Xm+[,&h¹i0W9:>*A:[ F.$'/8' h}Gç$- ,"0ÿ9yeZ#533254#"#"&546;5!5!##3262632#'2674'"#5#"&54632&#"3275.'7xOOýá`Ž1o 7"4v%¼þIyzö'<U8&W=%<3HP:.49CG40;J^&" 21200aP41MKV NISd+ ^HHšK5?Q R%=*] T,# (  7K'SHHš$%þeP!/AYW$3X24F# ]þ‘&c6:'" 9 ÿnxe48%#"'#"&54735&'73274&#"#"'&546;5!5!#!2632##53×G@+'j&:f(0i­g J*/41»þGkiþþ6T :#H¡OOq ¯6lU.;6{.#-19+ZHH¡IsþšÂKÿmxe5H#53%46;5!5!#!2632#5#"'&'47.547&'73254'"#"&"3275#"';xOOþ=1»þGkiþþ6 U ;"H|>E4$%/40i­h!J-`o<O~ÿ‰£e:%4'5%5#"'#"'732654#"'6323275!5!##5#"'732FP("^B_e/`036e-0U%3 O[JPQ5+7-u7"GH ´HHýéi+*4D°8188ÿ9ƒe1H"34'432#'#"&547#"&546?&546;5!5!#32?3267'"'A(ÇC#+J`%wDG< ,L6'5B4ºþsGþ>E-BGS" "7\-ÅB Ex*!B)0o%JhJ0!G1,T=U^HH¥þì< %*1 + dS0f&ÿµ®e0747&54;5!5!##"632&#"327432'#"M"FdŽþå®K½( # ##+?K A %;?F¥º('(<\THH› ' J)IJ31g#yÿ)}eQ"34'432#'#".547".54632'&#"3>33267'".546;5!5!#O(ÇB+ ')Ta†&' %P:A-< > l ;†.;^. Xz:A6ºþu<x*!B/0"TY7¼ 0!%H*.@#&;  +L@,eo &A>#327'".546;5!5!# (ÇB+ 13Z&¢.:r";",A  /'8F§Xz;A6ºþ=KAx*!B00"TXQ_N +# a' "3 1ua%&@>$f7* !>^HHýéiç f¥…e.7"&547&546;5!5!##57##"672'"327úFZLMLVþè…GGMe²—Ì -EFd/)G\#F95O6(^HHýéŒ=2Å5¥# HD$;ÿ‰ôe'3"34'432#'#"&547&546;5!5!#'&#"326·)ÈB+ 11S H<;F/™B4»þ¦èG"$'$&/%<x+ B00[\3T.A(,=U^HH¥þ{N#%.ÿ8,e0##"327#"327#".546;5&'&5476;5!5!,xÏ(5´]1A).Ï+2´]1AVu=uN`9“,jIM315“þ”,¥#Y:3'”!Z;3N(L/3Q:./D7(&^Hÿ9,eA4>;5#".546;5!5!##"327#"32674.'7#"&)'91Š ;oFa8“þ”,xÏ(5´]1A MÙUUPJ;9 EV2Y“%#5 A+L+5P^HH¥#Y:3š9*. + +8Yÿ9eP4>;5!5!##"32674.'7#"32674.'7#"&54>;5"".)(;/ŠþªhÙ!&¥P5 9$%DÙU¥J;9 CY1Y“'91ŠDU:B%5 ^HH¥X ,%%;!ª9X + )8YI#5 M Fÿnke4%#"'#"&54735&'73254&#"#"'&546;5!5!#!2632#×G@+'j&:f(0i­h J*/41»þGkiþþ6T :#Hq ¯6lU.;6{.#-19+ZHH¡Isþšÿ9VeT3254#""&546;5!5!##3262#"'323762#"'732654#""&547&'7Y`Ž1o=4v%¼þIVWö'<U8&iO7:IM8& 'C)£¬1`Ž1/@=4vaC1B NISd+ ^HHšK5>]A5'1(Æ NI4, f-8Y ÿ9VeNW46;5!5!##32?62#"&54632#"&546;5#"&'732654#""&>54#"º.¼þIVWö M8&1ÒYb@G(1JfL\«SB•#\¡R1`Ž1:5=5u*1-ŒXHH”   5:'‰A2? $*.<'/BqR6D'j\  NI#Nþ)#!ÿÇüe7!3##"&'4?35#3.54>7&43!5!5!###!"w( ¹¹ \#™B>Y5+A"DQ<þJüMHiþp=oH7l&/"EH2%-9%5 B‚^HHýé¥ÿ¼Ùe(=7".5467&54;5!5!##5#"'2254+"27#!"32pW\ ,JR=#<:çþ¶ÙGG^5qCQ/Xb6VO¹þí "Š98  ” M0 0$8S)*1 6@:^HHýé}#+^<ss3¥ +9'  ÿ¬e4W#!"632'654.#"3#"'&547&546;5!5!".54632>7"'4?&#"Iþì,6!5J#9,4)8U=XK  $d˜AJçýzý(y)=B0S:J5  "U 6 2%¥ > )(&- ?#56#5j5:J;)^Hþ)4s8$:Y-@P? ?_.0ÿ´ÿiÛeIR#!"632'654&#"#"&'#"&54>7467.546;5!5!&'26ÛIþí,6!cL :-0:8U;XI  ^%A#7T  $çþ¶ÛþÉFW+A?¥ > L5  - #> $6 6"$!#PH! ?!#;)^Hý— /6!:9ÿóe.7##5'7&'"'67&#""#"'&/732=!5!!632FG£5¥DZCJ[  A2 "D!1V[‚9 G<þßþãDlý鱉)‰ J N$/0S& 5Uƒ¹',(.ŠHþŸeVTþõ+e=2>7#".5467&'&'&'".546;5!5!##"34'432#"« '*E*Q=D7 Xz:B4»þ¦èGê)ÈB+GTD6 <*?+:E $ &A>#=U^HH¥+ B008U;6$  8e#5327#"'&'5ìáá15%1D!A<HþîH Eÿóyîe+!5!47#5!#3267#"&'#"&%#327>ýcýüC¦zW&:&6j |>+B ZK1O\µ%;&03()Hþ•C;GG R`@{R*E@¾Q*"Q‹e-5#%##5#"&54?#''&/732=!5!þ¢5FGB%t¬ #D4_%1U\‚9 G<þì‹l±±ýéÑ @ ?) S%*Iu'5Uƒ¹',(.ŠHÿ4ÛZ"#&54>323###53654'.#"\H' / )R=*MMHMOJ#!$f#A,0/FN!HýéH &/D5":þ\ÛE$.#"#.54>323###5H8»K 0 !H"E/A”nIMMHMeDi"!,  32:MIHýéHÿIƒ13###53654'.#"#.547632&54632&#"}MMHMPJ# 3J,$2j P7$0 6-ÉA HýéH &.E.:&<#J&F 67 ;Pþjƒ+.#"#&54>32&54632'"3###5W8Ye+7E"I 55[Ï>4[: D $QMHMg0A)>,.!$+? l=E558 ; $F\GýèGÿ4R6#5357#"'&'76#&54676323###53654'.#"éAA>(M P#323###5¼BBN(M :%#8»K 0 !H"E/?•nJMMHM"W¢dxE"3(&YDi"!, 32;MHHýéHÿù9^%&#"3###53&54>32ì“r!/ SMHMK &@)-%+*((aÂ((-HýéH//2% '/2ÿùµh#4'&#3###53&5467632µO8¬FFSMHMKA7,06s^Y:f/O3(HýéH#(7^':J<ÿù”f#'&#"3###53&5467632”`tÞN=DSMHMK9>DS“CfI "I'HýéH)1X)óX5=2327#"'3274'4632.'#"&547&54632'4#"6*TIONF>bc  &2A- 9@UeBD9 '/;597…(O >+O"',. /UEIC1C.@+7N&1" ÿà e1!5!463!!"32?2'#"5463232>54#"".»þE»þp& þy>D!'ˆa5{w&B 3/ .!0O$HÝG5 4+j!X+tC )#FL e!5!.547#5!#"¾þB¾[P…åÔ)6T8Hý¦M84HH4(#x.:Èe!5!'%&'"'>32vþŠvRþê+bOJ+ÆSLHþtŸ9•m&'7 SCO#ÿÿLa(14632732?#"&547'7''6?&74#"6‰J-8FF\S*‚!:)D9"_/4Dª(êOEU.7V<®9,!1ù809/C4J'@96<-JCj38B4&%VAy6")9-:,,, +ÿÿK×e"46327'7''6?.74#"6eA57HF‡<þÓ(Ù€HU.6U­8. 1ý0880D4j QŸ7^HH¥ #v# L / h>-þ=ÿ²ÿ„½''%|þæ-Gm»8ÓÿKÿþk#53/"#'&54>32QQE #*(:+.)*+ I< & #T*;I4* ÿ“úe37".547.543!5!5!#!"632'674''7&#"pw%1:<-@,:þŠú=þÂ9*@!>?&R9A<‰:-4€;0(@c3;7M <^HH¥ 9!B-WO+::(‹,€"ÿ&Kÿîk&54>32&'"Y 1#*4 #*(KsI, : & #T*þ!ÿ.ÿå#'#73^{ŠaËCÒ””Øÿã Q ###53'#532673#"&53êMGNâ8YY1+5=]BC[<+(ýéH–V™.*CTVA!, ÿùÛM '7###53À[TZpMHMâù\T\þÐýäHÿòÛ‡&547632&'"###53KX($9%0 $SVMHMâfpI1 ; % JXIýéHÿïà„'?'"#'&54>32###53àC32&'"3###53654&#"#&úeOJ= I/&4AMMHMOR= / /N)Ð0W,(( ; I>%HýéH >N+;4ÿ {1#534>32>32&'"3###53654&#"#& QQýî%K2J= H.&0AOOGMPR= / /M)¯J)(0 ,)' ; I B%HýéH@L+;4þ|Kÿút#53#'7``FKí=Ï[ßî;þ|K(t'"#'&54>32#'7(D $R9,-,7)tKí=% % IY;H5$2 þìî;þ|K*t#53/"#'&547632#'7*QQC!%S9+*%$8%qKí=³K+ $G\:B=2 þèî;þLL #53#%7'7``Z?þÓ1Õc>Ï[Þš7…Ò#þLL='"#&'#%7'7&547632=DD3:+ !?þÓ1Õc>W %%8%$ Io5Lš7…Ò#È"2 þLL=Ž#53#%7'7&54637"#/=bb…?þÓ1Õc>MK&II2 ) :+Â[Ñš7…Ò#²:B: Ca2 ÿUñˆ&54>32'"###53'73‚Y 0$,C!%TMHM=á=ðYhsH + ;$H]KýéHâ:þäÿ,š!###53%7'7&547632&'"#&'ÛMHMBþñ1Öd>F '$:$5 $R9*(ýéHŽ7„Ñ#®1 ; % IY5.cþLP£"%#53'"3###53%7'7&54>7633'PRPI4 LMGM3þÛ1Õc>L$%@‡'¬Lm CAVHýéH–7„Ò#±1þÅ5ÿ7æeI##"327#'#7.547#'"'.'732=!5!#3>;5!5!æxÏ)4+?8^/BGb³^{‹`È4=.¢#D/[,13"BZ9 G<þì±U­N2”þ“,¶J'-E#S)bÓ““Õ&2P1%*Bq15;)Y#‚',(.ŠHH=5LmHÿDòˆ #53/"3###53'73'&54>32òPPD $P%MHM3è=÷+-,8(ÉI, $ HZHýéHé:þÝ9I4%1 _g14>325#!5!53##5"&'46?&/"'"#".#&(]\#9,01Mþƒ}âNGÉ p%×?$ */$| 9:óHGýèái8/oI D!21 ÿ Še<'3#5346;5!5!##3>32#".573254#""&È»WESSþ31Áþ>Š€û !& +'+#9=!4lRB$3=Wk'q H6y¿!ÍBO# `IIª.3 I 4M'6MQ7.OS@p"…ÿ#8e '346;5!5!##"327#"'&p ºV«g6—þ‹8zÔ)5,@7_3DV{jMN¼!ÍMmpIIºL(0I#V*tGGÿe*'33254'7#"'.5476;5!5!##"M ºVV(2&ˆ96LxSkE102FŽþ¡lÞ$ À!Í%;#j7'1*iR^F]4B52}IIÆ#ÿce5'346;5!5!##32?2#".573254#""&» ºW{1Áþ>cYû+R5+#9=!3mQC$3?Wj&q H6yÀ!Í"!`IIª;5I 4M'6MQ7.PS@p"…ÿe*3'34>;5!5!##"&'4632#"'&>74#"Ÿ ºVêA+˜þmØ)2YM>4#5 #:<hSR>&2.Â"Î7@,hII²>.?i%/5A-% )B)93ÿðÛe37267!5!!632'>54&#"#5'7.547672'&#"Ó"Hþ­Ûþ¿8H6ZwC!Q/4FGþò-…5?+-DJ')?¼*HH­NX<]|/h0!+tþþ¤´9TY6@01 N  #&9ÿzúe(E%5#"&54>32&'"32675!#'326#".5732=#5!##5'l4A;L"3(6K)<þ²'! 6V4&Œ+n,8bD7" ; .-×úGGþõ,Ò1,D8(9 E4 ɘ* 4=':H"(?NKB$","-ŠHHýé'³9ÿe##5'%##"'&54735#5!ÿGGè, !45'9‰ÿý韓8¬'þô456šHÿÉ?e*"327!;'.547#5!##5'%#".54ê8,)Sxþì,JK)Ë,*D?FGõ-"sO/<)B'#N$&-I! R!&HHýéc 8»C 8&:ÿ4{e>#53#'#7.'73254#""&546;5!5!##327>32{PPL/1 µ^{‹_É-]E91ˆW@oK6t%¼þI{|ö' *%*6MÇ0E&Ö““Ø :GG0.&zLm"ƒ8'^HH¥;2 Hÿá]e!%747#5!#327675!5!##5'7#"&!75ŒC¦aW%;&88-þ0]FGõ,Ä603N $ úC;GGQ4+8ÃHHýé{ 7~A ÿ7te(G"327.54>75!"327654&#"%.547#5!##'#7.54-(1"xW6þø"C !Ï,6þç)8"Mt| fK`³^{‰aÃ@Y* .o3+('* pO7¬a9A@]49HHm (|ZAÔ““Ð`LJÿì¯e$%'-32654/5!5!5!####"'&5 õ-"þC „= **ý߯GGŽ# :(†`¡8ºëY´!0>7 qHHýãd(6./Ú?ÿz»e.@72674#"#"&546;5!5!##5'7/"'46327675##"3237632å)L#K,p#½þÚ»FG-½] ‡`+.9N—!)'Ü`>ÁåE:'%S6+3Š.^HHý鎦9Î !z+N?.PX"‚ 0Û¥K ÿÍ—e0%'-6323275!5!##5#"'#"'&'7232654&#"õ,!þhG+FU!$ý÷—FH 2 bG56'2/V(469/3n¡9¹Ü$IMíHHýéßIX&9/=,/H ÿ7,e%##"327#'#7&'.5476;5!5!,xÏ"-,@6^0AFb²^{Š`ÆN=4,/?“þ”,¶1/.G!S)aÓ““Ô 8]6A8>mHÿ9e*#'#73"3254'7#"'.5476;5!5!#ì^{Š`ÉEr%0':2†75ItQgF000EŠþªhÇ““ØK?",C!f6'0(hO]E^1A12yHHÁÿ-Ve<#'#737#".'73254'"#"&546;5!5!##32>72K^{Š`ÊCš'3.2hOA#1ˆW@oB6t%¼þIVWö'>,Ó””ر(?& 5JO6.&zLmƒ8%^HH¥% Dÿ- e+4#'#734>;5!5!##".547632#"'&>74#" ]{ŠaÊDþÚ?*•þ¥ kÑ(2UM)$1ObPgPQ6(1-Ó””Øÿ5@-fHH­=,=g 17E5CNJKM#:31Re%'%####"&=#5!26=#Âõ-"GG}P325#!5!3XNGþï+bOJ+Æ,ˆMþŠvâýéМ9•m&'7 SëH)ÿä…e36%2>75#53##7'7#".'3254&#"37".5463275)+8=eóGGô,Â894cA(*-Ÿ6*B:-= U9G[Â-þ+Å 8(ÓHHýé}Ÿ8|.DF x*5-/C&#0=aCA ÿ…èe'46;5!5!##"34'432#''%".)B4»þ¦èGê)ÈB+2_ õ,Xz:-=U^HH¥+ B00V< 9§&A>ÿÜg=%5#"&54>7.54632#54'"#"6;"3275#53##5' d//GM   -3K)-EH&9*5"ÁB$Fo^ìFHñ-Ê ?N3   U(2FI&#"P DRoôHHýés8ÿÿ,e%'-463!5!5!####"&šõ,!þDþb,GGÜhŸ 8¹l&‰HHýéGV sÿÀàe%%'32##5'%#"&54632&#"?!5!¡7+"ìFGñ-V,EcZB G9! ­ þ­àÚs*7UýéXž8¹1f=Ga M} H ÿÕ<e+4&'463235#53##5'%5##"&546;54&#" J20"´eóFHò+´ ^ '0Â,380¬ÊHHýél8¶Ia o —.,ÿîúe$5#46;5#5!##5'%5##"&lÉ• (\úFHñ-É_SÊÊ. ÊHHý醞9¶/OnÿÉe-32>75#22654'#5!##5'%5#"&þ=6 >) ¹'Õ)57€FIô-!:P^~Á/W+   à+t,"6$HHýéc 8º 3vÿçÿþ¨e#"'&''7&'732=!5!#\I6 %†18<Ç,Ë–9 G<þì¨L1A8¢58Mˆ8„Õ',(.ŠHHe(".54632675!5!##5'75'4?&'"p4$JN9`KX@CDþ GG”-Á/^ A 1*+H:=(Ac3E]FAxHHýéµc9{Rp)!.+ÿþ’eG4#"6&'&547''6?.54632632'>54&#"'67&'"8.$1mL.=HV-6UA58GF] 57#4 )% 6),Y84(+ò++(þ}3PS?+ $)9,*089/D4G )% ; " #+R ' ;&= $i%.327'"&'5#535!##"327#"'&'#>;5p<+>"ÇjJf)ø,wÐ*165G^1ARzgL6' uÇG,”>#-)Ðþ¿U@äGG¶A/I.1T)rF2B!|Ó-;ng+2327'"&'5#5%!##"32654'7#"'&'6;5p;,<$ÇjJf) hÙ%0';2DA75JuQiD)' †Á1`Š="/)Ñþ¿U@ãHGÁ@",C!258$1)hP[D(@{ÍVzÿ7$h6#>;5327'"&'5#535!##"327##'#7.'øuÇG,”þ ;,<$ÇjJf)ø,wÐ(4,@4]2A!S) µ^{Š`ÉPv(!Ó-( b@^O4^s`1HGO-? ÿ‰Ee/574>7&43!5!5!#!"!###"&=.5#2)DQ<þJEGþ( xGH=)+7B%4/53H #::Œ5 B‚^HH¥=þrG*04)‹0"-P11FT?‡…"ÿh9eB&54763!5!5!#!"632#5'47&#"&547632635&#".54mEHþT9Fþ -AA]†G;@4K3{%%+0.""BZU/;$/).*jE;^HH¥/!þvîX#.D+OS0' =1FY0¾V=ÿ‰Ee<74>7&43!5!5!#!"!#5#"&5432&#"32675#.)DQ<þJEGþ( UH"93m=1”/"-P01FT?.le #'".547&=#5'lÊ  (:FM; .jç VL   * 5:f,D‹ON‹ ÿ‰Ee1"&'4?!3.54>7&43!5!5!#!"!#5\rõþñBr%53H DQ<þJEGþ( xGŒ& ?( u/"Uw1FT?5 B‚^HH¥=þr÷B? ÿee5!3##"&'4>?5#3.54>7&43!5!5!#!"w( ¹¹ \  $™Bl+52H!DQ<þJþp=oH7l &/"Pu1CP>5 B‚^HH¥ÿóNe277'7#"&=#5!#×>5ü.Ï Kf6œ;;WO’TbU@´HH±"/ÿòŠe:#53%#5346;5!5!##32>32#".573254#""&³SS×SSþ31Áþ>Š€û+=,+":=!4lRB$3?Xj%q H6yOîO# `IIª;5 I 4L(6MQ7.PS@p"…ÿÿÿæe'^€ÿß]ÿÿÿÙôe'^Ì9Jÿÿÿ#8e'o8 $ÿe.#53'33264'7#"'.5476;5!5!##"USSø ºVV(2&FB96LxSkE102FŽþ¡lÞ$ Oþÿ!Í%;#3n'1*iR^F]4B52}IIÆ#ÿce:#53'346;5!5!##32>72#".57254#""&³SS ºW{2Áþ>cYû+?,+"9="4lRB$3>Wj'q H6yOþÿ!Í"!`IIª;5I 4M'6MQ7.NS@p"…ÿe.7#53'34>;5!5!##"&'4632#"'&>74#"”SS ºVêA+˜þmØ)2YM>4$6 #9=hSR>&2.2Oß"Î7@,hII²>.?i%/5A-% (= LLP);31ÿÿÿ%ôe'o© çÿÿþÙæe'oEÿ¿æÿ Še >#53'3#5346;5!5!##32>72#".573254#""&³SSú ºW`SSþ31Áþ>Š€û+=.+":=!4lRB$3@Xi%q H6yOÿ!ÍBO# `IIª;5I 3L(6MQ7.PS@p"…ÿ$i )2327''3%"&'5#535!##"327#"'&'#>;5p<+>"Ç@ ºWþ­Jf)ø,wÐ*165G^1ARzgL6' uÇG,”>#-)ÐýY!ͺU@äGG¶A/I.1T)rF2B!|Ó-;nÿg /8327''3%"&'5#5%!##"32654'7#"'&'676;5p;,<$Ç@ ºWþ­Jf) hÙ%0';2DA75JuQiD)' †Á .GŠ="/)ÑýZ!͹U@ãHGÁ@",C!258$1)hP[D(@{Í1zþèEe39'3%4>7&5463!5!5!#!"!###"&=3.5#2÷ »Wþ¶D'*<þJEGþ( xGH=)+7Br%53H #::ø Í×5 BA"^HH¥=þrG*04)‹/"Vv1FT?‡…"þèEe7'3'"&'4?!3.54>7&5463!5!5!#!"!#5÷ »WrõþñBr%53H D'*<þJEGþ( xGŒ& ø Í3?( u/"Uw1FT?5 BA#^HH¥=þr÷B? þè9eE'3&5463!5!5!#!"632#5'47&#"&547632635&#".54÷ »WþúE HþT9Fþ -AA]†G;@4N3{%%+0.""BZU/;$/).*jø ÍNE;$^HH¥/!þvîX#.K+OS0' =1FY0¾V=þèEe?'3%4>7&43!5!5!#!"!#5#"&54;#"'"32675#3.÷ »Wþ¶DQ<þJEGþ( UH"93m=1”/"Uw1FT?1e$7#537"&=#5!#632&#"#5'3275#ÓeeKf)ÔGD/43G.¨;,78Ö.cCU@´HH’>L &/þÙð"˜"//Ó&e%7#53!5!32654.'5!##"&'&5»eeþ,Ôþ „=   “# :(Eq0cœHœY´!$%# H(6./ln?ÿôÿÌLç)4>32&#"3!##"'73274&#'7&E!89!m5ÿ÷Èå#73267#"&547.54632&#";#"u2:!8{‚7p‰S7#".'#732654+732k 69 j.wv21M* 8³!*K–Å9NO,?!eDh1&>!S'%+"'>74.'32>5"#".54632632&#"ï51k?Y"'    .8&UD(Q:/3l(1 -PF5ƒ(@XY'"%._"I1M^*:<(QPEÿöÿÓ7ã5"&/73>54&#"#"'532>7'&#"7637632—&   3*,937#"327.!/:*ž7B}$pp¼-H(UD9$UUkÂì)7"&54637654&#"#&54632&#7>7ôiŠ-C8^)3-_2W?ZPTI%"F2*3q SaQ  G$/3*1A\=EQ4>`BÿýÿøÄ%'7267'.547&547654';#"ó-•ŠR:Df`g~Z!H4|{JGMGoC KAB(5OK  ! )QJ&ÿþGÝm'463!##".%&#"7>^E;™ ]J >;$BXL&ÚARR.5C7'&''7&{>Jb&8\%¤U%;<Ž|Y%OF L)*- NמI_$7= : 7G(#3 gl:6$ %+-Fÿø4Þ726=33#'&54>32&'"Ø.9lrqoY<±!56+-6G†>/¡STC^Ë7P* It ‡ÿúö&74354.'.54>323#"&ìV(#-,%PK"4FA!@uih6L@Ç_<" /9--+‰C>a;&TB:U++0 HIÛ4&#"56323##"&543x '5"|ih;+5-`>*!V qeU#(:%_¹Ø%%267#"&=46;265&+732"&#"4w UXq— ]!(AW‘8Dx(  "(\2d8{Y';RT=~ ÿà­Ý %#574632&#"32>7#"'&­ÉÉþV†j)0$31315(]GGºQ)h’ O $G16K$ U JMÿúÿßà$"&54>32&#>546;&#"Ûa€.0  e2PMY2KU!—tFf3 K )<*¶X^ƒkj$³)}]†£74632&+3267#".nY+, 53(W UU4=,òPaM.9i+`= -OÿÓ’ì/#.'&+'32>7'&'767+.54>32’m`5f~638.– '1#P 1%(:I;G)%HE*6Tb g5(U S 9'#A (? >2.:'K,ŸÔ%"&5754+73'3267'Nn-€T|-%9Oà,^5®Ræ‹#›"'-²ÿÿÿÕØÜ&23##;#"/#73265.+5å%0"j‡6bà- %D»/,Ü 5%+NH_R0›R.!!(Rÿúÿµë&632&#";#"&".5467767€»70&:[/$ÙçIc«W~@$i;nU+/3Cb‰ Q@$GPþ*DF$%DK=H \ÿîÿqìù34323#32?672'#"54>7654&#"#&¼dW†ÍtIFB ,?GLEÕ6Fn",>;\#xG.K&)!K%;( 3 ]0}‹2>%&!#$ÿØÊ‹".547#'!#"327<$DD2 v³ÊK@L\( +G.i1SSL4 2KVÿý²ß27'75.''4>¶)C& GþÛMÖ 5= );ß,>I3#Z±KuCq +5&U -+ÿüÿ¥ðç7265'.54323265'.5467%&'&#"\5+4 B"+53§n¦88/1(:'Lo+#,1/ WqK>c?,$ D.–3 y     1<+f8$%= CE\ÿíÿË"õ4632'%''7"&7"3654@cOPn[Îþ¹N4ÅÍBµQ²$> Iy5GLç4&#"5632#"'7326 '%'9BG 18D_-Ý~BS&F<7þœ; 0H V $><#¼n3N8®wRcÿŒÀï$7"767'63.547.54>32&#";¿I‚+MPþr*œ ^MS<%>>!d-*,‡H|Ù?9 DeºU:C2A)8%$5 S6?Nÿÿÿ´Òß +3267'7.'#732>54+732k 69 p‡þ¦)t+X 8³% K–Å9NV,?!`4 S”S) D>S :SLÿìÿèŸß'46327#"'767''74&#"327#"H9A…wÁ4Ò;(\ 6qPx-$ld5FYS ªF´'-6Ls,>/ì/ÝP*? ÿ‘Âø+77>7'7&'4637654&##&54632&#sE3*4o þŽ)•¹-C8^)3-_2W?75 SJ%"±4>T×FMŒ  G#03 )1A!?,EPÿ•Ç/';#"3267'7&=47.547654'y8|{JG5,—þ…4sƒ`+<~Z(0(s$QJ&Hf¼E5)aA)H(J %ÿþÿ²Ý'463!##"& '%'.#"76[H;™ ^JdXÞþ9¹Ð%!X'&6ñ@PM-5BX}‹Jo,"H#ÿæ”Û27'7'7654&+7h9gvþ±5É“ +Û,/ŠO2Už[Hgy Rÿùÿ˜ì326=33##"'4632&#"'%il/8lnmm]ß\I+-+N¬þX8á(z5)–ISQYÖTf Jþ™P‹ÿúÿ»ü'+74354&'.54>323##"&'%ìV4',.OC1PR+6?+ih7'&>+ë;%Î_;' .:->z ,“?Lp9?*:U),/ewEp ÿ°Jè23##"&54354&#"56'%fE6ih;-5,` #1 ß9è88fU#'9&^9)!V þ-eF]ÿîÿÕ‹Ü87265&+532632'74.#"+;#"./#5œ$1V¾2H 3",>>BÝ;Á.I2dQ n¼ (5ð( RR/-HO>š]i<; ;J]R ™RÿúÿÈ 72#"&54626546;#"#"'47&546;#";#" !'H9$a( {^ðEBNŸW85”*(Õ.&`)%t^ð:IŸW);&#"3674&+'32654&+5322­%,#'§9[2! .LK( ,D?D~'XZ&%bŸ1B> †›%!)#ý+5&DEa/Z;Lþ©@L$+T' QJ5h !GUÿèÿ´ÝÐ @2#"&5464+532#"&54632#4'&#"3267'&+'32ž!!#þáG`Ÿ0A9^ˆÖ¸’”ÙnLS^&HF*9%7H 3XVGÐ,&,$-þg?QJ59FcFVdPCj€¼`þG¹:EM!?,þ¸ #,& ,RÿÞÿÌ?çH&5432&"72#"&'73265&'#"&'73254''7&54>32.#"K”R?&r&<Ü ~W½1n8$@$0bþß[fi=r Mc*^Sñ˜E @0f B`3,@aM "Ge&Œ&R+#M. E=R9;*=BW16I33#'P=,ÿøÿÌ.ç+%2654&''7'7"&54>32&#"%2#"&'71>2RAbþúÀZ74.#"326?#"&UC,X?3êchº  i) *B`'"  * FX>M^(:=*Âý÷¡ž  „*%ZYY2)&  _dÿìÿ0®óF265#"&'>74.#"327"&54>3273#".53OgˆŸ ! .7?X8ZL A.H91Ëq*O‹VO{J/hzˆpXJ™ b   F:0DUU@ I @F+-(9;)¾þ>'SM1)?TQ*aŽÿìÿèŸß'46327#"'767''74&#"327#"H9A…wÁ4Ò;(\ 6qPx-$ld5FYS ªF´'-6Ls,>/ì/ÝP*? ÿïÿÓ„ã@%2>54''7&#"#"'532>7'.#"763>32653#"'5µ"-HŸ*"K9;T*=."3 5-.<'„$6;'&-t'F!B-%,%4="†9Š"6]HKV'&;.@BRW„ H 8 Cy#CA( R ÿþÿFì<"&5467654'#"&54>7654&#"763"267#"3267ñzkbfg &Šy'{m3PIB765.#"76;#3272>54.##l+e#HYA=1?(µXk"A?[8M3H2:@%Uk:-"b5šNn5/3' †97! *D=2D@A1(5 8%i! Q8 'P:1''3JO  Æ   "!ÿòÿGçÿ4BO4>32&#"#"'#".5463&'67&5463&2654.'3254&'&'"I 74a>6SiˆÀ2gJ$ lÅ1PP*Fh4]&  uH! ¢HK.)^"6Qd\C0U>).¢'I)g**  c(; ,,,< 2F)9»" 4%ç!,@  #ÿüÿFôP".5467&'73767'.'"#&'7632&#"#"'+.'732654#"ô*L@ 211o2MU .=?$†n?€+51=4cJ3-#"H3 ' bUO  :"%  #BQ1J#,ÿüÿFòJ4#"#"'7>72.#"32#"32?&5432#"&54325&'&'7326…S 5¢ (M2s ^hnhZ& OQIHL=9KGöi…ÕdGf0n4[D0_  L* ?() #,,!(  RAyPC{  BH1ÿùÿLÜè37&54>367'.#3327&54;'&'#'˜™,*=#6&f)TD 4ÿJÃó6%'+.5467"&54>32&+;#"7674&5472¡ NZ<'$ ^y((=*S:m08 ƒ,˜’ *B$ I#'A7y'ˆ gTK:*-* S; I=#"D S)ÿçÿHÚèO73267".54?654;7632#'&/#"&5467#".467327"Ê&+*i .4'ˆQ%# k'rL:J N-%5B W' >Co1YV +5%<.;*O ,, =#1I(G) )*(' Q(9,N2"+>1d+HNGN7< 8LI <54-<>ÿóÿ@\é4%&'#"&547327.54?65&/33274632NB')Q1\ŽaˆN?2L>w *HG*…g6e(A€Qp &2U›,4~T) Ñ„yYn5645=JS!C.q( (:D;27ÿ÷ÿc5ñ0"3%2#"'#'&'732>7'&''7'7&54632&5l% /Çbzb›‡iHCT[219 )]Sjö ±NKX.`ŸE 'XT2GL{3@* ,$s0W3b@*BJÿéÿÕÅÜ0%4#";!"/#53265&+7!2632#"'532kp(!/gK Êþè- (Uõ/;jÚ7Y/4 97!K>#?«…++[R0—R,$LR:?!1`BNU O ÿÛÿÕeÜ=3632&'#327#".'#;!"&/#53265&+7ü2;(@$tJr/PK@!  !)(2&N3iN Êþé(Tô/<kÚÜ?)Nu/Ð  E 8&([  R—R,$LRÿ2œý,%2#73267'.+532654&+5>;8GDPšNþÐSZV-"ž¡".1:g.u cp 6ûI4)CzG9[;(U%&V H?! 2ÿ²…­77>7'7.5467&+€9E&9 þ¯,¢3 iV043ò41 Z¨S= $C*Q]M.ÿêÿÂ[$.%2>5#"&467''7&54>32#67>54#"’(c>xjGT<,XÖ.°m?M-WtlR@--Ð(Ž")P#/9@{`;pJ 9fZ;.=*5H<$C1 K+O- :"6ÿøÿb#ÿ+"327#"&547&54672.#"#5'7.¸¢?.2v•ƒ4^n=WTD39Bôhµ7å <ªÊLz™>*65N ‡ë«b\Q ÿðÿs†õA%#"&546354#"327#"&54>7"&56732&#";233#5#>61'0-˜%;= A"$C‚ª!B.8¬ 17)@[%E' ‡oo‡$!7")2$”4L'Wv6++ ,`J*$! J&ýù–$ ÿòÿkoO472&#"#32327653#'#"&546;254+27#".54>3.jªd 68 '#$TV,83#@;.mm]1Mb3L_FRg`= "0X[C*+;3®UJ G*& !2( (ýùi$]I#,*YG^oH'=fA7]4*ÿíÿI" <2654&#"'&/#67#"&54?''7&54>32E% =!B= Hp]Î’15L?ARpƨÍBµd%M36P%c$%2.!'Ö -6$1K#4P6I!,B U>_+M6YT.9@ $)!0&ÿëÿÂ3 &84'37>'2#%'7"&54>327#"&''%oP :1YZq  ¿þí×.°WAMfIKc{iD,%BUŽ"D9+ $“I<  ^BfZ;D'*5þƒ&-ŠnL<7PT¡ÿþÿGÙ÷>2#"'54>7"'4>54'76323463236gr˜Kò)@.<ø=WW=jP"P'0ZJ;UU;F,I.u=7654.#"#&½eUƒmmËtHFA!+?HLEÖ XG$ÐýøÞ±Ju+ˆ*!;U U'ÿóÿ¥Uç8265'.543253#53265'.5467%&'&#"R5+4 A"+53¦q¥6oo:G+5 9'Ll,!-1/ YqJ@a=,$ D.–3 Ëýùà  1;+f 9&%= CG\ÿåÿË„õ !"365446323#5'%''7"&é%> IÿdMQlZÎllþºN3ÄÍA³M¯+!6.H69CLç4&#"5632#"'7326#5'%3'9BG 18D_-Ý~BS&F<7n÷;2m0H V $><#¼n3N8þßOSRIqÿøÿŒ#ï)7"7673#5'63&'&547.54>32&#";·J‚+KQmmþr*œ ]''S<&=?!c,*,ˆJ|Ù?: C7ýùlºU: !2A)8%$5 S6?Nÿöÿ´5ß%#5'7.'#732654+532+326735nþ§)u"0%7²")K”Æ9N!69q…m(p”S)7$S&8SM@+>`2 Eÿ÷ÿ‘'ø/77>73#5'7&'4637654&##&54632&#jE3*&z ooþŽ)•º-D8^)4-`1W@66 TJ##±5;&ýù×FM G#03*1A!?,FOÿ÷ÿ•+/+;#"32673#5'7&=47.547654'o5|{JG5+•npþ‡3q‚_+;} X(0(s*QJ&F%ýù~¼E5)aA)F*I  %ÿõÿª@ß #%&#"7>%463!53#5'%5##"&FW&& þñ[H:nnþ‚:¸™!]LcYâNH# APfýú[ŠI¹!33CUÿûÿÕûÜ273#5'7'54+7^8fxooþ°6Ê,Ü,.‹N1ýù±žZIfzRÿ˜ì!326=3353#5'%5##"'4632&#"ƒ/32353#5'%5#"&äT3&)3 0PC1PS+5?.immë;%h8L=Éd;' M>?z ,’>Lo9?+:°ýø_xEpg),-ÿ°°è"2353#5'%5##"&54354&#"56]E6iooÞ:i;-4,_ #2è88fÍýø>eF]j#&8'^9* V ÿæÿÕíÜ=7265&+5326323#7'7.#"+;#"/#5’%1U¾3!"K;9lnÛ; % 2cQ n½/ (4ð'!RR ,ID ýù¿˜]i 0  ;J] R0™Rÿþÿ­èß77>73#5'7.467&+w:C'9 mmþ°-£SKiU134í41 0ýù~©S>Vž_ M+ÿàÿ¿ 932654#"#5#"&'7>7''7"&54>32#76732673ÜGP#/<ðn;d,DU BXÖ/±W?M-WthR7 +,Ï(< nC-:",þP&'>5#(<9fZ;D'*5H^,M6YT.;?/F!( H$4 ý·$%3/!'.6%'.ÿãÿ–+8%3275%'7"&54632#53#5#"&''%74'37>IIJc|þìÖ-¯XfTXs  ¿mm›bDUŽ!C@Q :6‰%-ŠBfZ;E&3=J;  Âýøaq=6PT¡§9+%ÿ*Ñÿðò432&#"#.Ö $&3:((zx : "(e&4EþLÿ@#'#73^{‹`ÊDÀ““ÖÿßÿÇ3ä?73267'3265'.'"&5754+7367&'>72&#"#"'’&,8Oß$S@)LMA-ÛRi-)05nZA*(DX\ƒ '1`AÝ!7Ð-.³é6A;+#†^5­Ræ%(@K XC!")8 =;$ˆÿãÿÇä873267'"&5754+73>54&#"76323267#"&'•-%8PàLRi- {F)92@*M#A?&54&#"763232767'Í72&32>5'.'%32767'eX;O\')77¥]{‹`»™89Pj-'24nZ?,'ôRA11FH-þÚ2 ;.Ò¦D "(:'@( Ä““Èo^5®Rå "(AKXþú6A2%(#§ÿÏõ-4&#"76323267#'#7.54>)*92?-I$@?%;TT;h0d8[B©^{Š`º$?:!=WX=o a :'-70':G%Z7 É““È*G.*= "ÿóÿ[Tç3#.''#"&563232>7'.'&543253To$¢*@D5EW*»\L] 0LT6  * Dk"=ö* $n S$$ 9‡Z3…,2I4    @…Tÿþÿø,73265'.'&=472&#"#'#7&'&'X k1:N Kz(=Õ<4.Bd^Š#/ 8>$§]{‹`¸OD:H1' "'7[< +!)4,E)Ç““Æ ,&ÿþÿõ 3%2654&'"4672&#"#'#7.5467&5)OFhITlp^@-(FWFSS7":@%§^{Ša¹2N, [47*:.#4;'6CFCL[C G5/H*Æ““Å$0+AS%ÿâ1#'#7.54>54#"7633274>32Ý^{Ša¹3M- >XY>l4A/Kvc=XW=>/ 2${fEí““Å&2..@ !2gS90:)$.9)+`-< þGþ¸ÿð67''73'&'77>54'"þæ XRƒB–V¬8T<;JC4IV)96(› iŠ=xÐ)' 'L; ' þ<þÖÿ¤ÿ³2654+'767+&'7þÚ1E= 9&%/,-BhM`A,0å)8 ;0-8=95þ1þÁÿ·4>324.'#;65'.þ1CQ-=mF*L+_80/; B# [/+0Ì1>.E94JN/ > 4þTþÕÿçÿÕ267#".5432#"þ­2>#q ,v6=Y-™D¦™*N ,-t(þqš#¤ 4632#"&#3Y'"!#2^þö‘e#)%±þ`š¬"#324&5432&!05QþÚ‘[ƒ*a'0"D m j Pþ^š!¬"#324&5432&2"4!!05PþÙ’Yƒ*Za'0"D m j P8 *TþV™=° 2#"&546'7#%7#')1—qe•[þØNš0&&%¥˜#þé¯Eþ[˜¹"#%7'7>;)!<[þØN­rd/"Gm1p¯E˜˜#6&LþX˜!¹ 4632#"&7"#%7'7>;="..""*W#A&<01^-u&"°-+*"Ø-Y<¨þK”®&'#".533275432&#"{4 524^\—$#?$%”*!-^D}‡ 6b2*#þK”®&'#".533275432&#"{4 524^\—$#?$%”*!-^D}‡ 6b2*#ÿЩÔ%!5!Ôûü©^ÿòíÆ72#".5464&#"326„.;& . @p %()2Æ>+- & /;j2)<'"©Ã%!5!Ãþ=©^ÿöÿ5B 62#"&5464>32&#"3%#"/732654&#'7"&'"#'$,#9;#n 9Ckkggi"I0Lg:&*32'"É+2Ÿ>;Êg¢ýä)1"V>ŒUÿõÿkJû <2#"&546#34&#"5632#".54'7326h&,($*hhþã9CL->u9  .Q22" WB'9<*'1+ø1N X 9  :)<.! " ?Lÿ÷ÿJ9 32#"&546'32673#5#"&547.54632&#";#"‡)1)"62;"<}pqz;qU=nYe/*/‹L~}K')%"3'!Ì ;@ýìk-[JA*:':HV8@Qÿöÿ!F ?2#"&5462#"&5463265'.'&=472&#"#"&' ( 5,ƒ"%-$þj j2:N My'>Ö:6/Bc=Pb/.LN*<¥)P( # "%)ê.)!+þòG2& #'7\<')45N';<ÿöÿlBñ 82#"&54#"';2673#5#".'#73267'&/#732I>' &$L#:7k .upqx6$>)$8· *¦Ë9P)" 1—0D fC9ýìq1*3 U#  TNÿõÿ4Yü <J2#"&546'47"&54>;#";#"27#"'4672#".32654.#"ƒ( '$5fX#G'! ‰J<#I&)œˆ?žTAM).S\‰PyQp!#!(=*" 1(!ÉG/D3"5 T5#X.Y~’Og;=v pV]Q@3'0ÿðÿ´‹ø 972#"&54627+.5467'."32>5#".546ˆ(')",$1gE-¨LÁ #>*49*#y<(, /:(WB*)1*¶7'.#"763632„1 '$5Xu%' C 66% ".4*+ ;;W*@.&6 6.-A%6AB"'" 1'"ÙG#?6jHf0YWE8F&7_JMW&(>-@FSX‡*ÿôÿFaü +2#"&546353###"&'7327'.#"'6Ž&1($**gyjopi{M*r )P‚ N-L"=+*&!2+'lQ·ýì#_S:[ /—&0;[ÿÚ 12#"&5464&#"7633267#".54>œ)205ª+:2B-Ko^.c9wX*NK->YZ>R+&!(&#È dQ8-:2'XE*\&>)Q7+>""ÿþÿõ -:2#"&5464672&#"#".5467&52>54&'"©' %,,4o_@-(FV FSR7-KM)@b8# X77¯24HfJTW)2))ÇAMZD F57O($4/AR'þ»3:'7Cÿþÿ ø 22#"&546'3265'.'&=472&#"#"'&'³'0'$*: j2:N Lz'=Õ<4/Ad^Š#/.LN*jU9Q)$#2+ÝG2&!"'7‘\=+!)45N'7$ÿâ 52#"&5467 54>54#"7633274>32¤(!$)"5xþú>XY>l2C/Kvc,BMB,>/'%{Hcb*31'!9Á.@ !3 gS8)7(.9(7 `#8ÿóÿdÿ (82#"&54%#3%#"'53674&#""76"&533267c>& '$-poþ§E_$H1#&(M,$ %%j“sM=(Xt`*" 1n`P 99!Oc*7RýÔ…e<þÃAW \ ÿüÿ:üö (2#"&5467".54763753##"327Œ" "#($%;F5$=:RÆpq¡8E™ 7  115 1T5S7:‹ýìSG:{Xÿ÷ÿd4 92#"&546#3267#.546367654&#"#&54632'"v)"$'$-Üpoþº; +{.qˆ.EO235-a3YA]PVJ6%D *11 )þuGb##aR! 7,)5 +2C_?GR:ÿ#Î 22#"&546";27#"&547"&54632&#";’11!+6M#,$ LJB[€gŠN=&ž!QK"$ˆ*11 )ÏESqýíO+5G>ÿþÿ˜èí *72#".546#3".=4+7323767W')  +°rpõ+E&&[<%# (CI&)>' " (MþO$,! ´T-0¶!  Y ÿ÷ÿ4C ?2#"&5464>32&#"3%2#"'#'&'7;>7'&''7&d&')"* 553b!>9>& 6Ìg|fŠkKCWb" ._þ÷ ¶Q>*)1*Ó,  J( 'ZU.HO~„5A"'59eÿïÿ•ø 172#"&546726=3353##'&54>32&#"|&()"*z/:osopr +M0<·!77,.9I#)(1)tB/¤T”ýì* $0(Ð9S) Lu‹ÿðÿ¡ˆ 9%2#"&5462373##+&56354.'".54>311'$5(8@,joqh(dU'%8().%R M#6GC1"'%"2(!Ù A*:³ýì   k\=" 48K/ˆ,”A?c<'ÿ“·÷ (72#"&5464&#"5632353#5##"&543O' )",B"&=kpqj;.8+b!)" 1*6, X rjÑýíì$ &;&`ÿøÿ‹+î 972#"&546#3267#".=46;2654+532"&#"N& )"*þqpþÓ4wW\:PA. `+EX”9G|& ",)" 1)Aþ}3f9 ,P3';TU>€ ÿôÿWÙó +2#"&546265&+7!2;!"./#5>)'/4Ô.>làIeV;KÏþã'W*-'(!-%NT\D&H!] U šTÿùÿNõ 12#"&546%#3#572>7#".54632&#"[(,54ÛpopÎΣ6*7E9'„s*1"5342#)>(#$'!þ×Rà W&9a32&'3654r)"$'$6rNgs %! 2QV~ ?+" )2(X*11'" VHþŠm"45V]_8Šl+QO1 R ^6E`¥òÿýÿköñ (2#"&546#3267#".54672&#}& )"*špoþÿ([ VYA\,kX4.*55)" 1)þœ+b?+GD%Q_N,;lÿõÿwK :72#"&546#3"27+.54>32#.'&+'32>74&R2165poþh+'1(;L5/<fX§ z%0< V <*91ÿúÿŸì%73267'2#"&5467"&5754+7353#5²4:QäJ()'$5¯Un.ƒ pqVÙ(".·þ§*<)2&" `6²Tëëýí™$ÿÒÿpMñ 332#"&54>2353###;#"/#7326=4&+5''!* %å&1#mop‹ S=•ç. 'F¿1, ”*..  ñ 7&-¬ýì5a T1ŸU,!*Uÿûÿ# A2#"&5467"&547&54;.'"".=7654&#";27s& "$65Ì‹£–¤ O+@-.Oy#=WV8(C$5YB?L cIxMON34"%&"w†3$SP %@H6Q  !%.B;)8R7\(ÿúþæ ÷)'%"5632#"'53254"&533267 þ¶>ˆþè$!0NS#G0"&%NShpK<(YqþôWùvQgH88#Md^þ,ƒc3þË@T Y ÿöþå5þ)1"&533267"5632#"'53254.#5'%3ópqK;(Zf1"!0LU %>'!&%N #*pþù=Do(…`3þÌ?V YÓQiG+0$Md "þÞWÌöþ¿þâÿùÿö#"&##"&5463267 +W t5#//  E<Y]=&%( fþ`þÿwÿá'27#".'./&54676;53#";þñ(  ()  % œ,³5#¯ú   "! *( 4`' ,þTþÂÿ‚ÿé326=3#"&5432#þ…V-!;-6BkR$<Ÿ$K4)š™5Di/EÿöZ#".'6532=35!5!## D*#.)ÌþgdŠA›V  B %M¥ãAAýÀþ1þÿ|ÿà".'#"54632353'32=û!/  <¯1Bœ (Gþ2*)3xã.@ª*H4þ@þ‘ÿxÿß#"&'>753"&#"32>72ˆF.&4qN-(ZA;%\+þä?J)&9-8\T!1þ>þÿuÿá$#".54232>54&#"#"5432327‹ LL?.S(d$).H3+)0C@,-=,<$% 2!: $ kþ[þ‰ÿ“ÿë5654&#"&54>353ò&8 i<=20=32Ñ=O >"$  5þÉnY)!RR$6Oþ³þêÿ¹ÿÙ #".'3s,VjHµ.2tIvþ¿þŠÿûÿö#"&##"&54632675! f r5"0- ƒ8 4/H N9$ ( Gþ”;;þBþeÿ°ÿé #&'5327%326=3#"&5432#PcSVbfRZ\þÕW,#;O2CjR&þŒ%$2)(·(B4)‚†LAi/D  þgþdÿÕÿé #".'5327'"&547332>2+iY$G%fQZ]«3P 2$! þ‹' 8)(Wf+)MP0/'&þ˜þzÿäÿã#"&'35!q?’#9-.òL©-˜X&9Ý66þ¿þ5ÿûÿö$5!5!2#"&##"&5463267þÃ8þÄ8v  q5"0- þ¡11l00Á13 N9$ ( GþRþ2ÿ»ÿü!5!5!326=3#"&5432#þVeþ—eþÎM6!;P1HeR&þ¢11p11nJ2+dhLBo$E  Ë@ "#".54632#"54654'&§/A! "HQRG'!!#6' J:/TR1/*G$1ϺX 4632#"&10% !$%% 1(00ÿôþ晣 *3Y327#"'#"54?654'&#"#".54632327"'7&'&54675!5!!5>54&#"ˆcOT]cQP_>  (_ @JKAþÂXZT]^«ZM>>|^þÙ¥þÂ_|2%,(zBMl**=! 9""£3 # L.3,KJûê" 8##ö1aN’’AA’‘O0G) @45Jfq?45ÿóú5X 4632"&#+5;+,00!H k@``‰YYE$!&00ýûFAAÿùÿ@ý™ =G[#"'5327'4&##3263>7%4>32!!#"&/47#5!.#"%"&547332>53@kL[]cVX^8Z,kaA±6Fþ€zajJ"þ &=kFTv8Bþ¿LEt'L4ަOG^v7R/ ÞBUI-$3 V˜((A('ú7[î5ËÒ!WYA%EO9&5ZW2AZn"Dk65 в†$Ajn+=5KX=I<.' BWÿùþ«ý™ &GQe#"'53275#"'5327'4&##3263>7%4>32!!#"&/47#5!.#"%"&5473326534iYP\cUX^lLY]cUX^,Z,kaA±6Fþ€zajJ"þ &=kFTv8Bþ¿LEt'L4ަOG^v7R/ ÞBU&%)MVþÒ''A('V((A('ú7[î5ËÒ!WYA%EO9&5ZW2AZn"Dk65 в†$Ajn+=5KX=&8 ?F BWÿùµ AL"&5473326534&#"#326!2"'"!!#"#53267{BUI-+KWþBY- +Z=v_6Fþ@Cßq\=Z5%Wþ¢MFu'L5µ“D„ ##$Žz0ÌX=I<@E CVýÕ8[g‡5 41*H8*AXo#Dk64 !AA;8:QÿÿÿøÿŹ'"§aÿÿÿùÿÊü&"ªfÿÿÿ÷ÿÇ›'"­cÿÿÿúÿï¼'"‹ÿÿÿøÿ '"Ÿ+ÿÿÿùÿÍ‚'"±i ÿÿÿúÿý'"ħ ÿÿÿòÿÓ“'"•o ÿÿÿöÿÀ¡'" \ ÿÿÿ÷ÿú›'"Á–ÿÿÿùÿЛ'"£lÿÿÿúÿ¿‘'"­[ÿÿÿúÿðŠ'"¦Œÿÿÿøÿë¥'"ª‡ÿÿÿöˆ'"º¢ÿÿÿôÿ¾ƒ'"Zÿÿÿ÷š'"§¡ÿÿÿ÷ÿÞ}'"¨zÿÿÿ÷ÿ©z'"¤Eÿÿÿù¡'"²ÜÿÿÿúÿØí'"¢tÿÿÿúÿ÷x'"§“ÿÿÿùÿý‚'"¬©ÿÿÿùªÿÿÿöÿ¼t'"ÇX!ÿÿÿùh'"/ ÷ÿù# T62#"&5426?5;#####"&54>=&'#"&54>54'4&+532676·&6+;@‡»ž@cAN/7 '$+$BJ;&  &8\>]p%ú "3[9'ÔAþºFýÀi JE>&:*C$ ‹&WI]7/$;" 2#"&'67&'###535463235#&œ98F5̈^(8U?C¤K$>! c/nÖ“wu@}}kc52 |-{© %òL:c„Aó8'!f# 'bpLT[gnýÀ@A:ƒg*P5¢œ³ÿöÿÁ«¥ B62#"&543567&'#5!4&#"#4>323####"32>2#"&8&}-{©þM“wZÆ2JC*@"C.am¯¯@_|˜:¤K$>! X:pÔ+%/œ³þ|T[gnAf>H$?<$gƒ:AýÀ@ó8V!f# *_pÿÿÿùÿ@ã™'&É&@"¾zÿÿÿùþ«ã™''¶&@"¾zÿÿÿöÿÁ§¡'(Š&?"µ]ÿÿÿùÿúhÕ')M&÷",–ÿÿÿùÿÞßµ'"¾zÿÿÿÿùÿähÕ'+&÷",€ÿùSX X4632"&26?5;+#+##"&54>=&'#"&54>54'4&+532676O00!H þD6+;pW‰TTJ@ W/AN/7 '$+$BJ;&  &8\>]$!&00¯ "3[9'ÔAþºFýÀi JE>&:*C$ ‹&WI]7/$;" %1 %œ,³5% ¯þŽ''Z''W  ", %(E#(þ¿þKÿ÷ÿ÷#"&##"&5463267'7 D< r53/!¬4£5 @./1P4& Vþk‚þ_þBÿþÿû32=3#"&5432'7þŒN3?:O3>gJ'Dr4¯5p?M|{D9X-= þµ‹þaþ60ÿü''7'327#".'.546;53#";03‘5°?  *  1#,"œ,³5"¯þLuW    +"J#)Lÿ&†Ù%3#"'53232=#3.XMG @þvXe…Tüº58Q;1jý±ÙÛÜ%#####5354632&#"354632&#"ÛWS†SFFA: :†A: : Dþ8Èþ8ÈDY8?E5RY8?E5R „Ü####53546;#.#";„SŒSFFA:³EK:Œ ýôÈþ8ÈDY8?f5R‹Ü####53546325&#"3‹SSFFA:M@:Ùý'Èþ8ÈDY8?G5RDÜ+#5&#"3######5354632&#"3546323DS*:ÍSzSySFFA: :yA: OÙi"5RýôÈþ8Èþ8ÈDY8?E5RY8??Ü")######5354632&#"35463235&#"?SuSySFFA: :yA:.):Ùý'Èþ8Èþ8ÈDY8?E5RY8?͆5RÿéðÜ&#327#"&5#5353##5354632&#"ðV'14GGSïSFFA: : Dþ™F+(ŒDýôÈDY8?E5Aÿö«èO3273#5#"&5##5#"&5332>75#".=3;.54>;#"{10_XPWOAQVT) !!ARX$*,: w9B-=3!!!32=3#5#".5#"#5#"&'332>7u+3+-,Qþ¯/=ŠWO:k$9% µ6**T) !!AQX$*,: ´6&@&$þûBÕDG«aþ³JU'!1Ü%&+9þO8G6™þ-+2*Aÿ8Ñè@4.54>3!632#4&'"##"#5#"&'332>7u+3+-,>]dOX49*-X¶6**T) !!AQX$*,: ´6&@&$þãGhaþ·I?>"H3þl%&+9þO8G6™þ-+2*Aÿ8ÌÌ4<3273#5#"&5#3#".=332>=#"&54>;%;5#"œ10_XPWOAQ\V®=_6I%Xn*-’eX%O;êþ–C=’’€ þˆ0%‡FýôS]F4Dý¼8 E;C.¸¸~"H3ÂO;,-À2hAÿ8§èF4.54>;3253#5#".5'###"#5#"&'332>7u+3+-,ïï+@ŠXO9l1D$–Xž6**T) !!AQX$*,: ´6&@&$Üþ¾BF«"ýóJV%D7-àý}l%&+9þO8G6™þ-+2*ÿÿ:“‘X&Æ­ÿ5”2- 273#"&'3–J GRC@OG*ÛRIPPI%-ÿÿ8•WX'°ÿÚ%X%>53+533"4fW,?L:ꥋZNT<vþŠ3R0! L :@X##=47'3>7538¹Á}þrAZW¸ÀzFVW¿“{±p"zGžx±þ)qA––&X#!5!ÆWý·ó ýô LL?4X #.'!53:{lWAZþ WXamþ†tQ: Lý¨wþ‰9ÿÿþX4&#!5!2#!5!265§|Tþb¤x©¨yþ\žWysBWL…Yœ[ƒLVC%í!#467>=!53!öW$C;6 ýaWŸ>MWS`12!/ Há•™1P+7.H?5X 2!4&#!‹˜ý Ÿo]þ„Xƒ[þ†Xýô+7^þ@%éX #.'!5î{mWAZþ>Xamþ†tQ: L#uX4&#!#525#5!2#[Pþux–<ýoŒWtESþ¿gdLzFL}aþ†2ÅÚ!5353þÏF FFÏÏÿÿ<ÐÇ&¹Öÿÿ<ÐÇ&ºÖÿÿ<ÐÇ'´Ôÿ&¹Öÿÿ<ÐÇ&º&Ö´Ôÿÿÿ:ÿ}FX&°½ÿÿ:ÿFX&±½ÿÿ:FX'´ÿôÿm½ÿÿ:6X&¾´õÿÿ±X&¿´µÿÿ&X&À´ÿÿ?:X&Á´1ÿÿ ÈX&Â3´ÿ-ÿÿ (X&ôÿ)ÿÿ=:X&Å´5ÿÿ×X&ÆF´ÿ'@ÿÿ&ÿ8ÚX&Ç´ùÿÿ9X&È´ùÿÿ%!í&É´ýHÿÿ0:X&Ë´Cÿÿ3FX&Í´ÿuÿÿ=9X&δ/ÿÿ9ÿ8 X&дMEÿÿ?X&Ñ´ZFÿÿ3X&Ó´žÀÿÿ>ÿ8&X&Ô´)ÿÿ%ïX&´Õÿÿ<ÐX'´ÔÿžÖÿÿ#{X&×´‘ÿÿ>•Û&²Âÿÿ:6Û&·0¾ÿÿ9Û&È·ÿÿ?Û&Ñ·8HFí#53>=3>Q;”fþhWå):W¿D‚'ÒD©•þ»Z9–ÿÁq #4&#"34632354>#3 r]NVYD-:/8**H**HH!þP°¯íGS_\;A2)1''4,&-$'<þÀSu°¯þQ o¨°7#3353!!#5#3&$uâ$ tmþ“&âoA}…}/ ÿf€  !#5##3&'5!3#'353€þëi Lkg%QpÀæpB-'d#www m~%E!fþlC)þpkÿþ 5!# F(ê ? þÿþæH5&'535&'5333#5'5e#Be Eæ]`;`]!e¤#8¢!;W¢7¤X¡¡\ÿf\ '2!#5##5##3&'5%3#&'353'353\þòlaV!K1: g&P d—¾P'j f¼pB,& b#ww[w3D m~'C\þ‚~O aþpllC)þpjÿe ƒ#3!!!!!‹OA~þ‚"L`~þ‚#Il~#YC("T b&'Ip%{|*##5##33533!#3!!{Ñ   !yJ  dyZÑý‰þ£e%%h]þ£|]1  uH  kq fÊp|t-…'.'5!3#&'53w   fq g(S!tœ  !]¼[þ©WQ!ÿeSž"673#&'!!567!#3!5'5!È&F aþð&Nþôbþú&E[u b/'Nþôiþç&EV&N eækXæ´ 35##335&'5!3673#&'#Ë=k 6=X ;8)B\8øu 8nN6p)Lþóaúÿdò­:75&'535&'5333#5&'5!5&'535&'5333#5'5e#Be Eæ]`]`]! Eq'>e!Dæ]`[`]!e{¤#8¢!;V¢ R¤X   <¤&5¢":W¢ R¤X  \Ý %!#3!!!#3!!Ýþ¬#H\TüFWhþ˜[ ahþ˜õ#S cU &`g&ÿí?÷5!#'7"%7"''4™ i'þ¾þð/å¾;`þñÙ aþ€€d¾<_þð¿¿þð- #&'#'#&'5o(O&i%pp%#T eþQ bþllþ"GÿþÔ #'5!#3!!Ô 8&u ýM K€þ€ê 1þkþö R&Ô>7%37"''4¬9þþ)-—¼¾6eþïê@ªòXŒ$>¾þñ/ Jñ%##5##533533533##4¤ ;£0*X£X¤Z¡¡ ;p Dd22å^`_`^!!C O…&'3!#3!!¸UX©'.—Ýþ54#%%hÌþ4‚Ë7éN¤ÿP“%¡4)|r-…†€7&'5!.'5!.'5!–g/Wˆ•$"!W†þì4W‰Ïd%(% % (& Ë3 ((‚ Cý7%3¬Vþþ)-—õéòÿXŒ$t|3!!!#$hËþ5ƒÊþ6% &|t-…†.%!#'#&'5o%oq(S!hþƒ}kkþƒ}S  ¨%73#&'!#3k _þn&E `§tþôj&N hÿepK'#3%#3#3#3#3µl(& €»j '& Ù9P(& ~â[/(& âf#(&|p'W‡™l*Wˆþ;\W‡\W@X †2j-X …ÿd—Å%.:%'.'5!>7'67'67&'7"&#!567i>Ü þ)2#W …þD.ƒô‘ 0ÇtRü”ó‰,¶-"þ© ¶Ð1  (&}Ãó›,› é þwTñÂ.'%v› ''7237'"#'677›{z|W£UWX \— X|„}z|W^!¢TX— ^V}   7#3!!! `€þ€&  h'&ÿd !7#3!!!!!#5&'53‹N^~þ‚X d~þ‚#Il~OW"$@åaUg'Xj'&Iq%5Mmm$6ÿff8"!#3.'5%&''foý£X!k %   RŸer)x&P iþ?X%r— %   ýÕ—b iþi˜s'Lþhÿdò{:A%#5'535&'535&'5333#5&'535&'535&'5333'5!ò]!ee'>e!Dæ]`[`þô]! Ee#Be Eæ]`]`—X‡cX  \¤&5¢":W¢ R¤X   <¤#8¢!;W¢ R¤O‰(&|,ÿþ9 #&'5!9S'Y êDþtŒC##&'#'#&'57#3%!o(O&i%pp%#T! Z‘ýo eþQ bþllþ"G  a(c,,#'#&'5%##5##33533o%oq(S!`Ñ !y ! ! byZÑhþƒ}kkþƒ}S Žu    iq f`, &'5%#'##3!!%3ÂS!Y%or'U bþþòVþþ(.—}S Sþƒ}kkþƒ i'þßêòÿUŽ$ÿþ—|5!#73!!!# ^(¯$mËþ5ƒÊþ6L#&êSþýx-…†.N&ÿþ< 7%3'5!#¬Vþþ)-—^'õéòÿXŒ$õQþ  #'#&'5%3#33'co%pq'VœUþþ),–[dûû)iþƒ}kkþƒ}T þíéòÿX‹%„l)) Ø,&.##5#!!!!#333533%3ØÒR!z& W€þ€lZ€þ€&E`z\ÒüÝVþþ'/—”R#u%  _&uc'&N iq hþËêóÿQ“$„%'#%3737&'5%#'#ÙUë—Vþþ)-—ë),–xT!n%or'óéëéòÿXŒâX‹%ŠT fþƒ}kkþƒ˜,"#'#&'57#3!!#33'o%oq(S! `€þ€!ÆZúú&hþƒ}kkþƒ}S  h' ýûa)%^!'#5##335&'5!373ÈUó8'=k 6=X ;8ó),–éäúøu 8nN6péX‹% C,'!!!!!#3!#3373#/Bþ‚;.W€þ€l'C€þ€&E d~ûàZPï*,––VíR&”:9_&u'J'&N kþM aë[‰$êß&õ|",33#7##5!#&#5'5'#&'5$lááƒßßP!&ç ;4(V9l'p$L$'Q|w.…†.S%í=/þVUføøk‡%Hþ‚~%DÁ #&'#'#&'5#33' O(O&i%pp%#TZdúú! %GþQ bþllþ"Gþfl( .#'#&'57#3!!o%oq(S! `€þ€"hþƒ}kkþƒ}S  h'!ÿgÆ…'#'#&'5#33#3#3Æo&oq'VþÛN_úúZ_úú#Ilúiþƒ}kkþƒ}T ýØN)h'\h&&Iq%ÿBò†#+5!#3#'#'33##33%3å c'þH c  l<^úúRkúýáVþþ(.—êWþj&o(ég'ýÉT#}%:éòÿUŽ%#ÿþ™ 5!#%3%5!#Œ ^'þëVþý%1–ý¡^'êSþŒéòÿL—%÷Qþ.!.#/#'&'57!!#7#'73#'53!!p%oq(R"l~þ‚V ¦ bôô%ï a~þ‚!, xjííllííSÑL< GH¶F" ¶€ 5!#&%3!!!#¨_'&ý $hËþ5ƒÊþ6L!&ðTþ%×r-„†/N#ÿþì %'#-373%5!#UVè9Vþþ(.9è%1—ý ^(ñéééóþUŽãL—%ùSþ¯|%33#7##Vþþ%1–ýT$iááƒßß50&4êóÿN–$Hs.…†.73€!'#%373337##zVè9Vþþ'/9è++–,%jààƒÞÞ . &1êêêòÿQ“äZŠ#Or/„†0 . Y %75337&'5!#5#%5!#&#5'5# ^ö#T $L%ö¾ o(O@l&p¡ê ef"G%Hþ‚ðúeþQPføøkÿ϶L(3'7##%3%#'5!0$háá yßß !  &ºVþþ(.ºþá]'u Lr/… |/ !  $éòÿUŽÖOþkÿCé‡#,%#5#/'73533'33###'33#„”VöJ#I cJö(.”]úú)ý>jùùQ ^ùùvvéß&IkìUŽs e()f}%R%[ég(³ %#5#%3533'#'5!N¹Vþþ(.¹]úú&þ~]'u }véòÿUŽr e(&#OþkÿAÏ…$-#5'#375'5!3#'#'33#33##]'ö!J Zöt ‰f  l:_úú‰iúúQîOþá Uawk”l&p(éh'þk}%T#0&#7#5'#5&'57'##335&'5! äíp%oq(R"þtM]tX bM(®jííllííS®W fZNXZÿgÀ…!#33#3#35!#N_úúZ_úú#Ilú* c'"N)h'\h&&Iq% WþG87#37373#'#/# `’ð*,9è'/––Vè9Vð’!µ hé[‰äQ“#êêêá ÿŠ  "7#333'5!#5#'%3'# `÷%nÞu ^'ÜO!&÷8 yÜÞC h(vkSþQ$,0 | ÿAÄ…##'5!7#'#'33##33]'u ‰f  l;_úúNjúîOþk”l'p(éh'ýÉN)}%ÿþû &/5!#5##5##335335%5!#î ^'Ñ% !z  !\z ^Ñü  ^(êSþÍ$   t   frjkSþà%'#-373%#3!!wVè9Vþþ(.9è%1—þ `€þ€!ñéééóþUŽãL—%â h' û #5'#5&'53!!!!#p%oq(R"_þ 7l~þ‚V xjííllííS…G (L<ÿǪB 3#7##%3%3>$láá yßßO!&’Vþþ)-’ÖUþþ),–Bu.… |/Q$.éòÿXŒ&éòÿX‹%ÿþ»}#,4333##'##333#%5!#%3ô$AÙÙ‚ƒÙÚc&J% &$hL̓JLõ ^'Vþý%1–}C-…‡.e(%!|t´† #SþŒéòÿL—%ÿù&Ò,1:@KT]c5!#5##5##7##33533533&7#35#35#35&'#35#'35#35# ^'§TLV!Ú %   &%nÝ]I]_üøƒÚÝÏ^¥¦Jl§¥76l¦{!- Þ^JKJlKI!- lLJ7°Rý¸M<Q=º &   |w¸DKDþÍ… †F5¶L(DLu# ¹F5·Lœ# þ‘L( ÿùÒ',5;FMS[c5!#5##5##5##33733733&7#35#37#3'&'#35#'35#35#%%3 ^(¦TLV Ú"M&%nÝ^I^_üøƒÚÝÏ^¥¦Jl¦¥76l¦ {!- Þ@.JKI#lKIZlLJ 1%ÕVþþ%1—°Rý¸M<Q=º"[|w¸EKEþÍ… †F5¶L(DLu# ¹)"4™Lœ=þ€L ¡éòÿL—%ÿÍçI*%%3'5!#%33#7#aVþý%1– ,E(úVþþ%1–û$ 6ááƒßßg&õéòÿN–$õ.=þŒéòÿL—%V;.„†/i$ÿÿÿþžW&7'#'7373'#'737375!#ô8—%8¨¨%—cd8–&8¨¨#&–c; Q!&‹ƒƒƒˆ6K6K7ƒƒƒ‰'Y€0P(Nþÿÿÿþ’W,7'#'7373'#'7373%#'#&'5ô8—%8¨¨%—cd8–&8¨¨#&–c<o%oq'=8‹ƒƒƒˆ6K6K7ƒƒƒ‰'Y€0PD hþƒ}kkþƒ}<0Gñ8!7537373#'#/#5##3J `’ð+*8è'/——Vè8Uð’!JJO Qp hé]‡äQ“#êêêá UuY Jí27-37373#'#'##5##533533533##ïVþþ)-Gè),8è%1——Vç9Uèþ¤?£&4 T£W¤]¡¡ ;ñêóþTäX‹ãL—%éééézJe&?çZa]aa!!DàÞ '7"¾þð/ ¾ b.þðÿþ 5!# _(êTþ'.'5!3#&'53w$  fq g(M'tœ$!]¼[þ©WM! Cý7%3¬Vþþ)-—õéòÿXŒ$ÿþ â 7'73'73y<¶¶il>¶¶ kuy€*Hty€,Fÿþ«ô5!#673#&'!#3Ñ _'Û&EYþnO[êTþ&Nþó gY bKÿêøj 732654'7#".547&'767¥Q/0I]SIâ89{R;Z2Ä!D;J(¿:AF7y€CvîH‘]Zu)AI%—Ÿ!4>/B9ÿìIX>H3267&54>73326?3&'#"&5463237#"'#"&54>73#"326”8  _= ^) ?*$`n>O‚ %$1"*<6J _fH*96®P0D 81V ÚþòRNkPE@>KF",,SP/=?4þç#%7IÿìºX 23254&#"3267#"&54?#"&54632>?3Ÿ)-&,$R&>)OQ/>rIM+>(.! Z4< ))!±%5`?OX0 hZ$x 6FG6=@2 ·þÊZ7íX3#’[X^Xý¨7ÿì²X"&54?'#3673327ñ@_i?BZXZ .kZ5MPQUU(xxFYþ?X7?6XþÊhZæ þÊ6ÿöb,%32>7#"&54654#"#>32&#"632-$ L@d <)`AVU6S(-6H.- & ,W ¤%/GH>þÏRP-C'þ÷ nT$,KA:<F6FOÿèOp "32654&4632#"&cFsT=FsTþ¯«qaƒ«qaƒ¢`R€¢`R€þò“Õ¦z“Õ¦0b##"&#"'>32327Ì]¬$2XB .P 2v5Xý¨õ F#0ÿìöl'#"&547>54&#"'63232654&COdiSejJ;#"*;2KZI^~9:.69RrdSOqtWK\7),)/€J<;~>E'=E'=32326?26“-¸KQbGY"(%1  > % =%&#-¾CMTPQX[N2t¹Z  þz#/<?ÿìX)332?3&'#"&5463237#"&54>73#"326É+&>%^) ?*$`n>O‚ 0L1Y _’fH*96´"4)ÑþòRNkPE@>KL(WL0D 81þã#%7:ÿì’l*423267#"&54654&'#767&5463>54#"ÇEQ „$)-XYWKT,/# _!1I:71lH7.HQA &d‚ ’¤TI-+2W¾Èm>7N-G¿ 1)9ÿìTX)%3267#"&547"&54>73326?3L-&,$R&>)OQ$dD _= Z4 %5`?OX0 hZ*n)TO0D 81V,µþÊZ=ÿì!l=GO'632?6323267#"&54?#"546?654&#"3267>54#"—FO40X9N==x‚l4[¢*(þÁ/ )!2P2íX"3>327#"&5473326?3#7&#"2 #5#X-092D_5$ZX_)1*"5NG-4‘ Q:9FA.I!ý¨CPt5ÿñ°g'3267#"&54654.#"#>32Ø+$$)2R %A*A^(!<?_F+D+OTÂ@£9$7i‚2B]7)[Z3¨#"›þŽ&FC(^9ÿì©X732654&#"#3632#"&5P,D+2)_,Z0-E%dYBqžX>K8V1·-GH!c…ZAFÿìl,4#"'>3232>7# 54>7>¾u_ ]%H2ul\S > 1Q=$\ ¤þÿ+FB$SN¾UG(+R_BX +6 # Â*@$ =9ÿöX1363232>7#"&54654#"##"&54733267&["%,W -$ L@d <)^<#52D ^=XæF6F%/GH>þÏRP-Cþê‰*TO$29)V*OÿìçX0732>767#"&5467&5733254./3#"'©J7" N&QM_u"*BZS: _ZD3C¶0@',THvX3M'MZs6%"!)Œ-c7Iÿì b$/73267#"&54>7&54632&'7>54&#"¢C9@UT…WZ! #H;6/,B:9F)²/=„lžpP(D!2V:HŒ,.. 8Ç "+.+ÿìÎl%2.#"#"'73254.546# 8"83#.CB.}P‚TB2K‰.AB.Il 2'#?25L.K[_9>U847K(9fNÿì¯X73267#"&5473§-&,$R&>)OQ/Z4 %5`?OX0 hZ$xþÊZ8ÿñÊl 4.#"32$4632!'267#"l,"/D6.SþïlTBT,þþRK +>[a'49;87A¼u&ShOþµUPO0ÿö&l063263232>7#"&54654#"#654&#"0+mOQ)",W -$ L@d <# -Z4-& úrhZF6F%/GH>þÏRP-Cÿ6Z(%5#3Âl 632#7&"#>327654&#"Š+mOQ/Z$T"_ #5#O* -& úrhZ$xþò“1Pt5NG-(MZ(%5#D´l&#"32673#7#".54632hK,D+2)_,Z0-E%dYBqºX>K8VþÏ·-GH!c…ZANÿì©X'%3267#"'#"&54733267473¡-&,$R&>)U)+QOQ/Z4-&# /Z4 %5`?OX0 <3232>7#"&54654#"#7>54&#"#654&#"0+mOQ)"9# L,W -$ L@d <#Z!# -Z4-& úrhZ-F6F%/GH>þÏRP-C $Ȫ "!ÿ6Z(%5#ÿÿrÿèrpj#ÿÿ7ÿìÚlz Jÿì l'.#"3"3267#"&5467&54632” +4+343@OE=9WQ6`;T€6"2wO?mÜ%'27].5?–U+c`@g_@a-GAJG41ÿöËX%%32>7#"&54654#"##7!!632Í-$ L@d <*`R•üþù&,W ¤%/GH>þÏRP-C'þ÷RR‹F6Fÿÿnÿêjd#Aÿñøl!,"&54>54&4632#"'3267>54&#"Yz$A-DSF&S>39[Tz‡,fV%73“5&2^)  '?S:[O +<9[ _´!5&ÔþòK[X.% P`^F#VM0D 81.ÿè p632#"&'732654&#"qRdaƒ«q=eS,JFsT=<4X¦z“ÕF=1Z¢`R€<Oÿè,p%#"&54632&#"327éRdaƒ«q=eS,JFsT=<4@X¦z“ÕF=1Z¢`R€<NÿìéX"&547332>73=žQ/Z4-& 7&'7'6_ I0B[R S_'N5'"MØ B.3,=ˆp$dJ¥Dž†yT>,>[N@+  0*°ˆyu€`Hd97šP%'>54'#"54632'&'32š©J >‹@eqÃ%=!Zg$Væ<5|P0$¿¹¨•T>e'7ÿµR'6?&CD5ª5-TÃ6¢‡þºS Yœ_fþT‚ yj7йP 4632&'#"%&'327•$¡5 (VE~/%E,-8pÃþÕI 1SKX3JP7 mP>32&''67''67&'7>Ž 2î*4H =* %;–;yV%'°,JugT•þT~AI0 (7³k‡O)#ºF5›7³R.547#"&54732>7M-9/=1CC':L#9 (H+% 1,RTyX_‡\5'(/#2=*,  '3OW7U“P267#"."'>32Â*Y1cn!A'%1N .'Š(2%0‹o<É‘>I>6ÿþP'#"&'7632.'&'&'67'>\=][…Y3 CÀ<+ #4'p&?¦'Xî3_'ªEaBÙŽ öþ#b0S65 Ì?$Öee_¥m) «7ÿ=ao-%&''7#52672>54'7#"&547¶ -&82/&0".#Æ@ƒ[:0 (L`}>GTΉ|Ä4î6tb725#-þ€ÃÇ=7$1E;¦±˜aZM«‚^-Uþ–Ÿ5;7 Ke "&54632654'7'67&''7&0Qr6“fua 3S7+.Eq2n lN  fŠh$$.(¨>=[=ýö7ÿ8½©"&54732>767'67¬2CF%5?,G;3IÛ*1º8JÔ.)>@(/' ,!*ÙýÖT:Ó›%7ÿ»¡ 7"&54>732632'>54#"Ÿ-;Xmf 5›‰c?G$%#3mB4)¢ºÕ= bþÐà 0#_!( F 7ÿ8ð¦.547376?'>'´3JN'?CJ3?:B74ë‡.3_‡:?&3©0&NP&@8´š "“ýÜSÖK^7ÿ8JÅ2'54#"#"54326æ,8é*Ü-&BŒ1$@&ˆ7-Ëþß"¸.7$EŠM7ÿä dB2>7.'#"54>7#"5467'632>’S.‘”@`• 9#5%"84 ~0" !"  $4:A({>3 *")»$˜'/;¤_W_(bV\…$%4H &! *# %I$‹%„ ,$ 7R?P 2#"&543254&#"€pOK;5M6-O."-PD57#".'&'76--%5 ] (/<"l/Ï'5 1LPKK19WDQ [JþÓ/g -ed7ÿ8 ¥",52.'#"&54632>4#"%"327&Ì$³V_M+*1>TiE#+Y,=RX/M07& %þê híýèA7]C¥/!=þÞuÄc";V38¸(-$ 5•š -' PŽ 3ßLXu 'x7ÿåP 462&#"6"3277–>B‚M/ApC1~!±—þÈ€m É} 7kÏ^>53#"&54747.1:6#1@,Ly6W37©W?:X.kH$ /KsID7ÿ8]'654#"'67632]1-(_DÇ3ÏÔ,Q•r-D64=EþP<ÖÜ2Ç7#ê¬ 7>77%)!5!+&7WËL HþýØ[7ŽP2'67654'"#"'732<.$    v XTP+# 0 - 6 7©…P9>32'>7#"54>7&#"#"'732632” LL6fŒ* &0 O8, & Y " Y V$.™ $ go 5  ,  $   5 0 7öÜZ>3267.#"7z$+)"h4WN,?‡98!!$&)“M*g(P+7#‹¬ 7>7'>7Ø&(!5"*%Ô%)!5!+&7XËL GþýØ\WËL HþýØ[7#,¬ %>7'>7'>7y%)!5$($Ô&(!5"*%Ô%)!5!+&7TÍ K QþòÆYXËL GþýØ\WËL HþýØ[7Í­ 2#"&546}!/*#-)­,".,! .ùn)À 9`$ÿÎ&ÿì*ÿì-ÿì2ÿì4ÿì6ÿö7ÿÎ9ÿÎ:ÿÎ;ÿÎ<ÿÎ=ÿÎDÿØIÿØJÿØMÿâPÿØQÿØSÿØUÿØVÿÎWÿØXÿØYÿÄZÿÄ[ÿÎ\ÿÄ]ÿØ‚ÿ΃ÿ΄ÿÎ…ÿΆÿΈÿΉÿì”ÿì•ÿì–ÿì—ÿì˜ÿìšÿìŸÿ΢ÿØ£ÿؤÿØ¥ÿئÿاÿبÿسÿØ»ÿؼÿؽÿؾÿØ¿ÿÄÁÿÄÂÿÎÃÿØÅÿØÈÿìÊÿìÌÿìÎÿìÞÿìàÿìáÿØâÿìãÿØäÿìåÿØÿØÿØ ÿØÿìÿìÿìÿìÿØÿöÿÎ ÿö!ÿÎ"ÿö#ÿÎ$ÿÎ%ÿØ&ÿÎ+ÿØ-ÿØ/ÿØ3ÿØ8ÿÎ9ÿÄ:ÿÎ;ÿÎ<ÿØ=ÿÎ>ÿØ?ÿÎ@ÿØ2ÿØ ÿØ ;ÿØ QÿØ Zÿö [ÿÎ \ÿö ]ÿÎ dÿÎ eÿØ fÿÎ gÿØ èÿÎ éÿÄÙÿØÚÿØÛÿØÜÿØÝÿØ$ÿì$ÿÎ$ÿì$&ÿØ$*ÿØ$,ÿØ$2ÿØ$4ÿØ$6ÿâ$7ÿØ$9ÿÄ$:ÿÄ$;ÿö$<ÿÄ$=ÿö$Dÿì$Fÿö$Gÿû$Hÿì$Iÿâ$Jÿì$Pÿâ$Qÿâ$Rÿñ$Sÿì$Tÿû$Uÿâ$Vÿì$Wÿâ$Xÿç$Yÿâ$Zÿâ$\ÿâ$]ÿâ$mÿÎ$}ÿØ$‰ÿØ$ŽÿØ$ÿØ$ÿØ$‘ÿØ$”ÿØ$•ÿØ$–ÿØ$—ÿØ$˜ÿØ$šÿØ$ŸÿÄ$¢ÿì$£ÿì$¤ÿì$¥ÿì$¦ÿì$§ÿì$¨ÿì$©ÿö$ªÿì$«ÿì$¬ÿì$­ÿì$²ÿì$³ÿâ$´ÿñ$µÿñ$¶ÿñ$·ÿñ$¸ÿñ$ºÿñ$»ÿç$¼ÿç$½ÿç$¾ÿç$¿ÿâ$Áÿâ$Ãÿì$Åÿì$Çÿì$ÈÿØ$ÊÿØ$Ëÿö$ÌÿØ$ÎÿØ$Ïÿö$Ñÿû$Õÿì$×ÿì$Ûÿì$ÞÿØ$àÿØ$áÿì$âÿØ$ãÿì$äÿØ$åÿì$ÿâ$ÿâ$ ÿâ$ÿØ$ÿñ$ÿØ$ÿñ$ÿØ$ÿñ$ÿØ$ÿñ$ÿâ$ÿâ$ÿì$ ÿâ$!ÿì$"ÿâ$#ÿì$$ÿØ$%ÿâ$&ÿØ$+ÿç$-ÿç$/ÿç$1ÿç$3ÿç$8ÿÄ$9ÿâ$:ÿÄ$;ÿö$<ÿâ$=ÿö$>ÿâ$?ÿö$@ÿâ$ ;ÿâ$ Qÿì$ Zÿâ$ [ÿì$ \ÿâ$ ]ÿì$ dÿØ$ eÿâ$ fÿØ$ gÿâ$ èÿÄ$ éÿâ$ òÿÎ$ õÿÎ$ öÿÎ$ ÿÎ$ ÿØ$Ùÿâ$Úÿâ$Üÿâ$Ýÿâ%ÿÎ%ÿì%ÿÎ%$ÿâ%&ÿâ%*ÿâ%,ÿâ%2ÿâ%4ÿâ%6ÿì%7ÿÎ%9ÿÎ%:ÿÎ%;ÿÎ%<ÿÎ%=ÿÎ%Dÿö%Iÿö%Jÿö%Mÿì%Pÿâ%Qÿâ%Rÿû%Sÿö%Uÿì%Vÿö%Wÿö%Xÿì%Yÿâ%Zÿâ%[ÿâ%\ÿâ%]ÿâ%mÿì%}ÿì%‚ÿâ%ƒÿâ%„ÿâ%…ÿâ%†ÿâ%‡ÿâ%ˆÿâ%‰ÿâ%Žÿâ%ÿâ%ÿâ%‘ÿâ%”ÿâ%•ÿâ%–ÿâ%—ÿâ%˜ÿâ%šÿâ%ŸÿÎ%¢ÿö%£ÿö%¤ÿö%¥ÿö%¦ÿö%§ÿö%¨ÿö%³ÿâ%´ÿû%µÿû%¶ÿû%·ÿû%¸ÿû%ºÿû%»ÿì%¼ÿì%½ÿì%¾ÿì%¿ÿâ%Áÿâ%Âÿâ%Ãÿö%Äÿâ%Åÿö%Æÿâ%Çÿö%Èÿâ%Êÿâ%Ìÿâ%Îÿâ%Þÿâ%àÿâ%áÿö%âÿâ%ãÿö%äÿâ%åÿö%ÿâ%ÿâ% ÿâ%ÿâ%ÿû%ÿâ%ÿû%ÿâ%ÿû%ÿâ%ÿû%ÿì%ÿì%ÿö% ÿì%!ÿö%"ÿì%#ÿö%$ÿÎ%%ÿö%&ÿÎ%+ÿì%-ÿì%/ÿì%1ÿì%3ÿì%8ÿÎ%9ÿâ%:ÿÎ%;ÿÎ%<ÿâ%=ÿÎ%>ÿâ%?ÿÎ%@ÿâ% ;ÿâ% Qÿö% Zÿì% [ÿö% \ÿì% ]ÿö% dÿÎ% eÿö% fÿÎ% gÿö% èÿÎ% éÿâ% òÿÎ% õÿÎ% öÿÎ% ÿì% ÿì%Ùÿö%Úÿö%Üÿö%Ýÿö&ÿâ&ÿâ&$ÿØ&&ÿì&*ÿì&,ÿØ&2ÿì&4ÿì&6ÿö&7ÿØ&9ÿÎ&:ÿÎ&;ÿØ&<ÿÎ&=ÿØ&Dÿì&Iÿì&Jÿì&Mÿâ&Pÿâ&Qÿâ&Rÿû&Sÿì&Uÿì&Vÿì&Wÿì&Xÿç&Yÿö&Zÿö&[ÿâ&\ÿö&]ÿâ&}ÿì&‚ÿØ&ƒÿØ&„ÿØ&…ÿØ&†ÿØ&‡ÿØ&ˆÿØ&‰ÿì&ŽÿØ&ÿØ&ÿØ&‘ÿØ&”ÿì&•ÿì&–ÿì&—ÿì&˜ÿì&šÿì&ŸÿÎ&¢ÿì&£ÿì&¤ÿì&¥ÿì&¦ÿì&§ÿì&¨ÿì&³ÿâ&´ÿû&µÿû&¶ÿû&·ÿû&¸ÿû&ºÿû&»ÿç&¼ÿç&½ÿç&¾ÿç&¿ÿö&Áÿö&ÂÿØ&Ãÿì&ÄÿØ&Åÿì&ÆÿØ&Çÿì&Èÿì&Êÿì&Ìÿì&Îÿì&Þÿì&àÿì&áÿì&âÿì&ãÿì&äÿì&åÿì&ÿâ&ÿâ& ÿâ&ÿì&ÿû&ÿì&ÿû&ÿì&ÿû&ÿì&ÿû&ÿì&ÿö&ÿì& ÿö&!ÿì&"ÿö&#ÿì&$ÿØ&%ÿì&&ÿØ&+ÿç&-ÿç&/ÿç&1ÿç&3ÿç&8ÿÎ&9ÿö&:ÿÎ&;ÿØ&<ÿâ&=ÿØ&>ÿâ&?ÿØ&@ÿâ& ;ÿâ& Qÿì& Zÿö& [ÿì& \ÿö& ]ÿì& dÿØ& eÿì& fÿØ& gÿì& èÿÎ& éÿö& òÿØ& õÿØ& öÿØ& ÿì&Ùÿì&Úÿì&Üÿì&Ýÿì'ÿâ'ÿâ'$ÿÎ'&ÿì'*ÿì',ÿÉ'-ÿö'2ÿì'4ÿì'6ÿâ'7ÿÎ'9ÿÎ':ÿÎ';ÿÉ'<ÿÎ'=ÿÉ'Dÿç'Fÿö'Gÿû'Hÿö'Iÿö'Jÿç'Mÿö'PÿØ'QÿØ'Rÿö'Sÿç'Tÿû'UÿØ'Vÿì'Wÿö'XÿÝ'Yÿö'Zÿö'[ÿì'\ÿö']ÿØ'}ÿì'‚ÿÎ'ƒÿÎ'„ÿÎ'…ÿÎ'†ÿÎ'‡ÿÎ'ˆÿÎ'‰ÿì'ŽÿÉ'ÿÉ'ÿÉ'‘ÿÉ'”ÿì'•ÿì'–ÿì'—ÿì'˜ÿì'šÿì'ŸÿÎ'¢ÿç'£ÿç'¤ÿç'¥ÿç'¦ÿç'§ÿç'¨ÿç'©ÿö'ªÿö'«ÿö'¬ÿö'­ÿö'²ÿö'³ÿØ'´ÿö'µÿö'¶ÿö'·ÿö'¸ÿö'ºÿö'»ÿÝ'¼ÿÝ'½ÿÝ'¾ÿÝ'¿ÿö'Áÿö'ÂÿÎ'Ãÿç'ÄÿÎ'Åÿç'ÆÿÎ'Çÿç'Èÿì'Êÿì'Ëÿö'Ìÿì'Îÿì'Ïÿö'Ñÿû'Õÿö'×ÿö'Ûÿö'Þÿì'àÿì'áÿç'âÿì'ãÿç'äÿì'åÿç'ÿØ'ÿØ' ÿØ'ÿì'ÿö'ÿì'ÿö'ÿì'ÿö'ÿì'ÿö'ÿØ'ÿâ'ÿì' ÿâ'!ÿì'"ÿâ'#ÿì'$ÿÎ'%ÿö'&ÿÎ'+ÿÝ'-ÿÝ'/ÿÝ'1ÿÝ'3ÿÝ'8ÿÎ'9ÿö':ÿÎ';ÿÉ'<ÿØ'=ÿÉ'>ÿØ'?ÿÉ'@ÿØ' ;ÿØ' Qÿç' Zÿâ' [ÿì' \ÿâ' ]ÿì' dÿÎ' eÿö' fÿÎ' gÿö' èÿÎ' éÿö' òÿØ' õÿØ' öÿØ' ÿì'Ùÿö'Úÿö'Üÿö'Ýÿö($ÿâ(&ÿØ(*ÿØ(,ÿØ(-ÿì(2ÿØ(4ÿØ(6ÿÎ(7ÿì(9ÿÎ(:ÿÎ(;ÿâ(<ÿÎ(=ÿâ(Dÿâ(Fÿâ(Gÿç(Hÿâ(Iÿâ(Jÿâ(Mÿâ(PÿØ(QÿØ(RÿÝ(Sÿì(Tÿç(Uÿâ(Vÿì(Wÿâ(XÿÓ(YÿØ(ZÿØ([ÿâ(\ÿØ(]ÿØ(‚ÿâ(ƒÿâ(„ÿâ(…ÿâ(†ÿâ(‡ÿâ(ˆÿâ(‰ÿØ(ŽÿØ(ÿØ(ÿØ(‘ÿØ(”ÿØ(•ÿØ(–ÿØ(—ÿØ(˜ÿØ(šÿØ(ŸÿÎ(¢ÿâ(£ÿâ(¤ÿâ(¥ÿâ(¦ÿâ(§ÿâ(¨ÿâ(©ÿâ(ªÿâ(«ÿâ(¬ÿâ(­ÿâ(²ÿâ(³ÿØ(´ÿÝ(µÿÝ(¶ÿÝ(·ÿÝ(¸ÿÝ(ºÿÝ(»ÿÓ(¼ÿÓ(½ÿÓ(¾ÿÓ(¿ÿØ(ÁÿØ(Âÿâ(Ãÿâ(Äÿâ(Åÿâ(Æÿâ(Çÿâ(ÈÿØ(ÊÿØ(Ëÿâ(ÌÿØ(ÎÿØ(Ïÿâ(Ñÿç(Õÿâ(×ÿâ(Ûÿâ(ÞÿØ(àÿØ(áÿâ(âÿØ(ãÿâ(äÿØ(åÿâ(ÿØ(ÿØ( ÿØ(ÿØ(ÿÝ(ÿØ(ÿÝ(ÿØ(ÿÝ(ÿØ(ÿÝ(ÿâ(ÿÎ(ÿì( ÿÎ(!ÿì("ÿÎ(#ÿì($ÿì(%ÿâ(&ÿì(+ÿÓ(-ÿÓ(/ÿÓ(1ÿÓ(3ÿÓ(8ÿÎ(9ÿØ(:ÿÎ(;ÿâ(<ÿØ(=ÿâ(>ÿØ(?ÿâ(@ÿØ( ;ÿØ( Qÿì( ZÿÎ( [ÿì( \ÿÎ( ]ÿì( dÿì( eÿâ( fÿì( gÿâ( èÿÎ( éÿØ(Ùÿâ(Úÿâ(Üÿâ(Ýÿâ)ÿÄ)ÿâ)ÿÄ)$ÿØ)&ÿâ)*ÿâ),ÿØ)-ÿâ)2ÿâ)4ÿâ)6ÿØ)9ÿì):ÿì);ÿâ)<ÿì)=ÿâ)Dÿâ)Fÿâ)Gÿç)HÿØ)Iÿì)Jÿâ)Mÿì)PÿÎ)QÿÎ)RÿÝ)Sÿâ)Tÿç)UÿØ)VÿØ)Wÿì)XÿÎ)Yÿö)Zÿö)[ÿØ)\ÿö)]ÿÎ)mÿâ)}ÿÎ)‚ÿØ)ƒÿØ)„ÿØ)…ÿØ)†ÿØ)‡ÿØ)ˆÿØ)‰ÿâ)ŽÿØ)ÿØ)ÿØ)‘ÿØ)”ÿâ)•ÿâ)–ÿâ)—ÿâ)˜ÿâ)šÿâ)Ÿÿì)¢ÿâ)£ÿâ)¤ÿâ)¥ÿâ)¦ÿâ)§ÿâ)¨ÿâ)©ÿâ)ªÿØ)«ÿØ)¬ÿØ)­ÿØ)²ÿØ)³ÿÎ)´ÿÝ)µÿÝ)¶ÿÝ)·ÿÝ)¸ÿÝ)ºÿÝ)»ÿÎ)¼ÿÎ)½ÿÎ)¾ÿÎ)¿ÿö)Áÿö)ÂÿØ)Ãÿâ)ÄÿØ)Åÿâ)ÆÿØ)Çÿâ)Èÿâ)Êÿâ)Ëÿâ)Ìÿâ)Îÿâ)Ïÿâ)Ñÿç)ÕÿØ)×ÿØ)ÛÿØ)Þÿâ)àÿâ)áÿâ)âÿâ)ãÿâ)äÿâ)åÿâ)ÿÎ)ÿÎ) ÿÎ)ÿâ)ÿÝ)ÿâ)ÿÝ)ÿâ)ÿÝ)ÿâ)ÿÝ)ÿØ)ÿØ)ÿØ) ÿØ)!ÿØ)"ÿØ)#ÿØ)%ÿì)+ÿÎ)-ÿÎ)/ÿÎ)1ÿÎ)3ÿÎ)8ÿì)9ÿö):ÿì);ÿâ)<ÿÎ)=ÿâ)>ÿÎ)?ÿâ)@ÿÎ) ;ÿÎ) Qÿâ) ZÿØ) [ÿØ) \ÿØ) ]ÿØ) eÿì) gÿì) èÿì) éÿö) ÿâ) ÿÎ)Ùÿì)Úÿì)Üÿì)Ýÿì*ÿâ*ÿâ*$ÿØ*&ÿì**ÿì*,ÿØ*2ÿì*4ÿì*6ÿö*7ÿØ*9ÿÎ*:ÿÎ*;ÿØ*<ÿÎ*=ÿØ*Dÿì*Iÿì*Jÿì*Mÿâ*Pÿâ*Qÿâ*Rÿû*Sÿì*Uÿì*Vÿì*Wÿì*Xÿç*Yÿö*Zÿö*[ÿâ*\ÿö*]ÿâ*}ÿì*‚ÿØ*ƒÿØ*„ÿØ*…ÿØ*†ÿØ*‡ÿØ*ˆÿØ*‰ÿì*ŽÿØ*ÿØ*ÿØ*‘ÿØ*”ÿì*•ÿì*–ÿì*—ÿì*˜ÿì*šÿì*ŸÿÎ*¢ÿì*£ÿì*¤ÿì*¥ÿì*¦ÿì*§ÿì*¨ÿì*³ÿâ*´ÿû*µÿû*¶ÿû*·ÿû*¸ÿû*ºÿû*»ÿç*¼ÿç*½ÿç*¾ÿç*¿ÿö*Áÿö*ÂÿØ*Ãÿì*ÄÿØ*Åÿì*ÆÿØ*Çÿì*Èÿì*Êÿì*Ìÿì*Îÿì*Þÿì*àÿì*áÿì*âÿì*ãÿì*äÿì*åÿì*ÿâ*ÿâ* ÿâ*ÿì*ÿû*ÿì*ÿû*ÿì*ÿû*ÿì*ÿû*ÿì*ÿö*ÿì* ÿö*!ÿì*"ÿö*#ÿì*$ÿØ*%ÿì*&ÿØ*+ÿç*-ÿç*/ÿç*1ÿç*3ÿç*8ÿÎ*9ÿö*:ÿÎ*;ÿØ*<ÿâ*=ÿØ*>ÿâ*?ÿØ*@ÿâ* ;ÿâ* Qÿì* Zÿö* [ÿì* \ÿö* ]ÿì* dÿØ* eÿì* fÿØ* gÿì* èÿÎ* éÿö* òÿØ* õÿØ* öÿØ* ÿì*Ùÿì*Úÿì*Üÿì*Ýÿì,$ÿØ,&ÿç,*ÿç,,ÿØ,2ÿç,4ÿç,6ÿÝ,7ÿö,9ÿØ,:ÿØ,;ÿØ,<ÿØ,=ÿØ,Dÿâ,Fÿì,Gÿì,Hÿâ,Iÿö,Jÿâ,Pÿâ,Qÿâ,Rÿì,Sÿâ,Tÿì,Uÿâ,Vÿâ,Wÿö,XÿØ,Yÿì,Zÿì,[ÿâ,\ÿì,]ÿâ,‚ÿØ,ƒÿØ,„ÿØ,…ÿØ,†ÿØ,‡ÿØ,ˆÿØ,‰ÿç,ŽÿØ,ÿØ,ÿØ,‘ÿØ,”ÿç,•ÿç,–ÿç,—ÿç,˜ÿç,šÿç,ŸÿØ,¢ÿâ,£ÿâ,¤ÿâ,¥ÿâ,¦ÿâ,§ÿâ,¨ÿâ,©ÿì,ªÿâ,«ÿâ,¬ÿâ,­ÿâ,²ÿâ,³ÿâ,´ÿì,µÿì,¶ÿì,·ÿì,¸ÿì,ºÿì,»ÿØ,¼ÿØ,½ÿØ,¾ÿØ,¿ÿì,Áÿì,ÂÿØ,Ãÿâ,ÄÿØ,Åÿâ,ÆÿØ,Çÿâ,Èÿç,Êÿç,Ëÿì,Ìÿç,Îÿç,Ïÿì,Ñÿì,Õÿâ,×ÿâ,Ûÿâ,Þÿç,àÿç,áÿâ,âÿç,ãÿâ,äÿç,åÿâ,ÿâ,ÿâ, ÿâ,ÿç,ÿì,ÿç,ÿì,ÿç,ÿì,ÿç,ÿì,ÿâ,ÿÝ,ÿâ, ÿÝ,!ÿâ,"ÿÝ,#ÿâ,$ÿö,%ÿö,&ÿö,+ÿØ,-ÿØ,/ÿØ,1ÿØ,3ÿØ,8ÿØ,9ÿì,:ÿØ,;ÿØ,<ÿâ,=ÿØ,>ÿâ,?ÿØ,@ÿâ, ;ÿâ, Qÿâ, ZÿÝ, [ÿâ, \ÿÝ, ]ÿâ, dÿö, eÿö, fÿö, gÿö, èÿØ, éÿì,Ùÿö,Úÿö,Üÿö,Ýÿö-$ÿâ-&ÿâ-*ÿâ-,ÿØ-2ÿâ-4ÿâ-6ÿâ-9ÿÎ-:ÿÎ-;ÿÎ-<ÿÎ-=ÿÎ-Dÿç-Fÿì-Gÿñ-Hÿì-Jÿç-Mÿì-PÿØ-QÿØ-Rÿç-Sÿì-Tÿñ-Uÿâ-Vÿì-XÿØ-Yÿâ-Zÿâ-[ÿÎ-\ÿâ-]ÿØ-‚ÿâ-ƒÿâ-„ÿâ-…ÿâ-†ÿâ-‡ÿâ-ˆÿâ-‰ÿâ-ŽÿØ-ÿØ-ÿØ-‘ÿØ-”ÿâ-•ÿâ-–ÿâ-—ÿâ-˜ÿâ-šÿâ-ŸÿÎ-¢ÿç-£ÿç-¤ÿç-¥ÿç-¦ÿç-§ÿç-¨ÿç-©ÿì-ªÿì-«ÿì-¬ÿì-­ÿì-²ÿì-³ÿØ-´ÿç-µÿç-¶ÿç-·ÿç-¸ÿç-ºÿç-»ÿØ-¼ÿØ-½ÿØ-¾ÿØ-¿ÿâ-Áÿâ-Âÿâ-Ãÿç-Äÿâ-Åÿç-Æÿâ-Çÿç-Èÿâ-Êÿâ-Ëÿì-Ìÿâ-Îÿâ-Ïÿì-Ñÿñ-Õÿì-×ÿì-Ûÿì-Þÿâ-àÿâ-áÿç-âÿâ-ãÿç-äÿâ-åÿç-ÿØ-ÿØ- ÿØ-ÿâ-ÿç-ÿâ-ÿç-ÿâ-ÿç-ÿâ-ÿç-ÿâ-ÿâ-ÿì- ÿâ-!ÿì-"ÿâ-#ÿì-+ÿØ--ÿØ-/ÿØ-1ÿØ-3ÿØ-8ÿÎ-9ÿâ-:ÿÎ-;ÿÎ-<ÿØ-=ÿÎ->ÿØ-?ÿÎ-@ÿØ- ;ÿØ- Qÿì- Zÿâ- [ÿì- \ÿâ- ]ÿì- èÿÎ- éÿâ.ÿØ.ÿÎ.ÿØ.&ÿÎ.*ÿÎ.,ÿØ.2ÿÎ.4ÿÎ.6ÿÎ.Dÿâ.FÿØ.GÿÝ.HÿØ.Iÿâ.Jÿâ.Mÿö.PÿØ.QÿØ.RÿÓ.Sÿâ.TÿÝ.UÿØ.Vÿì.Wÿâ.XÿØ.Yÿâ.Zÿâ.[ÿì.\ÿâ.]ÿØ.mÿÎ.}ÿØ.‰ÿÎ.ŽÿØ.ÿØ.ÿØ.‘ÿØ.”ÿÎ.•ÿÎ.–ÿÎ.—ÿÎ.˜ÿÎ.šÿÎ.¢ÿâ.£ÿâ.¤ÿâ.¥ÿâ.¦ÿâ.§ÿâ.¨ÿâ.©ÿØ.ªÿØ.«ÿØ.¬ÿØ.­ÿØ.²ÿØ.³ÿØ.´ÿÓ.µÿÓ.¶ÿÓ.·ÿÓ.¸ÿÓ.ºÿÓ.»ÿØ.¼ÿØ.½ÿØ.¾ÿØ.¿ÿâ.Áÿâ.Ãÿâ.Åÿâ.Çÿâ.ÈÿÎ.ÊÿÎ.ËÿØ.ÌÿÎ.ÎÿÎ.ÏÿØ.ÑÿÝ.ÕÿØ.×ÿØ.ÛÿØ.ÞÿÎ.àÿÎ.áÿâ.âÿÎ.ãÿâ.äÿÎ.åÿâ.ÿØ.ÿØ. ÿØ.ÿÎ.ÿÓ.ÿÎ.ÿÓ.ÿÎ.ÿÓ.ÿÎ.ÿÓ.ÿØ.ÿÎ.ÿì. ÿÎ.!ÿì."ÿÎ.#ÿì.%ÿâ.+ÿØ.-ÿØ./ÿØ.1ÿØ.3ÿØ.9ÿâ.<ÿØ.>ÿØ.@ÿØ. ;ÿØ. Qÿâ. ZÿÎ. [ÿì. \ÿÎ. ]ÿì. eÿâ. gÿâ. éÿâ. òÿì. õÿì. öÿì. ÿÎ. ÿØ.Ùÿâ.Úÿâ.Üÿâ.Ýÿâ/ÿì/ÿÄ/ÿì/&ÿØ/*ÿØ/,ÿâ/2ÿØ/4ÿØ/6ÿØ/7ÿØ/9ÿÄ/:ÿÄ/<ÿÄ/Dÿì/Fÿâ/Gÿç/Hÿâ/Iÿâ/Jÿì/Mÿö/PÿØ/QÿØ/RÿÝ/Tÿç/Uÿâ/Vÿì/Wÿâ/XÿØ/YÿØ/ZÿØ/\ÿØ/]ÿØ/mÿÄ/}ÿØ/‰ÿØ/Žÿâ/ÿâ/ÿâ/‘ÿâ/”ÿØ/•ÿØ/–ÿØ/—ÿØ/˜ÿØ/šÿØ/ŸÿÄ/¢ÿì/£ÿì/¤ÿì/¥ÿì/¦ÿì/§ÿì/¨ÿì/©ÿâ/ªÿâ/«ÿâ/¬ÿâ/­ÿâ/²ÿâ/³ÿØ/´ÿÝ/µÿÝ/¶ÿÝ/·ÿÝ/¸ÿÝ/ºÿÝ/»ÿØ/¼ÿØ/½ÿØ/¾ÿØ/¿ÿØ/ÁÿØ/Ãÿì/Åÿì/Çÿì/ÈÿØ/ÊÿØ/Ëÿâ/ÌÿØ/ÎÿØ/Ïÿâ/Ñÿç/Õÿâ/×ÿâ/Ûÿâ/ÞÿØ/àÿØ/áÿì/âÿØ/ãÿì/äÿØ/åÿì/ÿØ/ÿØ/ ÿØ/ÿØ/ÿÝ/ÿØ/ÿÝ/ÿØ/ÿÝ/ÿØ/ÿÝ/ÿâ/ÿØ/ÿì/ ÿØ/!ÿì/"ÿØ/#ÿì/$ÿØ/%ÿâ/&ÿØ/+ÿØ/-ÿØ//ÿØ/1ÿØ/3ÿØ/8ÿÄ/9ÿØ/:ÿÄ/<ÿØ/>ÿØ/@ÿØ/ ;ÿØ/ ZÿØ/ [ÿì/ \ÿØ/ ]ÿì/ dÿØ/ eÿâ/ fÿØ/ gÿâ/ èÿÄ/ éÿØ/ òÿÄ/ õÿÄ/ öÿÄ/ ÿÄ/ ÿØ/Ùÿâ/Úÿâ/Üÿâ/Ýÿâ2ÿâ2ÿâ2$ÿâ2,ÿâ26ÿì27ÿØ29ÿØ2:ÿØ2;ÿÎ2<ÿØ2=ÿÎ2Dÿì2Jÿì2Pÿì2Qÿì2Sÿö2Uÿì2Xÿñ2]ÿì2}ÿì2‚ÿâ2ƒÿâ2„ÿâ2…ÿâ2†ÿâ2‡ÿâ2ˆÿâ2Žÿâ2ÿâ2ÿâ2‘ÿâ2ŸÿØ2¢ÿì2£ÿì2¤ÿì2¥ÿì2¦ÿì2§ÿì2¨ÿì2³ÿì2»ÿñ2¼ÿñ2½ÿñ2¾ÿñ2Âÿâ2Ãÿì2Äÿâ2Åÿì2Æÿâ2Çÿì2áÿì2ãÿì2åÿì2ÿì2ÿì2 ÿì2ÿì2ÿì2 ÿì2"ÿì2$ÿØ2&ÿØ2+ÿñ2-ÿñ2/ÿñ21ÿñ23ÿñ28ÿØ2:ÿØ2;ÿÎ2<ÿì2=ÿÎ2>ÿì2?ÿÎ2@ÿì2 ;ÿì2 Qÿö2 Zÿì2 \ÿì2 dÿØ2 fÿØ2 èÿØ2 òÿØ2 õÿØ2 öÿØ2 ÿì3ÿœ3ÿº3ÿœ3$ÿÄ3&ÿì3*ÿì3,ÿØ3-ÿØ32ÿì34ÿì36ÿâ37ÿâ39ÿØ3:ÿØ3;ÿÄ3<ÿØ3=ÿÄ3DÿÎ3FÿØ3GÿÝ3HÿØ3JÿÎ3PÿØ3QÿØ3RÿÓ3Sÿì3TÿÝ3Uÿâ3Vÿâ3XÿØ3[ÿØ3]ÿØ3mÿº3}ÿÄ3‚ÿÄ3ƒÿÄ3„ÿÄ3…ÿÄ3†ÿÄ3‡ÿÄ3ˆÿÄ3‰ÿì3ŽÿØ3ÿØ3ÿØ3‘ÿØ3”ÿì3•ÿì3–ÿì3—ÿì3˜ÿì3šÿì3ŸÿØ3¢ÿÎ3£ÿÎ3¤ÿÎ3¥ÿÎ3¦ÿÎ3§ÿÎ3¨ÿÎ3©ÿØ3ªÿØ3«ÿØ3¬ÿØ3­ÿØ3²ÿØ3³ÿØ3´ÿÓ3µÿÓ3¶ÿÓ3·ÿÓ3¸ÿÓ3ºÿÓ3»ÿØ3¼ÿØ3½ÿØ3¾ÿØ3ÂÿÄ3ÃÿÎ3ÄÿÄ3ÅÿÎ3ÆÿÄ3ÇÿÎ3Èÿì3Êÿì3ËÿØ3Ìÿì3Îÿì3ÏÿØ3ÑÿÝ3ÕÿØ3×ÿØ3ÛÿØ3Þÿì3àÿì3áÿÎ3âÿì3ãÿÎ3äÿì3åÿÎ3ÿØ3ÿØ3 ÿØ3ÿì3ÿÓ3ÿì3ÿÓ3ÿì3ÿÓ3ÿì3ÿÓ3ÿâ3ÿâ3ÿâ3 ÿâ3!ÿâ3"ÿâ3#ÿâ3$ÿâ3&ÿâ3+ÿØ3-ÿØ3/ÿØ31ÿØ33ÿØ38ÿØ3:ÿØ3;ÿÄ3<ÿØ3=ÿÄ3>ÿØ3?ÿÄ3@ÿØ3 ;ÿØ3 Qÿì3 Zÿâ3 [ÿâ3 \ÿâ3 ]ÿâ3 dÿâ3 fÿâ3 èÿØ3 òÿì3 õÿì3 öÿì3 ÿº3 ÿÄ4ÿâ4ÿâ4$ÿâ4,ÿâ46ÿì47ÿØ49ÿØ4:ÿØ4;ÿÎ4<ÿØ4=ÿÎ4Dÿì4Jÿì4Pÿì4Qÿì4Sÿö4Uÿì4Xÿñ4]ÿì4}ÿì4‚ÿâ4ƒÿâ4„ÿâ4…ÿâ4†ÿâ4‡ÿâ4ˆÿâ4Žÿâ4ÿâ4ÿâ4‘ÿâ4ŸÿØ4¢ÿì4£ÿì4¤ÿì4¥ÿì4¦ÿì4§ÿì4¨ÿì4³ÿì4»ÿñ4¼ÿñ4½ÿñ4¾ÿñ4Âÿâ4Ãÿì4Äÿâ4Åÿì4Æÿâ4Çÿì4áÿì4ãÿì4åÿì4ÿì4ÿì4 ÿì4ÿì4ÿì4 ÿì4"ÿì4$ÿØ4&ÿØ4+ÿñ4-ÿñ4/ÿñ41ÿñ43ÿñ48ÿØ4:ÿØ4;ÿÎ4<ÿì4=ÿÎ4>ÿì4?ÿÎ4@ÿì4 ;ÿì4 Qÿö4 Zÿì4 \ÿì4 dÿØ4 fÿØ4 èÿØ4 òÿØ4 õÿØ4 öÿØ4 ÿì5$ÿö5&ÿö5*ÿö5,ÿØ52ÿö54ÿö56ÿì57ÿì59ÿÎ5:ÿÎ5;ÿì5<ÿÎ5=ÿì5Dÿö5Fÿâ5Gÿç5Hÿö5Jÿö5Mÿö5Pÿö5Qÿö5RÿÝ5Sÿö5Tÿç5Uÿì5Vÿö5XÿØ5Yÿö5Zÿö5\ÿö5]ÿö5‚ÿö5ƒÿö5„ÿö5…ÿö5†ÿö5‡ÿö5ˆÿö5‰ÿö5ŽÿØ5ÿØ5ÿØ5‘ÿØ5”ÿö5•ÿö5–ÿö5—ÿö5˜ÿö5šÿö5ŸÿÎ5¢ÿö5£ÿö5¤ÿö5¥ÿö5¦ÿö5§ÿö5¨ÿö5©ÿâ5ªÿö5«ÿö5¬ÿö5­ÿö5²ÿö5³ÿö5´ÿÝ5µÿÝ5¶ÿÝ5·ÿÝ5¸ÿÝ5ºÿÝ5»ÿØ5¼ÿØ5½ÿØ5¾ÿØ5¿ÿö5Áÿö5Âÿö5Ãÿö5Äÿö5Åÿö5Æÿö5Çÿö5Èÿö5Êÿö5Ëÿâ5Ìÿö5Îÿö5Ïÿâ5Ñÿç5Õÿö5×ÿö5Ûÿö5Þÿö5àÿö5áÿö5âÿö5ãÿö5äÿö5åÿö5ÿö5ÿö5 ÿö5ÿö5ÿÝ5ÿö5ÿÝ5ÿö5ÿÝ5ÿö5ÿÝ5ÿì5ÿì5ÿö5 ÿì5!ÿö5"ÿì5#ÿö5$ÿì5&ÿì5+ÿØ5-ÿØ5/ÿØ51ÿØ53ÿØ58ÿÎ59ÿö5:ÿÎ5;ÿì5<ÿö5=ÿì5>ÿö5?ÿì5@ÿö5 ;ÿö5 Qÿö5 Zÿì5 [ÿö5 \ÿì5 ]ÿö5 dÿì5 fÿì5 èÿÎ5 éÿö6ÿÄ6ÿâ6ÿÄ6$ÿâ6&ÿì6*ÿì6,ÿØ62ÿì64ÿì66ÿö67ÿØ69ÿÎ6:ÿÎ6;ÿÎ6<ÿÎ6=ÿÎ6Iÿö6Mÿö6Pÿì6Qÿì6Rÿû6Sÿö6Uÿì6Wÿö6Xÿç6Yÿì6Zÿì6[ÿØ6\ÿì6]ÿì6mÿâ6}ÿâ6‚ÿâ6ƒÿâ6„ÿâ6…ÿâ6†ÿâ6‡ÿâ6ˆÿâ6‰ÿì6ŽÿØ6ÿØ6ÿØ6‘ÿØ6”ÿì6•ÿì6–ÿì6—ÿì6˜ÿì6šÿì6ŸÿÎ6³ÿì6´ÿû6µÿû6¶ÿû6·ÿû6¸ÿû6ºÿû6»ÿç6¼ÿç6½ÿç6¾ÿç6¿ÿì6Áÿì6Âÿâ6Äÿâ6Æÿâ6Èÿì6Êÿì6Ìÿì6Îÿì6Þÿì6àÿì6âÿì6äÿì6ÿì6ÿì6 ÿì6ÿì6ÿû6ÿì6ÿû6ÿì6ÿû6ÿì6ÿû6ÿì6ÿö6 ÿö6"ÿö6$ÿØ6%ÿö6&ÿØ6+ÿç6-ÿç6/ÿç61ÿç63ÿç68ÿÎ69ÿì6:ÿÎ6;ÿÎ6<ÿì6=ÿÎ6>ÿì6?ÿÎ6@ÿì6 ;ÿì6 Qÿö6 Zÿö6 \ÿö6 dÿØ6 eÿö6 fÿØ6 gÿö6 èÿÎ6 éÿì6 òÿØ6 õÿØ6 öÿØ6 ÿâ6 ÿâ6Ùÿö6Úÿö6Üÿö6Ýÿö7ÿÄ7ÿÎ7ÿÄ7$ÿÎ7&ÿØ7*ÿØ7,ÿâ7-ÿØ72ÿØ74ÿØ76ÿØ79ÿö7:ÿö7;ÿØ7<ÿö7=ÿØ7DÿØ7FÿØ7GÿÝ7HÿØ7Iÿì7JÿØ7PÿØ7QÿØ7RÿÓ7Sÿâ7TÿÝ7UÿØ7VÿØ7Wÿì7XÿØ7Yÿì7Zÿì7[ÿâ7\ÿì7]ÿØ7mÿÎ7}ÿØ7‚ÿÎ7ƒÿÎ7„ÿÎ7…ÿÎ7†ÿÎ7‡ÿÎ7ˆÿÎ7‰ÿØ7Žÿâ7ÿâ7ÿâ7‘ÿâ7”ÿØ7•ÿØ7–ÿØ7—ÿØ7˜ÿØ7šÿØ7Ÿÿö7¢ÿØ7£ÿØ7¤ÿØ7¥ÿØ7¦ÿØ7§ÿØ7¨ÿØ7©ÿØ7ªÿØ7«ÿØ7¬ÿØ7­ÿØ7²ÿØ7³ÿØ7´ÿÓ7µÿÓ7¶ÿÓ7·ÿÓ7¸ÿÓ7ºÿÓ7»ÿØ7¼ÿØ7½ÿØ7¾ÿØ7¿ÿì7Áÿì7ÂÿÎ7ÃÿØ7ÄÿÎ7ÅÿØ7ÆÿÎ7ÇÿØ7ÈÿØ7ÊÿØ7ËÿØ7ÌÿØ7ÎÿØ7ÏÿØ7ÑÿÝ7ÕÿØ7×ÿØ7ÛÿØ7ÞÿØ7àÿØ7áÿØ7âÿØ7ãÿØ7äÿØ7åÿØ7ÿØ7ÿØ7 ÿØ7ÿØ7ÿÓ7ÿØ7ÿÓ7ÿØ7ÿÓ7ÿØ7ÿÓ7ÿØ7ÿØ7ÿØ7 ÿØ7!ÿØ7"ÿØ7#ÿØ7%ÿì7+ÿØ7-ÿØ7/ÿØ71ÿØ73ÿØ78ÿö79ÿì7:ÿö7;ÿØ7<ÿØ7=ÿØ7>ÿØ7?ÿØ7@ÿØ7 ;ÿØ7 Qÿâ7 ZÿØ7 [ÿØ7 \ÿØ7 ]ÿØ7 eÿì7 gÿì7 èÿö7 éÿì7 ÿÎ7 ÿØ7Ùÿì7Úÿì7Üÿì7Ýÿì9ÿÄ9ÿÎ9ÿÄ9$ÿÄ9&ÿÎ9*ÿÎ9,ÿØ9-ÿâ92ÿÎ94ÿÎ96ÿÎ9;ÿâ9=ÿâ9DÿÎ9FÿÓ9GÿØ9HÿÎ9Iÿì9JÿÎ9PÿÄ9QÿÄ9RÿÎ9SÿØ9TÿØ9UÿÄ9VÿØ9Wÿì9XÿÎ9Yÿì9Zÿì9[ÿâ9\ÿì9]ÿÄ9mÿÎ9}ÿÄ9‚ÿÄ9ƒÿÄ9„ÿÄ9…ÿÄ9†ÿÄ9‡ÿÄ9ˆÿÄ9‰ÿÎ9ŽÿØ9ÿØ9ÿØ9‘ÿØ9”ÿÎ9•ÿÎ9–ÿÎ9—ÿÎ9˜ÿÎ9šÿÎ9¢ÿÎ9£ÿÎ9¤ÿÎ9¥ÿÎ9¦ÿÎ9§ÿÎ9¨ÿÎ9©ÿÓ9ªÿÎ9«ÿÎ9¬ÿÎ9­ÿÎ9²ÿÎ9³ÿÄ9´ÿÎ9µÿÎ9¶ÿÎ9·ÿÎ9¸ÿÎ9ºÿÎ9»ÿÎ9¼ÿÎ9½ÿÎ9¾ÿÎ9¿ÿì9Áÿì9ÂÿÄ9ÃÿÎ9ÄÿÄ9ÅÿÎ9ÆÿÄ9ÇÿÎ9ÈÿÎ9ÊÿÎ9ËÿÓ9ÌÿÎ9ÎÿÎ9ÏÿÓ9ÑÿØ9ÕÿÎ9×ÿÎ9ÛÿÎ9ÞÿÎ9àÿÎ9áÿÎ9âÿÎ9ãÿÎ9äÿÎ9åÿÎ9ÿÄ9ÿÄ9 ÿÄ9ÿÎ9ÿÎ9ÿÎ9ÿÎ9ÿÎ9ÿÎ9ÿÎ9ÿÎ9ÿÄ9ÿÎ9ÿØ9 ÿÎ9!ÿØ9"ÿÎ9#ÿØ9%ÿì9+ÿÎ9-ÿÎ9/ÿÎ91ÿÎ93ÿÎ99ÿì9;ÿâ9<ÿÄ9=ÿâ9>ÿÄ9?ÿâ9@ÿÄ9 ;ÿÄ9 QÿØ9 ZÿÎ9 [ÿØ9 \ÿÎ9 ]ÿØ9 eÿì9 gÿì9 éÿì9 ÿÎ9 ÿÄ9Ùÿì9Úÿì9Üÿì9Ýÿì:ÿÄ:ÿÎ:ÿÄ:$ÿÄ:&ÿÎ:*ÿÎ:,ÿØ:-ÿâ:2ÿÎ:4ÿÎ:6ÿÎ:;ÿâ:=ÿâ:DÿÎ:FÿÓ:GÿØ:HÿÎ:Iÿì:JÿÎ:PÿÄ:QÿÄ:RÿÎ:SÿØ:TÿØ:UÿÄ:VÿØ:Wÿì:XÿÎ:Yÿì:Zÿì:[ÿâ:\ÿì:]ÿÄ:mÿÎ:}ÿÄ:‚ÿÄ:ƒÿÄ:„ÿÄ:…ÿÄ:†ÿÄ:‡ÿÄ:ˆÿÄ:‰ÿÎ:ŽÿØ:ÿØ:ÿØ:‘ÿØ:”ÿÎ:•ÿÎ:–ÿÎ:—ÿÎ:˜ÿÎ:šÿÎ:¢ÿÎ:£ÿÎ:¤ÿÎ:¥ÿÎ:¦ÿÎ:§ÿÎ:¨ÿÎ:©ÿÓ:ªÿÎ:«ÿÎ:¬ÿÎ:­ÿÎ:²ÿÎ:³ÿÄ:´ÿÎ:µÿÎ:¶ÿÎ:·ÿÎ:¸ÿÎ:ºÿÎ:»ÿÎ:¼ÿÎ:½ÿÎ:¾ÿÎ:¿ÿì:Áÿì:ÂÿÄ:ÃÿÎ:ÄÿÄ:ÅÿÎ:ÆÿÄ:ÇÿÎ:ÈÿÎ:ÊÿÎ:ËÿÓ:ÌÿÎ:ÎÿÎ:ÏÿÓ:ÑÿØ:ÕÿÎ:×ÿÎ:ÛÿÎ:ÞÿÎ:àÿÎ:áÿÎ:âÿÎ:ãÿÎ:äÿÎ:åÿÎ:ÿÄ:ÿÄ: ÿÄ:ÿÎ:ÿÎ:ÿÎ:ÿÎ:ÿÎ:ÿÎ:ÿÎ:ÿÎ:ÿÄ:ÿÎ:ÿØ: ÿÎ:!ÿØ:"ÿÎ:#ÿØ:%ÿì:+ÿÎ:-ÿÎ:/ÿÎ:1ÿÎ:3ÿÎ:9ÿì:;ÿâ:<ÿÄ:=ÿâ:>ÿÄ:?ÿâ:@ÿÄ: ;ÿÄ: QÿØ: ZÿÎ: [ÿØ: \ÿÎ: ]ÿØ: eÿì: gÿì: éÿì: ÿÎ: ÿÄ:Ùÿì:Úÿì:Üÿì:Ýÿì;ÿØ;ÿÎ;ÿØ;&ÿÎ;*ÿÎ;,ÿØ;2ÿÎ;4ÿÎ;6ÿÎ;Dÿâ;FÿØ;GÿÝ;HÿØ;Iÿâ;Jÿâ;Mÿö;PÿØ;QÿØ;RÿÓ;Sÿâ;TÿÝ;UÿØ;Vÿì;Wÿâ;XÿØ;Yÿâ;Zÿâ;[ÿì;\ÿâ;]ÿØ;mÿÎ;}ÿØ;‰ÿÎ;ŽÿØ;ÿØ;ÿØ;‘ÿØ;”ÿÎ;•ÿÎ;–ÿÎ;—ÿÎ;˜ÿÎ;šÿÎ;¢ÿâ;£ÿâ;¤ÿâ;¥ÿâ;¦ÿâ;§ÿâ;¨ÿâ;©ÿØ;ªÿØ;«ÿØ;¬ÿØ;­ÿØ;²ÿØ;³ÿØ;´ÿÓ;µÿÓ;¶ÿÓ;·ÿÓ;¸ÿÓ;ºÿÓ;»ÿØ;¼ÿØ;½ÿØ;¾ÿØ;¿ÿâ;Áÿâ;Ãÿâ;Åÿâ;Çÿâ;ÈÿÎ;ÊÿÎ;ËÿØ;ÌÿÎ;ÎÿÎ;ÏÿØ;ÑÿÝ;ÕÿØ;×ÿØ;ÛÿØ;ÞÿÎ;àÿÎ;áÿâ;âÿÎ;ãÿâ;äÿÎ;åÿâ;ÿØ;ÿØ; ÿØ;ÿÎ;ÿÓ;ÿÎ;ÿÓ;ÿÎ;ÿÓ;ÿÎ;ÿÓ;ÿØ;ÿÎ;ÿì; ÿÎ;!ÿì;"ÿÎ;#ÿì;%ÿâ;+ÿØ;-ÿØ;/ÿØ;1ÿØ;3ÿØ;9ÿâ;<ÿØ;>ÿØ;@ÿØ; ;ÿØ; Qÿâ; ZÿÎ; [ÿì; \ÿÎ; ]ÿì; eÿâ; gÿâ; éÿâ; òÿì; õÿì; öÿì; ÿÎ; ÿØ;Ùÿâ;Úÿâ;Üÿâ;Ýÿâ<ÿÄ<ÿÎ<ÿÄ<$ÿÄ<&ÿÎ<*ÿÎ<,ÿØ<-ÿâ<2ÿÎ<4ÿÎ<6ÿÎ<;ÿâ<=ÿâ<DÿÎ<FÿÓ<GÿØ<HÿÎ<Iÿì<JÿÎ<PÿÄ<QÿÄ<RÿÎ<SÿØ<TÿØ<UÿÄ<VÿØ<Wÿì<XÿÎ<Yÿì<Zÿì<[ÿâ<\ÿì<]ÿÄ<mÿÎ<}ÿÄ<‚ÿÄ<ƒÿÄ<„ÿÄ<…ÿÄ<†ÿÄ<‡ÿÄ<ˆÿÄ<‰ÿÎ<ŽÿØ<ÿØ<ÿØ<‘ÿØ<”ÿÎ<•ÿÎ<–ÿÎ<—ÿÎ<˜ÿÎ<šÿÎ<¢ÿÎ<£ÿÎ<¤ÿÎ<¥ÿÎ<¦ÿÎ<§ÿÎ<¨ÿÎ<©ÿÓ<ªÿÎ<«ÿÎ<¬ÿÎ<­ÿÎ<²ÿÎ<³ÿÄ<´ÿÎ<µÿÎ<¶ÿÎ<·ÿÎ<¸ÿÎ<ºÿÎ<»ÿÎ<¼ÿÎ<½ÿÎ<¾ÿÎ<¿ÿì<Áÿì<ÂÿÄ<ÃÿÎ<ÄÿÄ<ÅÿÎ<ÆÿÄ<ÇÿÎ<ÈÿÎ<ÊÿÎ<ËÿÓ<ÌÿÎ<ÎÿÎ<ÏÿÓ<ÑÿØ<ÕÿÎ<×ÿÎ<ÛÿÎ<ÞÿÎ<àÿÎ<áÿÎ<âÿÎ<ãÿÎ<äÿÎ<åÿÎ<ÿÄ<ÿÄ< ÿÄ<ÿÎ<ÿÎ<ÿÎ<ÿÎ<ÿÎ<ÿÎ<ÿÎ<ÿÎ<ÿÄ<ÿÎ<ÿØ< ÿÎ<!ÿØ<"ÿÎ<#ÿØ<%ÿì<+ÿÎ<-ÿÎ</ÿÎ<1ÿÎ<3ÿÎ<9ÿì<;ÿâ<<ÿÄ<=ÿâ<>ÿÄ<?ÿâ<@ÿÄ< ;ÿÄ< QÿØ< ZÿÎ< [ÿØ< \ÿÎ< ]ÿØ< eÿì< gÿì< éÿì< ÿÎ< ÿÄ<Ùÿì<Úÿì<Üÿì<Ýÿì=ÿØ=ÿÎ=ÿØ=&ÿÎ=*ÿÎ=,ÿØ=2ÿÎ=4ÿÎ=6ÿÎ=Dÿâ=FÿØ=GÿÝ=HÿØ=Iÿâ=Jÿâ=Mÿö=PÿØ=QÿØ=RÿÓ=Sÿâ=TÿÝ=UÿØ=Vÿì=Wÿâ=XÿØ=Yÿâ=Zÿâ=[ÿì=\ÿâ=]ÿØ=mÿÎ=}ÿØ=‰ÿÎ=ŽÿØ=ÿØ=ÿØ=‘ÿØ=”ÿÎ=•ÿÎ=–ÿÎ=—ÿÎ=˜ÿÎ=šÿÎ=¢ÿâ=£ÿâ=¤ÿâ=¥ÿâ=¦ÿâ=§ÿâ=¨ÿâ=©ÿØ=ªÿØ=«ÿØ=¬ÿØ=­ÿØ=²ÿØ=³ÿØ=´ÿÓ=µÿÓ=¶ÿÓ=·ÿÓ=¸ÿÓ=ºÿÓ=»ÿØ=¼ÿØ=½ÿØ=¾ÿØ=¿ÿâ=Áÿâ=Ãÿâ=Åÿâ=Çÿâ=ÈÿÎ=ÊÿÎ=ËÿØ=ÌÿÎ=ÎÿÎ=ÏÿØ=ÑÿÝ=ÕÿØ=×ÿØ=ÛÿØ=ÞÿÎ=àÿÎ=áÿâ=âÿÎ=ãÿâ=äÿÎ=åÿâ=ÿØ=ÿØ= ÿØ=ÿÎ=ÿÓ=ÿÎ=ÿÓ=ÿÎ=ÿÓ=ÿÎ=ÿÓ=ÿØ=ÿÎ=ÿì= ÿÎ=!ÿì="ÿÎ=#ÿì=%ÿâ=+ÿØ=-ÿØ=/ÿØ=1ÿØ=3ÿØ=9ÿâ=<ÿØ=>ÿØ=@ÿØ= ;ÿØ= Qÿâ= ZÿÎ= [ÿì= \ÿÎ= ]ÿì= eÿâ= gÿâ= éÿâ= òÿì= õÿì= öÿì= ÿÎ= ÿØ=Ùÿâ=Úÿâ=Üÿâ=ÝÿâDÿìDÿØDÿìDDÿöDFÿñDGÿöDIÿöDJÿöDPÿöDQÿöDRÿìDTÿöDUÿöDVÿöDWÿöDXÿöDYÿìDZÿìD[ÿöD\ÿìD]ÿöDmÿØD}ÿØD¢ÿöD£ÿöD¤ÿöD¥ÿöD¦ÿöD§ÿöD¨ÿöD©ÿñD³ÿöD´ÿìDµÿìD¶ÿìD·ÿìD¸ÿìDºÿìD»ÿöD¼ÿöD½ÿöD¾ÿöD¿ÿìDÁÿìDÃÿöDÅÿöDÇÿöDËÿñDÏÿñDÑÿöDÓÿöDáÿöDãÿöDåÿöDÿöDÿöD ÿöDÿìDÿìDÿìDÿìDÿöDÿöD!ÿöD#ÿöD%ÿöD+ÿöD-ÿöD/ÿöD1ÿöD3ÿöD9ÿìD<ÿöD>ÿöD@ÿöD2ÿöD ÿöD ÿöD [ÿöD ]ÿöD eÿöD gÿöD éÿìD òÿÄD õÿÄD öÿÄD ÿØD ÿØDÙÿöDÚÿöDÛÿöDÜÿöDÝÿöEÿâEÿâEMÿöEPÿöEQÿöEUÿöEXÿöEYÿöEZÿöE[ÿöE\ÿöE]ÿöE³ÿöE»ÿöE¼ÿöE½ÿöE¾ÿöE¿ÿöEÁÿöEÿöEÿöE ÿöEÿöE+ÿöE-ÿöE/ÿöE1ÿöE3ÿöE9ÿöE<ÿöE>ÿöE@ÿöE2ÿöE éÿöE òÿØE õÿØE öÿØFÿìFÿìFPÿöFQÿöFUÿöFXÿûF[ÿöF]ÿöF³ÿöF»ÿûF¼ÿûF½ÿûF¾ÿûFÿöFÿöF ÿöFÿöF+ÿûF-ÿûF/ÿûF1ÿûF3ÿûF<ÿöF>ÿöF@ÿöF2ÿöF òÿØF õÿØF öÿØGDÿöGHÿöGJÿöGPÿöGQÿöGSÿûGUÿöGVÿöGXÿñG]ÿöG¢ÿöG£ÿöG¤ÿöG¥ÿöG¦ÿöG§ÿöG¨ÿöGªÿöG«ÿöG¬ÿöG­ÿöG²ÿöG³ÿöG»ÿñG¼ÿñG½ÿñG¾ÿñGÃÿöGÅÿöGÇÿöGÕÿöG×ÿöGáÿöGãÿöGåÿöGÿöGÿöG ÿöGÿöGÿöG!ÿöG#ÿöG+ÿñG-ÿñG/ÿñG1ÿñG3ÿñG<ÿöG>ÿöG@ÿöG2ÿöG QÿûG [ÿöG ]ÿöHÿØHÿöHÿØHDÿöHIÿöHJÿöHMÿìHPÿìHQÿìHSÿöHUÿöHVÿöHWÿöHXÿìHYÿìHZÿìH[ÿìH\ÿìH]ÿìHmÿöH¢ÿöH£ÿöH¤ÿöH¥ÿöH¦ÿöH§ÿöH¨ÿöH³ÿìH»ÿìH¼ÿìH½ÿìH¾ÿìH¿ÿìHÁÿìHÃÿöHÅÿöHÇÿöHáÿöHãÿöHåÿöHÿìHÿìH ÿìHÿöHÿöH!ÿöH#ÿöH%ÿöH+ÿìH-ÿìH/ÿìH1ÿìH3ÿìH9ÿìH<ÿìH>ÿìH@ÿìH2ÿìH ÿöH QÿöH [ÿöH ]ÿöH eÿöH gÿöH éÿìH òÿÓH õÿÓH öÿÓH ÿöHÙÿöHÚÿöHÛÿöHÜÿöHÝÿöIÿÄIÿÄIÿÄIDÿìIFÿöIGÿûIHÿçIJÿìIPÿöIQÿöIRÿñITÿûIUÿöIVÿìIXÿûI[ÿìI]ÿöImÿÄI}ÿìI¢ÿìI£ÿìI¤ÿìI¥ÿìI¦ÿìI§ÿìI¨ÿìI©ÿöIªÿçI«ÿçI¬ÿçI­ÿçI²ÿçI³ÿöI´ÿñIµÿñI¶ÿñI·ÿñI¸ÿñIºÿñI»ÿûI¼ÿûI½ÿûI¾ÿûIÃÿìIÅÿìIÇÿìIËÿöIÏÿöIÑÿûIÓÿûIÕÿçI×ÿçIáÿìIãÿìIåÿìIÿöIÿöI ÿöIÿñIÿñIÿñIÿñIÿöIÿìI!ÿìI#ÿìI+ÿûI-ÿûI/ÿûI1ÿûI3ÿûI<ÿöI>ÿöI@ÿöI2ÿöI ÿûI [ÿìI ]ÿìI ÿÄI ÿìJÿØJÿÄJÿØJFÿöJGÿûJHÿöJRÿöJTÿûJmÿÄJ}ÿâJ©ÿöJªÿöJ«ÿöJ¬ÿöJ­ÿöJ²ÿöJ´ÿöJµÿöJ¶ÿöJ·ÿöJ¸ÿöJºÿöJËÿöJÏÿöJÑÿûJÓÿûJÕÿöJ×ÿöJÿöJÿöJÿöJÿöJ ÿûJ òÿØJ õÿØJ öÿØJ ÿÄJ ÿâKÿâKÿÄKÿâKFÿìKGÿñKHÿñKMÿìKPÿçKQÿçKRÿçKSÿöKTÿñKUÿìKVÿìKXÿìKYÿìKZÿìK[ÿìK\ÿìK]ÿçKmÿÄK}ÿâK©ÿìKªÿñK«ÿñK¬ÿñK­ÿñK²ÿñK³ÿçK´ÿçKµÿçK¶ÿçK·ÿçK¸ÿçKºÿçK»ÿìK¼ÿìK½ÿìK¾ÿìK¿ÿìKÁÿìKËÿìKÏÿìKÑÿñKÓÿñKÕÿñK×ÿñKÿçKÿçK ÿçKÿçKÿçKÿçKÿçKÿìKÿìK!ÿìK#ÿìK+ÿìK-ÿìK/ÿìK1ÿìK3ÿìK9ÿìK<ÿçK>ÿçK@ÿçK2ÿçK ÿñK QÿöK [ÿìK ]ÿìK éÿìK òÿÄK õÿÄK öÿÄK ÿÄK ÿâNÿØNÿÄNÿØNDÿöNFÿìNGÿñNHÿìNJÿöNPÿìNQÿìNRÿçNSÿöNTÿñNUÿìNVÿöNXÿìNYÿìNZÿìN\ÿìN]ÿìNmÿÄN}ÿÄN¢ÿöN£ÿöN¤ÿöN¥ÿöN¦ÿöN§ÿöN¨ÿöN©ÿìNªÿìN«ÿìN¬ÿìN­ÿìN²ÿìN³ÿìN´ÿçNµÿçN¶ÿçN·ÿçN¸ÿçNºÿçN»ÿìN¼ÿìN½ÿìN¾ÿìN¿ÿìNÁÿìNÃÿöNÅÿöNÇÿöNËÿìNÏÿìNÑÿñNÓÿñNÕÿìN×ÿìNáÿöNãÿöNåÿöNÿìNÿìN ÿìNÿçNÿçNÿçNÿçNÿìNÿöN!ÿöN#ÿöN+ÿìN-ÿìN/ÿìN1ÿìN3ÿìN9ÿìN<ÿìN>ÿìN@ÿìN2ÿìN ÿñN QÿöN [ÿöN ]ÿöN éÿìN òÿÄN õÿÄN öÿÄN ÿÄN ÿÄPÿâPÿÄPÿâPFÿìPGÿñPHÿñPMÿìPPÿçPQÿçPRÿçPSÿöPTÿñPUÿìPVÿìPXÿìPYÿìPZÿìP[ÿìP\ÿìP]ÿçPmÿÄP}ÿâP©ÿìPªÿñP«ÿñP¬ÿñP­ÿñP²ÿñP³ÿçP´ÿçPµÿçP¶ÿçP·ÿçP¸ÿçPºÿçP»ÿìP¼ÿìP½ÿìP¾ÿìP¿ÿìPÁÿìPËÿìPÏÿìPÑÿñPÓÿñPÕÿñP×ÿñPÿçPÿçP ÿçPÿçPÿçPÿçPÿçPÿìPÿìP!ÿìP#ÿìP+ÿìP-ÿìP/ÿìP1ÿìP3ÿìP9ÿìP<ÿçP>ÿçP@ÿçP2ÿçP ÿñP QÿöP [ÿìP ]ÿìP éÿìP òÿÄP õÿÄP öÿÄP ÿÄP ÿâQÿâQÿÄQÿâQFÿìQGÿñQHÿñQMÿìQPÿçQQÿçQRÿçQSÿöQTÿñQUÿìQVÿìQXÿìQYÿìQZÿìQ[ÿìQ\ÿìQ]ÿçQmÿÄQ}ÿâQ©ÿìQªÿñQ«ÿñQ¬ÿñQ­ÿñQ²ÿñQ³ÿçQ´ÿçQµÿçQ¶ÿçQ·ÿçQ¸ÿçQºÿçQ»ÿìQ¼ÿìQ½ÿìQ¾ÿìQ¿ÿìQÁÿìQËÿìQÏÿìQÑÿñQÓÿñQÕÿñQ×ÿñQÿçQÿçQ ÿçQÿçQÿçQÿçQÿçQÿìQÿìQ!ÿìQ#ÿìQ+ÿìQ-ÿìQ/ÿìQ1ÿìQ3ÿìQ9ÿìQ<ÿçQ>ÿçQ@ÿçQ2ÿçQ ÿñQ QÿöQ [ÿìQ ]ÿìQ éÿìQ òÿÄQ õÿÄQ öÿÄQ ÿÄQ ÿâRÿØRÿöRÿØRDÿöRIÿöRJÿöRMÿìRPÿìRQÿìRSÿöRUÿöRVÿöRWÿöRXÿìRYÿìRZÿìR[ÿìR\ÿìR]ÿìRmÿöR¢ÿöR£ÿöR¤ÿöR¥ÿöR¦ÿöR§ÿöR¨ÿöR³ÿìR»ÿìR¼ÿìR½ÿìR¾ÿìR¿ÿìRÁÿìRÃÿöRÅÿöRÇÿöRáÿöRãÿöRåÿöRÿìRÿìR ÿìRÿöRÿöR!ÿöR#ÿöR%ÿöR+ÿìR-ÿìR/ÿìR1ÿìR3ÿìR9ÿìR<ÿìR>ÿìR@ÿìR2ÿìR ÿöR QÿöR [ÿöR ]ÿöR eÿöR gÿöR éÿìR òÿÓR õÿÓR öÿÓR ÿöRÙÿöRÚÿöRÛÿöRÜÿöRÝÿöSÿâSÿâSMÿöSPÿöSQÿöSUÿöSXÿöSYÿöSZÿöS[ÿöS\ÿöS]ÿöS³ÿöS»ÿöS¼ÿöS½ÿöS¾ÿöS¿ÿöSÁÿöSÿöSÿöS ÿöSÿöS+ÿöS-ÿöS/ÿöS1ÿöS3ÿöS9ÿöS<ÿöS>ÿöS@ÿöS2ÿöS éÿöS òÿØS õÿØS öÿØUÿÄUÿÎUÿÄUDÿìUFÿöUGÿûUHÿìUJÿìUPÿöUQÿöURÿñUTÿûUVÿöUXÿûU[ÿöU]ÿöUmÿÎU¢ÿìU£ÿìU¤ÿìU¥ÿìU¦ÿìU§ÿìU¨ÿìU©ÿöUªÿìU«ÿìU¬ÿìU­ÿìU²ÿìU³ÿöU´ÿñUµÿñU¶ÿñU·ÿñU¸ÿñUºÿñU»ÿûU¼ÿûU½ÿûU¾ÿûUÃÿìUÅÿìUÇÿìUËÿöUÏÿöUÑÿûUÓÿûUÕÿìU×ÿìUáÿìUãÿìUåÿìUÿöUÿöU ÿöUÿñUÿñUÿñUÿñUÿöU!ÿöU#ÿöU+ÿûU-ÿûU/ÿûU1ÿûU3ÿûU<ÿöU>ÿöU@ÿöU2ÿöU ÿûU [ÿöU ]ÿöU ÿÎVÿØVÿØVÿØVDÿöVFÿûVIÿìVJÿöVMÿìVPÿöVQÿöVRÿöVSÿöVUÿìVVÿöVWÿìVXÿñVYÿìVZÿìV[ÿØV\ÿìV]ÿöVmÿØV}ÿâV¢ÿöV£ÿöV¤ÿöV¥ÿöV¦ÿöV§ÿöV¨ÿöV©ÿûV³ÿöV´ÿöVµÿöV¶ÿöV·ÿöV¸ÿöVºÿöV»ÿñV¼ÿñV½ÿñV¾ÿñV¿ÿìVÁÿìVÃÿöVÅÿöVÇÿöVËÿûVÏÿûVáÿöVãÿöVåÿöVÿöVÿöV ÿöVÿöVÿöVÿöVÿöVÿìVÿöV!ÿöV#ÿöV%ÿìV+ÿñV-ÿñV/ÿñV1ÿñV3ÿñV9ÿìV<ÿöV>ÿöV@ÿöV2ÿöV ÿìV QÿöV [ÿöV ]ÿöV eÿìV gÿìV éÿìV òÿ°V õÿ°V öÿ°V ÿØV ÿâVÙÿìVÚÿìVÛÿìVÜÿìVÝÿìWDÿöWFÿöWGÿûWHÿûWIÿñWJÿöWPÿöWQÿöWRÿñWTÿûWUÿöWVÿöWWÿñW[ÿìW]ÿöW}ÿØW¢ÿöW£ÿöW¤ÿöW¥ÿöW¦ÿöW§ÿöW¨ÿöW©ÿöWªÿûW«ÿûW¬ÿûW­ÿûW²ÿûW³ÿöW´ÿñWµÿñW¶ÿñW·ÿñW¸ÿñWºÿñWÃÿöWÅÿöWÇÿöWËÿöWÏÿöWÑÿûWÓÿûWÕÿûW×ÿûWáÿöWãÿöWåÿöWÿöWÿöW ÿöWÿñWÿñWÿñWÿñWÿöWÿöW!ÿöW#ÿöW%ÿñW<ÿöW>ÿöW@ÿöW2ÿöW ÿûW ÿñW [ÿöW ]ÿöW eÿñW gÿñW ÿØWÙÿñWÚÿñWÛÿñWÜÿñWÝÿñXÿØXÿÄXÿØXFÿöXGÿûXHÿöXRÿöXTÿûXmÿÄX}ÿâX©ÿöXªÿöX«ÿöX¬ÿöX­ÿöX²ÿöX´ÿöXµÿöX¶ÿöX·ÿöX¸ÿöXºÿöXËÿöXÏÿöXÑÿûXÓÿûXÕÿöX×ÿöXÿöXÿöXÿöXÿöX ÿûX òÿØX õÿØX öÿØX ÿÄX ÿâYÿÄYÿìYÿÄYDÿìYFÿìYGÿñYHÿìYIÿöYJÿìYMÿìYPÿØYQÿØYRÿçYSÿâYTÿñYUÿçYVÿìYWÿöYXÿâY[ÿìY]ÿØYmÿìY}ÿØY¢ÿìY£ÿìY¤ÿìY¥ÿìY¦ÿìY§ÿìY¨ÿìY©ÿìYªÿìY«ÿìY¬ÿìY­ÿìY²ÿìY³ÿØY´ÿçYµÿçY¶ÿçY·ÿçY¸ÿçYºÿçY»ÿâY¼ÿâY½ÿâY¾ÿâYÃÿìYÅÿìYÇÿìYËÿìYÏÿìYÑÿñYÓÿñYÕÿìY×ÿìYáÿìYãÿìYåÿìYÿØYÿØY ÿØYÿçYÿçYÿçYÿçYÿçYÿìY!ÿìY#ÿìY%ÿöY+ÿâY-ÿâY/ÿâY1ÿâY3ÿâY<ÿØY>ÿØY@ÿØY2ÿØY ÿñY ÿöY QÿâY [ÿìY ]ÿìY eÿöY gÿöY òÿìY õÿìY öÿìY ÿìY ÿØYÙÿöYÚÿöYÛÿöYÜÿöYÝÿöZÿÄZÿìZÿÄZDÿìZFÿìZGÿñZHÿìZIÿöZJÿìZMÿìZPÿØZQÿØZRÿçZSÿâZTÿñZUÿçZVÿìZWÿöZXÿâZ[ÿìZ]ÿØZmÿìZ}ÿØZ¢ÿìZ£ÿìZ¤ÿìZ¥ÿìZ¦ÿìZ§ÿìZ¨ÿìZ©ÿìZªÿìZ«ÿìZ¬ÿìZ­ÿìZ²ÿìZ³ÿØZ´ÿçZµÿçZ¶ÿçZ·ÿçZ¸ÿçZºÿçZ»ÿâZ¼ÿâZ½ÿâZ¾ÿâZÃÿìZÅÿìZÇÿìZËÿìZÏÿìZÑÿñZÓÿñZÕÿìZ×ÿìZáÿìZãÿìZåÿìZÿØZÿØZ ÿØZÿçZÿçZÿçZÿçZÿçZÿìZ!ÿìZ#ÿìZ%ÿöZ+ÿâZ-ÿâZ/ÿâZ1ÿâZ3ÿâZ<ÿØZ>ÿØZ@ÿØZ2ÿØZ ÿñZ ÿöZ QÿâZ [ÿìZ ]ÿìZ eÿöZ gÿöZ òÿìZ õÿìZ öÿìZ ÿìZ ÿØZÙÿöZÚÿöZÛÿöZÜÿöZÝÿö[ÿØ[ÿÄ[ÿØ[Dÿö[Fÿì[Gÿñ[Hÿì[Jÿö[Pÿì[Qÿì[Rÿç[Sÿö[Tÿñ[Uÿì[Vÿö[Xÿì[Yÿì[Zÿì[\ÿì[]ÿì[mÿÄ[}ÿÄ[¢ÿö[£ÿö[¤ÿö[¥ÿö[¦ÿö[§ÿö[¨ÿö[©ÿì[ªÿì[«ÿì[¬ÿì[­ÿì[²ÿì[³ÿì[´ÿç[µÿç[¶ÿç[·ÿç[¸ÿç[ºÿç[»ÿì[¼ÿì[½ÿì[¾ÿì[¿ÿì[Áÿì[Ãÿö[Åÿö[Çÿö[Ëÿì[Ïÿì[Ñÿñ[Óÿñ[Õÿì[×ÿì[áÿö[ãÿö[åÿö[ÿì[ÿì[ ÿì[ÿç[ÿç[ÿç[ÿç[ÿì[ÿö[!ÿö[#ÿö[+ÿì[-ÿì[/ÿì[1ÿì[3ÿì[9ÿì[<ÿì[>ÿì[@ÿì[2ÿì[ ÿñ[ Qÿö[ [ÿö[ ]ÿö[ éÿì[ òÿÄ[ õÿÄ[ öÿÄ[ ÿÄ[ ÿÄ\ÿÄ\ÿì\ÿÄ\Dÿì\Fÿì\Gÿñ\Hÿì\Iÿö\Jÿì\Mÿì\PÿØ\QÿØ\Rÿç\Sÿâ\Tÿñ\Uÿç\Vÿì\Wÿö\Xÿâ\[ÿì\]ÿØ\mÿì\}ÿØ\¢ÿì\£ÿì\¤ÿì\¥ÿì\¦ÿì\§ÿì\¨ÿì\©ÿì\ªÿì\«ÿì\¬ÿì\­ÿì\²ÿì\³ÿØ\´ÿç\µÿç\¶ÿç\·ÿç\¸ÿç\ºÿç\»ÿâ\¼ÿâ\½ÿâ\¾ÿâ\Ãÿì\Åÿì\Çÿì\Ëÿì\Ïÿì\Ñÿñ\Óÿñ\Õÿì\×ÿì\áÿì\ãÿì\åÿì\ÿØ\ÿØ\ ÿØ\ÿç\ÿç\ÿç\ÿç\ÿç\ÿì\!ÿì\#ÿì\%ÿö\+ÿâ\-ÿâ\/ÿâ\1ÿâ\3ÿâ\<ÿØ\>ÿØ\@ÿØ\2ÿØ\ ÿñ\ ÿö\ Qÿâ\ [ÿì\ ]ÿì\ eÿö\ gÿö\ òÿì\ õÿì\ öÿì\ ÿì\ ÿØ\Ùÿö\Úÿö\Ûÿö\Üÿö\Ýÿö]ÿØ]ÿº]ÿØ]Dÿì]Fÿì]Gÿñ]Hÿì]Iÿö]Jÿì]Mÿö]Pÿâ]Qÿâ]Rÿç]Sÿì]Tÿñ]Uÿâ]Vÿì]Wÿö]XÿÝ]Yÿì]Zÿì][ÿì]\ÿì]]ÿâ]mÿº]}ÿâ]¢ÿì]£ÿì]¤ÿì]¥ÿì]¦ÿì]§ÿì]¨ÿì]©ÿì]ªÿì]«ÿì]¬ÿì]­ÿì]²ÿì]³ÿâ]´ÿç]µÿç]¶ÿç]·ÿç]¸ÿç]ºÿç]»ÿÝ]¼ÿÝ]½ÿÝ]¾ÿÝ]¿ÿì]Áÿì]Ãÿì]Åÿì]Çÿì]Ëÿì]Ïÿì]Ñÿñ]Óÿñ]Õÿì]×ÿì]áÿì]ãÿì]åÿì]ÿâ]ÿâ] ÿâ]ÿç]ÿç]ÿç]ÿç]ÿâ]ÿì]!ÿì]#ÿì]%ÿö]+ÿÝ]-ÿÝ]/ÿÝ]1ÿÝ]3ÿÝ]9ÿì]<ÿâ]>ÿâ]@ÿâ]2ÿâ] ÿñ] ÿö] Qÿì] [ÿì] ]ÿì] eÿö] gÿö] éÿì] òÿØ] õÿØ] öÿØ] ÿº] ÿâ]Ùÿö]Úÿö]Ûÿö]Üÿö]Ýÿöm$ÿØm&ÿâm*ÿâm2ÿâm4ÿâm6ÿâm7ÿÎm9ÿÎm:ÿÎm;ÿÎm<ÿÎm=ÿÎmDÿâmFÿìmGÿìmHÿìmIÿìmJÿâmMÿömPÿâmQÿâmRÿìmSÿâmTÿìmUÿâmWÿìmXÿâmYÿØmZÿØm[ÿØm\ÿØm]ÿâm‚ÿØmƒÿØm„ÿØm…ÿØm†ÿØmˆÿØm‰ÿâm”ÿâm•ÿâm–ÿâm—ÿâm˜ÿâmšÿâmŸÿÎm¢ÿâm£ÿâm¤ÿâm¥ÿâm¦ÿâm§ÿâm¨ÿâm©ÿìmªÿìm«ÿìm¬ÿìm­ÿìm²ÿìm³ÿâm´ÿìmµÿìm¶ÿìm·ÿìm¸ÿìmºÿìm»ÿâm¼ÿâm½ÿâm¾ÿâm¿ÿØmÁÿØmÂÿØmÃÿâmÅÿâmÈÿâmÊÿâmËÿìmÌÿâmÎÿâmÏÿìmÑÿìmÕÿìm×ÿìmÞÿâmàÿâmáÿâmâÿâmãÿâmäÿâmåÿâmÿâmÿâm ÿâmÿâmÿìmÿâmÿìmÿâmÿìmÿâmÿìmÿâmÿâm ÿâm"ÿâm$ÿÎm%ÿìm&ÿÎm+ÿâm-ÿâm/ÿâm3ÿâm8ÿÎm9ÿØm:ÿÎm;ÿÎm<ÿâm=ÿÎm>ÿâm?ÿÎm@ÿâm2ÿâm ÿìm ;ÿâm Qÿâm Zÿâm \ÿâm dÿÎm eÿìm fÿÎm gÿìm èÿÎm éÿØmÙÿìmÚÿìmÛÿìmÜÿìmÝÿì}$ÿÎ}&ÿì}*ÿì}-ÿì}2ÿì}4ÿì}6ÿö}7ÿÎ}9ÿÎ}:ÿÎ};ÿÎ}<ÿÎ}=ÿÎ}DÿØ}IÿØ}JÿØ}Mÿâ}PÿØ}QÿØ}SÿØ}UÿØ}VÿÎ}WÿØ}XÿØ}YÿÄ}ZÿÄ}[ÿÎ}\ÿÄ}]ÿØ}‚ÿÎ}ƒÿÎ}„ÿÎ}…ÿÎ}†ÿÎ}ˆÿÎ}‰ÿì}”ÿì}•ÿì}–ÿì}—ÿì}˜ÿì}šÿì}ŸÿÎ}¢ÿØ}£ÿØ}¤ÿØ}¥ÿØ}¦ÿØ}§ÿØ}¨ÿØ}³ÿØ}»ÿØ}¼ÿØ}½ÿØ}¾ÿØ}¿ÿÄ}ÁÿÄ}ÂÿÎ}ÃÿØ}ÅÿØ}Èÿì}Êÿì}Ìÿì}Îÿì}Þÿì}àÿì}áÿØ}âÿì}ãÿØ}äÿì}åÿØ}ÿØ}ÿØ} ÿØ}ÿì}ÿì}ÿì}ÿì}ÿØ}ÿö}ÿÎ} ÿö}!ÿÎ}"ÿö}#ÿÎ}$ÿÎ}%ÿØ}&ÿÎ}+ÿØ}-ÿØ}/ÿØ}3ÿØ}8ÿÎ}9ÿÄ}:ÿÎ};ÿÎ}<ÿØ}=ÿÎ}>ÿØ}?ÿÎ}@ÿØ}2ÿØ} ÿØ} ;ÿØ} QÿØ} Zÿö} [ÿÎ} \ÿö} ]ÿÎ} dÿÎ} eÿØ} fÿÎ} gÿØ} èÿÎ} éÿÄ}ÙÿØ}ÚÿØ}ÛÿØ}ÜÿØ}ÝÿØ‚ÿì‚ÿ΂ÿì‚&ÿØ‚*ÿØ‚,ÿØ‚2ÿØ‚4ÿØ‚6ÿâ‚7ÿØ‚9ÿÄ‚:ÿÄ‚;ÿö‚<ÿÄ‚=ÿö‚Dÿì‚Fÿö‚Gÿû‚Hÿì‚Iÿâ‚Jÿì‚Pÿâ‚Qÿâ‚Rÿñ‚Sÿì‚Tÿû‚Uÿâ‚Vÿì‚Wÿâ‚Xÿç‚Yÿâ‚Zÿâ‚\ÿâ‚]ÿâ‚mÿ΂}ÿØ‚‰ÿØ‚ŽÿØ‚ÿØ‚ÿØ‚‘ÿØ‚”ÿØ‚•ÿØ‚–ÿØ‚—ÿØ‚˜ÿØ‚šÿØ‚ŸÿÄ‚¢ÿì‚£ÿ삤ÿì‚¥ÿ삦ÿì‚§ÿ삨ÿì‚©ÿö‚ªÿì‚«ÿ사ÿì‚­ÿ삲ÿ삳ÿâ‚´ÿñ‚µÿñ‚¶ÿñ‚·ÿñ‚¸ÿñ‚ºÿñ‚»ÿ炼ÿ炽ÿ炾ÿç‚¿ÿâ‚Áÿâ‚Ãÿì‚Åÿì‚Çÿì‚ÈÿØ‚ÊÿØ‚Ëÿö‚ÌÿØ‚ÎÿØ‚Ïÿö‚Ñÿû‚Õÿì‚×ÿì‚Ûÿì‚ÞÿØ‚àÿØ‚áÿì‚âÿØ‚ãÿì‚äÿØ‚åÿì‚ÿâ‚ÿâ‚ ÿâ‚ÿØ‚ÿñ‚ÿØ‚ÿñ‚ÿØ‚ÿñ‚ÿØ‚ÿñ‚ÿâ‚ÿâ‚ÿì‚ ÿâ‚!ÿì‚"ÿâ‚#ÿì‚$ÿØ‚%ÿâ‚&ÿØ‚+ÿç‚-ÿç‚/ÿç‚1ÿç‚3ÿç‚8ÿÄ‚9ÿâ‚:ÿÄ‚;ÿö‚<ÿâ‚=ÿö‚>ÿâ‚?ÿö‚@ÿâ‚ ;ÿâ‚ Qÿì‚ Zÿâ‚ [ÿì‚ \ÿâ‚ ]ÿì‚ dÿØ‚ eÿâ‚ fÿØ‚ gÿâ‚ èÿÄ‚ éÿâ‚ òÿ΂ õÿ΂ öÿ΂ ÿ΂ ÿØ‚Ùÿâ‚Úÿâ‚Üÿâ‚Ýÿâƒÿìƒÿ΃ÿìƒ&ÿ؃*ÿ؃,ÿ؃2ÿ؃4ÿ؃6ÿâƒ7ÿ؃9ÿă:ÿă;ÿöƒ<ÿă=ÿöƒDÿìƒFÿöƒGÿûƒHÿìƒIÿâƒJÿìƒPÿâƒQÿâƒRÿñƒSÿìƒTÿûƒUÿâƒVÿìƒWÿâƒXÿçƒYÿâƒZÿâƒ\ÿâƒ]ÿâƒmÿ΃}ÿ؃‰ÿ؃Žÿ؃ÿ؃ÿ؃‘ÿ؃”ÿ؃•ÿ؃–ÿ؃—ÿ؃˜ÿ؃šÿ؃Ÿÿă¢ÿ샣ÿ샤ÿ샥ÿ샦ÿ샧ÿ샨ÿ샩ÿöƒªÿ샫ÿ샬ÿ샭ÿ샲ÿ샳ÿ⃴ÿñƒµÿñƒ¶ÿñƒ·ÿñƒ¸ÿñƒºÿñƒ»ÿ烼ÿ烽ÿ烾ÿ烿ÿâƒÁÿâƒÃÿìƒÅÿìƒÇÿìƒÈÿ؃Êÿ؃ËÿöƒÌÿ؃Îÿ؃ÏÿöƒÑÿûƒÕÿìƒ×ÿìƒÛÿìƒÞÿ؃àÿ؃áÿìƒâÿ؃ãÿìƒäÿ؃åÿìƒÿâƒÿ⃠ÿâƒÿ؃ÿñƒÿ؃ÿñƒÿ؃ÿñƒÿ؃ÿñƒÿâƒÿâƒÿìƒ ÿâƒ!ÿìƒ"ÿâƒ#ÿìƒ$ÿ؃%ÿâƒ&ÿ؃+ÿçƒ-ÿçƒ/ÿçƒ1ÿçƒ3ÿçƒ8ÿă9ÿâƒ:ÿă;ÿöƒ<ÿâƒ=ÿöƒ>ÿâƒ?ÿöƒ@ÿ⃠;ÿ⃠Qÿìƒ Zÿ⃠[ÿìƒ \ÿ⃠]ÿìƒ dÿ؃ eÿ⃠fÿ؃ gÿ⃠èÿă éÿ⃠òÿ΃ õÿ΃ öÿ΃ ÿ΃ ÿ؃ÙÿâƒÚÿâƒÜÿâƒÝÿâ„ÿì„ÿ΄ÿì„&ÿØ„*ÿØ„,ÿØ„2ÿØ„4ÿØ„6ÿâ„7ÿØ„9ÿÄ„:ÿÄ„;ÿö„<ÿÄ„=ÿö„Dÿì„Fÿö„Gÿû„Hÿì„Iÿâ„Jÿì„Pÿâ„Qÿâ„Rÿñ„Sÿì„Tÿû„Uÿâ„Vÿì„Wÿâ„Xÿç„Yÿâ„Zÿâ„\ÿâ„]ÿâ„mÿ΄}ÿØ„‰ÿØ„ŽÿØ„ÿØ„ÿØ„‘ÿØ„”ÿØ„•ÿØ„–ÿØ„—ÿØ„˜ÿØ„šÿØ„ŸÿÄ„¢ÿì„£ÿ설ÿì„¥ÿ섦ÿì„§ÿ섨ÿì„©ÿö„ªÿì„«ÿ섬ÿì„­ÿ섲ÿ섳ÿâ„´ÿñ„µÿñ„¶ÿñ„·ÿñ„¸ÿñ„ºÿñ„»ÿ焼ÿ焽ÿ焾ÿç„¿ÿâ„Áÿâ„Ãÿì„Åÿì„Çÿì„ÈÿØ„ÊÿØ„Ëÿö„ÌÿØ„ÎÿØ„Ïÿö„Ñÿû„Õÿì„×ÿì„Ûÿì„ÞÿØ„àÿØ„áÿì„âÿØ„ãÿì„äÿØ„åÿì„ÿâ„ÿâ„ ÿâ„ÿØ„ÿñ„ÿØ„ÿñ„ÿØ„ÿñ„ÿØ„ÿñ„ÿâ„ÿâ„ÿì„ ÿâ„!ÿì„"ÿâ„#ÿì„$ÿØ„%ÿâ„&ÿØ„+ÿç„-ÿç„/ÿç„1ÿç„3ÿç„8ÿÄ„9ÿâ„:ÿÄ„;ÿö„<ÿâ„=ÿö„>ÿâ„?ÿö„@ÿâ„ ;ÿâ„ Qÿì„ Zÿâ„ [ÿì„ \ÿâ„ ]ÿì„ dÿØ„ eÿâ„ fÿØ„ gÿâ„ èÿÄ„ éÿâ„ òÿ΄ õÿ΄ öÿ΄ ÿ΄ ÿØ„Ùÿâ„Úÿâ„Üÿâ„Ýÿâ…ÿì…ÿÎ…ÿì…&ÿØ…*ÿØ…,ÿØ…2ÿØ…4ÿØ…6ÿâ…7ÿØ…9ÿÄ…:ÿÄ…;ÿö…<ÿÄ…=ÿö…Dÿì…Fÿö…Gÿû…Hÿì…Iÿâ…Jÿì…Pÿâ…Qÿâ…Rÿñ…Sÿì…Tÿû…Uÿâ…Vÿì…Wÿâ…Xÿç…Yÿâ…Zÿâ…\ÿâ…]ÿâ…mÿÎ…}ÿØ…‰ÿØ…ŽÿØ…ÿØ…ÿØ…‘ÿØ…”ÿØ…•ÿØ…–ÿØ…—ÿØ…˜ÿØ…šÿØ…ŸÿÄ…¢ÿì…£ÿì…¤ÿì…¥ÿì…¦ÿì…§ÿì…¨ÿì…©ÿö…ªÿì…«ÿì…¬ÿì…­ÿì…²ÿì…³ÿâ…´ÿñ…µÿñ…¶ÿñ…·ÿñ…¸ÿñ…ºÿñ…»ÿç…¼ÿç…½ÿç…¾ÿç…¿ÿâ…Áÿâ…Ãÿì…Åÿì…Çÿì…ÈÿØ…ÊÿØ…Ëÿö…ÌÿØ…ÎÿØ…Ïÿö…Ñÿû…Õÿì…×ÿì…Ûÿì…ÞÿØ…àÿØ…áÿì…âÿØ…ãÿì…äÿØ…åÿì…ÿâ…ÿâ… ÿâ…ÿØ…ÿñ…ÿØ…ÿñ…ÿØ…ÿñ…ÿØ…ÿñ…ÿâ…ÿâ…ÿì… ÿâ…!ÿì…"ÿâ…#ÿì…$ÿØ…%ÿâ…&ÿØ…+ÿç…-ÿç…/ÿç…1ÿç…3ÿç…8ÿÄ…9ÿâ…:ÿÄ…;ÿö…<ÿâ…=ÿö…>ÿâ…?ÿö…@ÿâ… ;ÿâ… Qÿì… Zÿâ… [ÿì… \ÿâ… ]ÿì… dÿØ… eÿâ… fÿØ… gÿâ… èÿÄ… éÿâ… òÿÎ… õÿÎ… öÿÎ… ÿÎ… ÿØ…Ùÿâ…Úÿâ…Üÿâ…Ýÿâ†ÿì†ÿΆÿì†&ÿ؆*ÿ؆,ÿ؆2ÿ؆4ÿ؆6ÿâ†7ÿ؆9ÿĆ:ÿĆ;ÿö†<ÿĆ=ÿö†Dÿì†Fÿö†Gÿû†Hÿì†Iÿâ†Jÿì†Pÿâ†Qÿâ†Rÿñ†Sÿì†Tÿû†Uÿâ†Vÿì†Wÿâ†Xÿç†Yÿâ†Zÿâ†\ÿâ†]ÿâ†mÿΆ}ÿ؆‰ÿ؆Žÿ؆ÿ؆ÿ؆‘ÿ؆”ÿ؆•ÿ؆–ÿ؆—ÿ؆˜ÿ؆šÿ؆ŸÿĆ¢ÿ솣ÿ솤ÿ솥ÿ솦ÿ솧ÿ솨ÿ솩ÿö†ªÿ솫ÿ솬ÿ솭ÿ솲ÿ솳ÿ↴ÿñ†µÿñ†¶ÿñ†·ÿñ†¸ÿñ†ºÿñ†»ÿ熼ÿ熽ÿ熾ÿ熿ÿâ†Áÿâ†Ãÿì†Åÿì†Çÿì†Èÿ؆Êÿ؆Ëÿö†Ìÿ؆Îÿ؆Ïÿö†Ñÿû†Õÿì†×ÿì†Ûÿì†Þÿ؆àÿ؆áÿì†âÿ؆ãÿì†äÿ؆åÿì†ÿâ†ÿ↠ÿâ†ÿ؆ÿñ†ÿ؆ÿñ†ÿ؆ÿñ†ÿ؆ÿñ†ÿâ†ÿâ†ÿì† ÿâ†!ÿì†"ÿâ†#ÿì†$ÿ؆%ÿâ†&ÿ؆+ÿç†-ÿç†/ÿç†1ÿç†3ÿç†8ÿĆ9ÿâ†:ÿĆ;ÿö†<ÿâ†=ÿö†>ÿâ†?ÿö†@ÿ↠;ÿ↠Qÿì† Zÿ↠[ÿì† \ÿ↠]ÿì† dÿ؆ eÿ↠fÿ؆ gÿ↠èÿĆ éÿ↠òÿΆ õÿΆ öÿΆ ÿΆ ÿ؆Ùÿâ†Úÿâ†Üÿâ†Ýÿâ‡ÿì‡ÿ·ÿì‡&ÿ؇*ÿ؇,ÿ؇2ÿ؇4ÿ؇6ÿâ‡7ÿ؇9ÿć:ÿć;ÿö‡<ÿć=ÿö‡Dÿì‡Fÿö‡Gÿû‡Hÿì‡Iÿâ‡Jÿì‡Pÿâ‡Qÿâ‡Rÿñ‡Sÿì‡Tÿû‡Uÿâ‡Vÿì‡Wÿâ‡Xÿç‡Yÿâ‡Zÿâ‡\ÿâ‡]ÿâ‡mÿ·}ÿ؇‰ÿ؇Žÿ؇ÿ؇ÿ؇‘ÿ؇”ÿ؇•ÿ؇–ÿ؇—ÿ؇˜ÿ؇šÿ؇Ÿÿć¢ÿ쇣ÿ쇤ÿ쇥ÿ쇦ÿ쇧ÿ쇨ÿ쇩ÿö‡ªÿ쇫ÿ쇬ÿ쇭ÿ쇲ÿ쇳ÿ⇴ÿñ‡µÿñ‡¶ÿñ‡·ÿñ‡¸ÿñ‡ºÿñ‡»ÿ燼ÿ燽ÿ燾ÿ燿ÿâ‡Áÿâ‡Ãÿì‡Åÿì‡Çÿì‡Èÿ؇Êÿ؇Ëÿö‡Ìÿ؇Îÿ؇Ïÿö‡Ñÿû‡Õÿì‡×ÿì‡Ûÿì‡Þÿ؇àÿ؇áÿì‡âÿ؇ãÿì‡äÿ؇åÿì‡ÿâ‡ÿ⇠ÿâ‡ÿ؇ÿñ‡ÿ؇ÿñ‡ÿ؇ÿñ‡ÿ؇ÿñ‡ÿâ‡ÿâ‡ÿì‡ ÿâ‡!ÿì‡"ÿâ‡#ÿì‡$ÿ؇%ÿâ‡&ÿ؇+ÿç‡-ÿç‡/ÿç‡1ÿç‡3ÿç‡8ÿć9ÿâ‡:ÿć;ÿö‡<ÿâ‡=ÿö‡>ÿâ‡?ÿö‡@ÿ⇠;ÿ⇠Qÿì‡ Zÿ⇠[ÿì‡ \ÿ⇠]ÿì‡ dÿ؇ eÿ⇠fÿ؇ gÿ⇠èÿć éÿ⇠òÿ· õÿ· öÿ· ÿ· ÿ؇Ùÿâ‡Úÿâ‡Üÿâ‡Ýÿâˆ$ÿâˆ&ÿ؈*ÿ؈,ÿ؈-ÿìˆ2ÿ؈4ÿ؈6ÿΈ7ÿìˆ9ÿΈ:ÿΈ;ÿâˆ<ÿΈ=ÿâˆDÿâˆFÿâˆGÿçˆHÿâˆIÿâˆJÿâˆMÿâˆPÿ؈Qÿ؈Rÿ݈SÿìˆTÿçˆUÿâˆVÿìˆWÿâˆXÿÓˆYÿ؈Zÿ؈[ÿâˆ\ÿ؈]ÿ؈‚ÿ∃ÿ∄ÿ∅ÿ∆ÿ∇ÿ∈ÿ∉ÿ؈Žÿ؈ÿ؈ÿ؈‘ÿ؈”ÿ؈•ÿ؈–ÿ؈—ÿ؈˜ÿ؈šÿ؈ŸÿΈ¢ÿ∣ÿ∤ÿ∥ÿ∦ÿ∧ÿ∨ÿ∩ÿ∪ÿ∫ÿ∬ÿ∭ÿ∲ÿ∳ÿ؈´ÿ݈µÿ݈¶ÿ݈·ÿ݈¸ÿ݈ºÿ݈»ÿÓˆ¼ÿÓˆ½ÿÓˆ¾ÿÓˆ¿ÿ؈Áÿ؈ÂÿâˆÃÿâˆÄÿâˆÅÿâˆÆÿâˆÇÿâˆÈÿ؈Êÿ؈ËÿâˆÌÿ؈Îÿ؈ÏÿâˆÑÿçˆÕÿâˆ×ÿâˆÛÿâˆÞÿ؈àÿ؈áÿâˆâÿ؈ãÿâˆäÿ؈åÿâˆÿ؈ÿ؈ ÿ؈ÿ؈ÿ݈ÿ؈ÿ݈ÿ؈ÿ݈ÿ؈ÿ݈ÿâˆÿΈÿìˆ ÿΈ!ÿìˆ"ÿΈ#ÿìˆ$ÿìˆ%ÿâˆ&ÿìˆ+ÿÓˆ-ÿÓˆ/ÿÓˆ1ÿÓˆ3ÿÓˆ8ÿΈ9ÿ؈:ÿΈ;ÿâˆ<ÿ؈=ÿâˆ>ÿ؈?ÿâˆ@ÿ؈ ;ÿ؈ Qÿìˆ ZÿΈ [ÿìˆ \ÿΈ ]ÿìˆ dÿìˆ eÿ∠fÿìˆ gÿ∠èÿΈ éÿ؈ÙÿâˆÚÿâˆÜÿâˆÝÿâ‰ÿâ‰ÿâ‰$ÿ؉&ÿì‰*ÿì‰,ÿ؉2ÿì‰4ÿì‰6ÿö‰7ÿ؉9ÿΉ:ÿΉ;ÿ؉<ÿΉ=ÿ؉Dÿì‰Iÿì‰Jÿì‰Mÿâ‰Pÿâ‰Qÿâ‰Rÿû‰Sÿì‰Uÿì‰Vÿì‰Wÿì‰Xÿç‰Yÿö‰Zÿö‰[ÿâ‰\ÿö‰]ÿâ‰}ÿ쉂ÿ؉ƒÿ؉„ÿ؉…ÿ؉†ÿ؉‡ÿ؉ˆÿ؉‰ÿ쉎ÿ؉ÿ؉ÿ؉‘ÿ؉”ÿ쉕ÿ쉖ÿ쉗ÿ쉘ÿ쉚ÿ쉟ÿΉ¢ÿ쉣ÿ쉤ÿ쉥ÿ쉦ÿ쉧ÿ쉨ÿ쉳ÿ≴ÿû‰µÿû‰¶ÿû‰·ÿû‰¸ÿû‰ºÿû‰»ÿ牼ÿ牽ÿ牾ÿ牿ÿö‰Áÿö‰Âÿ؉Ãÿì‰Äÿ؉Åÿì‰Æÿ؉Çÿì‰Èÿì‰Êÿì‰Ìÿì‰Îÿì‰Þÿì‰àÿì‰áÿì‰âÿì‰ãÿì‰äÿì‰åÿì‰ÿâ‰ÿ≠ÿâ‰ÿì‰ÿû‰ÿì‰ÿû‰ÿì‰ÿû‰ÿì‰ÿû‰ÿì‰ÿö‰ÿì‰ ÿö‰!ÿì‰"ÿö‰#ÿì‰$ÿ؉%ÿì‰&ÿ؉+ÿç‰-ÿç‰/ÿç‰1ÿç‰3ÿç‰8ÿΉ9ÿö‰:ÿΉ;ÿ؉<ÿâ‰=ÿ؉>ÿâ‰?ÿ؉@ÿ≠;ÿ≠Qÿì‰ Zÿö‰ [ÿì‰ \ÿö‰ ]ÿì‰ dÿ؉ eÿì‰ fÿ؉ gÿì‰ èÿΉ éÿö‰ òÿ؉ õÿ؉ öÿ؉ ÿì‰Ùÿì‰Úÿì‰Üÿì‰ÝÿìŠ$ÿâŠ&ÿØŠ*ÿØŠ,ÿØŠ-ÿìŠ2ÿØŠ4ÿØŠ6ÿΊ7ÿìŠ9ÿΊ:ÿΊ;ÿâŠ<ÿΊ=ÿâŠDÿâŠFÿâŠGÿçŠHÿâŠIÿâŠJÿâŠMÿâŠPÿØŠQÿØŠRÿÝŠSÿìŠTÿçŠUÿâŠVÿìŠWÿâŠXÿÓŠYÿØŠZÿØŠ[ÿâŠ\ÿØŠ]ÿØŠ‚ÿ⊃ÿ⊄ÿ⊅ÿ⊆ÿ⊇ÿ⊈ÿ⊉ÿØŠŽÿØŠÿØŠÿØŠ‘ÿØŠ”ÿØŠ•ÿØŠ–ÿØŠ—ÿØŠ˜ÿØŠšÿØŠŸÿΊ¢ÿ⊣ÿ⊤ÿ⊥ÿ⊦ÿ⊧ÿ⊨ÿ⊩ÿ⊪ÿ⊫ÿ⊬ÿ⊭ÿ⊲ÿ⊳ÿØŠ´ÿÝŠµÿÝŠ¶ÿÝŠ·ÿÝŠ¸ÿÝŠºÿÝŠ»ÿÓŠ¼ÿÓŠ½ÿÓŠ¾ÿÓŠ¿ÿØŠÁÿØŠÂÿâŠÃÿâŠÄÿâŠÅÿâŠÆÿâŠÇÿâŠÈÿØŠÊÿØŠËÿâŠÌÿØŠÎÿØŠÏÿâŠÑÿçŠÕÿâŠ×ÿâŠÛÿâŠÞÿØŠàÿØŠáÿâŠâÿØŠãÿâŠäÿØŠåÿâŠÿØŠÿØŠ ÿØŠÿØŠÿÝŠÿØŠÿÝŠÿØŠÿÝŠÿØŠÿÝŠÿâŠÿΊÿìŠ ÿΊ!ÿìŠ"ÿΊ#ÿìŠ$ÿìŠ%ÿâŠ&ÿìŠ+ÿÓŠ-ÿÓŠ/ÿÓŠ1ÿÓŠ3ÿÓŠ8ÿΊ9ÿØŠ:ÿΊ;ÿâŠ<ÿØŠ=ÿâŠ>ÿØŠ?ÿâŠ@ÿØŠ ;ÿØŠ QÿìŠ ZÿΊ [ÿìŠ \ÿΊ ]ÿìŠ dÿìŠ eÿ⊠fÿìŠ gÿ⊠èÿΊ éÿØŠÙÿâŠÚÿâŠÜÿâŠÝÿâ‹$ÿâ‹&ÿØ‹*ÿØ‹,ÿØ‹-ÿì‹2ÿØ‹4ÿØ‹6ÿ΋7ÿì‹9ÿ΋:ÿ΋;ÿâ‹<ÿ΋=ÿâ‹Dÿâ‹Fÿâ‹Gÿç‹Hÿâ‹Iÿâ‹Jÿâ‹Mÿâ‹PÿØ‹QÿØ‹RÿÝ‹Sÿì‹Tÿç‹Uÿâ‹Vÿì‹Wÿâ‹XÿÓ‹YÿØ‹ZÿØ‹[ÿâ‹\ÿØ‹]ÿØ‹‚ÿ⋃ÿâ‹„ÿâ‹…ÿ⋆ÿ⋇ÿ⋈ÿ⋉ÿØ‹ŽÿØ‹ÿØ‹ÿØ‹‘ÿØ‹”ÿØ‹•ÿØ‹–ÿØ‹—ÿØ‹˜ÿØ‹šÿØ‹Ÿÿ΋¢ÿâ‹£ÿ⋤ÿâ‹¥ÿ⋦ÿâ‹§ÿ⋨ÿâ‹©ÿ⋪ÿâ‹«ÿ⋬ÿâ‹­ÿ⋲ÿ⋳ÿØ‹´ÿÝ‹µÿÝ‹¶ÿÝ‹·ÿÝ‹¸ÿÝ‹ºÿÝ‹»ÿÓ‹¼ÿÓ‹½ÿÓ‹¾ÿÓ‹¿ÿØ‹ÁÿØ‹Âÿâ‹Ãÿâ‹Äÿâ‹Åÿâ‹Æÿâ‹Çÿâ‹ÈÿØ‹ÊÿØ‹Ëÿâ‹ÌÿØ‹ÎÿØ‹Ïÿâ‹Ñÿç‹Õÿâ‹×ÿâ‹Ûÿâ‹ÞÿØ‹àÿØ‹áÿâ‹âÿØ‹ãÿâ‹äÿØ‹åÿâ‹ÿØ‹ÿØ‹ ÿØ‹ÿØ‹ÿÝ‹ÿØ‹ÿÝ‹ÿØ‹ÿÝ‹ÿØ‹ÿÝ‹ÿâ‹ÿ΋ÿì‹ ÿ΋!ÿì‹"ÿ΋#ÿì‹$ÿì‹%ÿâ‹&ÿì‹+ÿÓ‹-ÿÓ‹/ÿÓ‹1ÿÓ‹3ÿÓ‹8ÿ΋9ÿØ‹:ÿ΋;ÿâ‹<ÿØ‹=ÿâ‹>ÿØ‹?ÿâ‹@ÿØ‹ ;ÿØ‹ Qÿì‹ Zÿ΋ [ÿì‹ \ÿ΋ ]ÿì‹ dÿì‹ eÿâ‹ fÿì‹ gÿâ‹ èÿ΋ éÿØ‹Ùÿâ‹Úÿâ‹Üÿâ‹ÝÿâŒ$ÿâŒ&ÿØŒ*ÿØŒ,ÿØŒ-ÿìŒ2ÿØŒ4ÿØŒ6ÿÎŒ7ÿìŒ9ÿÎŒ:ÿÎŒ;ÿâŒ<ÿÎŒ=ÿâŒDÿâŒFÿâŒGÿçŒHÿâŒIÿâŒJÿâŒMÿâŒPÿØŒQÿØŒRÿÝŒSÿìŒTÿçŒUÿâŒVÿìŒWÿâŒXÿÓŒYÿØŒZÿØŒ[ÿâŒ\ÿØŒ]ÿØŒ‚ÿ⌃ÿ⌄ÿ⌅ÿ⌆ÿ⌇ÿ⌈ÿ⌉ÿØŒŽÿØŒÿØŒÿØŒ‘ÿØŒ”ÿØŒ•ÿØŒ–ÿØŒ—ÿØŒ˜ÿØŒšÿØŒŸÿÎŒ¢ÿ⌣ÿ⌤ÿ⌥ÿ⌦ÿ⌧ÿ⌨ÿ〈ÿ〉ÿ⌫ÿ⌬ÿ⌭ÿ⌲ÿ⌳ÿØŒ´ÿÝŒµÿÝŒ¶ÿÝŒ·ÿÝŒ¸ÿÝŒºÿÝŒ»ÿÓŒ¼ÿÓŒ½ÿÓŒ¾ÿÓŒ¿ÿØŒÁÿØŒÂÿâŒÃÿâŒÄÿâŒÅÿâŒÆÿâŒÇÿâŒÈÿØŒÊÿØŒËÿâŒÌÿØŒÎÿØŒÏÿâŒÑÿçŒÕÿâŒ×ÿâŒÛÿâŒÞÿØŒàÿØŒáÿâŒâÿØŒãÿâŒäÿØŒåÿâŒÿØŒÿØŒ ÿØŒÿØŒÿÝŒÿØŒÿÝŒÿØŒÿÝŒÿØŒÿÝŒÿâŒÿÎŒÿìŒ ÿÎŒ!ÿìŒ"ÿÎŒ#ÿìŒ$ÿìŒ%ÿâŒ&ÿìŒ+ÿÓŒ-ÿÓŒ/ÿÓŒ1ÿÓŒ3ÿÓŒ8ÿÎŒ9ÿØŒ:ÿÎŒ;ÿâŒ<ÿØŒ=ÿâŒ>ÿØŒ?ÿâŒ@ÿØŒ ;ÿØŒ QÿìŒ ZÿÎŒ [ÿìŒ \ÿÎŒ ]ÿìŒ dÿìŒ eÿ⌠fÿìŒ gÿ⌠èÿÎŒ éÿØŒÙÿâŒÚÿâŒÜÿâŒÝÿâ$ÿâ&ÿØ*ÿØ,ÿØ-ÿì2ÿØ4ÿØ6ÿÎ7ÿì9ÿÎ:ÿÎ;ÿâ<ÿÎ=ÿâDÿâFÿâGÿçHÿâIÿâJÿâMÿâPÿØQÿØRÿÝSÿìTÿçUÿâVÿìWÿâXÿÓYÿØZÿØ[ÿâ\ÿØ]ÿØ‚ÿâƒÿâ„ÿâ…ÿâ†ÿâ‡ÿâˆÿâ‰ÿØŽÿØÿØÿØ‘ÿØ”ÿØ•ÿØ–ÿØ—ÿؘÿØšÿØŸÿ΢ÿâ£ÿâ¤ÿâ¥ÿâ¦ÿâ§ÿâ¨ÿâ©ÿâªÿâ«ÿâ¬ÿâ­ÿâ²ÿâ³ÿØ´ÿݵÿݶÿÝ·ÿݸÿݺÿÝ»ÿÓ¼ÿÓ½ÿÓ¾ÿÓ¿ÿØÁÿØÂÿâÃÿâÄÿâÅÿâÆÿâÇÿâÈÿØÊÿØËÿâÌÿØÎÿØÏÿâÑÿçÕÿâ×ÿâÛÿâÞÿØàÿØáÿââÿØãÿâäÿØåÿâÿØÿØ ÿØÿØÿÝÿØÿÝÿØÿÝÿØÿÝÿâÿÎÿì ÿÎ!ÿì"ÿÎ#ÿì$ÿì%ÿâ&ÿì+ÿÓ-ÿÓ/ÿÓ1ÿÓ3ÿÓ8ÿÎ9ÿØ:ÿÎ;ÿâ<ÿØ=ÿâ>ÿØ?ÿâ@ÿØ ;ÿØ Qÿì ZÿÎ [ÿì \ÿÎ ]ÿì dÿì eÿâ fÿì gÿâ èÿÎ éÿØÙÿâÚÿâÜÿâÝÿâŽ$ÿØŽ&ÿçŽ*ÿçŽ,ÿØŽ2ÿçŽ4ÿçŽ6ÿÝŽ7ÿöŽ9ÿØŽ:ÿØŽ;ÿØŽ<ÿØŽ=ÿØŽDÿâŽFÿìŽGÿìŽHÿâŽIÿöŽJÿâŽPÿâŽQÿâŽRÿìŽSÿâŽTÿìŽUÿâŽVÿâŽWÿöŽXÿØŽYÿìŽZÿìŽ[ÿâŽ\ÿìŽ]ÿ⎂ÿØŽƒÿØŽ„ÿØŽ…ÿØŽ†ÿØŽ‡ÿØŽˆÿØŽ‰ÿ玎ÿØŽÿØŽÿØŽ‘ÿØŽ”ÿ玕ÿ玖ÿ玗ÿ玘ÿ玚ÿ玟ÿØŽ¢ÿ⎣ÿ⎤ÿ⎥ÿ⎦ÿ⎧ÿ⎨ÿ⎩ÿ쎪ÿ⎫ÿ⎬ÿ⎭ÿ⎲ÿ⎳ÿ⎴ÿ쎵ÿ쎶ÿ쎷ÿ쎸ÿ쎺ÿ쎻ÿØŽ¼ÿØŽ½ÿØŽ¾ÿØŽ¿ÿìŽÁÿìŽÂÿØŽÃÿâŽÄÿØŽÅÿâŽÆÿØŽÇÿâŽÈÿçŽÊÿçŽËÿìŽÌÿçŽÎÿçŽÏÿìŽÑÿìŽÕÿâŽ×ÿâŽÛÿâŽÞÿçŽàÿçŽáÿâŽâÿçŽãÿâŽäÿçŽåÿâŽÿâŽÿ⎠ÿâŽÿçŽÿìŽÿçŽÿìŽÿçŽÿìŽÿçŽÿìŽÿâŽÿÝŽÿ⎠ÿÝŽ!ÿâŽ"ÿÝŽ#ÿâŽ$ÿöŽ%ÿöŽ&ÿöŽ+ÿØŽ-ÿØŽ/ÿØŽ1ÿØŽ3ÿØŽ8ÿØŽ9ÿìŽ:ÿØŽ;ÿØŽ<ÿâŽ=ÿØŽ>ÿâŽ?ÿØŽ@ÿ⎠;ÿ⎠Qÿ⎠ZÿÝŽ [ÿ⎠\ÿÝŽ ]ÿ⎠dÿöŽ eÿöŽ fÿöŽ gÿöŽ èÿØŽ éÿìŽÙÿöŽÚÿöŽÜÿöŽÝÿö$ÿØ&ÿç*ÿç,ÿØ2ÿç4ÿç6ÿÝ7ÿö9ÿØ:ÿØ;ÿØ<ÿØ=ÿØDÿâFÿìGÿìHÿâIÿöJÿâPÿâQÿâRÿìSÿâTÿìUÿâVÿâWÿöXÿØYÿìZÿì[ÿâ\ÿì]ÿâ‚ÿ؃ÿØ„ÿØ…ÿ؆ÿ؇ÿ؈ÿ؉ÿçŽÿØÿØÿØ‘ÿØ”ÿç•ÿç–ÿç—ÿç˜ÿçšÿçŸÿØ¢ÿâ£ÿâ¤ÿâ¥ÿâ¦ÿâ§ÿâ¨ÿâ©ÿìªÿâ«ÿâ¬ÿâ­ÿâ²ÿâ³ÿâ´ÿìµÿì¶ÿì·ÿì¸ÿìºÿì»ÿؼÿؽÿؾÿØ¿ÿìÁÿìÂÿØÃÿâÄÿØÅÿâÆÿØÇÿâÈÿçÊÿçËÿìÌÿçÎÿçÏÿìÑÿìÕÿâ×ÿâÛÿâÞÿçàÿçáÿââÿçãÿâäÿçåÿâÿâÿâ ÿâÿçÿìÿçÿìÿçÿìÿçÿìÿâÿÝÿâ ÿÝ!ÿâ"ÿÝ#ÿâ$ÿö%ÿö&ÿö+ÿØ-ÿØ/ÿØ1ÿØ3ÿØ8ÿØ9ÿì:ÿØ;ÿØ<ÿâ=ÿØ>ÿâ?ÿØ@ÿâ ;ÿâ Qÿâ ZÿÝ [ÿâ \ÿÝ ]ÿâ dÿö eÿö fÿö gÿö èÿØ éÿìÙÿöÚÿöÜÿöÝÿö$ÿØ&ÿç*ÿç,ÿØ2ÿç4ÿç6ÿÝ7ÿö9ÿØ:ÿØ;ÿØ<ÿØ=ÿØDÿâFÿìGÿìHÿâIÿöJÿâPÿâQÿâRÿìSÿâTÿìUÿâVÿâWÿöXÿØYÿìZÿì[ÿâ\ÿì]ÿâ‚ÿ؃ÿØ„ÿØ…ÿ؆ÿ؇ÿ؈ÿ؉ÿçŽÿØÿØÿØ‘ÿØ”ÿç•ÿç–ÿç—ÿç˜ÿçšÿçŸÿØ¢ÿâ£ÿâ¤ÿâ¥ÿâ¦ÿâ§ÿâ¨ÿâ©ÿìªÿâ«ÿâ¬ÿâ­ÿâ²ÿâ³ÿâ´ÿìµÿì¶ÿì·ÿì¸ÿìºÿì»ÿؼÿؽÿؾÿØ¿ÿìÁÿìÂÿØÃÿâÄÿØÅÿâÆÿØÇÿâÈÿçÊÿçËÿìÌÿçÎÿçÏÿìÑÿìÕÿâ×ÿâÛÿâÞÿçàÿçáÿââÿçãÿâäÿçåÿâÿâÿâ ÿâÿçÿìÿçÿìÿçÿìÿçÿìÿâÿÝÿâ ÿÝ!ÿâ"ÿÝ#ÿâ$ÿö%ÿö&ÿö+ÿØ-ÿØ/ÿØ1ÿØ3ÿØ8ÿØ9ÿì:ÿØ;ÿØ<ÿâ=ÿØ>ÿâ?ÿØ@ÿâ ;ÿâ Qÿâ ZÿÝ [ÿâ \ÿÝ ]ÿâ dÿö eÿö fÿö gÿö èÿØ éÿìÙÿöÚÿöÜÿöÝÿö‘$ÿØ‘&ÿç‘*ÿç‘,ÿØ‘2ÿç‘4ÿç‘6ÿÝ‘7ÿö‘9ÿØ‘:ÿØ‘;ÿØ‘<ÿØ‘=ÿØ‘Dÿâ‘Fÿì‘Gÿì‘Hÿâ‘Iÿö‘Jÿâ‘Pÿâ‘Qÿâ‘Rÿì‘Sÿâ‘Tÿì‘Uÿâ‘Vÿâ‘Wÿö‘XÿØ‘Yÿì‘Zÿì‘[ÿâ‘\ÿì‘]ÿâ‘‚ÿØ‘ƒÿØ‘„ÿØ‘…ÿØ‘†ÿØ‘‡ÿØ‘ˆÿØ‘‰ÿ瑎ÿØ‘ÿØ‘ÿØ‘‘ÿØ‘”ÿç‘•ÿç‘–ÿç‘—ÿ瑘ÿ瑚ÿ瑟ÿØ‘¢ÿâ‘£ÿ⑤ÿâ‘¥ÿ⑦ÿâ‘§ÿ⑨ÿâ‘©ÿ쑪ÿâ‘«ÿ⑬ÿâ‘­ÿ⑲ÿ⑳ÿâ‘´ÿ쑵ÿì‘¶ÿì‘·ÿ쑸ÿ쑺ÿì‘»ÿØ‘¼ÿØ‘½ÿØ‘¾ÿØ‘¿ÿì‘Áÿì‘ÂÿØ‘Ãÿâ‘ÄÿØ‘Åÿâ‘ÆÿØ‘Çÿâ‘Èÿç‘Êÿç‘Ëÿì‘Ìÿç‘Îÿç‘Ïÿì‘Ñÿì‘Õÿâ‘×ÿâ‘Ûÿâ‘Þÿç‘àÿç‘áÿâ‘âÿç‘ãÿâ‘äÿç‘åÿâ‘ÿâ‘ÿâ‘ ÿâ‘ÿç‘ÿì‘ÿç‘ÿì‘ÿç‘ÿì‘ÿç‘ÿì‘ÿâ‘ÿÝ‘ÿâ‘ ÿÝ‘!ÿâ‘"ÿÝ‘#ÿâ‘$ÿö‘%ÿö‘&ÿö‘+ÿØ‘-ÿØ‘/ÿØ‘1ÿØ‘3ÿØ‘8ÿØ‘9ÿì‘:ÿØ‘;ÿØ‘<ÿâ‘=ÿØ‘>ÿâ‘?ÿØ‘@ÿâ‘ ;ÿâ‘ Qÿâ‘ ZÿÝ‘ [ÿâ‘ \ÿÝ‘ ]ÿâ‘ dÿö‘ eÿö‘ fÿö‘ gÿö‘ èÿØ‘ éÿì‘Ùÿö‘Úÿö‘Üÿö‘Ýÿö’$ÿØ’&ÿì’*ÿì’,ÿØ’2ÿì’4ÿì’6ÿö’7ÿØ’9ÿÎ’:ÿÎ’;ÿØ’<ÿÎ’=ÿØ’Dÿì’Iÿì’Jÿì’Mÿâ’Pÿâ’Qÿâ’Rÿû’Sÿì’Uÿì’Vÿì’Wÿì’Xÿç’Yÿö’Zÿö’[ÿâ’\ÿö’]ÿâ’‚ÿØ’ƒÿØ’„ÿØ’…ÿØ’†ÿØ’‡ÿØ’ˆÿØ’‰ÿì’ŽÿØ’ÿØ’ÿØ’‘ÿØ’”ÿì’•ÿì’–ÿì’—ÿì’˜ÿì’šÿì’ŸÿÎ’¢ÿì’£ÿì’¤ÿì’¥ÿì’¦ÿì’§ÿì’¨ÿì’³ÿâ’´ÿû’µÿû’¶ÿû’·ÿû’¸ÿû’ºÿû’»ÿç’¼ÿç’½ÿç’¾ÿç’¿ÿö’Áÿö’ÂÿØ’Ãÿì’ÄÿØ’Åÿì’ÆÿØ’Çÿì’Èÿì’Êÿì’Ìÿì’Îÿì’Þÿì’àÿì’áÿì’âÿì’ãÿì’äÿì’åÿì’ÿâ’ÿâ’ ÿâ’ÿì’ÿû’ÿì’ÿû’ÿì’ÿû’ÿì’ÿû’ÿì’ÿö’ÿì’ ÿö’!ÿì’"ÿö’#ÿì’$ÿØ’%ÿì’&ÿØ’+ÿç’-ÿç’/ÿç’1ÿç’3ÿç’8ÿÎ’9ÿö’:ÿÎ’;ÿØ’<ÿâ’=ÿØ’>ÿâ’?ÿØ’@ÿâ’ ;ÿâ’ Qÿì’ Zÿö’ [ÿì’ \ÿö’ ]ÿì’ dÿØ’ eÿì’ fÿØ’ gÿì’ èÿÎ’ éÿö’Ùÿì’Úÿì’Üÿì’Ýÿì”ÿâ”ÿâ”$ÿâ”,ÿâ”6ÿì”7ÿØ”9ÿØ”:ÿØ”;ÿΔ<ÿØ”=ÿΔDÿì”Jÿì”Pÿì”Qÿì”Sÿö”Uÿì”Xÿñ”]ÿì”}ÿ씂ÿ┃ÿ┄ÿâ”…ÿ┆ÿ┇ÿ┈ÿ┎ÿâ”ÿâ”ÿ┑ÿ┟ÿØ”¢ÿ씣ÿ씤ÿ씥ÿ씦ÿì”§ÿ씨ÿ씳ÿì”»ÿñ”¼ÿñ”½ÿñ”¾ÿñ”Âÿâ”Ãÿì”Äÿâ”Åÿì”Æÿâ”Çÿì”áÿì”ãÿì”åÿì”ÿì”ÿì” ÿì”ÿì”ÿì” ÿì”"ÿì”$ÿØ”&ÿØ”+ÿñ”-ÿñ”/ÿñ”1ÿñ”3ÿñ”8ÿØ”:ÿØ”;ÿΔ<ÿì”=ÿΔ>ÿì”?ÿΔ@ÿì” ;ÿì” Qÿö” Zÿì” \ÿì” dÿØ” fÿØ” èÿØ” òÿØ” õÿØ” öÿØ” ÿì•ÿâ•ÿâ•$ÿâ•,ÿâ•6ÿì•7ÿØ•9ÿØ•:ÿØ•;ÿΕ<ÿØ•=ÿΕDÿì•Jÿì•Pÿì•Qÿì•Sÿö•Uÿì•Xÿñ•]ÿì•}ÿì•‚ÿ╃ÿâ•„ÿâ•…ÿ╆ÿ╇ÿ╈ÿ╎ÿâ•ÿâ•ÿâ•‘ÿ╟ÿØ•¢ÿì•£ÿ앤ÿì•¥ÿ앦ÿì•§ÿ앨ÿ앳ÿì•»ÿñ•¼ÿñ•½ÿñ•¾ÿñ•Âÿâ•Ãÿì•Äÿâ•Åÿì•Æÿâ•Çÿì•áÿì•ãÿì•åÿì•ÿì•ÿì• ÿì•ÿì•ÿì• ÿì•"ÿì•$ÿØ•&ÿØ•+ÿñ•-ÿñ•/ÿñ•1ÿñ•3ÿñ•8ÿØ•:ÿØ•;ÿΕ<ÿì•=ÿΕ>ÿì•?ÿΕ@ÿì• ;ÿì• Qÿö• Zÿì• \ÿì• dÿØ• fÿØ• èÿØ• òÿØ• õÿØ• öÿØ• ÿì–ÿâ–ÿâ–$ÿâ–,ÿâ–6ÿì–7ÿØ–9ÿØ–:ÿØ–;ÿΖ<ÿØ–=ÿΖDÿì–Jÿì–Pÿì–Qÿì–Sÿö–Uÿì–Xÿñ–]ÿì–}ÿì–‚ÿâ–ƒÿâ–„ÿâ–…ÿâ–†ÿâ–‡ÿâ–ˆÿâ–Žÿâ–ÿâ–ÿâ–‘ÿâ–ŸÿØ–¢ÿì–£ÿì–¤ÿì–¥ÿì–¦ÿì–§ÿì–¨ÿì–³ÿì–»ÿñ–¼ÿñ–½ÿñ–¾ÿñ–Âÿâ–Ãÿì–Äÿâ–Åÿì–Æÿâ–Çÿì–áÿì–ãÿì–åÿì–ÿì–ÿì– ÿì–ÿì–ÿì– ÿì–"ÿì–$ÿØ–&ÿØ–+ÿñ–-ÿñ–/ÿñ–1ÿñ–3ÿñ–8ÿØ–:ÿØ–;ÿΖ<ÿì–=ÿΖ>ÿì–?ÿΖ@ÿì– ;ÿì– Qÿö– Zÿì– \ÿì– dÿØ– fÿØ– èÿØ– òÿØ– õÿØ– öÿØ– ÿì—ÿâ—ÿâ—$ÿâ—,ÿâ—6ÿì—7ÿØ—9ÿØ—:ÿØ—;ÿΗ<ÿØ—=ÿΗDÿì—Jÿì—Pÿì—Qÿì—Sÿö—Uÿì—Xÿñ—]ÿì—}ÿì—‚ÿâ—ƒÿâ—„ÿâ—…ÿâ—†ÿâ—‡ÿâ—ˆÿâ—Žÿâ—ÿâ—ÿâ—‘ÿâ—ŸÿØ—¢ÿì—£ÿì—¤ÿì—¥ÿì—¦ÿì—§ÿì—¨ÿì—³ÿì—»ÿñ—¼ÿñ—½ÿñ—¾ÿñ—Âÿâ—Ãÿì—Äÿâ—Åÿì—Æÿâ—Çÿì—áÿì—ãÿì—åÿì—ÿì—ÿì— ÿì—ÿì—ÿì— ÿì—"ÿì—$ÿØ—&ÿØ—+ÿñ—-ÿñ—/ÿñ—1ÿñ—3ÿñ—8ÿØ—:ÿØ—;ÿΗ<ÿì—=ÿΗ>ÿì—?ÿΗ@ÿì— ;ÿì— Qÿö— Zÿì— \ÿì— dÿØ— fÿØ— èÿØ— òÿØ— õÿØ— öÿØ— ÿì˜ÿâ˜ÿâ˜$ÿâ˜,ÿâ˜6ÿì˜7ÿؘ9ÿؘ:ÿؘ;ÿΘ<ÿؘ=ÿΘDÿì˜Jÿì˜Pÿì˜Qÿì˜Sÿö˜Uÿì˜Xÿñ˜]ÿì˜}ÿ옂ÿ☃ÿ☄ÿ★ÿ☆ÿ☇ÿ☈ÿ☎ÿâ˜ÿâ˜ÿ☑ÿ☟ÿؘ¢ÿ옣ÿ오ÿ옥ÿ옦ÿ옧ÿ온ÿ옳ÿ옻ÿñ˜¼ÿñ˜½ÿñ˜¾ÿñ˜Âÿâ˜Ãÿì˜Äÿâ˜Åÿì˜Æÿâ˜Çÿì˜áÿì˜ãÿì˜åÿì˜ÿì˜ÿì˜ ÿì˜ÿì˜ÿì˜ ÿì˜"ÿì˜$ÿؘ&ÿؘ+ÿñ˜-ÿñ˜/ÿñ˜1ÿñ˜3ÿñ˜8ÿؘ:ÿؘ;ÿΘ<ÿì˜=ÿΘ>ÿì˜?ÿΘ@ÿì˜ ;ÿì˜ Qÿö˜ Zÿì˜ \ÿì˜ dÿؘ fÿؘ èÿؘ òÿؘ õÿؘ öÿؘ ÿìšÿâšÿâš$ÿâš,ÿâš6ÿìš7ÿØš9ÿØš:ÿØš;ÿΚ<ÿØš=ÿΚDÿìšJÿìšPÿìšQÿìšSÿöšUÿìšXÿñš]ÿìš}ÿìš‚ÿ⚃ÿâš„ÿâš…ÿ⚆ÿ⚇ÿ⚈ÿ⚎ÿâšÿâšÿâš‘ÿ⚟ÿØš¢ÿ욣ÿ욤ÿ욥ÿ욦ÿìš§ÿ욨ÿìš³ÿìš»ÿñš¼ÿñš½ÿñš¾ÿñšÂÿâšÃÿìšÄÿâšÅÿìšÆÿâšÇÿìšáÿìšãÿìšåÿìšÿìšÿìš ÿìšÿìšÿìš ÿìš"ÿìš$ÿØš&ÿØš+ÿñš-ÿñš/ÿñš1ÿñš3ÿñš8ÿØš:ÿØš;ÿΚ<ÿìš=ÿΚ>ÿìš?ÿΚ@ÿìš ;ÿìš Qÿöš Zÿìš \ÿìš dÿØš fÿØš èÿØš òÿØš õÿØš öÿØš ÿìŸÿÄŸÿΟÿÄŸ$ÿÄŸ&ÿΟ*ÿΟ,ÿØŸ-ÿâŸ2ÿΟ4ÿΟ6ÿΟ;ÿâŸ=ÿâŸDÿΟFÿÓŸGÿØŸHÿΟIÿìŸJÿΟPÿÄŸQÿÄŸRÿΟSÿØŸTÿØŸUÿÄŸVÿØŸWÿìŸXÿΟYÿìŸZÿìŸ[ÿâŸ\ÿìŸ]ÿÄŸmÿΟ}ÿÄŸ‚ÿÄŸƒÿÄŸ„ÿÄŸ…ÿÄŸ†ÿÄŸ‡ÿÄŸˆÿÄŸ‰ÿΟŽÿØŸÿØŸÿØŸ‘ÿØŸ”ÿΟ•ÿΟ–ÿΟ—ÿΟ˜ÿΟšÿΟ¢ÿΟ£ÿΟ¤ÿΟ¥ÿΟ¦ÿΟ§ÿΟ¨ÿΟ©ÿÓŸªÿΟ«ÿΟ¬ÿΟ­ÿΟ²ÿΟ³ÿÄŸ´ÿΟµÿΟ¶ÿΟ·ÿΟ¸ÿΟºÿΟ»ÿΟ¼ÿΟ½ÿΟ¾ÿΟ¿ÿìŸÁÿìŸÂÿÄŸÃÿΟÄÿÄŸÅÿΟÆÿÄŸÇÿΟÈÿΟÊÿΟËÿÓŸÌÿΟÎÿΟÏÿÓŸÑÿØŸÕÿΟ×ÿΟÛÿΟÞÿΟàÿΟáÿΟâÿΟãÿΟäÿΟåÿΟÿÄŸÿÄŸ ÿÄŸÿΟÿΟÿΟÿΟÿΟÿΟÿΟÿΟÿÄŸÿΟÿØŸ ÿΟ!ÿØŸ"ÿΟ#ÿØŸ%ÿìŸ+ÿΟ-ÿΟ/ÿΟ1ÿΟ3ÿΟ9ÿìŸ;ÿâŸ<ÿÄŸ=ÿâŸ>ÿÄŸ?ÿâŸ@ÿÄŸ ;ÿÄŸ QÿØŸ ZÿΟ [ÿØŸ \ÿΟ ]ÿØŸ eÿìŸ gÿìŸ éÿìŸ ÿΟ ÿÄŸÙÿìŸÚÿìŸÜÿìŸÝÿì $ÿØ &ÿì *ÿì ,ÿØ 2ÿì 4ÿì 6ÿö 7ÿØ 9ÿΠ:ÿΠ;ÿØ <ÿΠ=ÿØ Dÿì Iÿì Jÿì Mÿâ Pÿâ Qÿâ Rÿû Sÿì Uÿì Vÿì Wÿì Xÿç Yÿö Zÿö [ÿâ \ÿö ]ÿâ ‚ÿØ ƒÿØ „ÿØ …ÿØ †ÿØ ‡ÿØ ˆÿØ ‰ÿì ŽÿØ ÿØ ÿØ ‘ÿØ ”ÿì •ÿì –ÿì —ÿì ˜ÿì šÿì ŸÿΠ¢ÿì £ÿì ¤ÿì ¥ÿì ¦ÿì §ÿì ¨ÿì ³ÿâ ´ÿû µÿû ¶ÿû ·ÿû ¸ÿû ºÿû »ÿç ¼ÿç ½ÿç ¾ÿç ¿ÿö Áÿö ÂÿØ Ãÿì ÄÿØ Åÿì ÆÿØ Çÿì Èÿì Êÿì Ìÿì Îÿì Þÿì àÿì áÿì âÿì ãÿì äÿì åÿì ÿâ ÿâ  ÿâ ÿì ÿû ÿì ÿû ÿì ÿû ÿì ÿû ÿì ÿö ÿì  ÿö !ÿì "ÿö #ÿì $ÿØ %ÿì &ÿØ +ÿç -ÿç /ÿç 1ÿç 3ÿç 8ÿΠ9ÿö :ÿΠ;ÿØ <ÿâ =ÿØ >ÿâ ?ÿØ @ÿâ  ;ÿâ  Qÿì  Zÿö  [ÿì  \ÿö  ]ÿì  dÿØ  eÿì  fÿØ  gÿì  èÿΠ éÿö Ùÿì Úÿì Üÿì Ýÿì¢ÿì¢ÿØ¢ÿì¢Dÿö¢Fÿñ¢Gÿö¢Iÿö¢Jÿö¢Pÿö¢Qÿö¢Rÿì¢Tÿö¢Uÿö¢Vÿö¢Wÿö¢Xÿö¢Yÿì¢Zÿì¢[ÿö¢\ÿì¢]ÿö¢mÿØ¢}ÿØ¢¢ÿö¢£ÿö¢¤ÿö¢¥ÿö¢¦ÿö¢§ÿö¢¨ÿö¢©ÿñ¢³ÿö¢´ÿ좵ÿ좶ÿ좷ÿ좸ÿ좺ÿ좻ÿö¢¼ÿö¢½ÿö¢¾ÿö¢¿ÿì¢Áÿì¢Ãÿö¢Åÿö¢Çÿö¢Ëÿñ¢Ïÿñ¢Ñÿö¢Óÿö¢áÿö¢ãÿö¢åÿö¢ÿö¢ÿö¢ ÿö¢ÿì¢ÿì¢ÿì¢ÿì¢ÿö¢ÿö¢!ÿö¢#ÿö¢%ÿö¢+ÿö¢-ÿö¢/ÿö¢1ÿö¢3ÿö¢9ÿì¢<ÿö¢>ÿö¢@ÿö¢2ÿö¢ ÿö¢ ÿö¢ [ÿö¢ ]ÿö¢ eÿö¢ gÿö¢ éÿì¢ òÿÄ¢ õÿÄ¢ öÿÄ¢ ÿØ¢ ÿØ¢Ùÿö¢Úÿö¢Ûÿö¢Üÿö¢Ýÿö£ÿì£ÿØ£ÿì£Dÿö£Fÿñ£Gÿö£Iÿö£Jÿö£Pÿö£Qÿö£Rÿì£Tÿö£Uÿö£Vÿö£Wÿö£Xÿö£Yÿì£Zÿì£[ÿö£\ÿì£]ÿö£mÿØ£}ÿØ£¢ÿö££ÿö£¤ÿö£¥ÿö£¦ÿö£§ÿö£¨ÿö£©ÿñ£³ÿö£´ÿ죵ÿ죶ÿ죷ÿ죸ÿ죺ÿ죻ÿö£¼ÿö£½ÿö£¾ÿö£¿ÿì£Áÿì£Ãÿö£Åÿö£Çÿö£Ëÿñ£Ïÿñ£Ñÿö£Óÿö£áÿö£ãÿö£åÿö£ÿö£ÿö£ ÿö£ÿì£ÿì£ÿì£ÿì£ÿö£ÿö£!ÿö£#ÿö£%ÿö£+ÿö£-ÿö£/ÿö£1ÿö£3ÿö£9ÿì£<ÿö£>ÿö£@ÿö£2ÿö£ ÿö£ ÿö£ [ÿö£ ]ÿö£ eÿö£ gÿö£ éÿì£ òÿÄ£ õÿÄ£ öÿÄ£ ÿØ£ ÿØ£Ùÿö£Úÿö£Ûÿö£Üÿö£Ýÿö¤ÿì¤ÿؤÿì¤Dÿö¤Fÿñ¤Gÿö¤Iÿö¤Jÿö¤Pÿö¤Qÿö¤Rÿì¤Tÿö¤Uÿö¤Vÿö¤Wÿö¤Xÿö¤Yÿì¤Zÿì¤[ÿö¤\ÿì¤]ÿö¤mÿؤ}ÿؤ¢ÿö¤£ÿö¤¤ÿö¤¥ÿö¤¦ÿö¤§ÿö¤¨ÿö¤©ÿñ¤³ÿö¤´ÿ줵ÿ줶ÿ줷ÿ줸ÿ줺ÿ줻ÿö¤¼ÿö¤½ÿö¤¾ÿö¤¿ÿì¤Áÿì¤Ãÿö¤Åÿö¤Çÿö¤Ëÿñ¤Ïÿñ¤Ñÿö¤Óÿö¤áÿö¤ãÿö¤åÿö¤ÿö¤ÿö¤ ÿö¤ÿì¤ÿì¤ÿì¤ÿì¤ÿö¤ÿö¤!ÿö¤#ÿö¤%ÿö¤+ÿö¤-ÿö¤/ÿö¤1ÿö¤3ÿö¤9ÿì¤<ÿö¤>ÿö¤@ÿö¤2ÿö¤ ÿö¤ ÿö¤ [ÿö¤ ]ÿö¤ eÿö¤ gÿö¤ éÿì¤ òÿĤ õÿĤ öÿĤ ÿؤ ÿؤÙÿö¤Úÿö¤Ûÿö¤Üÿö¤Ýÿö¥ÿì¥ÿØ¥ÿì¥Dÿö¥Fÿñ¥Gÿö¥Iÿö¥Jÿö¥Pÿö¥Qÿö¥Rÿì¥Tÿö¥Uÿö¥Vÿö¥Wÿö¥Xÿö¥Yÿì¥Zÿì¥[ÿö¥\ÿì¥]ÿö¥mÿØ¥}ÿØ¥¢ÿö¥£ÿö¥¤ÿö¥¥ÿö¥¦ÿö¥§ÿö¥¨ÿö¥©ÿñ¥³ÿö¥´ÿ쥵ÿ쥶ÿ쥷ÿ쥸ÿ쥺ÿ쥻ÿö¥¼ÿö¥½ÿö¥¾ÿö¥¿ÿì¥Áÿì¥Ãÿö¥Åÿö¥Çÿö¥Ëÿñ¥Ïÿñ¥Ñÿö¥Óÿö¥áÿö¥ãÿö¥åÿö¥ÿö¥ÿö¥ ÿö¥ÿì¥ÿì¥ÿì¥ÿì¥ÿö¥ÿö¥!ÿö¥#ÿö¥%ÿö¥+ÿö¥-ÿö¥/ÿö¥1ÿö¥3ÿö¥9ÿì¥<ÿö¥>ÿö¥@ÿö¥2ÿö¥ ÿö¥ ÿö¥ [ÿö¥ ]ÿö¥ eÿö¥ gÿö¥ éÿì¥ òÿÄ¥ õÿÄ¥ öÿÄ¥ ÿØ¥ ÿØ¥Ùÿö¥Úÿö¥Ûÿö¥Üÿö¥Ýÿö¦ÿì¦ÿئÿì¦Dÿö¦Fÿñ¦Gÿö¦Iÿö¦Jÿö¦Pÿö¦Qÿö¦Rÿì¦Tÿö¦Uÿö¦Vÿö¦Wÿö¦Xÿö¦Yÿì¦Zÿì¦[ÿö¦\ÿì¦]ÿö¦mÿئ}ÿئ¢ÿö¦£ÿö¦¤ÿö¦¥ÿö¦¦ÿö¦§ÿö¦¨ÿö¦©ÿñ¦³ÿö¦´ÿ즵ÿ즶ÿ즷ÿ즸ÿ즺ÿ즻ÿö¦¼ÿö¦½ÿö¦¾ÿö¦¿ÿì¦Áÿì¦Ãÿö¦Åÿö¦Çÿö¦Ëÿñ¦Ïÿñ¦Ñÿö¦Óÿö¦áÿö¦ãÿö¦åÿö¦ÿö¦ÿö¦ ÿö¦ÿì¦ÿì¦ÿì¦ÿì¦ÿö¦ÿö¦!ÿö¦#ÿö¦%ÿö¦+ÿö¦-ÿö¦/ÿö¦1ÿö¦3ÿö¦9ÿì¦<ÿö¦>ÿö¦@ÿö¦2ÿö¦ ÿö¦ ÿö¦ [ÿö¦ ]ÿö¦ eÿö¦ gÿö¦ éÿì¦ òÿĦ õÿĦ öÿĦ ÿئ ÿئÙÿö¦Úÿö¦Ûÿö¦Üÿö¦Ýÿö§ÿì§ÿاÿì§Dÿö§Fÿñ§Gÿö§Iÿö§Jÿö§Pÿö§Qÿö§Rÿì§Tÿö§Uÿö§Vÿö§Wÿö§Xÿö§Yÿì§Zÿì§[ÿö§\ÿì§]ÿö§mÿا}ÿا¢ÿö§£ÿö§¤ÿö§¥ÿö§¦ÿö§§ÿö§¨ÿö§©ÿñ§³ÿö§´ÿì§µÿì§¶ÿì§·ÿ째ÿ짺ÿì§»ÿö§¼ÿö§½ÿö§¾ÿö§¿ÿì§Áÿì§Ãÿö§Åÿö§Çÿö§Ëÿñ§Ïÿñ§Ñÿö§Óÿö§áÿö§ãÿö§åÿö§ÿö§ÿö§ ÿö§ÿì§ÿì§ÿì§ÿì§ÿö§ÿö§!ÿö§#ÿö§%ÿö§+ÿö§-ÿö§/ÿö§1ÿö§3ÿö§9ÿì§<ÿö§>ÿö§@ÿö§2ÿö§ ÿö§ ÿö§ [ÿö§ ]ÿö§ eÿö§ gÿö§ éÿì§ òÿħ õÿħ öÿħ ÿا ÿاÙÿö§Úÿö§Ûÿö§Üÿö§Ýÿö¨Dÿö¨Iÿö¨Jÿö¨Mÿì¨Pÿì¨Qÿì¨Sÿö¨Uÿö¨Vÿö¨Wÿö¨Xÿì¨Yÿì¨Zÿì¨[ÿì¨\ÿì¨]ÿ쨢ÿö¨£ÿö¨¤ÿö¨¥ÿö¨¦ÿö¨§ÿö¨¨ÿö¨³ÿ쨻ÿ쨼ÿ쨽ÿ쨾ÿ쨿ÿì¨Áÿì¨Ãÿö¨Åÿö¨Çÿö¨áÿö¨ãÿö¨åÿö¨ÿì¨ÿì¨ ÿì¨ÿö¨ÿö¨!ÿö¨#ÿö¨%ÿö¨+ÿì¨-ÿì¨/ÿì¨1ÿì¨3ÿì¨9ÿì¨<ÿì¨>ÿì¨@ÿì¨2ÿì¨ ÿö¨ Qÿö¨ [ÿö¨ ]ÿö¨ eÿö¨ gÿö¨ éÿì¨Ùÿö¨Úÿö¨Ûÿö¨Üÿö¨Ýÿö©ÿì©ÿì©Pÿö©Qÿö©Uÿö©Xÿû©[ÿö©]ÿö©³ÿö©»ÿû©¼ÿû©½ÿû©¾ÿû©ÿö©ÿö© ÿö©ÿö©+ÿû©-ÿû©/ÿû©1ÿû©3ÿû©<ÿö©>ÿö©@ÿö©2ÿö© òÿØ© õÿØ© öÿتÿتÿöªÿتDÿöªIÿöªJÿöªMÿìªPÿìªQÿìªSÿöªUÿöªVÿöªWÿöªXÿìªYÿìªZÿìª[ÿìª\ÿìª]ÿìªmÿöª¢ÿöª£ÿöª¤ÿöª¥ÿöª¦ÿöª§ÿöª¨ÿöª³ÿ쪻ÿ쪼ÿ쪽ÿ쪾ÿ쪿ÿìªÁÿìªÃÿöªÅÿöªÇÿöªáÿöªãÿöªåÿöªÿìªÿìª ÿìªÿöªÿöª!ÿöª#ÿöª%ÿöª+ÿìª-ÿìª/ÿìª1ÿìª3ÿìª9ÿìª<ÿìª>ÿìª@ÿìª2ÿìª ÿöª Qÿöª [ÿöª ]ÿöª eÿöª gÿöª éÿìª òÿÓª õÿÓª öÿÓª ÿöªÙÿöªÚÿöªÛÿöªÜÿöªÝÿö«ÿØ«ÿö«ÿØ«Dÿö«Iÿö«Jÿö«Mÿì«Pÿì«Qÿì«Sÿö«Uÿö«Vÿö«Wÿö«Xÿì«Yÿì«Zÿì«[ÿì«\ÿì«]ÿì«mÿö«¢ÿö«£ÿö«¤ÿö«¥ÿö«¦ÿö«§ÿö«¨ÿö«³ÿì«»ÿ쫼ÿ쫽ÿ쫾ÿì«¿ÿì«Áÿì«Ãÿö«Åÿö«Çÿö«áÿö«ãÿö«åÿö«ÿì«ÿì« ÿì«ÿö«ÿö«!ÿö«#ÿö«%ÿö«+ÿì«-ÿì«/ÿì«1ÿì«3ÿì«9ÿì«<ÿì«>ÿì«@ÿì«2ÿì« ÿö« Qÿö« [ÿö« ]ÿö« eÿö« gÿö« éÿì« òÿÓ« õÿÓ« öÿÓ« ÿö«Ùÿö«Úÿö«Ûÿö«Üÿö«Ýÿö¬ÿجÿö¬ÿجDÿö¬Iÿö¬Jÿö¬Mÿì¬Pÿì¬Qÿì¬Sÿö¬Uÿö¬Vÿö¬Wÿö¬Xÿì¬Yÿì¬Zÿì¬[ÿì¬\ÿì¬]ÿì¬mÿö¬¢ÿö¬£ÿö¬¤ÿö¬¥ÿö¬¦ÿö¬§ÿö¬¨ÿö¬³ÿ쬻ÿ쬼ÿ쬽ÿ쬾ÿ쬿ÿì¬Áÿì¬Ãÿö¬Åÿö¬Çÿö¬áÿö¬ãÿö¬åÿö¬ÿì¬ÿì¬ ÿì¬ÿö¬ÿö¬!ÿö¬#ÿö¬%ÿö¬+ÿì¬-ÿì¬/ÿì¬1ÿì¬3ÿì¬9ÿì¬<ÿì¬>ÿì¬@ÿì¬2ÿì¬ ÿö¬ Qÿö¬ [ÿö¬ ]ÿö¬ eÿö¬ gÿö¬ éÿì¬ òÿÓ¬ õÿÓ¬ öÿÓ¬ ÿö¬Ùÿö¬Úÿö¬Ûÿö¬Üÿö¬Ýÿö­ÿØ­ÿö­ÿØ­Dÿö­Iÿö­Jÿö­Mÿì­Pÿì­Qÿì­Sÿö­Uÿö­Vÿö­Wÿö­Xÿì­Yÿì­Zÿì­[ÿì­\ÿì­]ÿì­mÿö­¢ÿö­£ÿö­¤ÿö­¥ÿö­¦ÿö­§ÿö­¨ÿö­³ÿì­»ÿì­¼ÿì­½ÿì­¾ÿì­¿ÿì­Áÿì­Ãÿö­Åÿö­Çÿö­áÿö­ãÿö­åÿö­ÿì­ÿì­ ÿì­ÿö­ÿö­!ÿö­#ÿö­%ÿö­+ÿì­-ÿì­/ÿì­1ÿì­3ÿì­9ÿì­<ÿì­>ÿì­@ÿì­2ÿì­ ÿö­ Qÿö­ [ÿö­ ]ÿö­ eÿö­ gÿö­ éÿì­ òÿÓ­ õÿÓ­ öÿÓ­ ÿö­Ùÿö­Úÿö­Ûÿö­Üÿö­Ýÿö³ÿâ³ÿijÿâ³Fÿì³Gÿñ³Hÿñ³Mÿì³Pÿç³Qÿç³Rÿç³Sÿö³Tÿñ³Uÿì³Vÿì³Xÿì³Yÿì³Zÿì³[ÿì³\ÿì³]ÿç³mÿij}ÿ⳩ÿ쳪ÿñ³«ÿñ³¬ÿñ³­ÿñ³²ÿñ³³ÿç³´ÿç³µÿç³¶ÿç³·ÿ糸ÿ糺ÿç³»ÿì³¼ÿì³½ÿì³¾ÿ쳿ÿì³Áÿì³Ëÿì³Ïÿì³Ñÿñ³Óÿñ³Õÿñ³×ÿñ³ÿç³ÿç³ ÿç³ÿç³ÿç³ÿç³ÿç³ÿì³ÿì³!ÿì³#ÿì³+ÿì³-ÿì³/ÿì³1ÿì³3ÿì³9ÿì³<ÿç³>ÿç³@ÿç³2ÿç³ ÿñ³ Qÿö³ [ÿì³ ]ÿì³ éÿì³ òÿij õÿij öÿij ÿij ÿâ´ÿØ´ÿö´ÿØ´Dÿö´Iÿö´Jÿö´Mÿì´Pÿì´Qÿì´Sÿö´Uÿö´Vÿö´Wÿö´Xÿì´Yÿì´Zÿì´[ÿì´\ÿì´]ÿì´mÿö´¢ÿö´£ÿö´¤ÿö´¥ÿö´¦ÿö´§ÿö´¨ÿö´³ÿì´»ÿì´¼ÿì´½ÿì´¾ÿì´¿ÿì´Áÿì´Ãÿö´Åÿö´Çÿö´áÿö´ãÿö´åÿö´ÿì´ÿì´ ÿì´ÿö´ÿö´!ÿö´#ÿö´%ÿö´+ÿì´-ÿì´/ÿì´1ÿì´3ÿì´9ÿì´<ÿì´>ÿì´@ÿì´2ÿì´ ÿö´ Qÿö´ [ÿö´ ]ÿö´ eÿö´ gÿö´ éÿì´ òÿÓ´ õÿÓ´ öÿÓ´ ÿö´Ùÿö´Úÿö´Ûÿö´Üÿö´ÝÿöµÿصÿöµÿصDÿöµIÿöµJÿöµMÿìµPÿìµQÿìµSÿöµUÿöµVÿöµWÿöµXÿìµYÿìµZÿìµ[ÿìµ\ÿìµ]ÿìµmÿöµ¢ÿöµ£ÿöµ¤ÿöµ¥ÿöµ¦ÿöµ§ÿöµ¨ÿöµ³ÿìµ»ÿìµ¼ÿìµ½ÿìµ¾ÿ쵿ÿìµÁÿìµÃÿöµÅÿöµÇÿöµáÿöµãÿöµåÿöµÿìµÿìµ ÿìµÿöµÿöµ!ÿöµ#ÿöµ%ÿöµ+ÿìµ-ÿìµ/ÿìµ1ÿìµ3ÿìµ9ÿìµ<ÿìµ>ÿìµ@ÿìµ2ÿìµ ÿöµ Qÿöµ [ÿöµ ]ÿöµ eÿöµ gÿöµ éÿìµ òÿÓµ õÿÓµ öÿÓµ ÿöµÙÿöµÚÿöµÛÿöµÜÿöµÝÿö¶ÿضÿö¶ÿضDÿö¶Iÿö¶Jÿö¶Mÿì¶Pÿì¶Qÿì¶Sÿö¶Uÿö¶Vÿö¶Wÿö¶Xÿì¶Yÿì¶Zÿì¶[ÿì¶\ÿì¶]ÿì¶mÿö¶¢ÿö¶£ÿö¶¤ÿö¶¥ÿö¶¦ÿö¶§ÿö¶¨ÿö¶³ÿì¶»ÿì¶¼ÿì¶½ÿì¶¾ÿì¶¿ÿì¶Áÿì¶Ãÿö¶Åÿö¶Çÿö¶áÿö¶ãÿö¶åÿö¶ÿì¶ÿì¶ ÿì¶ÿö¶ÿö¶!ÿö¶#ÿö¶%ÿö¶+ÿì¶-ÿì¶/ÿì¶1ÿì¶3ÿì¶9ÿì¶<ÿì¶>ÿì¶@ÿì¶2ÿì¶ ÿö¶ Qÿö¶ [ÿö¶ ]ÿö¶ eÿö¶ gÿö¶ éÿì¶ òÿÓ¶ õÿÓ¶ öÿÓ¶ ÿö¶Ùÿö¶Úÿö¶Ûÿö¶Üÿö¶Ýÿö·ÿØ·ÿö·ÿØ·Dÿö·Iÿö·Jÿö·Mÿì·Pÿì·Qÿì·Sÿö·Uÿö·Vÿö·Wÿö·Xÿì·Yÿì·Zÿì·[ÿì·\ÿì·]ÿì·mÿö·¢ÿö·£ÿö·¤ÿö·¥ÿö·¦ÿö·§ÿö·¨ÿö·³ÿì·»ÿì·¼ÿì·½ÿì·¾ÿì·¿ÿì·Áÿì·Ãÿö·Åÿö·Çÿö·áÿö·ãÿö·åÿö·ÿì·ÿì· ÿì·ÿö·ÿö·!ÿö·#ÿö·%ÿö·+ÿì·-ÿì·/ÿì·1ÿì·3ÿì·9ÿì·<ÿì·>ÿì·@ÿì·2ÿì· ÿö· Qÿö· [ÿö· ]ÿö· eÿö· gÿö· éÿì· òÿÓ· õÿÓ· öÿÓ· ÿö·Ùÿö·Úÿö·Ûÿö·Üÿö·Ýÿö¸ÿظÿö¸ÿظDÿö¸Iÿö¸Jÿö¸Mÿì¸Pÿì¸Qÿì¸Sÿö¸Uÿö¸Vÿö¸Wÿö¸Xÿì¸Yÿì¸Zÿì¸[ÿì¸\ÿì¸]ÿì¸mÿö¸¢ÿö¸£ÿö¸¤ÿö¸¥ÿö¸¦ÿö¸§ÿö¸¨ÿö¸³ÿ츻ÿ츼ÿ츽ÿ츾ÿ츿ÿì¸Áÿì¸Ãÿö¸Åÿö¸Çÿö¸áÿö¸ãÿö¸åÿö¸ÿì¸ÿì¸ ÿì¸ÿö¸ÿö¸!ÿö¸#ÿö¸%ÿö¸+ÿì¸-ÿì¸/ÿì¸1ÿì¸3ÿì¸9ÿì¸<ÿì¸>ÿì¸@ÿì¸2ÿì¸ ÿö¸ Qÿö¸ [ÿö¸ ]ÿö¸ eÿö¸ gÿö¸ éÿì¸ òÿÓ¸ õÿÓ¸ öÿÓ¸ ÿö¸Ùÿö¸Úÿö¸Ûÿö¸Üÿö¸ÝÿöºÿغÿöºÿغDÿöºIÿöºJÿöºMÿìºPÿìºQÿìºSÿöºUÿöºVÿöºWÿöºXÿìºYÿìºZÿìº[ÿìº\ÿìº]ÿìºmÿöº¢ÿöº£ÿöº¤ÿöº¥ÿöº¦ÿöº§ÿöº¨ÿöº³ÿ캻ÿ캼ÿ캽ÿ캾ÿ캿ÿìºÁÿìºÃÿöºÅÿöºÇÿöºáÿöºãÿöºåÿöºÿìºÿìº ÿìºÿöºÿöº!ÿöº#ÿöº%ÿöº+ÿìº-ÿìº/ÿìº1ÿìº3ÿìº9ÿìº<ÿìº>ÿìº@ÿìº2ÿìº ÿöº Qÿöº [ÿöº ]ÿöº eÿöº gÿöº éÿìº òÿÓº õÿÓº öÿÓº ÿöºÙÿöºÚÿöºÛÿöºÜÿöºÝÿö»ÿØ»ÿÄ»ÿØ»Fÿö»Gÿû»Hÿö»Rÿö»Tÿû»mÿÄ»}ÿ⻩ÿö»ªÿö»«ÿö»¬ÿö»­ÿö»²ÿö»´ÿö»µÿö»¶ÿö»·ÿö»¸ÿö»ºÿö»Ëÿö»Ïÿö»Ñÿû»Óÿû»Õÿö»×ÿö»ÿö»ÿö»ÿö»ÿö» ÿû» òÿØ» õÿØ» öÿØ» ÿÄ» ÿâ¼ÿؼÿļÿؼFÿö¼Gÿû¼Hÿö¼Rÿö¼Tÿû¼mÿļ}ÿ⼩ÿö¼ªÿö¼«ÿö¼¬ÿö¼­ÿö¼²ÿö¼´ÿö¼µÿö¼¶ÿö¼·ÿö¼¸ÿö¼ºÿö¼Ëÿö¼Ïÿö¼Ñÿû¼Óÿû¼Õÿö¼×ÿö¼ÿö¼ÿö¼ÿö¼ÿö¼ ÿû¼ òÿؼ õÿؼ öÿؼ ÿļ ÿâ½ÿؽÿĽÿؽFÿö½Gÿû½Hÿö½Rÿö½Tÿû½mÿĽ}ÿ⽩ÿö½ªÿö½«ÿö½¬ÿö½­ÿö½²ÿö½´ÿö½µÿö½¶ÿö½·ÿö½¸ÿö½ºÿö½Ëÿö½Ïÿö½Ñÿû½Óÿû½Õÿö½×ÿö½ÿö½ÿö½ÿö½ÿö½ ÿû½ òÿؽ õÿؽ öÿؽ ÿĽ ÿâ¾ÿؾÿľÿؾFÿö¾Gÿû¾Hÿö¾Rÿö¾Tÿû¾mÿľ}ÿ⾩ÿö¾ªÿö¾«ÿö¾¬ÿö¾­ÿö¾²ÿö¾´ÿö¾µÿö¾¶ÿö¾·ÿö¾¸ÿö¾ºÿö¾Ëÿö¾Ïÿö¾Ñÿû¾Óÿû¾Õÿö¾×ÿö¾ÿö¾ÿö¾ÿö¾ÿö¾ ÿû¾ òÿؾ õÿؾ öÿؾ ÿľ ÿâ¿ÿÄ¿ÿì¿ÿÄ¿Dÿì¿Fÿì¿Gÿñ¿Hÿì¿Iÿö¿Jÿì¿Mÿì¿PÿØ¿QÿØ¿Rÿç¿Sÿâ¿Tÿñ¿Uÿç¿Vÿì¿Wÿö¿Xÿâ¿[ÿì¿]ÿØ¿mÿì¿}ÿØ¿¢ÿì¿£ÿ쿤ÿì¿¥ÿ쿦ÿì¿§ÿ쿨ÿì¿©ÿ쿪ÿì¿«ÿ쿬ÿì¿­ÿ쿲ÿ쿳ÿØ¿´ÿ翵ÿç¿¶ÿç¿·ÿ翸ÿ翺ÿç¿»ÿ⿼ÿ⿽ÿ⿾ÿâ¿Ãÿì¿Åÿì¿Çÿì¿Ëÿì¿Ïÿì¿Ñÿñ¿Óÿñ¿Õÿì¿×ÿì¿áÿì¿ãÿì¿åÿì¿ÿØ¿ÿØ¿ ÿØ¿ÿç¿ÿç¿ÿç¿ÿç¿ÿç¿ÿì¿!ÿì¿#ÿì¿%ÿö¿+ÿâ¿-ÿâ¿/ÿâ¿1ÿâ¿3ÿâ¿<ÿØ¿>ÿØ¿@ÿØ¿2ÿØ¿ ÿñ¿ ÿö¿ Qÿâ¿ [ÿì¿ ]ÿì¿ eÿö¿ gÿö¿ òÿì¿ õÿì¿ öÿì¿ ÿì¿ ÿØ¿Ùÿö¿Úÿö¿Ûÿö¿Üÿö¿ÝÿöÁÿÄÁÿìÁÿÄÁDÿìÁFÿìÁGÿñÁHÿìÁIÿöÁJÿìÁMÿìÁPÿØÁQÿØÁRÿçÁSÿâÁTÿñÁUÿçÁVÿìÁWÿöÁXÿâÁ[ÿìÁ]ÿØÁmÿìÁ}ÿØÁ¢ÿìÁ£ÿìÁ¤ÿìÁ¥ÿìÁ¦ÿìÁ§ÿìÁ¨ÿìÁ©ÿìÁªÿìÁ«ÿìÁ¬ÿìÁ­ÿìÁ²ÿìÁ³ÿØÁ´ÿçÁµÿçÁ¶ÿçÁ·ÿçÁ¸ÿçÁºÿçÁ»ÿâÁ¼ÿâÁ½ÿâÁ¾ÿâÁÃÿìÁÅÿìÁÇÿìÁËÿìÁÏÿìÁÑÿñÁÓÿñÁÕÿìÁ×ÿìÁáÿìÁãÿìÁåÿìÁÿØÁÿØÁ ÿØÁÿçÁÿçÁÿçÁÿçÁÿçÁÿìÁ!ÿìÁ#ÿìÁ%ÿöÁ+ÿâÁ-ÿâÁ/ÿâÁ1ÿâÁ3ÿâÁ<ÿØÁ>ÿØÁ@ÿØÁ2ÿØÁ ÿñÁ ÿöÁ QÿâÁ [ÿìÁ ]ÿìÁ eÿöÁ gÿöÁ òÿìÁ õÿìÁ öÿìÁ ÿìÁ ÿØÁÙÿöÁÚÿöÁÛÿöÁÜÿöÁÝÿöÂÿìÂÿÎÂÿìÂ&ÿØÂ*ÿØÂ,ÿØÂ2ÿØÂ4ÿØÂ6ÿâÂ7ÿØÂ9ÿÄÂ:ÿÄÂ;ÿöÂ<ÿÄÂ=ÿöÂDÿìÂFÿöÂGÿûÂHÿìÂIÿâÂJÿìÂPÿâÂQÿâÂRÿñÂSÿìÂTÿûÂUÿâÂVÿìÂWÿâÂXÿçÂYÿâÂZÿâÂ\ÿâÂ]ÿâÂmÿÎÂ}ÿØÂ‰ÿØÂŽÿØÂÿØÂÿØÂ‘ÿØÂ”ÿØÂ•ÿØÂ–ÿØÂ—ÿØÂ˜ÿØÂšÿØÂŸÿÄ¢ÿì£ÿì¤ÿìÂ¥ÿì¦ÿì§ÿì¨ÿì©ÿöªÿì«ÿì¬ÿì­ÿì²ÿì³ÿâ´ÿñµÿñ¶ÿñ·ÿñ¸ÿñºÿñ»ÿç¼ÿç½ÿç¾ÿç¿ÿâÂÁÿâÂÃÿìÂÅÿìÂÇÿìÂÈÿØÂÊÿØÂËÿöÂÌÿØÂÎÿØÂÏÿöÂÑÿûÂÕÿìÂ×ÿìÂÛÿìÂÞÿØÂàÿØÂáÿìÂâÿØÂãÿìÂäÿØÂåÿìÂÿâÂÿâ ÿâÂÿØÂÿñÂÿØÂÿñÂÿØÂÿñÂÿØÂÿñÂÿâÂÿâÂÿì ÿâÂ!ÿìÂ"ÿâÂ#ÿìÂ$ÿØÂ%ÿâÂ&ÿØÂ+ÿçÂ-ÿçÂ/ÿçÂ1ÿçÂ3ÿçÂ8ÿÄÂ9ÿâÂ:ÿÄÂ;ÿöÂ<ÿâÂ=ÿöÂ>ÿâÂ?ÿöÂ@ÿâ ;ÿâ Qÿì Zÿâ [ÿì \ÿâ ]ÿì dÿØÂ eÿâ fÿØÂ gÿâ èÿÄ éÿâ òÿΠõÿΠöÿΠÿΠÿØÂÙÿâÂÚÿâÂÜÿâÂÝÿâÃÿìÃÿØÃÿìÃDÿöÃFÿñÃGÿöÃIÿöÃJÿöÃPÿöÃQÿöÃRÿìÃTÿöÃUÿöÃVÿöÃWÿöÃXÿöÃYÿìÃZÿìÃ[ÿöÃ\ÿìÃ]ÿöÃmÿØÃ}ÿØÃ¢ÿöãÿöäÿöÃ¥ÿöæÿöçÿöèÿöéÿñóÿöôÿìõÿìöÿì÷ÿìøÿìúÿìûÿöüÿöýÿöþÿöÿÿìÃÁÿìÃÃÿöÃÅÿöÃÇÿöÃËÿñÃÏÿñÃÑÿöÃÓÿöÃáÿöÃãÿöÃåÿöÃÿöÃÿöà ÿöÃÿìÃÿìÃÿìÃÿìÃÿöÃÿöÃ!ÿöÃ#ÿöÃ%ÿöÃ+ÿöÃ-ÿöÃ/ÿöÃ1ÿöÃ3ÿöÃ9ÿìÃ<ÿöÃ>ÿöÃ@ÿöÃ2ÿöà ÿöà ÿöà [ÿöà ]ÿöà eÿöà gÿöà éÿìà òÿÄà õÿÄà öÿÄà ÿØÃ ÿØÃÙÿöÃÚÿöÃÛÿöÃÜÿöÃÝÿöÄÿìÄÿÎÄÿìÄ&ÿØÄ*ÿØÄ,ÿØÄ2ÿØÄ4ÿØÄ6ÿâÄ7ÿØÄ9ÿÄÄ:ÿÄÄ;ÿöÄ<ÿÄÄ=ÿöÄDÿìÄFÿöÄGÿûÄHÿìÄIÿâÄJÿìÄPÿâÄQÿâÄRÿñÄSÿìÄTÿûÄUÿâÄVÿìÄWÿâÄXÿçÄYÿâÄZÿâÄ\ÿâÄ]ÿâÄmÿÎÄ}ÿØÄ‰ÿØÄŽÿØÄÿØÄÿØÄ‘ÿØÄ”ÿØÄ•ÿØÄ–ÿØÄ—ÿØÄ˜ÿØÄšÿØÄŸÿÄÄ¢ÿìÄ£ÿìĤÿìÄ¥ÿìĦÿìħÿìĨÿìÄ©ÿöĪÿìÄ«ÿìĬÿìÄ­ÿìIJÿìijÿâÄ´ÿñĵÿñĶÿñÄ·ÿñĸÿñĺÿñÄ»ÿçļÿçĽÿçľÿçÄ¿ÿâÄÁÿâÄÃÿìÄÅÿìÄÇÿìÄÈÿØÄÊÿØÄËÿöÄÌÿØÄÎÿØÄÏÿöÄÑÿûÄÕÿìÄ×ÿìÄÛÿìÄÞÿØÄàÿØÄáÿìÄâÿØÄãÿìÄäÿØÄåÿìÄÿâÄÿâÄ ÿâÄÿØÄÿñÄÿØÄÿñÄÿØÄÿñÄÿØÄÿñÄÿâÄÿâÄÿìÄ ÿâÄ!ÿìÄ"ÿâÄ#ÿìÄ$ÿØÄ%ÿâÄ&ÿØÄ+ÿçÄ-ÿçÄ/ÿçÄ1ÿçÄ3ÿçÄ8ÿÄÄ9ÿâÄ:ÿÄÄ;ÿöÄ<ÿâÄ=ÿöÄ>ÿâÄ?ÿöÄ@ÿâÄ ;ÿâÄ QÿìÄ ZÿâÄ [ÿìÄ \ÿâÄ ]ÿìÄ dÿØÄ eÿâÄ fÿØÄ gÿâÄ èÿÄÄ éÿâÄ òÿÎÄ õÿÎÄ öÿÎÄ ÿÎÄ ÿØÄÙÿâÄÚÿâÄÜÿâÄÝÿâ÷¾)HÀ 7°ÅÿìÅÿØÅÿìÅDÿöÅFÿñÅGÿöÅIÿöÅJÿöÅPÿöÅQÿöÅRÿìÅTÿöÅUÿöÅVÿöÅWÿöÅXÿöÅYÿìÅZÿìÅ[ÿöÅ\ÿìÅ]ÿöÅmÿØÅ}ÿØÅ¢ÿöÅ£ÿöŤÿöÅ¥ÿöŦÿöŧÿöŨÿöÅ©ÿñųÿöÅ´ÿìŵÿìŶÿìÅ·ÿìŸÿìźÿìÅ»ÿöżÿöŽÿöžÿöÅ¿ÿìÅÁÿìÅÃÿöÅÅÿöÅÇÿöÅËÿñÅÏÿñÅÑÿöÅÓÿöÅáÿöÅãÿöÅåÿöÅÿöÅÿöÅ ÿöÅÿìÅÿìÅÿìÅÿìÅÿöÅÿöÅ!ÿöÅ#ÿöÅ%ÿöÅ+ÿöÅ-ÿöÅ/ÿöÅ1ÿöÅ3ÿöÅ9ÿìÅ<ÿöÅ>ÿöÅ@ÿöÅ2ÿöÅ ÿöÅ ÿöÅ [ÿöÅ ]ÿöÅ eÿöÅ gÿöÅ éÿìÅ òÿÄÅ õÿÄÅ öÿÄÅ ÿØÅ ÿØÅÙÿöÅÚÿöÅÛÿöÅÜÿöÅÝÿöÆ&ÿØÆ*ÿØÆ,ÿØÆ2ÿØÆ4ÿØÆ6ÿâÆ7ÿØÆ9ÿÄÆ:ÿÄÆ;ÿöÆ<ÿÄÆ=ÿöÆDÿìÆFÿöÆGÿûÆHÿìÆIÿâÆJÿìÆPÿâÆQÿâÆRÿñÆSÿìÆTÿûÆUÿâÆVÿìÆWÿâÆXÿçÆYÿâÆZÿâÆ\ÿâÆ]ÿâÆ‰ÿØÆŽÿØÆÿØÆÿØÆ‘ÿØÆ”ÿØÆ•ÿØÆ–ÿØÆ—ÿØÆ˜ÿØÆšÿØÆŸÿÄÆ¢ÿìÆ£ÿìÆ¤ÿìÆ¥ÿìÆ¦ÿìÆ§ÿìÆ¨ÿìÆ©ÿöƪÿìÆ«ÿìÆ¬ÿìÆ­ÿìÆ²ÿìÆ³ÿâÆ´ÿñƵÿñƶÿñÆ·ÿñƸÿñƺÿñÆ»ÿçÆ¼ÿçÆ½ÿçÆ¾ÿçÆ¿ÿâÆÁÿâÆÃÿìÆÅÿìÆÇÿìÆÈÿØÆÊÿØÆËÿöÆÌÿØÆÎÿØÆÏÿöÆÑÿûÆÕÿìÆ×ÿìÆÛÿìÆÞÿØÆàÿØÆáÿìÆâÿØÆãÿìÆäÿØÆåÿìÆÿâÆÿâÆ ÿâÆÿØÆÿñÆÿØÆÿñÆÿØÆÿñÆÿØÆÿñÆÿâÆÿâÆÿìÆ ÿâÆ!ÿìÆ"ÿâÆ#ÿìÆ$ÿØÆ%ÿâÆ&ÿØÆ+ÿçÆ-ÿçÆ/ÿçÆ1ÿçÆ3ÿçÆ8ÿÄÆ9ÿâÆ:ÿÄÆ;ÿöÆ<ÿâÆ=ÿöÆ>ÿâÆ?ÿöÆ@ÿâÆ ;ÿâÆ QÿìÆ ZÿâÆ [ÿìÆ \ÿâÆ ]ÿìÆ dÿØÆ eÿâÆ fÿØÆ gÿâÆ èÿÄÆ éÿâÆÙÿâÆÚÿâÆÜÿâÆÝÿâÇDÿöÇFÿñÇGÿöÇIÿöÇJÿöÇPÿöÇQÿöÇRÿìÇTÿöÇUÿöÇVÿöÇWÿöÇXÿöÇYÿìÇZÿìÇ[ÿöÇ\ÿìÇ]ÿöÇ¢ÿöÇ£ÿöǤÿöÇ¥ÿöǦÿöǧÿöǨÿöÇ©ÿñdzÿöÇ´ÿìǵÿìǶÿìÇ·ÿìǸÿìǺÿìÇ»ÿöǼÿöǽÿöǾÿöÇ¿ÿìÇÁÿìÇÃÿöÇÅÿöÇÇÿöÇËÿñÇÏÿñÇÑÿöÇÓÿöÇáÿöÇãÿöÇåÿöÇÿöÇÿöÇ ÿöÇÿìÇÿìÇÿìÇÿìÇÿöÇÿöÇ!ÿöÇ#ÿöÇ%ÿöÇ+ÿöÇ-ÿöÇ/ÿöÇ1ÿöÇ3ÿöÇ9ÿìÇ<ÿöÇ>ÿöÇ@ÿöÇ2ÿöÇ ÿöÇ ÿöÇ [ÿöÇ ]ÿöÇ eÿöÇ gÿöÇ éÿìÇÙÿöÇÚÿöÇÛÿöÇÜÿöÇÝÿöÈÿâÈÿâÈ$ÿØÈ&ÿìÈ*ÿìÈ,ÿØÈ2ÿìÈ4ÿìÈ6ÿöÈ7ÿØÈ9ÿÎÈ:ÿÎÈ;ÿØÈ<ÿÎÈ=ÿØÈDÿìÈIÿìÈJÿìÈMÿâÈPÿâÈQÿâÈRÿûÈSÿìÈUÿìÈVÿìÈWÿìÈXÿçÈYÿöÈZÿöÈ[ÿâÈ\ÿöÈ]ÿâÈ}ÿìÈ‚ÿØÈƒÿØÈ„ÿØÈ…ÿØÈ†ÿØÈ‡ÿØÈˆÿØÈ‰ÿìÈŽÿØÈÿØÈÿØÈ‘ÿØÈ”ÿìÈ•ÿìÈ–ÿìÈ—ÿìȘÿìÈšÿìÈŸÿÎÈ¢ÿìÈ£ÿìȤÿìÈ¥ÿìȦÿìȧÿìȨÿìȳÿâÈ´ÿûȵÿûȶÿûÈ·ÿûȸÿûȺÿûÈ»ÿçȼÿçȽÿçȾÿçÈ¿ÿöÈÁÿöÈÂÿØÈÃÿìÈÄÿØÈÅÿìÈÆÿØÈÇÿìÈÈÿìÈÊÿìÈÌÿìÈÎÿìÈÞÿìÈàÿìÈáÿìÈâÿìÈãÿìÈäÿìÈåÿìÈÿâÈÿâÈ ÿâÈÿìÈÿûÈÿìÈÿûÈÿìÈÿûÈÿìÈÿûÈÿìÈÿöÈÿìÈ ÿöÈ!ÿìÈ"ÿöÈ#ÿìÈ$ÿØÈ%ÿìÈ&ÿØÈ+ÿçÈ-ÿçÈ/ÿçÈ1ÿçÈ3ÿçÈ8ÿÎÈ9ÿöÈ:ÿÎÈ;ÿØÈ<ÿâÈ=ÿØÈ>ÿâÈ?ÿØÈ@ÿâÈ ;ÿâÈ QÿìÈ ZÿöÈ [ÿìÈ \ÿöÈ ]ÿìÈ dÿØÈ eÿìÈ fÿØÈ gÿìÈ èÿÎÈ éÿöÈ òÿØÈ õÿØÈ öÿØÈ ÿìÈÙÿìÈÚÿìÈÜÿìÈÝÿìÉPÿöÉQÿöÉUÿöÉXÿûÉ[ÿöÉ]ÿöɳÿöÉ»ÿûɼÿûɽÿûɾÿûÉÿöÉÿöÉ ÿöÉÿöÉ+ÿûÉ-ÿûÉ/ÿûÉ1ÿûÉ3ÿûÉ<ÿöÉ>ÿöÉ@ÿöÉ2ÿöÊÿâÊÿâÊ$ÿØÊ&ÿìÊ*ÿìÊ,ÿØÊ2ÿìÊ4ÿìÊ6ÿöÊ7ÿØÊ9ÿÎÊ:ÿÎÊ;ÿØÊ<ÿÎÊ=ÿØÊDÿìÊIÿìÊJÿìÊMÿâÊPÿâÊQÿâÊRÿûÊSÿìÊUÿìÊVÿìÊWÿìÊXÿçÊYÿöÊZÿöÊ[ÿâÊ\ÿöÊ]ÿâÊ}ÿìÊ‚ÿØÊƒÿØÊ„ÿØÊ…ÿØÊ†ÿØÊ‡ÿØÊˆÿØÊ‰ÿìÊŽÿØÊÿØÊÿØÊ‘ÿØÊ”ÿìÊ•ÿìÊ–ÿìÊ—ÿìʘÿìÊšÿìÊŸÿÎÊ¢ÿìÊ£ÿìʤÿìÊ¥ÿìʦÿìʧÿìʨÿìʳÿâÊ´ÿûʵÿûʶÿûÊ·ÿûʸÿûʺÿûÊ»ÿçʼÿçʽÿçʾÿçÊ¿ÿöÊÁÿöÊÂÿØÊÃÿìÊÄÿØÊÅÿìÊÆÿØÊÇÿìÊÈÿìÊÊÿìÊÌÿìÊÎÿìÊÞÿìÊàÿìÊáÿìÊâÿìÊãÿìÊäÿìÊåÿìÊÿâÊÿâÊ ÿâÊÿìÊÿûÊÿìÊÿûÊÿìÊÿûÊÿìÊÿûÊÿìÊÿöÊÿìÊ ÿöÊ!ÿìÊ"ÿöÊ#ÿìÊ$ÿØÊ%ÿìÊ&ÿØÊ+ÿçÊ-ÿçÊ/ÿçÊ1ÿçÊ3ÿçÊ8ÿÎÊ9ÿöÊ:ÿÎÊ;ÿØÊ<ÿâÊ=ÿØÊ>ÿâÊ?ÿØÊ@ÿâÊ ;ÿâÊ QÿìÊ ZÿöÊ [ÿìÊ \ÿöÊ ]ÿìÊ dÿØÊ eÿìÊ fÿØÊ gÿìÊ èÿÎÊ éÿöÊ òÿØÊ õÿØÊ öÿØÊ ÿìÊÙÿìÊÚÿìÊÜÿìÊÝÿìËÿìËÿìËPÿöËQÿöËUÿöËXÿûË[ÿöË]ÿö˳ÿöË»ÿû˼ÿû˽ÿû˾ÿûËÿöËÿöË ÿöËÿöË+ÿûË-ÿûË/ÿûË1ÿûË3ÿûË<ÿöË>ÿöË@ÿöË2ÿöË òÿØË õÿØË öÿØÌÿâÌÿâÌ$ÿØÌ&ÿìÌ*ÿìÌ,ÿØÌ2ÿìÌ4ÿìÌ6ÿöÌ7ÿØÌ9ÿÎÌ:ÿÎÌ;ÿØÌ<ÿÎÌ=ÿØÌDÿìÌIÿìÌJÿìÌMÿâÌPÿâÌQÿâÌRÿûÌSÿìÌUÿìÌVÿìÌWÿìÌXÿçÌYÿöÌZÿöÌ[ÿâÌ\ÿöÌ]ÿâÌ}ÿìÌ‚ÿØÌƒÿØÌ„ÿØÌ…ÿØÌ†ÿØÌ‡ÿØÌˆÿØÌ‰ÿìÌŽÿØÌÿØÌÿØÌ‘ÿØÌ”ÿìÌ•ÿìÌ–ÿìÌ—ÿì̘ÿìÌšÿìÌŸÿÎÌ¢ÿìÌ£ÿì̤ÿìÌ¥ÿì̦ÿì̧ÿį̀ÿì̳ÿâÌ´ÿû̵ÿû̶ÿûÌ·ÿû̸ÿû̺ÿûÌ»ÿç̼ÿç̽ÿç̾ÿçÌ¿ÿöÌÁÿöÌÂÿØÌÃÿìÌÄÿØÌÅÿìÌÆÿØÌÇÿìÌÈÿìÌÊÿìÌÌÿìÌÎÿìÌÞÿìÌàÿìÌáÿìÌâÿìÌãÿìÌäÿìÌåÿìÌÿâÌÿâÌ ÿâÌÿìÌÿûÌÿìÌÿûÌÿìÌÿûÌÿìÌÿûÌÿìÌÿöÌÿìÌ ÿöÌ!ÿìÌ"ÿöÌ#ÿìÌ$ÿØÌ%ÿìÌ&ÿØÌ+ÿçÌ-ÿçÌ/ÿçÌ1ÿçÌ3ÿçÌ8ÿÎÌ9ÿöÌ:ÿÎÌ;ÿØÌ<ÿâÌ=ÿØÌ>ÿâÌ?ÿØÌ@ÿâÌ ;ÿâÌ QÿìÌ ZÿöÌ [ÿìÌ \ÿöÌ ]ÿìÌ dÿØÌ eÿìÌ fÿØÌ gÿìÌ èÿÎÌ éÿöÌ òÿØÌ õÿØÌ öÿØÌ ÿìÌÙÿìÌÚÿìÌÜÿìÌÝÿìÍPÿöÍQÿöÍUÿöÍXÿûÍ[ÿöÍ]ÿöͳÿöÍ»ÿûͼÿûͽÿû;ÿûÍÿöÍÿöÍ ÿöÍÿöÍ+ÿûÍ-ÿûÍ/ÿûÍ1ÿûÍ3ÿûÍ<ÿöÍ>ÿöÍ@ÿöÍ2ÿöÎÿâÎÿâÎ$ÿØÎ&ÿìÎ*ÿìÎ,ÿØÎ2ÿìÎ4ÿìÎ6ÿöÎ7ÿØÎ9ÿÎÎ:ÿÎÎ;ÿØÎ<ÿÎÎ=ÿØÎDÿìÎIÿìÎJÿìÎMÿâÎPÿâÎQÿâÎRÿûÎSÿìÎUÿìÎVÿìÎWÿìÎXÿçÎYÿöÎZÿöÎ[ÿâÎ\ÿöÎ]ÿâÎ}ÿì΂ÿØÎƒÿØÎ„ÿØÎ…ÿØÎ†ÿØÎ‡ÿØÎˆÿØÎ‰ÿìÎŽÿØÎÿØÎÿØÎ‘ÿØÎ”ÿìΕÿìΖÿìΗÿìΘÿìΚÿìΟÿÎ΢ÿìΣÿìΤÿìÎ¥ÿìΦÿìΧÿìΨÿìγÿâδÿûεÿûζÿûηÿûθÿûκÿûλÿçμÿçνÿçξÿçοÿöÎÁÿöÎÂÿØÎÃÿìÎÄÿØÎÅÿìÎÆÿØÎÇÿìÎÈÿìÎÊÿìÎÌÿìÎÎÿìÎÞÿìÎàÿìÎáÿìÎâÿìÎãÿìÎäÿìÎåÿìÎÿâÎÿâÎ ÿâÎÿìÎÿûÎÿìÎÿûÎÿìÎÿûÎÿìÎÿûÎÿìÎÿöÎÿìÎ ÿöÎ!ÿìÎ"ÿöÎ#ÿìÎ$ÿØÎ%ÿìÎ&ÿØÎ+ÿçÎ-ÿçÎ/ÿçÎ1ÿçÎ3ÿçÎ8ÿÎÎ9ÿöÎ:ÿÎÎ;ÿØÎ<ÿâÎ=ÿØÎ>ÿâÎ?ÿØÎ@ÿâÎ ;ÿâÎ QÿìÎ ZÿöÎ [ÿìÎ \ÿöÎ ]ÿìÎ dÿØÎ eÿìÎ fÿØÎ gÿìÎ èÿÎÎ éÿöÎ òÿØÎ õÿØÎ öÿØÎ ÿìÎÙÿìÎÚÿìÎÜÿìÎÝÿìÏÿìÏÿìÏPÿöÏQÿöÏUÿöÏXÿûÏ[ÿöÏ]ÿöϳÿöÏ»ÿûϼÿûϽÿûϾÿûÏÿöÏÿöÏ ÿöÏÿöÏ+ÿûÏ-ÿûÏ/ÿûÏ1ÿûÏ3ÿûÏ<ÿöÏ>ÿöÏ@ÿöÏ2ÿöÏ òÿØÏ õÿØÏ öÿØÐ$ÿÎÐ&ÿìÐ*ÿìÐ,ÿÉÐ-ÿöÐ2ÿìÐ4ÿìÐ6ÿâÐ7ÿÎÐ9ÿÎÐ:ÿÎÐ;ÿÉÐ<ÿÎÐ=ÿÉÐDÿçÐFÿöÐGÿûÐHÿöÐIÿöÐJÿçÐMÿöÐPÿØÐQÿØÐRÿöÐSÿçÐTÿûÐUÿØÐVÿìÐWÿöÐXÿÝÐYÿöÐZÿöÐ[ÿìÐ\ÿöÐ]ÿØÐ‚ÿÎЃÿÎЄÿÎÐ…ÿÎІÿÎЇÿÎЈÿÎЉÿìÐŽÿÉÐÿÉÐÿÉБÿÉДÿìЕÿìЖÿìЗÿìИÿìКÿìПÿÎТÿçУÿçФÿçÐ¥ÿçЦÿçЧÿçШÿçЩÿöЪÿöЫÿöЬÿöЭÿöвÿöгÿØÐ´ÿöеÿöжÿöзÿöиÿöкÿöлÿÝмÿÝнÿÝоÿÝпÿöÐÁÿöÐÂÿÎÐÃÿçÐÄÿÎÐÅÿçÐÆÿÎÐÇÿçÐÈÿìÐÊÿìÐËÿöÐÌÿìÐÎÿìÐÏÿöÐÑÿûÐÕÿöÐ×ÿöÐÛÿöÐÞÿìÐàÿìÐáÿçÐâÿìÐãÿçÐäÿìÐåÿçÐÿØÐÿØÐ ÿØÐÿìÐÿöÐÿìÐÿöÐÿìÐÿöÐÿìÐÿöÐÿØÐÿâÐÿìÐ ÿâÐ!ÿìÐ"ÿâÐ#ÿìÐ$ÿÎÐ%ÿöÐ&ÿÎÐ+ÿÝÐ-ÿÝÐ/ÿÝÐ1ÿÝÐ3ÿÝÐ8ÿÎÐ9ÿöÐ:ÿÎÐ;ÿÉÐ<ÿØÐ=ÿÉÐ>ÿØÐ?ÿÉÐ@ÿØÐ ;ÿØÐ QÿçÐ ZÿâÐ [ÿìÐ \ÿâÐ ]ÿìÐ dÿÎÐ eÿöÐ fÿÎÐ gÿöÐ èÿÎÐ éÿöÐÙÿöÐÚÿöÐÜÿöÐÝÿöÒ$ÿÎÒ&ÿìÒ*ÿìÒ,ÿÉÒ-ÿöÒ2ÿìÒ4ÿìÒ6ÿâÒ7ÿÎÒ9ÿÎÒ:ÿÎÒ;ÿÉÒ<ÿÎÒ=ÿÉÒDÿçÒFÿöÒGÿûÒHÿöÒIÿöÒJÿçÒMÿöÒPÿØÒQÿØÒRÿöÒSÿçÒTÿûÒUÿØÒVÿìÒWÿöÒXÿÝÒYÿöÒZÿöÒ[ÿìÒ\ÿöÒ]ÿØÒ‚ÿÎÒƒÿÎÒ„ÿÎÒ…ÿÎÒ†ÿÎÒ‡ÿÎÒˆÿÎÒ‰ÿìÒŽÿÉÒÿÉÒÿÉÒ‘ÿÉÒ”ÿìÒ•ÿìÒ–ÿìÒ—ÿìÒ˜ÿìÒšÿìÒŸÿÎÒ¢ÿçÒ£ÿçÒ¤ÿçÒ¥ÿçÒ¦ÿçÒ§ÿçÒ¨ÿçÒ©ÿöÒªÿöÒ«ÿöÒ¬ÿöÒ­ÿöÒ²ÿöÒ³ÿØÒ´ÿöÒµÿöÒ¶ÿöÒ·ÿöÒ¸ÿöÒºÿöÒ»ÿÝÒ¼ÿÝÒ½ÿÝÒ¾ÿÝÒ¿ÿöÒÁÿöÒÂÿÎÒÃÿçÒÄÿÎÒÅÿçÒÆÿÎÒÇÿçÒÈÿìÒÊÿìÒËÿöÒÌÿìÒÎÿìÒÏÿöÒÑÿûÒÕÿöÒ×ÿöÒÛÿöÒÞÿìÒàÿìÒáÿçÒâÿìÒãÿçÒäÿìÒåÿçÒÿØÒÿØÒ ÿØÒÿìÒÿöÒÿìÒÿöÒÿìÒÿöÒÿìÒÿöÒÿØÒÿâÒÿìÒ ÿâÒ!ÿìÒ"ÿâÒ#ÿìÒ$ÿÎÒ%ÿöÒ&ÿÎÒ+ÿÝÒ-ÿÝÒ/ÿÝÒ1ÿÝÒ3ÿÝÒ8ÿÎÒ9ÿöÒ:ÿÎÒ;ÿÉÒ<ÿØÒ=ÿÉÒ>ÿØÒ?ÿÉÒ@ÿØÒ ;ÿØÒ QÿçÒ ZÿâÒ [ÿìÒ \ÿâÒ ]ÿìÒ dÿÎÒ eÿöÒ fÿÎÒ gÿöÒ èÿÎÒ éÿöÒÙÿöÒÚÿöÒÜÿöÒÝÿöÔ$ÿâÔ&ÿØÔ*ÿØÔ,ÿØÔ-ÿìÔ2ÿØÔ4ÿØÔ6ÿÎÔ7ÿìÔ9ÿÎÔ:ÿÎÔ;ÿâÔ<ÿÎÔ=ÿâÔDÿâÔFÿâÔGÿçÔHÿâÔIÿâÔJÿâÔMÿâÔPÿØÔQÿØÔRÿÝÔSÿìÔTÿçÔUÿâÔVÿìÔWÿâÔXÿÓÔYÿØÔZÿØÔ[ÿâÔ\ÿØÔ]ÿØÔ‚ÿâÔƒÿâÔ„ÿâÔ…ÿâÔ†ÿâÔ‡ÿâÔˆÿâÔ‰ÿØÔŽÿØÔÿØÔÿØÔ‘ÿØÔ”ÿØÔ•ÿØÔ–ÿØÔ—ÿØÔ˜ÿØÔšÿØÔŸÿÎÔ¢ÿâÔ£ÿâÔ¤ÿâÔ¥ÿâÔ¦ÿâÔ§ÿâÔ¨ÿâÔ©ÿâÔªÿâÔ«ÿâÔ¬ÿâÔ­ÿâÔ²ÿâÔ³ÿØÔ´ÿÝÔµÿÝÔ¶ÿÝÔ·ÿÝÔ¸ÿÝÔºÿÝÔ»ÿÓÔ¼ÿÓÔ½ÿÓÔ¾ÿÓÔ¿ÿØÔÁÿØÔÂÿâÔÃÿâÔÄÿâÔÅÿâÔÆÿâÔÇÿâÔÈÿØÔÊÿØÔËÿâÔÌÿØÔÎÿØÔÏÿâÔÑÿçÔÕÿâÔ×ÿâÔÛÿâÔÞÿØÔàÿØÔáÿâÔâÿØÔãÿâÔäÿØÔåÿâÔÿØÔÿØÔ ÿØÔÿØÔÿÝÔÿØÔÿÝÔÿØÔÿÝÔÿØÔÿÝÔÿâÔÿÎÔÿìÔ ÿÎÔ!ÿìÔ"ÿÎÔ#ÿìÔ$ÿìÔ%ÿâÔ&ÿìÔ+ÿÓÔ-ÿÓÔ/ÿÓÔ1ÿÓÔ3ÿÓÔ8ÿÎÔ9ÿØÔ:ÿÎÔ;ÿâÔ<ÿØÔ=ÿâÔ>ÿØÔ?ÿâÔ@ÿØÔ ;ÿØÔ QÿìÔ ZÿÎÔ [ÿìÔ \ÿÎÔ ]ÿìÔ dÿìÔ eÿâÔ fÿìÔ gÿâÔ èÿÎÔ éÿØÔÙÿâÔÚÿâÔÜÿâÔÝÿâÕÿØÕÿöÕÿØÕDÿöÕIÿöÕJÿöÕMÿìÕPÿìÕQÿìÕSÿöÕUÿöÕVÿöÕWÿöÕXÿìÕYÿìÕZÿìÕ[ÿìÕ\ÿìÕ]ÿìÕmÿöÕ¢ÿöÕ£ÿöÕ¤ÿöÕ¥ÿöÕ¦ÿöÕ§ÿöÕ¨ÿöÕ³ÿìÕ»ÿìÕ¼ÿìÕ½ÿìÕ¾ÿìÕ¿ÿìÕÁÿìÕÃÿöÕÅÿöÕÇÿöÕáÿöÕãÿöÕåÿöÕÿìÕÿìÕ ÿìÕÿöÕÿöÕ!ÿöÕ#ÿöÕ%ÿöÕ+ÿìÕ-ÿìÕ/ÿìÕ1ÿìÕ3ÿìÕ9ÿìÕ<ÿìÕ>ÿìÕ@ÿìÕ2ÿìÕ ÿöÕ QÿöÕ [ÿöÕ ]ÿöÕ eÿöÕ gÿöÕ éÿìÕ òÿÓÕ õÿÓÕ öÿÓÕ ÿöÕÙÿöÕÚÿöÕÛÿöÕÜÿöÕÝÿö×ÿØ×ÿö×ÿØ×Dÿö×Iÿö×Jÿö×Mÿì×Pÿì×Qÿì×Sÿö×Uÿö×Vÿö×Wÿö×Xÿì×Yÿì×Zÿì×[ÿì×\ÿì×]ÿì×mÿö×¢ÿö×£ÿöפÿö×¥ÿöצÿö×§ÿöרÿö׳ÿì×»ÿì×¼ÿì×½ÿì×¾ÿì׿ÿì×Áÿì×Ãÿö×Åÿö×Çÿö×áÿö×ãÿö×åÿö×ÿì×ÿì× ÿì×ÿö×ÿö×!ÿö×#ÿö×%ÿö×+ÿì×-ÿì×/ÿì×1ÿì×3ÿì×9ÿì×<ÿì×>ÿì×@ÿì×2ÿì× ÿö× Qÿö× [ÿö× ]ÿö× eÿö× gÿö× éÿì× òÿÓ× õÿÓ× öÿÓ× ÿö×Ùÿö×Úÿö×Ûÿö×Üÿö×ÝÿöÙDÿöÙIÿöÙJÿöÙMÿìÙPÿìÙQÿìÙSÿöÙUÿöÙVÿöÙWÿöÙXÿìÙYÿìÙZÿìÙ[ÿìÙ\ÿìÙ]ÿìÙ¢ÿöÙ£ÿöÙ¤ÿöÙ¥ÿöÙ¦ÿöÙ§ÿöÙ¨ÿöÙ³ÿìÙ»ÿìÙ¼ÿìÙ½ÿìÙ¾ÿìÙ¿ÿìÙÁÿìÙÃÿöÙÅÿöÙÇÿöÙáÿöÙãÿöÙåÿöÙÿìÙÿìÙ ÿìÙÿöÙÿöÙ!ÿöÙ#ÿöÙ%ÿöÙ+ÿìÙ-ÿìÙ/ÿìÙ1ÿìÙ3ÿìÙ9ÿìÙ<ÿìÙ>ÿìÙ@ÿìÙ2ÿìÙ ÿöÙ QÿöÙ [ÿöÙ ]ÿöÙ eÿöÙ gÿöÙ éÿìÙÙÿöÙÚÿöÙÛÿöÙÜÿöÙÝÿöÚ$ÿâÚ&ÿØÚ*ÿØÚ,ÿØÚ-ÿìÚ2ÿØÚ4ÿØÚ6ÿÎÚ7ÿìÚ9ÿÎÚ:ÿÎÚ;ÿâÚ<ÿÎÚ=ÿâÚDÿâÚFÿâÚGÿçÚHÿâÚIÿâÚJÿâÚMÿâÚPÿØÚQÿØÚRÿÝÚSÿìÚTÿçÚUÿâÚVÿìÚWÿâÚXÿÓÚYÿØÚZÿØÚ[ÿâÚ\ÿØÚ]ÿØÚ‚ÿâÚƒÿâÚ„ÿâÚ…ÿâÚ†ÿâÚ‡ÿâÚˆÿâÚ‰ÿØÚŽÿØÚÿØÚÿØÚ‘ÿØÚ”ÿØÚ•ÿØÚ–ÿØÚ—ÿØÚ˜ÿØÚšÿØÚŸÿÎÚ¢ÿâÚ£ÿâÚ¤ÿâÚ¥ÿâÚ¦ÿâÚ§ÿâÚ¨ÿâÚ©ÿâÚªÿâÚ«ÿâÚ¬ÿâÚ­ÿâÚ²ÿâÚ³ÿØÚ´ÿÝÚµÿÝÚ¶ÿÝÚ·ÿÝÚ¸ÿÝÚºÿÝÚ»ÿÓÚ¼ÿÓÚ½ÿÓÚ¾ÿÓÚ¿ÿØÚÁÿØÚÂÿâÚÃÿâÚÄÿâÚÅÿâÚÆÿâÚÇÿâÚÈÿØÚÊÿØÚËÿâÚÌÿØÚÎÿØÚÏÿâÚÑÿçÚÕÿâÚ×ÿâÚÛÿâÚÞÿØÚàÿØÚáÿâÚâÿØÚãÿâÚäÿØÚåÿâÚÿØÚÿØÚ ÿØÚÿØÚÿÝÚÿØÚÿÝÚÿØÚÿÝÚÿØÚÿÝÚÿâÚÿÎÚÿìÚ ÿÎÚ!ÿìÚ"ÿÎÚ#ÿìÚ$ÿìÚ%ÿâÚ&ÿìÚ+ÿÓÚ-ÿÓÚ/ÿÓÚ1ÿÓÚ3ÿÓÚ8ÿÎÚ9ÿØÚ:ÿÎÚ;ÿâÚ<ÿØÚ=ÿâÚ>ÿØÚ?ÿâÚ@ÿØÚ ;ÿØÚ QÿìÚ ZÿÎÚ [ÿìÚ \ÿÎÚ ]ÿìÚ dÿìÚ eÿâÚ fÿìÚ gÿâÚ èÿÎÚ éÿØÚÙÿâÚÚÿâÚÜÿâÚÝÿâÛDÿöÛIÿöÛJÿöÛMÿìÛPÿìÛQÿìÛSÿöÛUÿöÛVÿöÛWÿöÛXÿìÛYÿìÛZÿìÛ[ÿìÛ\ÿìÛ]ÿìÛ¢ÿöÛ£ÿöÛ¤ÿöÛ¥ÿöÛ¦ÿöÛ§ÿöÛ¨ÿöÛ³ÿìÛ»ÿìÛ¼ÿìÛ½ÿìÛ¾ÿìÛ¿ÿìÛÁÿìÛÃÿöÛÅÿöÛÇÿöÛáÿöÛãÿöÛåÿöÛÿìÛÿìÛ ÿìÛÿöÛÿöÛ!ÿöÛ#ÿöÛ%ÿöÛ+ÿìÛ-ÿìÛ/ÿìÛ1ÿìÛ3ÿìÛ9ÿìÛ<ÿìÛ>ÿìÛ@ÿìÛ2ÿìÛ ÿöÛ QÿöÛ [ÿöÛ ]ÿöÛ eÿöÛ gÿöÛ éÿìÛÙÿöÛÚÿöÛÛÿöÛÜÿöÛÝÿöÜ$ÿâÜ&ÿØÜ*ÿØÜ,ÿØÜ-ÿìÜ2ÿØÜ4ÿØÜ6ÿÎÜ7ÿìÜ9ÿÎÜ:ÿÎÜ;ÿâÜ<ÿÎÜ=ÿâÜDÿâÜFÿâÜGÿçÜHÿâÜIÿâÜJÿâÜMÿâÜPÿØÜQÿØÜRÿÝÜSÿìÜTÿçÜUÿâÜVÿìÜWÿâÜXÿÓÜYÿØÜZÿØÜ[ÿâÜ\ÿØÜ]ÿØÜ‚ÿâ܃ÿâÜ„ÿâÜ…ÿâ܆ÿâ܇ÿâ܈ÿâ܉ÿØÜŽÿØÜÿØÜÿØÜ‘ÿØÜ”ÿØÜ•ÿØÜ–ÿØÜ—ÿØÜ˜ÿØÜšÿØÜŸÿÎÜ¢ÿâÜ£ÿâܤÿâÜ¥ÿâܦÿâܧÿâܨÿâÜ©ÿâܪÿâÜ«ÿâܬÿâÜ­ÿâܲÿâܳÿØÜ´ÿÝܵÿÝܶÿÝÜ·ÿÝܸÿÝܺÿÝÜ»ÿÓܼÿÓܽÿÓܾÿÓÜ¿ÿØÜÁÿØÜÂÿâÜÃÿâÜÄÿâÜÅÿâÜÆÿâÜÇÿâÜÈÿØÜÊÿØÜËÿâÜÌÿØÜÎÿØÜÏÿâÜÑÿçÜÕÿâÜ×ÿâÜÛÿâÜÞÿØÜàÿØÜáÿâÜâÿØÜãÿâÜäÿØÜåÿâÜÿØÜÿØÜ ÿØÜÿØÜÿÝÜÿØÜÿÝÜÿØÜÿÝÜÿØÜÿÝÜÿâÜÿÎÜÿìÜ ÿÎÜ!ÿìÜ"ÿÎÜ#ÿìÜ$ÿìÜ%ÿâÜ&ÿìÜ+ÿÓÜ-ÿÓÜ/ÿÓÜ1ÿÓÜ3ÿÓÜ8ÿÎÜ9ÿØÜ:ÿÎÜ;ÿâÜ<ÿØÜ=ÿâÜ>ÿØÜ?ÿâÜ@ÿØÜ ;ÿØÜ QÿìÜ ZÿÎÜ [ÿìÜ \ÿÎÜ ]ÿìÜ dÿìÜ eÿâÜ fÿìÜ gÿâÜ èÿÎÜ éÿØÜÙÿâÜÚÿâÜÜÿâÜÝÿâÝDÿöÝIÿöÝJÿöÝMÿìÝPÿìÝQÿìÝSÿöÝUÿöÝVÿöÝWÿöÝXÿìÝYÿìÝZÿìÝ[ÿìÝ\ÿìÝ]ÿìÝ¢ÿöÝ£ÿöݤÿöÝ¥ÿöݦÿöݧÿöݨÿöݳÿìÝ»ÿìݼÿìݽÿìݾÿìÝ¿ÿìÝÁÿìÝÃÿöÝÅÿöÝÇÿöÝáÿöÝãÿöÝåÿöÝÿìÝÿìÝ ÿìÝÿöÝÿöÝ!ÿöÝ#ÿöÝ%ÿöÝ+ÿìÝ-ÿìÝ/ÿìÝ1ÿìÝ3ÿìÝ9ÿìÝ<ÿìÝ>ÿìÝ@ÿìÝ2ÿìÝ ÿöÝ QÿöÝ [ÿöÝ ]ÿöÝ eÿöÝ gÿöÝ éÿìÝÙÿöÝÚÿöÝÛÿöÝÜÿöÝÝÿöÞÿâÞÿâÞ$ÿØÞ&ÿìÞ*ÿìÞ,ÿØÞ2ÿìÞ4ÿìÞ6ÿöÞ7ÿØÞ9ÿÎÞ:ÿÎÞ;ÿØÞ<ÿÎÞ=ÿØÞDÿìÞIÿìÞJÿìÞMÿâÞPÿâÞQÿâÞRÿûÞSÿìÞUÿìÞVÿìÞWÿìÞXÿçÞYÿöÞZÿöÞ[ÿâÞ\ÿöÞ]ÿâÞ}ÿìÞ‚ÿØÞƒÿØÞ„ÿØÞ…ÿØÞ†ÿØÞ‡ÿØÞˆÿØÞ‰ÿìÞŽÿØÞÿØÞÿØÞ‘ÿØÞ”ÿìÞ•ÿìÞ–ÿìÞ—ÿìÞ˜ÿìÞšÿìÞŸÿÎÞ¢ÿìÞ£ÿìÞ¤ÿìÞ¥ÿìÞ¦ÿìÞ§ÿìÞ¨ÿìÞ³ÿâÞ´ÿûÞµÿûÞ¶ÿûÞ·ÿûÞ¸ÿûÞºÿûÞ»ÿçÞ¼ÿçÞ½ÿçÞ¾ÿçÞ¿ÿöÞÁÿöÞÂÿØÞÃÿìÞÄÿØÞÅÿìÞÆÿØÞÇÿìÞÈÿìÞÊÿìÞÌÿìÞÎÿìÞÞÿìÞàÿìÞáÿìÞâÿìÞãÿìÞäÿìÞåÿìÞÿâÞÿâÞ ÿâÞÿìÞÿûÞÿìÞÿûÞÿìÞÿûÞÿìÞÿûÞÿìÞÿöÞÿìÞ ÿöÞ!ÿìÞ"ÿöÞ#ÿìÞ$ÿØÞ%ÿìÞ&ÿØÞ+ÿçÞ-ÿçÞ/ÿçÞ1ÿçÞ3ÿçÞ8ÿÎÞ9ÿöÞ:ÿÎÞ;ÿØÞ<ÿâÞ=ÿØÞ>ÿâÞ?ÿØÞ@ÿâÞ ;ÿâÞ QÿìÞ ZÿöÞ [ÿìÞ \ÿöÞ ]ÿìÞ dÿØÞ eÿìÞ fÿØÞ gÿìÞ èÿÎÞ éÿöÞ òÿØÞ õÿØÞ öÿØÞ ÿìÞÙÿìÞÚÿìÞÜÿìÞÝÿìàÿâàÿâà$ÿØà&ÿìà*ÿìà,ÿØà2ÿìà4ÿìà6ÿöà7ÿØà9ÿÎà:ÿÎà;ÿØà<ÿÎà=ÿØàDÿìàIÿìàJÿìàMÿâàPÿâàQÿâàRÿûàSÿìàUÿìàVÿìàWÿìàXÿçàYÿöàZÿöà[ÿâà\ÿöà]ÿâà}ÿìà‚ÿØàƒÿØà„ÿØà…ÿØà†ÿØà‡ÿØàˆÿØà‰ÿìàŽÿØàÿØàÿØà‘ÿØà”ÿìà•ÿìà–ÿìà—ÿìà˜ÿìàšÿìàŸÿÎà¢ÿìà£ÿìà¤ÿìà¥ÿìà¦ÿìà§ÿìà¨ÿìà³ÿâà´ÿûàµÿûà¶ÿûà·ÿûà¸ÿûàºÿûà»ÿçà¼ÿçà½ÿçà¾ÿçà¿ÿöàÁÿöàÂÿØàÃÿìàÄÿØàÅÿìàÆÿØàÇÿìàÈÿìàÊÿìàÌÿìàÎÿìàÞÿìààÿìàáÿìàâÿìàãÿìàäÿìàåÿìàÿâàÿâà ÿâàÿìàÿûàÿìàÿûàÿìàÿûàÿìàÿûàÿìàÿöàÿìà ÿöà!ÿìà"ÿöà#ÿìà$ÿØà%ÿìà&ÿØà+ÿçà-ÿçà/ÿçà1ÿçà3ÿçà8ÿÎà9ÿöà:ÿÎà;ÿØà<ÿâà=ÿØà>ÿâà?ÿØà@ÿâà ;ÿâà Qÿìà Zÿöà [ÿìà \ÿöà ]ÿìà dÿØà eÿìà fÿØà gÿìà èÿÎà éÿöà òÿØà õÿØà öÿØà ÿìàÙÿìàÚÿìàÜÿìàÝÿìáÿØáÿÄáÿØáFÿöáGÿûáHÿöáRÿöáTÿûámÿÄá}ÿâá©ÿöáªÿöá«ÿöá¬ÿöá­ÿöá²ÿöá´ÿöáµÿöá¶ÿöá·ÿöá¸ÿöáºÿöáËÿöáÏÿöáÑÿûáÓÿûáÕÿöá×ÿöáÿöáÿöáÿöáÿöá ÿûá òÿØá õÿØá öÿØá ÿÄá ÿââÿââÿââ$ÿØâ&ÿìâ*ÿìâ,ÿØâ2ÿìâ4ÿìâ6ÿöâ7ÿØâ9ÿÎâ:ÿÎâ;ÿØâ<ÿÎâ=ÿØâDÿìâIÿìâJÿìâMÿââPÿââQÿââRÿûâSÿìâUÿìâVÿìâWÿìâXÿçâYÿöâZÿöâ[ÿââ\ÿöâ]ÿââ}ÿìâ‚ÿØâƒÿØâ„ÿØâ…ÿØâ†ÿØâ‡ÿØâˆÿØâ‰ÿìâŽÿØâÿØâÿØâ‘ÿØâ”ÿìâ•ÿìâ–ÿìâ—ÿìâ˜ÿìâšÿìâŸÿÎâ¢ÿìâ£ÿìâ¤ÿìâ¥ÿìâ¦ÿìâ§ÿìâ¨ÿìâ³ÿââ´ÿûâµÿûâ¶ÿûâ·ÿûâ¸ÿûâºÿûâ»ÿçâ¼ÿçâ½ÿçâ¾ÿçâ¿ÿöâÁÿöâÂÿØâÃÿìâÄÿØâÅÿìâÆÿØâÇÿìâÈÿìâÊÿìâÌÿìâÎÿìâÞÿìâàÿìâáÿìââÿìâãÿìâäÿìâåÿìâÿââÿââ ÿââÿìâÿûâÿìâÿûâÿìâÿûâÿìâÿûâÿìâÿöâÿìâ ÿöâ!ÿìâ"ÿöâ#ÿìâ$ÿØâ%ÿìâ&ÿØâ+ÿçâ-ÿçâ/ÿçâ1ÿçâ3ÿçâ8ÿÎâ9ÿöâ:ÿÎâ;ÿØâ<ÿââ=ÿØâ>ÿââ?ÿØâ@ÿââ ;ÿââ Qÿìâ Zÿöâ [ÿìâ \ÿöâ ]ÿìâ dÿØâ eÿìâ fÿØâ gÿìâ èÿÎâ éÿöâ òÿØâ õÿØâ öÿØâ ÿìâÙÿìâÚÿìâÜÿìâÝÿìãÿØãÿÄãÿØãFÿöãGÿûãHÿöãRÿöãTÿûãmÿÄã}ÿâã©ÿöãªÿöã«ÿöã¬ÿöã­ÿöã²ÿöã´ÿöãµÿöã¶ÿöã·ÿöã¸ÿöãºÿöãËÿöãÏÿöãÑÿûãÓÿûãÕÿöã×ÿöãÿöãÿöãÿöãÿöã ÿûã òÿØã õÿØã öÿØã ÿÄã ÿâäÿâäÿâä$ÿØä&ÿìä*ÿìä,ÿØä2ÿìä4ÿìä6ÿöä7ÿØä9ÿÎä:ÿÎä;ÿØä<ÿÎä=ÿØäDÿìäIÿìäJÿìäMÿâäPÿâäQÿâäRÿûäSÿìäUÿìäVÿìäWÿìäXÿçäYÿöäZÿöä[ÿâä\ÿöä]ÿâä}ÿìä‚ÿØäƒÿØä„ÿØä…ÿØä†ÿØä‡ÿØäˆÿØä‰ÿìäŽÿØäÿØäÿØä‘ÿØä”ÿìä•ÿìä–ÿìä—ÿìä˜ÿìäšÿìäŸÿÎä¢ÿìä£ÿìä¤ÿìä¥ÿìä¦ÿìä§ÿìä¨ÿìä³ÿâä´ÿûäµÿûä¶ÿûä·ÿûä¸ÿûäºÿûä»ÿçä¼ÿçä½ÿçä¾ÿçä¿ÿöäÁÿöäÂÿØäÃÿìäÄÿØäÅÿìäÆÿØäÇÿìäÈÿìäÊÿìäÌÿìäÎÿìäÞÿìäàÿìäáÿìäâÿìäãÿìääÿìäåÿìäÿâäÿâä ÿâäÿìäÿûäÿìäÿûäÿìäÿûäÿìäÿûäÿìäÿöäÿìä ÿöä!ÿìä"ÿöä#ÿìä$ÿØä%ÿìä&ÿØä+ÿçä-ÿçä/ÿçä1ÿçä3ÿçä8ÿÎä9ÿöä:ÿÎä;ÿØä<ÿâä=ÿØä>ÿâä?ÿØä@ÿâä ;ÿâä Qÿìä Zÿöä [ÿìä \ÿöä ]ÿìä dÿØä eÿìä fÿØä gÿìä èÿÎä éÿöä òÿØä õÿØä öÿØä ÿìäÙÿìäÚÿìäÜÿìäÝÿìåÿØåÿÄåÿØåFÿöåGÿûåHÿöåRÿöåTÿûåmÿÄå}ÿâå©ÿöåªÿöå«ÿöå¬ÿöå­ÿöå²ÿöå´ÿöåµÿöå¶ÿöå·ÿöå¸ÿöåºÿöåËÿöåÏÿöåÑÿûåÓÿûåÕÿöå×ÿöåÿöåÿöåÿöåÿöå ÿûå òÿØå õÿØå öÿØå ÿÄå ÿâøÿØøÿÎøÿØø&ÿÎø*ÿÎø,ÿØø2ÿÎø4ÿÎø6ÿÎøDÿâøFÿØøGÿÝøHÿØøIÿâøJÿâøMÿöøPÿØøQÿØøRÿÓøSÿâøTÿÝøUÿØøVÿìøWÿâøXÿØøYÿâøZÿâø[ÿìø\ÿâø]ÿØømÿÎø}ÿØø‰ÿÎøŽÿØøÿØøÿØø‘ÿØø”ÿÎø•ÿÎø–ÿÎø—ÿÎø˜ÿÎøšÿÎø¢ÿâø£ÿâø¤ÿâø¥ÿâø¦ÿâø§ÿâø¨ÿâø©ÿØøªÿØø«ÿØø¬ÿØø­ÿØø²ÿØø³ÿØø´ÿÓøµÿÓø¶ÿÓø·ÿÓø¸ÿÓøºÿÓø»ÿØø¼ÿØø½ÿØø¾ÿØø¿ÿâøÁÿâøÃÿâøÅÿâøÇÿâøÈÿÎøÊÿÎøËÿØøÌÿÎøÎÿÎøÏÿØøÑÿÝøÕÿØø×ÿØøÛÿØøÞÿÎøàÿÎøáÿâøâÿÎøãÿâøäÿÎøåÿâøÿØøÿØø ÿØøÿÎøÿÓøÿÎøÿÓøÿÎøÿÓøÿÎøÿÓøÿØøÿÎøÿìø ÿÎø!ÿìø"ÿÎø#ÿìø%ÿâø+ÿØø-ÿØø/ÿØø1ÿØø3ÿØø9ÿâø<ÿØø>ÿØø@ÿØø ;ÿØø Qÿâø ZÿÎø [ÿìø \ÿÎø ]ÿìø eÿâø gÿâø éÿâø òÿìø õÿìø öÿìø ÿÎø ÿØøÙÿâøÚÿâøÜÿâøÝÿâùÿØùÿÄùÿØùDÿöùFÿìùGÿñùHÿìùJÿöùPÿìùQÿìùRÿçùSÿöùTÿñùUÿìùVÿöùXÿìùYÿìùZÿìù\ÿìù]ÿìùmÿÄù}ÿÄù¢ÿöù£ÿöù¤ÿöù¥ÿöù¦ÿöù§ÿöù¨ÿöù©ÿìùªÿìù«ÿìù¬ÿìù­ÿìù²ÿìù³ÿìù´ÿçùµÿçù¶ÿçù·ÿçù¸ÿçùºÿçù»ÿìù¼ÿìù½ÿìù¾ÿìù¿ÿìùÁÿìùÃÿöùÅÿöùÇÿöùËÿìùÏÿìùÑÿñùÓÿñùÕÿìù×ÿìùáÿöùãÿöùåÿöùÿìùÿìù ÿìùÿçùÿçùÿçùÿçùÿìùÿöù!ÿöù#ÿöù+ÿìù-ÿìù/ÿìù1ÿìù3ÿìù9ÿìù<ÿìù>ÿìù@ÿìù2ÿìù ÿñù Qÿöù [ÿöù ]ÿöù éÿìù òÿÄù õÿÄù öÿÄù ÿÄù ÿÄûÿìûÿÄûÿìû&ÿØû*ÿØû,ÿâû2ÿØû4ÿØû6ÿØû7ÿØû9ÿÄû:ÿÄû<ÿÄûDÿìûFÿâûGÿçûHÿâûIÿâûJÿìûMÿöûPÿØûQÿØûRÿÝûTÿçûUÿâûVÿìûWÿâûXÿØûYÿØûZÿØû\ÿØû]ÿØûmÿÄû}ÿØû‰ÿØûŽÿâûÿâûÿâû‘ÿâû”ÿØû•ÿØû–ÿØû—ÿØû˜ÿØûšÿØûŸÿÄû¢ÿìû£ÿìû¤ÿìû¥ÿìû¦ÿìû§ÿìû¨ÿìû©ÿâûªÿâû«ÿâû¬ÿâû­ÿâû²ÿâû³ÿØû´ÿÝûµÿÝû¶ÿÝû·ÿÝû¸ÿÝûºÿÝû»ÿØû¼ÿØû½ÿØû¾ÿØû¿ÿØûÁÿØûÃÿìûÅÿìûÇÿìûÈÿØûÊÿØûËÿâûÌÿØûÎÿØûÏÿâûÑÿçûÕÿâû×ÿâûÛÿâûÞÿØûàÿØûáÿìûâÿØûãÿìûäÿØûåÿìûÿØûÿØû ÿØûÿØûÿÝûÿØûÿÝûÿØûÿÝûÿØûÿÝûÿâûÿØûÿìû ÿØû!ÿìû"ÿØû#ÿìû$ÿØû%ÿâû&ÿØû+ÿØû-ÿØû/ÿØû1ÿØû3ÿØû8ÿÄû9ÿØû:ÿÄû<ÿØû>ÿØû@ÿØû ;ÿØû ZÿØû [ÿìû \ÿØû ]ÿìû dÿØû eÿâû fÿØû gÿâû èÿÄû éÿØû òÿÄû õÿÄû öÿÄû ÿÄû ÿØûÙÿâûÚÿâûÜÿâûÝÿâýÿìýÿÄýÿìý&ÿØý*ÿØý,ÿâý2ÿØý4ÿØý6ÿØý7ÿØý9ÿÄý:ÿÄý<ÿÄýDÿìýFÿâýGÿçýHÿâýIÿâýJÿìýMÿöýPÿØýQÿØýRÿÝýTÿçýUÿâýVÿìýWÿâýXÿØýYÿØýZÿØý\ÿØý]ÿØýmÿÄý}ÿØý‰ÿØýŽÿâýÿâýÿâý‘ÿâý”ÿØý•ÿØý–ÿØý—ÿØý˜ÿØýšÿØýŸÿÄý¢ÿìý£ÿìý¤ÿìý¥ÿìý¦ÿìý§ÿìý¨ÿìý©ÿâýªÿâý«ÿâý¬ÿâý­ÿâý²ÿâý³ÿØý´ÿÝýµÿÝý¶ÿÝý·ÿÝý¸ÿÝýºÿÝý»ÿØý¼ÿØý½ÿØý¾ÿØý¿ÿØýÁÿØýÃÿìýÅÿìýÇÿìýÈÿØýÊÿØýËÿâýÌÿØýÎÿØýÏÿâýÑÿçýÕÿâý×ÿâýÛÿâýÞÿØýàÿØýáÿìýâÿØýãÿìýäÿØýåÿìýÿØýÿØý ÿØýÿØýÿÝýÿØýÿÝýÿØýÿÝýÿØýÿÝýÿâýÿØýÿìý ÿØý!ÿìý"ÿØý#ÿìý$ÿØý%ÿâý&ÿØý+ÿØý-ÿØý/ÿØý1ÿØý3ÿØý8ÿÄý9ÿØý:ÿÄý<ÿØý>ÿØý@ÿØý ;ÿØý ZÿØý [ÿìý \ÿØý ]ÿìý dÿØý eÿâý fÿØý gÿâý èÿÄý éÿØý òÿÄý õÿÄý öÿÄý ÿÄý ÿØýÙÿâýÚÿâýÜÿâýÝÿâÿÿìÿÿÄÿÿìÿ&ÿØÿ*ÿØÿ,ÿâÿ2ÿØÿ4ÿØÿ6ÿØÿ7ÿØÿ9ÿÄÿ:ÿÄÿ<ÿÄÿDÿìÿFÿâÿGÿçÿHÿâÿIÿâÿJÿìÿMÿöÿPÿØÿQÿØÿRÿÝÿTÿçÿUÿâÿVÿìÿWÿâÿXÿØÿYÿØÿZÿØÿ\ÿØÿ]ÿØÿmÿÄÿ}ÿØÿ‰ÿØÿŽÿâÿÿâÿÿâÿ‘ÿâÿ”ÿØÿ•ÿØÿ–ÿØÿ—ÿØÿ˜ÿØÿšÿØÿŸÿÄÿ¢ÿìÿ£ÿìÿ¤ÿìÿ¥ÿìÿ¦ÿìÿ§ÿìÿ¨ÿìÿ©ÿâÿªÿâÿ«ÿâÿ¬ÿâÿ­ÿâÿ²ÿâÿ³ÿØÿ´ÿÝÿµÿÝÿ¶ÿÝÿ·ÿÝÿ¸ÿÝÿºÿÝÿ»ÿØÿ¼ÿØÿ½ÿØÿ¾ÿØÿ¿ÿØÿÁÿØÿÃÿìÿÅÿìÿÇÿìÿÈÿØÿÊÿØÿËÿâÿÌÿØÿÎÿØÿÏÿâÿÑÿçÿÕÿâÿ×ÿâÿÛÿâÿÞÿØÿàÿØÿáÿìÿâÿØÿãÿìÿäÿØÿåÿìÿÿØÿÿØÿ ÿØÿÿØÿÿÝÿÿØÿÿÝÿÿØÿÿÝÿÿØÿÿÝÿÿâÿÿØÿÿìÿ ÿØÿ!ÿìÿ"ÿØÿ#ÿìÿ$ÿØÿ%ÿâÿ&ÿØÿ+ÿØÿ-ÿØÿ/ÿØÿ1ÿØÿ3ÿØÿ8ÿÄÿ9ÿØÿ:ÿÄÿ<ÿØÿ>ÿØÿ@ÿØÿ ;ÿØÿ ZÿØÿ [ÿìÿ \ÿØÿ ]ÿìÿ dÿØÿ eÿâÿ fÿØÿ gÿâÿ èÿÄÿ éÿØÿ òÿÄÿ õÿÄÿ öÿÄÿ ÿÄÿ ÿØÿÙÿâÿÚÿâÿÜÿâÿÝÿâÿìÿÄÿì&ÿØ*ÿØ,ÿâ2ÿØ4ÿØ6ÿØ7ÿØ9ÿÄ:ÿÄ<ÿÄDÿìFÿâGÿçHÿâIÿâJÿìMÿöPÿØQÿØRÿÝTÿçUÿâVÿìWÿâXÿØYÿØZÿØ\ÿØ]ÿØmÿÄ}ÿ؉ÿØŽÿâÿâÿâ‘ÿâ”ÿØ•ÿØ–ÿØ—ÿؘÿØšÿØŸÿÄ¢ÿì£ÿì¤ÿì¥ÿì¦ÿì§ÿì¨ÿì©ÿâªÿâ«ÿâ¬ÿâ­ÿâ²ÿâ³ÿØ´ÿݵÿݶÿÝ·ÿݸÿݺÿÝ»ÿؼÿؽÿؾÿØ¿ÿØÁÿØÃÿìÅÿìÇÿìÈÿØÊÿØËÿâÌÿØÎÿØÏÿâÑÿçÕÿâ×ÿâÛÿâÞÿØàÿØáÿìâÿØãÿìäÿØåÿìÿØÿØ ÿØÿØÿÝÿØÿÝÿØÿÝÿØÿÝÿâÿØÿì ÿØ!ÿì"ÿØ#ÿì$ÿØ%ÿâ&ÿØ+ÿØ-ÿØ/ÿØ1ÿØ3ÿØ8ÿÄ9ÿØ:ÿÄ<ÿØ>ÿØ@ÿØ ;ÿØ ZÿØ [ÿì \ÿØ ]ÿì dÿØ eÿâ fÿØ gÿâ èÿÄ éÿØ òÿÄ õÿÄ öÿÄ ÿÄ ÿØÙÿâÚÿâÜÿâÝÿâÿâÿÄÿâFÿìGÿñHÿñMÿìPÿçQÿçRÿçSÿöTÿñUÿìVÿìXÿìYÿìZÿì[ÿì\ÿì]ÿçmÿÄ}ÿâ©ÿìªÿñ«ÿñ¬ÿñ­ÿñ²ÿñ³ÿç´ÿçµÿç¶ÿç·ÿç¸ÿçºÿç»ÿì¼ÿì½ÿì¾ÿì¿ÿìÁÿìËÿìÏÿìÑÿñÓÿñÕÿñ×ÿñÿçÿç ÿçÿçÿçÿçÿçÿìÿì!ÿì#ÿì+ÿì-ÿì/ÿì1ÿì3ÿì9ÿì<ÿç>ÿç@ÿç2ÿç ÿñ Qÿö [ÿì ]ÿì éÿì òÿÄ õÿÄ öÿÄ ÿÄ ÿâÿâÿÄÿâFÿìGÿñHÿñMÿìPÿçQÿçRÿçSÿöTÿñUÿìVÿìXÿìYÿìZÿì[ÿì\ÿì]ÿçmÿÄ}ÿâ©ÿìªÿñ«ÿñ¬ÿñ­ÿñ²ÿñ³ÿç´ÿçµÿç¶ÿç·ÿç¸ÿçºÿç»ÿì¼ÿì½ÿì¾ÿì¿ÿìÁÿìËÿìÏÿìÑÿñÓÿñÕÿñ×ÿñÿçÿç ÿçÿçÿçÿçÿçÿìÿì!ÿì#ÿì+ÿì-ÿì/ÿì1ÿì3ÿì9ÿì<ÿç>ÿç@ÿç2ÿç ÿñ Qÿö [ÿì ]ÿì éÿì òÿÄ õÿÄ öÿÄ ÿÄ ÿâ ÿâ ÿÄ ÿâ Fÿì Gÿñ Hÿñ Mÿì Pÿç Qÿç Rÿç Sÿö Tÿñ Uÿì Vÿì Xÿì Yÿì Zÿì [ÿì \ÿì ]ÿç mÿÄ }ÿâ ©ÿì ªÿñ «ÿñ ¬ÿñ ­ÿñ ²ÿñ ³ÿç ´ÿç µÿç ¶ÿç ·ÿç ¸ÿç ºÿç »ÿì ¼ÿì ½ÿì ¾ÿì ¿ÿì Áÿì Ëÿì Ïÿì Ñÿñ Óÿñ Õÿñ ×ÿñ ÿç ÿç  ÿç ÿç ÿç ÿç ÿç ÿì ÿì !ÿì #ÿì +ÿì -ÿì /ÿì 1ÿì 3ÿì 9ÿì <ÿç >ÿç @ÿç 2ÿç ÿñ Qÿö [ÿì ]ÿì éÿì òÿÄ õÿÄ öÿÄ ÿÄ ÿâÿâÿâ$ÿâ,ÿâ6ÿì7ÿØ9ÿØ:ÿØ;ÿÎ<ÿØ=ÿÎDÿìJÿìPÿìQÿìSÿöUÿìXÿñ]ÿì}ÿì‚ÿâƒÿâ„ÿâ…ÿâ†ÿâ‡ÿâˆÿâŽÿâÿâÿâ‘ÿâŸÿØ¢ÿì£ÿì¤ÿì¥ÿì¦ÿì§ÿì¨ÿì³ÿì»ÿñ¼ÿñ½ÿñ¾ÿñÂÿâÃÿìÄÿâÅÿìÆÿâÇÿìáÿìãÿìåÿìÿìÿì ÿìÿìÿì ÿì"ÿì$ÿØ&ÿØ+ÿñ-ÿñ/ÿñ1ÿñ3ÿñ8ÿØ:ÿØ;ÿÎ<ÿì=ÿÎ>ÿì?ÿÎ@ÿì ;ÿì Qÿö Zÿì \ÿì dÿØ fÿØ èÿØ òÿØ õÿØ öÿØ ÿìÿØÿöÿØDÿöIÿöJÿöMÿìPÿìQÿìSÿöUÿöVÿöWÿöXÿìYÿìZÿì[ÿì\ÿì]ÿìmÿö¢ÿö£ÿö¤ÿö¥ÿö¦ÿö§ÿö¨ÿö³ÿì»ÿì¼ÿì½ÿì¾ÿì¿ÿìÁÿìÃÿöÅÿöÇÿöáÿöãÿöåÿöÿìÿì ÿìÿöÿö!ÿö#ÿö%ÿö+ÿì-ÿì/ÿì1ÿì3ÿì9ÿì<ÿì>ÿì@ÿì2ÿì ÿö Qÿö [ÿö ]ÿö eÿö gÿö éÿì òÿÓ õÿÓ öÿÓ ÿöÙÿöÚÿöÛÿöÜÿöÝÿöÿâÿâ$ÿâ,ÿâ6ÿì7ÿØ9ÿØ:ÿØ;ÿÎ<ÿØ=ÿÎDÿìJÿìPÿìQÿìSÿöUÿìXÿñ]ÿì}ÿì‚ÿâƒÿâ„ÿâ…ÿâ†ÿâ‡ÿâˆÿâŽÿâÿâÿâ‘ÿâŸÿØ¢ÿì£ÿì¤ÿì¥ÿì¦ÿì§ÿì¨ÿì³ÿì»ÿñ¼ÿñ½ÿñ¾ÿñÂÿâÃÿìÄÿâÅÿìÆÿâÇÿìáÿìãÿìåÿìÿìÿì ÿìÿìÿì ÿì"ÿì$ÿØ&ÿØ+ÿñ-ÿñ/ÿñ1ÿñ3ÿñ8ÿØ:ÿØ;ÿÎ<ÿì=ÿÎ>ÿì?ÿÎ@ÿì ;ÿì Qÿö Zÿì \ÿì dÿØ fÿØ èÿØ òÿØ õÿØ öÿØ ÿìÿØÿöÿØDÿöIÿöJÿöMÿìPÿìQÿìSÿöUÿöVÿöWÿöXÿìYÿìZÿì[ÿì\ÿì]ÿìmÿö¢ÿö£ÿö¤ÿö¥ÿö¦ÿö§ÿö¨ÿö³ÿì»ÿì¼ÿì½ÿì¾ÿì¿ÿìÁÿìÃÿöÅÿöÇÿöáÿöãÿöåÿöÿìÿì ÿìÿöÿö!ÿö#ÿö%ÿö+ÿì-ÿì/ÿì1ÿì3ÿì9ÿì<ÿì>ÿì@ÿì2ÿì ÿö Qÿö [ÿö ]ÿö eÿö gÿö éÿì òÿÓ õÿÓ öÿÓ ÿöÙÿöÚÿöÛÿöÜÿöÝÿöÿâÿâ$ÿâ,ÿâ6ÿì7ÿØ9ÿØ:ÿØ;ÿÎ<ÿØ=ÿÎDÿìJÿìPÿìQÿìSÿöUÿìXÿñ]ÿì}ÿì‚ÿâƒÿâ„ÿâ…ÿâ†ÿâ‡ÿâˆÿâŽÿâÿâÿâ‘ÿâŸÿØ¢ÿì£ÿì¤ÿì¥ÿì¦ÿì§ÿì¨ÿì³ÿì»ÿñ¼ÿñ½ÿñ¾ÿñÂÿâÃÿìÄÿâÅÿìÆÿâÇÿìáÿìãÿìåÿìÿìÿì ÿìÿìÿì ÿì"ÿì$ÿØ&ÿØ+ÿñ-ÿñ/ÿñ1ÿñ3ÿñ8ÿØ:ÿØ;ÿÎ<ÿì=ÿÎ>ÿì?ÿÎ@ÿì ;ÿì Qÿö Zÿì \ÿì dÿØ fÿØ èÿØ òÿØ õÿØ öÿØ ÿìÿØÿöÿØDÿöIÿöJÿöMÿìPÿìQÿìSÿöUÿöVÿöWÿöXÿìYÿìZÿì[ÿì\ÿì]ÿìmÿö¢ÿö£ÿö¤ÿö¥ÿö¦ÿö§ÿö¨ÿö³ÿì»ÿì¼ÿì½ÿì¾ÿì¿ÿìÁÿìÃÿöÅÿöÇÿöáÿöãÿöåÿöÿìÿì ÿìÿöÿö!ÿö#ÿö%ÿö+ÿì-ÿì/ÿì1ÿì3ÿì9ÿì<ÿì>ÿì@ÿì2ÿì ÿö Qÿö [ÿö ]ÿö eÿö gÿö éÿì òÿÓ õÿÓ öÿÓ ÿöÙÿöÚÿöÛÿöÜÿöÝÿö$ÿâ&ÿØ*ÿØ,ÿØ-ÿì2ÿØ4ÿØ6ÿÎ7ÿì9ÿÎ:ÿÎ;ÿâ<ÿÎ=ÿâDÿâFÿâGÿçHÿâIÿâJÿâMÿâPÿØQÿØRÿÝSÿìTÿçUÿâVÿìWÿâXÿÓYÿØZÿØ[ÿâ\ÿØ]ÿØ‚ÿâƒÿâ„ÿâ…ÿâ†ÿâ‡ÿâˆÿâ‰ÿØŽÿØÿØÿØ‘ÿØ”ÿØ•ÿØ–ÿØ—ÿؘÿØšÿØŸÿ΢ÿâ£ÿâ¤ÿâ¥ÿâ¦ÿâ§ÿâ¨ÿâ©ÿâªÿâ«ÿâ¬ÿâ­ÿâ²ÿâ³ÿØ´ÿݵÿݶÿÝ·ÿݸÿݺÿÝ»ÿÓ¼ÿÓ½ÿÓ¾ÿÓ¿ÿØÁÿØÂÿâÃÿâÄÿâÅÿâÆÿâÇÿâÈÿØÊÿØËÿâÌÿØÎÿØÏÿâÑÿçÕÿâ×ÿâÛÿâÞÿØàÿØáÿââÿØãÿâäÿØåÿâÿØÿØ ÿØÿØÿÝÿØÿÝÿØÿÝÿØÿÝÿâÿÎÿì ÿÎ!ÿì"ÿÎ#ÿì$ÿì%ÿâ&ÿì+ÿÓ-ÿÓ/ÿÓ1ÿÓ3ÿÓ8ÿÎ9ÿØ:ÿÎ;ÿâ<ÿØ=ÿâ>ÿØ?ÿâ@ÿØ ;ÿØ Qÿì ZÿÎ [ÿì \ÿÎ ]ÿì dÿì eÿâ fÿì gÿâ èÿÎ éÿØÙÿâÚÿâÜÿâÝÿâDÿöIÿöJÿöMÿìPÿìQÿìSÿöUÿöVÿöWÿöXÿìYÿìZÿì[ÿì\ÿì]ÿì¢ÿö£ÿö¤ÿö¥ÿö¦ÿö§ÿö¨ÿö³ÿì»ÿì¼ÿì½ÿì¾ÿì¿ÿìÁÿìÃÿöÅÿöÇÿöáÿöãÿöåÿöÿìÿì ÿìÿöÿö!ÿö#ÿö%ÿö+ÿì-ÿì/ÿì1ÿì3ÿì9ÿì<ÿì>ÿì@ÿì2ÿì ÿö Qÿö [ÿö ]ÿö eÿö gÿö éÿìÙÿöÚÿöÛÿöÜÿöÝÿö$ÿö&ÿö*ÿö,ÿØ2ÿö4ÿö6ÿì7ÿì9ÿÎ:ÿÎ;ÿì<ÿÎ=ÿìDÿöFÿâGÿçHÿöJÿöMÿöPÿöQÿöRÿÝSÿöTÿçUÿìVÿöXÿØYÿöZÿö\ÿö]ÿö‚ÿöƒÿö„ÿö…ÿö†ÿö‡ÿöˆÿö‰ÿöŽÿØÿØÿØ‘ÿØ”ÿö•ÿö–ÿö—ÿö˜ÿöšÿöŸÿ΢ÿö£ÿö¤ÿö¥ÿö¦ÿö§ÿö¨ÿö©ÿâªÿö«ÿö¬ÿö­ÿö²ÿö³ÿö´ÿݵÿݶÿÝ·ÿݸÿݺÿÝ»ÿؼÿؽÿؾÿØ¿ÿöÁÿöÂÿöÃÿöÄÿöÅÿöÆÿöÇÿöÈÿöÊÿöËÿâÌÿöÎÿöÏÿâÑÿçÕÿö×ÿöÛÿöÞÿöàÿöáÿöâÿöãÿöäÿöåÿöÿöÿö ÿöÿöÿÝÿöÿÝÿöÿÝÿöÿÝÿìÿìÿö ÿì!ÿö"ÿì#ÿö$ÿì&ÿì+ÿØ-ÿØ/ÿØ1ÿØ3ÿØ8ÿÎ9ÿö:ÿÎ;ÿì<ÿö=ÿì>ÿö?ÿì@ÿö ;ÿö Qÿö Zÿì [ÿö \ÿì ]ÿö dÿì fÿì èÿÎ éÿöÿÄÿÎÿÄDÿìFÿöGÿûHÿìJÿìPÿöQÿöRÿñTÿûVÿöXÿû[ÿö]ÿömÿ΢ÿì£ÿì¤ÿì¥ÿì¦ÿì§ÿì¨ÿì©ÿöªÿì«ÿì¬ÿì­ÿì²ÿì³ÿö´ÿñµÿñ¶ÿñ·ÿñ¸ÿñºÿñ»ÿû¼ÿû½ÿû¾ÿûÃÿìÅÿìÇÿìËÿöÏÿöÑÿûÓÿûÕÿì×ÿìáÿìãÿìåÿìÿöÿö ÿöÿñÿñÿñÿñÿö!ÿö#ÿö+ÿû-ÿû/ÿû1ÿû3ÿû<ÿö>ÿö@ÿö2ÿö ÿû [ÿö ]ÿö ÿÎÿÄÿâÿÄ$ÿâ&ÿì*ÿì,ÿØ2ÿì4ÿì6ÿö7ÿØ9ÿÎ:ÿÎ;ÿÎ<ÿÎ=ÿÎIÿöMÿöPÿìQÿìRÿûSÿöUÿìWÿöXÿçYÿìZÿì[ÿØ\ÿì]ÿìmÿâ}ÿâ‚ÿâƒÿâ„ÿâ…ÿâ†ÿâ‡ÿâˆÿâ‰ÿìŽÿØÿØÿØ‘ÿØ”ÿì•ÿì–ÿì—ÿì˜ÿìšÿìŸÿγÿì´ÿûµÿû¶ÿû·ÿû¸ÿûºÿû»ÿç¼ÿç½ÿç¾ÿç¿ÿìÁÿìÂÿâÄÿâÆÿâÈÿìÊÿìÌÿìÎÿìÞÿìàÿìâÿìäÿìÿìÿì ÿìÿìÿûÿìÿûÿìÿûÿìÿûÿìÿö ÿö"ÿö$ÿØ%ÿö&ÿØ+ÿç-ÿç/ÿç1ÿç3ÿç8ÿÎ9ÿì:ÿÎ;ÿÎ<ÿì=ÿÎ>ÿì?ÿÎ@ÿì ;ÿì Qÿö Zÿö \ÿö dÿØ eÿö fÿØ gÿö èÿÎ éÿì òÿØ õÿØ öÿØ ÿâ ÿâÙÿöÚÿöÜÿöÝÿöÿØÿØÿØDÿöFÿûIÿìJÿöMÿìPÿöQÿöRÿöSÿöUÿìVÿöWÿìXÿñYÿìZÿì[ÿØ\ÿì]ÿömÿØ}ÿâ¢ÿö£ÿö¤ÿö¥ÿö¦ÿö§ÿö¨ÿö©ÿû³ÿö´ÿöµÿö¶ÿö·ÿö¸ÿöºÿö»ÿñ¼ÿñ½ÿñ¾ÿñ¿ÿìÁÿìÃÿöÅÿöÇÿöËÿûÏÿûáÿöãÿöåÿöÿöÿö ÿöÿöÿöÿöÿöÿìÿö!ÿö#ÿö%ÿì+ÿñ-ÿñ/ÿñ1ÿñ3ÿñ9ÿì<ÿö>ÿö@ÿö2ÿö ÿì Qÿö [ÿö ]ÿö eÿì gÿì éÿì òÿ° õÿ° öÿ° ÿØ ÿâÙÿìÚÿìÛÿìÜÿìÝÿì ÿÄ ÿâ ÿÄ $ÿâ &ÿì *ÿì ,ÿØ 2ÿì 4ÿì 6ÿö 7ÿØ 9ÿÎ :ÿÎ ;ÿÎ <ÿÎ =ÿÎ Iÿö Mÿö Pÿì Qÿì Rÿû Sÿö Uÿì Wÿö Xÿç Yÿì Zÿì [ÿØ \ÿì ]ÿì mÿâ }ÿâ ‚ÿâ ƒÿâ „ÿâ …ÿâ †ÿâ ‡ÿâ ˆÿâ ‰ÿì ŽÿØ ÿØ ÿØ ‘ÿØ ”ÿì •ÿì –ÿì —ÿì ˜ÿì šÿì ŸÿÎ ³ÿì ´ÿû µÿû ¶ÿû ·ÿû ¸ÿû ºÿû »ÿç ¼ÿç ½ÿç ¾ÿç ¿ÿì Áÿì Âÿâ Äÿâ Æÿâ Èÿì Êÿì Ìÿì Îÿì Þÿì àÿì âÿì äÿì ÿì ÿì  ÿì ÿì ÿû ÿì ÿû ÿì ÿû ÿì ÿû ÿì ÿö  ÿö "ÿö $ÿØ %ÿö &ÿØ +ÿç -ÿç /ÿç 1ÿç 3ÿç 8ÿÎ 9ÿì :ÿÎ ;ÿÎ <ÿì =ÿÎ >ÿì ?ÿÎ @ÿì ;ÿì Qÿö Zÿö \ÿö dÿØ eÿö fÿØ gÿö èÿÎ éÿì òÿØ õÿØ öÿØ ÿâ ÿâ Ùÿö Úÿö Üÿö Ýÿö!ÿØ!ÿØ!ÿØ!Dÿö!Fÿû!Iÿì!Jÿö!Mÿì!Pÿö!Qÿö!Rÿö!Sÿö!Uÿì!Vÿö!Wÿì!Xÿñ!Yÿì!Zÿì![ÿØ!\ÿì!]ÿö!mÿØ!}ÿâ!¢ÿö!£ÿö!¤ÿö!¥ÿö!¦ÿö!§ÿö!¨ÿö!©ÿû!³ÿö!´ÿö!µÿö!¶ÿö!·ÿö!¸ÿö!ºÿö!»ÿñ!¼ÿñ!½ÿñ!¾ÿñ!¿ÿì!Áÿì!Ãÿö!Åÿö!Çÿö!Ëÿû!Ïÿû!áÿö!ãÿö!åÿö!ÿö!ÿö! ÿö!ÿö!ÿö!ÿö!ÿö!ÿì!ÿö!!ÿö!#ÿö!%ÿì!+ÿñ!-ÿñ!/ÿñ!1ÿñ!3ÿñ!9ÿì!<ÿö!>ÿö!@ÿö!2ÿö! ÿì! Qÿö! [ÿö! ]ÿö! eÿì! gÿì! éÿì! òÿ°! õÿ°! öÿ°! ÿØ! ÿâ!Ùÿì!Úÿì!Ûÿì!Üÿì!Ýÿì"ÿÄ"ÿâ"ÿÄ"$ÿâ"&ÿì"*ÿì",ÿØ"2ÿì"4ÿì"6ÿö"7ÿØ"9ÿÎ":ÿÎ";ÿÎ"<ÿÎ"=ÿÎ"Iÿö"Mÿö"Pÿì"Qÿì"Rÿû"Sÿö"Uÿì"Wÿö"Xÿç"Yÿì"Zÿì"[ÿØ"\ÿì"]ÿì"mÿâ"}ÿâ"‚ÿâ"ƒÿâ"„ÿâ"…ÿâ"†ÿâ"‡ÿâ"ˆÿâ"‰ÿì"ŽÿØ"ÿØ"ÿØ"‘ÿØ"”ÿì"•ÿì"–ÿì"—ÿì"˜ÿì"šÿì"ŸÿÎ"³ÿì"´ÿû"µÿû"¶ÿû"·ÿû"¸ÿû"ºÿû"»ÿç"¼ÿç"½ÿç"¾ÿç"¿ÿì"Áÿì"Âÿâ"Äÿâ"Æÿâ"Èÿì"Êÿì"Ìÿì"Îÿì"Þÿì"àÿì"âÿì"äÿì"ÿì"ÿì" ÿì"ÿì"ÿû"ÿì"ÿû"ÿì"ÿû"ÿì"ÿû"ÿì"ÿö" ÿö""ÿö"$ÿØ"%ÿö"&ÿØ"+ÿç"-ÿç"/ÿç"1ÿç"3ÿç"8ÿÎ"9ÿì":ÿÎ";ÿÎ"<ÿì"=ÿÎ">ÿì"?ÿÎ"@ÿì" ;ÿì" Qÿö" Zÿö" \ÿö" dÿØ" eÿö" fÿØ" gÿö" èÿÎ" éÿì" òÿØ" õÿØ" öÿØ" ÿâ" ÿâ"Ùÿö"Úÿö"Üÿö"Ýÿö#ÿØ#ÿØ#ÿØ#Dÿö#Fÿû#Iÿì#Jÿö#Mÿì#Pÿö#Qÿö#Rÿö#Sÿö#Uÿì#Vÿö#Wÿì#Xÿñ#Yÿì#Zÿì#[ÿØ#\ÿì#]ÿö#mÿØ#}ÿâ#¢ÿö#£ÿö#¤ÿö#¥ÿö#¦ÿö#§ÿö#¨ÿö#©ÿû#³ÿö#´ÿö#µÿö#¶ÿö#·ÿö#¸ÿö#ºÿö#»ÿñ#¼ÿñ#½ÿñ#¾ÿñ#¿ÿì#Áÿì#Ãÿö#Åÿö#Çÿö#Ëÿû#Ïÿû#áÿö#ãÿö#åÿö#ÿö#ÿö# ÿö#ÿö#ÿö#ÿö#ÿö#ÿì#ÿö#!ÿö##ÿö#%ÿì#+ÿñ#-ÿñ#/ÿñ#1ÿñ#3ÿñ#9ÿì#<ÿö#>ÿö#@ÿö#2ÿö# ÿì# Qÿö# [ÿö# ]ÿö# eÿì# gÿì# éÿì# òÿ°# õÿ°# öÿ°# ÿØ# ÿâ#Ùÿì#Úÿì#Ûÿì#Üÿì#Ýÿì$ÿÄ$ÿÎ$ÿÄ$$ÿÎ$&ÿØ$*ÿØ$,ÿâ$-ÿØ$2ÿØ$4ÿØ$6ÿØ$9ÿö$:ÿö$;ÿØ$<ÿö$=ÿØ$DÿØ$FÿØ$GÿÝ$HÿØ$Iÿì$JÿØ$PÿØ$QÿØ$RÿÓ$Sÿâ$TÿÝ$UÿØ$VÿØ$Wÿì$XÿØ$Yÿì$Zÿì$[ÿâ$\ÿì$]ÿØ$mÿÎ$}ÿØ$‚ÿÎ$ƒÿÎ$„ÿÎ$…ÿÎ$†ÿÎ$‡ÿÎ$ˆÿÎ$‰ÿØ$Žÿâ$ÿâ$ÿâ$‘ÿâ$”ÿØ$•ÿØ$–ÿØ$—ÿØ$˜ÿØ$šÿØ$Ÿÿö$¢ÿØ$£ÿØ$¤ÿØ$¥ÿØ$¦ÿØ$§ÿØ$¨ÿØ$©ÿØ$ªÿØ$«ÿØ$¬ÿØ$­ÿØ$²ÿØ$³ÿØ$´ÿÓ$µÿÓ$¶ÿÓ$·ÿÓ$¸ÿÓ$ºÿÓ$»ÿØ$¼ÿØ$½ÿØ$¾ÿØ$¿ÿì$Áÿì$ÂÿÎ$ÃÿØ$ÄÿÎ$ÅÿØ$ÆÿÎ$ÇÿØ$ÈÿØ$ÊÿØ$ËÿØ$ÌÿØ$ÎÿØ$ÏÿØ$ÑÿÝ$ÕÿØ$×ÿØ$ÛÿØ$ÞÿØ$àÿØ$áÿØ$âÿØ$ãÿØ$äÿØ$åÿØ$ÿØ$ÿØ$ ÿØ$ÿØ$ÿÓ$ÿØ$ÿÓ$ÿØ$ÿÓ$ÿØ$ÿÓ$ÿØ$ÿØ$ÿØ$ ÿØ$!ÿØ$"ÿØ$#ÿØ$%ÿì$+ÿØ$-ÿØ$/ÿØ$1ÿØ$3ÿØ$8ÿö$9ÿì$:ÿö$;ÿØ$<ÿØ$=ÿØ$>ÿØ$?ÿØ$@ÿØ$ ;ÿØ$ Qÿâ$ ZÿØ$ [ÿØ$ \ÿØ$ ]ÿØ$ eÿì$ gÿì$ èÿö$ éÿì$ ÿÎ$ ÿØ$Ùÿì$Úÿì$Üÿì$Ýÿì%Dÿö%Fÿö%Gÿû%Hÿû%Iÿñ%Jÿö%Pÿö%Qÿö%Rÿñ%Tÿû%Uÿö%Vÿö%Wÿñ%[ÿì%]ÿö%}ÿØ%¢ÿö%£ÿö%¤ÿö%¥ÿö%¦ÿö%§ÿö%¨ÿö%©ÿö%ªÿû%«ÿû%¬ÿû%­ÿû%²ÿû%³ÿö%´ÿñ%µÿñ%¶ÿñ%·ÿñ%¸ÿñ%ºÿñ%Ãÿö%Åÿö%Çÿö%Ëÿö%Ïÿö%Ñÿû%Óÿû%Õÿû%×ÿû%áÿö%ãÿö%åÿö%ÿö%ÿö% ÿö%ÿñ%ÿñ%ÿñ%ÿñ%ÿö%ÿö%!ÿö%#ÿö%%ÿñ%<ÿö%>ÿö%@ÿö%2ÿö% ÿû% ÿñ% [ÿö% ]ÿö% eÿñ% gÿñ% ÿØ%Ùÿñ%Úÿñ%Ûÿñ%Üÿñ%Ýÿñ&$ÿÎ&&ÿØ&*ÿØ&,ÿâ&-ÿØ&2ÿØ&4ÿØ&6ÿØ&9ÿö&:ÿö&;ÿØ&<ÿö&=ÿØ&DÿØ&FÿØ&GÿÝ&HÿØ&Iÿì&JÿØ&PÿØ&QÿØ&RÿÓ&Sÿâ&TÿÝ&UÿØ&VÿØ&Wÿì&XÿØ&Yÿì&Zÿì&[ÿâ&\ÿì&]ÿØ&‚ÿÎ&ƒÿÎ&„ÿÎ&…ÿÎ&†ÿÎ&‡ÿÎ&ˆÿÎ&‰ÿØ&Žÿâ&ÿâ&ÿâ&‘ÿâ&”ÿØ&•ÿØ&–ÿØ&—ÿØ&˜ÿØ&šÿØ&Ÿÿö&¢ÿØ&£ÿØ&¤ÿØ&¥ÿØ&¦ÿØ&§ÿØ&¨ÿØ&©ÿØ&ªÿØ&«ÿØ&¬ÿØ&­ÿØ&²ÿØ&³ÿØ&´ÿÓ&µÿÓ&¶ÿÓ&·ÿÓ&¸ÿÓ&ºÿÓ&»ÿØ&¼ÿØ&½ÿØ&¾ÿØ&¿ÿì&Áÿì&ÂÿÎ&ÃÿØ&ÄÿÎ&ÅÿØ&ÆÿÎ&ÇÿØ&ÈÿØ&ÊÿØ&ËÿØ&ÌÿØ&ÎÿØ&ÏÿØ&ÑÿÝ&ÕÿØ&×ÿØ&ÛÿØ&ÞÿØ&àÿØ&áÿØ&âÿØ&ãÿØ&äÿØ&åÿØ&ÿØ&ÿØ& ÿØ&ÿØ&ÿÓ&ÿØ&ÿÓ&ÿØ&ÿÓ&ÿØ&ÿÓ&ÿØ&ÿØ&ÿØ& ÿØ&!ÿØ&"ÿØ&#ÿØ&%ÿì&+ÿØ&-ÿØ&/ÿØ&1ÿØ&3ÿØ&8ÿö&9ÿì&:ÿö&;ÿØ&<ÿØ&=ÿØ&>ÿØ&?ÿØ&@ÿØ& ;ÿØ& Qÿâ& ZÿØ& [ÿØ& \ÿØ& ]ÿØ& eÿì& gÿì& èÿö& éÿì&Ùÿì&Úÿì&Üÿì&Ýÿì+Fÿö+Gÿû+Hÿö+Rÿö+Tÿû+©ÿö+ªÿö+«ÿö+¬ÿö+­ÿö+²ÿö+´ÿö+µÿö+¶ÿö+·ÿö+¸ÿö+ºÿö+Ëÿö+Ïÿö+Ñÿû+Óÿû+Õÿö+×ÿö+ÿö+ÿö+ÿö+ÿö+ ÿû-ÿØ-ÿÄ-ÿØ-Fÿö-Gÿû-Hÿö-Rÿö-Tÿû-mÿÄ-}ÿâ-©ÿö-ªÿö-«ÿö-¬ÿö-­ÿö-²ÿö-´ÿö-µÿö-¶ÿö-·ÿö-¸ÿö-ºÿö-Ëÿö-Ïÿö-Ñÿû-Óÿû-Õÿö-×ÿö-ÿö-ÿö-ÿö-ÿö- ÿû- òÿØ- õÿØ- öÿØ- ÿÄ- ÿâ/ÿØ/ÿÄ/ÿØ/Fÿö/Gÿû/Hÿö/Rÿö/Tÿû/mÿÄ/}ÿâ/©ÿö/ªÿö/«ÿö/¬ÿö/­ÿö/²ÿö/´ÿö/µÿö/¶ÿö/·ÿö/¸ÿö/ºÿö/Ëÿö/Ïÿö/Ñÿû/Óÿû/Õÿö/×ÿö/ÿö/ÿö/ÿö/ÿö/ ÿû/ òÿØ/ õÿØ/ öÿØ/ ÿÄ/ ÿâ1Fÿö1Gÿû1Hÿö1Rÿö1Tÿû1©ÿö1ªÿö1«ÿö1¬ÿö1­ÿö1²ÿö1´ÿö1µÿö1¶ÿö1·ÿö1¸ÿö1ºÿö1Ëÿö1Ïÿö1Ñÿû1Óÿû1Õÿö1×ÿö1ÿö1ÿö1ÿö1ÿö1 ÿû3ÿØ3ÿÄ3ÿØ3Fÿö3Gÿû3Hÿö3Rÿö3Tÿû3mÿÄ3}ÿâ3©ÿö3ªÿö3«ÿö3¬ÿö3­ÿö3²ÿö3´ÿö3µÿö3¶ÿö3·ÿö3¸ÿö3ºÿö3Ëÿö3Ïÿö3Ñÿû3Óÿû3Õÿö3×ÿö3ÿö3ÿö3ÿö3ÿö3 ÿû3 òÿØ3 õÿØ3 öÿØ3 ÿÄ3 ÿâ8ÿÄ8ÿÎ8ÿÄ8$ÿÄ8&ÿÎ8*ÿÎ8,ÿØ8-ÿâ82ÿÎ84ÿÎ86ÿÎ8;ÿâ8=ÿâ8DÿÎ8FÿÓ8GÿØ8HÿÎ8Iÿì8JÿÎ8PÿÄ8QÿÄ8RÿÎ8SÿØ8TÿØ8UÿÄ8VÿØ8Wÿì8XÿÎ8Yÿì8Zÿì8[ÿâ8\ÿì8]ÿÄ8mÿÎ8}ÿÄ8‚ÿÄ8ƒÿÄ8„ÿÄ8…ÿÄ8†ÿÄ8‡ÿÄ8ˆÿÄ8‰ÿÎ8ŽÿØ8ÿØ8ÿØ8‘ÿØ8”ÿÎ8•ÿÎ8–ÿÎ8—ÿÎ8˜ÿÎ8šÿÎ8¢ÿÎ8£ÿÎ8¤ÿÎ8¥ÿÎ8¦ÿÎ8§ÿÎ8¨ÿÎ8©ÿÓ8ªÿÎ8«ÿÎ8¬ÿÎ8­ÿÎ8²ÿÎ8³ÿÄ8´ÿÎ8µÿÎ8¶ÿÎ8·ÿÎ8¸ÿÎ8ºÿÎ8»ÿÎ8¼ÿÎ8½ÿÎ8¾ÿÎ8¿ÿì8Áÿì8ÂÿÄ8ÃÿÎ8ÄÿÄ8ÅÿÎ8ÆÿÄ8ÇÿÎ8ÈÿÎ8ÊÿÎ8ËÿÓ8ÌÿÎ8ÎÿÎ8ÏÿÓ8ÑÿØ8ÕÿÎ8×ÿÎ8ÛÿÎ8ÞÿÎ8àÿÎ8áÿÎ8âÿÎ8ãÿÎ8äÿÎ8åÿÎ8ÿÄ8ÿÄ8 ÿÄ8ÿÎ8ÿÎ8ÿÎ8ÿÎ8ÿÎ8ÿÎ8ÿÎ8ÿÎ8ÿÄ8ÿÎ8ÿØ8 ÿÎ8!ÿØ8"ÿÎ8#ÿØ8%ÿì8+ÿÎ8-ÿÎ8/ÿÎ81ÿÎ83ÿÎ89ÿì8;ÿâ8<ÿÄ8=ÿâ8>ÿÄ8?ÿâ8@ÿÄ8 ;ÿÄ8 QÿØ8 ZÿÎ8 [ÿØ8 \ÿÎ8 ]ÿØ8 eÿì8 gÿì8 éÿì8 ÿÎ8 ÿÄ8Ùÿì8Úÿì8Üÿì8Ýÿì9ÿÄ9ÿì9ÿÄ9Dÿì9Fÿì9Gÿñ9Hÿì9Iÿö9Jÿì9Mÿì9PÿØ9QÿØ9Rÿç9Sÿâ9Tÿñ9Uÿç9Vÿì9Wÿö9Xÿâ9[ÿì9]ÿØ9mÿì9}ÿØ9¢ÿì9£ÿì9¤ÿì9¥ÿì9¦ÿì9§ÿì9¨ÿì9©ÿì9ªÿì9«ÿì9¬ÿì9­ÿì9²ÿì9³ÿØ9´ÿç9µÿç9¶ÿç9·ÿç9¸ÿç9ºÿç9»ÿâ9¼ÿâ9½ÿâ9¾ÿâ9Ãÿì9Åÿì9Çÿì9Ëÿì9Ïÿì9Ñÿñ9Óÿñ9Õÿì9×ÿì9áÿì9ãÿì9åÿì9ÿØ9ÿØ9 ÿØ9ÿç9ÿç9ÿç9ÿç9ÿç9ÿì9!ÿì9#ÿì9%ÿö9+ÿâ9-ÿâ9/ÿâ91ÿâ93ÿâ9<ÿØ9>ÿØ9@ÿØ92ÿØ9 ÿñ9 ÿö9 Qÿâ9 [ÿì9 ]ÿì9 eÿö9 gÿö9 òÿì9 õÿì9 öÿì9 ÿì9 ÿØ9Ùÿö9Úÿö9Ûÿö9Üÿö9Ýÿö:ÿÄ:ÿÎ:ÿÄ:$ÿÄ:&ÿÎ:*ÿÎ:,ÿØ:-ÿâ:2ÿÎ:4ÿÎ:6ÿÎ:;ÿâ:=ÿâ:DÿÎ:FÿÓ:GÿØ:HÿÎ:Iÿì:JÿÎ:PÿÄ:QÿÄ:RÿÎ:SÿØ:TÿØ:UÿÄ:VÿØ:Wÿì:XÿÎ:Yÿì:Zÿì:[ÿâ:\ÿì:]ÿÄ:mÿÎ:}ÿÄ:‚ÿÄ:ƒÿÄ:„ÿÄ:…ÿÄ:†ÿÄ:‡ÿÄ:ˆÿÄ:‰ÿÎ:ŽÿØ:ÿØ:ÿØ:‘ÿØ:”ÿÎ:•ÿÎ:–ÿÎ:—ÿÎ:˜ÿÎ:šÿÎ:¢ÿÎ:£ÿÎ:¤ÿÎ:¥ÿÎ:¦ÿÎ:§ÿÎ:¨ÿÎ:©ÿÓ:ªÿÎ:«ÿÎ:¬ÿÎ:­ÿÎ:²ÿÎ:³ÿÄ:´ÿÎ:µÿÎ:¶ÿÎ:·ÿÎ:¸ÿÎ:ºÿÎ:»ÿÎ:¼ÿÎ:½ÿÎ:¾ÿÎ:¿ÿì:Áÿì:ÂÿÄ:ÃÿÎ:ÄÿÄ:ÅÿÎ:ÆÿÄ:ÇÿÎ:ÈÿÎ:ÊÿÎ:ËÿÓ:ÌÿÎ:ÎÿÎ:ÏÿÓ:ÑÿØ:ÕÿÎ:×ÿÎ:ÛÿÎ:ÞÿÎ:àÿÎ:áÿÎ:âÿÎ:ãÿÎ:äÿÎ:åÿÎ:ÿÄ:ÿÄ: ÿÄ:ÿÎ:ÿÎ:ÿÎ:ÿÎ:ÿÎ:ÿÎ:ÿÎ:ÿÎ:ÿÄ:ÿÎ:ÿØ: ÿÎ:!ÿØ:"ÿÎ:#ÿØ:%ÿì:+ÿÎ:-ÿÎ:/ÿÎ:1ÿÎ:3ÿÎ:9ÿì:;ÿâ:<ÿÄ:=ÿâ:>ÿÄ:?ÿâ:@ÿÄ: ;ÿÄ: QÿØ: ZÿÎ: [ÿØ: \ÿÎ: ]ÿØ: eÿì: gÿì: éÿì: ÿÎ: ÿÄ:Ùÿì:Úÿì:Üÿì:Ýÿì;ÿØ;ÿÎ;ÿØ;mÿÎ;}ÿØ; òÿì; õÿì; öÿì; ÿÎ; ÿØ<ÿØ<ÿº<ÿØ<Dÿì<Fÿì<Gÿñ<Hÿì<Iÿö<Jÿì<Mÿö<Pÿâ<Qÿâ<Rÿç<Sÿì<Tÿñ<Uÿâ<Vÿì<Wÿö<XÿÝ<Yÿì<Zÿì<[ÿì<\ÿì<]ÿâ<mÿº<}ÿâ<¢ÿì<£ÿì<¤ÿì<¥ÿì<¦ÿì<§ÿì<¨ÿì<©ÿì<ªÿì<«ÿì<¬ÿì<­ÿì<²ÿì<³ÿâ<´ÿç<µÿç<¶ÿç<·ÿç<¸ÿç<ºÿç<»ÿÝ<¼ÿÝ<½ÿÝ<¾ÿÝ<¿ÿì<Áÿì<Ãÿì<Åÿì<Çÿì<Ëÿì<Ïÿì<Ñÿñ<Óÿñ<Õÿì<×ÿì<áÿì<ãÿì<åÿì<ÿâ<ÿâ< ÿâ<ÿç<ÿç<ÿç<ÿç<ÿâ<ÿì<!ÿì<#ÿì<%ÿö<+ÿÝ<-ÿÝ</ÿÝ<1ÿÝ<3ÿÝ<9ÿì<<ÿâ<>ÿâ<@ÿâ<2ÿâ< ÿñ< ÿö< Qÿì< [ÿì< ]ÿì< eÿö< gÿö< éÿì< òÿØ< õÿØ< öÿØ< ÿº< ÿâ<Ùÿö<Úÿö<Ûÿö<Üÿö<Ýÿö=ÿØ=ÿÎ=ÿØ=mÿÎ=}ÿØ= òÿì= õÿì= öÿì= ÿÎ= ÿØ>ÿØ>ÿº>ÿØ>Dÿì>Fÿì>Gÿñ>Hÿì>Iÿö>Jÿì>Mÿö>Pÿâ>Qÿâ>Rÿç>Sÿì>Tÿñ>Uÿâ>Vÿì>Wÿö>XÿÝ>Yÿì>Zÿì>[ÿì>\ÿì>]ÿâ>mÿº>}ÿâ>¢ÿì>£ÿì>¤ÿì>¥ÿì>¦ÿì>§ÿì>¨ÿì>©ÿì>ªÿì>«ÿì>¬ÿì>­ÿì>²ÿì>³ÿâ>´ÿç>µÿç>¶ÿç>·ÿç>¸ÿç>ºÿç>»ÿÝ>¼ÿÝ>½ÿÝ>¾ÿÝ>¿ÿì>Áÿì>Ãÿì>Åÿì>Çÿì>Ëÿì>Ïÿì>Ñÿñ>Óÿñ>Õÿì>×ÿì>áÿì>ãÿì>åÿì>ÿâ>ÿâ> ÿâ>ÿç>ÿç>ÿç>ÿç>ÿâ>ÿì>!ÿì>#ÿì>%ÿö>+ÿÝ>-ÿÝ>/ÿÝ>1ÿÝ>3ÿÝ>9ÿì><ÿâ>>ÿâ>@ÿâ>2ÿâ> ÿñ> ÿö> Qÿì> [ÿì> ]ÿì> eÿö> gÿö> éÿì> òÿØ> õÿØ> öÿØ> ÿº> ÿâ>Ùÿö>Úÿö>Ûÿö>Üÿö>Ýÿö?ÿØ?ÿÎ?ÿØ?&ÿÎ?*ÿÎ?,ÿØ?2ÿÎ?4ÿÎ?6ÿÎ?Dÿâ?FÿØ?GÿÝ?HÿØ?Iÿâ?Jÿâ?Mÿö?PÿØ?QÿØ?RÿÓ?Sÿâ?TÿÝ?UÿØ?Vÿì?Wÿâ?XÿØ?Yÿâ?Zÿâ?[ÿì?\ÿâ?]ÿØ?mÿÎ?}ÿØ?‰ÿÎ?ŽÿØ?ÿØ?ÿØ?‘ÿØ?”ÿÎ?•ÿÎ?–ÿÎ?—ÿÎ?˜ÿÎ?šÿÎ?¢ÿâ?£ÿâ?¤ÿâ?¥ÿâ?¦ÿâ?§ÿâ?¨ÿâ?©ÿØ?ªÿØ?«ÿØ?¬ÿØ?­ÿØ?²ÿØ?³ÿØ?´ÿÓ?µÿÓ?¶ÿÓ?·ÿÓ?¸ÿÓ?ºÿÓ?»ÿØ?¼ÿØ?½ÿØ?¾ÿØ?¿ÿâ?Áÿâ?Ãÿâ?Åÿâ?Çÿâ?ÈÿÎ?ÊÿÎ?ËÿØ?ÌÿÎ?ÎÿÎ?ÏÿØ?ÑÿÝ?ÕÿØ?×ÿØ?ÛÿØ?ÞÿÎ?àÿÎ?áÿâ?âÿÎ?ãÿâ?äÿÎ?åÿâ?ÿØ?ÿØ? ÿØ?ÿÎ?ÿÓ?ÿÎ?ÿÓ?ÿÎ?ÿÓ?ÿÎ?ÿÓ?ÿØ?ÿÎ?ÿì? ÿÎ?!ÿì?"ÿÎ?#ÿì?%ÿâ?+ÿØ?-ÿØ?/ÿØ?1ÿØ?3ÿØ?9ÿâ?<ÿØ?>ÿØ?@ÿØ? ;ÿØ? Qÿâ? ZÿÎ? [ÿì? \ÿÎ? ]ÿì? eÿâ? gÿâ? éÿâ? òÿì? õÿì? öÿì? ÿÎ? ÿØ?Ùÿâ?Úÿâ?Üÿâ?Ýÿâ@ÿØ@ÿº@ÿØ@Dÿì@Fÿì@Gÿñ@Hÿì@Iÿö@Jÿì@Mÿö@Pÿâ@Qÿâ@Rÿç@Sÿì@Tÿñ@Uÿâ@Vÿì@Wÿö@XÿÝ@Yÿì@Zÿì@[ÿì@\ÿì@]ÿâ@mÿº@}ÿâ@¢ÿì@£ÿì@¤ÿì@¥ÿì@¦ÿì@§ÿì@¨ÿì@©ÿì@ªÿì@«ÿì@¬ÿì@­ÿì@²ÿì@³ÿâ@´ÿç@µÿç@¶ÿç@·ÿç@¸ÿç@ºÿç@»ÿÝ@¼ÿÝ@½ÿÝ@¾ÿÝ@¿ÿì@Áÿì@Ãÿì@Åÿì@Çÿì@Ëÿì@Ïÿì@Ñÿñ@Óÿñ@Õÿì@×ÿì@áÿì@ãÿì@åÿì@ÿâ@ÿâ@ ÿâ@ÿç@ÿç@ÿç@ÿç@ÿâ@ÿì@!ÿì@#ÿì@%ÿö@+ÿÝ@-ÿÝ@/ÿÝ@1ÿÝ@3ÿÝ@9ÿì@<ÿâ@>ÿâ@@ÿâ@2ÿâ@ ÿñ@ ÿö@ Qÿì@ [ÿì@ ]ÿì@ eÿö@ gÿö@ éÿì@ òÿØ@ õÿØ@ öÿØ@ ÿº@ ÿâ@Ùÿö@Úÿö@Ûÿö@Üÿö@Ýÿöy$ÿØy&ÿìy*ÿìy,ÿØy2ÿìy4ÿìy6ÿöy7ÿØy9ÿÎy:ÿÎy;ÿØy<ÿÎy=ÿØyDÿìyIÿìyJÿìyMÿâyPÿâyQÿâyRÿûySÿìyUÿìyVÿìyWÿìyXÿçyYÿöyZÿöy[ÿây\ÿöy]ÿây‚ÿØyƒÿØy„ÿØy…ÿØy†ÿØy‡ÿØyˆÿØy‰ÿìyŽÿØyÿØyÿØy‘ÿØy”ÿìy•ÿìy–ÿìy—ÿìy˜ÿìyšÿìyŸÿÎy¢ÿìy£ÿìy¤ÿìy¥ÿìy¦ÿìy§ÿìy¨ÿìy³ÿây´ÿûyµÿûy¶ÿûy·ÿûy¸ÿûyºÿûy»ÿçy¼ÿçy½ÿçy¾ÿçy¿ÿöyÁÿöyÂÿØyÃÿìyÄÿØyÅÿìyÆÿØyÇÿìyÈÿìyÊÿìyÌÿìyÎÿìyÞÿìyàÿìyáÿìyâÿìyãÿìyäÿìyåÿìyÿâyÿây ÿâyÿìyÿûyÿìyÿûyÿìyÿûyÿìyÿûyÿìyÿöyÿìy ÿöy!ÿìy"ÿöy#ÿìy$ÿØy%ÿìy&ÿØy+ÿçy-ÿçy/ÿçy1ÿçy3ÿçy8ÿÎy9ÿöy:ÿÎy;ÿØy<ÿây=ÿØy>ÿây?ÿØy@ÿây ;ÿây Qÿìy Zÿöy [ÿìy \ÿöy ]ÿìy dÿØy eÿìy fÿØy gÿìy èÿÎy éÿöyÙÿìyÚÿìyÜÿìyÝÿì¶ÿœ¶ÿº¶ÿœ¶$ÿĶ&ÿì¶*ÿì¶,ÿض-ÿض2ÿì¶4ÿì¶6ÿâ¶7ÿâ¶9ÿض:ÿض;ÿĶ<ÿض=ÿĶDÿζFÿضGÿݶHÿضJÿζPÿضQÿضRÿÓ¶Sÿì¶TÿݶUÿâ¶Vÿâ¶Xÿض[ÿض]ÿضmÿº¶}ÿĶ‚ÿĶƒÿĶ„ÿĶ…ÿ͆ÿ͇ÿĶˆÿ͉ÿì¶Žÿضÿضÿض‘ÿض”ÿì¶•ÿì¶–ÿì¶—ÿ춘ÿì¶šÿì¶Ÿÿض¢ÿζ£ÿζ¤ÿζ¥ÿζ¦ÿζ§ÿζ¨ÿζ©ÿضªÿض«ÿض¬ÿض­ÿض²ÿض³ÿض´ÿÓ¶µÿÓ¶¶ÿÓ¶·ÿÓ¶¸ÿÓ¶ºÿÓ¶»ÿض¼ÿض½ÿض¾ÿضÂÿĶÃÿζÄÿĶÅÿζÆÿĶÇÿζÈÿì¶Êÿì¶ËÿضÌÿì¶Îÿì¶ÏÿضÑÿݶÕÿض×ÿضÛÿضÞÿì¶àÿì¶áÿζâÿì¶ãÿζäÿì¶åÿζÿضÿض ÿضÿì¶ÿÓ¶ÿì¶ÿÓ¶ÿì¶ÿÓ¶ÿì¶ÿÓ¶ÿâ¶ÿâ¶ÿâ¶ ÿâ¶!ÿâ¶"ÿâ¶#ÿâ¶$ÿâ¶&ÿâ¶+ÿض-ÿض/ÿض1ÿض3ÿض8ÿض:ÿض;ÿĶ<ÿض=ÿĶ>ÿض?ÿĶ@ÿض ;ÿض Qÿì¶ Zÿâ¶ [ÿâ¶ \ÿâ¶ ]ÿâ¶ dÿâ¶ fÿâ¶ èÿض òÿì¶ õÿì¶ öÿì¶ ÿº¶ ÿÄ2ÿØ2ÿº2ÿØ2mÿº2}ÿâ2 òÿØ2 õÿØ2 öÿØ2 ÿº2 ÿâjkÿìjwÿâj~ÿìj…ÿìjˆÿìj‹ÿìj”ÿìj–ÿìj—ÿâj™ÿâjšÿâj›ÿâjœÿâjÿâjžÿâjŸÿâj ÿâj¡ÿâj¢ÿâj£ÿâj¤ÿâj¥ÿâj¦ÿâj§ÿâj¨ÿâj©ÿâjªÿâj«ÿâj¬ÿâj­ÿâj®ÿâj¯ÿâj°ÿâj±ÿâj²ÿâj³ÿâj´ÿâjµÿâj¶ÿâj·ÿâj¸ÿâj¹ÿâjºÿâj»ÿâj¼ÿâj½ÿâj¾ÿâj¿ÿâjÀÿâjÁÿâjÂÿâjÃÿâjÄÿâjÅÿâjÆÿâk‰ÿìk–ÿìskÿØs~ÿØs…ÿØsˆÿØs‰ÿìs‹ÿØs”ÿØs–ÿìs—ÿìs™ÿìsšÿìs›ÿìsœÿìsÿìsžÿìsŸÿìs ÿìs¡ÿìs¢ÿìs£ÿìs¤ÿìs¥ÿìs¦ÿìs§ÿìs¨ÿìs©ÿìsªÿìs«ÿìs¬ÿìs­ÿìs®ÿìs¯ÿìs°ÿìs±ÿìs²ÿìs³ÿìs´ÿìsµÿìs¶ÿìs·ÿìs¸ÿìs¹ÿìsºÿìs»ÿìs¼ÿìs½ÿìs¾ÿìs¿ÿìsÀÿìsÁÿìsÂÿìsÃÿìsÄÿìsÅÿìsÆÿìukÿâuwÿØu~ÿâu…ÿâuˆÿâu‹ÿâu”ÿâu–ÿâu—ÿâu™ÿâušÿâu›ÿâuœÿâuÿâužÿâuŸÿâu ÿâu¡ÿâu¢ÿâu£ÿâu¤ÿâu¥ÿâu¦ÿâu§ÿâu¨ÿâu©ÿâuªÿâu«ÿâu¬ÿâu­ÿâu®ÿâu¯ÿâu°ÿâu±ÿâu²ÿâu³ÿâu´ÿâuµÿâu¶ÿâu·ÿâu¸ÿâu¹ÿâuºÿâu»ÿâu¼ÿâu½ÿâu¾ÿâu¿ÿâuÀÿâuÁÿâuÂÿâuÃÿâuÄÿâuÅÿâuÆÿâzkÿìzwÿâz~ÿìz…ÿìzˆÿìz‹ÿìz”ÿìz–ÿìz—ÿâz™ÿâzšÿâz›ÿâzœÿâzÿâzžÿâzŸÿâz ÿâz¡ÿâz¢ÿâz£ÿâz¤ÿâz¥ÿâz¦ÿâz§ÿâz¨ÿâz©ÿâzªÿâz«ÿâz¬ÿâz­ÿâz®ÿâz¯ÿâz°ÿâz±ÿâz²ÿâz³ÿâz´ÿâzµÿâz¶ÿâz·ÿâz¸ÿâz¹ÿâzºÿâz»ÿâz¼ÿâz½ÿâz¾ÿâz¿ÿâzÀÿâzÁÿâzÂÿâzÃÿâzÄÿâzÅÿâzÆÿâ~‰ÿì~–ÿìkÿØ~ÿØ…ÿ؈ÿ؉ÿì‹ÿØ”ÿØ–ÿì—ÿì™ÿìšÿì›ÿìœÿìÿìžÿìŸÿì ÿì¡ÿì¢ÿì£ÿì¤ÿì¥ÿì¦ÿì§ÿì¨ÿì©ÿìªÿì«ÿì¬ÿì­ÿì®ÿì¯ÿì°ÿì±ÿì²ÿì³ÿì´ÿìµÿì¶ÿì·ÿì¸ÿì¹ÿìºÿì»ÿì¼ÿì½ÿì¾ÿì¿ÿìÀÿìÁÿìÂÿìÃÿìÄÿìÅÿìÆÿì…‰ÿì…–ÿì‡kÿö‡wÿâ‡~ÿö‡…ÿö‡ˆÿö‡‹ÿö‡”ÿö‡–ÿö‡—ÿ쇙ÿ쇚ÿ쇛ÿ쇜ÿì‡ÿ쇞ÿ쇟ÿ쇠ÿ쇡ÿ쇢ÿ쇣ÿ쇤ÿ쇥ÿ쇦ÿ쇧ÿ쇨ÿ쇩ÿ쇪ÿ쇫ÿ쇬ÿ쇭ÿ쇮ÿ쇯ÿ쇰ÿ쇱ÿ쇲ÿ쇳ÿ쇴ÿ쇵ÿ쇶ÿ쇷ÿ쇸ÿ쇹ÿ쇺ÿ쇻ÿ쇼ÿ쇽ÿ쇾ÿ쇿ÿì‡Àÿì‡Áÿì‡Âÿì‡Ãÿì‡Äÿì‡Åÿì‡Æÿ숉ÿ숖ÿì‰kÿì‰wÿâ‰~ÿ쉅ÿ쉈ÿ쉋ÿ쉔ÿ쉖ÿ쉗ÿ≙ÿ≚ÿ≛ÿ≜ÿâ‰ÿ≞ÿ≟ÿ≠ÿ≡ÿ≢ÿ≣ÿ≤ÿ≥ÿ≦ÿ≧ÿ≨ÿ≩ÿ≪ÿ≫ÿ≬ÿ≭ÿ≮ÿ≯ÿ≰ÿ≱ÿ≲ÿ≳ÿ≴ÿ≵ÿ≶ÿ≷ÿ≸ÿ≹ÿ≺ÿ≻ÿ≼ÿ≽ÿ≾ÿ≿ÿâ‰Àÿâ‰Áÿâ‰Âÿâ‰Ãÿâ‰Äÿâ‰Åÿâ‰ÆÿâŠkÿâŠwÿØŠ~ÿ⊅ÿ⊈ÿ⊋ÿ⊔ÿ⊖ÿ⊗ÿ⊙ÿ⊚ÿ⊛ÿ⊜ÿâŠÿ⊞ÿ⊟ÿ⊠ÿ⊡ÿ⊢ÿ⊣ÿ⊤ÿ⊥ÿ⊦ÿ⊧ÿ⊨ÿ⊩ÿ⊪ÿ⊫ÿ⊬ÿ⊭ÿ⊮ÿ⊯ÿ⊰ÿ⊱ÿ⊲ÿ⊳ÿ⊴ÿ⊵ÿ⊶ÿ⊷ÿ⊸ÿ⊹ÿ⊺ÿ⊻ÿ⊼ÿ⊽ÿ⊾ÿ⊿ÿâŠÀÿâŠÁÿâŠÂÿâŠÃÿâŠÄÿâŠÅÿâŠÆÿ⋉ÿì‹–ÿ쑉ÿì‘–ÿ쓉ÿì“–ÿ씉ÿì”–ÿ앉ÿì•–ÿìš›ÿØ©›ÿت›ÿìÅ›ÿì üÿÎ üÿì üÿÎ ü$ÿâ ü&ÿâ ü*ÿâ ü,ÿâ ü2ÿâ ü4ÿâ ü6ÿì ü7ÿÎ ü9ÿÎ ü:ÿÎ ü;ÿÎ ü<ÿÎ ü=ÿÎ üDÿö üIÿö üJÿö üMÿì üPÿâ üQÿâ üRÿû üSÿö üUÿì üVÿö üWÿö üXÿì üYÿâ üZÿâ ü[ÿâ ü\ÿâ ü]ÿâ ümÿì ü}ÿì ü‚ÿâ üƒÿâ ü„ÿâ ü…ÿâ ü†ÿâ ü‡ÿâ üˆÿâ ü‰ÿâ üŽÿâ üÿâ üÿâ ü‘ÿâ ü”ÿâ ü•ÿâ ü–ÿâ ü—ÿâ ü˜ÿâ üšÿâ üŸÿÎ ü¢ÿö ü£ÿö ü¤ÿö ü¥ÿö ü¦ÿö ü§ÿö ü¨ÿö ü³ÿâ ü´ÿû üµÿû ü¶ÿû ü·ÿû ü¸ÿû üºÿû ü»ÿì ü¼ÿì ü½ÿì ü¾ÿì ü¿ÿâ üÁÿâ üÂÿâ üÃÿö üÄÿâ üÅÿö üÆÿâ üÇÿö üÈÿâ üÊÿâ üÌÿâ üÎÿâ üÞÿâ üàÿâ üáÿö üâÿâ üãÿö üäÿâ üåÿö üÿâ üÿâ ü ÿâ üÿâ üÿû üÿâ üÿû üÿâ üÿû üÿâ üÿû üÿì üÿì üÿö ü ÿì ü!ÿö ü"ÿì ü#ÿö ü$ÿÎ ü%ÿö ü&ÿÎ ü+ÿì ü-ÿì ü/ÿì ü1ÿì ü3ÿì ü8ÿÎ ü9ÿâ ü:ÿÎ ü;ÿÎ ü<ÿâ ü=ÿÎ ü>ÿâ ü?ÿÎ ü@ÿâ ü ;ÿâ ü Qÿö ü Zÿì ü [ÿö ü \ÿì ü ]ÿö ü dÿÎ ü eÿö ü fÿÎ ü gÿö ü èÿÎ ü éÿâ ü òÿÎ ü õÿÎ ü öÿÎ ü ÿì ü ÿì üÙÿö üÚÿö üÜÿö üÝÿö ýÿâ ýÿâ ý òÿØ ý õÿØ ý öÿØ $ÿÎ &ÿì *ÿì ,ÿÉ -ÿö 2ÿì 4ÿì 6ÿâ 7ÿÎ 9ÿÎ :ÿÎ ;ÿÉ <ÿÎ =ÿÉ Dÿç Fÿö Gÿû Hÿö Iÿö Jÿç Mÿö PÿØ QÿØ Rÿö Sÿç Tÿû UÿØ Vÿì Wÿö XÿÝ Yÿö Zÿö [ÿì \ÿö ]ÿØ ‚ÿÎ ƒÿÎ „ÿÎ …ÿÎ †ÿÎ ‡ÿÎ ˆÿÎ ‰ÿì ŽÿÉ ÿÉ ÿÉ ‘ÿÉ ”ÿì •ÿì –ÿì —ÿì ˜ÿì šÿì ŸÿÎ ¢ÿç £ÿç ¤ÿç ¥ÿç ¦ÿç §ÿç ¨ÿç ©ÿö ªÿö «ÿö ¬ÿö ­ÿö ²ÿö ³ÿØ ´ÿö µÿö ¶ÿö ·ÿö ¸ÿö ºÿö »ÿÝ ¼ÿÝ ½ÿÝ ¾ÿÝ ¿ÿö Áÿö ÂÿÎ Ãÿç ÄÿÎ Åÿç ÆÿÎ Çÿç Èÿì Êÿì Ëÿö Ìÿì Îÿì Ïÿö Ñÿû Õÿö ×ÿö Ûÿö Þÿì àÿì áÿç âÿì ãÿç äÿì åÿç ÿØ ÿØ  ÿØ ÿì ÿö ÿì ÿö ÿì ÿö ÿì ÿö ÿØ ÿâ ÿì  ÿâ !ÿì "ÿâ #ÿì $ÿÎ %ÿö &ÿÎ +ÿÝ -ÿÝ /ÿÝ 1ÿÝ 3ÿÝ 8ÿÎ 9ÿö :ÿÎ ;ÿÉ <ÿØ =ÿÉ >ÿØ ?ÿÉ @ÿØ  ;ÿØ  Qÿç  Zÿâ  [ÿì  \ÿâ  ]ÿì  dÿÎ  eÿö  fÿÎ  gÿö  èÿÎ  éÿö Ùÿö Úÿö Üÿö Ýÿö Dÿö Hÿö Jÿö Pÿö Qÿö Sÿû Uÿö Vÿö Xÿñ ]ÿö ¢ÿö £ÿö ¤ÿö ¥ÿö ¦ÿö §ÿö ¨ÿö ªÿö «ÿö ¬ÿö ­ÿö ²ÿö ³ÿö »ÿñ ¼ÿñ ½ÿñ ¾ÿñ Ãÿö Åÿö Çÿö Õÿö ×ÿö áÿö ãÿö åÿö ÿö ÿö  ÿö ÿö ÿö !ÿö #ÿö +ÿñ -ÿñ /ÿñ 1ÿñ 3ÿñ <ÿö >ÿö @ÿö 2ÿö  Qÿû  [ÿö  ]ÿö ÿÄ ÿâ ÿÄ $ÿØ &ÿâ *ÿâ ,ÿØ -ÿâ 2ÿâ 4ÿâ 6ÿØ 9ÿì :ÿì ;ÿâ <ÿì =ÿâ Dÿâ Fÿâ Gÿç HÿØ Iÿì Jÿâ Mÿì PÿÎ QÿÎ RÿÝ Sÿâ Tÿç UÿØ VÿØ Wÿì XÿÎ Yÿö Zÿö [ÿØ \ÿö ]ÿÎ mÿâ }ÿÎ ‚ÿØ ƒÿØ „ÿØ …ÿØ †ÿØ ‡ÿØ ˆÿØ ‰ÿâ ŽÿØ ÿØ ÿØ ‘ÿØ ”ÿâ •ÿâ –ÿâ —ÿâ ˜ÿâ šÿâ Ÿÿì ¢ÿâ £ÿâ ¤ÿâ ¥ÿâ ¦ÿâ §ÿâ ¨ÿâ ©ÿâ ªÿØ «ÿØ ¬ÿØ ­ÿØ ²ÿØ ³ÿÎ ´ÿÝ µÿÝ ¶ÿÝ ·ÿÝ ¸ÿÝ ºÿÝ »ÿÎ ¼ÿÎ ½ÿÎ ¾ÿÎ ¿ÿö Áÿö ÂÿØ Ãÿâ ÄÿØ Åÿâ ÆÿØ Çÿâ Èÿâ Êÿâ Ëÿâ Ìÿâ Îÿâ Ïÿâ Ñÿç ÕÿØ ×ÿØ ÛÿØ Þÿâ àÿâ áÿâ âÿâ ãÿâ äÿâ åÿâ ÿÎ ÿÎ  ÿÎ ÿâ ÿÝ ÿâ ÿÝ ÿâ ÿÝ ÿâ ÿÝ ÿØ ÿØ ÿØ  ÿØ !ÿØ "ÿØ #ÿØ %ÿì +ÿÎ -ÿÎ /ÿÎ 1ÿÎ 3ÿÎ 8ÿì 9ÿö :ÿì ;ÿâ <ÿÎ =ÿâ >ÿÎ ?ÿâ @ÿÎ  ;ÿÎ  Qÿâ  ZÿØ  [ÿØ  \ÿØ  ]ÿØ  eÿì  gÿì  èÿì  éÿö  ÿâ  ÿÎ Ùÿì Úÿì Üÿì Ýÿì ÿÄ ÿÄ ÿÄ Dÿì Fÿö Gÿû Hÿç Jÿì Pÿö Qÿö Rÿñ Tÿû Uÿö Vÿì Xÿû [ÿì ]ÿö mÿÄ }ÿì ¢ÿì £ÿì ¤ÿì ¥ÿì ¦ÿì §ÿì ¨ÿì ©ÿö ªÿç «ÿç ¬ÿç ­ÿç ²ÿç ³ÿö ´ÿñ µÿñ ¶ÿñ ·ÿñ ¸ÿñ ºÿñ »ÿû ¼ÿû ½ÿû ¾ÿû Ãÿì Åÿì Çÿì Ëÿö Ïÿö Ñÿû Óÿû Õÿç ×ÿç áÿì ãÿì åÿì ÿö ÿö  ÿö ÿñ ÿñ ÿñ ÿñ ÿö ÿì !ÿì #ÿì +ÿû -ÿû /ÿû 1ÿû 3ÿû <ÿö >ÿö @ÿö 2ÿö  ÿû  [ÿì  ]ÿì  ÿÄ  ÿì ÿâ ÿÄ ÿâ Fÿì Gÿñ Hÿñ Mÿì Pÿç Qÿç Rÿç Sÿö Tÿñ Uÿì Vÿì Xÿì Yÿì Zÿì [ÿì \ÿì ]ÿç mÿÄ }ÿâ ©ÿì ªÿñ «ÿñ ¬ÿñ ­ÿñ ²ÿñ ³ÿç ´ÿç µÿç ¶ÿç ·ÿç ¸ÿç ºÿç »ÿì ¼ÿì ½ÿì ¾ÿì ¿ÿì Áÿì Ëÿì Ïÿì Ñÿñ Óÿñ Õÿñ ×ÿñ ÿç ÿç  ÿç ÿç ÿç ÿç ÿç ÿì ÿì !ÿì #ÿì +ÿì -ÿì /ÿì 1ÿì 3ÿì 9ÿì <ÿç >ÿç @ÿç 2ÿç  ÿñ  Qÿö  [ÿì  ]ÿì  éÿì  òÿÄ  õÿÄ  öÿÄ  ÿÄ  ÿâ ;ÿâ ;ÿÄ ;ÿâ ;Fÿì ;Gÿñ ;Hÿñ ;Mÿì ;Pÿç ;Qÿç ;Rÿç ;Sÿö ;Tÿñ ;Uÿì ;Vÿì ;Xÿì ;Yÿì ;Zÿì ;[ÿì ;\ÿì ;]ÿç ;mÿÄ ;}ÿâ ;©ÿì ;ªÿñ ;«ÿñ ;¬ÿñ ;­ÿñ ;²ÿñ ;³ÿç ;´ÿç ;µÿç ;¶ÿç ;·ÿç ;¸ÿç ;ºÿç ;»ÿì ;¼ÿì ;½ÿì ;¾ÿì ;¿ÿì ;Áÿì ;Ëÿì ;Ïÿì ;Ñÿñ ;Óÿñ ;Õÿñ ;×ÿñ ;ÿç ;ÿç ; ÿç ;ÿç ;ÿç ;ÿç ;ÿç ;ÿì ;ÿì ;!ÿì ;#ÿì ;+ÿì ;-ÿì ;/ÿì ;1ÿì ;3ÿì ;9ÿì ;<ÿç ;>ÿç ;@ÿç ;2ÿç ; ÿñ ; Qÿö ; [ÿì ; ]ÿì ; éÿì ; òÿÄ ; õÿÄ ; öÿÄ ; ÿÄ ; ÿâ Pÿœ Pÿº Pÿœ P$ÿÄ P&ÿì P*ÿì P,ÿØ P-ÿØ P2ÿì P4ÿì P6ÿâ P7ÿâ P9ÿØ P:ÿØ P;ÿÄ P<ÿØ P=ÿÄ PDÿÎ PFÿØ PGÿÝ PHÿØ PJÿÎ PPÿØ PQÿØ PRÿÓ PSÿì PTÿÝ PUÿâ PVÿâ PXÿØ P[ÿØ P]ÿØ Pmÿº P}ÿÄ P‚ÿÄ PƒÿÄ P„ÿÄ P…ÿÄ P†ÿÄ P‡ÿÄ PˆÿÄ P‰ÿì PŽÿØ PÿØ PÿØ P‘ÿØ P”ÿì P•ÿì P–ÿì P—ÿì P˜ÿì Pšÿì PŸÿØ P¢ÿÎ P£ÿÎ P¤ÿÎ P¥ÿÎ P¦ÿÎ P§ÿÎ P¨ÿÎ P©ÿØ PªÿØ P«ÿØ P¬ÿØ P­ÿØ P²ÿØ P³ÿØ P´ÿÓ PµÿÓ P¶ÿÓ P·ÿÓ P¸ÿÓ PºÿÓ P»ÿØ P¼ÿØ P½ÿØ P¾ÿØ PÂÿÄ PÃÿÎ PÄÿÄ PÅÿÎ PÆÿÄ PÇÿÎ PÈÿì PÊÿì PËÿØ PÌÿì PÎÿì PÏÿØ PÑÿÝ PÕÿØ P×ÿØ PÛÿØ PÞÿì Pàÿì PáÿÎ Pâÿì PãÿÎ Päÿì PåÿÎ PÿØ PÿØ P ÿØ Pÿì PÿÓ Pÿì PÿÓ Pÿì PÿÓ Pÿì PÿÓ Pÿâ Pÿâ Pÿâ P ÿâ P!ÿâ P"ÿâ P#ÿâ P$ÿâ P&ÿâ P+ÿØ P-ÿØ P/ÿØ P1ÿØ P3ÿØ P8ÿØ P:ÿØ P;ÿÄ P<ÿØ P=ÿÄ P>ÿØ P?ÿÄ P@ÿØ P ;ÿØ P Qÿì P Zÿâ P [ÿâ P \ÿâ P ]ÿâ P dÿâ P fÿâ P èÿØ P òÿì P õÿì P öÿì P ÿº P ÿÄ Qÿâ Qÿâ QMÿö QPÿö QQÿö QUÿö QXÿö QYÿö QZÿö Q[ÿö Q\ÿö Q]ÿö Q³ÿö Q»ÿö Q¼ÿö Q½ÿö Q¾ÿö Q¿ÿö QÁÿö Qÿö Qÿö Q ÿö Qÿö Q+ÿö Q-ÿö Q/ÿö Q1ÿö Q3ÿö Q9ÿö Q<ÿö Q>ÿö Q@ÿö Q2ÿö Q éÿö Q òÿØ Q õÿØ Q öÿØ ZÿÄ Zÿâ ZÿÄ Z$ÿâ Z&ÿì Z*ÿì Z,ÿØ Z2ÿì Z4ÿì Z6ÿö Z7ÿØ Z9ÿÎ Z:ÿÎ Z;ÿÎ Z<ÿÎ Z=ÿÎ ZIÿö ZMÿö ZPÿì ZQÿì ZRÿû ZSÿö ZUÿì ZWÿö ZXÿç ZYÿì ZZÿì Z[ÿØ Z\ÿì Z]ÿì Zmÿâ Z}ÿâ Z‚ÿâ Zƒÿâ Z„ÿâ Z…ÿâ Z†ÿâ Z‡ÿâ Zˆÿâ Z‰ÿì ZŽÿØ ZÿØ ZÿØ Z‘ÿØ Z”ÿì Z•ÿì Z–ÿì Z—ÿì Z˜ÿì Zšÿì ZŸÿÎ Z³ÿì Z´ÿû Zµÿû Z¶ÿû Z·ÿû Z¸ÿû Zºÿû Z»ÿç Z¼ÿç Z½ÿç Z¾ÿç Z¿ÿì ZÁÿì ZÂÿâ ZÄÿâ ZÆÿâ ZÈÿì ZÊÿì ZÌÿì ZÎÿì ZÞÿì Zàÿì Zâÿì Zäÿì Zÿì Zÿì Z ÿì Zÿì Zÿû Zÿì Zÿû Zÿì Zÿû Zÿì Zÿû Zÿì Zÿö Z ÿö Z"ÿö Z$ÿØ Z%ÿö Z&ÿØ Z+ÿç Z-ÿç Z/ÿç Z1ÿç Z3ÿç Z8ÿÎ Z9ÿì Z:ÿÎ Z;ÿÎ Z<ÿì Z=ÿÎ Z>ÿì Z?ÿÎ Z@ÿì Z ;ÿì Z Qÿö Z Zÿö Z \ÿö Z dÿØ Z eÿö Z fÿØ Z gÿö Z èÿÎ Z éÿì Z òÿØ Z õÿØ Z öÿØ Z ÿâ Z ÿâ ZÙÿö ZÚÿö ZÜÿö ZÝÿö [ÿØ [ÿØ [ÿØ [Dÿö [Fÿû [Iÿì [Jÿö [Mÿì [Pÿö [Qÿö [Rÿö [Sÿö [Uÿì [Vÿö [Wÿì [Xÿñ [Yÿì [Zÿì [[ÿØ [\ÿì []ÿö [mÿØ [}ÿâ [¢ÿö [£ÿö [¤ÿö [¥ÿö [¦ÿö [§ÿö [¨ÿö [©ÿû [³ÿö [´ÿö [µÿö [¶ÿö [·ÿö [¸ÿö [ºÿö [»ÿñ [¼ÿñ [½ÿñ [¾ÿñ [¿ÿì [Áÿì [Ãÿö [Åÿö [Çÿö [Ëÿû [Ïÿû [áÿö [ãÿö [åÿö [ÿö [ÿö [ ÿö [ÿö [ÿö [ÿö [ÿö [ÿì [ÿö [!ÿö [#ÿö [%ÿì [+ÿñ [-ÿñ [/ÿñ [1ÿñ [3ÿñ [9ÿì [<ÿö [>ÿö [@ÿö [2ÿö [ ÿì [ Qÿö [ [ÿö [ ]ÿö [ eÿì [ gÿì [ éÿì [ òÿ° [ õÿ° [ öÿ° [ ÿØ [ ÿâ [Ùÿì [Úÿì [Ûÿì [Üÿì [Ýÿì \ÿÄ \ÿâ \ÿÄ \$ÿâ \&ÿì \*ÿì \,ÿØ \2ÿì \4ÿì \6ÿö \7ÿØ \9ÿÎ \:ÿÎ \;ÿÎ \<ÿÎ \=ÿÎ \Iÿö \Mÿö \Pÿì \Qÿì \Rÿû \Sÿö \Uÿì \Wÿö \Xÿç \Yÿì \Zÿì \[ÿØ \\ÿì \]ÿì \mÿâ \}ÿâ \‚ÿâ \ƒÿâ \„ÿâ \…ÿâ \†ÿâ \‡ÿâ \ˆÿâ \‰ÿì \ŽÿØ \ÿØ \ÿØ \‘ÿØ \”ÿì \•ÿì \–ÿì \—ÿì \˜ÿì \šÿì \ŸÿÎ \³ÿì \´ÿû \µÿû \¶ÿû \·ÿû \¸ÿû \ºÿû \»ÿç \¼ÿç \½ÿç \¾ÿç \¿ÿì \Áÿì \Âÿâ \Äÿâ \Æÿâ \Èÿì \Êÿì \Ìÿì \Îÿì \Þÿì \àÿì \âÿì \äÿì \ÿì \ÿì \ ÿì \ÿì \ÿû \ÿì \ÿû \ÿì \ÿû \ÿì \ÿû \ÿì \ÿö \ ÿö \"ÿö \$ÿØ \%ÿö \&ÿØ \+ÿç \-ÿç \/ÿç \1ÿç \3ÿç \8ÿÎ \9ÿì \:ÿÎ \;ÿÎ \<ÿì \=ÿÎ \>ÿì \?ÿÎ \@ÿì \ ;ÿì \ Qÿö \ Zÿö \ \ÿö \ dÿØ \ eÿö \ fÿØ \ gÿö \ èÿÎ \ éÿì \ òÿØ \ õÿØ \ öÿØ \ ÿâ \ ÿâ \Ùÿö \Úÿö \Üÿö \Ýÿö ]ÿØ ]ÿØ ]ÿØ ]Dÿö ]Fÿû ]Iÿì ]Jÿö ]Mÿì ]Pÿö ]Qÿö ]Rÿö ]Sÿö ]Uÿì ]Vÿö ]Wÿì ]Xÿñ ]Yÿì ]Zÿì ][ÿØ ]\ÿì ]]ÿö ]mÿØ ]}ÿâ ]¢ÿö ]£ÿö ]¤ÿö ]¥ÿö ]¦ÿö ]§ÿö ]¨ÿö ]©ÿû ]³ÿö ]´ÿö ]µÿö ]¶ÿö ]·ÿö ]¸ÿö ]ºÿö ]»ÿñ ]¼ÿñ ]½ÿñ ]¾ÿñ ]¿ÿì ]Áÿì ]Ãÿö ]Åÿö ]Çÿö ]Ëÿû ]Ïÿû ]áÿö ]ãÿö ]åÿö ]ÿö ]ÿö ] ÿö ]ÿö ]ÿö ]ÿö ]ÿö ]ÿì ]ÿö ]!ÿö ]#ÿö ]%ÿì ]+ÿñ ]-ÿñ ]/ÿñ ]1ÿñ ]3ÿñ ]9ÿì ]<ÿö ]>ÿö ]@ÿö ]2ÿö ] ÿì ] Qÿö ] [ÿö ] ]ÿö ] eÿì ] gÿì ] éÿì ] òÿ° ] õÿ° ] öÿ° ] ÿØ ] ÿâ ]Ùÿì ]Úÿì ]Ûÿì ]Üÿì ]Ýÿì dÿÄ dÿÎ dÿÄ d$ÿÎ d&ÿØ d*ÿØ d,ÿâ d-ÿØ d2ÿØ d4ÿØ d6ÿØ d9ÿö d:ÿö d;ÿØ d<ÿö d=ÿØ dDÿØ dFÿØ dGÿÝ dHÿØ dIÿì dJÿØ dPÿØ dQÿØ dRÿÓ dSÿâ dTÿÝ dUÿØ dVÿØ dWÿì dXÿØ dYÿì dZÿì d[ÿâ d\ÿì d]ÿØ dmÿÎ d}ÿØ d‚ÿÎ dƒÿÎ d„ÿÎ d…ÿÎ d†ÿÎ d‡ÿÎ dˆÿÎ d‰ÿØ dŽÿâ dÿâ dÿâ d‘ÿâ d”ÿØ d•ÿØ d–ÿØ d—ÿØ d˜ÿØ dšÿØ dŸÿö d¢ÿØ d£ÿØ d¤ÿØ d¥ÿØ d¦ÿØ d§ÿØ d¨ÿØ d©ÿØ dªÿØ d«ÿØ d¬ÿØ d­ÿØ d²ÿØ d³ÿØ d´ÿÓ dµÿÓ d¶ÿÓ d·ÿÓ d¸ÿÓ dºÿÓ d»ÿØ d¼ÿØ d½ÿØ d¾ÿØ d¿ÿì dÁÿì dÂÿÎ dÃÿØ dÄÿÎ dÅÿØ dÆÿÎ dÇÿØ dÈÿØ dÊÿØ dËÿØ dÌÿØ dÎÿØ dÏÿØ dÑÿÝ dÕÿØ d×ÿØ dÛÿØ dÞÿØ dàÿØ dáÿØ dâÿØ dãÿØ däÿØ dåÿØ dÿØ dÿØ d ÿØ dÿØ dÿÓ dÿØ dÿÓ dÿØ dÿÓ dÿØ dÿÓ dÿØ dÿØ dÿØ d ÿØ d!ÿØ d"ÿØ d#ÿØ d%ÿì d+ÿØ d-ÿØ d/ÿØ d1ÿØ d3ÿØ d8ÿö d9ÿì d:ÿö d;ÿØ d<ÿØ d=ÿØ d>ÿØ d?ÿØ d@ÿØ d ;ÿØ d Qÿâ d ZÿØ d [ÿØ d \ÿØ d ]ÿØ d eÿì d gÿì d èÿö d éÿì d ÿÎ d ÿØ dÙÿì dÚÿì dÜÿì dÝÿì eDÿö eFÿö eGÿû eHÿû eIÿñ eJÿö ePÿö eQÿö eRÿñ eTÿû eUÿö eVÿö eWÿñ e[ÿì e]ÿö e}ÿØ e¢ÿö e£ÿö e¤ÿö e¥ÿö e¦ÿö e§ÿö e¨ÿö e©ÿö eªÿû e«ÿû e¬ÿû e­ÿû e²ÿû e³ÿö e´ÿñ eµÿñ e¶ÿñ e·ÿñ e¸ÿñ eºÿñ eÃÿö eÅÿö eÇÿö eËÿö eÏÿö eÑÿû eÓÿû eÕÿû e×ÿû eáÿö eãÿö eåÿö eÿö eÿö e ÿö eÿñ eÿñ eÿñ eÿñ eÿö eÿö e!ÿö e#ÿö e%ÿñ e<ÿö e>ÿö e@ÿö e2ÿö e ÿû e ÿñ e [ÿö e ]ÿö e eÿñ e gÿñ e ÿØ eÙÿñ eÚÿñ eÛÿñ eÜÿñ eÝÿñ fÿÄ fÿÎ fÿÄ f$ÿÎ f&ÿØ f*ÿØ f,ÿâ f-ÿØ f2ÿØ f4ÿØ f6ÿØ f9ÿö f:ÿö f;ÿØ f<ÿö f=ÿØ fDÿØ fFÿØ fGÿÝ fHÿØ fIÿì fJÿØ fPÿØ fQÿØ fRÿÓ fSÿâ fTÿÝ fUÿØ fVÿØ fWÿì fXÿØ fYÿì fZÿì f[ÿâ f\ÿì f]ÿØ fmÿÎ f}ÿØ f‚ÿÎ fƒÿÎ f„ÿÎ f…ÿÎ f†ÿÎ f‡ÿÎ fˆÿÎ f‰ÿØ fŽÿâ fÿâ fÿâ f‘ÿâ f”ÿØ f•ÿØ f–ÿØ f—ÿØ f˜ÿØ fšÿØ fŸÿö f¢ÿØ f£ÿØ f¤ÿØ f¥ÿØ f¦ÿØ f§ÿØ f¨ÿØ f©ÿØ fªÿØ f«ÿØ f¬ÿØ f­ÿØ f²ÿØ f³ÿØ f´ÿÓ fµÿÓ f¶ÿÓ f·ÿÓ f¸ÿÓ fºÿÓ f»ÿØ f¼ÿØ f½ÿØ f¾ÿØ f¿ÿì fÁÿì fÂÿÎ fÃÿØ fÄÿÎ fÅÿØ fÆÿÎ fÇÿØ fÈÿØ fÊÿØ fËÿØ fÌÿØ fÎÿØ fÏÿØ fÑÿÝ fÕÿØ f×ÿØ fÛÿØ fÞÿØ fàÿØ fáÿØ fâÿØ fãÿØ fäÿØ fåÿØ fÿØ fÿØ f ÿØ fÿØ fÿÓ fÿØ fÿÓ fÿØ fÿÓ fÿØ fÿÓ fÿØ fÿØ fÿØ f ÿØ f!ÿØ f"ÿØ f#ÿØ f%ÿì f+ÿØ f-ÿØ f/ÿØ f1ÿØ f3ÿØ f8ÿö f9ÿì f:ÿö f;ÿØ f<ÿØ f=ÿØ f>ÿØ f?ÿØ f@ÿØ f ;ÿØ f Qÿâ f ZÿØ f [ÿØ f \ÿØ f ]ÿØ f eÿì f gÿì f èÿö f éÿì f ÿÎ f ÿØ fÙÿì fÚÿì fÜÿì fÝÿì gDÿö gFÿö gGÿû gHÿû gIÿñ gJÿö gPÿö gQÿö gRÿñ gTÿû gUÿö gVÿö gWÿñ g[ÿì g]ÿö g}ÿØ g¢ÿö g£ÿö g¤ÿö g¥ÿö g¦ÿö g§ÿö g¨ÿö g©ÿö gªÿû g«ÿû g¬ÿû g­ÿû g²ÿû g³ÿö g´ÿñ gµÿñ g¶ÿñ g·ÿñ g¸ÿñ gºÿñ gÃÿö gÅÿö gÇÿö gËÿö gÏÿö gÑÿû gÓÿû gÕÿû g×ÿû gáÿö gãÿö gåÿö gÿö gÿö g ÿö gÿñ gÿñ gÿñ gÿñ gÿö gÿö g!ÿö g#ÿö g%ÿñ g<ÿö g>ÿö g@ÿö g2ÿö g ÿû g ÿñ g [ÿö g ]ÿö g eÿñ g gÿñ g ÿØ gÙÿñ gÚÿñ gÛÿñ gÜÿñ gÝÿñ ²$ÿâ ²&ÿØ ²*ÿØ ²,ÿØ ²-ÿì ²2ÿØ ²4ÿØ ²6ÿÎ ²7ÿì ²9ÿÎ ²:ÿÎ ²;ÿâ ²<ÿÎ ²=ÿâ ²Dÿâ ²Fÿâ ²Gÿç ²Hÿâ ²Iÿâ ²Jÿâ ²Mÿâ ²PÿØ ²QÿØ ²RÿÝ ²Sÿì ²Tÿç ²Uÿâ ²Vÿì ²Wÿâ ²XÿÓ ²YÿØ ²ZÿØ ²[ÿâ ²\ÿØ ²]ÿØ ²‚ÿâ ²ƒÿâ ²„ÿâ ²…ÿâ ²†ÿâ ²‡ÿâ ²ˆÿâ ²‰ÿØ ²ŽÿØ ²ÿØ ²ÿØ ²‘ÿØ ²”ÿØ ²•ÿØ ²–ÿØ ²—ÿØ ²˜ÿØ ²šÿØ ²ŸÿÎ ²¢ÿâ ²£ÿâ ²¤ÿâ ²¥ÿâ ²¦ÿâ ²§ÿâ ²¨ÿâ ²©ÿâ ²ªÿâ ²«ÿâ ²¬ÿâ ²­ÿâ ²²ÿâ ²³ÿØ ²´ÿÝ ²µÿÝ ²¶ÿÝ ²·ÿÝ ²¸ÿÝ ²ºÿÝ ²»ÿÓ ²¼ÿÓ ²½ÿÓ ²¾ÿÓ ²¿ÿØ ²ÁÿØ ²Âÿâ ²Ãÿâ ²Äÿâ ²Åÿâ ²Æÿâ ²Çÿâ ²ÈÿØ ²ÊÿØ ²Ëÿâ ²ÌÿØ ²ÎÿØ ²Ïÿâ ²Ñÿç ²Õÿâ ²×ÿâ ²Ûÿâ ²ÞÿØ ²àÿØ ²áÿâ ²âÿØ ²ãÿâ ²äÿØ ²åÿâ ²ÿØ ²ÿØ ² ÿØ ²ÿØ ²ÿÝ ²ÿØ ²ÿÝ ²ÿØ ²ÿÝ ²ÿØ ²ÿÝ ²ÿâ ²ÿÎ ²ÿì ² ÿÎ ²!ÿì ²"ÿÎ ²#ÿì ²$ÿì ²%ÿâ ²&ÿì ²+ÿÓ ²-ÿÓ ²/ÿÓ ²1ÿÓ ²3ÿÓ ²8ÿÎ ²9ÿØ ²:ÿÎ ²;ÿâ ²<ÿØ ²=ÿâ ²>ÿØ ²?ÿâ ²@ÿØ ² ;ÿØ ² Qÿì ² ZÿÎ ² [ÿì ² \ÿÎ ² ]ÿì ² dÿì ² eÿâ ² fÿì ² gÿâ ² èÿÎ ² éÿØ ²Ùÿâ ²Úÿâ ²Üÿâ ²Ýÿâ èÿÄ èÿÎ èÿÄ è$ÿÄ è&ÿÎ è*ÿÎ è,ÿØ è-ÿâ è2ÿÎ è4ÿÎ è6ÿÎ è;ÿâ è=ÿâ èDÿÎ èFÿÓ èGÿØ èHÿÎ èIÿì èJÿÎ èPÿÄ èQÿÄ èRÿÎ èSÿØ èTÿØ èUÿÄ èVÿØ èWÿì èXÿÎ èYÿì èZÿì è[ÿâ è\ÿì è]ÿÄ èmÿÎ è}ÿÄ è‚ÿÄ èƒÿÄ è„ÿÄ è…ÿÄ è†ÿÄ è‡ÿÄ èˆÿÄ è‰ÿÎ èŽÿØ èÿØ èÿØ è‘ÿØ è”ÿÎ è•ÿÎ è–ÿÎ è—ÿÎ è˜ÿÎ èšÿÎ è¢ÿÎ è£ÿÎ è¤ÿÎ è¥ÿÎ è¦ÿÎ è§ÿÎ è¨ÿÎ è©ÿÓ èªÿÎ è«ÿÎ è¬ÿÎ è­ÿÎ è²ÿÎ è³ÿÄ è´ÿÎ èµÿÎ è¶ÿÎ è·ÿÎ è¸ÿÎ èºÿÎ è»ÿÎ è¼ÿÎ è½ÿÎ è¾ÿÎ è¿ÿì èÁÿì èÂÿÄ èÃÿÎ èÄÿÄ èÅÿÎ èÆÿÄ èÇÿÎ èÈÿÎ èÊÿÎ èËÿÓ èÌÿÎ èÎÿÎ èÏÿÓ èÑÿØ èÕÿÎ è×ÿÎ èÛÿÎ èÞÿÎ èàÿÎ èáÿÎ èâÿÎ èãÿÎ èäÿÎ èåÿÎ èÿÄ èÿÄ è ÿÄ èÿÎ èÿÎ èÿÎ èÿÎ èÿÎ èÿÎ èÿÎ èÿÎ èÿÄ èÿÎ èÿØ è ÿÎ è!ÿØ è"ÿÎ è#ÿØ è%ÿì è+ÿÎ è-ÿÎ è/ÿÎ è1ÿÎ è3ÿÎ è9ÿì è;ÿâ è<ÿÄ è=ÿâ è>ÿÄ è?ÿâ è@ÿÄ è ;ÿÄ è QÿØ è ZÿÎ è [ÿØ è \ÿÎ è ]ÿØ è eÿì è gÿì è éÿì è ÿÎ è ÿÄ èÙÿì èÚÿì èÜÿì èÝÿì éÿÄ éÿì éÿÄ éDÿì éFÿì éGÿñ éHÿì éIÿö éJÿì éMÿì éPÿØ éQÿØ éRÿç éSÿâ éTÿñ éUÿç éVÿì éWÿö éXÿâ é[ÿì é]ÿØ émÿì é}ÿØ é¢ÿì é£ÿì é¤ÿì é¥ÿì é¦ÿì é§ÿì é¨ÿì é©ÿì éªÿì é«ÿì é¬ÿì é­ÿì é²ÿì é³ÿØ é´ÿç éµÿç é¶ÿç é·ÿç é¸ÿç éºÿç é»ÿâ é¼ÿâ é½ÿâ é¾ÿâ éÃÿì éÅÿì éÇÿì éËÿì éÏÿì éÑÿñ éÓÿñ éÕÿì é×ÿì éáÿì éãÿì éåÿì éÿØ éÿØ é ÿØ éÿç éÿç éÿç éÿç éÿç éÿì é!ÿì é#ÿì é%ÿö é+ÿâ é-ÿâ é/ÿâ é1ÿâ é3ÿâ é<ÿØ é>ÿØ é@ÿØ é2ÿØ é ÿñ é ÿö é Qÿâ é [ÿì é ]ÿì é eÿö é gÿö é òÿì é õÿì é öÿì é ÿì é ÿØ éÙÿö éÚÿö éÛÿö éÜÿö éÝÿö ñ$ÿÎ ñ&ÿâ ñ*ÿâ ñ-ÿâ ñ2ÿâ ñ4ÿâ ñ6ÿâ ñ;ÿâ ñ=ÿâ ñDÿâ ñFÿØ ñGÿØ ñHÿØ ñJÿâ ñPÿì ñQÿì ñRÿØ ñSÿì ñTÿØ ñUÿì ñVÿì ñXÿì ñ]ÿì ñ‚ÿÎ ñƒÿÎ ñ„ÿÎ ñ…ÿÎ ñ†ÿÎ ñˆÿÎ ñ‰ÿâ ñ”ÿâ ñ•ÿâ ñ–ÿâ ñ—ÿâ ñ˜ÿâ ñšÿâ ñ¢ÿâ ñ£ÿâ ñ¤ÿâ ñ¥ÿâ ñ¦ÿâ ñ§ÿâ ñ¨ÿâ ñ©ÿØ ñªÿØ ñ«ÿØ ñ¬ÿØ ñ­ÿØ ñ²ÿØ ñ³ÿì ñ´ÿØ ñµÿØ ñ¶ÿØ ñ·ÿØ ñ¸ÿØ ñºÿØ ñ»ÿì ñ¼ÿì ñ½ÿì ñ¾ÿì ñÂÿÎ ñÃÿâ ñÅÿâ ñÈÿâ ñÊÿâ ñËÿØ ñÌÿâ ñÎÿâ ñÏÿØ ñÑÿØ ñÕÿØ ñ×ÿØ ñÞÿâ ñàÿâ ñáÿâ ñâÿâ ñãÿâ ñäÿâ ñåÿâ ñÿì ñÿì ñ ÿì ñÿâ ñÿØ ñÿâ ñÿØ ñÿâ ñÿØ ñÿâ ñÿØ ñÿì ñÿâ ñÿì ñ ÿâ ñ!ÿì ñ"ÿâ ñ#ÿì ñ+ÿì ñ-ÿì ñ/ÿì ñ3ÿì ñ;ÿâ ñ<ÿì ñ=ÿâ ñ>ÿì ñ?ÿâ ñ@ÿì ñ2ÿì ñ ;ÿì ñ Qÿì ñ Zÿâ ñ [ÿì ñ \ÿâ ñ ]ÿì ò$ÿ¦ ò&ÿÎ ò*ÿÎ ò2ÿÎ ò4ÿÎ ò6ÿÎ ò9ÿö ò:ÿö ò<ÿö òDÿÎ òFÿÎ òGÿÎ òHÿÎ òJÿÎ òPÿÎ òQÿÎ òRÿÎ òSÿÎ òTÿÎ òUÿÎ òVÿÎ òXÿÎ òYÿì òZÿì ò[ÿâ ò\ÿì ò]ÿÎ ò‚ÿ¦ òƒÿ¦ ò„ÿ¦ ò…ÿ¦ ò†ÿ¦ òˆÿ¦ ò‰ÿÎ ò”ÿÎ ò•ÿÎ ò–ÿÎ ò—ÿÎ ò˜ÿÎ òšÿÎ òŸÿö ò¢ÿÎ ò£ÿÎ ò¤ÿÎ ò¥ÿÎ ò¦ÿÎ ò§ÿÎ ò¨ÿÎ ò©ÿÎ òªÿÎ ò«ÿÎ ò¬ÿÎ ò­ÿÎ ò²ÿÎ ò³ÿÎ ò´ÿÎ òµÿÎ ò¶ÿÎ ò·ÿÎ ò¸ÿÎ òºÿÎ ò»ÿÎ ò¼ÿÎ ò½ÿÎ ò¾ÿÎ ò¿ÿì òÁÿì òÂÿ¦ òÃÿÎ òÅÿÎ òÈÿÎ òÊÿÎ òËÿÎ òÌÿÎ òÎÿÎ òÏÿÎ òÑÿÎ òÕÿÎ ò×ÿÎ òÞÿÎ òàÿÎ òáÿÎ òâÿÎ òãÿÎ òäÿÎ òåÿÎ òÿÎ òÿÎ ò ÿÎ òÿÎ òÿÎ òÿÎ òÿÎ òÿÎ òÿÎ òÿÎ òÿÎ òÿÎ òÿÎ òÿÎ ò ÿÎ ò!ÿÎ ò"ÿÎ ò#ÿÎ ò+ÿÎ ò-ÿÎ ò/ÿÎ ò3ÿÎ ò8ÿö ò9ÿì ò:ÿö ò<ÿÎ ò>ÿÎ ò@ÿÎ ò2ÿÎ ò ;ÿÎ ò QÿÎ ò ZÿÎ ò [ÿÎ ò \ÿÎ ò ]ÿÎ ò èÿö ò éÿì ó&ÿâ ó*ÿâ ó2ÿâ ó4ÿâ ó6ÿâ ó7ÿâ ó9ÿÎ ó:ÿÎ ó;ÿâ ó<ÿÎ ó=ÿâ óDÿö óFÿö óGÿö óHÿö óIÿØ óJÿö óPÿâ óQÿâ óRÿö óSÿâ óTÿö óUÿâ óVÿì óWÿØ óXÿâ óYÿâ óZÿâ ó[ÿì ó\ÿâ ó]ÿâ ó‰ÿâ ó”ÿâ ó•ÿâ ó–ÿâ ó—ÿâ ó˜ÿâ óšÿâ óŸÿÎ ó¢ÿö ó£ÿö ó¤ÿö ó¥ÿö ó¦ÿö ó§ÿö ó¨ÿö ó©ÿö óªÿö ó«ÿö ó¬ÿö ó­ÿö ó²ÿö ó³ÿâ ó´ÿö óµÿö ó¶ÿö ó·ÿö ó¸ÿö óºÿö ó»ÿâ ó¼ÿâ ó½ÿâ ó¾ÿâ ó¿ÿâ óÁÿâ óÃÿö óÅÿö óÈÿâ óÊÿâ óËÿö óÌÿâ óÎÿâ óÏÿö óÑÿö óÕÿö ó×ÿö óÞÿâ óàÿâ óáÿö óâÿâ óãÿö óäÿâ óåÿö óÿâ óÿâ ó ÿâ óÿâ óÿö óÿâ óÿö óÿâ óÿö óÿâ óÿö óÿâ óÿâ óÿì ó ÿâ ó!ÿì ó"ÿâ ó#ÿì ó$ÿâ ó%ÿØ ó&ÿâ ó+ÿâ ó-ÿâ ó/ÿâ ó3ÿâ ó8ÿÎ ó9ÿâ ó:ÿÎ ó;ÿâ ó<ÿâ ó=ÿâ ó>ÿâ ó?ÿâ ó@ÿâ ó2ÿâ ó ÿØ ó ;ÿâ ó Qÿâ ó Zÿâ ó [ÿì ó \ÿâ ó ]ÿì ó dÿâ ó eÿØ ó fÿâ ó gÿØ ó èÿÎ ó éÿâ óÙÿØ óÚÿØ óÛÿØ óÜÿØ óÝÿØ õ$ÿÎ õ&ÿâ õ*ÿâ õ-ÿâ õ2ÿâ õ4ÿâ õ6ÿâ õ;ÿâ õ=ÿâ õDÿâ õFÿØ õGÿØ õHÿØ õJÿâ õPÿì õQÿì õRÿØ õSÿì õTÿØ õUÿì õVÿì õXÿì õ]ÿì õ‚ÿÎ õƒÿÎ õ„ÿÎ õ…ÿÎ õ†ÿÎ õˆÿÎ õ‰ÿâ õ”ÿâ õ•ÿâ õ–ÿâ õ—ÿâ õ˜ÿâ õšÿâ õ¢ÿâ õ£ÿâ õ¤ÿâ õ¥ÿâ õ¦ÿâ õ§ÿâ õ¨ÿâ õ©ÿØ õªÿØ õ«ÿØ õ¬ÿØ õ­ÿØ õ²ÿØ õ³ÿì õ´ÿØ õµÿØ õ¶ÿØ õ·ÿØ õ¸ÿØ õºÿØ õ»ÿì õ¼ÿì õ½ÿì õ¾ÿì õÂÿÎ õÃÿâ õÅÿâ õÈÿâ õÊÿâ õËÿØ õÌÿâ õÎÿâ õÏÿØ õÑÿØ õÕÿØ õ×ÿØ õÞÿâ õàÿâ õáÿâ õâÿâ õãÿâ õäÿâ õåÿâ õÿì õÿì õ ÿì õÿâ õÿØ õÿâ õÿØ õÿâ õÿØ õÿâ õÿØ õÿì õÿâ õÿì õ ÿâ õ!ÿì õ"ÿâ õ#ÿì õ+ÿì õ-ÿì õ/ÿì õ3ÿì õ;ÿâ õ<ÿì õ=ÿâ õ>ÿì õ?ÿâ õ@ÿì õ2ÿì õ ;ÿì õ Qÿì õ Zÿâ õ [ÿì õ \ÿâ õ ]ÿì ÷&ÿâ ÷*ÿâ ÷2ÿâ ÷4ÿâ ÷6ÿâ ÷7ÿâ ÷9ÿÎ ÷:ÿÎ ÷;ÿâ ÷<ÿÎ ÷=ÿâ ÷Dÿö ÷Fÿö ÷Gÿö ÷Hÿö ÷IÿØ ÷Jÿö ÷Pÿâ ÷Qÿâ ÷Rÿö ÷Sÿâ ÷Tÿö ÷Uÿâ ÷Vÿì ÷WÿØ ÷Xÿâ ÷Yÿâ ÷Zÿâ ÷[ÿì ÷\ÿâ ÷]ÿâ ÷‰ÿâ ÷”ÿâ ÷•ÿâ ÷–ÿâ ÷—ÿâ ÷˜ÿâ ÷šÿâ ÷ŸÿÎ ÷¢ÿö ÷£ÿö ÷¤ÿö ÷¥ÿö ÷¦ÿö ÷§ÿö ÷¨ÿö ÷©ÿö ÷ªÿö ÷«ÿö ÷¬ÿö ÷­ÿö ÷²ÿö ÷³ÿâ ÷´ÿö ÷µÿö ÷¶ÿö ÷·ÿö ÷¸ÿö ÷ºÿö ÷»ÿâ ÷¼ÿâ ÷½ÿâ ÷¾ÿâ ÷¿ÿâ ÷Áÿâ ÷Ãÿö ÷Åÿö ÷Èÿâ ÷Êÿâ ÷Ëÿö ÷Ìÿâ ÷Îÿâ ÷Ïÿö ÷Ñÿö ÷Õÿö ÷×ÿö ÷Þÿâ ÷àÿâ ÷áÿö ÷âÿâ ÷ãÿö ÷äÿâ ÷åÿö ÷ÿâ ÷ÿâ ÷ ÿâ ÷ÿâ ÷ÿö ÷ÿâ ÷ÿö ÷ÿâ ÷ÿö ÷ÿâ ÷ÿö ÷ÿâ ÷ÿâ ÷ÿì ÷ ÿâ ÷!ÿì ÷"ÿâ ÷#ÿì ÷$ÿâ ÷%ÿØ ÷&ÿâ ÷+ÿâ ÷-ÿâ ÷/ÿâ ÷3ÿâ ÷8ÿÎ ÷9ÿâ ÷:ÿÎ ÷;ÿâ ÷<ÿâ ÷=ÿâ ÷>ÿâ ÷?ÿâ ÷@ÿâ ÷2ÿâ ÷ ÿØ ÷ ;ÿâ ÷ Qÿâ ÷ Zÿâ ÷ [ÿì ÷ \ÿâ ÷ ]ÿì ÷ dÿâ ÷ eÿØ ÷ fÿâ ÷ gÿØ ÷ èÿÎ ÷ éÿâ ÷ÙÿØ ÷ÚÿØ ÷ÛÿØ ÷ÜÿØ ÷ÝÿØ $ÿØ &ÿâ *ÿâ 2ÿâ 4ÿâ 6ÿâ 7ÿÎ 9ÿÎ :ÿÎ ;ÿÎ <ÿÎ =ÿÎ Dÿâ Fÿì Gÿì Hÿì Iÿì Jÿâ Mÿö Pÿâ Qÿâ Rÿì Sÿâ Tÿì Uÿâ Wÿì Xÿâ YÿØ ZÿØ [ÿØ \ÿØ ]ÿâ ‚ÿØ ƒÿØ „ÿØ …ÿØ †ÿØ ˆÿØ ‰ÿâ ”ÿâ •ÿâ –ÿâ —ÿâ ˜ÿâ šÿâ ŸÿÎ ¢ÿâ £ÿâ ¤ÿâ ¥ÿâ ¦ÿâ §ÿâ ¨ÿâ ©ÿì ªÿì «ÿì ¬ÿì ­ÿì ²ÿì ³ÿâ ´ÿì µÿì ¶ÿì ·ÿì ¸ÿì ºÿì »ÿâ ¼ÿâ ½ÿâ ¾ÿâ ¿ÿØ ÁÿØ ÂÿØ Ãÿâ Åÿâ Èÿâ Êÿâ Ëÿì Ìÿâ Îÿâ Ïÿì Ñÿì Õÿì ×ÿì Þÿâ àÿâ áÿâ âÿâ ãÿâ äÿâ åÿâ ÿâ ÿâ  ÿâ ÿâ ÿì ÿâ ÿì ÿâ ÿì ÿâ ÿì ÿâ ÿâ  ÿâ "ÿâ $ÿÎ %ÿì &ÿÎ +ÿâ -ÿâ /ÿâ 3ÿâ 8ÿÎ 9ÿØ :ÿÎ ;ÿÎ <ÿâ =ÿÎ >ÿâ ?ÿÎ @ÿâ 2ÿâ  ÿì  ;ÿâ  Qÿâ  Zÿâ  \ÿâ  dÿÎ  eÿì  fÿÎ  gÿì  èÿÎ  éÿØ Ùÿì Úÿì Ûÿì Üÿì Ýÿì¾È° $ÿÎ &ÿì *ÿì -ÿì 2ÿì 4ÿì 6ÿö 7ÿÎ 9ÿÎ :ÿÎ ;ÿÎ <ÿÎ =ÿÎ DÿØ IÿØ JÿØ Mÿâ PÿØ QÿØ SÿØ UÿØ VÿÎ WÿØ XÿØ YÿÄ ZÿÄ [ÿÎ \ÿÄ ]ÿØ ‚ÿÎ ƒÿÎ „ÿÎ …ÿÎ †ÿÎ ˆÿÎ ‰ÿì ”ÿì •ÿì –ÿì —ÿì ˜ÿì šÿì ŸÿÎ ¢ÿØ £ÿØ ¤ÿØ ¥ÿØ ¦ÿØ §ÿØ ¨ÿØ ³ÿØ »ÿØ ¼ÿØ ½ÿØ ¾ÿØ ¿ÿÄ ÁÿÄ ÂÿÎ ÃÿØ ÅÿØ Èÿì Êÿì Ìÿì Îÿì Þÿì àÿì áÿØ âÿì ãÿØ äÿì åÿØ ÿØ ÿØ  ÿØ ÿì ÿì ÿì ÿì ÿØ ÿö ÿÎ  ÿö !ÿÎ "ÿö #ÿÎ $ÿÎ %ÿØ &ÿÎ +ÿØ -ÿØ /ÿØ 3ÿØ 8ÿÎ 9ÿÄ :ÿÎ ;ÿÎ <ÿØ =ÿÎ >ÿØ ?ÿÎ @ÿØ 2ÿØ  ÿØ  ;ÿØ  QÿØ  Zÿö  [ÿÎ  \ÿö  ]ÿÎ  dÿÎ  eÿØ  fÿÎ  gÿØ  èÿÎ  éÿÄ ÙÿØ ÚÿØ ÛÿØ ÜÿØ ÝÿØÙÿÄÙÿÄÙÿÄÙDÿìÙFÿöÙGÿûÙHÿçÙJÿìÙPÿöÙQÿöÙRÿñÙTÿûÙUÿöÙVÿìÙXÿûÙ[ÿìÙ]ÿöÙmÿÄÙ}ÿìÙ¢ÿìÙ£ÿìÙ¤ÿìÙ¥ÿìÙ¦ÿìÙ§ÿìÙ¨ÿìÙ©ÿöÙªÿçÙ«ÿçÙ¬ÿçÙ­ÿçÙ²ÿçÙ³ÿöÙ´ÿñÙµÿñÙ¶ÿñÙ·ÿñÙ¸ÿñÙºÿñÙ»ÿûÙ¼ÿûÙ½ÿûÙ¾ÿûÙÃÿìÙÅÿìÙÇÿìÙËÿöÙÏÿöÙÑÿûÙÓÿûÙÕÿçÙ×ÿçÙáÿìÙãÿìÙåÿìÙÿöÙÿöÙ ÿöÙÿñÙÿñÙÿñÙÿñÙÿöÙÿìÙ!ÿìÙ#ÿìÙ+ÿûÙ-ÿûÙ/ÿûÙ1ÿûÙ3ÿûÙ<ÿöÙ>ÿöÙ@ÿöÙ2ÿöÙ ÿûÙ [ÿìÙ ]ÿìÙ ÿÄÙ ÿì0FEŒäû%N ˆÊø  +e Í -$EäÒ Ä ‚ t Š Ò  í J t 6’ æ  V  š‘ Hû  œ ž   f H° ø ê Ü̺ Ž €!T" r$ª& :'$*j-öCopyleft 2002, 2003, 2005, 2008, 2009, 2010 Free Software Foundation.Copyleft 2002, 2003, 2005, 2008, 2009, 2010 Free Software Foundation.FreeSansFreeSansMediumMediumFontForge 2.0 : Free Sans : 19-9-2010FontForge 2.0 : Free Sans : 19-9-2010Free SansFree SansVersion $Revision: 1.344 $ Version $Revision: 1.344 $ FreeSansFreeSansGNUGNUhttps://savannah.gnu.org/projects/freefont/https://savannah.gnu.org/projects/freefont/This computer font is part of GNU FreeFont. It is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.This computer font is part of GNU FreeFont. It is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.http://www.gnu.org/copyleft/gpl.htmlhttp://www.gnu.org/copyleft/gpl.htmlvëa?@O<V9NormalNormalNormalNavadnoNormálne1KG=K9NormalNormalOdmiana ZwykBaNormalnormalusisvidjsMediomenengahNormálµµÃ±¯±MittelNormalNormaaliGemiddeldnormaloby ejné=>@<0;5=ArruntaÿP2©  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a¬£„…½–膎‹©¤ŠÚƒ“òóˆÞñžªõôö¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ìîº  ýþ   ÿøù !"#$%&'()*+,-ú×./0123456789:;<âã=>?@ABCDEFGHIJK°±LMNOPQRSTUûüäåVWXYZ[\]^_`abcdefghijk»lmnoæçpqrstuvwxyz{|}~€‚¦ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“Øá”•–—˜™š›œžŸ ¡¢£ÛÜÝàÙߤ¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[Ÿ\]^_`abcdefghijklmnopq›rstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ          ²³   ¶·Ä ´µÅ ‚‡   «         Æ ! " # $ % & ' (¾¿ ) * + , - . / 0 1¼ 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u÷ v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ ÇŒ È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5˜ 6 7 8 9 : ; < = > ?š @™ï A B C D E F¥ G’ H I J K L M N O Pœ Q R S T U V W X Y Z [ \ ] ^ _§ ` a b c d”• e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–¹—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßÀÁàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬ softhyphenmicromiddotAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflexTcedillatcedillaTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018F Epsilonlatinuni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019EObarOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6Yoghuni01B8uni01B9uni01BAuni01BBuni01BEwynnuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFicaronuni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9Oogonekoogonekuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5Wynnuni01F8uni01F9 Aringacute aringacuteAEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208 idblgraveuni020Aiinvertedbreveuni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0224uni0225 A_dotaccent a_dotaccentuni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233dotlessjaturnascript ascriptturnbhookcturnccurldtaildhookerevschwa schwahook epsilonlatinepsilonlatinrevepsilonlatinrevhookepsilonlatinrevclosed jdotlessbarghookgscript Gsmallcap gammalatinramshornhturnhhookhenghookibar iotalatin Ismallcap lmidtildelbeltlrthooklezhmturnedmlonglegturnedmhook nhookleftnrthook Nsmallcapobar OEsmallcap omegaclosedphilatinrturnrlonglegturned rhookturnedrlonglegrhook rfishhook rfishhookrev Rsmallcap Rsmallcapinvshookeshdotlessjstrokehook eshshortreveshcurltturntrthookubar upsilonlatinvhookvturnwturnyturn Ysmallcapzrthookzcurlezhezhcurl glottalstopglottalstoprevinvglottalstopinvcstretch bilabialclick Bsmallcap epsilonclosed Gsmallhook Hsmallcap jcrosstailkturn Lsmallcapqhookglottalstopbarglottalstopbarrevdzaltonedezhdzcurltsteshtccurluni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFhsuper hhooksuperjsuperrsuper rturnsuperrturnrthooksuper Rturnsuperwsuperysuperprimemod dblprimemod quoteleftmod apostrophe apostropherev ringhalfright ringhalfleftglottalstopmodglottalstopreversedmodfrontedbackedraisedloweredverticallinemodmacronmodifier acutemodifier gravemodifierverticallinelowmod macronlowmodgravesubacutesubcolontriangularmodcolontriangularhalfmodringhalfrightcenteredringhalfleftcentered tackupmid tackdownmidplusmodminusmoduni02DEuni02DF gammasuperlsuperssuperxsuperglottalrevsuper toneextrahightonehightonemidtonelow toneextralowuni02EAuni02EBuni02ECuni02EDuni02EEuni02EFuni02F0uni02F1uni02F2uni02F3uni02F4uni02F5uni02F6uni02F7uni02F8uni02F9uni02FAuni02FBuni02FCuni02FDuni02FEuni02FF gravecomb acutecomb circumflexcmb tildecomb macroncmb overlinecmbbrevecmb dotaccentcmb diaeresiscomb hookabovecombringcmbhungarumlautcmbcaroncmbverticallineabovecmbdblverticallineabovecmb gravedblnospcandrabinducmbbreveinvertedcmbcommaturnedabovecmb psilicomb dasiacombcommaaboverightcmb gravebelowcmb acutebelowcmblefttackbelowcmbuni0319uni031Ahorncmbringlefthalfsubnospuptackbelowcmbuni031Euni031F minusbelowcmbhookpalatalizedbelowcmbhookretroflexbelowcmb dotbelowcombdieresisbelowcmb ringbelowcmb commasubnosp cedillacmb ogonekcmblinevertsubnospbridgebelowcmbdblarchinvertedbelowcmb caronbelowcmbcircumflexbelowcmb brevebelowcmbbreveinvertedbelowcmb tildebelowcmbmacronbelowcmb lowlinecmb dbllowlinecmbtildeoverlaycmbstrokeshortoverlaycmbstrokelongoverlaycmbsolidusshortoverlaycmbsoliduslongoverlaycmbringrighthalfsubnospbridgeinvertedbelowcmbsquarebelowcmbseagullbelowcmb xabovecmbtildeverticalcmbdbloverlinecmbuni0340uni0341uni0342uni0343diaeresistonosnospuni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0350uni0351uni0352uni0353uni0354uni0355uni0356uni0357uni0358uni0359uni035Auni035Buni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0363uni0364uni0365uni0366uni0367uni0368uni0369uni036Auni036Buni036Cuni036Duni036Euni036Funi0374uni0375 ypogegrammeniuni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonostheta1 UpsilonhookUpsilonhooktonosUpsilonhookdiaeresisphi1 pisymbolgreekuni03D7uni03F0rhosymbolgreekuni03f4uni03F5Iecyrillic_grave Iocyrillic Djecyrillic Gjecyrillic Ecyrillic Dzecyrillic Icyrillic Yicyrillic Jecyrillic Ljecyrillic Njecyrillic Tshecyrillic KjecyrillicIicyrillic_graveUshortcyrillic Dzhecyrillic Acyrillic Becyrillic Vecyrillic Gecyrillic Decyrillic Iecyrillic Zhecyrillic Zecyrillic IicyrillicIishortcyrillic Kacyrillic Elcyrillic Emcyrillic Encyrillic Ocyrillic Pecyrillic Ercyrillic Escyrillic Tecyrillic Ucyrillic Efcyrillic Khacyrillic Tsecyrillic Checyrillic Shacyrillic ShchacyrillicHardsigncyrillic YericyrillicSoftsigncyrillicEreversedcyrillic IUcyrillic IAcyrillic acyrillic becyrillic vecyrillic gecyrillic decyrillic iecyrillic zhecyrillic zecyrillic iicyrilliciishortcyrillic kacyrillic elcyrillic emcyrillic encyrillic ocyrillic pecyrillic ercyrillic escyrillic tecyrillic ucyrillic efcyrillic khacyrillic tsecyrillic checyrillic shacyrillic shchacyrillichardsigncyrillic yericyrillicsoftsigncyrillicereversedcyrillic iucyrillic iacyrilliciecyrillic_grave iocyrillic djecyrillic gjecyrillic ecyrillic dzecyrillic icyrillic yicyrillic jecyrillic ljecyrillic njecyrillic tshecyrillic kjecyrilliciicyrillic_graveushortcyrillic dzhecyrillic Omegacyrillic omegacyrillicuni0470uni0471 Fitacyrillic fitacyrillicOmegatitlocyrillicomegatitlocyrillic Otcyrillic otcyrillicthousandcyrillictitlocyrilliccmbpalatalizationcyrilliccmbdasiapneumatacyrilliccmbpsilipneumatacyrilliccmbuni0487uni0488uni0489uni048auni048buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04d9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFDzeabkhasiancyrillicuni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04f6uni04f7uni04F8uni04F9uni0510uni0511uni0512uni0513uni051auni051buni051cuni051duni051euni051funi0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564 echarmenianuni0566uni0567uni0568uni0569uni056A iniarmenianuni056C xeharmenianuni056Euni056Funi0570uni0571uni0572uni0573 menarmenianuni0575 nowarmenianuni0577uni0578uni0579uni057Auni057Buni057Cuni057D vewarmenianuni057Funi0580uni0581 yiwnarmenianuni0583uni0584uni0585uni0586echyiwnarmenianuni0589uni058A afii57799 afii57801 afii57800 afii57802 hiriqhebrew tserehebrew segolhebrew patahhebrew qamatshebrew holamhebrew afii57796 dageshhebrew afii57839 afii57645 rafehebrew afii57842 shindothebrew sindothebrewsofpasuqhebrewupperdothebrew alefhebrew bethebrew gimelhebrew dalethebrewhehebrew vavhebrew zayinhebrew hethebrew tethebrew yodhebrewfinalkafhebrew kafhebrew lamedhebrewfinalmemhebrew memhebrewfinalnunhebrew nunhebrew samekhhebrew ayinhebrew finalpehebrewpehebrew tsadifinal tsadihebrew qofhebrew reshhebrew shinhebrew tavhebrew vavvavhebrew vavyodhebrew yodyodhebrew gereshhebrewgershayimhebrewuni0700uni0701uni0702uni0703uni0704uni0705uni0706uni0707uni0708uni0709uni070Auni070Buni070Cuni070Duni070Funi0710uni0711uni0712uni0713uni0714uni0715uni0716uni0717uni0718uni0719uni071Auni071Buni071Cuni071Duni071Euni071Funi0720uni0721uni0722uni0723uni0724uni0725uni0726uni0727uni0728uni0729uni072Auni072Buni072Cuni0730uni0731uni0732uni0733uni0734uni0735uni0736uni0737uni0738uni0739uni073Auni073Buni073Cuni073Duni073Euni073Funi0740uni0741uni0742uni0743uni0744uni0745uni0746uni0747uni0748uni0749uni074Auni0900candrabindudeva anusvaradeva visargadevauni0904adevaaadevaidevaiidevaudevauudeva rvocalicdeva lvocalicdeva ecandradeva eshortdevaedevaaideva ocandradeva oshortdevaodevaaudevakadevakhadevagadevaghadevangadevacadevachadevajadevajhadevanyadevattadevatthadevaddadevaddhadevannadevatadevathadevadadevadhadevanadevannnadevapadevaphadevabadevabhadevamadevayadevaradevarradevaladevalladevallladevavadevashadevassadevasadevahadeva nuktadeva avagrahadevaaavowelsigndevaivowelsigndevaiivowelsigndevauvowelsigndevauuvowelsigndevarvocalicvowelsigndevarrvocalicvowelsigndevaecandravowelsigndevaeshortvowelsigndevaevowelsigndevaaivowelsigndevaocandravowelsigndevaoshortvowelsigndevaovowelsigndevaauvowelsigndeva viramadevauni094eomdeva udattadeva anudattadeva gravedeva acutedevauni0955qadevakhhadevaghhadevazadeva dddhadevarhadevafadevayyadeva rrvocalicdeva llvocalicdevalvocalicvowelsigndevauni0963uni0964dbldandazerodevaonedevatwodevauni0969uni096Auni096Bsixdevauni096D eightdevaninedevaabbreviationsigndevauni0971uni0972uni0979uni097auni097buni097cuni097duni097euni097fbn_candrabindu bn_anusvara bn_visargabn_abn_aabn_ibn_iibn_ubn_uubn_ribn_libn_ebn_aibn_obn_aubn_kabn_khabn_gabn_ghabn_ngabn_cabn_chabn_jabn_jhabn_nyabn_ttabn_tthabn_ddabn_ddhabn_nnabn_tabn_thabn_dabn_dhabn_nabn_pabn_phabn_babn_bhabn_mabn_yabn_rabn_labn_shabn_ssabn_sabn_habn_nukta bn_avagraha bn_aakaarbn_ikaar bn_iikaarbn_ukaar bn_uukaar bn_rikaar bn_rrikaarbn_ekaar bn_aikaarbn_okaar bn_aukaar bn_hasanta bn_half_ta bn_aumarkbn_rrabn_rhabn_yyabn_rribn_lli bn_likaar bn_llikaarbn_zerobn_onebn_twobn_threebn_fourbn_fivebn_sixbn_sevenbn_eightbn_nine bn_asamira bn_asamiba bn_rupeemark bn_rupeesign bn_currency1 bn_currency2 bn_currency3 bn_currency4bn_currencyless bn_currency16 bn_issharuni0A01 bindigurmukhiuni0A03 agurmukhi aagurmukhi igurmukhi iigurmukhi ugurmukhi uugurmukhi eegurmukhi aigurmukhi oogurmukhi augurmukhi kagurmukhi khagurmukhi gagurmukhi ghagurmukhi ngagurmukhi cagurmukhi chagurmukhi jagurmukhi jhagurmukhi nyagurmukhi ttagurmukhi tthagurmukhi ddagurmukhi ddhagurmukhi nnagurmukhi tagurmukhi thagurmukhi dagurmukhi dhagurmukhi nagurmukhi pagurmukhi phagurmukhi bagurmukhi bhagurmukhi magurmukhi yagurmukhi ragurmukhi lagurmukhiuni0A33 vagurmukhi shagurmukhi sagurmukhi hagurmukhi nuktagurmukhiaamatragurmukhiimatragurmukhiiimatragurmukhiumatragurmukhiuumatragurmukhieematragurmukhiaimatragurmukhioomatragurmukhiaumatragurmukhihalantgurmukhiuni0a51 khhagurmukhi ghhagurmukhi zagurmukhi rragurmukhi fagurmukhi zerogurmukhi onegurmukhi twogurmukhi threegurmukhi fourgurmukhi fivegurmukhi sixgurmukhi sevengurmukhi eightgurmukhi ninegurmukhi tippigurmukhi addakgurmukhi irigurmukhi uragurmukhiekonkargurmukhiuni0a75candrabindugujaratianusvaragujarativisargagujarati agujarati aagujarati igujarati iigujarati ugujarati uugujaratirvocalicgujaratiuni0a8cecandragujarati egujarati aigujaratiocandragujarati ogujarati augujarati kagujarati khagujarati gagujarati ghagujarati ngagujarati cagujarati chagujarati jagujarati jhagujarati nyagujarati ttagujarati tthagujarati ddagujarati ddhagujarati nnagujarati tagujarati thagujarati dagujarati dhagujarati nagujarati pagujarati phagujarati bagujarati bhagujarati magujarati yagujarati ragujarati lagujarati llagujarati vagujarati shagujarati ssagujarati sagujarati hagujarati nuktagujaratiuni0ABDaavowelsigngujaratiivowelsigngujaratiiivowelsigngujaratiuvowelsigngujaratiuuvowelsigngujaratiuni0AC3 guj_rrvocalicecandravowelsigngujaratievowelsigngujaratiaivowelsigngujaratiocandravowelsigngujaratiovowelsigngujaratiauvowelsigngujarativiramagujarati omgujaratirrvocalicgujaratiuni0ae1uni0ae2uni0ae3 zerogujarati onegujarati twogujarati threegujarati fourgujarati fivegujarati sixgujarati sevengujarati eightgujarati ninegujaratiuni0AF1uni10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10f9uni10fbuni10fcuni13A0uni13A1uni13A2uni13A3uni13A4uni13A5uni13A6uni13A7uni13A8uni13A9uni13AAuni13ABuni13ACuni13ADuni13AEuni13AFuni13B0uni13B1uni13B2uni13B3uni13B4uni13B5uni13B6uni13B7uni13B8uni13B9uni13BAuni13BBuni13BCuni13BDuni13BEuni13BFuni13C0uni13C1uni13C2uni13C3uni13C4uni13C5uni13C6uni13C7uni13C8uni13C9uni13CAuni13CBuni13CCuni13CDuni13CEuni13CFuni13D0uni13D1uni13D2uni13D3uni13D4uni13D5uni13D6uni13D7uni13D8uni13D9uni13DAuni13DBuni13DCuni13DDuni13DEuni13DFuni13E0uni13E1uni13E2uni13E3uni13E4uni13E5uni13E6uni13E7uni13E8uni13E9uni13EAuni13EBuni13ECuni13EDuni13EEuni13EFuni13F0uni13F1uni13F2uni13F3uni13F4uni1401uni1402uni1403uni1404uni1405uni1406uni1407uni1408uni1409uni140Auni140Buni140Cuni140Duni140Euni140Funi1410uni1411uni1412uni1413uni1414uni1415uni1416uni1417uni1418uni1419uni141Auni141Buni141Cuni141Duni141Euni141Funi1420uni1421uni1422uni1423uni1424uni1425uni1426uni1427uni1428uni1429uni142Auni142Buni142Cuni142Duni142Euni142Funi1430uni1431uni1432uni1433uni1434uni1435uni1436uni1437uni1438uni1439uni143Auni143Buni143Cuni143Duni143Euni143Funi1440uni1441uni1442uni1443uni1444uni1445uni1446uni1447uni1448uni1449uni144Auni144Buni144Cuni144Duni144Euni144Funi1450uni1451uni1452uni1453uni1454uni1455uni1456uni1457uni1458uni1459uni145Auni145Buni145Cuni145Duni145Euni145Funi1460uni1461uni1462uni1463uni1464uni1465uni1466uni1467uni1468uni1469uni146Auni146Buni146Cuni146Duni146Euni146Funi1470uni1471uni1472uni1473uni1474uni1475uni1476uni1477uni1478uni1479uni147Auni147Buni147Cuni147Duni147Euni147Funi1480uni1481uni1482uni1483uni1484uni1485uni1486uni1487uni1488uni1489uni148Auni148Buni148Cuni148Duni148Euni148Funi1490uni1491uni1492uni1493uni1494uni1495uni1496uni1497uni1498uni1499uni149Auni149Buni149Cuni149Duni149Euni149Funi14A0uni14A1uni14A2uni14A3uni14A4uni14A5uni14A6uni14A7uni14A8uni14A9uni14AAuni14ABuni14ACuni14ADuni14AEuni14AFuni14B0uni14B1uni14B2uni14B3uni14B4uni14B5uni14B6uni14B7uni14B8uni14B9uni14BAuni14BBuni14BCuni14BDuni14BEuni14BFuni14C0uni14C1uni14C2uni14C3uni14C4uni14C5uni14C6uni14C7uni14C8uni14C9uni14CAuni14CBuni14CCuni14CDuni14CEuni14CFuni14D0uni14D1uni14D2uni14D3uni14D4uni14D5uni14D6uni14D7uni14D8uni14D9uni14DAuni14DBuni14DCuni14DDuni14DEuni14DFuni14E0uni14E1uni14E2uni14E3uni14E4uni14E5uni14E6uni14E7uni14E8uni14E9uni14EAuni14EBuni14ECuni14EDuni14EEuni14EFuni14F0uni14F1uni14F2uni14F3uni14F4uni14F5uni14F6uni14F7uni14F8uni14F9uni14FAuni14FBuni14FCuni14FDuni14FEuni14FFuni1500uni1501uni1502uni1503uni1504uni1505uni1506uni1507uni1508uni1509uni150Auni150Buni150Cuni150Duni150Euni150Funi1510uni1511uni1512uni1513uni1514uni1515uni1516uni1517uni1518uni1519uni151Auni151Buni151Cuni151Duni151Euni151Funi1520uni1521uni1522uni1523uni1524uni1525uni1526uni1527uni1528uni1529uni152Auni152Buni152Cuni152Duni152Euni152Funi1530uni1531uni1532uni1533uni1534uni1535uni1536uni1537uni1538uni1539uni153Auni153Buni153Cuni153Duni153Euni153Funi1540uni1541uni1542uni1543uni1544uni1545uni1546uni1547uni1548uni1549uni154Auni154Buni154Cuni154Duni154Euni154Funi1550uni1551uni1552uni1553uni1554uni1555uni1556uni1557uni1558uni1559uni155Auni155Buni155Cuni155Duni155Euni155Funi1560uni1561uni1562uni1563uni1564uni1565uni1566uni1567uni1568uni1569uni156Auni156Buni156Cuni156Duni156Euni156Funi1570uni1571uni1572uni1573uni1574uni1575uni1576uni1577uni1578uni1579uni157Auni157Buni157Cuni157Duni157Euni157Funi1580uni1581uni1582uni1583uni1584uni1585uni1586uni1587uni1588uni1589uni158Auni158Buni158Cuni158Duni158Euni158Funi1590uni1591uni1592uni1593uni1594uni1595uni1596uni1597uni1598uni1599uni159Auni159Buni159Cuni159Duni159Euni159Funi15A0uni15A1uni15A2uni15A3uni15A4uni15A5uni15A6uni15A7uni15A8uni15A9uni15AAuni15ABuni15ACuni15ADuni15AEuni15AFuni15B0uni15B1uni15B2uni15B3uni15B4uni15B5uni15B6uni15B7uni15B8uni15B9uni15BAuni15BBuni15BCuni15BDuni15BEuni15BFuni15C0uni15C1uni15C2uni15C3uni15C4uni15C5uni15C6uni15C7uni15C8uni15C9uni15CAuni15CBuni15CCuni15CDuni15CEuni15CFuni15D0uni15D1uni15D2uni15D3uni15D4uni15D5uni15D6uni15D7uni15D8uni15D9uni15DAuni15DBuni15DCuni15DDuni15DEuni15DFuni15E0uni15E1uni15E2uni15E3uni15E4uni15E5uni15E6uni15E7uni15E8uni15E9uni15EAuni15EBuni15ECuni15EDuni15EEuni15EFuni15F0uni15F1uni15F2uni15F3uni15F4uni15F5uni15F6uni15F7uni15F8uni15F9uni15FAuni15FBuni15FCuni15FDuni15FEuni15FFuni1600uni1601uni1602uni1603uni1604uni1605uni1606uni1607uni1608uni1609uni160Auni160Buni160Cuni160Duni160Euni160Funi1610uni1611uni1612uni1613uni1614uni1615uni1616uni1617uni1618uni1619uni161Auni161Buni161Cuni161Duni161Euni161Funi1620uni1621uni1622uni1623uni1624uni1625uni1626uni1627uni1628uni1629uni162Auni162Buni162Cuni162Duni162Euni162Funi1630uni1631uni1632uni1633uni1634uni1635uni1636uni1637uni1638uni1639uni163Auni163Buni163Cuni163Duni163Euni163Funi1640uni1641uni1642uni1643uni1644uni1645uni1646uni1647uni1648uni1649uni164Auni164Buni164Cuni164Duni164Euni164Funi1650uni1651uni1652uni1653uni1654uni1655uni1656uni1657uni1658uni1659uni165Auni165Buni165Cuni165Duni165Euni165Funi1660uni1661uni1662uni1663uni1664uni1665uni1666uni1667uni1668uni1669uni166Auni166Buni166Cuni166Duni166Euni166Funi1670uni1671uni1672uni1673uni1674uni1675uni1676uni1677uni1678uni1679uni167auni167buni167cuni167duni167euni167funi18b0uni18b1uni18b2uni18b3uni18b4uni18b5uni18b6uni18b7uni18b8uni18b9uni18bauni18bbuni18bcuni18bduni18beuni18bfuni18c0uni18c1uni18c2uni18c3uni18c4uni18c5uni18c6uni18c7uni18c8uni18c9uni18cauni18cbuni18ccuni18cduni18ceuni18cfuni18d0uni18d1uni18d2uni18d3uni18d4uni18d5uni18d6uni18d7uni18d8uni18d9uni18dauni18dbuni18dcuni18dduni18deuni18dfuni18e0uni18e1uni18e2uni18e3uni18e4uni18e5uni18e6uni18e7uni18e8uni18e9uni18eauni18ebuni18ecuni18eduni18eeuni18efuni18f0uni18f1uni18f2uni18f3uni18f4uni18f5uni1E00uni1E01 Bdotaccent bdotaccentuni1E04uni1E05uni1E06uni1E07uni1E08uni1E09 Ddotaccent ddotaccentuni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1D Fdotaccent fdotaccentuni1E20uni1E21 Hdotaccent hdotaccentuni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Eidieresisacuteuni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3F Mdotaccent mdotaccentuni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55 Pdotaccent pdotaccent Rdotaccent rdotaccentuni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5F Sdotaccent sdotaccent Sdotbelow sdotbelowuni1E64uni1E65uni1E66uni1E67uni1E68uni1E69 Tdotaccent tdotaccent Tdotbelow tdotbelowuni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8D Ydotaccent ydotaccentuni1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1e9auni1E9B Adotbelow adotbelow Ahookabove ahookaboveAcircumflexacuteacircumflexacuteAcircumflexgraveacircumflexgraveAcircumflexhookaboveacircumflexhookaboveAcircumflextildeacircumflextildeAcircumflexdotbelowacircumflexdotbelow Abreveacute abreveacute Abrevegrave abrevegraveAbrevehookaboveabrevehookabove Abrevetilde abrevetildeAbrevedotbelowabrevedotbelow Edotbelow edotbelow Ehookabove ehookaboveEtildeetildeEcircumflexacuteecircumflexacuteEcircumflexgraveecircumflexgraveEcircumflexhookaboveecircumflexhookaboveEcircumflextildeecircumflextildeEcircumflexdotbelowecircumflexdotbelow Ihookabove ihookabove Idotbelow idotbelow Odotbelow odotbelow Ohookabove ohookaboveOcircumflexacuteocircumflexacuteOcircumflexgraveocircumflexgraveOcircumflexhookaboveocircumflexhookaboveOcircumflextildeocircumflextildeOcircumflexdotbelowocircumflexdotbelow Ohornacute ohornacute Ohorngrave ohorngraveOhornhookaboveohornhookabove Ohorntilde ohorntilde Ohorndotbelow ohorndotbelow Udotbelow udotbelow Uhookabove uhookaboveuni1EE8 uhornacute Uhorngrave uhorngraveUhornhookaboveuhornhookabove Uhorntilde uhorntilde Uhorndotbelow uhorndotbelowYgraveygrave Ydotbelow ydotbelow Yhookabove yhookaboveYtildeytildeuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBClenisprosgegrammenipsili perispomenidialytikaperispomeniuni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCC psilivaria psilioxiapsiliperispomeniuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDB dasiavaria dasiaoxiadasiaperispomeniuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECdialytikavaria dialytikaoxiavariauni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCoxiadasiaenquademquadenspaceemspacethreeperemspacefourperemspace sixperemspace figurespacepunctuationspace thinspace hairspacezerowidthspacezerowidthnonjoinerzerojoinuni200Euni200F hyphentwo hyphennobreak figuredash quotedashdblverticalbar underscoredbl quotereversed quotedblrevtrianglebulletonedotenleadertwodotenleader hyphendot lineseparatorparagraphseparatorlrerlepdflrorlouni202Fpertenthousandprimesecond primetripleprimerev primedblrevprimetriplerevcaret referencemark exclamdbl interrobangoverlineuni203Ftie caretinsertasterism hyphenbulletuni2045uni2046uni2047uni2048uni2049uni204Auni204Buni204Cuni204Duni204Euni204Fclosureuni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205Auni205Buni205Cuni205Duni205Euni205Funi2060uni2061uni2062uni2063uni2064 zerosuperioruni2071 foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperior plussuperior minussuperior equalsuperiorparenleftsuperiorparenrightsuperior nsuperior zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferior plusinferioruni208B equalinferiorparenleftinferiorparenrightinferioruni2090uni2091uni2092uni2093uni2094 colonmonetarycruzeiroliramilluni20A6pesetauni20A8won afii57636dongEurouni20ADuni20AEuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20b8leftharpoonaccentrightharpoonaccentuni20D2uni20D3uni20d4uni20d5uni20D6uni20D7uni20d8uni20d9uni20dauni20DBuni20DCuni20DDuni20DEuni20DFuni20E0uni20E1uni20e4uni20E5uni20E6uni20E7uni20E8uni20E9uni20EAuni20EBuni20ECuni20EDuni20EEuni20EFuni20F0 accountofaddresssubjectCbb centigradeCLcareofcadaunaEulerscruple fahrenheitHscript HblackletterHbbplanck planckover2piIscriptIfrakturLscriptlitrelbbarNbbnumero recordright weierstrassPbbQbbRscriptRfrakturRbb prescriptionresponse servicemark telephoneversicleZbbOhmmho Zblackletteriotaturn degreekelvinangstromBscript Cblackletter estimatedescriptEscriptFscriptFturnMscript alephmathbethmath gimelmath dalethmathuni2139uni213auni213buni213cuni213euni213funi2141uni2142uni2143uni2144uni214auni214buni214duni214eonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217F arrowleftarrowup arrowright arrowdown arrowboth arrowupdn arrowupleft arrowuprightarrowdownright arrowdownleft arrowbarright arrowhookleftarrowhookrightcarriagereturnharpoonleftbarbuparrowleftbothalfharpoonupright harpoonupleftharpoonrightbarbuparrowrightbothalfharpoondownrightharpoondownleftharpoonrightleft arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblboth arrowdblbothvarrowsquiggleright universal existentialemptyset Delta.mathgradientelement notelementuni220Asuchthat notcontains ownersmalluni2210uni2213dotplus slashmath backslashmath asteriskmathuni2219 proportionalangledividesnotbarparallel notparallel logicaland logicalor intersectionunionuni222Cuni222Duni222E thereforesimilar reversedtildelazysinv wreathproduct notsimilaruni2242 asymptequalnotasymptequal congruentapproxnotequalnotapproxequaluni2249equivasymptotic approaches equivalence notidenticalmuchless muchgreaternotequivasymptoticnotless notgreater notlessequalnotgreaterequaluni2272uni2273precedesfollows precedesequal followsequal notprecedes notsucceedssubsetsuperset notsubset notsuperset reflexsubsetreflexsuperset notsubseteqlnotsuperseteqluni228C squareimagesquareoriginal subsetsqequalsupersetsqequalintersectionsqunionsq circleplusuni2296circlemultiply circledivide circledot turnstilelefttacklefttackdown perpendicular assertion truestate triangleright trianglelefttriangleftequaltriangrightequalnarylogicaland narylogicalornaryintersection naryuniondotmathuni22C6bowtiepreceedsnotequalfollowsnotequalnotsubsetsqequalnotsupersetsqequaluni2300 ceilingleft ceilingright floorleft floorright integraltp integralbtfrown slurbelow angleleft anglerightuni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23AEuni2400uni2401uni2402uni2403uni2404uni2405uni2406uni2407uni2408uni2409uni240auni240buni240cuni240duni240euni240funi2410uni2411uni2412uni2413uni2414uni2415uni2416uni2417uni2418uni2419uni241auni241buni241cuni241duni241euni241funi2420uni2421blankbblankuni2424uni2460uni2461uni2462uni2463uni2464uni2465uni2466uni2467uni2468uni2469SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254BSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000upblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxsquare boxrounded boxnestedsquarehorizontalfillsquareverticalfillsquareorthogonalcrosshatchfillboxleftdiaghatchboxrtdiaghatchboxcrossdiaghatchsquaresmallsolidwhitesmallsquare filledrect rectanglefilledvertrect vertrectanglefilledparallelogram parallelogram trianglesolidtrianglesmalltrianglesld smalltriangleblackrightpointingtrianglewhiterightpointingtrianglesmalltrianglerightsldsmalltrianglerightblackrightpointingpointer triagrtopentriangledownsld triangleinvsmalltriangleinvsldsmalltriangleinvblackleftpointingtrianglewhiteleftpointingtrianglesmalltriangleleftsldsmalltriangleleftblackleftpointingpointer triaglfopen diamondsolid diamondrhombdiamondrhombnestedfisheyecircle dottedcirclecircleverthatchbullseye circlesolid circleleftsldcirclerightsldcirclebottomsld circletopsld circlenesld circlenwopensemicircleleftsldsemicirclelertsld bulletinversewhitecircleinverseinvsemicircleupinvsemicircledn nwquadarc nequadarc sequadarc swquadarctoparc bottomarc trianglesesld triangleswsld tranglenwsld trianglenesld whitebullet squareleftsldsquarerightsld squarenwsld squaresesldsquarevertbisect triangledottriangleleftsldtrianglerightsld largecircleuni25f0uni25f1uni25f2uni25f3uni25f4uni25f5uni25f6uni25f7uni25f8uni25f9uni25fauni25fbuni25fcuni25fduni25feuni25ffuni262Cspade heartopen diamondopenclubspadesuitwhiteheartdiamond clubsuitwhiteuni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2740uni2A00uni2A01uni2A02uni2A03uni2A04uni2A09uni2D30uni2D31uni2D32uni2D33uni2D34uni2D35uni2D36uni2D37uni2D38uni2D39uni2D3Auni2D3Buni2D3Cuni2D3Duni2D3Euni2D3Funi2D40uni2D41uni2D42uni2D43uni2D44uni2D45uni2D46uni2D47uni2D48uni2D49uni2D4Auni2D4Buni2D4Cuni2D4Duni2D4Euni2D4Funi2D50uni2D51uni2D52uni2D53uni2D54uni2D55uni2D56uni2D57uni2D58uni2D59uni2D5Auni2D5Buni2D5Cuni2D5Duni2D5Euni2D5Funi2D60uni2D61uni2D62uni2D63uni2D64uni2D65uni2D6Funi2E17uniA500uniA501uniA502uniA503uniA504uniA505uniA506uniA507uniA508uniA509uniA50AuniA50BuniA50CuniA50DuniA50EuniA50FuniA510uniA511uniA512uniA513uniA514uniA515uniA516uniA517uniA518uniA519uniA51AuniA51BuniA51CuniA51DuniA51EuniA51FuniA520uniA521uniA522uniA523uniA524uniA525uniA526uniA527uniA528uniA529uniA52AuniA52BuniA52CuniA52DuniA52EuniA52FuniA530uniA531uniA532uniA533uniA534uniA535uniA536uniA537uniA538uniA539uniA53AuniA53BuniA53CuniA53DuniA53EuniA53FuniA540uniA541uniA542uniA543uniA544uniA545uniA546uniA547uniA548uniA549uniA54AuniA54BuniA54CuniA54DuniA54EuniA54FuniA550uniA551uniA552uniA553uniA554uniA555uniA556uniA557uniA558uniA559uniA55AuniA55BuniA55CuniA55DuniA55EuniA55FuniA560uniA561uniA562uniA563uniA564uniA565uniA566uniA567uniA568uniA569uniA56AuniA56BuniA56CuniA56DuniA56EuniA56FuniA570uniA571uniA572uniA573uniA574uniA575uniA576uniA577uniA578uniA579uniA57AuniA57BuniA57CuniA57DuniA57EuniA57FuniA580uniA581uniA582uniA583uniA584uniA585uniA586uniA587uniA588uniA589uniA58AuniA58BuniA58CuniA58DuniA58EuniA58FuniA590uniA591uniA592uniA593uniA594uniA595uniA596uniA597uniA598uniA599uniA59AuniA59BuniA59CuniA59DuniA59EuniA59FuniA5A0uniA5A1uniA5A2uniA5A3uniA5A4uniA5A5uniA5A6uniA5A7uniA5A8uniA5A9uniA5AAuniA5ABuniA5ACuniA5ADuniA5AEuniA5AFuniA5B0uniA5B1uniA5B2uniA5B3uniA5B4uniA5B5uniA5B6uniA5B7uniA5B8uniA5B9uniA5BAuniA5BBuniA5BCuniA5BDuniA5BEuniA5BFuniA5C0uniA5C1uniA5C2uniA5C3uniA5C4uniA5C5uniA5C6uniA5C7uniA5C8uniA5C9uniA5CAuniA5CBuniA5CCuniA5CDuniA5CEuniA5CFuniA5D0uniA5D1uniA5D2uniA5D3uniA5D4uniA5D5uniA5D6uniA5D7uniA5D8uniA5D9uniA5DAuniA5DBuniA5DCuniA5DDuniA5DEuniA5DFuniA5E0uniA5E1uniA5E2uniA5E3uniA5E4uniA5E5uniA5E6uniA5E7uniA5E8uniA5E9uniA5EAuniA5EBuniA5ECuniA5EDuniA5EEuniA5EFuniA5F0uniA5F1uniA5F2uniA5F3uniA5F4uniA5F5uniA5F6uniA5F7uniA5F8uniA5F9uniA5FAuniA5FBuniA5FCuniA5FDuniA5FEuniA5FFuniA600uniA601uniA602uniA603uniA604uniA605uniA606uniA607uniA608uniA609uniA60AuniA60BuniA60CuniA60DuniA60EuniA60FuniA610uniA611uniA612uniA613uniA614uniA615uniA616uniA617uniA618uniA619uniA61AuniA61BuniA61CuniA61DuniA61EuniA61FuniA620uniA621uniA622uniA623uniA624uniA625uniA626uniA627uniA628uniA629uniA62AuniA62B lowcircumflex colonmodifier shortequalsSaltillosaltillocresc_cyrillic dot_cyrillictitlo_cyrillicyi_yi_lig_ukrainian ucas.ringucas.horizlineucas.shortvertucas.righttack ucas.lefttack NameMe.E968 NameMe.E969 NameMe.96A bn_initekaar bn_initaikaarbn_reph bn_kaphala bn_nnaphala bn_taphala bn_thaphala bn_thaphala1 bn_dhaphala bn_naphala bn_below_ba bn_bhaphala bn_raphala bn_laphala bn_half_ka bn_half_kha bn_half_ga bn_half_gha bn_half_nga bn_half_ca bn_half_ca1 bn_half_cha bn_half_ja bn_half_jha bn_half_nya bn_half_tta bn_half_ttha bn_half_dda bn_half_ddha bn_half_nna bn_half_tha bn_half_dha bn_half_da bn_half_na bn_half_pa bn_half_pha bn_half_ba bn_half_bha bn_half_ma bn_half_ya bn_half_ra bn_half_la bn_half_sha bn_half_ssa bn_half_sa bn_half_ha bn_half_rra bn_half_rha bn_half_yyabn_half_asamirabn_half_asamiba bn_khaphala bn_phaphala bn_baphala1 bn_maphala bn_maphala1 bn_yaphalabn_k_rabn_k_ra1bn_kh_rabn_g_rabn_gh_rabn_c_rabn_ch_rabn_j_rabn_tt_ra bn_tth_rabn_dd_ra bn_ddh_rabn_t_rabn_t_ra1bn_th_rabn_d_rabn_dh_rabn_n_rabn_n_ra1bn_p_rabn_ph_rabn_b_rabn_bh_ra bn_bh_ra1bn_m_rabn_y_rabn_sh_rabn_ss_rabn_s_rabn_s_ra1bn_h_ra bn_asamir_ra bn_asamib_ra bn_k_ss_rabn_k_kabn_k_tta bn_k_tt_rabn_k_tabn_k_ta1 bn_k_t_ba bn_k_t_ba1 bn_k_t_ra bn_k_t_ra1 bn_k_t_ra2bn_k_nabn_k_mabn_k_labn_k_ssa bn_k_ss_nna bn_k_ss_mabn_k_sabn_g_gabn_g_dabn_g_dha bn_g_dh_babn_g_labn_g_nabn_g_mabn_gh_nabn_ng_ka bn_ng_k_ra bn_ng_k_ssa bn_ng_k_ss_ra bn_ng_khabn_ng_ga bn_ng_gha bn_ng_gh_rabn_ng_ma bn_ng_ma1bn_c_cabn_c_cha bn_c_ch_ba bn_c_ch_rabn_c_nyabn_c_nabn_j_ja bn_j_j_babn_j_jhabn_j_nyabn_ny_ca bn_ny_chabn_ny_ja bn_ny_jha bn_tt_tta bn_tt_tt_rabn_tt_mabn_dd_ga bn_dd_ddabn_dd_ma bn_nn_tta bn_nn_tt_ra bn_nn_ttha bn_nn_dda bn_nn_dda1 bn_nn_dd_ra bn_nn_dd_ra1 bn_nn_ddha bn_nn_nnabn_nn_mabn_t_ta bn_t_t_babn_t_thabn_t_nabn_t_mabn_t_ma1bn_t_labn_d_gabn_d_ghabn_d_da bn_d_d_ba bn_d_d_rabn_d_dha bn_d_dh_babn_d_nabn_d_bha bn_d_bh_ra bn_d_bh_ra1bn_d_mabn_dh_nabn_dh_mabn_n_tta bn_n_tt_ra bn_n_tthabn_n_dda bn_n_dd_ra bn_n_ddhabn_n_ta bn_n_t_ba bn_n_t_ra bn_n_t_ra1bn_n_thabn_n_da bn_n_d_ba bn_n_d_rabn_n_dha bn_n_dh_ba bn_n_dh_rabn_n_nabn_n_mabn_n_ma1bn_n_sabn_p_ttabn_p_tabn_p_pabn_p_mabn_p_nabn_p_labn_p_sa bn_ph_ttabn_ph_labn_b_jabn_b_da bn_b_d_rabn_b_dhabn_b_nabn_b_bhabn_b_labn_bh_labn_m_tabn_m_thabn_m_dabn_m_nabn_m_na1bn_m_pa bn_m_p_ra bn_m_p_labn_m_pha bn_m_ph_rabn_m_bha bn_m_bh_ra bn_m_bh_ra1bn_m_mabn_m_ma1bn_m_labn_m_la1bn_m_sa bn_m_s_rabn_l_kabn_l_gabn_l_tta bn_l_tt_rabn_l_dda bn_l_dd_rabn_l_tabn_l_dabn_l_dhabn_l_pabn_l_pha bn_l_ph_rabn_l_mabn_l_labn_sh_ca bn_sh_chabn_sh_tabn_sh_nabn_sh_mabn_sh_labn_ss_ka bn_ss_k_ra bn_ss_k_ra1 bn_ss_tta bn_ss_tta1 bn_ss_tt_ra bn_ss_tt_ra1 bn_ss_ttha bn_ss_nnabn_ss_pa bn_ss_p_ra bn_ss_pha bn_ss_ph_rabn_ss_ma bn_ss_ma1bn_s_ka bn_s_k_ra bn_s_k_ra1bn_s_khabn_s_tta bn_s_tta1 bn_s_tt_ra bn_s_tt_ra1bn_s_ta bn_s_t_ba bn_s_t_ra bn_s_t_ra1bn_s_thabn_s_nabn_s_na1bn_s_pa bn_s_p_ra bn_s_p_labn_s_pha bn_s_ph_rabn_s_mabn_s_ma1bn_s_labn_s_la1bn_h_nnabn_h_nabn_h_mabn_h_labn_h_la1bn_rr_gabn_k_babn_g_babn_gh_babn_c_babn_ch_babn_j_babn_tt_babn_dd_babn_nn_babn_t_babn_th_babn_d_babn_dh_ba bn_dh_ba1bn_n_babn_n_ba1bn_p_babn_b_babn_bh_babn_m_ba bn_m_b_rabn_m_ba1 bn_m_b_ra1bn_l_babn_sh_babn_s_babn_s_ba1bn_h_babn_h_ba1 bn_kh_r_ukaarbn_kh_r_uukaar bn_g_ukaar bn_g_r_ukaar bn_g_r_uukaar bn_g_l_ukaar bn_g_l_uukaar bn_j_r_ukaar bn_j_r_uukaar bn_t_r_ukaar bn_t_r_uukaar bn_th_r_ukaarbn_th_r_uukaar bn_d_ukaar bn_d_r_ukaar bn_d_r_uukaar bn_dh_r_ukaarbn_dh_r_uukaar bn_n_ukaar bn_n_uukaar bn_n_rikaar bn_n_t_ukaarbn_n_d_r_ukaarbn_n_d_r_uukaar bn_p_r_ukaar bn_p_r_uukaar bn_p_l_ukaar bn_p_l_uukaar bn_b_r_ukaar bn_b_r_uukaar bn_b_l_ukaar bn_b_l_uukaar bn_bh_r_ukaarbn_bh_r_uukaar bn_m_r_ukaar bn_m_r_uukaarbn_m_p_r_ukaarbn_m_p_r_uukaar bn_r_ukaar bn_r_uukaar bn_l_g_ukaar bn_sh_ukaar bn_sh_r_ukaarbn_sh_r_uukaar bn_sh_l_ukaarbn_sh_l_uukaarbn_ss_p_r_ukaarbn_ss_p_r_uukaar bn_s_ukaar bn_s_uukaar bn_s_rikaar bn_s_t_ukaar bn_s_r_ukaar bn_s_r_uukaarbn_s_p_r_ukaarbn_s_p_r_uukaarbn_s_p_l_ukaarbn_s_p_l_uukaar bn_s_l_ukaar bn_s_l_uukaar bn_h_ukaar bn_h_rikaarbn_asamir_ukaarbn_asamir_uukaarbn_asamib_ukaarbn_asamib_uukaarbn_asamib_r_ukaarbn_asamib_r_uukaar bn_k_hasanta bn_kh_hasanta bn_g_hasanta bn_gh_hasanta bn_ng_hasanta bn_c_hasanta bn_ch_hasanta bn_j_hasanta bn_jh_hasanta bn_ny_hasanta bn_tt_hasantabn_tth_hasanta bn_dd_hasantabn_ddh_hasanta bn_nn_hasanta bn_t_hasanta bn_th_hasanta bn_d_hasanta bn_dh_hasanta bn_n_hasanta bn_p_hasanta bn_ph_hasanta bn_b_hasanta bn_bh_hasanta bn_m_hasanta bn_y_hasanta bn_r_hasanta bn_l_hasanta bn_sh_hasanta bn_ss_hasanta bn_s_hasanta bn_h_hasanta bn_rr_hasanta bn_rh_hasanta bn_yy_hasantabn_asamir_hasantabn_asamib_hasanta bn_post_k_raglyph569glyph570glyph571glyph572glyph57487 bn_baphala bn_below_ba2glyph578glyph579glyph580glyph581glyph582glyph583 bn_sh_ra.001bn_yaphala.002bn_d_yabn_n_ya bn_la.001bn_sh_yabn_ss_yabn_s_yaglyph593bn_h_yaglyph595 bn_ss_tta.002glyph597glyph598 bn_uukaar.1glyph600Adeva002Adeva003 deva_tta_nuktdeva_ttha_nukta.nuktglyph240glyph241deva_ii_anusvara.abvsdeva_e_candra_bindu.abvsdeva_o_cand_bindu.abvsdeva_au_ra_virama_candra_bindudeva_ai_ra_virama_candra_bindudeva_ra_virama_candra_binduhadeva_viramadeva.halnchadeva_virama.nuktchadeva_viramadeva.halnhadeva_rrvoc_ic_deva.blwskadeva_viramadeva_ssadeva.akhnjadeva_viramadeva_nyadeva.akhnuni924_94D.half_924.presuni924_930_94D.blwf.vatuuni936_94D.half_91A.presuni936_930_94D.blwf.vatuuni936_94D.half_935.presuni95B_930_94D.blwf.vatuuni92B_930_94D.blwf.vatuuni95E_930_94D.blwf.vatuuni92A_930_94D.blwf.vatuuni938_930_94D.blwf.vatudeva_ra_u.blwsdeva_ra_uu.blwsuni915_94D.half_928.preskhadeva_094D.half_0928.presghadeva_094D.half_0928.presglyph269deva_ka_virama.halfdeva_kha_virama.halfdeva_ga_virama.halfdeva_gha_virama.halfdeva_ca_virama.halfglyph275deva_ja_virama.halfdeva_jha_virama.halfdeva_nya_virama.halftadeva_094D.half_0928.presthadeva_094D.half_0928.presdadeva_094D.half_0928.presdeva_dha_094D.half_0928.presdeva_nna_virama.halfdeva_ta_virama.halfdeva_tha_virama.halfuni926_94D.hlf2_926_94D.presdeva_dha_virama.halfdeva_na_virama.halfglyph289deva_pa_virama.halfdeva_pha_virama.halfdeva_ba_virama.halfdeva_bha_virama.halfdeva_ma_virama.halfdeva_ya_virama.halfpadeva_094D.half_0928.presglyph297deva_la_virama.halfdeva_lla_virama.halfdeva_llla_virama.halfdeva_va_virama.halfdeva_sha_virama.halfdeva_ssa_virama.halfdeva_sa_virama.halfdeva_ha_virama.halfglyph306badeva_094D.half_0928.presglyph308madeva_094D.half_0928.presvadeva_094D.half_0928.presshadeva_094D.half_0928.preskadeva_094D.half_0915.presngadeva_094D.half_0915.presngadeva_094D.half_0916.presngadeva_094D.half_0917.presngadeva_094D.half_0918.presnyadeva_094D.half_091C.presdadeva_094D.half_0918.presdadeva_094D.half_0926.presdadeva_094D.half_0927.presdadeva_094D.half_092C.presdadeva_094D.half_092D.presdadeva_094D.half_092E.presdadeva_094D.half_092F.presdadeva_094D.half_0935.presttadeva_094D.half_091F.presttadeva_094D.half_0920.prestthadeva_094D.half_0920.presglyph329glyph330glyph331hadeva_094D.half_092E.preshadeva_094D.half_092F.presladeva_094D.half_0939.presglyph335u9_38_4D.hlf_24_4D_30prespresglyph337ra_viramadeva_afii301.halfu91A_94D.hlf2_91A_94D.halfsadeva_0928_094D.half.presglyph341glyph342glyph343glyph344glyph345glyph346glyph347glyph348glyph349uni915_94D_937.akhn_94D.halfu91C_94D_91E.akhn_94D.halfglyph352u924_94D.half_930_94D.blwf.vatuglyph354glyph355glyph356glyph357glyph358glyph359uni939_930_94D.blwf.blwsdeva_ra_virama.rphfdeva_ra_virama.blwfdeva_aa_candrabindu.abvsdeva_aa_anusvara.abvsglyph365glyph366glyph367glyph368glyph369deva_e_anusvara.abvsglyph371glyph372deva_ai_anusvara.abvsglyph374glyph375glyph376glyph377glyph378u9_38_4Dhalf1F_30_4Dblwfvtu2glyph380nadeva_094D.half_0928.presnga_viramadeva.halftta_viramadeva.halfttha_viramadeva.halfdda_viramadeva.halfddha_viramadeva.halfda_viramadeva.halfuni915_930_94D.blwf.vatuuni916_930_94D.blwf.presuni917_930_94D.blwf.presuni918_930_94D.blwf.vatuuni919_930_94D.blwf.vatuuni91A_930_94D.blwf.vatuuni91B_930_94D.blwf.vatuuni91C_930_94D.blwf.vatuuni91D_930_94D.blwf.vatuuni91E_930_94D.blwf.vatuuni91F_930_94D.blwf.vatuuni920_930_94D.blwf.vatuuni921_930_94D.blwf.vatuglyph402uni923_930_94D.blwf.vatutadeva_viramadeva_radeva.presuni925_930_94D.blwf.vatuuni926_930_94D.blwf.vatuuni927_930_94D.blwf.vatuuni928_930_94D.blwf.vatuuni92C_930_94D.blwf.vatuuni92D_930_94D.blwf.vatuuni92E_930_94D.blwf.vatuuni92F_930_94D.blwf.vatuuni930_930_94D.blwf.vatuuni932_930_94D.blwf.vatuuni936_94D.hlf2_932_94D.presuni937_94D.half_91F.presuni937_94D.half_920.presglyph418glyph419glyph420uni936_94D.hlf2_928_94D.presu938_4D.hlff24_4D.30_4Dbfvtuprsu926_94D.half_92E_94D.half.presuni924_94D.hlf2_928_94D.presuni939_94D.half_923.presuni939_94D.half_932.presuni939_94D.half_935.presu92A_94D.half_924_94D.half.presuni939_94D.half_928.presu939_94D.half_92E_94D.half.presu92A_94D.half_930_94D.blwf.vatungadeva_nuktadeva.nukt hadeva_nukt dadeva_nuktttadeva_nukt.halnuni920_93C.nukt_94D.halndddhadeva_viramadeva.halnrhadeva_viramadeva.halndadeva_nukt_viramauni939_93C.nukt_94D.halnuni919_93C.nukt_94D.halnu937_94D.half_91F.pres_94D.halnu937_94D.half_920.pres_94D.halnu939_94D.half_923.pres_94D.halnu939_94D.half_928.pres_94D.halnu939_94D.half_932.pres_94D.halnu939_94D.half_935.pres_94D.halnphadev_nuktadev_vir_dev.nuktjadev_nuktadev_vir_dev.nuktkagujarati_viramagujarati.halfkhagujarati_viramagujarati.halfgagujarati_viramagujarati.halfghagujarati_viramagujarati.halfcagujarati_viramagujarati.halfjagujarati_viramagujarati.halfjhagujarati_viramagujarati.halfnyagujarati_viramagujarati.halfnnagujarati_viramagujarati.halftagujarati_viramagujarati.halfthagujarati_viramagujarati.halfdhagujarati_viramagujarati.halfnagujarati_viramagujarati.halfpagujarati_viramagujarati.halfphagujarati_viramagujarati.halfbagujarati_viramagujarati.halfbhagujarati_viramagujarati.halfmagujarati_viramagujarati.halfyagujarati_viramagujarati.halflagujarati_viramagujarati.halfllagujarati_viramagujarati.halfvagujarati_viramagujarati.halfshagujarati_viramagujarati.halfssagujarati_viramagujarati.halfsagujarati_viramagujarati.halfhagujarati_viramagujarati.halfuniA95_ACD_AB7.akhn_ACD.halfuAA4_ACD.half_AA4_ACD.half.presuniAA4_ACD.half_AB0_ACD.vatuuAA8_ACD.half_AA8.pres_ACD.presuAB6_ACD.half_AB0_ACD.blwf.vatuuA96_ACD.half_AB0_ACD.blwf.vatuuA97_ACD.half_AB0_ACD.blwf.vatuuA98_ACD.half_AB0_ACD.blwf.vatuuA9A_ACD.half_AB0_ACD.blwf.vatuuA9C_ACD.half_AB0_ACD.blwf.vatuuAA5_ACD.half_AB0_ACD.blwf.vatuuAA7_ACD.half_AB0_ACD.blwf.vatuuAA8_ACD.half_AB0_ACD.blwf.vatuuAAA_ACD.half_AB0_ACD.blwf.vatuuAAC_ACD.half_AB0_ACD.blwf.vatuuAAD_ACD.half_AB0_ACD.blwf.vatuuAAE_ACD.half_AB0_ACD.blwf.vatuuAB8_ACD.half_AB0_ACD.blwf.vatuigujarati_anusvaragujarati.abvsguj_ii_anusvara.abvsugujarati_anusvaragujarati.abvsguj_uu_anusvara.abvsuniA95_ACD.half_A95.presuniA95_AB0_ACD.blwf.vatuguj_ja_aa.pstsguj_ja_ii.pstsuniA9C_AB0_ACD.blwf.vatuuniA9D_AB0_ACD.blwf.vatuguj_tta_virama_tta.presguj_tta_virama_ttha.presguj_ttha_virama_ttha.presguj_dda_virama_dda.presguj_dda_virama_ddha.presuniAA6_AB0_ACD.blwf.vatuguj_da_virama_ma.presguj_da_virama_da.presguj_da_virama_dha.presguj_da_virama_va.presuniAAB_AB0_ACD.blwf.vatu guj_ra_u.blwsguj_ra_uu.blwsnounicode_3_1_cduAB5_ACD.half_AB0_ACD.blwf.vatuuniAB6_ACD.half_AB5_ACD.presuniAB9_AB0_ACD.blwf.vatuuniAB9_ACD.half_AAE.presuniAB9_ACD.half_AAF.presuAB6_ACD.half_AA8.pres_ACD.presuniAB6_ACD.half_A9A_ACD.presguj_ddha_virama_ddha.presguj_ka_virama_ssa.akhnuniAA4_ACD.half_AA4.presuniAA4_AB0_ACD.blwf.vatuuniAA8_ACD.half_AA8.presuniAB6_AB0_ACD.blwf.vatuuniA96_AB0_ACD.blwf.vatuuniA97_AB0_ACD.blwf.vatuuniA98_AB0_ACD.blwf.vatuuniA9A_AB0_ACD.blwf.vatuuniAA5_AB0_ACD.blwf.vatuuniAA7_AB0_ACD.blwf.vatuuniAA8_AB0_ACD.blwf.vatuuniAAA_AB0_ACD.blwf.vatuuniAAC_AB0_ACD.blwf.vatuuniAAD_AB0_ACD.blwf.vatuuniAAE_AB0_ACD.blwf.vatuuniAB8_AB0_ACD.blwf.vatuuniAB5_AB0_ACD.blwf.vatuuniAB6_ACD.half_AB5.presuniAB6_ACD.half_AA8.presuniAB6_ACD.half_A9A.presguj_ra_virama.rphfguj_ra_virama.blwfuniAB7_ACD.half_AA0.presuniAB7_ACD.half_A9F.presuA_B7_CD.half_9F_B0_CD.blwfvatuuA_B7_CD.half_A0_B0_CDblwfvatuuniA9F_AB0_ACD.blwf.vatuguj_ja_virama_nya.akhnuniAA1_AB0_ACD.blwf.vatuuniAA0_AB0_ACD.blwf.vatuuniAA2_AB0_ACD.blwf.vatuglyph437glyph438glyph440glyph441guj_e_anusvara.abvsglyph443glyph444glyph445glyph446glyph447glyph448glyph449glyph450glyph451glyph452glyph453kagujarati_nuktagujarati.nuktkhagujarati_nuktagujarati.nuktgagujarati_nuktagujarati.nuktghagujarati_nuktagujarati.nuktngagujarati_nuktagujarati.nuktcagujarati_nuktagujarati.nuktchagujarati_nuktagujarati.nuktjagujarati_nuktagujarati.nuktjhagujarati_nuktagujarati.nuktnyagujarati_nuktagujarati.nuktttagujarati_nuktagujarati.nukttthagujarati_nuktagujarati.nuktddagujarati_nuktagujarati.nuktddhagujarati_nuktagujarati.nuktnnagujarati_nuktagujarati.nukttagujarati_nuktagujarati.nuktthagujarati_nuktagujarati.nuktdagujarati_nuktagujarati.nuktdhagujarati_nuktagujarati.nuktnagujarati_nuktagujarati.nuktpagujarati_nuktagujarati.nuktphagujarati_nuktagujarati.nuktbagujarati_nuktagujarati.nuktbhagujarati_nuktagujarati.nuktmagujarati_nuktagujarati.nuktyagujarati_nuktagujarati.nuktragujarati_nuktagujarati.nuktlagujarati_nuktagujarati.nuktllagujarati_nuktagujarati.nuktvagujarati_nuktagujarati.nuktshagujarati_nuktagujarati.nuktssagujarati_nuktagujarati.nuktsagujarati_nuktagujarati.nukthagujarati_nuktagujarati.nuktuniAA3_ACD.half_AB0_ACD.vatuguj_nna_ra_virama.vatugur_ra_halant.blwfgur_va_halant.blwfgur_ha_halant.blwfgur_ya_halant.pstfglyph152glyph153glyph154glyph155glyph156glyph157uniA30_A4D.blwf_A41.blwsuniA39_A4D.blwf_A41.blwsnounicode_3_1_3glyph161ragurmukhi_A4D.blwf_A42.blwsuniA39_A4D.blwf_A42.blwsnounicode_3_1_2fnounicode_3_1_30gur_na_uumatra_tippi.abvsgur_aamatra_bindi.abvsgur_u_addak.pstsgur_uu_addak.pstsgur_oo_addak.psts gur_ka.nukt gur_gha.nukt gur_nga.nukt gur_ca.nukt gur_cha.nukt gur_jha.nukt gur_nya.nukt gur_tta.nukt gur_ttha.nukt gur_ddha.nukt gur_nna.nukt gur_ta.nukt gur_tha.nukt gur_da.nukt gur_dha.nukt gur_na.nukt gur_pa.nukt gur_ba.nukt gur_bha.nukt gur_ma.nukt gur_ya.nukt gur_ra.nukt gur_va.nuktglyph194 gur_ha.nukt gur_a.nukt gur_aa.nukt gur_i.nukt gur_ii.nukt gur_u.nukt gur_uu.nukt gur_ee.nukt gur_ai.nukt gur_oo.nukt gur_au.nuktgur_aa_bindi.abvsglyph207uniA35_A4D.blwf_A41.blwsuniA35_A4D.blwf_A42.blwsuniA30_A4D.blwf_A4D.blwsuniA39_A4D.blwf_A4D.blwsuniA35_A4D.blwf_A4D.blwsEngsamiffffiffllongs_t m_n_armenian m_e_armenian m_i_armenian v_n_armenian m_x_armenianyodhiriqhebrewuniFB1EyodyodpatahhebrewayinaltonehebrewuniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29shinshindothebrewshinsindothebrewshindageshshindothebrewshindageshsindothebrewalefpatahhebrewalefqamatshebrewalefdageshhebrewbetdageshhebrewgimeldageshhebrewdaletdageshhebrewhedageshhebrewvavdageshhebrewzayindageshhebrewtetdageshhebrewyoddageshhebrewfinalkafdageshhebrewkafdageshhebrewlameddageshhebrewmemdageshhebrewnundageshhebrewsamekhdageshhebrewpefinaldageshhebrewpedageshhebrewtsadidageshhebrewqofdageshhebrewreshdageshhebrewshindageshhebrewtavdageshhebrewvavholamhebrew betrafehebrew kafrafehebrew perafehebrewaleflamedhebrewuniFFFDuni10380uni10381uni10382uni10383uni10384uni10385uni10386uni10387uni10388uni10389uni1038auni1038buni1038cuni1038duni1038euni1038funi10390uni10391uni10392uni10393uni10394uni10395uni10396uni10397uni10398uni10399uni1039auni1039buni1039cuni1039duni1039funi103a0uni103a1uni103a2uni103a3uni103a4uni103a5uni103a6uni103a7uni103a8uni103a9uni103aauni103abuni103acuni103aduni103aeuni103afuni103b0uni103b1uni103b2uni103b3uni103b4uni103b5uni103b6uni103b7uni103b8uni103b9uni103bauni103bbuni103bcuni103bduni103beuni103bfuni103c0uni103c1uni103c2uni103c3uni103c8uni103c9uni103cauni103cbuni103ccuni103cduni103ceuni103cfuni103d0uni103d1uni103d2uni103d3uni103d4uni103d5uni10480uni10481uni10482uni10483uni10484uni10485uni10486uni10487uni10488uni10489uni1048auni1048buni1048cuni1048duni1048euni1048funi10490uni10491uni10492uni10493uni10494uni10495uni10496uni10497uni10498uni10499uni1049auni1049buni1049cuni1049duni1049euni1049funi104a0uni104a1uni104a2uni104a3uni104a4uni104a5uni104a6uni104a7uni10900uni10901uni10902uni10903uni10904uni10905uni10906uni10907uni10908uni10909uni1090auni1090buni1090cuni1090duni1090euni1090funi10910uni10911uni10912uni10913uni10914uni10915uni10916uni10917uni10918uni10919uni1091auni1091buni1091f ÿÿržƒ„„…‹ŒŒ‘•––—œž£¤¤¥«¬¬­¯°°±µ¶¶·¼½½¾ÃÄÅÆÕÖרíîïðóôõö-./0abcdpqrs^__`Ÿ ¹ºº»ÀÁÂÃîïïðÑÒØÙ¥¦¦§¨©´µ#$$%%&&''(()fghiijjknopqqrvw€‚ƒ‘’ÒÓÓÔÕÖÖ×óôõö %&,--.011223<=>?BCDEz{‚„……† ™ š ¡ ¢ £ ¤ « ¬ ³ ´ » ¼ Å Æ Í Î t u “ ” Ú Û Ý Þ Þ ß ß à à á ã äGHHIIJOPQRSTXYYZ[\\]effg†‡‰Š‹ŒŒ—˜˜™œž¡¢¢£§¨¨©©ªª«°±±²²³³´´µ¶·ÀÁÁÂÌÍÍÎÎÏÏÐÓÔÔÕçèèééêêëòóóôûüüýþÿÿ    $%%&,--.45566778899:QRRSSTTUUVVW]^^_`aabcddeeffgijjklmmnsttuuvvwz{{|†‡‡ˆ‰ŠŠ‹‹ŒŒ‘“”–——˜˜™™š«¬®¯ÉÊÌÍ    #$BCCDHIIJ^__`ijjk„……††‡‡ˆŠ‹“”š›œ¤¥¥¦¦§§¨ØÙÙÚ9::;bcfgijrsš› ¡¢£¤¥¦§¨©ÄÅÅÆÑÒÒÓרØÙäååææç¨"  ÿþF­ß 8´DFLTzarmn†beng”bng2¶cyrlØdev2ädevageor$gjr2.grekLgujrVgur2tguruŠhebr latn¾phnxüsyrctml2ugarxpeo$ÿÿÿÿÿÿ  %(*.1ÿÿ  %(*.1ÿÿÿÿ  "&-/2ÿÿ  "&-/2ÿÿÿÿ  #'+03ÿÿÿÿ  #'+03ÿÿ $),ÿÿ $), JII ÿÿÿÿ"ISM .LSM .NLD 6NSM .SKS .ÿÿÿÿ!ÿÿ ÿÿÿÿÿÿÿÿÿÿ4aalt:abvs@abvsFabvsLakhnRakhnXakhn^blwfdblwfjblwfpblwfvblws|blws‚blwsˆblwsŽccmp”ccmpšccmp dlig¨frac®half´halfºhalfÀhalnÆhalnÌhligÒhligØinitÞligaäligaêligaðligaöligaüloclnuktnuktnuktprespres pres(pstf0pstf6psts\Ì"–"ò# #8'v'¤'þ)),)D)¦*ˆ,X,„ ô-õM,L6",b»q»c»r»28RXÎ ,>Pbt†˜ª¼ Ħ„¢ Ö¦Œ¢  ¦–¢ .¦¢ Ŧ¤¢ צ¬¢ 聆¢ ¦¶¢ /¦½¢ $(,28DHLRX&8Z|žÀâ  ž©  £ œ  š¡  ¸© º£ ¶  ´¡  Ê© Ì£ È  Æ¡  Ÿ© ¡£   ›¡  ¹© »£ ·  µ¡  Ë© Í£ É  Ç¡  ¨© ª£ ¦  ¤¡  ©© «£ §  ¥¡„Œ–¤¬¶ÄÅÌ I¾¾ ÑÒž"JT^hr|†š¤®¸ÂÌÖàêôþ&0:DNXblv€Š”svtvuvvvwvxvyvzv{v|v}v~vv€vv‚vƒv„v…v†v‡vˆv‰vŠv‹vŒvvŽvvv‘v’v“v”vTuÎ$.8BL`jt~ˆ’¦°ºÄw^x^y^å^ö^oz^$^%^{^|^ç^õ^o}^~^æ^/^W^9:;=@CDEFJOS]0Væ(V`jt~ˆ’œ¦°ºÄÎØâìö (2<FPZdnx‚Œ– ª´¾ÈÒÜÇ"È"É"Ê"Ë"Ì"Í"Î"Ï"Ð"®"."/"¯"°"±"²"0"³"´"µ"¶"·"¸"¹"º"»"¼"½"¾"2"¿"À"Á"Â"Ã""Ä""Æ"÷ % !&" C…s_…]T[" 2o[3oB9@ºÕŨ6 , ãŒáŠà„ߕ╓¦¡„X…nŸoT TÕTÕÂéöBHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðÖ¹Öº ¹ º½´¾´¿´À´Á´Â´Ã´Å´Æ´Ç´È´É´Ë´Í´Î´Ð´Ñ´Ó´Ô´Õ´Ö´×´Â²¾·È·Ñ·ñô÷ ä­æ°ÆÚɽæ°Ú6 "(ÝIOÜILÛOÚLÙIIÞWA*  —,˜,™,!Y…n oTŠ &0:DNXblv€UÕVÕWÕXÕZÕ[Õ Õ]Õ^Õ_Õ^Õ ¨¶·¸º»¾¿ÂÃéJ<FPZdnx‚Œ– ª´¾ÈÒÜæðú",6@÷…ø…ù…ú…û…ü…ý…þ…ÿ………………………… … … … … ……………TWYY[]bdfm ouCC +\fpz„Ž˜¢¬¶ÀÊÔÞèòü$.8BLVblv€Š”ž¨²¼ÆÐÚäîøDoEoFoGo´oHoJoKoLoµo¶o·o¸oQoRoSo¹oUoVoXoYoZo[o\o]oˆo æˆo`oaobocodoeofogo”o•o–o˜o™ošo‰Hho9>@LN]24#68&HH)³³*Â%PZdnx‚Œ– ª´¾ÈÒÜæðú",6@JT^hr|†š¤®¸`ÕaÕbÕcÕdÕeÕgÕhÕiÕjÕkÕlÕmÕnÕoÕÖÕpÕrÕqÕsÕtÕuÕvÕwÕxÕyÕzÕ{Õ|Õ}Õ~ÕÕ€ÕÕ‚ÕƒÕ„Õ¨ÇØÚ éê#š,*  …Õ†ÕŠÕ©½Á¦&Pf Û  Û " á  á Ü  Ü Ý  Ý " â  â ß  ß ã  ã*  TY=YYquü)Xblv€Š”ž¨²¼ÆÒÜæðú",6@JT^hr~Š”ž¨²¼ÆÐÚäú(YHYIYJYKY+Y,Y^YaY`YbY–n…EYLY2YMYNYOY7YPYQYRYGYSYYYYY•n…n…YYYYY Y!Y;YY]_Y\^Y"Y TWYY[\^lrrttøûÿ" %Ñ S’!HR\fpz„Ž˜¢¬¶ÀÊÔÞèòü$.8BLV`jt~ˆº ½ ¾ ¿ À Á Â Ã Ä Å Æ È 5 Ê Ë Ì Í < : Î Ï Ð Ò Ó 7 = 9 ; — ä ±Ä×ÒØÒ!9<=>?@ABCDEGHIJKLNOPQRTVZ\z}RXfÕÖV>HR\fpz„Ž˜¢¬¶ÀÊÔÞèòü$.8BL‹^^Ž^^^‘^’^“^”^•^–^—^™^š^›^œ^ž^Ÿ^ ^¡^£^¤^¥^¦^§^©^«^¬^¨«­¯²µ·Á ÄÇê꺺þ 4@VbŒ– ªØêô.…_-…^/…_1…a0…`B…a "6…q5…f4…e3…l'TFg "(AY…<q…UqWYVg [^Z_…@… ^_`ae÷ FV $.@ZŒž¨òü» ¼  n9@LF€E; &,âLàYßVÞGƒS‚R }D|C~D  &,28>DÜ\{YzSyRxQwPvKuJt<Dc ?m>l :;DTgµ¶¹@:DNZdv€Š”®¸ÒÜæø  J\n¨ÊÜæ» ¼ ÉoTŠV n9@LALBLs@ÝVML4HNLF€E;PL³L áR^LiLkL„]lL $ÚVÔ`mL8Y6> ÖDÕC Û—†É"(.4ã\âLàYßVÞGƒS‚R r<q;p:o9 }D|C~D $*06<BHNTÜ\{YzSyRxQwPvKuJt<T¹OL:;H\DEGLRSTUVXZ\`cdefg´µ¶¹š:d®àê,NhФ¾TÖ"T^ØJ|ÖXz„ $ôÃòÀñ»ð¸î·  &,28>D½Æ¹Ã¸À·»´—°·¯“®²­¨ &,ÄÀûÂÃÀº¿¹¾ªÅ»$*06<ÎÀ̫˪ʩɬȺNjƨ ջӑѮЭٱذ֯ ݰܯۮڭàÀߓ޲ãÀâ´áª$*06<íÀì¶ëµé•ç´æ³å“ä² À»$*06<Àþ¡ý¿úºùš÷¹ö«õª"(.4:@FLRX^djpv|ÆÀ»›ºš¹ ¸ — ·µ•´³“²"(.4ÆÃ»À¼·²  ò &,'Ã&¿$º#š"¹!¯(à &,28>DJPV\bhnt;§:Æ8Ã6À4¡3¿2Ÿ1½0/ž.¼,»+¹*¸)·$*06<BHNTZ`flIÃHÀGŸF½E¼DºC¹B·A•@´?“>²=ª<¨ &,OÃNÀM»L·K®J­ $*06<BHNT]À\Ÿ[½ZžY¼X¶W³U“S²Q‹P¨"(.4:@FLRX^djpv|uÃsÀrŸq½požn¼l»k¸i—g·e“c²b©`‹_¨ zÃyÀx»w¶|ª¼ÕÀ»Õ¶Ö`bcdehjkmoqrstuvwx{|}~€ºZ &@Õ,¥'¡&×,Ô'Ó&Ö,¦'¢&—˜™ 9|8{n.  ?d>c ž 1fT]Î:z„– ª´¾ÈÒÜæø  *4FPbl†˜ª¼Îàò(:L^p‚”¦°ÂÌÖàêô"4FXbt†˜ª¼}  œÍ~  €  ‚ ƒ „ … †  §Íˆ ‰ ‹  Ž    ÁÎÀÍ”  ÃÍ• – ×ÏÖ͘  ÙÎØÍ ÛÎÚÍ ›ÎšÍ žÎÍ ¢Î¡Í ¤Î£Í ¦Î¥Í ©Î¨Í «ÎªÍ ³Î²Í ·Î¶Í »ÎºÍ ½Î¼Í ÅÎÄÍ ÏÎÎÍ ÝÎÜͲ   ÎŸÍÒ × ï ø û  ¯Í    ±Î°Í µÎ´Í ¹Î¸Í ¿Î¾ÍÂÍ ÇÎÆÍ ÉÎÈÍ ÍÍh  ÑÎÐÍ ÓÎÒÍ ÕÎÔÍ:¨ª«­®¯²´¶·¹º»¼¾¿ÀÂÃÄÆÇéꎒ—™š›ž ¡£¥§«°ÂÑÖî÷ú '/=OZgopu, "Ñõ©'=ªõø#T$.8#D$D%D&DiXDhXgDHIJK€ô "FPrœ¾àê(& ¤Ÿ&£Ÿ¢&¡%¦Ÿ ª©Ÿ¨&)% $­¬Ÿ«&,-P ²®Ÿ*%‘& ¯Ÿ+-&Q-%°& ,`bijmnŸ¯*  «>¬>­>ûüÿ *z)x[Z*6BN æŠ æŠ æŠ æŠ æŠ æŠ¹»ÄÅÆÇÆ&0:DNXblv€Š”ž¨²¼0o.oêoëoèoéoÇ ïoðoñoóoôoòoîoíoìo?]{|$%ÕÖÞßàâåæçÂ%PZdnx‚Œ– ª´¾ÈÒÜæðú",6@JT^hr|†š¤®¸ÞÕßÕàÕáÕâÕãÕäÕåÕæÕçÕèÕéÕêÕëÕìÕíÕîÕïÕðÕñÕòÕóÕôÕõÕöÕ÷ÕøÕùÕúÕûÕüÕýÕþÕÿÕÕÕÕ¨ÇØÚ éê#*  &Ÿ'Ÿ&/Ÿ ÑÒ  TDFLTzarmnˆbeng”bng2 cyrl¬dev2¼devaÐgeorägjr2ðgrekgujr gur2guru(hebr2latnLphnxZsyrcftml2rugar~xpeoŠÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ JII ÿÿ ÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿabvmVabvm\blwmbblwmhkernnkerntlfbdzmark€mark†markŽmark–markœmkmk¨rtbd®     "*2:BLT\dlt|„Žœ¤ŠL¢ÜhPB† ”"$ö&l,6,‚-š6<DJPV\bhnt,,,,,,,,dX,,ÈŽä P¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|uØ}ØHØ“ÙÁØuØuØQØTØ6ØCØÆØTؾØSØØCØrظØnØØ`Ø=ØyØ6Ø6Ø«ØLØTØ<ØŸØ™ØÒØ»ØnØYØiØuØ!ðô!è!Q!!|!ó!!ü!!A!!!!6!!Ý!å!¯£ô!!ÿ!X!W!„!o!!ü!!;!!ø!vä…ÏT!P!!×°]ê}ÚGú iikmpqvŸ¡¶/»¾EÀÁIÆÊK  ¡¦¨ÞàáÒÓÔÕH 28>DJPV\bhntÿ].ÿL7ÿW.ÿT+ÿZ.ÿ^=ÿ@.ÿ<#ÿ:%ÿ_8ÿc8ÿ 0&6 ÿXèÿX·ÿW¾¢ÔÕÖþÑ{BN  È’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<X:|bXX“k’ÜX.¤ÿþW†:†lP1mXÛMW;ÿÿ†ÿ8nXÿ8lœÿþÿ8ÿ8nòœ÷ñaôiïXXXXXXjXXXX’’’††ƒ††mmnmW:¼ÿÿÿÿÿÿÿÿ{yzy÷÷÷÷iiXXXÿÿbXÿÿXÿÿ’{’{”|’{†ƒ†;Öm÷m÷l m÷m÷S€`xZNÆX¤ÿð††ÿ8m÷cƒlXÿ8úÿ8úú –ÿ8úÿ8úÿ8Žlœÿ86ÿ8ÿ8²ÿ8W÷±ÿ8($=D]‚ˆ4Š‘;”˜C›ŸH¡¨Mª±U´¸]»¿bÁÅgÔÙlÜÝrêïtòóz|*3„89ŽHHPR‘WW”ZZ•^^–be—gg›qrœttž‘”Ÿïù£ûü®þ°  µ¶·&&½//¾44¿:;À==ÂAEö¹¼ÀÃÇ ÉÓÙÜååçéíî!óö#ùú'üü)ÿÿ*+ ‹ ‹, ’-1ÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæÿKÿ]ÿÿÿXÿbÿþÿTÿ\ÿ\ÿ[þòÿ(ÿ ÿÿ#ÿ ÿ"ÿZÿXÿYÿVÿWÿZÿÿþÑþÒÿ ÿ ÿþÿÿþìÿZÿ"ÿFþÝÿýþöÿÿþÐÿÿþöÿÿþòÿÿþòÿÿþàÿÿþÏÿÿþÏÿÿþÏÿÿþÏÿÿÿÿÿÿÿà.æ dÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ Xÿü=ÿÿ’ÃÿüÄaÿÿàDo6¿xÿþXÿüXÿüXÿüXÿüXÿüXÿü=ÿÿ=ÿÿ=ÿÿ=ÿÿ’’’’ÃÿüÃÿüÃÿüÃÿüÃÿüÄÄÄÄaÿÿààààààDDDD|z{z66666¿¿¿¿xÿþxÿþXÿüàXÿüà=ÿÿD=ÿÿD=ÿÿD=ÿÿD’|’|’|’|Ãÿü6Ãÿü6Ãÿü6ĿĿĿĿĿaÿÿxÿþ¿$$((,,2288<<DDHHLLRR XX \\ ‚‡ Š‘”˜›Ÿ¢§$ª±*´¸2»¿7ÁÅ<ÔÙAÜÝGêïIòóOQ*3W89arrcÈÿjÿÿÌÖ< yôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄOÙ3Ù}Ù[ÙXÙXÙ“ÙkÙŽÙ{ÙXÙŒá¤×pá†Ù3Ù†ÙeÙOÙ4ÙmÙXÙÛÙMÙWÛ?Ù únÌoçnçfÌoç ¿ödøújá†Ù3Ù¼OÙYÙ’ÙkÙ};ÙÖmÙ `æxæ^èNäWÛÂÌXٟ݆نÙ9ÐmÙmÙ?Ù&ÙøúƒÙ?Ùmú úúýeúoç <WÛú.#ç}Ùý ççç²”´y$%&'()*+,-./0123456789:;<=DFHJKLMNOPQRSTUVXZ\]ˆš¡¨ÆÇÚÛðñó45HPQRVWZ^bcdegqrtvyz{|ª«ßïðñòôõøùûüþ /12347:;=ABCDE__ µÝäææêì ðò#÷ø&ûû(ýþ)+- u v: y |< € @ † †B Š ŠC Œ ŒD “ “EF &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¢ÿ^ÿOÿUÿR>ÿX>ÿRAÿUÿUÿUÿÿUÿ/ÿUÿU#ÿU ÿ:ÿU,ÿX,ÿSÿ[ÿXÿUÿRÿUþÐÿBÿBÿ=ÿXÿ&ÿUÿ0ÿÿ3ÿ>ÿsÿ=ÿ[þîÿþÒþÒþÒþÖTþþþñþóþíþúÿ þþÿþòþÿþþþëþ÷þöþöþÜòþ±òþöþÍÿÉþÛþ¸ÿÿÌÿ2:.@  åÙYÙh ¹ 28RX»ÿy þB >~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìSSS l SSSmb SS/<yvh^h^hbh‚hlp’hãhMŒ/h¤hjhƒhAh‚hjhKl5hkoU­ÝhQvUÇ3h‚MÐkBkBÚRnR û¹ò0ö0böùåî$= D]$ÔÕÖרר w x } ~  ‚ ƒ „ … ‡ ˆ ‰ ŽV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎþâÿþó þ^÷þ¤Aþ¤dþûnÿ1;ÿQ(ÿ<ÿ ÿÿ ÿÿ ÿÿ(ÿ(ÿ(ÿ(ý¼(þ–dÿ(þ\ÿ4B "FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú ¨ÿ»ÿ±[ÿºÿ³üÿµ ÿ±ÿ»ÿ±Úÿ®œÿ®$ÿ¼äÿ©ÿŸÿ¤8ÿ«+ÿµ¾ÿ¶úÿ¹úÿ®øÿ¦ÿ¸¨ÿ³ÿ‘Tÿ®Kÿ¸tÿ³ðÿÀÛÿ¸ ÿª¼ÿ½ÿ¾Îÿ¿ ÿ»2ÿFFTmou{|}~…"(.ÿ|ÿ`ÿCÿ]%ÿfÿðº.È DŠ–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ |ÿû„ÿûyÿó†fÿøDÿûÿ÷†ÿÛmÿùJÿõUÿéÑÃÿ‘Uÿ¶€ÿûkÿù™ÿþMÿõ_wÿÿq‚ÿ“©ÿç)bg”.à&O LÿÉ|ÿÄQÿ­Îÿ§6ÿ®Çÿ§?ÿ.'ÿ30ÿ3÷ÿhˆÿ0šÿ0†mÿÿ”ÿ¶_ÿ¶–ìÿ‡ÿƒÖäÿÿwÿÿÝ«ÿåeR; Ëÿ¦ÿ‘÷ÿ‹Úÿšÿ”äÿŽiÿ­·ÿÔ—dbD9=?CDEFJOTUWX]w}=>?@DKOTY_abdtuvwxyz{|}~€‚ƒ„…†›œž ºÉËÒÕÖÙÞßàâãæçíõcdefo"(.ÿXÿtÿpÿƒÿáÿkÿé<&J #HNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöüªT !  *Oç;$Ð&#0+í). Ãúà-ø ¬#9TMx òâà*¹ Õ  +FGTmouCD€"(.ÿzŸÿŽÿa ÿ«‡ÿ¥wlf€ ‹$*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTxaej„gdêi9j—j†ešd¥cûe _ÿeqehaXa»e d c¥iâe«cgêfífŠeg a÷gâgaeac d hœc”e©a e§g–e–iêf½g£aÿº>ÿ·>ÿÉ5|7‰@^^ºa¹g[i_d˜išdie¡eYg‹aŒe…a—gWi#aeg4cžge.e:cœc«^±d ^ýgýdúd§iŽgÌcg¶gš^½gÿº;·eÿÀ>ÿº>ÿ·Aÿº;ÿºDÿÀ>ÿ·>kjdº^^g¨d«a˜e÷d÷a«agúd¥a a£eWcªh›gªažjã^9dúdôa÷dýd÷d c”e©e·c¢g d¢d¨g|7‰@j©i¥gùe÷aòda‹a++,.499 <= ?F HHJQSUWY ]]#ww${}%‚‚(””)$%*)),,1-=@3DD7KK8OO9TT:YY;__<ab=dd?t‡@››TŸU¨­X±±^´º_¾¾fÀÀgÄÇhÉÉlËËmÒÒnÕÙoÜÜtÞàuâãxåõz%&ghijr"(.4:@FLÿ•kÿ‘UÿŽgXdÿÀGÿÀLÿ¬é’i@8ÿØÿìšš©©ªªÅÅ›š©ªÅüX¶ÿâÿìÿâÿìÿâÿâÿØÿâÿìÿöÿâÿöÿìÿìÿìÿØÿìÿìjjkkssuuzz~~……‡‡ˆˆ‰‰ŠŠ‹‹‘‘“• kkww~~……ˆˆ‰‰‹‹””––——™Æjksuz~…‡ˆ‰Š‹‘“”•ÄðÿÄÿØÿìÿìÿâÿØÿâÿìÿâÿöÿâÿâÿìÿçÿöÿñÿûÿØÿâÿÎÿâÿöÿâÿÎÿìÿâÿâÿöÿöÿÎÿìÿìÿöÿìÿûÿâÿØÿÎÿìÿìÿöÿØÿâÿâÿâÿìÿìÿØÿöÿìÿìÿçÿûÿØÿÎÿÎÿìÿöÿçÿöÿÎÿöÿöÿìÿØÿìÿöÿÉÿâÿØÿçÿÝÿöÿöÿûÿÉÿâÿÎÿØÿâÿâÿØÿìÿìÿâÿâÿØÿìÿâÿâÿÎÿâÿìÿÓÿâÿÝÿçÿØÿØÿìÿâÿØÿâÿöÿâÿìÿØÿÎÿØÿìÿâÿØÿØÿâÿÎÿâÿÝÿçÿØÿØÿØÿçÿâÿâÿìÿöÿâÿâÿâÿöÿØÿÝÿâÿâÿØÿìÿìÿìÿØÿâÿÎÿâÿìÿçÿâÿìÿÎÿØÿìÿÎÿâÿâÿìÿØÿìÿçÿñÿØÿÄÿØÿâÿìÿØÿØÿöÿØÿìÿâÿØÿâÿØÿâÿÝÿçÿâÿÄÿØÿìÿØÿÎÿâÿØÿØÿØÿâÿÄÿâÿâÿìÿØÿØÿÓÿÝÿØÿâÿØÿìÿØÿìÿÎÿìÿìÿöÿñÿâÿöÿÎÿöÿöÿöÿöÿìÿöÿöÿöÿìÿìÿìÿöÿØÿâÿÝÿçÿØÿâÿÎÿìÿìÿØÿöÿØÿìÿöÿÎÿöÿìÿöÿçÿûÿØÿÎÿöÿØÿØÿØÿìÿØÿâÿØÿØÿìÿØÿØÿØÿâÿØÿØÿÓÿÝÿâÿÄÿÎÿÎÿÎÿìÿâÿâÿÄÿØÿìÿâÿÎÿÄÿØÿÎÿÓÿÎÿØÿØÿÎÿØÿâÿâÿöÿìÿØÿìÿâÿÎÿØÿâÿØÿØÿÓÿÝÿØM$$%%&&''(())**,,--..// 22 33 44 55 66 779:;;<<==‚‡ˆˆ‰‰ŠŽ‘’’”˜ šš ŸŸ  ÂÂÄÄÆÆÈÈÊÊÌÌÎÎÐÐÒÒÔÔÚÚÜÜÞÞààââääøøûû ýý ÿÿ         "" $$&&88::??yy¶¶ ü ü     P P Z Z \ \ d d f f ² ² è èx$$&&**,,--224466779:;;<<==DDFFGGHHII JJMM PQ RRSSTTUUVV WW XXYZ[[ \\]] ‚ˆ‰‰Ž‘”˜ššŸŸ¢¨©©ª­²²³³ ´¸ºº»¾¿¿ÁÁÂÂÃÃÄÄÅÅÆÆÇÇÈÈÊÊËËÌÌÎÎÏÏÑÑÕÕ××ÛÛÞÞààááââããääåå       !! ""## $$%% &&++--//11338899::;;<< ==>> ??@@ ; ; Q Q Z Z [ [ \ \ ] ] d d e e f f g g è è é éÙÚ ÜÝ ]$%&'()*,-./2345679:;<=‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’”•–—˜šŸ ÂÄÆÈÊÌÎÐÒÔÚÜÞàâäøûýÿ "$&8:?y¶ ü   P Z \ d f ² è^ÒªÿöÿìÿöÿöÿöÿöÿöÿöÿñÿìÿöÿöÿöÿöÿöÿöÿöÿöÿöÿöÿûÿöÿöÿöÿöÿöÿûÿñÿöÿìÿìÿìÿìÿöÿöÿöÿöÿìÿçÿìÿìÿöÿìÿöÿûÿöÿñÿûÿìÿìÿìÿìÿØÿìÿöÿçÿâÿâÿìÿçÿñÿñÿìÿìÿìÿçÿìÿìÿöÿìÿìÿçÿñÿöÿöÿöÿûÿìÿöÿìÿìÿöÿìÿöÿìÿìÿçÿñÿìÿìÿöÿöÿöÿûÿöÿñÿûÿöÿìÿìÿØÿöÿöÿìÿìÿöÿñÿûÿöÿûÿöÿìÿöÿöÿñÿöÿöÿñÿûÿìÿìÿìÿöÿìÿâÿìÿöÿâÿìÿÝÿìÿçÿñNDDEEFFGGHHIIJJ KKNN PQRRSSUU VV WW XX YZ[[ \\]]¢§¨¨©©ª­³³´¸ºº»¾ ¿¿ÁÁÃÃÅÅÇÇÉÉËËÍÍÏÏÕÕ××ÙÙÛÛÝÝáá ãã åå ùù     !! ## %% ++ -- // 11 33 99<<>>@@       ; ; Q Q [ [ ] ] e e g g é éÙÙHDDFF GGHHIIJJMMPQRR SS TTUU VVWWXX YZ[[\\]]¢¨©© ª­²²³³´¸ ºº »¾ ¿¿ÁÁÃÃÅÅÇÇËË ÏÏ ÑÑÓÓÕÕ××ááããåå       !!##%%++ -- // 11 33 99<<>>@@22     Q Q [ [ ] ] e e g g é éÙÝ_DEFGHIJKNPQRSUVWXYZ[\]¢£¤¥¦§¨©ª«¬­³´µ¶·¸º»¼½¾¿ÁÃÅÇÉËÍÏÕ×ÙÛÝáãåù !#%+-/139<>@    ; Q [ ] e g éÙ,òÿìÿÎÿÎÿØÿÎÿìÿÎÿìÿâÿØÿìÿÄÿâÿÎÿìÿÄÿÄÿØÿœÿºÿìÿÄÿÄÿâÿØÿâÿÄÿÎÿØÿÄÿÎÿÄÿØÿÎÿìÿØÿìÿØÿÄÿØÿâÿØÿìÿØÿØÿöÿÓÿÄÿÄÿìÿÄÿìÿìÿØÿâÿÄÿÄÿâÿØÿÄÿØÿâÿØÿÄÿÄÿÄÿÄÿÎÿØÿØÿ°ÿâÿØÿØÿºÿØÿâ}$$%%&'))**.. //22334466779: ;; << == DD EE FF HHIIJJKKNNPQRRSS UUVVWWXXYZ[[\\]]‚‡‰‰”˜ššŸŸ ¢§ ©© ª­³³´¸ºº»¾¿¿ÁÁÂÂÃà ÄÄÅÅ ÈÈÊÊËË ÌÌÎÎÏÏ ÕÕ××ÞÞààááââããääååøø ùùûûýýÿÿ    !!""##$$%%--//3388 99:: ;; <<== >>?? @@¶¶22 ü ü ý ý       ; ; P P Q Q Z Z [ [ \ \ ] ] d d e e f f g g è è é éÙÙ mm}} ò ò õ ö    ™$%&')*./234679:;<=DEFHIJKNPQRSUVWXYZ[\]‚ƒ„…†‡‰”•–—˜šŸ¢£¤¥¦§©ª«¬­³´µ¶·¸º»¼½¾¿ÁÂÃÄÅÈÊËÌÎÏÕ×Þàáâãäåøùûýÿ  !"#$%-/389:;<=>?@¶2 ü ý    ; P Q Z [ \ ] d e f g è éÙ´Ðÿ¦ÿöÿÎÿÎÿÎÿìÿâÿÎÿÎÿÎÿÎÿÎÿìÿØÿÄÿÎÿìÿâÿÎÿØÿÎÿØÿÎÿöÿØÿÎÿâÿìÿâÿØÿÎÿöÿØÿâÿìÿÎÿâÿÎÿâÿØÿâÿâÿìÿìÿâÿâÿÎÿâÿöÿöÿâÿâÿìÿâÿìÿØÿâÿâ mm}} ñ ñ ò ò ó ó õ õ ÷ ÷    p$$&&**--224466779:;;<<==DDFHII JJMM PQ RRSS TTUU VV WW XX YZ[[ \\]] ‚†ˆˆ‰‰”˜ššŸŸ¢¨©­²²³³ ´¸ºº»¾ ¿¿ÁÁÂÂÃÃÅÅÈÈÊÊËËÌÌÎÎÏÏÑÑÕÕ××ÞÞààááââããääåå        !! ""## $$%% &&++ -- // 33 8899::;;<< ==>> ??@@ 22   ; ; Q Q Z Z [ [ \ \ ] ] d d e e f f g g è è é éÙÝ  m} ñ ò ó õ ÷  Çþ°ßÃÞYïÈ»¦!gource-0.56/data/fonts/README0000644002342600234260000001033115152463042015512 0ustar andrewcandrewc-*-text-*- GNU FreeFont The GNU FreeFont project aims to provide a useful set of free scalable (i.e., OpenType) fonts covering as much as possible of the ISO 10646/Unicode UCS (Universal Character Set). Statement of Purpose -------------------- The practical reason for putting glyphs together in a single font face is to conveniently mix symbols and characters from different writing systems, without having to switch fonts. Coverage -------- FreeFont covers the following character sets * ISO 8859 parts 1-15 * CEN MES-3 European Unicode Subset http://www.evertype.com/standards/iso10646/pdf/cwa13873.pdf * IBM/Microsoft code pages 437, 850, 852, 1250, 1252 and more * Microsoft/Adobe Windows Glyph List 4 (WGL4) http://www.microsoft.com/typography/otspec/WGL4.htm * KOI8-R and KOI8-RU * DEC VT100 graphics symbols * International Phonetic Alphabet * Arabic, Hebrew, Armenian, Georgian, Ethiopian and Thai alphabets, including Arabic presentation forms A/B * mathematical symbols, including the whole TeX repertoire of symbols * APL symbols etc. Editing ------- The free outline font editor, George Williams's FontForge is used for editing the fonts. Design Issues ------------- Which font shapes should be made? Historical style terms like Renaissance or Baroque letterforms cannot be applied beyond Latin/Cyrillic/Greek scripts to any greater extent than Kufi or Nashki can be applied beyond Arabic script; "italic" is really only meaningful for Latin letters. However, most modern writing systems have typographic formulations for contrasting uniform and modulated character stroke widths, and have some history with "oblique", faces. Since the advent of the typewriter, most have developed a typographic style with uniform-width characters. Accordingly, the FreeFont family has one monospaced - FreeMono - and two proportional faces (one with uniform stroke - FreeSans - and one with modulated stroke - FreeSerif). To make text from different writing systems look good side-by-side, each FreeFont face is meant to contain characters of similar style and weight. Licensing --------- Free UCS scalable fonts is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The fonts are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. Files and their suffixes ------------------------ The files with .sfd (Spline Font Database) are in FontForge's native format. Please use these if you plan to modify the font files. TrueType fonts for immediate consumption are the files with the .ttf (TrueType Font) suffix. These are ready to use in Xwindows based systems using FreeType, on Mac OS, and on older Windows systems. OpenType fonts (with suffix .otf) are for use in Windows Vista. Note that although they can be installed on Linux, but many applications in Linux still don't support them. -------------------------------------------------------------------------- Primoz Peterlin, Steve White Free UCS scalable fonts: http://savannah.gnu.org/projects/freefont/ $Id: README,v 1.7 2009/01/13 08:43:23 Stevan_White Exp $ gource-0.56/data/gource.style0000644002342600234260000000044515152463042016054 0ustar andrewcandrewcchangeset = '{file_adds}{file_copies}{file_mods}{file_dels}' file_mod = "{date|hgdate}|{author|person}|M|{file_mod}\n" file_add = "{date|hgdate}|{author|person}|A|{file_add}\n" file_del = "{date|hgdate}|{author|person}|D|{file_del}\n" file_copy = "{date|hgdate}|{author|person}|A|{name}\n" gource-0.56/data/beam.png0000644002342600234260000000055715152463042015124 0ustar andrewcandrewc‰PNG  IHDR€Ò¦¶bKGDÿÿÿ ½§“ pHYs  šœtIMEæ,ZàiTXtCommentCreated with GIMPd.eÓIDAT(ÏmŽ[nBA COÃC]û_ @Æ™ôJo–#Û‘mÝí@ž9§òÂe|]=¿–‡›%û}À}̹KÆL –@ 2•YF•EdYTR>`­{l´Ä˃\îé‹\N:D7ÃèÄ,†u'öøo,N°ì'[³ñI{ßá€þ£E›0Ô´ ûÓ_›tW›‰Ff­~z†ÍÅ*p9̵(wæ{Ïk w-oô*ŠŠ(A$‘ ;ywG·Þ©õáª#ÇÝf¦aù޶''IEND®B`‚gource-0.56/gource.pro0000644002342600234260000000645315152463042014610 0ustar andrewcandrewc# Note: this project file currently only implements building on Windows with Mingw-w64 # See the INSTALL file for building instructions TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt DEFINES -= UNICODE CONFIG += c++11 CONFIG += object_parallel_to_source gcc { QMAKE_CXXFLAGS_WARN_ON = -Wall -Wno-unused-variable -Wno-sign-compare -Wno-unused-parameter -Wno-reorder QMAKE_CXXFLAGS_DEBUG += -DASSERTS_ENABLED } mingw { QMAKE_CXXFLAGS += -Dmain=SDL_main QMAKE_LFLAGS += -mconsole INCLUDEPATH += C:\msys64\mingw64\include\SDL2 INCLUDEPATH += C:\msys64\mingw64\include\freetype2 LIBS += -lmingw32 -lSDL2main -lSDL2.dll LIBS += -lSDL2_image.dll -lfreetype.dll -lpcre2-8.dll -lpng.dll -lglew32.dll -lboost_system-mt -lboost_filesystem-mt -lopengl32 -lglu32 LIBS += -static-libgcc -static-libstdc++ LIBS += -lcomdlg32 } VPATH += ./src SOURCES += \ action.cpp \ bloom.cpp \ caption.cpp \ dirnode.cpp \ file.cpp \ gource.cpp \ gource_settings.cpp \ gource_shell.cpp \ key.cpp \ logmill.cpp \ main.cpp \ pawn.cpp \ slider.cpp \ spline.cpp \ textbox.cpp \ user.cpp \ zoomcamera.cpp \ formats/apache.cpp \ formats/bzr.cpp \ formats/commitlog.cpp \ formats/custom.cpp \ formats/cvs-exp.cpp \ formats/cvs2cl.cpp \ formats/git.cpp \ formats/gitraw.cpp \ formats/hg.cpp \ formats/svn.cpp \ tinyxml/tinystr.cpp \ tinyxml/tinyxml.cpp \ tinyxml/tinyxmlerror.cpp \ tinyxml/tinyxmlparser.cpp \ core/conffile.cpp \ core/display.cpp \ core/frustum.cpp \ core/fxfont.cpp \ core/logger.cpp \ core/mousecursor.cpp \ core/plane.cpp \ core/png_writer.cpp \ core/ppm.cpp \ core/quadtree.cpp \ core/regex.cpp \ core/resource.cpp \ core/sdlapp.cpp \ core/seeklog.cpp \ core/settings.cpp \ core/shader.cpp \ core/shader_common.cpp \ core/stringhash.cpp \ core/texture.cpp \ core/tga.cpp \ core/timezone.cpp \ core/vbo.cpp \ core/vectors.cpp HEADERS += \ action.h \ bloom.h \ caption.h \ dirnode.h \ file.h \ gource.h \ gource_settings.h \ gource_shell.h \ key.h \ logmill.h \ main.h \ pawn.h \ slider.h \ spline.h \ textbox.h \ user.h \ zoomcamera.h \ formats/apache.h \ formats/bzr.h \ formats/commitlog.h \ formats/custom.h \ formats/cvs-exp.h \ formats/cvs2cl.h \ formats/git.h \ formats/gitraw.h \ formats/hg.h \ formats/svn.h \ tinyxml/tinystr.h \ tinyxml/tinyxml.h \ core/bounds.h \ core/conffile.h \ core/display.h \ core/frustum.h \ core/fxfont.h \ core/gl.h \ core/logger.h \ core/mousecursor.h \ core/pi.h \ core/plane.h \ core/png_writer.h \ core/ppm.h \ core/quadtree.h \ core/regex.h \ core/resource.h \ core/sdlapp.h \ core/seeklog.h \ core/settings.h \ core/shader.h \ core/shader_common.h \ core/stringhash.h \ core/texture.h \ core/tga.h \ core/timezone.h \ core/vbo.h \ core/vectors.h DISTFILES += \ data/shaders/bloom.frag \ data/shaders/shadow.frag \ data/shaders/text.frag \ data/shaders/bloom.vert \ data/shaders/shadow.vert \ data/shaders/text.vert gource-0.56/COPYING0000644002342600234260000010451315152463042013631 0ustar andrewcandrewc GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gource-0.56/Makefile.am0000644002342600234260000000504315152463042014630 0ustar andrewcandrewcACLOCAL_AMFLAGS = -I m4 bin_PROGRAMS = gource gource_CXXFLAGS = -std=gnu++0x -Wall -Wno-sign-compare -Wno-reorder -Wno-unused-but-set-variable -Wno-unused-variable sources = \ src/action.cpp \ src/bloom.cpp \ src/caption.cpp \ src/core/conffile.cpp \ src/core/display.cpp \ src/core/frustum.cpp \ src/core/fxfont.cpp \ src/core/logger.cpp \ src/core/mousecursor.cpp \ src/core/plane.cpp \ src/core/ppm.cpp \ src/core/quadtree.cpp \ src/core/regex.cpp \ src/core/resource.cpp \ src/core/sdlapp.cpp \ src/core/seeklog.cpp \ src/core/settings.cpp \ src/core/shader.cpp \ src/core/shader_common.cpp \ src/core/stringhash.cpp \ src/core/texture.cpp \ src/core/png_writer.cpp \ src/core/timezone.cpp \ src/core/vbo.cpp \ src/core/vectors.cpp \ src/dirnode.cpp \ src/file.cpp \ src/formats/apache.cpp \ src/formats/bzr.cpp \ src/formats/commitlog.cpp \ src/formats/custom.cpp \ src/formats/cvs-exp.cpp \ src/formats/cvs2cl.cpp \ src/formats/git.cpp \ src/formats/gitraw.cpp \ src/formats/hg.cpp \ src/formats/svn.cpp \ src/gource.cpp \ src/gource_shell.cpp \ src/gource_settings.cpp \ src/key.cpp \ src/logmill.cpp \ src/pawn.cpp \ src/slider.cpp \ src/spline.cpp \ src/textbox.cpp \ src/user.cpp \ src/zoomcamera.cpp if USE_BUNDLED_TINYXML sources += \ src/tinyxml/tinyxmlerror.cpp \ src/tinyxml/tinystr.cpp \ src/tinyxml/tinyxml.cpp \ src/tinyxml/tinyxmlparser.cpp endif gource_SOURCES = src/main.cpp ${sources} AM_CPPFLAGS = -DSDLAPP_RESOURCE_DIR=\"$(pkgdatadir)\" dist_pkgdata_DATA = data/beam.png data/bloom.tga data/bloom_alpha.tga data/file.png data/user.png data/gource.style shadersdir = $(pkgdatadir)/shaders dist_shaders_DATA = data/shaders/shadow.vert data/shaders/shadow.frag data/shaders/bloom.vert data/shaders/bloom.frag data/shaders/text.vert data/shaders/text.frag install-data-hook: $(MKDIR_P) $(DESTDIR)$(mandir)/man1 gzip -cf9 $(srcdir)/data/gource.1 > $(DESTDIR)$(mandir)/man1/gource.1.gz uninstall-hook: rm -f $(DESTDIR)$(mandir)/man1/gource.1.gz if FONTFILE AM_CPPFLAGS += -DGOURCE_FONT_FILE=\"$(gourcefontfile)\" else if FONTDIR AM_CPPFLAGS += -DSDLAPP_FONT_DIR=\"$(gourcefontdir)\" else fontsdir = $(pkgdatadir)/fonts dist_fonts_DATA = data/fonts/README data/fonts/FreeSans.ttf endif endif check_PROGRAMS = gource_tests gource_tests_CPPFLAGS = -I src/test/ ${BOOST_CPPFLAGS} gource_tests_LDFLAGS = ${BOOST_LDFLAGS} gource_tests_LDADD = ${BOOST_UNIT_TEST_FRAMEWORK_LIB} gource_tests_SOURCES = \ src/test/main.cpp \ src/test/datetime_tests.cpp \ src/test/regex_tests.cpp \ ${sources} TESTS = gource_tests gource-0.56/configure.ac0000664002342600234260000000526015152463042015065 0ustar andrewcandrewc# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.61) AC_INIT(Gource, 0.56, [acaudwell@gmail.com]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_SRCDIR([src/main.h]) AM_INIT_AUTOMAKE([dist-bzip2 foreign subdir-objects]) AC_CANONICAL_HOST # Checks for programs. AC_PROG_CXX AC_LANG(C++) AC_CHECK_FUNCS([timegm unsetenv]) #Disable X11 on Macs unless required AS_IF([test "$with_x" != yes], [ case "$host_os" in darwin*) with_x="no" LIBS="$LIBS -framework CoreFoundation" ;; esac ], []) #GL AX_CHECK_GL AX_CHECK_GLU CXXFLAGS="$CXXFLAGS $GL_CFLAGS $GLU_CFLAGS" CPPFLAGS="$CPPFLAGS $GL_CFLAGS $GLU_CFLAGS" LIBS="$LIBS $GL_LIBS $GLU_LIBS" PKG_CHECK_MODULES([FT2], [freetype2 >= 9.0.3]) PKG_CHECK_MODULES([PCRE2], [libpcre2-8]) PKG_CHECK_MODULES([GLEW], [glew]) PKG_CHECK_MODULES([SDL2], [sdl2 SDL2_image]); PKG_CHECK_MODULES([PNG], [libpng >= 1.2]) CPPFLAGS="${CPPFLAGS} ${FT2_CFLAGS} ${PCRE2_CFLAGS} ${GLEW_CFLAGS} ${SDL2_CFLAGS} ${PNG_CFLAGS}" LIBS="${LIBS} ${FT2_LIBS} ${PCRE2_LIBS} ${GLEW_LIBS} ${SDL2_LIBS} ${PNG_LIBS}" AC_CHECK_FUNCS([IMG_LoadPNG_RW], , AC_MSG_ERROR([SDL2_image with PNG support required. Please see INSTALL])) AC_CHECK_FUNCS([IMG_LoadJPG_RW], , AC_MSG_ERROR([SDL2_image with JPEG support required. Please see INSTALL])) #BOOST AX_BOOST_BASE([1.69], , AC_MSG_ERROR(Boost Filesystem >= 1.69 is required. Please see INSTALL)) AX_BOOST_FILESYSTEM CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" LIBS="$LIBS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB" AC_ARG_ENABLE(font-file,[AS_HELP_STRING([--enable-font-file=FILE],[override the default font])],[gourcefontfile="$enableval"],[gourcefontfile=""]) AM_CONDITIONAL([FONTFILE], [test "x$gourcefontfile" != "x"]) AC_SUBST(gourcefontfile) #see if ttf-font-dir option is enabled AC_ARG_ENABLE(ttf-font-dir,[AS_HELP_STRING([--enable-ttf-font-dir=DIR],[directory containing GNU FreeFont TTF fonts])],[gourcefontdir="$enableval"],[gourcefontdir=""]) AM_CONDITIONAL([FONTDIR], [test "x$gourcefontdir" != "x"]) AC_SUBST(gourcefontdir) #GLM AC_CHECK_HEADER([glm/glm.hpp],, AC_MSG_ERROR(GLM headers are required. Please see INSTALL)) #see if building against system TinyXML library use_tinyxml_system_library=no AC_ARG_WITH(tinyxml, AS_HELP_STRING([--with-tinyxml],[Use system installed TinyXML library]), use_tinyxml_system_library=$withval) if test "x$use_tinyxml_system_library" = "xyes"; then AC_CHECK_LIB([tinyxml],[main],[],[AC_MSG_ERROR(TinyXML library was requested but not found)],[])ac_cv_lib_tinyxml=ac_cv_lib_tinyxml_main fi AM_CONDITIONAL(USE_BUNDLED_TINYXML, test "x$use_tinyxml_system_library" != "xyes") AC_CONFIG_FILES([Makefile]) AC_OUTPUT gource-0.56/src/0000775002342600234260000000000015152463042013363 5ustar andrewcandrewcgource-0.56/src/bloom.cpp0000644002342600234260000000703715152463042015204 0ustar andrewcandrewc/* Copyright (C) 2011 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "bloom.h" //bloombuf bloombuf::bloombuf(int data_size) : data_size(data_size) { bufferid = 0; buffer_size = 0; vertex_count = 0; data = data_size > 0 ? new bloom_vertex[data_size] : 0; //fprintf(stderr, "size of bloom_vertex = %d\n", sizeof(bloom_vertex)); } bloombuf::~bloombuf() { if(bufferid !=0) glDeleteBuffers(1, &bufferid); if(data != 0) delete[] data; } void bloombuf::resize(int new_size) { bloom_vertex* _data = data; data = new bloom_vertex[new_size]; for(int i=0;i data_size) { resize(vertex_count*2); } data[i] = v1; data[i+1] = v2; data[i+2] = v3; data[i+3] = v4; } void bloombuf::update() { if(vertex_count==0) return; //note possibly better to have a queue and cycle them here if(bufferid==0) { glGenBuffers(1, &bufferid); } glBindBuffer(GL_ARRAY_BUFFER, bufferid); //recreate buffer if less than the vertex_count if(buffer_size < vertex_count) { buffer_size = data_size; glBufferData(GL_ARRAY_BUFFER, buffer_size*sizeof(bloom_vertex), &(data[0].pos.x), GL_DYNAMIC_DRAW); } else { glBufferSubData(GL_ARRAY_BUFFER, 0, vertex_count*sizeof(bloom_vertex), &(data[0].pos.x)); } glBindBuffer(GL_ARRAY_BUFFER, 0); } void bloombuf::draw() { if(vertex_count==0 || bufferid==0) return; glBindBuffer(GL_ARRAY_BUFFER, bufferid); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, sizeof(bloom_vertex), 0); glColorPointer(4, GL_FLOAT, sizeof(bloom_vertex), (GLvoid*)8); // offset pos (2x4 bytes) glTexCoordPointer(4, GL_FLOAT, sizeof(bloom_vertex), (GLvoid*)24); // offset pos + colour (2x4 + 4x4 bytes) glDrawArrays(GL_QUADS, 0, vertex_count); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glBindBuffer(GL_ARRAY_BUFFER, 0); } gource-0.56/src/main.cpp0000644002342600234260000001557015152463042015021 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "main.h" int main(int argc, char *argv[]) { std::string exepath; #ifndef _WIN32 if(argc > 0) { exepath = std::string(argv[0]); } #endif SDLAppInit("Gource", "gource", exepath); #ifdef _WIN32 SDLApp::initConsole(); #endif ConfFile conf; std::vector files; //convert args to a conf file //read the conf file //apply the conf file to settings try { gGourceSettings.parseArgs(argc, argv, conf, &files); if(gGourceSettings.load_config.empty() && !files.empty()) { //see if file looks like a config file for(std::vector::iterator fit = files.begin(); fit != files.end(); fit++) { std::string file = *fit; int file_length = file.size(); if( (file.rfind(".conf") == (file_length-5) && file_length > 5) || (file.rfind(".cfg") == (file_length-4) && file_length > 4) || (file.rfind(".ini") == (file_length-4) && file_length > 4) ) { bool is_conf=true; try { ConfFile conftest; conftest.load(file); } catch(ConfFileException& exception) { is_conf = false; } if(is_conf) { gGourceSettings.load_config = file; files.erase(fit); break; } } } } //set log level Logger::getDefault()->setLevel(gGourceSettings.log_level); #ifdef _WIN32 // hide console if not needed if(gGourceSettings.log_level == LOG_LEVEL_OFF && !SDLApp::existing_console) { SDLApp::showConsole(false); } #endif //load config if(!gGourceSettings.load_config.empty()) { conf.clear(); conf.load(gGourceSettings.load_config); //apply args to loaded conf file gGourceSettings.parseArgs(argc, argv, conf); } //set path if(!files.empty()) { std::string path = files[files.size()-1]; ConfSectionList* sectionlist = conf.getSections("gource"); if(sectionlist!=0) { for(ConfSectionList::iterator sit = sectionlist->begin(); sit != sectionlist->end(); sit++) { (*sit)->setEntry("path", path); } } else { conf.setEntry("gource", "path", path); } } //apply the config / see if its valid gGourceSettings.importDisplaySettings(conf); gGourceSettings.importGourceSettings(conf); //save config if(!gGourceSettings.save_config.empty()) { conf.save(gGourceSettings.save_config); exit(0); } //write custom log file if(!gGourceSettings.output_custom_filename.empty() && !gGourceSettings.path.empty()) { Gource::writeCustomLog(gGourceSettings.path, gGourceSettings.output_custom_filename); exit(0); } } catch(ConfFileException& exception) { SDLAppQuit(exception.what()); } //enable frameless display.enableFrameless(gGourceSettings.frameless); // this causes corruption on some video drivers if(gGourceSettings.multisample) { display.multiSample(4); } //background needs alpha channel if(gGourceSettings.transparent) { display.enableAlpha(true); } //enable vsync display.enableVsync(gGourceSettings.vsync); //allow resizing window if we are not recording if(gGourceSettings.resizable && gGourceSettings.output_ppm_filename.empty()) { display.enableResize(true); } // Change OS High DPI display behaviour // On Windows this behaves differently, it seems safe to always enable it bool high_dpi = true; #ifndef _WIN32 // Requesting High DPI on MacOS may cause the pixel resolution to be doubled. // If a resolution has been specified this may not be appropriate // E.g. if you are recording a video at a specific resolution // Can override by supplying --high-dpi option. if(gGourceSettings.viewport_specified && !gGourceSettings.high_dpi) { high_dpi = false; } #endif display.enableHighDPIAwareness(high_dpi); try { display.init("Gource", gGourceSettings.display_width, gGourceSettings.display_height, gGourceSettings.fullscreen, gGourceSettings.screen); #if SDL_VERSION_ATLEAST(2,0,0) if(!display.isFullscreen() && gGourceSettings.window_x >= 0 && gGourceSettings.window_y >= 0) { SDL_SetWindowPosition(display.sdl_window, gGourceSettings.window_x, gGourceSettings.window_y); } SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0"); #endif } catch(SDLInitException& exception) { char errormsg[1024]; snprintf(errormsg, 1024, "SDL initialization failed - %s", exception.what()); SDLAppQuit(errormsg); } //init frame exporter FrameExporter* exporter = 0; if(gGourceSettings.output_ppm_filename.size() > 0) { try { exporter = new PPMExporter(gGourceSettings.output_ppm_filename); } catch(PPMExporterException& exception) { char errormsg[1024]; snprintf(errormsg, 1024, "could not write to '%s'", exception.what()); SDLAppQuit(errormsg); } } if(display.multiSamplingEnabled()) { glEnable(GL_MULTISAMPLE_ARB); } GourceShell* gourcesh = 0; try { gourcesh = gGourceShell = new GourceShell(&conf, exporter); gourcesh->run(); } catch(ResourceException& exception) { char errormsg[1024]; snprintf(errormsg, 1024, "failed to load resource '%s'", exception.what()); SDLAppQuit(errormsg); } catch(SDLAppException& exception) { if(exception.showHelp()) { gGourceSettings.help(); } else { SDLAppQuit(exception.what()); } } gGourceShell = 0; if(gourcesh != 0) delete gourcesh; if(exporter != 0) delete exporter; //free resources display.quit(); return 0; } gource-0.56/src/slider.h0000644002342600234260000000300415152463042015011 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef POS_SLIDER_H #define POS_SLIDER_H #include "core/logger.h" #include "core/bounds.h" #include "core/fxfont.h" class PositionSlider { FXFont font; Bounds2D bounds; float percent; float mouseover; float mouseover_elapsed; float fade_time; float alpha; vec3 slidercol; float capwidth; std::string caption; void drawSlider(float position) const; public: PositionSlider(float percent = 0.0f); void init(); void setColour(vec3 col); void setCaption(const std::string& cap); void setPercent(float percent); void resize(); void show(); const Bounds2D& getBounds() const; bool mouseOver(vec2 pos, float* percent_ptr); bool click(vec2 pos, float* percent_ptr); void logic(float dt); void draw(float dt); }; #endif gource-0.56/src/zoomcamera.cpp0000644002342600234260000001053515152463042016226 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "zoomcamera.h" ZoomCamera::ZoomCamera() { } ZoomCamera::ZoomCamera(vec3 pos, vec3 target, float min_distance, float max_distance) : pos(pos), _pos(pos), target(target), _target(target), dest(pos), fov(90.0f) { znear = 0.1; up = vec3(0.0f, -1.0f, 0.0f); setMinDistance(min_distance); setMaxDistance(max_distance); padding = 1.0; speed = 1.0; lockon = false; lockon_time = 0.0; reset(); } void ZoomCamera::reset() { pos = _pos; target = _target; } float ZoomCamera::getMaxDistance() { return max_distance; } float ZoomCamera::getMinDistance() { return min_distance; } void ZoomCamera::setPadding(float padding) { this->padding = padding; } void ZoomCamera::setMaxDistance(float max) { max_distance = max; zfar = max + 1.0; } void ZoomCamera::setMinDistance(float min) { min_distance = min; } void ZoomCamera::lockOn(bool lockon) { if(lockon) { lockon_time = 1.0; } this->lockon = lockon; } void ZoomCamera::look() { lookAt(target); } void ZoomCamera::lookAt(const vec3& target) { gluLookAt( pos.x, pos.y, pos.z, target.x, target.y, target.z, up.x, up.y, up.z); } void ZoomCamera::focus() { display.mode3D(fov, znear, zfar); look(); } void ZoomCamera::stop() { this->dest = pos; } void ZoomCamera::setSpeed(float speed) { this->speed = speed; } void ZoomCamera::adjust(const Bounds2D& bounds) { adjust(bounds, true); } void ZoomCamera::adjust(const Bounds2D& bounds, bool adjust_distance) { //center camera on bounds vec2 centre = bounds.centre(); //adjust by screen ratio dest.x = centre.x; dest.y = centre.y; if(!adjust_distance) return; //scale by 10% so we dont have stuff right on the edge of the screen float width = bounds.width() * padding; float height = bounds.height() * padding; float aspect_ratio = display.width / (float) display.height; if(aspect_ratio < 1.0) { height /= aspect_ratio; } else { width /= aspect_ratio; } //calc visible width of the opposite wall at a distance of 1 this fov float toa = tan( fov * 0.5f * DEGREES_TO_RADIANS ) * 2.0; float distance; //TOA = tan = opposite/adjacent (distance = adjacent) //use the larger side of the box //cropping: vertical, horizontal or none if(gGourceSettings.crop_vertical) { distance = width / toa; } else if (gGourceSettings.crop_horizontal) { distance = height / toa; } else { if(width >= height) { distance = width / toa; } else { distance = height / toa; } } //debugLog("toa %.2f, distance %.2f width %.2f height %.2f dratio %.2f\n", toa, distance, width, height, dratio); //check bounds are valid if(distance < min_distance) distance = min_distance; if(distance > max_distance) distance = max_distance; this->dest.z = -distance; } void ZoomCamera::setDistance(float distance) { dest.z = -distance; } void ZoomCamera::setPos(const vec3& pos, bool keep_angle) { if(keep_angle) { vec3 dir = target - this->pos; this->pos = pos; this->target = pos + dir; } else { this->pos = pos; } } void ZoomCamera::logic(float dt) { vec3 dp = (dest - pos); vec3 dpt = dp * dt * speed; if(lockon) { dpt = dpt * lockon_time + dp * (1.0f-lockon_time); if(lockon_time>0.0) { lockon_time = std::max(0.0f, lockon_time-dt*0.5f); } } if(glm::length2(dpt) > glm::length2(dp)) dpt = dp; pos += dpt; target = vec3(pos.x, pos.y, 0.0); } gource-0.56/src/spline.h0000644002342600234260000000260415152463042015026 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef SPLINE_EDGE_H #define SPLINE_EDGE_H #include "core/display.h" #include "core/vectors.h" #include "core/pi.h" #include "pawn.h" #include class SplineEdge { std::vector spline_point; std::vector spline_colour; vec2 label_pos; void drawBeam(const vec2 & pos1, const vec4 & col1, const vec2 & pos2, const vec4 & col2, float radius, bool first) const; public: SplineEdge(); const vec2& getLabelPos() const; void update(const vec2& pos1, const vec4& col1, const vec2& pos2, const vec4& col2, const vec2& spos); void drawToVBO(quadbuf& buffer) const; void drawShadow() const; void draw() const; }; #endif gource-0.56/src/logmill.cpp0000664002342600234260000002102115152463042015522 0ustar andrewcandrewc/* Copyright (C) 2012 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "logmill.h" #include "gource_settings.h" #include "formats/git.h" #include "formats/gitraw.h" #include "formats/custom.h" #include "formats/hg.h" #include "formats/bzr.h" #include "formats/svn.h" #include "formats/apache.h" #include "formats/cvs-exp.h" #include "formats/cvs2cl.h" #include extern "C" { static int logmill_thread(void *lmill) { RLogMill *logmill = static_cast (lmill); logmill->run(); return 0; } }; RLogMill::RLogMill(const std::string& logfile) : logfile(logfile) { logmill_thread_state = LOGMILL_STATE_STARTUP; clog = 0; #if SDL_VERSION_ATLEAST(2,0,0) thread = SDL_CreateThread( logmill_thread, "logmill", this ); #else thread = SDL_CreateThread( logmill_thread, this ); #endif } RLogMill::~RLogMill() { abort(); if(clog) delete clog; } void RLogMill::run() { logmill_thread_state = LOGMILL_STATE_FETCHING; #if defined(HAVE_PTHREAD) && !defined(_WIN32) sigset_t mask; sigemptyset(&mask); // unblock SIGINT so user can cancel // NOTE: assumes SDL is using pthreads sigaddset(&mask, SIGINT); pthread_sigmask(SIG_UNBLOCK, &mask, 0); #endif std::string log_format = gGourceSettings.log_format; try { clog = fetchLog(log_format); // find first commit after start_timestamp if specified if(clog != 0 && gGourceSettings.start_timestamp != 0) { RCommit commit; while(!gGourceSettings.shutdown && !clog->isFinished()) { if(clog->nextCommit(commit) && commit.timestamp >= gGourceSettings.start_timestamp) { clog->bufferCommit(commit); break; } } } } catch(SeekLogException& exception) { error = "unable to read log file"; } catch(SDLAppException& exception) { error = exception.what(); } if(!clog && error.empty()) { if(boost::filesystem::is_directory(logfile)) { if(!log_format.empty()) { if(gGourceSettings.start_timestamp || gGourceSettings.stop_timestamp) { error = "failed to generate log file for the specified time period"; } else { error = "failed to generate log file"; } #ifdef _WIN32 // no error - should trigger help message } else if(gGourceSettings.default_path && boost::filesystem::exists("./gource.exe")) { error = ""; #endif } else { error = "directory not supported"; } } else { error = "unsupported log format (you may need to regenerate your log file)"; } } logmill_thread_state = clog ? LOGMILL_STATE_SUCCESS : LOGMILL_STATE_FAILURE; } void RLogMill::abort() { if(!thread) return; // TODO: make abort nicer by notifying the log process // we want to shutdown SDL_WaitThread(thread, 0); thread = 0; } bool RLogMill::isFinished() { return logmill_thread_state > LOGMILL_STATE_FETCHING; } int RLogMill::getStatus() { return logmill_thread_state; } std::string RLogMill::getError() { return error; } RCommitLog* RLogMill::getLog() { if(thread != 0) { SDL_WaitThread(thread, 0); thread = 0; } return clog; } bool RLogMill::findRepository(boost::filesystem::path& dir, std::string& log_format) { dir = canonical(dir); //fprintf(stderr, "find repository from initial path: %s\n", dir.string().c_str()); while(is_directory(dir)) { if(is_directory(dir / ".git") || is_regular_file(dir / ".git")) log_format = "git"; else if(is_directory(dir / ".hg")) log_format = "hg"; else if(is_directory(dir / ".bzr")) log_format = "bzr"; else if(is_directory(dir / ".svn")) log_format = "svn"; if(!log_format.empty()) { //fprintf(stderr, "found '%s' repository at: %s\n", log_format.c_str(), dir.string().c_str()); return true; } if(!dir.has_parent_path()) return false; dir = dir.parent_path(); } return false; } RCommitLog* RLogMill::fetchLog(std::string& log_format) { RCommitLog* clog = 0; //if the log format is not specified and 'logfile' is a directory, recursively look for a version control repository. //this method allows for something strange like someone who having an svn repository inside a git repository //(in which case it would pick the svn directory as it would encounter that first) if(log_format.empty() && logfile != "-") { try { boost::filesystem::path repo_path(logfile); if(is_directory(repo_path)) { if(findRepository(repo_path, log_format)) { logfile = repo_path.string(); } } } catch(boost::filesystem::filesystem_error& error) { } } //we've been told what format to use if(log_format.size() > 0) { debugLog("log-format = %s", log_format.c_str()); if(log_format == "git") { clog = new GitCommitLog(logfile); if(clog->checkFormat()) return clog; delete clog; clog = new GitRawCommitLog(logfile); if(clog->checkFormat()) return clog; delete clog; } if(log_format == "hg") { clog = new MercurialLog(logfile); if(clog->checkFormat()) return clog; delete clog; } if(log_format == "bzr") { clog = new BazaarLog(logfile); if(clog->checkFormat()) return clog; delete clog; } if(log_format == "cvs") { clog = new CVSEXPCommitLog(logfile); if(clog->checkFormat()) return clog; delete clog; } if(log_format == "custom") { clog = new CustomLog(logfile); if(clog->checkFormat()) return clog; delete clog; } if(log_format == "apache") { clog = new ApacheCombinedLog(logfile); if(clog->checkFormat()) return clog; delete clog; } if(log_format == "svn") { clog = new SVNCommitLog(logfile); if(clog->checkFormat()) return clog; delete clog; } if(log_format == "cvs2cl") { clog = new CVS2CLCommitLog(logfile); if(clog->checkFormat()) return clog; delete clog; } return 0; } // try different formats until one works //git debugLog("trying git..."); clog = new GitCommitLog(logfile); if(clog->checkFormat()) return clog; delete clog; //mercurial debugLog("trying mercurial..."); clog = new MercurialLog(logfile); if(clog->checkFormat()) return clog; delete clog; //bzr debugLog("trying bzr..."); clog = new BazaarLog(logfile); if(clog->checkFormat()) return clog; delete clog; //git raw debugLog("trying git raw..."); clog = new GitRawCommitLog(logfile); if(clog->checkFormat()) return clog; delete clog; //cvs exp debugLog("trying cvs-exp..."); clog = new CVSEXPCommitLog(logfile); if(clog->checkFormat()) return clog; delete clog; //svn debugLog("trying svn..."); clog = new SVNCommitLog(logfile); if(clog->checkFormat()) return clog; delete clog; //cvs2cl debugLog("trying cvs2cl..."); clog = new CVS2CLCommitLog(logfile); if(clog->checkFormat()) return clog; delete clog; //custom debugLog("trying custom..."); clog = new CustomLog(logfile); if(clog->checkFormat()) return clog; delete clog; //apache debugLog("trying apache combined..."); clog = new ApacheCombinedLog(logfile); if(clog->checkFormat()) return clog; delete clog; return 0; } gource-0.56/src/dirnode.cpp0000664002342600234260000007517215152463042015527 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "dirnode.h" float gGourceMinDirSize = 15.0; float gGourceForceGravity = 10.0; float gGourceDirPadding = 1.5; bool gGourceNodeDebug = false; bool gGourceGravity = true; //debugging int gGourceDirNodeInnerLoops = 0; int gGourceFileInnerLoops = 0; std::map gGourceDirMap; RDirNode::RDirNode(RDirNode* parent, const std::string & abspath) { changePath(abspath); parent = 0; setParent(parent); accel = spos = prev_accel = vel = vec2(0.0f); //NOTE: parent is always being set to 0 so this never gets called ... //figure out starting position if(parent !=0) { vec2 parentPos = parent->getPos(); vec2 offset; pos = parentPos; } else { pos = vec2(0.0f, 0.0f); } float padded_file_radius = gGourceFileDiameter * 0.5; file_area = padded_file_radius * padded_file_radius * PI; visible_count = 0; visible = false; position_initialized = false; since_node_visible = 0.0; since_last_file_change = 0.0; since_last_node_change = 0.0; calcRadius(); calcColour(); } void RDirNode::changePath(const std::string & abspath) { //fix up path gGourceDirMap.erase(this->abspath); this->abspath = abspath; if(abspath.empty() || abspath[abspath.size()-1] != '/') { this->abspath += std::string("/"); } //debugLog("new dirnode %s\n", abspath.c_str()); gGourceDirMap[this->abspath] = this; } RDirNode::~RDirNode() { for(std::list::iterator it = children.begin(); it != children.end(); it++) { delete (*it); } gGourceDirMap.erase(abspath); } int RDirNode::getTokenOffset() const{ return path_token_offset; } void RDirNode::fileUpdated(bool userInitiated) { calcRadius(); since_last_file_change = 0.0; nodeUpdated(userInitiated); } void RDirNode::nodeUpdated(bool userInitiated) { if(userInitiated) since_last_node_change = 0.0; calcRadius(); updateFilePositions(); if(visible && noDirs() && noFiles()) visible = false; if(parent !=0) parent->nodeUpdated(true); } void RDirNode::rotate(float s, float c) { pos = rotate_vec2(pos, s, c); spos = rotate_vec2(spos, s, c); for(std::list::iterator it = children.begin(); it != children.end(); it++) { RDirNode* child = (*it); child->rotate(s, c); } } void RDirNode::rotate(float s, float c, const vec2& centre) { pos = rotate_vec2(pos - centre, s, c) + centre; spos = rotate_vec2(spos - centre, s, c) + centre; for(std::list::iterator it = children.begin(); it != children.end(); it++) { RDirNode* child = (*it); child->rotate(s, c, centre); } } void RDirNode::setPos(const vec2 & pos) { this->pos = pos; } //returns true if supplied path prefixes the nodes path bool RDirNode::prefixedBy(const std::string & path) const { if(path.empty()) return false; if(path[path.size()-1] != '/') return abspath.find(path + std::string("/")) == 0; else return abspath.find(path) == 0; } const std::string & RDirNode::getPath() const{ return abspath; } RDirNode* RDirNode::getParent() const{ return parent; } bool RDirNode::isDir(const std::string& path) const { if(prefixedBy(path)) return true; if(path.find(abspath) != 0) return false; for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { if((*it)->isDir(path)) return true; } return false; } //finds directories closest to the root directory prefixed by path (eg foo/ may match just foo/ or could also match foo/bar1, foo/bar2, ... if foo/ doesn't exist). void RDirNode::findDirs(const std::string& path, std::list& dirs) { if(prefixedBy(path)) { dirs.push_back(this); return; } for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { (*it)->findDirs(path, dirs); } } void RDirNode::getFilesRecursive(std::list& files) const { //add this dirs files files.insert(files.begin(), this->files.begin(), this->files.end()); for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { (*it)->getFilesRecursive(files); } } int RDirNode::getDepth() const{ return depth; } void RDirNode::adjustPath() { //update display path int parent_token_offset = 0; path_token_offset = abspath.size(); if(parent != 0) { parent_token_offset = parent->getTokenOffset(); //debugLog("abspath.substr arguments: %d %d %s size = %d\n", parent_token_offset, abspath.size()-parent_token_offset-1, abspath.c_str(), abspath.size()); path_token = abspath.substr(parent_token_offset, abspath.size()-parent_token_offset-1); path_token_offset = abspath.size(); //debugLog("new token %s\n", path_token.c_str()); } } void RDirNode::setParent(RDirNode* parent) { if(parent != 0 && this->parent == parent) return; this->parent = parent; adjustPath(); adjustDepth(); } void RDirNode::adjustDepth() { if(parent == 0) { depth = 1; } else { depth = parent->getDepth() + 1; } for(RDirNode* child : children) { child->adjustDepth(); } } void RDirNode::addNode(RDirNode* node) { // does this node prefix any other nodes, if so, add them to it std::vector matches; std::string path = node->getPath(); //debugLog("adding node %s to %s\n", path.c_str(), abspath.c_str()); for(std::list::iterator it = children.begin(); it != children.end(); ) { RDirNode* child = (*it); if(child->prefixedBy(path)) { it = children.erase(it); node->addNode(child); } else { it++; } } // add to this node children.push_back(node); node->setParent(this); //debugLog("added node %s to %s\n", node->getPath().c_str(), getPath().c_str()); nodeUpdated(false); } RDirNode* RDirNode::getRoot() { if(parent==0) return this; return parent->getRoot(); } // note - you still need to delete the file yourself bool RDirNode::removeFile(RFile* f) { //doesnt match this path at all if(f->path.find(abspath) != 0) { return false; } //is this dir - add to this node if(f->path.compare(abspath) == 0) { for(std::list::iterator it = files.begin(); it != files.end(); it++) { if((*it)==f) { files.erase(it); if(!f->isHidden()) visible_count--; fileUpdated(false); return true; } } return false; } //does this belong to one of the children ? for(std::list::iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); bool removed = node->removeFile(f); if(removed) { //fprintf(stderr, "%s file removed from a child. child file count=%d, dir count =%d\n", getPath().c_str(), node->fileCount(), node->dirCount()); //node->printFiles(); //node is now empty, reap! if(node->noFiles() && node->noDirs()) { children.erase(it); //fprintf(stderr, "deleting node %s from %s\n", node->getPath().c_str(), getPath().c_str()); delete node; nodeUpdated(false); } return true; } } return false; } void RDirNode::printFiles() { for(std::list::iterator it = files.begin(); it != files.end(); it++) { RFile* file = (*it); fprintf(stderr, "%s: %s %s\n", getPath().c_str(), file->fullpath.c_str() , file->isHidden() ? "hidden " : ""); } } void RDirNode::addVisible() { visible_count++; visible = true; } bool RDirNode::isVisible() { if(visible) return true; for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { if((*it)->isVisible()) { visible = true; return true; } } return false; } int RDirNode::visibleFileCount() const{ return visible_count; } int RDirNode::fileCount() const{ return files.size(); } bool RDirNode::noFiles() const{ return files.empty(); } std::string RDirNode::commonPathPrefix(const std::string & str) const{ size_t c = 0; int slash = -1; while(cpath.find(abspath) != 0) { if(parent != 0) return false; //if this is the root node (ie no parent), we fork it //if we encounter a file with a non matching path to the //current root path. the calling process then checks if //the root now has a parent node, and changes the pointer. RDirNode* newparent; std::string common = commonPathPrefix(f->path); if(common.size()==0) common = "/"; newparent = new RDirNode(0, common); newparent->addNode(this); return newparent->addFile(f); } //simply change path of node and add this to it if( parent==0 && abspath == "/" && f->path.compare(abspath) != 0 && noFiles() && noDirs()) { debugLog("modifying root path to %s", f->path.c_str()); changePath(f->path); } //is this dir - add to this node if(f->path.compare(abspath) == 0) { //debugLog("addFile %s to %s\n", f->fullpath.c_str(), abspath.c_str()); files.push_back(f); if(!f->isHidden()) visible_count++; f->setDir(this); fileUpdated(false); return true; } bool added = false; //does this belong to one of the children ? for(std::list::iterator it = children.begin(); it != children.end(); it++) { RDirNode* child = (*it); added = child->addFile(f); if(added) break; } if(added && parent != 0) return true; //do we have a file in this directory thats fullpath is a prefix of this file, if so //that file is actually a directory - the file should be removed, and a directory with that path added //if this is the root node we do this regardless of if the file was added to a child node for(std::list::const_iterator it = files.begin(); it != files.end(); it++) { RFile* file = (*it); if(f->path.find(file->fullpath) == 0) { //fprintf(stderr, "removing %s as is actually the directory of %s\n", file->fullpath.c_str(), f->fullpath.c_str()); file->remove(); break; } } if(added) return true; //add new child, add it to that //if commonpath is longer than abspath, add intermediate node, else just add at the files path RDirNode* node = new RDirNode(this, f->path); node->addFile(f); addNode(node); // do we have dir nodes, with a common path element greater than abspath, // if so create another node, and move those nodes there std::string commonpath; vec2 commonPos; for(std::list::iterator it = children.begin(); it != children.end(); it++) { RDirNode* child = (*it); std::string common = child->commonPathPrefix(f->path); if(common.size() > abspath.size() && common != f->path) { commonpath = common; commonPos = child->getPos(); break; } } // redistribute to new common node if(commonpath.size() > abspath.size()) { //debugLog("common path %s\n", commonpath.c_str()); RDirNode* cnode = new RDirNode(this, commonpath); cnode->setPos(commonPos); for(std::list::iterator it = children.begin(); it != children.end();) { RDirNode* child = (*it); if(child->prefixedBy(commonpath)) { //debugLog("this path = %s, commonpath = %s, path = %s\n", abspath.c_str(), commonpath.c_str(), child->getPath().c_str()); it = children.erase(it); cnode->addNode(child); continue; } it++; } addNode(cnode); } return true; } float RDirNode::getParentRadius() const{ return parent_radius; } float RDirNode::getRadius() const{ return dir_radius; } float RDirNode::getRadiusSqrt() const{ return dir_radius_sqrt; } vec3 RDirNode::averageFileColour() const{ vec3 av; int count = 0; for(std::list::const_iterator it = files.begin(); it != files.end(); it++) { RFile* file = (*it); if(file->isHidden()) continue; av += file->getColour(); count++; } if(count>0) av *= (1.0f/(float)count); count = 0; for(std::list::const_iterator it = children.begin(); it != children.end();it++) { RDirNode* child = (*it); av += child->averageFileColour(); count++; } if(count>0) av *= (1.0f/(float)count); return av; } const vec4 & RDirNode::getColour() const{ return col; } void RDirNode::calcColour() { // make branch brighter if recently accessed float brightness = std::max(0.6f, 1.0f - std::min(1.0f, since_last_node_change / 3.0f)); col = vec4(brightness, brightness, brightness, 1.0); int fcount = 0; for(std::list::iterator it = files.begin(); it != files.end(); it++) { RFile* file = (*it); if(file->isHidden()) continue;; vec3 filecol = file->getColour() * brightness; float a = file->getAlpha(); col += vec4(filecol.x, filecol.y, filecol.z, a); fcount++; } this->col /= (float) fcount + 1.0; } float RDirNode::getArea() const{ return dir_area; } void RDirNode::calcRadius() { float total_file_area = file_area * visible_count; dir_area = total_file_area; //float parent_circ = 0.0; for(std::list::iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); dir_area += node->getArea(); // parent_circ += node->getRadiusSqrt(); } this->dir_radius = std::max(1.0f, (float)sqrt(dir_area)) * gGourceDirPadding; //this->dir_radius_sqrt = sqrt(dir_radius); //dir_radius_sqrt is not used // this->parent_radius = std::max(1.0, parent_circ / PI); this->parent_radius = std::max(1.0f, (float) sqrt(total_file_area) * gGourceDirPadding); } float RDirNode::distanceToParent() const{ float posd = glm::length(parent->getPos() - pos); float distance = posd - (dir_radius + parent->getParentRadius()); return distance; } void RDirNode::applyForceDir(RDirNode* node) { if(node == this) return; vec2 dir = node->getPos() - pos; float posd2 = glm::length2(dir); float myradius = getRadius(); float your_radius = node->getRadius(); float sumradius = (myradius + your_radius); float distance2 = posd2 - sumradius*sumradius; if(distance2>0.0) return; float posd = sqrt(posd2); float distance = posd - myradius - your_radius; //resolve overlap if(posd < 0.00001) { accel += normalise(vec2( (rand() % 100) - 50, (rand() % 100) - 50)); return; } accel += distance * normalise(dir); } const vec2 & RDirNode::getPos() const{ return pos; } bool RDirNode::isParent(RDirNode* node) const { if(node==parent) return true; if(parent==0) return false; return parent->isParent(node); } bool RDirNode::empty() const{ return (visible_count==0 && noDirs()) ? true : false; } void RDirNode::applyForces(QuadTree & quadtree) { //child nodes for(std::list::iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->applyForces(quadtree); } if(parent == 0) return; DirForceFunctor dff(this); quadtree.visitItemsInBounds(quadItemBounds, dff); gGourceDirNodeInnerLoops += dff.getLoopCount(); //always call on parent no matter how far away applyForceDir(parent); //pull towards parent float parent_dist = distanceToParent(); // * dirs should attract to sit on the radius of the parent dir ie: // should attract to distance_to_parent * normal_to_parent accel += gGourceForceGravity * parent_dist * normalise(parent->getPos() - pos); // * dirs should be pushed along the parent_parent to parent normal by a force smaller than the parent radius force RDirNode* pparent = parent->getParent(); if(pparent != 0) { vec2 parent_edge = (parent->getPos() - pparent->getPos()); vec2 parent_edge_normal = normalise(parent_edge); vec2 dest = (parent->getPos() + (parent->getRadius() + getRadius()) * parent_edge_normal) - pos; accel += dest; } // * dirs should repulse from other dirs of this parent const std::list & siblings = parent->getChildren(); if(!siblings.empty()) { vec2 sib_accel; int visible = 1; for(std::list::const_iterator it = siblings.begin(); it != siblings.end(); it++) { RDirNode* node = (*it); if(node == this) continue; if(!node->isVisible()) continue; visible++; sib_accel -= normalise(node->getPos() - pos); } //parent circumfrence divided by the number of visible child nodes if(visible>1) { float slice_size = (parent->getRadius() * PI) / (float) (visible+1); sib_accel *= slice_size; accel += sib_accel; } } } void RDirNode::debug(int indent) const{ std::string indentstr; while(indentstr.size() < indent) indentstr += " "; debugLog("%s%s", indentstr.c_str(), abspath.c_str()); for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->debug(indent+1); } } int RDirNode::totalFileCount() const{ int total = visibleFileCount(); for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); total += node->visibleFileCount(); } return total; } int RDirNode::totalDirCount() const{ int total = 1; for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); total += node->totalDirCount(); } return total; } int RDirNode::dirCount() const{ return children.size(); } bool RDirNode::noDirs() const{ return children.empty(); } const std::list & RDirNode::getChildren() const{ return children; } void RDirNode::updateSplinePoint(float dt) { if(parent == 0) return; //update the spline point vec2 td = (parent->getPos() - pos) * 0.5f; vec2 mid = pos + td;// - td.perpendicular() * pos.normal();// * 10.0; vec2 delta = (mid - spos); //dont let spos get more than half the length of the distance behind if(glm::length2(delta) > glm::length2(td)) { spos += normalise(delta) * (glm::length(delta) - glm::length(td)); } spos += delta * std::min(1.0f, dt * 2.0f); } void RDirNode::setInitialPosition() { RDirNode* parentP = parent->getParent(); pos = parent->getPos(); //offset position by some pseudo-randomness if(parentP != 0) { //pos += ((parent->getPos() - parentP->getPos()).normal() * 2.0 + vec2Hash(abspath)).normal(); pos += normalise(normalise(parent->getPos() - parentP->getPos()) * 2.0f + vec2Hash(abspath)); } else { pos += vec2Hash(abspath); } //the spline point spos = pos - (parent->getPos() - pos) * 0.5f; position_initialized=true; } void RDirNode::move(float dt) { //the root node is the centre of the world if(parent == 0) { return; } //initial position if(!empty() && !position_initialized) { setInitialPosition(); } pos += accel * dt; if(gGourceSettings.elasticity>0.0) { vec2 diff = (accel - prev_accel); float m = dt * gGourceSettings.elasticity; vec2 accel3 = prev_accel * (1.0f-m) + diff * m; pos += accel3; prev_accel = accel3; } //accel = accel * std::max(0.0f, (1.0f - dt*10.0f)); accel = vec2(0.0, 0.0); } const vec2 & RDirNode::getNodeNormal() const{ return node_normal; } vec2 RDirNode::calcFileDest(int max_files, int file_no) { float arc = 1.0/(float)max_files; float frac = arc * 0.5 + arc * file_no; vec2 dest = vec2(sinf(frac*PI*2.0), cosf(frac*PI*2.0)); return dest; } void RDirNode::updateFilePositions() { int max_files = 1; int diameter = 1; int file_no = 0; float d = 0.0; int files_left = visible_count; for(std::list::iterator it = files.begin(); it!=files.end(); it++) { RFile* f = *it; if(f->isHidden()) { f->setDest(vec2(0.0,0.0)); f->setDistance(0.0f); continue; } vec2 dest = calcFileDest(max_files, file_no); f->setDest(dest); f->setDistance(d); files_left--; file_no++; if(file_no>=max_files) { diameter++; d += gGourceFileDiameter; max_files = (int) std::max(1.0, diameter*PI); if(files_leftgetProjectedPos(), parent->getColour(), projected_pos, col, projected_spos); } for(std::list::iterator it = children.begin(); it != children.end(); it++) { RDirNode* child = *it; child->calcEdges(); } } void RDirNode::logic(float dt) { //move move(dt); updateSplinePoint(dt); //update node normal if(parent != 0) { node_normal = normalise(pos - parent->getPos()); } //update files for(std::list::iterator it = files.begin(); it!=files.end(); it++) { RFile* f = *it; f->logic(dt); } //update child nodes for(std::list::iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->logic(dt); } //update colour calcColour(); //update tickers if(visible) since_node_visible += dt; since_last_file_change += dt; since_last_node_change += dt; } void RDirNode::drawDirName(FXFont& dirfont) const{ if(parent==0) return; if(gGourceSettings.hide_dirnames) return; if(gGourceSettings.dir_name_depth > 0 && gGourceSettings.dir_name_depth < (depth-1)) return; if(!gGourceSettings.highlight_dirs && since_last_node_change > 5.0) return; float alpha = gGourceSettings.highlight_dirs ? 1.0 : std::max(0.0f, 5.0f - since_last_node_change) / 5.0f; vec2 label_pos = spline.getLabelPos(); dirfont.setAlpha(alpha); dirfont.draw(label_pos.x, label_pos.y, path_token); } void RDirNode::calcScreenPos(GLint* viewport, GLdouble* modelview, GLdouble* projection) { static GLdouble screen_x, screen_y, screen_z; gluProject( pos.x, pos.y, 0.0f, modelview, projection, viewport, &screen_x, &screen_y, &screen_z); screen_y = (float)viewport[3] - screen_y; projected_pos.x = screen_x; projected_pos.y = screen_y; gluProject( spos.x, spos.y, 0.0f, modelview, projection, viewport, &screen_x, &screen_y, &screen_z); screen_y = (float)viewport[3] - screen_y; projected_spos.x = screen_x; projected_spos.y = screen_y; static vec2 selected_offset(5.5f, -2.0f); static vec2 unselected_offset(5.5f, -1.0f); if(!gGourceSettings.hide_filenames) { //first pass - calculate positions of names for(std::list::const_iterator it = files.begin(); it!=files.end(); it++) { RFile* f = *it; f->calcScreenPos(viewport, modelview, projection); } } for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->calcScreenPos(viewport, modelview, projection); } } void RDirNode::drawNames(FXFont& dirfont) { if(!gGourceSettings.hide_dirnames && isVisible()) { drawDirName(dirfont); } if(!gGourceSettings.hide_filenames) { if(!(gGourceSettings.hide_filenames || gGourceSettings.hide_files) && in_frustum) { for(std::list::const_iterator it = files.begin(); it!=files.end(); it++) { RFile* f = *it; if(!f->isSelected()) f->drawName(); } } } for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->drawNames(dirfont); } } void RDirNode::checkFrustum(const Frustum& frustum) { in_frustum = frustum.intersects(quadItemBounds); for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->checkFrustum(frustum); } } void RDirNode::drawShadows(float dt) const{ if(in_frustum) { glPushMatrix(); glTranslatef(pos.x, pos.y, 0.0); //draw files for(std::list::const_iterator it = files.begin(); it!=files.end(); it++) { RFile* f = *it; if(f->isHidden()) continue; f->drawShadow(dt); } glPopMatrix(); } for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->drawShadows(dt); } } void RDirNode::updateFilesVBO(quadbuf& buffer, float dt) const{ if(in_frustum) { for(std::list::const_iterator it = files.begin(); it!=files.end(); it++) { RFile* f = *it; if(f->isHidden()) continue; vec3 col = f->getColour(); float alpha = f->getAlpha(); buffer.add(f->graphic->textureid, f->getAbsolutePos() - f->dims*0.5f, f->dims, vec4(col.x, col.y, col.z, alpha)); } } for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->updateFilesVBO(buffer,dt); } } void RDirNode::updateBloomVBO(bloombuf& buffer, float dt) { if(in_frustum && isVisible()) { float bloom_radius = dir_radius * 2.0 * gGourceSettings.bloom_multiplier; float bloom_diameter = bloom_radius * 2.0; vec4 bloom_col = col * gGourceSettings.bloom_intensity; vec4 bloom_texcoords(bloom_radius, pos.x, pos.y, 0.0f); vec2 bloom_dims(bloom_diameter, bloom_diameter); buffer.add(0, pos - bloom_dims*0.5f,bloom_dims, vec4(bloom_col.x, bloom_col.y, bloom_col.z, 1.0f), bloom_texcoords); } for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->updateBloomVBO(buffer,dt); } } void RDirNode::drawFiles(float dt) const{ if(in_frustum) { glPushMatrix(); glTranslatef(pos.x, pos.y, 0.0); //draw files for(std::list::const_iterator it = files.begin(); it!=files.end(); it++) { RFile* f = *it; if(f->isHidden()) continue; f->draw(dt); } glPopMatrix(); } for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->drawFiles(dt); } } const vec2 & RDirNode::getSPos() const{ return projected_spos; } const vec2 & RDirNode::getProjectedPos() const{ return projected_pos; } void RDirNode::updateEdgeVBO(quadbuf& buffer) const { if(parent!=0 && (!gGourceSettings.hide_root || parent->parent !=0)) spline.drawToVBO(buffer); for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* child = (*it); if(child->isVisible()) { child->updateEdgeVBO(buffer); } } } void RDirNode::drawEdgeShadows() const{ if(parent!=0 && (!gGourceSettings.hide_root || parent->parent !=0)) spline.drawShadow(); for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* child = (*it); //draw edge - assumes calcEdges() called before hand so spline will exist if(child->isVisible()) { child->drawEdgeShadows(); } } } void RDirNode::drawEdges() const{ if(parent!=0 && (!gGourceSettings.hide_root || parent->parent !=0)) spline.draw(); for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* child = (*it); //draw edge - assumes calcEdges() called before hand so spline will exist if(child->isVisible()) { child->drawEdges(); } } } void RDirNode::drawBloom(float dt){ if(in_frustum && isVisible()) { float bloom_radius = dir_radius * 2.0 * gGourceSettings.bloom_multiplier; vec4 bloom_col = col * gGourceSettings.bloom_intensity; glColor4f(bloom_col.x, bloom_col.y, bloom_col.z, 1.0); glPushMatrix(); glTranslatef(pos.x, pos.y, 0.0); glBegin(GL_QUADS); glTexCoord2f(1.0f, 1.0f); glVertex2f(bloom_radius,bloom_radius); glTexCoord2f(1.0f, 0.0f); glVertex2f(bloom_radius,-bloom_radius); glTexCoord2f(0.0f, 0.0f); glVertex2f(-bloom_radius,-bloom_radius); glTexCoord2f(0.0f, 1.0f); glVertex2f(-bloom_radius,bloom_radius); glEnd(); glPopMatrix(); } for(std::list::const_iterator it = children.begin(); it != children.end(); it++) { RDirNode* node = (*it); node->drawBloom(dt); } } void RDirNode::updateQuadItemBounds() { float radius = getRadius(); vec2 radoffset(radius, radius); //set bounds quadItemBounds.set(pos - radoffset, pos + radoffset); } gource-0.56/src/key.cpp0000644002342600234260000001745315152463042014667 0ustar andrewcandrewc#include "key.h" // File Key Entry // a string for the file ext and a colour FileKeyEntry::FileKeyEntry(const FXFont& font, const std::string& ext, const vec3& colour) { this->ext = ext; this->colour = colour; this->pos_y = -1.0f; this->font = font; this->font.dropShadow(false); shadow = vec2(3.0, 3.0); width = 90.0f * gGourceSettings.font_scale; height = gGourceSettings.scaled_font_size + 4.0f; left_margin = gGourceSettings.scaled_font_size + 4.0f; count = 0; brightness = 1.0f; alpha = 0.0f; move_elapsed = 1.0f; src_y = -1.0f; dest_y = -1.0f; show = true; display_ext = ext; bool truncated = false; while(font.getWidth(display_ext) > width - 15.0f * gGourceSettings.font_scale) { display_ext.resize(display_ext.size()-1); truncated = true; } if(truncated) { display_ext += std::string("..."); } } const vec3& FileKeyEntry::getColour() const { return colour; } const std::string& FileKeyEntry::getExt() const { return ext; } void FileKeyEntry::setShow(bool show) { this->show = show; } bool FileKeyEntry::isFinished() const { return (count<=0 && alpha <= 0.0f); } void FileKeyEntry::colourize() { colour = ext.empty() ? vec3(1.0f, 1.0f, 1.0f) : colourHash(ext); } void FileKeyEntry::inc() { count++; } void FileKeyEntry::dec() { count--; } int FileKeyEntry::getCount() const { return count; } void FileKeyEntry::setCount(int count) { this->count = count; } void FileKeyEntry::setDestY(float dest_y) { if(dest_y == this->dest_y) return; this->dest_y = dest_y; src_y = pos_y; move_elapsed = 0.0f; } void FileKeyEntry::logic(float dt) { if(count<=0 || !show) { alpha = std::max(0.0f, alpha - dt); } else if(alpha < 1.0f) { alpha = std::min(1.0f, alpha + dt); } //move towards dest if(pos_y != dest_y) { //initialize pos from dest if new if(pos_y < 0.0f) pos_y = dest_y; else { move_elapsed += dt; if(move_elapsed >= 1.0f) pos_y = dest_y; else pos_y = src_y + (dest_y - src_y) * move_elapsed; } } pos = vec2(alpha * left_margin, pos_y); } void FileKeyEntry::draw() { if(isFinished()) return; //label.draw(); glDisable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(0.0f, 0.0f, 0.0f, alpha * 0.333f); glPushMatrix(); glTranslatef(shadow.x, shadow.y, 0.0f); glBegin(GL_QUADS); glVertex2f(pos.x, pos.y); glVertex2f(pos.x, pos.y + height); glVertex2f(pos.x+width, pos.y + height); glVertex2f(pos.x+width, pos.y); glEnd(); glPopMatrix(); glBegin(GL_QUADS); glColor4f(colour.x * 0.5f, colour.y * 0.5f, colour.z * 0.5f, alpha); glVertex2f(pos.x, pos.y); glVertex2f(pos.x, pos.y + height); glColor4f(colour.x, colour.y, colour.z, alpha); glVertex2f(pos.x + width, pos.y + height); glVertex2f(pos.x + width, pos.y); glEnd(); glEnable(GL_TEXTURE_2D); font.setColour(vec4(1.0f, 1.0f, 1.0f, alpha)); font.dropShadow(false); font.draw((int)pos.x+2, (int)pos.y+3, display_ext.c_str()); font.dropShadow(true); font.print((int)pos.x+width+4, (int)pos.y+3, "%d", count); } // Key //maintain a key of all the current file types, updated periodically. //new entries slide in and out / fade in fade out FileKey::FileKey() { } FileKey::FileKey(float update_interval) { this->update_interval = update_interval; interval_remaining = 1.0f; font = fontmanager.grab(gGourceSettings.font_file, gGourceSettings.scaled_font_size); font.dropShadow(false); font.roundCoordinates(false); show = true; } FileKey::~FileKey() { active_keys.clear(); for(std::map::iterator it = keymap.begin(); it != keymap.end(); it++) { FileKeyEntry* entry = it->second; delete entry; } keymap.clear(); } void FileKey::setShow(bool show) { this->show = show; for(std::vector::iterator it = active_keys.begin(); it != active_keys.end(); it++) { FileKeyEntry* entry = *it; entry->setShow(show); } interval_remaining = 0.0f; } void FileKey::colourize() { for(std::vector::iterator it = active_keys.begin(); it != active_keys.end(); it++) { FileKeyEntry* entry = *it; entry->colourize(); } } void FileKey::clear() { for(std::vector::iterator it = active_keys.begin(); it != active_keys.end(); it++) { FileKeyEntry* entry = *it; entry->setCount(0); } interval_remaining = 0.0f; } void FileKey::inc(RFile* file) { FileKeyEntry* entry = 0; std::map::iterator result = keymap.find(file->ext); if(result != keymap.end()) { entry = result->second; } else { entry = new FileKeyEntry(font, file->ext, file->getFileColour()); keymap[file->ext] = entry; } entry->inc(); } //decrement count of extension. if drops to zero, mark it for removal void FileKey::dec(RFile* file) { std::map::iterator result = keymap.find(file->ext); if(result == keymap.end()) return; FileKeyEntry* entry = result->second; entry->dec(); } bool file_key_entry_sort (const FileKeyEntry* a, const FileKeyEntry* b) { //sort by count if(a->getCount() != b->getCount()) return (a->getCount() > b->getCount()); //then by name (tie breaker) return a->getExt().compare(b->getExt()) < 0; } void FileKey::logic(float dt) { interval_remaining -= dt; //recalculate active_keys if(interval_remaining <= 0.0f) { if(show) { active_keys.clear(); std::vector finished_keys; for(std::map::iterator it = keymap.begin(); it != keymap.end(); it++) { FileKeyEntry* entry = it->second; if(!entry->isFinished()) { active_keys.push_back(entry); } else { finished_keys.push_back(entry); } } //sort std::sort(active_keys.begin(), active_keys.end(), file_key_entry_sort); //limit to entries we can put onto the screen int max_visible_entries = std::max(0, (int)((display.height - 150.0f) / 20.0f)); if (active_keys.size() > max_visible_entries) { active_keys.resize(max_visible_entries); } //set position float offset_y = gGourceSettings.scaled_font_size + 6.0f; float key_y = offset_y; for(std::vector::iterator it = active_keys.begin(); it != active_keys.end(); it++) { FileKeyEntry* entry = *it; if(entry->getCount()>0) { entry->setDestY(key_y); } key_y += offset_y; } //remove and delete finished entries for(std::vector::iterator it = finished_keys.begin(); it != finished_keys.end(); it++) { FileKeyEntry* entry = *it; keymap.erase(entry->getExt()); delete entry; } } interval_remaining = update_interval; } for(std::vector::iterator it = active_keys.begin(); it != active_keys.end(); it++) { FileKeyEntry* entry = *it; entry->logic(dt); } } void FileKey::draw() { for(std::vector::iterator it = active_keys.begin(); it != active_keys.end(); it++) { FileKeyEntry* entry = *it; entry->draw(); } } gource-0.56/src/textbox.h0000644002342600234260000000306315152463042015231 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef TEXT_BOX_H #define TEXT_BOX_H #include #include #include "core/display.h" #include "core/vectors.h" #include "core/fxfont.h" class TextBox { std::vector content; vec3 colour; float alpha; float brightness; vec2 corner; vec2 shadow; FXFont font; int max_width_chars; int rect_width; int rect_height; bool visible; public: TextBox(); TextBox(const FXFont& font); void hide(); void show(); void clear(); void setPos(const vec2& pos, bool adjust = false); void setColour(const vec3& colour); void setAlpha(float alpha); void setBrightness(float brightness); void addLine(std::string str); void setText(const std::string& str); void setText(const std::vector& content); void draw() const; }; #endif gource-0.56/src/file.cpp0000664002342600234260000001641415152463042015014 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "file.h" float gGourceFileDiameter = 8.0; std::vector gGourceRemovedFiles; FXFont file_selected_font; FXFont file_font; RFile::RFile(const std::string & name, const vec3 & colour, const vec2 & pos, int tagid) : Pawn(name,pos,tagid) { hidden = true; size = gGourceFileDiameter * 1.05; radius = size * 0.5; setGraphic(gGourceSettings.file_graphic); speed = 5.0; nametime = gGourceSettings.filename_time; name_interval = nametime; namecol = vec3(1.0, 1.0, 1.0); file_colour = colour; last_action = 0.0f; fade_start = -1.0f; removed_timestamp = 0; expired = false; forced_removal = false; removing = false; shadow = true; distance = 0; setFilename(name); if(!file_selected_font.initialized()) { file_selected_font = fontmanager.grab(gGourceSettings.font_file, 18); file_selected_font.dropShadow(true); file_selected_font.roundCoordinates(false); file_selected_font.setColour(vec4(gGourceSettings.selection_colour, 1.0f)); } if(!file_font.initialized()) { file_font = fontmanager.grab(gGourceSettings.font_file, gGourceSettings.scaled_filename_font_size); file_font.dropShadow(true); file_font.roundCoordinates(false); file_font.setColour(vec4(gGourceSettings.filename_colour, 1.0f)); } setSelected(false); dir = 0; } RFile::~RFile() { } void RFile::remove(time_t removed_timestamp) { last_action = elapsed; fade_start = elapsed; removing = true; this->removed_timestamp = removed_timestamp; } void RFile::remove() { forced_removal = true; remove(0); } void RFile::setDir(RDirNode* dir) { this->dir = dir; } RDirNode* RFile::getDir() const{ return dir; } vec2 RFile::getAbsolutePos() const{ return pos + dir->getPos(); } bool RFile::overlaps(const vec2& pos) const { vec2 abs_pos = getAbsolutePos(); float halfsize_x = size * 0.5f; vec2 halfsize ( halfsize_x, halfsize_x * graphic_ratio ); Bounds2D file_bounds(abs_pos - halfsize, abs_pos + halfsize); return file_bounds.contains(pos); } void RFile::setFilename(const std::string& abs_file_path) { fullpath = abs_file_path; size_t pos = fullpath.rfind('/'); if(pos != std::string::npos) { path = name.substr(0,pos+1); name = name.substr(pos+1, std::string::npos); } else { path = std::string(""); name = abs_file_path; } //trim name to just extension size_t dotsep = name.rfind("."); if(dotsep != std::string::npos && dotsep != name.size()-1) { ext = name.substr(dotsep+1); } else if(gGourceSettings.file_extension_fallback) { ext = name; } } void RFile::colourize() { file_colour = ext.size() ? colourHash(ext) : vec3(1.0f, 1.0f, 1.0f); } const vec3& RFile::getNameColour() const{ return selected ? gGourceSettings.selection_colour : namecol; } void RFile::setFileColour(const vec3 & colour) { file_colour = colour; } const vec3 & RFile::getFileColour() const{ return file_colour; } vec3 RFile::getColour() const{ if(selected) return vec3(1.0f); float lc = elapsed - last_action; if(lc<1.0f) { return touch_colour * (1.0f-lc) + file_colour * lc; } return file_colour; } float RFile::getAlpha() const{ float alpha = Pawn::getAlpha(); //user fades out if not doing anything if(fade_start > 0.0f) { alpha = 1.0 - glm::clamp(elapsed - fade_start, 0.0f, 1.0f); } return alpha; } void RFile::logic(float dt) { Pawn::logic(dt); vec2 dest_pos = dest; /* if(dir->getParent() != 0 && dir->noDirs()) { vec2 dirnorm = dir->getNodeNormal(); dest_pos = dirnorm + dest; }*/ dest_pos = dest_pos * distance; accel = dest_pos - pos; // apply accel vec2 accel2 = accel * speed * dt; if(glm::length2(accel2) > glm::length2(accel)) { accel2 = accel; } pos += accel2; //files have no momentum accel = vec2(0.0f, 0.0f); if(fade_start < 0.0f && gGourceSettings.file_idle_time > 0.0f && (elapsed - last_action) > gGourceSettings.file_idle_time) { fade_start = elapsed; } // has completely faded out if(fade_start > 0.0f && !expired && (elapsed - fade_start) >= 1.0) { expired = true; bool found = false; for(std::vector::iterator it = gGourceRemovedFiles.begin(); it != gGourceRemovedFiles.end(); it++) { if((*it) == this) { found = true; break; } } if(!found) { gGourceRemovedFiles.push_back(this); //fprintf(stderr, "expiring %s\n", fullpath.c_str()); } } if(isHidden() && !forced_removal) elapsed = 0.0; } void RFile::touch(time_t touched_timestamp, const vec3 & colour) { if(forced_removal || (removing && touched_timestamp < removed_timestamp)) return; //fprintf(stderr, "touch %s\n", fullpath.c_str()); fade_start = -1.0f; removing = false; removed_timestamp = 0; last_action = elapsed; touch_colour = colour; //un expire file if touched after being removed if(expired) { for(std::vector::iterator it = gGourceRemovedFiles.begin(); it != gGourceRemovedFiles.end(); it++) { if((*it) == this) { gGourceRemovedFiles.erase(it); break; } } expired=false; } showName(); setHidden(false); dir->fileUpdated(true); } void RFile::setHidden(bool hidden) { if(this->hidden==true && hidden==false && dir !=0) { dir->addVisible(); } Pawn::setHidden(hidden); } void RFile::calcScreenPos(GLint* viewport, GLdouble* modelview, GLdouble* projection) { static GLdouble screen_x, screen_y, screen_z; vec2 text_pos = getAbsolutePos(); text_pos.x += 5.5f; if(selected) text_pos.y -= 2.0f; else text_pos.y -= 1.0f; gluProject( text_pos.x, text_pos.y, 0.0f, modelview, projection, viewport, &screen_x, &screen_y, &screen_z); screen_y = (float)viewport[3] - screen_y; screenpos.x = screen_x; screenpos.y = screen_y; } void RFile::drawNameText(float alpha) { if(!selected && alpha <= 0.01) return; float name_alpha = selected ? 1.0 : alpha; if(selected) { file_selected_font.draw(screenpos.x, screenpos.y, name); } else { file_font.setAlpha(name_alpha); file_font.draw(screenpos.x, screenpos.y, gGourceSettings.file_extensions ? ext : name); } } void RFile::draw(float dt) { Pawn::draw(dt); glLoadName(0); } gource-0.56/src/textbox.cpp0000644002342600234260000000756215152463042015574 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "textbox.h" TextBox::TextBox() { } TextBox::TextBox(const FXFont& font) { this->font = font; shadow = vec2(3.0f, 3.0f); colour = vec3(0.7f, 0.7f, 0.7f); corner = vec2(0.0f,0.0f); alpha = 1.0f; brightness = 1.0f; max_width_chars = 1024; rect_width = 0; rect_height = 0; visible = false; } void TextBox::hide() { visible = false; } void TextBox::show() { visible = true; } void TextBox::setBrightness(float brightness) { this->brightness = brightness; } void TextBox::setColour(const vec3& colour) { this->colour = colour; } void TextBox::setAlpha(float alpha) { this->alpha = alpha; } void TextBox::clear() { content.clear(); rect_width = 0; rect_height = 2; } void TextBox::addLine(std::string str) { if(max_width_chars> 0 && str.size() > max_width_chars) { str = str.substr(0, max_width_chars); } int width = font.getWidth(str) + 6; if(width > rect_width) rect_width = width; rect_height += (font.getFontSize()+4); content.push_back(str); } void TextBox::setText(const std::string& str) { clear(); addLine(str); } void TextBox::setText(const std::vector& content) { clear(); for(std::vector::const_iterator it = content.begin(); it != content.end(); it++) { addLine(*it); } } void TextBox::setPos(const vec2& pos, bool adjust) { corner = pos; if(!adjust) return; int fontheight = font.getFontSize() + 4; corner.y -= rect_height; if((corner.x + rect_width) > display.width) { if((corner.x - rect_width - fontheight )>0) { corner.x -= rect_width; } else { corner.x = display.width - rect_width; } } if(corner.y < 0) corner.y += rect_height + fontheight; if(corner.y +rect_height > display.height) corner.y -= rect_height; } void TextBox::draw() const { if(!visible) return; glDisable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(0.0f, 0.0f, 0.0f, alpha * 0.333f); glPushMatrix(); glTranslatef(shadow.x, shadow.y, 0.0f); glBegin(GL_QUADS); glVertex2f(corner.x, corner.y); glVertex2f(corner.x, corner.y + rect_height); glVertex2f(corner.x+rect_width, corner.y + rect_height); glVertex2f(corner.x+rect_width, corner.y); glEnd(); glPopMatrix(); glColor4f(colour.x * brightness, colour.y * brightness, colour.z * brightness, alpha); glBegin(GL_QUADS); glVertex2f(corner.x, corner.y); glVertex2f(corner.x, corner.y + rect_height); glVertex2f(corner.x+rect_width, corner.y + rect_height); glVertex2f(corner.x+rect_width, corner.y); glEnd(); glEnable(GL_TEXTURE_2D); glColor4f(1.0f, 1.0f, 1.0f, alpha); int yinc = 3; std::vector::const_iterator it; for(it = content.begin(); it != content.end(); it++) { font.draw((int)corner.x+2, (int)corner.y+yinc, (*it).c_str()); yinc += font.getFontSize() + 4; } } gource-0.56/src/formats/0000775002342600234260000000000015152463042015036 5ustar andrewcandrewcgource-0.56/src/formats/custom.cpp0000664002342600234260000000544615152463042017065 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "custom.h" #include "../gource_settings.h" Regex custom_regex("^(?:\\xEF\\xBB\\xBF)?([^|]+)\\|([^|]*)\\|([ADM]?)\\|([^|]+)(?:\\|#?([a-fA-F0-9]{6}))?"); CustomLog::CustomLog(const std::string& logfile) : RCommitLog(logfile) { } vec3 CustomLog::parseColour(const std::string& cstr) { vec3 colour; int r,g,b; if(sscanf(cstr.c_str(), "%02x%02x%02x", &r, &g, &b) == 3) { colour = vec3( r, g, b ); colour /= 255.0f; } return colour; } // parse modified cvs format log entries bool CustomLog::parseCommit(RCommit& commit) { while(parseCommitEntry(commit)); return !commit.files.empty(); } bool CustomLog::parseCommitEntry(RCommit& commit) { std::string line; std::vector entries; if(!getNextLine(line)) return false; //custom line if(!custom_regex.match(line, &entries)) return false; time_t timestamp; // Allow timestamp to be a string if(entries[0].size() > 1 && entries[0].find("-", 1) != std::string::npos) { if(!SDLAppSettings::parseDateTime(entries[0], timestamp)) return false; } else { timestamp = (time_t) atoll(entries[0].c_str()); if(!timestamp && entries[0] != "0") return false; } std::string username = (entries[1].size()>0) ? entries[1] : "Unknown"; std::string action = (entries[2].size()>0) ? entries[2] : "A"; //if this file is for the same person and timestamp //we add to the commit, else we save the lastline //and return false if(commit.files.empty()) { commit.timestamp = timestamp; commit.username = username; } else { if(commit.timestamp != timestamp || commit.username != username) { lastline = line; return false; } } bool has_colour = false; vec3 colour; if(entries.size()>=5 && entries[4].size()>0) { has_colour = true; colour = parseColour(entries[4]); } if(has_colour) { commit.addFile(entries[3], action, colour); } else { commit.addFile(entries[3], action); } return true; } gource-0.56/src/formats/gitraw.h0000644002342600234260000000177115152463042016510 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef GITLOG_RAW_H #define GITLOG_RAW_H #include "commitlog.h" #include extern std::string gGourceGitRawLogCommand; class GitRawCommitLog : public RCommitLog { protected: bool parseCommit(RCommit& commit); public: GitRawCommitLog(const std::string& logfile); }; #endif gource-0.56/src/formats/bzr.cpp0000644002342600234260000000661015152463042016340 0ustar andrewcandrewc/* Copyright (C) 2010 John Arbash Meinel This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "bzr.h" #include "../gource_settings.h" #include Regex bzr_commit_regex("^ *([\\d.]+) (.+)\t(\\d{4})-(\\d+)-(\\d+)(?: \\{[^}]+})?(?: \\[merge\\])?$"); Regex bzr_file_regex("^ *([AMDR]) (.*[^/])$"); // parse Bazaar log entries (using the gource.style template) std::string BazaarLog::logCommand() { std::string start = (!gGourceSettings.start_date.empty()) ? "date:"+gGourceSettings.start_date : "1"; std::string stop = (!gGourceSettings.stop_date.empty()) ? "date:"+gGourceSettings.stop_date : "-1"; std::string range = str(boost::format("%s..%s") % start % stop); std::string log_command = str(boost::format("bzr log --verbose -r %s --short -n0 --forward") % range); return log_command; } BazaarLog::BazaarLog(const std::string& logfile) : RCommitLog(logfile) { log_command = logCommand(); //can generate log from directory if(!logf && is_dir) { logf = generateLog(logfile); if(logf) { success = true; seekable = true; } } } BaseLog* BazaarLog::generateLog(const std::string& dir) { //does directory have a .bzr ? std::string bzrdir = dir + std::string("/.bzr"); struct stat dirinfo; int stat_rc = stat(bzrdir.c_str(), &dirinfo); if(stat_rc!=0 || !(dirinfo.st_mode & S_IFDIR)) { return 0; } std::string command = getLogCommand(); // do we have this client installed requireExecutable("bzr"); createTempLog(); if(temp_file.size()==0) return 0; char cmd_buff[2048]; snprintf(cmd_buff, 2048, "%s %s > %s", command.c_str(), dir.c_str(), temp_file.c_str()); int command_rc = systemCommand(cmd_buff); if(command_rc != 0) { return 0; } BaseLog* seeklog = new SeekLog(temp_file); return seeklog; } bool BazaarLog::parseCommit(RCommit& commit) { std::string line; std::vector entries; int year, month, day; if(!logf->getNextLine(line)) return false; if (!bzr_commit_regex.match(line, &entries)) { //debugLog("regex failed\n"); return false; } commit.username = entries[1]; year = atoi(entries[2].c_str()); month = atoi(entries[3].c_str()); day = atoi(entries[4].c_str()); struct tm time_str; time_str.tm_year = year - 1900; time_str.tm_mon = month - 1; time_str.tm_mday = day; time_str.tm_hour = 0; time_str.tm_min = 0; time_str.tm_sec = 0; time_str.tm_isdst = -1; commit.timestamp = mktime(&time_str); while(logf->getNextLine(line) && line.size()) { if (!bzr_file_regex.match(line, &entries)) continue; commit.addFile(entries[1], entries[0]); } return true; } gource-0.56/src/formats/gitraw.cpp0000644002342600234260000000543115152463042017040 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "gitraw.h" Regex git_raw_commit("^commit ([0-9a-z]+)"); Regex git_raw_tree("^tree ([0-9a-z]+)"); Regex git_raw_parent("^parent ([0-9a-z]+)"); Regex git_raw_author("^author (.+) <([^@>]+)@?([^>]*)> (\\d+) ([-+]\\d+)"); Regex git_raw_committer("^committer (.+) <([^@>]+)@?([^>]*)> (\\d+) ([-+]\\d+)"); Regex git_raw_file("^:[0-9]+ [0-9]+ [0-9a-z]+\\.* ([0-9a-z]+)\\.* ([A-Z])[ \\t]+(.+)"); // parse git log entries // NOTE: this format is deprecated and exists // to allow existing log files produced in this format to work std::string gGourceGitRawLogCommand = "git log --reverse --raw --pretty=raw"; GitRawCommitLog::GitRawCommitLog(const std::string& logfile) : RCommitLog(logfile, 'c') { log_command = gGourceGitRawLogCommand; } bool GitRawCommitLog::parseCommit(RCommit& commit) { std::string line; std::vector entries; //read commit ref/ branch if(!logf->getNextLine(line)) return false; //commit if(!git_raw_commit.match(line, &entries)) return false; if(!logf->getNextLine(line)) return false; //tree if(!git_raw_tree.match(line, &entries)) return false; if(!logf->getNextLine(line)) return false; //0 or more parents while(git_raw_parent.match(line, &entries)) { if(!logf->getNextLine(line)) return false; } //author - used for display name if(!git_raw_author.match(line, &entries)) return false; commit.username = entries[0]; if(!logf->getNextLine(line)) return false; //committer - used for time (most likely chronological) if(!git_raw_committer.match(line, &entries)) return false; commit.timestamp = atol(entries[3].c_str()); //blank line before message if(!logf->getNextLine(line)) return false; //read commit message while(logf->getNextLine(line) && line.size()) { } //read files while(logf->getNextLine(line) && line.size()) { //debugLog("file??? %s\n", line.c_str()); if(git_raw_file.match(line, &entries)) { commit.addFile(entries[2], entries[1]); } } // commit.debug(); return true; } gource-0.56/src/formats/git.h0000664002342600234260000000204615152463042015774 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef GITLOG_H #define GITLOG_H #include "commitlog.h" class GitCommitLog : public RCommitLog { protected: bool parseCommit(RCommit& commit); BaseLog* generateLog(const std::string& dir); static void readGitVersion(); public: GitCommitLog(const std::string& logfile); static std::string logCommand(); }; #endif gource-0.56/src/formats/cvs-exp.cpp0000644002342600234260000001003315152463042017122 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "cvs-exp.h" Regex cvsexp_commitno_regex("^([0-9]{6}):"); Regex cvsexp_branch_regex("^BRANCH \\[(.+)\\]$"); Regex cvsexp_date_regex("^\\(date: ([0-9]{4})[-/]([0-9]{2})[-/]([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})(?: [+-][0-9]{4})?;(.+)$"); Regex cvsexp_detail_regex("author: ([^;]+); state: ([^;]+);(.+)$"); //Regex cvsexp_lines_regex("lines: \\+([0-9]+) -([0-9]+)"); Regex cvsexp_entry_regex("\\| (.+),v:([0-9.]+),?"); Regex cvsexp_end_regex("^(=+)$"); std::string CVSEXPCommitLog::logCommand() { std::string log_command = "cvs-exp.pl -notree"; return log_command; } CVSEXPCommitLog::CVSEXPCommitLog(const std::string& logfile) : RCommitLog(logfile) { } // parse modified cvs format log entries bool CVSEXPCommitLog::parseCommit(RCommit& commit) { std::string line; std::vector entries; if(!logf->getNextLine(line)) return false; //skip empty line if there is one if(line.size() == 0) { if(!logf->getNextLine(line)) return false; } //read commit no if(!cvsexp_commitno_regex.match(line, &entries)) return false; //int commitno = atoi(entries[0].c_str()); //debugLog("commitno matched\n"); if(!logf->getNextLine(line)) return false; //should be a branch if(cvsexp_branch_regex.match(line, &entries)) { //read next blank line if(!logf->getNextLine(line)) return false; if(line.size()) return false; if(!logf->getNextLine(line)) return false; } //parse date if(!cvsexp_date_regex.match(line, &entries)) return false; //debugLog("date matched\n"); struct tm time_str; time_str.tm_year = atoi(entries[0].c_str()) - 1900; time_str.tm_mon = atoi(entries[1].c_str()) - 1; time_str.tm_mday = atoi(entries[2].c_str()); time_str.tm_hour = atoi(entries[3].c_str()); time_str.tm_min = atoi(entries[4].c_str()); time_str.tm_sec = atoi(entries[5].c_str()); time_str.tm_isdst = -1; commit.timestamp = mktime(&time_str); //parse author,state std::string rest = entries[6]; if(!cvsexp_detail_regex.match(rest, &entries)) return false; //debugLog("author/state matched\n"); commit.username = entries[0]; std::string commit_state = entries[1]; /* not used //if rest is not ')' parse lines rest = entries[2]; // need to parse lines if(rest.size() > 2) { if(!cvsexp_lines_regex.match(rest, &entries)) return false; } */ if(!logf->getNextLine(line)) return false; std::string commit_action = (commit_state == "dead") ? "D" : "M"; while(cvsexp_entry_regex.match(line, &entries)) { //ignore files in Attic - previously deleted file if(entries[0].find("/Attic/") == std::string::npos) { commit.addFile(entries[0], commit_action); } if(!logf->getNextLine(line)) return false; } //read blank line if(!logf->getNextLine(line)) return false; //std::string message; //read commit message while(logf->getNextLine(line) && line.size()) { //if(message.size()) message += std::string("\n"); //message += line; } //read until end of commit or eof while(logf->getNextLine(line)) { if(cvsexp_end_regex.match(line,&entries)) { //debugLog("read end of commit %s\n", entries[0].c_str()); break; } } return true; } gource-0.56/src/formats/apache.cpp0000644002342600234260000000712615152463042016767 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "apache.h" #include const char* months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug" , "Sep", "Oct", "Nov", "Dec" }; Regex apache_entry_start("^(?:[^ ]+ )?([^ ]+) +[^ ]+ +([^ ]+) +\\[(.*?)\\] +(.*)$"); Regex apache_entry_date("(\\d+)/([A-Za-z]+)/(\\d+):(\\d+):(\\d+):(\\d+) ([+-])(\\d+)"); Regex apache_entry_request("\"([^ ]+) +([^ ]+) +([^ ]+)\" +([^ ]+) +([^\\s+]+)(.*)"); Regex apache_entry_agent(" +\"([^\"]+)\" +\"([^\"]+)\" +\"([^\"]+)\""); Regex apache_hostname_parts("([^.]+)(?:\\.([^.]+))?(?:\\.([^.]+))?(?:\\.([^.]+))?(?:\\.([^.]+))?(?:\\.([^.]+))?(?:\\.([^.]+))?(?:\\.([^.]+))?$"); ApacheCombinedLog::ApacheCombinedLog(const std::string& logfile) : RCommitLog(logfile) { } //parse apache access.log entry into components bool ApacheCombinedLog::parseCommit(RCommit& commit) { std::string line; std::vector matches; if(!logf->getNextLine(line)) return false; apache_entry_start.match(line, &matches); if(matches.size()!=4) { return 0; } //get details commit.username = matches[0]; std::string request_str = matches[3]; std::string datestr = matches[2]; apache_entry_date.match(datestr, &matches); if(matches.size()!=8) { return 0; } //parse timestamp int day = atoi(matches[0].c_str()); int year = atoi(matches[2].c_str()); int hour = atoi(matches[3].c_str()); int minute = atoi(matches[4].c_str()); int second = atoi(matches[5].c_str()); int month=0; for(int i=0;i<12;i++) { if(matches[1] == months[i]) { month=i; break; } } struct tm time_str; time_str.tm_year = year - 1900; time_str.tm_mon = month; time_str.tm_mday = day; time_str.tm_hour = hour; time_str.tm_min = minute; time_str.tm_sec = second; time_str.tm_isdst = -1; commit.timestamp = mktime(&time_str); matches.clear(); apache_entry_request.match(request_str, &matches); if(matches.size() < 5) { return false; } std::string rtype = matches[0]; std::string file = matches[1]; std::string proto = matches[2]; int code = atoi(matches[3].c_str()); int bytes = atol(matches[4].c_str()); //remove args from url size_t argpos = file.rfind("?"); if(argpos != std::string::npos) { file = file.substr(0,argpos); } if(file.size()==0) file = "/"; //name index pages if(file[file.size()-1] == '/') { file += "index.html"; } std::string action = "A"; commit.addFile(file, action); std::string refer; std::string agent; if(matches.size() > 5) { std::string agentstr = matches[5]; matches.clear(); apache_entry_agent.match(agentstr, &matches); if(matches.size()>1) { refer = matches[0]; agent = matches[1]; } } return true; } gource-0.56/src/formats/svn.h0000644002342600234260000000213515152463042016014 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef SVNLOG_H #define SVNLOG_H #include "commitlog.h" #include extern std::string gGourceSVNLogCommand; class SVNCommitLog : public RCommitLog { protected: bool parseCommit(RCommit& commit); BaseLog* generateLog(const std::string& dir); std::string logentry; public: SVNCommitLog(const std::string& logfile); static std::string logCommand(); }; #endif gource-0.56/src/formats/svn.cpp0000644002342600234260000001631615152463042016355 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "svn.h" #include "../gource_settings.h" #include #ifdef HAVE_LIBTINYXML #include #else #include "../tinyxml/tinyxml.h" #endif Regex svn_xml_tag("^<\\??xml"); Regex svn_logentry_start("^"); Regex svn_logentry_timestamp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})"); std::string SVNCommitLog::logCommand() { std::string start = (!gGourceSettings.start_date.empty()) ? str(boost::format("{%s}") % gGourceSettings.start_date) : "1"; std::string stop = (!gGourceSettings.stop_date.empty()) ? str(boost::format("{%s}") % gGourceSettings.stop_date) : "HEAD"; std::string range = str(boost::format("%s:%s") % start % stop); std::string log_command = str(boost::format("svn log -r %s --xml --verbose --quiet") % range); return log_command; } SVNCommitLog::SVNCommitLog(const std::string& logfile) : RCommitLog(logfile, '<') { log_command = logCommand(); //can generate log from directory if(!logf && is_dir) { logf = generateLog(logfile); if(logf) { success = true; seekable = true; } } logentry.reserve(1024); } BaseLog* SVNCommitLog::generateLog(const std::string& dir) { //get working directory char cwd_buff[1024]; if(getcwd(cwd_buff, 1024) != cwd_buff) { return 0; } //does directory have a .svn ? std::string gitdir = dir + std::string("/.svn"); struct stat dirinfo; int stat_rc = stat(gitdir.c_str(), &dirinfo); if(stat_rc!=0 || !(dirinfo.st_mode & S_IFDIR)) { return 0; } // do we have this client installed requireExecutable("svn"); std::string command = getLogCommand(); //create temp file createTempLog(); if(temp_file.size()==0) return 0; if(chdir(dir.c_str()) != 0) { return 0; } char cmd_buff[2048]; snprintf(cmd_buff, 2048, "%s > %s", command.c_str(), temp_file.c_str()); int command_rc = systemCommand(cmd_buff); chdir(cwd_buff); if(command_rc != 0) { return 0; } BaseLog* seeklog = new SeekLog(temp_file); return seeklog; } #ifndef HAVE_TIMEGM std::string system_tz; bool system_tz_init = false; time_t __timegm_hack(struct tm* tm) { if(!system_tz_init) { char* current_tz_env = getenv("TZ"); if(current_tz_env != 0) { system_tz = std::string("TZ=") + current_tz_env; } system_tz_init = true; } putenv((char*)"TZ=UTC"); tzset(); time_t timestamp = mktime(tm); if(!system_tz.empty()) { putenv((char*)system_tz.c_str()); } else { #ifdef HAVE_UNSETENV unsetenv("TZ"); #else putenv((char*)"TZ="); #endif } tzset(); return timestamp; } #endif bool SVNCommitLog::parseCommit(RCommit& commit) { //fprintf(stderr,"parsing svn log\n"); std::string line; if(!getNextLine(line)) return false; //start of log entry if(!svn_logentry_start.match(line)) { //is this the start of the document if(!svn_xml_tag.match(line)) return false; //fprintf(stderr,"found xml tag\n"); //if so find the first logentry tag bool found_logentry = false; while(getNextLine(line)) { if(svn_logentry_start.match(line)) { found_logentry = true; break; } } if(!found_logentry) return false; } //fprintf(stderr,"found logentry\n"); logentry.clear(); logentry.append(line); logentry.append("\n"); //fprintf(stderr,"found opening tag\n"); bool endfound = false; while(getNextLine(line)) { logentry.append(line); logentry.append("\n"); if(svn_logentry_end.match(line)) { //fprintf(stderr,"found closing tag\n"); endfound=true; break; } } //incomplete commit if(!endfound) return false; //fprintf(stderr,"read logentry\n"); TiXmlDocument doc; if(!doc.Parse(logentry.c_str())) return false; //fprintf(stderr,"try to parse logentry: %s\n", logentry.c_str()); TiXmlElement* leE = doc.FirstChildElement( "logentry" ); std::vector entries; if(!leE) return false; //parse date TiXmlElement* dateE = leE->FirstChildElement( "date" ); if(!dateE) return false; std::string timestamp_str(dateE->GetText()); if(!svn_logentry_timestamp.match(timestamp_str, &entries)) return false; struct tm time_str; time_str.tm_year = atoi(entries[0].c_str()) - 1900; time_str.tm_mon = atoi(entries[1].c_str()) - 1; time_str.tm_mday = atoi(entries[2].c_str()); time_str.tm_hour = atoi(entries[3].c_str()); time_str.tm_min = atoi(entries[4].c_str()); time_str.tm_sec = atoi(entries[5].c_str()); time_str.tm_isdst = -1; #ifdef HAVE_TIMEGM commit.timestamp = timegm(&time_str); #else commit.timestamp = __timegm_hack(&time_str); #endif //parse author TiXmlElement* authorE = leE->FirstChildElement("author"); if(authorE != 0) { // GetText() may return NULL, causing author instantiation to crash. std::string author; if(authorE->GetText()) author = authorE->GetText(); if(author.empty()) author = "Unknown"; commit.username = author; } TiXmlElement* pathsE = leE->FirstChildElement( "paths" ); //log entries sometimes dont have any paths if(!pathsE) return true; //parse changes for(TiXmlElement* pathE = pathsE->FirstChildElement("path"); pathE != 0; pathE = pathE->NextSiblingElement()) { //parse path const char* kind = pathE->Attribute("kind"); const char* action = pathE->Attribute("action"); //check for action if(action == 0) continue; bool is_dir = false; //if has the 'kind' attribute (old versions of svn dont have this), check if it is a dir if(kind != 0 && strcmp(kind,"dir") == 0) { //accept only deletes for directories if(strcmp(action, "D") != 0) continue; is_dir = true; } std::string file(pathE->GetText()); std::string status(action); if(file.empty()) continue; if(status.empty()) continue; //append trailing slash if is directory if(is_dir && file[file.size()-1] != '/') { file = file + std::string("/"); } commit.addFile(file, status); } //fprintf(stderr,"parsed logentry\n"); //read files return true; } gource-0.56/src/formats/cvs-exp.h0000644002342600234260000000174015152463042016574 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef CVSLOG_EXP_H #define CVSLOG_EXP_H #include "commitlog.h" class CVSEXPCommitLog : public RCommitLog { protected: bool parseCommit(RCommit& commit); public: CVSEXPCommitLog(const std::string& logfile); static std::string logCommand(); }; #endif gource-0.56/src/formats/cvs2cl.h0000644002342600234260000000176315152463042016410 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef CVS2CL_H #define CVS2CL_H #include "commitlog.h" class CVS2CLCommitLog : public RCommitLog { protected: bool parseCommit(RCommit& commit); std::string logentry; public: CVS2CLCommitLog(const std::string& logfile); static std::string logCommand(); }; #endif gource-0.56/src/formats/custom.h0000644002342600234260000000200315152463042016512 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef CUSTOMLOG_H #define CUSTOMLOG_H #include "commitlog.h" class CustomLog : public RCommitLog { protected: bool parseCommit(RCommit& commit); bool parseCommitEntry(RCommit& commit); vec3 parseColour(const std::string& cstr); public: CustomLog(const std::string& logfile); }; #endif gource-0.56/src/formats/hg.h0000644002342600234260000000207315152463042015605 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef MERCURIALLOG_H #define MERCURIALLOG_H #include "commitlog.h" class MercurialLog : public RCommitLog { protected: bool parseCommit(RCommit& commit); bool parseCommitEntry(RCommit& commit); BaseLog* generateLog(const std::string& dir); public: MercurialLog(const std::string& logfile); static std::string logCommand(); }; #endifgource-0.56/src/formats/apache.h0000644002342600234260000000200515152463042016423 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef GOURCE_APACHE_H #define GOURCE_APACHE_H #include #include "commitlog.h" class ApacheCombinedLog : public RCommitLog { protected: bool parseCommit(RCommit& commit); BaseLog* generateLog(const std::string& dir); public: ApacheCombinedLog(const std::string& logfile); }; #endif gource-0.56/src/formats/git.cpp0000664002342600234260000001403315152463042016326 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "git.h" #include "../gource_settings.h" #ifndef _MSC_VER #include #endif // parse git log entries //git-log command notes: // - no single quotes on WIN32 as system call treats them differently // - 'user:' prefix allows us to quickly tell if the log is the wrong format // and try a different format (eg cvs-exp) int git_version_major = 0; int git_version_minor = 0; int git_version_patch = 0; Regex git_version_regex("([0-9]+)(?:\\.([0-9]+))?(?:\\.([0-9]+))?"); void GitCommitLog::readGitVersion() { if(git_version_major != 0) return; std::string temp_file; if(!createTempFile(temp_file)) { return; } char cmd_buff[2048]; int result = snprintf(cmd_buff, sizeof(cmd_buff), "git --version > %s", temp_file.c_str()); if(result < 0 || result >= sizeof(cmd_buff)) { remove(temp_file.c_str()); return; } int command_rc = systemCommand(cmd_buff); if(command_rc != 0) { remove(temp_file.c_str()); return; } std::ifstream in(temp_file.c_str()); if(!in.is_open()) { remove(temp_file.c_str()); return; } std::string version_str; std::getline(in, version_str); in.close(); remove(temp_file.c_str()); std::vector entries; if(!git_version_regex.match(version_str, &entries)) return; git_version_major = atoi(entries[0].c_str()); if(entries.size() > 1) { git_version_minor = atoi(entries[1].c_str()); } if(entries.size() > 2) { git_version_patch = atoi(entries[2].c_str()); } } std::string GitCommitLog::logCommand() { std::string log_command = "git log " "--reverse --raw --encoding=UTF-8 " "--no-renames"; readGitVersion(); // Add --no-show-signature either // if git version couldn't be determined or if version // is at least 2.10 if( git_version_major == 0 || git_version_major > 2 || (git_version_major == 2 && git_version_minor >= 10)) { log_command += " --no-show-signature"; } if(gGourceSettings.author_time) { log_command += " --pretty=format:user:%aN%n%at"; } else { log_command += " --pretty=format:user:%aN%n%ct"; } if(!gGourceSettings.start_date.empty()) { log_command += " --since "; log_command += gGourceSettings.start_date; } if(!gGourceSettings.stop_date.empty()) { log_command += " --until "; log_command += gGourceSettings.stop_date; } if(!gGourceSettings.git_branch.empty()) { log_command += " "; log_command += gGourceSettings.git_branch; } return log_command; } GitCommitLog::GitCommitLog(const std::string& logfile) : RCommitLog(logfile, 'u') { log_command = logCommand(); //can generate log from directory if(!logf && is_dir) { logf = generateLog(logfile); if(logf) { success = true; seekable = true; } } } BaseLog* GitCommitLog::generateLog(const std::string& dir) { //get working directory char cwd_buff[1024]; if(getcwd(cwd_buff, 1024) != cwd_buff) { return 0; } //does directory have a .git ? std::string gitdir = dir + std::string("/.git"); struct stat dirinfo; int stat_rc = stat(gitdir.c_str(), &dirinfo); if(stat_rc!=0 || !(dirinfo.st_mode & S_IFDIR || dirinfo.st_mode & S_IFREG)) { return 0; } // do we have this client installed requireExecutable("git"); std::string command = getLogCommand(); //create temp file createTempLog(); if(temp_file.size()==0) return 0; if(chdir(dir.c_str()) != 0) { return 0; } char cmd_buff[2048]; int written = snprintf(cmd_buff, 2048, "%s > %s", command.c_str(), temp_file.c_str()); if(written < 0 || written >= 2048) { return 0; } int command_rc = systemCommand(cmd_buff); //change back to original directory chdir(cwd_buff); if(command_rc != 0) { return 0; } BaseLog* seeklog = new SeekLog(temp_file); return seeklog; } // parse modified git format log entries bool GitCommitLog::parseCommit(RCommit& commit) { std::string line; commit.username = ""; while(logf->getNextLine(line) && line.size()) { if(line.find("user:") == 0) { //username follows user prefix commit.username = line.substr(5); if(!logf->getNextLine(line)) return false; commit.timestamp = atol(line.c_str()); //this isnt a commit we are parsing, abort if(commit.timestamp == 0) return false; continue; } //should see username before files if(commit.username.empty()) return false; size_t tab = line.find('\t'); //incorrect log format if(tab == std::string::npos || tab == 0 || tab == line.size()-1) continue; std::string status = line.substr(tab - 1, 1); std::string file = line.substr(tab + 1); if(file.empty()) continue; //check for and remove double quotes if(file.find('"') == 0 && file.rfind('"') == file.size()-1) { if(file.size()<=2) continue; file = file.substr(1,file.size()-2); } commit.addFile(file, status); } //check we at least got a username if(commit.username.empty()) return false; return true; } gource-0.56/src/formats/hg.cpp0000644002342600234260000000765415152463042016152 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "hg.h" #include "../core/sdlapp.h" #include "../gource_settings.h" #include Regex hg_regex("^([0-9]+) -?[0-9]+\\|([^|]+)\\|([ADM]?)\\|(.+)$"); std::string MercurialLog::logCommand() { // parse Mercurial log entries (using the gource.style template) std::string gource_style_path = gSDLAppResourceDir + std::string("gource.style"); std::string range = // date range (!gGourceSettings.start_date.empty() && !gGourceSettings.stop_date.empty()) ? str(boost::format("--date '%s to %s'") % gGourceSettings.start_date % gGourceSettings.stop_date) // start date only : (!gGourceSettings.start_date.empty()) ? str(boost::format("--date '>%s'") % gGourceSettings.start_date) // stop date only : (!gGourceSettings.stop_date.empty()) ? str(boost::format("--date '<%s'") % gGourceSettings.stop_date) // default : ""; std::string log_command = str(boost::format("hg log %s -r 0:tip --style '%s'") % range % gource_style_path); #ifdef _WIN32 std::replace(log_command.begin(), log_command.end(), '\'', '"'); #endif return log_command; } MercurialLog::MercurialLog(const std::string& logfile) : RCommitLog(logfile) { log_command = logCommand(); //can generate log from directory if(!logf && is_dir) { logf = generateLog(logfile); if(logf) { success = true; seekable = true; } } } BaseLog* MercurialLog::generateLog(const std::string& dir) { //does directory have a .hg ? std::string hgdir = dir + std::string("/.hg"); struct stat dirinfo; int stat_rc = stat(hgdir.c_str(), &dirinfo); if(stat_rc!=0 || !(dirinfo.st_mode & S_IFDIR)) { return 0; } // do we have this client installed requireExecutable("hg"); std::string command = getLogCommand(); createTempLog(); if(temp_file.size()==0) return 0; char cmd_buff[2048]; snprintf(cmd_buff, 2048, "%s -R \"%s\" > %s", command.c_str(), dir.c_str(), temp_file.c_str()); int command_rc = systemCommand(cmd_buff); if(command_rc != 0) { return 0; } BaseLog* seeklog = new SeekLog(temp_file); return seeklog; } bool MercurialLog::parseCommit(RCommit& commit) { while(parseCommitEntry(commit)); return !commit.files.empty(); } bool MercurialLog::parseCommitEntry(RCommit& commit) { std::string line; std::vector entries; if(!getNextLine(line)) return false; //custom line if(!hg_regex.match(line, &entries)) return false; time_t timestamp = atol(entries[0].c_str()); std::string username = entries[1]; //if this file is for the same person and timestamp //we add to the commit, else we save the lastline //and return false if(commit.files.empty()) { commit.timestamp = timestamp; commit.username = username; } else { if(commit.timestamp != timestamp || commit.username != username) { lastline = line; return false; } } std::string action = "A"; if(!entries[2].empty()) { action = entries[2]; } commit.addFile(entries[3], action); //commit.debug(); return true; } gource-0.56/src/formats/cvs2cl.cpp0000644002342600234260000001053615152463042016741 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "cvs2cl.h" #include "../gource_settings.h" #ifdef HAVE_LIBTINYXML #include #else #include "../tinyxml/tinyxml.h" #endif Regex cvs2cl_xml_tag("^<\\??xml"); Regex cvs2cl_logentry_start("^"); Regex cvs2cl_logentry_timestamp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})Z"); std::string CVS2CLCommitLog::logCommand() { std::string log_command = "cvs2cl --chrono --stdout --xml -g-q"; return log_command; } CVS2CLCommitLog::CVS2CLCommitLog(const std::string& logfile) : RCommitLog(logfile, '<') { } bool CVS2CLCommitLog::parseCommit(RCommit& commit) { //fprintf(stderr,"parsing cvs2cl log\n"); std::string line; if(!getNextLine(line)) return false; //start of log entry if(!cvs2cl_logentry_start.match(line)) { //is this the start of the document if(!cvs2cl_xml_tag.match(line)) return false; //fprintf(stderr,"found xml tag\n"); //if so find the first logentry tag bool found_logentry = false; while(getNextLine(line)) { if(cvs2cl_logentry_start.match(line)) { found_logentry = true; break; } } if(!found_logentry) return false; } //fprintf(stderr,"found logentry\n"); logentry.clear(); logentry.append(line); logentry.append("\n"); //fprintf(stderr,"found opening tag\n"); bool endfound = false; while(getNextLine(line)) { logentry.append(line); logentry.append("\n"); if(cvs2cl_logentry_end.match(line)) { //fprintf(stderr,"found closing tag\n"); endfound=true; break; } } //incomplete commit if(!endfound) return false; //fprintf(stderr,"read logentry\n"); TiXmlDocument doc; if(!doc.Parse(logentry.c_str())) return false; //fprintf(stderr,"try to parse logentry: %s\n", logentry.c_str()); TiXmlElement* leE = doc.FirstChildElement( "entry" ); std::vector entries; if(!leE) return false; //parse date TiXmlElement* dateE = leE->FirstChildElement( "isoDate" ); if(!dateE) return false; std::string timestamp_str(dateE->GetText()); if(!cvs2cl_logentry_timestamp.match(timestamp_str, &entries)) return false; struct tm time_str; time_str.tm_year = atoi(entries[0].c_str()) - 1900; time_str.tm_mon = atoi(entries[1].c_str()) - 1; time_str.tm_mday = atoi(entries[2].c_str()); time_str.tm_hour = atoi(entries[3].c_str()); time_str.tm_min = atoi(entries[4].c_str()); time_str.tm_sec = atoi(entries[5].c_str()); time_str.tm_isdst = -1; commit.timestamp = mktime(&time_str); //parse author TiXmlElement* authorE = leE->FirstChildElement("author"); if(authorE != 0) { std::string author(authorE->GetText()); if(author.empty()) author = "Unknown"; commit.username = author; } //parse changes for(TiXmlElement* fileE = leE->FirstChildElement("file"); fileE != 0; fileE = fileE->NextSiblingElement()) { TiXmlElement* state = fileE->FirstChildElement("cvsstate"); TiXmlElement* name = fileE->FirstChildElement("name"); //check for state if(name == 0 || state == 0) continue; std::string status = strcmp(state->GetText(), "dead") == 0 ? "D" : "M"; std::string file(name->GetText()); if(file.empty()) continue; commit.addFile(file, status); } //fprintf(stderr,"parsed logentry\n"); //read files return true; } gource-0.56/src/formats/bzr.h0000644002342600234260000000201315152463042015776 0ustar andrewcandrewc/* Copyright (C) 2010 John Arbash Meinel This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef BAZAARLOG_H #define BAZAARLOG_H #include "commitlog.h" class BazaarLog : public RCommitLog { protected: bool parseCommit(RCommit& commit); BaseLog* generateLog(const std::string& dir); public: BazaarLog(const std::string& logfile); static std::string logCommand(); }; #endif gource-0.56/src/formats/commitlog.cpp0000664002342600234260000002165215152463042017542 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "commitlog.h" #include "../gource_settings.h" #include "../core/sdlapp.h" #include "../core/utf8/utf8.h" std::string RCommitLog::filter_utf8(const std::string& str) { std::string filtered; try { utf8::replace_invalid(str.begin(), str.end(), back_inserter(filtered), '?'); } catch(...) { filtered = "???"; } return filtered; } //RCommitLog RCommitLog::RCommitLog(const std::string& logfile, int firstChar) { logf = 0; seekable = false; success = false; is_dir = false; buffered = false; if(logfile == "-") { //check first char if(checkFirstChar(firstChar, std::cin)) { logf = new StreamLog(); is_dir = false; seekable = false; success = true; } return; } struct stat fileinfo; int rc = stat(logfile.c_str(), &fileinfo); if(rc==0) { is_dir = (fileinfo.st_mode & S_IFDIR) ? true : false; if(!is_dir) { //check first char std::ifstream testf(logfile.c_str()); bool firstOK = checkFirstChar(firstChar, testf); testf.close(); if(firstOK) { logf = new SeekLog(logfile); seekable = true; success = true; } } } } RCommitLog::~RCommitLog() { if(logf!=0) delete logf; if(!temp_file.empty()) { remove(temp_file.c_str()); } } int RCommitLog::systemCommand(const std::string& command) { int rc = system(command.c_str()); return rc; } // TODO: implement check for 'nix OSs void RCommitLog::requireExecutable(const std::string& exename) { #ifdef _WIN32 TCHAR exePath[MAX_PATH]; DWORD result = SearchPath(0, exename.c_str(), ".exe", MAX_PATH, exePath, 0); if(result) return; throw SDLAppException("unable to find %s.exe", exename.c_str()); #endif } //check firstChar of stream is as expected. if no firstChar defined just returns true. bool RCommitLog::checkFirstChar(int firstChar, std::istream& stream) { //cant check this if(firstChar == -1) return true; int c = stream.peek(); if(firstChar == c) return true; return false; } bool RCommitLog::checkFormat() { if(!success) return false; //read a commit to see if the log is in the correct format if(nextCommit(lastCommit, false)) { if(seekable) { //if the log is seekable, go back to the start ((SeekLog*)logf)->seekTo(0.0); lastline.clear(); } else { //otherwise set the buffered flag as we have bufferd one commit buffered = true; } return true; } return false; } std::string RCommitLog::getLogCommand() { return log_command; } bool RCommitLog::isSeekable() { return seekable; } bool RCommitLog::getCommitAt(float percent, RCommit& commit) { if(!seekable) return false; SeekLog* seeklog = ((SeekLog*)logf); //save settings long currpointer = seeklog->getPointer(); std::string currlastline = lastline; seekTo(percent); bool success = findNextCommit(commit,500); //restore settings seeklog->setPointer(currpointer); lastline = currlastline; return success; } bool RCommitLog::getNextLine(std::string& line) { if(!lastline.empty()) { line = lastline; lastline.clear(); return true; } return logf->getNextLine(line); } void RCommitLog::seekTo(float percent) { if(!seekable) return; lastline.clear(); ((SeekLog*)logf)->seekTo(percent); } float RCommitLog::getPercent() { if(seekable) return ((SeekLog*)logf)->getPercent(); return 0.0; } bool RCommitLog::findNextCommit(RCommit& commit, int attempts) { for(int i=0;iisFinished()) return true; return false; } bool RCommitLog::hasBufferedCommit() { return buffered; } //create temp file bool RCommitLog::createTempLog() { return createTempFile(temp_file); } bool RCommitLog::createTempFile(std::string& temp_file) { std::string tempdir; #ifdef _WIN32 DWORD tmplen = GetTempPath(0, 0); if(tmplen == 0) return false; std::vector temp(tmplen+1); tmplen = GetTempPath(static_cast(temp.size()), &temp[0]); if(tmplen == 0 || tmplen >= temp.size()) return false; tempdir = std::string(temp.begin(), temp.begin() + static_cast(tmplen)); tempdir += "\\"; #else tempdir = "/tmp/"; #endif char tmplate[1024]; snprintf(tmplate, 1024, "%sgource-XXXXXX", tempdir.c_str()); #ifdef _WIN32 if(mktemp(tmplate) == NULL) return false; #else if(mkstemp(tmplate) < 0) return false; #endif temp_file = std::string(tmplate); return true; } // RCommitFile RCommitFile::RCommitFile(const std::string& filename, const std::string& action, vec3 colour) { this->filename = RCommitLog::filter_utf8(filename); //prepend a root slash if(this->filename[0] != '/') { this->filename.insert(0, 1, '/'); } this->action = action; this->colour = colour; } RCommit::RCommit() { timestamp = 0; } vec3 RCommit::fileColour(const std::string& filename) { size_t slash = filename.rfind('/'); size_t dot = filename.rfind('.'); if(dot != std::string::npos && dot+1::iterator ri = gGourceSettings.file_filters.begin(); ri != gGourceSettings.file_filters.end(); ri++) { Regex* r = *ri; if(r->match(filename)) { return; } } } // Only allow files that have been whitelisted if(!gGourceSettings.file_show_filters.empty()) { for(std::vector::iterator ri = gGourceSettings.file_show_filters.begin(); ri != gGourceSettings.file_show_filters.end(); ri++) { Regex* r = *ri; if(!r->match(filename)) { return; } } } files.push_back(RCommitFile(filename, action, colour)); } void RCommit::postprocess() { username = RCommitLog::filter_utf8(username); } bool RCommit::isValid() { //check user against filters, if found, discard commit if(!gGourceSettings.user_filters.empty()) { for(std::vector::iterator ri = gGourceSettings.user_filters.begin(); ri != gGourceSettings.user_filters.end(); ri++) { Regex* r = *ri; if(r->match(username)) { return false; } } } // Only allow users that have been whitelisted if(!gGourceSettings.user_show_filters.empty()) { for(std::vector::iterator ri = gGourceSettings.user_show_filters.begin(); ri != gGourceSettings.user_show_filters.end(); ri++) { Regex* r = *ri; if(!r->match(username)) { return false; } } } return !files.empty(); } void RCommit::debug() { debugLog("files:\n"); for(std::list::iterator it = files.begin(); it != files.end(); it++) { RCommitFile f = *it; debugLog("%s %s\n", f.action.c_str(), f.filename.c_str()); } } gource-0.56/src/formats/commitlog.h0000664002342600234260000000534515152463042017210 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef RCOMMIT_LOG_H #define RCOMMIT_LOG_H #include "../core/seeklog.h" #include "../core/display.h" #include "../core/regex.h" #include "../core/stringhash.h" #include #include #include #include "sys/stat.h" class RCommitFile { public: std::string filename; std::string action; vec3 colour; RCommitFile(const std::string& filename, const std::string& action, vec3 colour); }; class RCommit { vec3 fileColour(const std::string& filename); public: time_t timestamp; std::string username; std::list files; void postprocess(); bool isValid(); void addFile(const std::string& filename, const std::string& action); void addFile(const std::string& filename, const std::string& action, const vec3& colour); RCommit(); void debug(); virtual bool parse(BaseLog* logf) { return false; }; }; class RCommitLog { protected: BaseLog* logf; std::string temp_file; std::string log_command; std::string lastline; bool is_dir; bool success; bool seekable; RCommit lastCommit; bool buffered; bool checkFirstChar(int firstChar, std::istream& stream); bool createTempLog(); static bool createTempFile(std::string& temp_file); bool getNextLine(std::string& line); virtual bool parseCommit(RCommit& commit) { return false; }; public: RCommitLog(const std::string& logfile, int firstChar = -1); virtual ~RCommitLog(); static std::string filter_utf8(const std::string& str); void seekTo(float percent); bool checkFormat(); std::string getLogCommand(); static int systemCommand(const std::string& command); void requireExecutable(const std::string& exename); void bufferCommit(RCommit& commit); bool getCommitAt(float percent, RCommit& commit); bool findNextCommit(RCommit& commit, int attempts); bool nextCommit(RCommit& commit, bool validate = true); bool hasBufferedCommit(); bool isFinished(); bool isSeekable(); float getPercent(); }; #endif gource-0.56/src/dirnode.h0000664002342600234260000001324715152463042015167 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef RDIRNODE_H #define RDIRNODE_H #include "core/sdlapp.h" #include "core/bounds.h" #include "core/quadtree.h" #include "core/pi.h" #include "core/vbo.h" #include "gource_settings.h" #include "spline.h" #include "file.h" #include "bloom.h" #include #include class RFile; class RDirNode : public QuadItem { std::string abspath; std::string path_token; int path_token_offset; RDirNode* parent; std::list children; std::list files; SplineEdge spline; vec4 col; vec2 spos; vec2 projected_pos; vec2 projected_spos; vec2 pos; vec2 vel; vec2 accel, prev_accel; float dir_area; bool visible; bool in_frustum; bool position_initialized; float since_node_visible; float since_last_file_change; float since_last_node_change; float file_area; float dir_radius; float dir_radius_sqrt; float parent_radius; int depth; int visible_count; vec3 screenpos; vec2 node_normal; void calcRadius(); void calcColour(); std::string commonPathPrefix(const std::string& str) const; void changePath(const std::string & abspath); void setInitialPosition(); void drawEdge(RDirNode* child) const; void updateSplinePoint(float dt); void move(float dt); vec2 calcFileDest(int layer_no, int file_no); void updateFilePositions(); void adjustDepth(); void adjustPath(); void drawDirName(FXFont& dirfont) const; public: RDirNode(RDirNode* parent, const std::string & abspath); ~RDirNode(); void printFiles(); bool empty() const; bool isAnchor(RDirNode* node) const; RDirNode* getRoot(); void fileUpdated(bool userInitiated); void nodeUpdated(bool userInitiated); void addVisible(); bool isVisible(); float getArea() const; int totalDirCount() const; int totalFileCount() const; int getTokenOffset() const; int dirCount() const; int fileCount() const; int visibleFileCount() const; bool noDirs() const; bool noFiles() const; bool prefixedBy(const std::string & path) const; const std::string & getPath() const; const vec2 & getNodeNormal() const; bool isParent(RDirNode* node) const; bool addFile(RFile* f); bool removeFile(RFile* f); int getDepth() const; const std::list & getChildren() const; void updateQuadItemBounds(); float getParentRadius() const; float getRadius() const; float getRadiusSqrt() const; const std::list* getFiles() const { return &files; }; void getFilesRecursive(std::list& files) const; vec3 averageFileColour() const; const vec4 & getColour() const; RDirNode* getParent() const; bool isDir(const std::string& path) const; void findDirs(const std::string& path, std::list& dirs); const vec2 & getPos() const; void calcEdges(); const vec2 & getProjectedPos() const; const vec2 & getSPos() const; void setPos(const vec2 & pos); void rotate(float s, float c); void rotate(float s, float c, const vec2& centre); void setParent(RDirNode* parent); float distanceToParent() const; void addNode(RDirNode* node); void debug(int indent=0) const; void applyForceDir(RDirNode* dir); void applyForces(QuadTree &quadtree); void logic(float dt); void updateEdgeVBO(quadbuf& buffer) const; void drawEdges() const; void drawEdgeShadows() const; void checkFrustum(const Frustum & frustum); void updateFilesVBO(quadbuf& buffer, float dt) const; void updateBloomVBO(bloombuf& buffer, float dt); void drawShadows(float dt) const; void drawFiles(float dt) const; void drawBloom(float dt); void drawNames(FXFont& dirfont); void calcScreenPos(GLint* viewport, GLdouble* modelview, GLdouble* projection); void nodeCount() const; }; class DirForceFunctor : public VisitFunctor{ private: RDirNode * this_dir; std::set seen; size_t loopCount; public: DirForceFunctor(RDirNode * dir) : this_dir(dir), seen(), loopCount(0){} int getLoopCount() const{ return loopCount; } void operator()(QuadItem * item){ std::set::iterator seentest; RDirNode* d = (RDirNode*) (item); if(d==this_dir) return; if(d==this_dir->getParent()) return; if(d->getParent() == this_dir) return; if(this_dir->isParent(d)) return; if(d->isParent(this_dir)) return; if(d->node_count != 1) { if((seentest = seen.find(d)) != seen.end()) return; seen.insert(d); } this_dir->applyForceDir(d); loopCount++; } }; extern int gGourceDirNodeInnerLoops; extern int gGourceFileInnerLoops; extern float gGourcePointSize; extern bool gGourceNodeDebug; extern bool gGourceGravity; extern float gGourceForceGravity; extern std::map gGourceDirMap; #endif gource-0.56/src/user.h0000664002342600234260000000542515152463042014520 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef RUSER_H #define RUSER_H #include "gource_settings.h" #include "pawn.h" #include "action.h" #include "file.h" #include "sys/stat.h" #include class RAction; class RFile; class RUser : public Pawn { void assignUserImage(); std::list actions; std::list activeActions; size_t actionCount; size_t activeCount; float action_interval; float action_dist; float last_action; float min_units_ps; std::string name; vec3 usercol; bool highlighted; bool nameVisible() const; void updateFont(); const vec3& getNameColour() const; void drawNameText(float alpha); public: RUser(const std::string& name, vec2 pos, int tagid); vec3 getColour() const; void colourize(); const std::string& getName() const; void fileRemoved(RFile* f); void addAction(RAction* action); bool isIdle(); bool isFading(); bool isInactive(); void setSelected(bool selected); void setHighlighted(bool highlighted); int getActionCount(); int getPendingActionCount(); float getAlpha() const; void applyForceToActions(); void applyForceAction(RAction* action); void applyForceUser(RUser* u); void calcScreenPos(GLint* viewport, GLdouble* modelview, GLdouble* projection); void logic(float t, float dt); void updateActionsVBO(quadbuf& buffer); void drawActions(float dt); void draw(float dt); }; class UserForceFunctor : public VisitFunctor{ private: RUser * this_user; std::set seen; int loopCount; public: UserForceFunctor(RUser * user) : this_user(user), seen(), loopCount(0){} int getLoopCount() const{ return loopCount; } void operator()(QuadItem * user){ std::set::iterator seentest; RUser * b = (RUser*) (user); if(b==this_user) return; if(b->node_count != 1) { if((seentest = seen.find(b)) != seen.end()) return; seen.insert(b); } this_user->applyForceUser(b); loopCount++; } }; #endif gource-0.56/src/gource_shell.cpp0000644002342600234260000001661415152463042016550 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "gource_shell.h" GourceShell* gGourceShell = 0; // GourceShell GourceShell::GourceShell(ConfFile* conf, FrameExporter* exporter) { this->conf = conf; this->exporter = exporter; min_delta_msec = 16; next = false; gource = 0; gource_settings = conf->getSections("gource")->begin(); gGourceSettings.repo_count = conf->countSection("gource"); toggle_delay = 0.0; transition_texture = 0; transition_interval = 0.0f; if(GLEW_ARB_texture_non_power_of_two || GLEW_VERSION_2_0) { transition_texture = texturemanager.create(display.width, display.height, false, GL_CLAMP_TO_EDGE, GL_RGBA); } } GourceShell::~GourceShell() { if(gource!=0) delete gource; if(transition_texture!=0) texturemanager.release(transition_texture); } void GourceShell::toggleFullscreen() { if(exporter != 0) return; texturemanager.unload(); shadermanager.unload(); fontmanager.unload(); if(gource!=0) gource->unload(); //recreate gl context display.toggleFullscreen(); texturemanager.reload(); shadermanager.reload(); fontmanager.reload(); if(gource!=0) gource->reload(); } void GourceShell::toggleWindowFrame() { #if SDL_VERSION_ATLEAST(2,0,0) if(toggle_delay > 0.0) return; if(display.isFullscreen()) return; if(exporter != 0) return; texturemanager.unload(); shadermanager.unload(); fontmanager.unload(); if(gource!=0) gource->unload(); display.toggleFrameless(); texturemanager.reload(); shadermanager.reload(); fontmanager.reload(); if(gource!=0) gource->reload(); toggle_delay = 0.25f; #endif } void GourceShell::resize(int width, int height) { texturemanager.unload(); shadermanager.unload(); fontmanager.unload(); if(gource!=0) gource->unload(); //recreate gl context display.resize(width, height); texturemanager.reload(); shadermanager.reload(); fontmanager.reload(); if(gource!=0) gource->reload(); } void GourceShell::reload() { texturemanager.unload(); shadermanager.unload(); fontmanager.unload(); if(gource!=0) gource->unload(); texturemanager.reload(); shadermanager.reload(true); fontmanager.reload(); if(gource!=0) gource->reload(); } void GourceShell::keyPress(SDL_KeyboardEvent *e) { bool repeat = false; #if SDL_VERSION_ATLEAST(2,0,0) repeat = (e->repeat > 0); #endif //Quit demo if the user presses ESC if (e->type == SDL_KEYDOWN && !repeat) { #if SDL_VERSION_ATLEAST(2,0,0) bool key_escape = e->keysym.sym == SDLK_ESCAPE; bool key_return = e->keysym.sym == SDLK_RETURN; #else bool key_escape = e->keysym.unicode == SDLK_ESCAPE; bool key_return = e->keysym.unicode == SDLK_RETURN; #endif if (key_escape) { quit(); } if(gGourceSettings.disable_input) { // disable keyboard input other than the escape key return; } if (e->keysym.sym == SDLK_F5) { reload(); } if (e->keysym.sym == SDLK_F11) { toggleWindowFrame(); } if(key_return) { #if SDL_VERSION_ATLEAST(2,0,0) const Uint8* keystate = SDL_GetKeyboardState(NULL); if(keystate[SDL_SCANCODE_RALT] || keystate[SDL_SCANCODE_LALT]) { #else Uint8* keystate = SDL_GetKeyState(NULL); if(keystate[SDLK_RALT] || keystate[SDLK_LALT]) { #endif toggleFullscreen(); } else { if(gGourceSettings.repo_count>1) next = true; } } } if(gource!=0) gource->keyPress(e); } void GourceShell::mouseMove(SDL_MouseMotionEvent *e) { if(gource!=0) gource->mouseMove(e); } #if SDL_VERSION_ATLEAST(2,0,0) void GourceShell::mouseWheel(SDL_MouseWheelEvent *e) { if(gource!=0) gource->mouseWheel(e); } #endif void GourceShell::mouseClick(SDL_MouseButtonEvent *e) { if(gource!=0) gource->mouseClick(e); } void GourceShell::quit() { if(gource!=0) gource->quit(); gGourceSettings.shutdown=true; } Gource* GourceShell::getNext() { if(gource != 0) { transition_interval = 1.0f; delete gource; gource = 0; } if(gGourceSettings.shutdown || gource_settings == conf->getSections("gource")->end()) { // done return 0; } gGourceSettings.importGourceSettings(*conf, *gource_settings); //recording a video kind of implies you want this, unless: // -- dont stop requested // -- loop requested // -- reading from STDIN if(exporter!=0 && !(gGourceSettings.dont_stop || gGourceSettings.loop || gGourceSettings.path == "-")) gGourceSettings.stop_at_end = true; //multiple repo special settings if(gGourceSettings.repo_count > 1) { //set a stop condition if(gGourceSettings.stop_at_time <= 0.0f && gGourceSettings.stop_position <= 0.0f) { gGourceSettings.stop_at_time = 60.0f; } } gource_settings++; //loop unless only 1 repo if(gource_settings == conf->getSections("gource")->end()) { if(gGourceSettings.repo_count>1 && exporter==0) { gource_settings = conf->getSections("gource")->begin(); } } // replace gource gource = new Gource(exporter); next = false; return gource; } void GourceShell::blendLastFrame(float dt) { if(transition_texture==0 || transition_interval <= 0.0f) return; display.mode2D(); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); transition_texture->bind(); glColor4f(1.0, 1.0, 1.0, transition_interval); glBegin(GL_QUADS); glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 0.0); glTexCoord2f(1.0, 1.0f); glVertex2f(display.width, 0.0); glTexCoord2f(1.0, 0.0f); glVertex2f(display.width, display.height); glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, display.height); glEnd(); transition_interval -= dt; } void GourceShell::update(float t, float dt) { if(gource == 0 || gource->isFinished()) { if(!getNext()) appFinished=true; return; } gource->fps = this->fps; gource->update(t, dt); if(toggle_delay > 0.0) toggle_delay -= dt; //copy last frame if( (next|| gource->isFinished()) && transition_texture!=0) { glEnable(GL_TEXTURE_2D); transition_texture->bind(); glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, display.width, display.height, 0); } else { //blend last frame of previous scene blendLastFrame(dt); } if(next) { delete gource; gource = 0; transition_interval = 1.0f; next = false; } } gource-0.56/src/caption.h0000644002342600234260000000242715152463042015174 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef RCAPTION_H #define RCAPTION_H #include "core/display.h" #include "core/fxfont.h" #include "gource_settings.h" class RCaption { float alpha; float elapsed; vec2 pos; vec3 colour; FXFont font; std::string caption; public: time_t timestamp; RCaption(const std::string& caption, time_t timestamp, const FXFont& font); void setPos(const vec2& pos); const vec2& getPos() const; const std::string& getCaption() const; bool isFinished() const; void logic(float dt); void draw(); }; #endif gource-0.56/src/pawn.h0000664002342600234260000000461515152463042014507 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef PAWN_H #define PAWN_H #include #include "gource_settings.h" #include "core/display.h" #include "core/fxfont.h" #include "core/vectors.h" #include "core/quadtree.h" class Pawn : public QuadItem { protected: vec2 pos; vec2 shadowOffset; std::string name; float namewidth; vec2 accel; float speed; float elapsed; float fadetime; float nametime; float name_interval; vec3 namecol; bool shadow; bool hidden; int tagid; FXFont font; bool mouseover; virtual bool nameVisible() const; virtual void drawNameText(float alpha) {}; virtual const vec3& getNameColour() const; protected: bool selected; public: float size; float graphic_ratio; TextureResource* graphic; vec3 screenpos; vec2 dims; Pawn(const std::string& name, vec2 pos, int tagid); const vec2 & getPos() const { return pos; } void setPos(vec2 pos); void calcScreenPos(const vec2& offset); void updateQuadItemBounds(); void showName(); void setMouseOver(bool over); float getSize(); int getTagID(); const std::string& getName() const { return name; } virtual void setSelected(bool selected); bool isSelected() { return selected; }; void setHidden(bool hidden){ this->hidden = hidden; } bool isHidden() const { return hidden; } virtual float getAlpha() const{ return std::min(elapsed/fadetime, 1.0f); } virtual vec3 getColour() const { return vec3(1.0, 1.0, 1.0); } void setGraphic(TextureResource* graphic); void logic(float dt); void draw(float dt); void drawShadow(float dt); void drawName(); }; extern float gGourceShadowStrength; #endif gource-0.56/src/tinyxml/0000775002342600234260000000000015152463042015067 5ustar andrewcandrewcgource-0.56/src/tinyxml/tinystr.cpp0000644002342600234260000000471315152463042017312 0ustar andrewcandrewc/* www.sourceforge.net/projects/tinyxml This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef TIXML_USE_STL #include "tinystr.h" // Error value for find primitive const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1); // Null rep. TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } }; void TiXmlString::reserve (size_type cap) { if (cap > capacity()) { TiXmlString tmp; tmp.init(length(), cap); memcpy(tmp.start(), data(), length()); swap(tmp); } } TiXmlString& TiXmlString::assign(const char* str, size_type len) { size_type cap = capacity(); if (len > cap || cap > 3*(len + 8)) { TiXmlString tmp; tmp.init(len); memcpy(tmp.start(), str, len); swap(tmp); } else { memmove(start(), str, len); set_size(len); } return *this; } TiXmlString& TiXmlString::append(const char* str, size_type len) { size_type newsize = length() + len; if (newsize > capacity()) { reserve (newsize + capacity()); } memmove(finish(), str, len); set_size(newsize); return *this; } TiXmlString operator + (const TiXmlString & a, const TiXmlString & b) { TiXmlString tmp; tmp.reserve(a.length() + b.length()); tmp += a; tmp += b; return tmp; } TiXmlString operator + (const TiXmlString & a, const char* b) { TiXmlString tmp; TiXmlString::size_type b_len = static_cast( strlen(b) ); tmp.reserve(a.length() + b_len); tmp += a; tmp.append(b, b_len); return tmp; } TiXmlString operator + (const char* a, const TiXmlString & b) { TiXmlString tmp; TiXmlString::size_type a_len = static_cast( strlen(a) ); tmp.reserve(a_len + b.length()); tmp.append(a, a_len); tmp += b; return tmp; } #endif // TIXML_USE_STL gource-0.56/src/tinyxml/tinystr.h0000644002342600234260000002000515152463042016747 0ustar andrewcandrewc/* www.sourceforge.net/projects/tinyxml This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef TIXML_USE_STL #ifndef TIXML_STRING_INCLUDED #define TIXML_STRING_INCLUDED #include #include /* The support for explicit isn't that universal, and it isn't really required - it is used to check that the TiXmlString class isn't incorrectly used. Be nice to old compilers and macro it here: */ #if defined(_MSC_VER) && (_MSC_VER >= 1200 ) // Microsoft visual studio, version 6 and higher. #define TIXML_EXPLICIT explicit #elif defined(__GNUC__) && (__GNUC__ >= 3 ) // GCC version 3 and higher.s #define TIXML_EXPLICIT explicit #else #define TIXML_EXPLICIT #endif /* TiXmlString is an emulation of a subset of the std::string template. Its purpose is to allow compiling TinyXML on compilers with no or poor STL support. Only the member functions relevant to the TinyXML project have been implemented. The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase a string and there's no more room, we allocate a buffer twice as big as we need. */ class TiXmlString { public : // The size type used typedef size_t size_type; // Error value for find primitive static const size_type npos; // = -1; // TiXmlString empty constructor TiXmlString () : rep_(&nullrep_) { } // TiXmlString copy constructor TiXmlString ( const TiXmlString & copy) : rep_(0) { init(copy.length()); memcpy(start(), copy.data(), length()); } // TiXmlString constructor, based on a string TIXML_EXPLICIT TiXmlString ( const char * copy) : rep_(0) { init( static_cast( strlen(copy) )); memcpy(start(), copy, length()); } // TiXmlString constructor, based on a string TIXML_EXPLICIT TiXmlString ( const char * str, size_type len) : rep_(0) { init(len); memcpy(start(), str, len); } // TiXmlString destructor ~TiXmlString () { quit(); } TiXmlString& operator = (const char * copy) { return assign( copy, (size_type)strlen(copy)); } TiXmlString& operator = (const TiXmlString & copy) { return assign(copy.start(), copy.length()); } // += operator. Maps to append TiXmlString& operator += (const char * suffix) { return append(suffix, static_cast( strlen(suffix) )); } // += operator. Maps to append TiXmlString& operator += (char single) { return append(&single, 1); } // += operator. Maps to append TiXmlString& operator += (const TiXmlString & suffix) { return append(suffix.data(), suffix.length()); } // Convert a TiXmlString into a null-terminated char * const char * c_str () const { return rep_->str; } // Convert a TiXmlString into a char * (need not be null terminated). const char * data () const { return rep_->str; } // Return the length of a TiXmlString size_type length () const { return rep_->size; } // Alias for length() size_type size () const { return rep_->size; } // Checks if a TiXmlString is empty bool empty () const { return rep_->size == 0; } // Return capacity of string size_type capacity () const { return rep_->capacity; } // single char extraction const char& at (size_type index) const { assert( index < length() ); return rep_->str[ index ]; } // [] operator char& operator [] (size_type index) const { assert( index < length() ); return rep_->str[ index ]; } // find a char in a string. Return TiXmlString::npos if not found size_type find (char lookup) const { return find(lookup, 0); } // find a char in a string from an offset. Return TiXmlString::npos if not found size_type find (char tofind, size_type offset) const { if (offset >= length()) return npos; for (const char* p = c_str() + offset; *p != '\0'; ++p) { if (*p == tofind) return static_cast< size_type >( p - c_str() ); } return npos; } void clear () { //Lee: //The original was just too strange, though correct: // TiXmlString().swap(*this); //Instead use the quit & re-init: quit(); init(0,0); } /* Function to reserve a big amount of data when we know we'll need it. Be aware that this function DOES NOT clear the content of the TiXmlString if any exists. */ void reserve (size_type cap); TiXmlString& assign (const char* str, size_type len); TiXmlString& append (const char* str, size_type len); void swap (TiXmlString& other) { Rep* r = rep_; rep_ = other.rep_; other.rep_ = r; } private: void init(size_type sz) { init(sz, sz); } void set_size(size_type sz) { rep_->str[ rep_->size = sz ] = '\0'; } char* start() const { return rep_->str; } char* finish() const { return rep_->str + rep_->size; } struct Rep { size_type size, capacity; char str[1]; }; void init(size_type sz, size_type cap) { if (cap) { // Lee: the original form: // rep_ = static_cast(operator new(sizeof(Rep) + cap)); // doesn't work in some cases of new being overloaded. Switching // to the normal allocation, although use an 'int' for systems // that are overly picky about structure alignment. const size_type bytesNeeded = sizeof(Rep) + cap; const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int ); rep_ = reinterpret_cast( new int[ intsNeeded ] ); rep_->str[ rep_->size = sz ] = '\0'; rep_->capacity = cap; } else { rep_ = &nullrep_; } } void quit() { if (rep_ != &nullrep_) { // The rep_ is really an array of ints. (see the allocator, above). // Cast it back before delete, so the compiler won't incorrectly call destructors. delete [] ( reinterpret_cast( rep_ ) ); } } Rep * rep_; static Rep nullrep_; } ; inline bool operator == (const TiXmlString & a, const TiXmlString & b) { return ( a.length() == b.length() ) // optimization on some platforms && ( strcmp(a.c_str(), b.c_str()) == 0 ); // actual compare } inline bool operator < (const TiXmlString & a, const TiXmlString & b) { return strcmp(a.c_str(), b.c_str()) < 0; } inline bool operator != (const TiXmlString & a, const TiXmlString & b) { return !(a == b); } inline bool operator > (const TiXmlString & a, const TiXmlString & b) { return b < a; } inline bool operator <= (const TiXmlString & a, const TiXmlString & b) { return !(b < a); } inline bool operator >= (const TiXmlString & a, const TiXmlString & b) { return !(a < b); } inline bool operator == (const TiXmlString & a, const char* b) { return strcmp(a.c_str(), b) == 0; } inline bool operator == (const char* a, const TiXmlString & b) { return b == a; } inline bool operator != (const TiXmlString & a, const char* b) { return !(a == b); } inline bool operator != (const char* a, const TiXmlString & b) { return !(b == a); } TiXmlString operator + (const TiXmlString & a, const TiXmlString & b); TiXmlString operator + (const TiXmlString & a, const char* b); TiXmlString operator + (const char* a, const TiXmlString & b); /* TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString. Only the operators that we need for TinyXML have been developed. */ class TiXmlOutStream : public TiXmlString { public : // TiXmlOutStream << operator. TiXmlOutStream & operator << (const TiXmlString & in) { *this += in; return *this; } // TiXmlOutStream << operator. TiXmlOutStream & operator << (const char * in) { *this += in; return *this; } } ; #endif // TIXML_STRING_INCLUDED #endif // TIXML_USE_STL gource-0.56/src/tinyxml/tinyxml.h0000644002342600234260000017650315152463042016756 0ustar andrewcandrewc/* www.sourceforge.net/projects/tinyxml Original code by Lee Thomason (www.grinninglizard.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef TINYXML_INCLUDED #define TINYXML_INCLUDED #ifdef _MSC_VER #pragma warning( push ) #pragma warning( disable : 4530 ) #pragma warning( disable : 4786 ) #endif #include #include #include #include #include // Help out windows: #if defined( _DEBUG ) && !defined( DEBUG ) #define DEBUG #endif #ifdef TIXML_USE_STL #include #include #include #define TIXML_STRING std::string #else #include "tinystr.h" #define TIXML_STRING TiXmlString #endif // Deprecated library function hell. Compilers want to use the // new safe versions. This probably doesn't fully address the problem, // but it gets closer. There are too many compilers for me to fully // test. If you get compilation troubles, undefine TIXML_SAFE #define TIXML_SAFE #ifdef TIXML_SAFE #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) // Microsoft visual studio, version 2005 and higher. #define TIXML_SNPRINTF _snprintf_s #define TIXML_SSCANF sscanf_s #elif defined(_MSC_VER) && (_MSC_VER >= 1200 ) // Microsoft visual studio, version 6 and higher. //#pragma message( "Using _sn* functions." ) #define TIXML_SNPRINTF _snprintf #define TIXML_SSCANF sscanf #elif defined(__GNUC__) && (__GNUC__ >= 3 ) // GCC version 3 and higher.s //#warning( "Using sn* functions." ) #define TIXML_SNPRINTF snprintf #define TIXML_SSCANF sscanf #else #define TIXML_SNPRINTF snprintf #define TIXML_SSCANF sscanf #endif #endif class TiXmlDocument; class TiXmlElement; class TiXmlComment; class TiXmlUnknown; class TiXmlAttribute; class TiXmlText; class TiXmlDeclaration; class TiXmlParsingData; const int TIXML_MAJOR_VERSION = 2; const int TIXML_MINOR_VERSION = 6; const int TIXML_PATCH_VERSION = 2; /* Internal structure for tracking location of items in the XML file. */ struct TiXmlCursor { TiXmlCursor() { Clear(); } void Clear() { row = col = -1; } int row; // 0 based. int col; // 0 based. }; /** Implements the interface to the "Visitor pattern" (see the Accept() method.) If you call the Accept() method, it requires being passed a TiXmlVisitor class to handle callbacks. For nodes that contain other nodes (Document, Element) you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves are simply called with Visit(). If you return 'true' from a Visit method, recursive parsing will continue. If you return false, no children of this node or its sibilings will be Visited. All flavors of Visit methods have a default implementation that returns 'true' (continue visiting). You need to only override methods that are interesting to you. Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. You should never change the document from a callback. @sa TiXmlNode::Accept() */ class TiXmlVisitor { public: virtual ~TiXmlVisitor() {} /// Visit a document. virtual bool VisitEnter( const TiXmlDocument& /*doc*/ ) { return true; } /// Visit a document. virtual bool VisitExit( const TiXmlDocument& /*doc*/ ) { return true; } /// Visit an element. virtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ ) { return true; } /// Visit an element. virtual bool VisitExit( const TiXmlElement& /*element*/ ) { return true; } /// Visit a declaration virtual bool Visit( const TiXmlDeclaration& /*declaration*/ ) { return true; } /// Visit a text node virtual bool Visit( const TiXmlText& /*text*/ ) { return true; } /// Visit a comment node virtual bool Visit( const TiXmlComment& /*comment*/ ) { return true; } /// Visit an unknown node virtual bool Visit( const TiXmlUnknown& /*unknown*/ ) { return true; } }; // Only used by Attribute::Query functions enum { TIXML_SUCCESS, TIXML_NO_ATTRIBUTE, TIXML_WRONG_TYPE }; // Used by the parsing routines. enum TiXmlEncoding { TIXML_ENCODING_UNKNOWN, TIXML_ENCODING_UTF8, TIXML_ENCODING_LEGACY }; const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN; /** TiXmlBase is a base class for every class in TinyXml. It does little except to establish that TinyXml classes can be printed and provide some utility functions. In XML, the document and elements can contain other elements and other types of nodes. @verbatim A Document can contain: Element (container or leaf) Comment (leaf) Unknown (leaf) Declaration( leaf ) An Element can contain: Element (container or leaf) Text (leaf) Attributes (not on tree) Comment (leaf) Unknown (leaf) A Declaration contains: Attributes (not on tree) @endverbatim */ class TiXmlBase { friend class TiXmlNode; friend class TiXmlElement; friend class TiXmlDocument; public: TiXmlBase() : userData(0) {} virtual ~TiXmlBase() {} /** All TinyXml classes can print themselves to a filestream or the string class (TiXmlString in non-STL mode, std::string in STL mode.) Either or both cfile and str can be null. This is a formatted print, and will insert tabs and newlines. (For an unformatted stream, use the << operator.) */ virtual void Print( FILE* cfile, int depth ) const = 0; /** The world does not agree on whether white space should be kept or not. In order to make everyone happy, these global, static functions are provided to set whether or not TinyXml will condense all white space into a single space or not. The default is to condense. Note changing this value is not thread safe. */ static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } /// Return the current white space setting. static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } /** Return the position, in the original source file, of this node or attribute. The row and column are 1-based. (That is the first row and first column is 1,1). If the returns values are 0 or less, then the parser does not have a row and column value. Generally, the row and column value will be set when the TiXmlDocument::Load(), TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set when the DOM was created from operator>>. The values reflect the initial load. Once the DOM is modified programmatically (by adding or changing nodes and attributes) the new values will NOT update to reflect changes in the document. There is a minor performance cost to computing the row and column. Computation can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value. @sa TiXmlDocument::SetTabSize() */ int Row() const { return location.row + 1; } int Column() const { return location.col + 1; } ///< See Row() void SetUserData( void* user ) { userData = user; } ///< Set a pointer to arbitrary user data. void* GetUserData() { return userData; } ///< Get a pointer to arbitrary user data. const void* GetUserData() const { return userData; } ///< Get a pointer to arbitrary user data. // Table that returns, for a given lead byte, the total number of bytes // in the UTF-8 sequence. static const int utf8ByteTable[256]; virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; /** Expands entities in a string. Note this should not contain the tag's '<', '>', etc, or they will be transformed into entities! */ static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out ); enum { TIXML_NO_ERROR = 0, TIXML_ERROR, TIXML_ERROR_OPENING_FILE, TIXML_ERROR_PARSING_ELEMENT, TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, TIXML_ERROR_READING_ELEMENT_VALUE, TIXML_ERROR_READING_ATTRIBUTES, TIXML_ERROR_PARSING_EMPTY, TIXML_ERROR_READING_END_TAG, TIXML_ERROR_PARSING_UNKNOWN, TIXML_ERROR_PARSING_COMMENT, TIXML_ERROR_PARSING_DECLARATION, TIXML_ERROR_DOCUMENT_EMPTY, TIXML_ERROR_EMBEDDED_NULL, TIXML_ERROR_PARSING_CDATA, TIXML_ERROR_DOCUMENT_TOP_ONLY, TIXML_ERROR_STRING_COUNT }; protected: static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); inline static bool IsWhiteSpace( char c ) { return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); } inline static bool IsWhiteSpace( int c ) { if ( c < 256 ) return IsWhiteSpace( (char) c ); return false; // Again, only truly correct for English/Latin...but usually works. } #ifdef TIXML_USE_STL static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ); static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag ); #endif /* Reads an XML name into the string provided. Returns a pointer just past the last character of the name, or 0 if the function has an error. */ static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding ); /* Reads text. Returns a pointer past the given end tag. Wickedly complex options, but it keeps the (sensitive) code in one place. */ static const char* ReadText( const char* in, // where to start TIXML_STRING* text, // the string read bool ignoreWhiteSpace, // whether to keep the white space const char* endTag, // what ends this text bool ignoreCase, // whether to ignore case in the end tag TiXmlEncoding encoding ); // the current encoding // If an entity has been found, transform it into a character. static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding ); // Get a character, while interpreting entities. // The length can be from 0 to 4 bytes. inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) { assert( p ); if ( encoding == TIXML_ENCODING_UTF8 ) { *length = utf8ByteTable[ *((const unsigned char*)p) ]; assert( *length >= 0 && *length < 5 ); } else { *length = 1; } if ( *length == 1 ) { if ( *p == '&' ) return GetEntity( p, _value, length, encoding ); *_value = *p; return p+1; } else if ( *length ) { //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe), // and the null terminator isn't needed for( int i=0; p[i] && i<*length; ++i ) { _value[i] = p[i]; } return p + (*length); } else { // Not valid text. return 0; } } // Return true if the next characters in the stream are any of the endTag sequences. // Ignore case only works for english, and should only be relied on when comparing // to English words: StringEqual( p, "version", true ) is fine. static bool StringEqual( const char* p, const char* endTag, bool ignoreCase, TiXmlEncoding encoding ); static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; TiXmlCursor location; /// Field containing a generic user pointer void* userData; // None of these methods are reliable for any language except English. // Good for approximation, not great for accuracy. static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); inline static int ToLower( int v, TiXmlEncoding encoding ) { if ( encoding == TIXML_ENCODING_UTF8 ) { if ( v < 128 ) return tolower( v ); return v; } else { return tolower( v ); } } static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); private: TiXmlBase( const TiXmlBase& ); // not implemented. void operator=( const TiXmlBase& base ); // not allowed. struct Entity { const char* str; unsigned int strLength; char chr; }; enum { NUM_ENTITY = 5, MAX_ENTITY_LENGTH = 6 }; static Entity entity[ NUM_ENTITY ]; static bool condenseWhiteSpace; }; /** The parent class for everything in the Document Object Model. (Except for attributes). Nodes have siblings, a parent, and children. A node can be in a document, or stand on its own. The type of a TiXmlNode can be queried, and it can be cast to its more defined type. */ class TiXmlNode : public TiXmlBase { friend class TiXmlDocument; friend class TiXmlElement; public: #ifdef TIXML_USE_STL /** An input stream operator, for every class. Tolerant of newlines and formatting, but doesn't expect them. */ friend std::istream& operator >> (std::istream& in, TiXmlNode& base); /** An output stream operator, for every class. Note that this outputs without any newlines or formatting, as opposed to Print(), which includes tabs and new lines. The operator<< and operator>> are not completely symmetric. Writing a node to a stream is very well defined. You'll get a nice stream of output, without any extra whitespace or newlines. But reading is not as well defined. (As it always is.) If you create a TiXmlElement (for example) and read that from an input stream, the text needs to define an element or junk will result. This is true of all input streams, but it's worth keeping in mind. A TiXmlDocument will read nodes until it reads a root element, and all the children of that root element. */ friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); /// Appends the XML node or attribute to a std::string. friend std::string& operator<< (std::string& out, const TiXmlNode& base ); #endif /** The types of XML nodes supported by TinyXml. (All the unsupported types are picked up by UNKNOWN.) */ enum NodeType { TINYXML_DOCUMENT, TINYXML_ELEMENT, TINYXML_COMMENT, TINYXML_UNKNOWN, TINYXML_TEXT, TINYXML_DECLARATION, TINYXML_TYPECOUNT }; virtual ~TiXmlNode(); /** The meaning of 'value' changes for the specific type of TiXmlNode. @verbatim Document: filename of the xml file Element: name of the element Comment: the comment text Unknown: the tag contents Text: the text string @endverbatim The subclasses will wrap this function. */ const char *Value() const { return value.c_str (); } #ifdef TIXML_USE_STL /** Return Value() as a std::string. If you only use STL, this is more efficient than calling Value(). Only available in STL mode. */ const std::string& ValueStr() const { return value; } #endif const TIXML_STRING& ValueTStr() const { return value; } /** Changes the value of the node. Defined as: @verbatim Document: filename of the xml file Element: name of the element Comment: the comment text Unknown: the tag contents Text: the text string @endverbatim */ void SetValue(const char * _value) { value = _value;} #ifdef TIXML_USE_STL /// STL std::string form. void SetValue( const std::string& _value ) { value = _value; } #endif /// Delete all the children of this node. Does not affect 'this'. void Clear(); /// One step up the DOM. TiXmlNode* Parent() { return parent; } const TiXmlNode* Parent() const { return parent; } const TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. TiXmlNode* FirstChild() { return firstChild; } const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. /// The first child of this node with the matching 'value'. Will be null if none found. TiXmlNode* FirstChild( const char * _value ) { // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe) // call the method, cast the return back to non-const. return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value )); } const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. TiXmlNode* LastChild() { return lastChild; } const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. TiXmlNode* LastChild( const char * _value ) { return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); } #ifdef TIXML_USE_STL const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); } ///< STL std::string form. TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); } ///< STL std::string form. const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); } ///< STL std::string form. TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); } ///< STL std::string form. #endif /** An alternate way to walk the children of a node. One way to iterate over nodes is: @verbatim for( child = parent->FirstChild(); child; child = child->NextSibling() ) @endverbatim IterateChildren does the same thing with the syntax: @verbatim child = 0; while( child = parent->IterateChildren( child ) ) @endverbatim IterateChildren takes the previous child as input and finds the next one. If the previous child is null, it returns the first. IterateChildren will return null when done. */ const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const; TiXmlNode* IterateChildren( const TiXmlNode* previous ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) ); } /// This flavor of IterateChildren searches for children with a particular 'value' const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const; TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) ); } #ifdef TIXML_USE_STL const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. #endif /** Add a new node related to this. Adds a child past the LastChild. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); /** Add a new node related to this. Adds a child past the LastChild. NOTE: the node to be added is passed by pointer, and will be henceforth owned (and deleted) by tinyXml. This method is efficient and avoids an extra copy, but should be used with care as it uses a different memory model than the other insert functions. @sa InsertEndChild */ TiXmlNode* LinkEndChild( TiXmlNode* addThis ); /** Add a new node related to this. Adds a child before the specified child. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); /** Add a new node related to this. Adds a child after the specified child. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); /** Replace a child of this node. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); /// Delete a child of this node. bool RemoveChild( TiXmlNode* removeThis ); /// Navigate to a sibling node. const TiXmlNode* PreviousSibling() const { return prev; } TiXmlNode* PreviousSibling() { return prev; } /// Navigate to a sibling node. const TiXmlNode* PreviousSibling( const char * ) const; TiXmlNode* PreviousSibling( const char *_prev ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) ); } #ifdef TIXML_USE_STL const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); } ///< STL std::string form. TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); } ///< STL std::string form. #endif /// Navigate to a sibling node. const TiXmlNode* NextSibling() const { return next; } TiXmlNode* NextSibling() { return next; } /// Navigate to a sibling node with the given 'value'. const TiXmlNode* NextSibling( const char * ) const; TiXmlNode* NextSibling( const char* _next ) { return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) ); } /** Convenience function to get through elements. Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element. */ const TiXmlElement* NextSiblingElement() const; TiXmlElement* NextSiblingElement() { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() ); } /** Convenience function to get through elements. Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element. */ const TiXmlElement* NextSiblingElement( const char * ) const; TiXmlElement* NextSiblingElement( const char *_next ) { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) ); } #ifdef TIXML_USE_STL const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. #endif /// Convenience function to get through elements. const TiXmlElement* FirstChildElement() const; TiXmlElement* FirstChildElement() { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() ); } /// Convenience function to get through elements. const TiXmlElement* FirstChildElement( const char * _value ) const; TiXmlElement* FirstChildElement( const char * _value ) { return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) ); } #ifdef TIXML_USE_STL const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. #endif /** Query the type (as an enumerated value, above) of this node. The possible types are: TINYXML_DOCUMENT, TINYXML_ELEMENT, TINYXML_COMMENT, TINYXML_UNKNOWN, TINYXML_TEXT, and TINYXML_DECLARATION. */ int Type() const { return type; } /** Return a pointer to the Document this node lives in. Returns null if not in a document. */ const TiXmlDocument* GetDocument() const; TiXmlDocument* GetDocument() { return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() ); } /// Returns true if this node has no children. bool NoChildren() const { return !firstChild; } virtual const TiXmlDocument* ToDocument() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlElement* ToElement() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlComment* ToComment() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlUnknown* ToUnknown() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlText* ToText() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlDocument* ToDocument() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlElement* ToElement() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlComment* ToComment() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlUnknown* ToUnknown() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlText* ToText() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. /** Create an exact duplicate of this node and return it. The memory must be deleted by the caller. */ virtual TiXmlNode* Clone() const = 0; /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the XML tree will be conditionally visited and the host will be called back via the TiXmlVisitor interface. This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse the XML for the callbacks, so the performance of TinyXML is unchanged by using this interface versus any other.) The interface has been based on ideas from: - http://www.saxproject.org/ - http://c2.com/cgi/wiki?HierarchicalVisitorPattern Which are both good references for "visiting". An example of using Accept(): @verbatim TiXmlPrinter printer; tinyxmlDoc.Accept( &printer ); const char* xmlcstr = printer.CStr(); @endverbatim */ virtual bool Accept( TiXmlVisitor* visitor ) const = 0; protected: TiXmlNode( NodeType _type ); // Copy to the allocated object. Shared functionality between Clone, Copy constructor, // and the assignment operator. void CopyTo( TiXmlNode* target ) const; #ifdef TIXML_USE_STL // The real work of the input operator. virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0; #endif // Figure out what is at *p, and parse it. Returns null if it is not an xml node. TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); TiXmlNode* parent; NodeType type; TiXmlNode* firstChild; TiXmlNode* lastChild; TIXML_STRING value; TiXmlNode* prev; TiXmlNode* next; private: TiXmlNode( const TiXmlNode& ); // not implemented. void operator=( const TiXmlNode& base ); // not allowed. }; /** An attribute is a name-value pair. Elements have an arbitrary number of attributes, each with a unique name. @note The attributes are not TiXmlNodes, since they are not part of the tinyXML document object model. There are other suggested ways to look at this problem. */ class TiXmlAttribute : public TiXmlBase { friend class TiXmlAttributeSet; public: /// Construct an empty attribute. TiXmlAttribute() : TiXmlBase() { document = 0; prev = next = 0; } #ifdef TIXML_USE_STL /// std::string constructor. TiXmlAttribute( const std::string& _name, const std::string& _value ) { name = _name; value = _value; document = 0; prev = next = 0; } #endif /// Construct an attribute with a name and value. TiXmlAttribute( const char * _name, const char * _value ) { name = _name; value = _value; document = 0; prev = next = 0; } const char* Name() const { return name.c_str(); } ///< Return the name of this attribute. const char* Value() const { return value.c_str(); } ///< Return the value of this attribute. #ifdef TIXML_USE_STL const std::string& ValueStr() const { return value; } ///< Return the value of this attribute. #endif int IntValue() const; ///< Return the value of this attribute, converted to an integer. double DoubleValue() const; ///< Return the value of this attribute, converted to a double. // Get the tinyxml string representation const TIXML_STRING& NameTStr() const { return name; } /** QueryIntValue examines the value string. It is an alternative to the IntValue() method with richer error checking. If the value is an integer, it is stored in 'value' and the call returns TIXML_SUCCESS. If it is not an integer, it returns TIXML_WRONG_TYPE. A specialized but useful call. Note that for success it returns 0, which is the opposite of almost all other TinyXml calls. */ int QueryIntValue( int* _value ) const; /// QueryDoubleValue examines the value string. See QueryIntValue(). int QueryDoubleValue( double* _value ) const; void SetName( const char* _name ) { name = _name; } ///< Set the name of this attribute. void SetValue( const char* _value ) { value = _value; } ///< Set the value. void SetIntValue( int _value ); ///< Set the value from an integer. void SetDoubleValue( double _value ); ///< Set the value from a double. #ifdef TIXML_USE_STL /// STL std::string form. void SetName( const std::string& _name ) { name = _name; } /// STL std::string form. void SetValue( const std::string& _value ) { value = _value; } #endif /// Get the next sibling attribute in the DOM. Returns null at end. const TiXmlAttribute* Next() const; TiXmlAttribute* Next() { return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); } /// Get the previous sibling attribute in the DOM. Returns null at beginning. const TiXmlAttribute* Previous() const; TiXmlAttribute* Previous() { return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); } bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } /* Attribute parsing starts: first letter of the name returns: the next char after the value end quote */ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); // Prints this Attribute to a FILE stream. virtual void Print( FILE* cfile, int depth ) const { Print( cfile, depth, 0 ); } void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; // [internal use] // Set the document pointer so the attribute can report errors. void SetDocument( TiXmlDocument* doc ) { document = doc; } private: TiXmlAttribute( const TiXmlAttribute& ); // not implemented. void operator=( const TiXmlAttribute& base ); // not allowed. TiXmlDocument* document; // A pointer back to a document, for error reporting. TIXML_STRING name; TIXML_STRING value; TiXmlAttribute* prev; TiXmlAttribute* next; }; /* A class used to manage a group of attributes. It is only used internally, both by the ELEMENT and the DECLARATION. The set can be changed transparent to the Element and Declaration classes that use it, but NOT transparent to the Attribute which has to implement a next() and previous() method. Which makes it a bit problematic and prevents the use of STL. This version is implemented with circular lists because: - I like circular lists - it demonstrates some independence from the (typical) doubly linked list. */ class TiXmlAttributeSet { public: TiXmlAttributeSet(); ~TiXmlAttributeSet(); void Add( TiXmlAttribute* attribute ); void Remove( TiXmlAttribute* attribute ); const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } TiXmlAttribute* First() { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } TiXmlAttribute* Find( const char* _name ) const; TiXmlAttribute* FindOrCreate( const char* _name ); # ifdef TIXML_USE_STL TiXmlAttribute* Find( const std::string& _name ) const; TiXmlAttribute* FindOrCreate( const std::string& _name ); # endif private: //*ME: Because of hidden/disabled copy-constructor in TiXmlAttribute (sentinel-element), //*ME: this class must be also use a hidden/disabled copy-constructor !!! TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute) TiXmlAttribute sentinel; }; /** The element is a container class. It has a value, the element name, and can contain other elements, text, comments, and unknowns. Elements also contain an arbitrary number of attributes. */ class TiXmlElement : public TiXmlNode { public: /// Construct an element. TiXmlElement (const char * in_value); #ifdef TIXML_USE_STL /// std::string constructor. TiXmlElement( const std::string& _value ); #endif TiXmlElement( const TiXmlElement& ); TiXmlElement& operator=( const TiXmlElement& base ); virtual ~TiXmlElement(); /** Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. */ const char* Attribute( const char* name ) const; /** Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. If the attribute exists and can be converted to an integer, the integer value will be put in the return 'i', if 'i' is non-null. */ const char* Attribute( const char* name, int* i ) const; /** Given an attribute name, Attribute() returns the value for the attribute of that name, or null if none exists. If the attribute exists and can be converted to an double, the double value will be put in the return 'd', if 'd' is non-null. */ const char* Attribute( const char* name, double* d ) const; /** QueryIntAttribute examines the attribute - it is an alternative to the Attribute() method with richer error checking. If the attribute is an integer, it is stored in 'value' and the call returns TIXML_SUCCESS. If it is not an integer, it returns TIXML_WRONG_TYPE. If the attribute does not exist, then TIXML_NO_ATTRIBUTE is returned. */ int QueryIntAttribute( const char* name, int* _value ) const; /// QueryUnsignedAttribute examines the attribute - see QueryIntAttribute(). int QueryUnsignedAttribute( const char* name, unsigned* _value ) const; /** QueryBoolAttribute examines the attribute - see QueryIntAttribute(). Note that '1', 'true', or 'yes' are considered true, while '0', 'false' and 'no' are considered false. */ int QueryBoolAttribute( const char* name, bool* _value ) const; /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute(). int QueryDoubleAttribute( const char* name, double* _value ) const; /// QueryFloatAttribute examines the attribute - see QueryIntAttribute(). int QueryFloatAttribute( const char* name, float* _value ) const { double d; int result = QueryDoubleAttribute( name, &d ); if ( result == TIXML_SUCCESS ) { *_value = (float)d; } return result; } #ifdef TIXML_USE_STL /// QueryStringAttribute examines the attribute - see QueryIntAttribute(). int QueryStringAttribute( const char* name, std::string* _value ) const { const char* cstr = Attribute( name ); if ( cstr ) { *_value = std::string( cstr ); return TIXML_SUCCESS; } return TIXML_NO_ATTRIBUTE; } /** Template form of the attribute query which will try to read the attribute into the specified type. Very easy, very powerful, but be careful to make sure to call this with the correct type. NOTE: This method doesn't work correctly for 'string' types that contain spaces. @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE */ template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; std::stringstream sstream( node->ValueStr() ); sstream >> *outValue; if ( !sstream.fail() ) return TIXML_SUCCESS; return TIXML_WRONG_TYPE; } int QueryValueAttribute( const std::string& name, std::string* outValue ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; *outValue = node->ValueStr(); return TIXML_SUCCESS; } #endif /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetAttribute( const char* name, const char * _value ); #ifdef TIXML_USE_STL const std::string* Attribute( const std::string& name ) const; const std::string* Attribute( const std::string& name, int* i ) const; const std::string* Attribute( const std::string& name, double* d ) const; int QueryIntAttribute( const std::string& name, int* _value ) const; int QueryDoubleAttribute( const std::string& name, double* _value ) const; /// STL std::string form. void SetAttribute( const std::string& name, const std::string& _value ); ///< STL std::string form. void SetAttribute( const std::string& name, int _value ); ///< STL std::string form. void SetDoubleAttribute( const std::string& name, double value ); #endif /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetAttribute( const char * name, int value ); /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetDoubleAttribute( const char * name, double value ); /** Deletes an attribute with the given name. */ void RemoveAttribute( const char * name ); #ifdef TIXML_USE_STL void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); } ///< STL std::string form. #endif const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. TiXmlAttribute* FirstAttribute() { return attributeSet.First(); } const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. TiXmlAttribute* LastAttribute() { return attributeSet.Last(); } /** Convenience function for easy access to the text inside an element. Although easy and concise, GetText() is limited compared to getting the TiXmlText child and accessing it directly. If the first child of 'this' is a TiXmlText, the GetText() returns the character string of the Text node, else null is returned. This is a convenient method for getting the text of simple contained text: @verbatim This is text const char* str = fooElement->GetText(); @endverbatim 'str' will be a pointer to "This is text". Note that this function can be misleading. If the element foo was created from this XML: @verbatim This is text @endverbatim then the value of str would be null. The first child node isn't a text node, it is another element. From this XML: @verbatim This is text @endverbatim GetText() will return "This is ". WARNING: GetText() accesses a child node - don't become confused with the similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are safe type casts on the referenced node. */ const char* GetText() const; /// Creates a new Element and returns it - the returned element is a copy. virtual TiXmlNode* Clone() const; // Print the Element to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; /* Attribute parsing starts: next char past '<' returns: next char past '>' */ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; protected: void CopyTo( TiXmlElement* target ) const; void ClearThis(); // like clear, but initializes 'this' object as well // Used to be public [internal use] #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif /* [internal use] Reads the "value" of the element -- another element, or text. This should terminate with the current end tag. */ const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); private: TiXmlAttributeSet attributeSet; }; /** An XML comment. */ class TiXmlComment : public TiXmlNode { public: /// Constructs an empty comment. TiXmlComment() : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {} /// Construct a comment from text. TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) { SetValue( _value ); } TiXmlComment( const TiXmlComment& ); TiXmlComment& operator=( const TiXmlComment& base ); virtual ~TiXmlComment() {} /// Returns a copy of this Comment. virtual TiXmlNode* Clone() const; // Write this Comment to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; /* Attribute parsing starts: at the ! of the !-- returns: next char past '>' */ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; protected: void CopyTo( TiXmlComment* target ) const; // used to be public #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif // virtual void StreamOut( TIXML_OSTREAM * out ) const; private: }; /** XML text. A text node can have 2 ways to output the next. "normal" output and CDATA. It will default to the mode it was parsed from the XML file and you generally want to leave it alone, but you can change the output mode with SetCDATA() and query it with CDATA(). */ class TiXmlText : public TiXmlNode { friend class TiXmlElement; public: /** Constructor for text element. By default, it is treated as normal, encoded text. If you want it be output as a CDATA text element, set the parameter _cdata to 'true' */ TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) { SetValue( initValue ); cdata = false; } virtual ~TiXmlText() {} #ifdef TIXML_USE_STL /// Constructor. TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) { SetValue( initValue ); cdata = false; } #endif TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TINYXML_TEXT ) { copy.CopyTo( this ); } TiXmlText& operator=( const TiXmlText& base ) { base.CopyTo( this ); return *this; } // Write this text object to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; /// Queries whether this represents text using a CDATA section. bool CDATA() const { return cdata; } /// Turns on or off a CDATA representation of text. void SetCDATA( bool _cdata ) { cdata = _cdata; } virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; protected : /// [internal use] Creates a new Element and returns it. virtual TiXmlNode* Clone() const; void CopyTo( TiXmlText* target ) const; bool Blank() const; // returns true if all white space and new lines // [internal use] #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif private: bool cdata; // true if this should be input and output as a CDATA style text element }; /** In correct XML the declaration is the first entry in the file. @verbatim @endverbatim TinyXml will happily read or write files without a declaration, however. There are 3 possible attributes to the declaration: version, encoding, and standalone. Note: In this version of the code, the attributes are handled as special cases, not generic attributes, simply because there can only be at most 3 and they are always the same. */ class TiXmlDeclaration : public TiXmlNode { public: /// Construct an empty declaration. TiXmlDeclaration() : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) {} #ifdef TIXML_USE_STL /// Constructor. TiXmlDeclaration( const std::string& _version, const std::string& _encoding, const std::string& _standalone ); #endif /// Construct. TiXmlDeclaration( const char* _version, const char* _encoding, const char* _standalone ); TiXmlDeclaration( const TiXmlDeclaration& copy ); TiXmlDeclaration& operator=( const TiXmlDeclaration& copy ); virtual ~TiXmlDeclaration() {} /// Version. Will return an empty string if none was found. const char *Version() const { return version.c_str (); } /// Encoding. Will return an empty string if none was found. const char *Encoding() const { return encoding.c_str (); } /// Is this a standalone document? const char *Standalone() const { return standalone.c_str (); } /// Creates a copy of this Declaration and returns it. virtual TiXmlNode* Clone() const; // Print this declaration to a FILE stream. virtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; virtual void Print( FILE* cfile, int depth ) const { Print( cfile, depth, 0 ); } virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* visitor ) const; protected: void CopyTo( TiXmlDeclaration* target ) const; // used to be public #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif private: TIXML_STRING version; TIXML_STRING encoding; TIXML_STRING standalone; }; /** Any tag that tinyXml doesn't recognize is saved as an unknown. It is a tag of text, but should not be modified. It will be written back to the XML, unchanged, when the file is saved. DTD tags get thrown into TiXmlUnknowns. */ class TiXmlUnknown : public TiXmlNode { public: TiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {} virtual ~TiXmlUnknown() {} TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) { copy.CopyTo( this ); } TiXmlUnknown& operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); return *this; } /// Creates a copy of this Unknown and returns it. virtual TiXmlNode* Clone() const; // Print this Unknown to a FILE stream. virtual void Print( FILE* cfile, int depth ) const; virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; protected: void CopyTo( TiXmlUnknown* target ) const; #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif private: }; /** Always the top level node. A document binds together all the XML pieces. It can be saved, loaded, and printed to the screen. The 'value' of a document node is the xml file name. */ class TiXmlDocument : public TiXmlNode { public: /// Create an empty document, that has no name. TiXmlDocument(); /// Create a document with a name. The name of the document is also the filename of the xml. TiXmlDocument( const char * documentName ); #ifdef TIXML_USE_STL /// Constructor. TiXmlDocument( const std::string& documentName ); #endif TiXmlDocument( const TiXmlDocument& copy ); TiXmlDocument& operator=( const TiXmlDocument& copy ); virtual ~TiXmlDocument() {} /** Load a file using the current document value. Returns true if successful. Will delete any existing document data before loading. */ bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the current document value. Returns true if successful. bool SaveFile() const; /// Load a file using the given filename. Returns true if successful. bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the given filename. Returns true if successful. bool SaveFile( const char * filename ) const; /** Load a file using the given FILE*. Returns true if successful. Note that this method doesn't stream - the entire object pointed at by the FILE* will be interpreted as an XML file. TinyXML doesn't stream in XML from the current file location. Streaming may be added in the future. */ bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the given FILE*. Returns true if successful. bool SaveFile( FILE* ) const; #ifdef TIXML_USE_STL bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) ///< STL std::string version. { return LoadFile( filename.c_str(), encoding ); } bool SaveFile( const std::string& filename ) const ///< STL std::string version. { return SaveFile( filename.c_str() ); } #endif /** Parse the given null terminated block of xml data. Passing in an encoding to this method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml to use that encoding, regardless of what TinyXml might otherwise try to detect. */ virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /** Get the root element -- the only top level element -- of the document. In well formed XML, there should only be one. TinyXml is tolerant of multiple elements at the document level. */ const TiXmlElement* RootElement() const { return FirstChildElement(); } TiXmlElement* RootElement() { return FirstChildElement(); } /** If an error occurs, Error will be set to true. Also, - The ErrorId() will contain the integer identifier of the error (not generally useful) - The ErrorDesc() method will return the name of the error. (very useful) - The ErrorRow() and ErrorCol() will return the location of the error (if known) */ bool Error() const { return error; } /// Contains a textual (english) description of the error if one occurs. const char * ErrorDesc() const { return errorDesc.c_str (); } /** Generally, you probably want the error string ( ErrorDesc() ). But if you prefer the ErrorId, this function will fetch it. */ int ErrorId() const { return errorId; } /** Returns the location (if known) of the error. The first column is column 1, and the first row is row 1. A value of 0 means the row and column wasn't applicable (memory errors, for example, have no row/column) or the parser lost the error. (An error in the error reporting, in that case.) @sa SetTabSize, Row, Column */ int ErrorRow() const { return errorLocation.row+1; } int ErrorCol() const { return errorLocation.col+1; } ///< The column where the error occured. See ErrorRow() /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) to report the correct values for row and column. It does not change the output or input in any way. By calling this method, with a tab size greater than 0, the row and column of each node and attribute is stored when the file is loaded. Very useful for tracking the DOM back in to the source file. The tab size is required for calculating the location of nodes. If not set, the default of 4 is used. The tabsize is set per document. Setting the tabsize to 0 disables row/column tracking. Note that row and column tracking is not supported when using operator>>. The tab size needs to be enabled before the parse or load. Correct usage: @verbatim TiXmlDocument doc; doc.SetTabSize( 8 ); doc.Load( "myfile.xml" ); @endverbatim @sa Row, Column */ void SetTabSize( int _tabsize ) { tabsize = _tabsize; } int TabSize() const { return tabsize; } /** If you have handled the error, it can be reset with this call. The error state is automatically cleared if you Parse a new XML block. */ void ClearError() { error = false; errorId = 0; errorDesc = ""; errorLocation.row = errorLocation.col = 0; //errorLocation.last = 0; } /** Write the document to standard out using formatted printing ("pretty print"). */ void Print() const { Print( stdout, 0 ); } /* Write the document to a string using formatted printing ("pretty print"). This will allocate a character array (new char[]) and return it as a pointer. The calling code pust call delete[] on the return char* to avoid a memory leak. */ //char* PrintToMemory() const; /// Print this Document to a FILE stream. virtual void Print( FILE* cfile, int depth = 0 ) const; // [internal use] void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding ); virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. /** Walk the XML tree visiting this node and all of its children. */ virtual bool Accept( TiXmlVisitor* content ) const; protected : // [internal use] virtual TiXmlNode* Clone() const; #ifdef TIXML_USE_STL virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif private: void CopyTo( TiXmlDocument* target ) const; bool error; int errorId; TIXML_STRING errorDesc; int tabsize; TiXmlCursor errorLocation; bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. }; /** A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml DOM structure. It is a separate utility class. Take an example: @verbatim @endverbatim Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very easy to write a *lot* of code that looks like: @verbatim TiXmlElement* root = document.FirstChildElement( "Document" ); if ( root ) { TiXmlElement* element = root->FirstChildElement( "Element" ); if ( element ) { TiXmlElement* child = element->FirstChildElement( "Child" ); if ( child ) { TiXmlElement* child2 = child->NextSiblingElement( "Child" ); if ( child2 ) { // Finally do something useful. @endverbatim And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity of such code. A TiXmlHandle checks for null pointers so it is perfectly safe and correct to use: @verbatim TiXmlHandle docHandle( &document ); TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); if ( child2 ) { // do something useful @endverbatim Which is MUCH more concise and useful. It is also safe to copy handles - internally they are nothing more than node pointers. @verbatim TiXmlHandle handleCopy = handle; @endverbatim What they should not be used for is iteration: @verbatim int i=0; while ( true ) { TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); if ( !child ) break; // do something ++i; } @endverbatim It seems reasonable, but it is in fact two embedded while loops. The Child method is a linear walk to find the element, so this code would iterate much more than it needs to. Instead, prefer: @verbatim TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement(); for( child; child; child=child->NextSiblingElement() ) { // do something } @endverbatim */ class TiXmlHandle { public: /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. TiXmlHandle( TiXmlNode* _node ) { this->node = _node; } /// Copy constructor TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; } TiXmlHandle operator=( const TiXmlHandle& ref ) { if ( &ref != this ) this->node = ref.node; return *this; } /// Return a handle to the first child node. TiXmlHandle FirstChild() const; /// Return a handle to the first child node with the given name. TiXmlHandle FirstChild( const char * value ) const; /// Return a handle to the first child element. TiXmlHandle FirstChildElement() const; /// Return a handle to the first child element with the given name. TiXmlHandle FirstChildElement( const char * value ) const; /** Return a handle to the "index" child with the given name. The first child is 0, the second 1, etc. */ TiXmlHandle Child( const char* value, int index ) const; /** Return a handle to the "index" child. The first child is 0, the second 1, etc. */ TiXmlHandle Child( int index ) const; /** Return a handle to the "index" child element with the given name. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted. */ TiXmlHandle ChildElement( const char* value, int index ) const; /** Return a handle to the "index" child element. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted. */ TiXmlHandle ChildElement( int index ) const; #ifdef TIXML_USE_STL TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); } TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); } TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); } TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); } #endif /** Return the handle as a TiXmlNode. This may return null. */ TiXmlNode* ToNode() const { return node; } /** Return the handle as a TiXmlElement. This may return null. */ TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } /** Return the handle as a TiXmlText. This may return null. */ TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } /** Return the handle as a TiXmlUnknown. This may return null. */ TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } /** @deprecated use ToNode. Return the handle as a TiXmlNode. This may return null. */ TiXmlNode* Node() const { return ToNode(); } /** @deprecated use ToElement. Return the handle as a TiXmlElement. This may return null. */ TiXmlElement* Element() const { return ToElement(); } /** @deprecated use ToText() Return the handle as a TiXmlText. This may return null. */ TiXmlText* Text() const { return ToText(); } /** @deprecated use ToUnknown() Return the handle as a TiXmlUnknown. This may return null. */ TiXmlUnknown* Unknown() const { return ToUnknown(); } private: TiXmlNode* node; }; /** Print to memory functionality. The TiXmlPrinter is useful when you need to: -# Print to memory (especially in non-STL mode) -# Control formatting (line endings, etc.) When constructed, the TiXmlPrinter is in its default "pretty printing" mode. Before calling Accept() you can call methods to control the printing of the XML document. After TiXmlNode::Accept() is called, the printed document can be accessed via the CStr(), Str(), and Size() methods. TiXmlPrinter uses the Visitor API. @verbatim TiXmlPrinter printer; printer.SetIndent( "\t" ); doc.Accept( &printer ); fprintf( stdout, "%s", printer.CStr() ); @endverbatim */ class TiXmlPrinter : public TiXmlVisitor { public: TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ), buffer(), indent( " " ), lineBreak( "\n" ) {} virtual bool VisitEnter( const TiXmlDocument& doc ); virtual bool VisitExit( const TiXmlDocument& doc ); virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ); virtual bool VisitExit( const TiXmlElement& element ); virtual bool Visit( const TiXmlDeclaration& declaration ); virtual bool Visit( const TiXmlText& text ); virtual bool Visit( const TiXmlComment& comment ); virtual bool Visit( const TiXmlUnknown& unknown ); /** Set the indent characters for printing. By default 4 spaces but tab (\t) is also useful, or null/empty string for no indentation. */ void SetIndent( const char* _indent ) { indent = _indent ? _indent : "" ; } /// Query the indention string. const char* Indent() { return indent.c_str(); } /** Set the line breaking string. By default set to newline (\n). Some operating systems prefer other characters, or can be set to the null/empty string for no indenation. */ void SetLineBreak( const char* _lineBreak ) { lineBreak = _lineBreak ? _lineBreak : ""; } /// Query the current line breaking string. const char* LineBreak() { return lineBreak.c_str(); } /** Switch over to "stream printing" which is the most dense formatting without linebreaks. Common when the XML is needed for network transmission. */ void SetStreamPrinting() { indent = ""; lineBreak = ""; } /// Return the result. const char* CStr() { return buffer.c_str(); } /// Return the length of the result string. size_t Size() { return buffer.size(); } #ifdef TIXML_USE_STL /// Return the result. const std::string& Str() { return buffer; } #endif private: void DoIndent() { for( int i=0; i #ifdef TIXML_USE_STL #include #include #endif #include "tinyxml.h" FILE* TiXmlFOpen( const char* filename, const char* mode ); bool TiXmlBase::condenseWhiteSpace = true; // Microsoft compiler security FILE* TiXmlFOpen( const char* filename, const char* mode ) { #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) FILE* fp = 0; errno_t err = fopen_s( &fp, filename, mode ); if ( !err && fp ) return fp; return 0; #else return fopen( filename, mode ); #endif } void TiXmlBase::EncodeString( const TIXML_STRING& str, TIXML_STRING* outString ) { int i=0; while( i<(int)str.length() ) { unsigned char c = (unsigned char) str[i]; if ( c == '&' && i < ( (int)str.length() - 2 ) && str[i+1] == '#' && str[i+2] == 'x' ) { // Hexadecimal character reference. // Pass through unchanged. // © -- copyright symbol, for example. // // The -1 is a bug fix from Rob Laveaux. It keeps // an overflow from happening if there is no ';'. // There are actually 2 ways to exit this loop - // while fails (error case) and break (semicolon found). // However, there is no mechanism (currently) for // this function to return an error. while ( i<(int)str.length()-1 ) { outString->append( str.c_str() + i, 1 ); ++i; if ( str[i] == ';' ) break; } } else if ( c == '&' ) { outString->append( entity[0].str, entity[0].strLength ); ++i; } else if ( c == '<' ) { outString->append( entity[1].str, entity[1].strLength ); ++i; } else if ( c == '>' ) { outString->append( entity[2].str, entity[2].strLength ); ++i; } else if ( c == '\"' ) { outString->append( entity[3].str, entity[3].strLength ); ++i; } else if ( c == '\'' ) { outString->append( entity[4].str, entity[4].strLength ); ++i; } else if ( c < 32 ) { // Easy pass at non-alpha/numeric/symbol // Below 32 is symbolic. char buf[ 32 ]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "&#x%02X;", (unsigned) ( c & 0xff ) ); #else sprintf( buf, "&#x%02X;", (unsigned) ( c & 0xff ) ); #endif //*ME: warning C4267: convert 'size_t' to 'int' //*ME: Int-Cast to make compiler happy ... outString->append( buf, (int)strlen( buf ) ); ++i; } else { //char realc = (char) c; //outString->append( &realc, 1 ); *outString += (char) c; // somewhat more efficient function call. ++i; } } } TiXmlNode::TiXmlNode( NodeType _type ) : TiXmlBase() { parent = 0; type = _type; firstChild = 0; lastChild = 0; prev = 0; next = 0; } TiXmlNode::~TiXmlNode() { TiXmlNode* node = firstChild; TiXmlNode* temp = 0; while ( node ) { temp = node; node = node->next; delete temp; } } void TiXmlNode::CopyTo( TiXmlNode* target ) const { target->SetValue (value.c_str() ); target->userData = userData; target->location = location; } void TiXmlNode::Clear() { TiXmlNode* node = firstChild; TiXmlNode* temp = 0; while ( node ) { temp = node; node = node->next; delete temp; } firstChild = 0; lastChild = 0; } TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node ) { assert( node->parent == 0 || node->parent == this ); assert( node->GetDocument() == 0 || node->GetDocument() == this->GetDocument() ); if ( node->Type() == TiXmlNode::TINYXML_DOCUMENT ) { delete node; if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } node->parent = this; node->prev = lastChild; node->next = 0; if ( lastChild ) lastChild->next = node; else firstChild = node; // it was an empty list. lastChild = node; return node; } TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis ) { if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) { if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; return LinkEndChild( node ); } TiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ) { if ( !beforeThis || beforeThis->parent != this ) { return 0; } if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) { if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; node->parent = this; node->next = beforeThis; node->prev = beforeThis->prev; if ( beforeThis->prev ) { beforeThis->prev->next = node; } else { assert( firstChild == beforeThis ); firstChild = node; } beforeThis->prev = node; return node; } TiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ) { if ( !afterThis || afterThis->parent != this ) { return 0; } if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) { if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; node->parent = this; node->prev = afterThis; node->next = afterThis->next; if ( afterThis->next ) { afterThis->next->prev = node; } else { assert( lastChild == afterThis ); lastChild = node; } afterThis->next = node; return node; } TiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ) { if ( !replaceThis ) return 0; if ( replaceThis->parent != this ) return 0; if ( withThis.ToDocument() ) { // A document can never be a child. Thanks to Noam. TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } TiXmlNode* node = withThis.Clone(); if ( !node ) return 0; node->next = replaceThis->next; node->prev = replaceThis->prev; if ( replaceThis->next ) replaceThis->next->prev = node; else lastChild = node; if ( replaceThis->prev ) replaceThis->prev->next = node; else firstChild = node; delete replaceThis; node->parent = this; return node; } bool TiXmlNode::RemoveChild( TiXmlNode* removeThis ) { if ( !removeThis ) { return false; } if ( removeThis->parent != this ) { assert( 0 ); return false; } if ( removeThis->next ) removeThis->next->prev = removeThis->prev; else lastChild = removeThis->prev; if ( removeThis->prev ) removeThis->prev->next = removeThis->next; else firstChild = removeThis->next; delete removeThis; return true; } const TiXmlNode* TiXmlNode::FirstChild( const char * _value ) const { const TiXmlNode* node; for ( node = firstChild; node; node = node->next ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } const TiXmlNode* TiXmlNode::LastChild( const char * _value ) const { const TiXmlNode* node; for ( node = lastChild; node; node = node->prev ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } const TiXmlNode* TiXmlNode::IterateChildren( const TiXmlNode* previous ) const { if ( !previous ) { return FirstChild(); } else { assert( previous->parent == this ); return previous->NextSibling(); } } const TiXmlNode* TiXmlNode::IterateChildren( const char * val, const TiXmlNode* previous ) const { if ( !previous ) { return FirstChild( val ); } else { assert( previous->parent == this ); return previous->NextSibling( val ); } } const TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const { const TiXmlNode* node; for ( node = next; node; node = node->next ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } const TiXmlNode* TiXmlNode::PreviousSibling( const char * _value ) const { const TiXmlNode* node; for ( node = prev; node; node = node->prev ) { if ( strcmp( node->Value(), _value ) == 0 ) return node; } return 0; } void TiXmlElement::RemoveAttribute( const char * name ) { #ifdef TIXML_USE_STL TIXML_STRING str( name ); TiXmlAttribute* node = attributeSet.Find( str ); #else TiXmlAttribute* node = attributeSet.Find( name ); #endif if ( node ) { attributeSet.Remove( node ); delete node; } } const TiXmlElement* TiXmlNode::FirstChildElement() const { const TiXmlNode* node; for ( node = FirstChild(); node; node = node->NextSibling() ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlElement* TiXmlNode::FirstChildElement( const char * _value ) const { const TiXmlNode* node; for ( node = FirstChild( _value ); node; node = node->NextSibling( _value ) ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlElement* TiXmlNode::NextSiblingElement() const { const TiXmlNode* node; for ( node = NextSibling(); node; node = node->NextSibling() ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlElement* TiXmlNode::NextSiblingElement( const char * _value ) const { const TiXmlNode* node; for ( node = NextSibling( _value ); node; node = node->NextSibling( _value ) ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } const TiXmlDocument* TiXmlNode::GetDocument() const { const TiXmlNode* node; for( node = this; node; node = node->parent ) { if ( node->ToDocument() ) return node->ToDocument(); } return 0; } TiXmlElement::TiXmlElement (const char * _value) : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) { firstChild = lastChild = 0; value = _value; } #ifdef TIXML_USE_STL TiXmlElement::TiXmlElement( const std::string& _value ) : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) { firstChild = lastChild = 0; value = _value; } #endif TiXmlElement::TiXmlElement( const TiXmlElement& copy) : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) { firstChild = lastChild = 0; copy.CopyTo( this ); } TiXmlElement& TiXmlElement::operator=( const TiXmlElement& base ) { ClearThis(); base.CopyTo( this ); return *this; } TiXmlElement::~TiXmlElement() { ClearThis(); } void TiXmlElement::ClearThis() { Clear(); while( attributeSet.First() ) { TiXmlAttribute* node = attributeSet.First(); attributeSet.Remove( node ); delete node; } } const char* TiXmlElement::Attribute( const char* name ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( node ) return node->Value(); return 0; } #ifdef TIXML_USE_STL const std::string* TiXmlElement::Attribute( const std::string& name ) const { const TiXmlAttribute* attrib = attributeSet.Find( name ); if ( attrib ) return &attrib->ValueStr(); return 0; } #endif const char* TiXmlElement::Attribute( const char* name, int* i ) const { const TiXmlAttribute* attrib = attributeSet.Find( name ); const char* result = 0; if ( attrib ) { result = attrib->Value(); if ( i ) { attrib->QueryIntValue( i ); } } return result; } #ifdef TIXML_USE_STL const std::string* TiXmlElement::Attribute( const std::string& name, int* i ) const { const TiXmlAttribute* attrib = attributeSet.Find( name ); const std::string* result = 0; if ( attrib ) { result = &attrib->ValueStr(); if ( i ) { attrib->QueryIntValue( i ); } } return result; } #endif const char* TiXmlElement::Attribute( const char* name, double* d ) const { const TiXmlAttribute* attrib = attributeSet.Find( name ); const char* result = 0; if ( attrib ) { result = attrib->Value(); if ( d ) { attrib->QueryDoubleValue( d ); } } return result; } #ifdef TIXML_USE_STL const std::string* TiXmlElement::Attribute( const std::string& name, double* d ) const { const TiXmlAttribute* attrib = attributeSet.Find( name ); const std::string* result = 0; if ( attrib ) { result = &attrib->ValueStr(); if ( d ) { attrib->QueryDoubleValue( d ); } } return result; } #endif int TiXmlElement::QueryIntAttribute( const char* name, int* ival ) const { const TiXmlAttribute* attrib = attributeSet.Find( name ); if ( !attrib ) return TIXML_NO_ATTRIBUTE; return attrib->QueryIntValue( ival ); } int TiXmlElement::QueryUnsignedAttribute( const char* name, unsigned* value ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; int ival = 0; int result = node->QueryIntValue( &ival ); *value = (unsigned)ival; return result; } int TiXmlElement::QueryBoolAttribute( const char* name, bool* bval ) const { const TiXmlAttribute* node = attributeSet.Find( name ); if ( !node ) return TIXML_NO_ATTRIBUTE; int result = TIXML_WRONG_TYPE; if ( StringEqual( node->Value(), "true", true, TIXML_ENCODING_UNKNOWN ) || StringEqual( node->Value(), "yes", true, TIXML_ENCODING_UNKNOWN ) || StringEqual( node->Value(), "1", true, TIXML_ENCODING_UNKNOWN ) ) { *bval = true; result = TIXML_SUCCESS; } else if ( StringEqual( node->Value(), "false", true, TIXML_ENCODING_UNKNOWN ) || StringEqual( node->Value(), "no", true, TIXML_ENCODING_UNKNOWN ) || StringEqual( node->Value(), "0", true, TIXML_ENCODING_UNKNOWN ) ) { *bval = false; result = TIXML_SUCCESS; } return result; } #ifdef TIXML_USE_STL int TiXmlElement::QueryIntAttribute( const std::string& name, int* ival ) const { const TiXmlAttribute* attrib = attributeSet.Find( name ); if ( !attrib ) return TIXML_NO_ATTRIBUTE; return attrib->QueryIntValue( ival ); } #endif int TiXmlElement::QueryDoubleAttribute( const char* name, double* dval ) const { const TiXmlAttribute* attrib = attributeSet.Find( name ); if ( !attrib ) return TIXML_NO_ATTRIBUTE; return attrib->QueryDoubleValue( dval ); } #ifdef TIXML_USE_STL int TiXmlElement::QueryDoubleAttribute( const std::string& name, double* dval ) const { const TiXmlAttribute* attrib = attributeSet.Find( name ); if ( !attrib ) return TIXML_NO_ATTRIBUTE; return attrib->QueryDoubleValue( dval ); } #endif void TiXmlElement::SetAttribute( const char * name, int val ) { TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); if ( attrib ) { attrib->SetIntValue( val ); } } #ifdef TIXML_USE_STL void TiXmlElement::SetAttribute( const std::string& name, int val ) { TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); if ( attrib ) { attrib->SetIntValue( val ); } } #endif void TiXmlElement::SetDoubleAttribute( const char * name, double val ) { TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); if ( attrib ) { attrib->SetDoubleValue( val ); } } #ifdef TIXML_USE_STL void TiXmlElement::SetDoubleAttribute( const std::string& name, double val ) { TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); if ( attrib ) { attrib->SetDoubleValue( val ); } } #endif void TiXmlElement::SetAttribute( const char * cname, const char * cvalue ) { TiXmlAttribute* attrib = attributeSet.FindOrCreate( cname ); if ( attrib ) { attrib->SetValue( cvalue ); } } #ifdef TIXML_USE_STL void TiXmlElement::SetAttribute( const std::string& _name, const std::string& _value ) { TiXmlAttribute* attrib = attributeSet.FindOrCreate( _name ); if ( attrib ) { attrib->SetValue( _value ); } } #endif void TiXmlElement::Print( FILE* cfile, int depth ) const { int i; assert( cfile ); for ( i=0; iNext() ) { fprintf( cfile, " " ); attrib->Print( cfile, depth ); } // There are 3 different formatting approaches: // 1) An element without children is printed as a node // 2) An element with only a text child is printed as text // 3) An element with children is printed on multiple lines. TiXmlNode* node; if ( !firstChild ) { fprintf( cfile, " />" ); } else if ( firstChild == lastChild && firstChild->ToText() ) { fprintf( cfile, ">" ); firstChild->Print( cfile, depth + 1 ); fprintf( cfile, "", value.c_str() ); } else { fprintf( cfile, ">" ); for ( node = firstChild; node; node=node->NextSibling() ) { if ( !node->ToText() ) { fprintf( cfile, "\n" ); } node->Print( cfile, depth+1 ); } fprintf( cfile, "\n" ); for( i=0; i", value.c_str() ); } } void TiXmlElement::CopyTo( TiXmlElement* target ) const { // superclass: TiXmlNode::CopyTo( target ); // Element class: // Clone the attributes, then clone the children. const TiXmlAttribute* attribute = 0; for( attribute = attributeSet.First(); attribute; attribute = attribute->Next() ) { target->SetAttribute( attribute->Name(), attribute->Value() ); } TiXmlNode* node = 0; for ( node = firstChild; node; node = node->NextSibling() ) { target->LinkEndChild( node->Clone() ); } } bool TiXmlElement::Accept( TiXmlVisitor* visitor ) const { if ( visitor->VisitEnter( *this, attributeSet.First() ) ) { for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) { if ( !node->Accept( visitor ) ) break; } } return visitor->VisitExit( *this ); } TiXmlNode* TiXmlElement::Clone() const { TiXmlElement* clone = new TiXmlElement( Value() ); if ( !clone ) return 0; CopyTo( clone ); return clone; } const char* TiXmlElement::GetText() const { const TiXmlNode* child = this->FirstChild(); if ( child ) { const TiXmlText* childText = child->ToText(); if ( childText ) { return childText->Value(); } } return 0; } TiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) { tabsize = 4; useMicrosoftBOM = false; ClearError(); } TiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) { tabsize = 4; useMicrosoftBOM = false; value = documentName; ClearError(); } #ifdef TIXML_USE_STL TiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) { tabsize = 4; useMicrosoftBOM = false; value = documentName; ClearError(); } #endif TiXmlDocument::TiXmlDocument( const TiXmlDocument& copy ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) { copy.CopyTo( this ); } TiXmlDocument& TiXmlDocument::operator=( const TiXmlDocument& copy ) { Clear(); copy.CopyTo( this ); return *this; } bool TiXmlDocument::LoadFile( TiXmlEncoding encoding ) { return LoadFile( Value(), encoding ); } bool TiXmlDocument::SaveFile() const { return SaveFile( Value() ); } bool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding ) { TIXML_STRING filename( _filename ); value = filename; // reading in binary mode so that tinyxml can normalize the EOL FILE* file = TiXmlFOpen( value.c_str (), "rb" ); if ( file ) { bool result = LoadFile( file, encoding ); fclose( file ); return result; } else { SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } } bool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding ) { if ( !file ) { SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } // Delete the existing data: Clear(); location.Clear(); // Get the file size, so we can pre-allocate the string. HUGE speed impact. long length = 0; fseek( file, 0, SEEK_END ); length = ftell( file ); fseek( file, 0, SEEK_SET ); // Strange case, but good to handle up front. if ( length <= 0 ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } // Subtle bug here. TinyXml did use fgets. But from the XML spec: // 2.11 End-of-Line Handling // // // ...the XML processor MUST behave as if it normalized all line breaks in external // parsed entities (including the document entity) on input, before parsing, by translating // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to // a single #xA character. // // // It is not clear fgets does that, and certainly isn't clear it works cross platform. // Generally, you expect fgets to translate from the convention of the OS to the c/unix // convention, and not work generally. /* while( fgets( buf, sizeof(buf), file ) ) { data += buf; } */ char* buf = new char[ length+1 ]; buf[0] = 0; if ( fread( buf, length, 1, file ) != 1 ) { delete [] buf; SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); return false; } // Process the buffer in place to normalize new lines. (See comment above.) // Copies from the 'p' to 'q' pointer, where p can advance faster if // a newline-carriage return is hit. // // Wikipedia: // Systems based on ASCII or a compatible character set use either LF (Line feed, '\n', 0x0A, 10 in decimal) or // CR (Carriage return, '\r', 0x0D, 13 in decimal) individually, or CR followed by LF (CR+LF, 0x0D 0x0A)... // * LF: Multics, Unix and Unix-like systems (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD, etc.), BeOS, Amiga, RISC OS, and others // * CR+LF: DEC RT-11 and most other early non-Unix, non-IBM OSes, CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS // * CR: Commodore 8-bit machines, Apple II family, Mac OS up to version 9 and OS-9 const char* p = buf; // the read head char* q = buf; // the write head const char CR = 0x0d; const char LF = 0x0a; buf[length] = 0; while( *p ) { assert( p < (buf+length) ); assert( q <= (buf+length) ); assert( q <= p ); if ( *p == CR ) { *q++ = LF; p++; if ( *p == LF ) { // check for CR+LF (and skip LF) p++; } } else { *q++ = *p++; } } assert( q <= (buf+length) ); *q = 0; Parse( buf, 0, encoding ); delete [] buf; return !Error(); } bool TiXmlDocument::SaveFile( const char * filename ) const { // The old c stuff lives on... FILE* fp = TiXmlFOpen( filename, "w" ); if ( fp ) { bool result = SaveFile( fp ); fclose( fp ); return result; } return false; } bool TiXmlDocument::SaveFile( FILE* fp ) const { if ( useMicrosoftBOM ) { const unsigned char TIXML_UTF_LEAD_0 = 0xefU; const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; fputc( TIXML_UTF_LEAD_0, fp ); fputc( TIXML_UTF_LEAD_1, fp ); fputc( TIXML_UTF_LEAD_2, fp ); } Print( fp, 0 ); return (ferror(fp) == 0); } void TiXmlDocument::CopyTo( TiXmlDocument* target ) const { TiXmlNode::CopyTo( target ); target->error = error; target->errorId = errorId; target->errorDesc = errorDesc; target->tabsize = tabsize; target->errorLocation = errorLocation; target->useMicrosoftBOM = useMicrosoftBOM; TiXmlNode* node = 0; for ( node = firstChild; node; node = node->NextSibling() ) { target->LinkEndChild( node->Clone() ); } } TiXmlNode* TiXmlDocument::Clone() const { TiXmlDocument* clone = new TiXmlDocument(); if ( !clone ) return 0; CopyTo( clone ); return clone; } void TiXmlDocument::Print( FILE* cfile, int depth ) const { assert( cfile ); for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) { node->Print( cfile, depth ); fprintf( cfile, "\n" ); } } bool TiXmlDocument::Accept( TiXmlVisitor* visitor ) const { if ( visitor->VisitEnter( *this ) ) { for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) { if ( !node->Accept( visitor ) ) break; } } return visitor->VisitExit( *this ); } const TiXmlAttribute* TiXmlAttribute::Next() const { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( next->value.empty() && next->name.empty() ) return 0; return next; } /* TiXmlAttribute* TiXmlAttribute::Next() { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( next->value.empty() && next->name.empty() ) return 0; return next; } */ const TiXmlAttribute* TiXmlAttribute::Previous() const { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( prev->value.empty() && prev->name.empty() ) return 0; return prev; } /* TiXmlAttribute* TiXmlAttribute::Previous() { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( prev->value.empty() && prev->name.empty() ) return 0; return prev; } */ void TiXmlAttribute::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const { TIXML_STRING n, v; EncodeString( name, &n ); EncodeString( value, &v ); if (value.find ('\"') == TIXML_STRING::npos) { if ( cfile ) { fprintf (cfile, "%s=\"%s\"", n.c_str(), v.c_str() ); } if ( str ) { (*str) += n; (*str) += "=\""; (*str) += v; (*str) += "\""; } } else { if ( cfile ) { fprintf (cfile, "%s='%s'", n.c_str(), v.c_str() ); } if ( str ) { (*str) += n; (*str) += "='"; (*str) += v; (*str) += "'"; } } } int TiXmlAttribute::QueryIntValue( int* ival ) const { if ( TIXML_SSCANF( value.c_str(), "%d", ival ) == 1 ) return TIXML_SUCCESS; return TIXML_WRONG_TYPE; } int TiXmlAttribute::QueryDoubleValue( double* dval ) const { if ( TIXML_SSCANF( value.c_str(), "%lf", dval ) == 1 ) return TIXML_SUCCESS; return TIXML_WRONG_TYPE; } void TiXmlAttribute::SetIntValue( int _value ) { char buf [64]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF(buf, sizeof(buf), "%d", _value); #else sprintf (buf, "%d", _value); #endif SetValue (buf); } void TiXmlAttribute::SetDoubleValue( double _value ) { char buf [256]; #if defined(TIXML_SNPRINTF) TIXML_SNPRINTF( buf, sizeof(buf), "%g", _value); #else sprintf (buf, "%g", _value); #endif SetValue (buf); } int TiXmlAttribute::IntValue() const { return atoi (value.c_str ()); } double TiXmlAttribute::DoubleValue() const { return atof (value.c_str ()); } TiXmlComment::TiXmlComment( const TiXmlComment& copy ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) { copy.CopyTo( this ); } TiXmlComment& TiXmlComment::operator=( const TiXmlComment& base ) { Clear(); base.CopyTo( this ); return *this; } void TiXmlComment::Print( FILE* cfile, int depth ) const { assert( cfile ); for ( int i=0; i", value.c_str() ); } void TiXmlComment::CopyTo( TiXmlComment* target ) const { TiXmlNode::CopyTo( target ); } bool TiXmlComment::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlComment::Clone() const { TiXmlComment* clone = new TiXmlComment(); if ( !clone ) return 0; CopyTo( clone ); return clone; } void TiXmlText::Print( FILE* cfile, int depth ) const { assert( cfile ); if ( cdata ) { int i; fprintf( cfile, "\n" ); for ( i=0; i\n", value.c_str() ); // unformatted output } else { TIXML_STRING buffer; EncodeString( value, &buffer ); fprintf( cfile, "%s", buffer.c_str() ); } } void TiXmlText::CopyTo( TiXmlText* target ) const { TiXmlNode::CopyTo( target ); target->cdata = cdata; } bool TiXmlText::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlText::Clone() const { TiXmlText* clone = 0; clone = new TiXmlText( "" ); if ( !clone ) return 0; CopyTo( clone ); return clone; } TiXmlDeclaration::TiXmlDeclaration( const char * _version, const char * _encoding, const char * _standalone ) : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) { version = _version; encoding = _encoding; standalone = _standalone; } #ifdef TIXML_USE_STL TiXmlDeclaration::TiXmlDeclaration( const std::string& _version, const std::string& _encoding, const std::string& _standalone ) : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) { version = _version; encoding = _encoding; standalone = _standalone; } #endif TiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy ) : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) { copy.CopyTo( this ); } TiXmlDeclaration& TiXmlDeclaration::operator=( const TiXmlDeclaration& copy ) { Clear(); copy.CopyTo( this ); return *this; } void TiXmlDeclaration::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const { if ( cfile ) fprintf( cfile, "" ); if ( str ) (*str) += "?>"; } void TiXmlDeclaration::CopyTo( TiXmlDeclaration* target ) const { TiXmlNode::CopyTo( target ); target->version = version; target->encoding = encoding; target->standalone = standalone; } bool TiXmlDeclaration::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlDeclaration::Clone() const { TiXmlDeclaration* clone = new TiXmlDeclaration(); if ( !clone ) return 0; CopyTo( clone ); return clone; } void TiXmlUnknown::Print( FILE* cfile, int depth ) const { for ( int i=0; i", value.c_str() ); } void TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const { TiXmlNode::CopyTo( target ); } bool TiXmlUnknown::Accept( TiXmlVisitor* visitor ) const { return visitor->Visit( *this ); } TiXmlNode* TiXmlUnknown::Clone() const { TiXmlUnknown* clone = new TiXmlUnknown(); if ( !clone ) return 0; CopyTo( clone ); return clone; } TiXmlAttributeSet::TiXmlAttributeSet() { sentinel.next = &sentinel; sentinel.prev = &sentinel; } TiXmlAttributeSet::~TiXmlAttributeSet() { assert( sentinel.next == &sentinel ); assert( sentinel.prev == &sentinel ); } void TiXmlAttributeSet::Add( TiXmlAttribute* addMe ) { #ifdef TIXML_USE_STL assert( !Find( TIXML_STRING( addMe->Name() ) ) ); // Shouldn't be multiply adding to the set. #else assert( !Find( addMe->Name() ) ); // Shouldn't be multiply adding to the set. #endif addMe->next = &sentinel; addMe->prev = sentinel.prev; sentinel.prev->next = addMe; sentinel.prev = addMe; } void TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe ) { TiXmlAttribute* node; for( node = sentinel.next; node != &sentinel; node = node->next ) { if ( node == removeMe ) { node->prev->next = node->next; node->next->prev = node->prev; node->next = 0; node->prev = 0; return; } } assert( 0 ); // we tried to remove a non-linked attribute. } #ifdef TIXML_USE_STL TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) const { for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) { if ( node->name == name ) return node; } return 0; } TiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const std::string& _name ) { TiXmlAttribute* attrib = Find( _name ); if ( !attrib ) { attrib = new TiXmlAttribute(); Add( attrib ); attrib->SetName( _name ); } return attrib; } #endif TiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) const { for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) { if ( strcmp( node->name.c_str(), name ) == 0 ) return node; } return 0; } TiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const char* _name ) { TiXmlAttribute* attrib = Find( _name ); if ( !attrib ) { attrib = new TiXmlAttribute(); Add( attrib ); attrib->SetName( _name ); } return attrib; } #ifdef TIXML_USE_STL std::istream& operator>> (std::istream & in, TiXmlNode & base) { TIXML_STRING tag; tag.reserve( 8 * 1000 ); base.StreamIn( &in, &tag ); base.Parse( tag.c_str(), 0, TIXML_DEFAULT_ENCODING ); return in; } #endif #ifdef TIXML_USE_STL std::ostream& operator<< (std::ostream & out, const TiXmlNode & base) { TiXmlPrinter printer; printer.SetStreamPrinting(); base.Accept( &printer ); out << printer.Str(); return out; } std::string& operator<< (std::string& out, const TiXmlNode& base ) { TiXmlPrinter printer; printer.SetStreamPrinting(); base.Accept( &printer ); out.append( printer.Str() ); return out; } #endif TiXmlHandle TiXmlHandle::FirstChild() const { if ( node ) { TiXmlNode* child = node->FirstChild(); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::FirstChild( const char * value ) const { if ( node ) { TiXmlNode* child = node->FirstChild( value ); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::FirstChildElement() const { if ( node ) { TiXmlElement* child = node->FirstChildElement(); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::FirstChildElement( const char * value ) const { if ( node ) { TiXmlElement* child = node->FirstChildElement( value ); if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::Child( int count ) const { if ( node ) { int i; TiXmlNode* child = node->FirstChild(); for ( i=0; child && iNextSibling(), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::Child( const char* value, int count ) const { if ( node ) { int i; TiXmlNode* child = node->FirstChild( value ); for ( i=0; child && iNextSibling( value ), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::ChildElement( int count ) const { if ( node ) { int i; TiXmlElement* child = node->FirstChildElement(); for ( i=0; child && iNextSiblingElement(), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } TiXmlHandle TiXmlHandle::ChildElement( const char* value, int count ) const { if ( node ) { int i; TiXmlElement* child = node->FirstChildElement( value ); for ( i=0; child && iNextSiblingElement( value ), ++i ) { // nothing } if ( child ) return TiXmlHandle( child ); } return TiXmlHandle( 0 ); } bool TiXmlPrinter::VisitEnter( const TiXmlDocument& ) { return true; } bool TiXmlPrinter::VisitExit( const TiXmlDocument& ) { return true; } bool TiXmlPrinter::VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ) { DoIndent(); buffer += "<"; buffer += element.Value(); for( const TiXmlAttribute* attrib = firstAttribute; attrib; attrib = attrib->Next() ) { buffer += " "; attrib->Print( 0, 0, &buffer ); } if ( !element.FirstChild() ) { buffer += " />"; DoLineBreak(); } else { buffer += ">"; if ( element.FirstChild()->ToText() && element.LastChild() == element.FirstChild() && element.FirstChild()->ToText()->CDATA() == false ) { simpleTextPrint = true; // no DoLineBreak()! } else { DoLineBreak(); } } ++depth; return true; } bool TiXmlPrinter::VisitExit( const TiXmlElement& element ) { --depth; if ( !element.FirstChild() ) { // nothing. } else { if ( simpleTextPrint ) { simpleTextPrint = false; } else { DoIndent(); } buffer += ""; DoLineBreak(); } return true; } bool TiXmlPrinter::Visit( const TiXmlText& text ) { if ( text.CDATA() ) { DoIndent(); buffer += ""; DoLineBreak(); } else if ( simpleTextPrint ) { TIXML_STRING str; TiXmlBase::EncodeString( text.ValueTStr(), &str ); buffer += str; } else { DoIndent(); TIXML_STRING str; TiXmlBase::EncodeString( text.ValueTStr(), &str ); buffer += str; DoLineBreak(); } return true; } bool TiXmlPrinter::Visit( const TiXmlDeclaration& declaration ) { DoIndent(); declaration.Print( 0, 0, &buffer ); DoLineBreak(); return true; } bool TiXmlPrinter::Visit( const TiXmlComment& comment ) { DoIndent(); buffer += ""; DoLineBreak(); return true; } bool TiXmlPrinter::Visit( const TiXmlUnknown& unknown ) { DoIndent(); buffer += "<"; buffer += unknown.Value(); buffer += ">"; DoLineBreak(); return true; } gource-0.56/src/tinyxml/tinyxmlparser.cpp0000644002342600234260000011060015152463042020510 0ustar andrewcandrewc/* www.sourceforge.net/projects/tinyxml Original code by Lee Thomason (www.grinninglizard.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include #include #include "tinyxml.h" //#define DEBUG_PARSER #if defined( DEBUG_PARSER ) # if defined( DEBUG ) && defined( _MSC_VER ) # include # define TIXML_LOG OutputDebugString # else # define TIXML_LOG printf # endif #endif // Note that "PutString" hardcodes the same list. This // is less flexible than it appears. Changing the entries // or order will break putstring. TiXmlBase::Entity TiXmlBase::entity[ TiXmlBase::NUM_ENTITY ] = { { "&", 5, '&' }, { "<", 4, '<' }, { ">", 4, '>' }, { """, 6, '\"' }, { "'", 6, '\'' } }; // Bunch of unicode info at: // http://www.unicode.org/faq/utf_bom.html // Including the basic of this table, which determines the #bytes in the // sequence from the lead byte. 1 placed for invalid sequences -- // although the result will be junk, pass it through as much as possible. // Beware of the non-characters in UTF-8: // ef bb bf (Microsoft "lead bytes") // ef bf be // ef bf bf const unsigned char TIXML_UTF_LEAD_0 = 0xefU; const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; const int TiXmlBase::utf8ByteTable[256] = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x30 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x50 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid }; void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ) { const unsigned long BYTE_MASK = 0xBF; const unsigned long BYTE_MARK = 0x80; const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; if (input < 0x80) *length = 1; else if ( input < 0x800 ) *length = 2; else if ( input < 0x10000 ) *length = 3; else if ( input < 0x200000 ) *length = 4; else { *length = 0; return; } // This code won't covert this correctly anyway. output += *length; // Scary scary fall throughs. switch (*length) { case 4: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 3: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 2: --output; *output = (char)((input | BYTE_MARK) & BYTE_MASK); input >>= 6; case 1: --output; *output = (char)(input | FIRST_BYTE_MARK[*length]); } } /*static*/ int TiXmlBase::IsAlpha( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) { // This will only work for low-ascii, everything else is assumed to be a valid // letter. I'm not sure this is the best approach, but it is quite tricky trying // to figure out alphabetical vs. not across encoding. So take a very // conservative approach. // if ( encoding == TIXML_ENCODING_UTF8 ) // { if ( anyByte < 127 ) return isalpha( anyByte ); else return 1; // What else to do? The unicode set is huge...get the english ones right. // } // else // { // return isalpha( anyByte ); // } } /*static*/ int TiXmlBase::IsAlphaNum( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) { // This will only work for low-ascii, everything else is assumed to be a valid // letter. I'm not sure this is the best approach, but it is quite tricky trying // to figure out alphabetical vs. not across encoding. So take a very // conservative approach. // if ( encoding == TIXML_ENCODING_UTF8 ) // { if ( anyByte < 127 ) return isalnum( anyByte ); else return 1; // What else to do? The unicode set is huge...get the english ones right. // } // else // { // return isalnum( anyByte ); // } } class TiXmlParsingData { friend class TiXmlDocument; public: void Stamp( const char* now, TiXmlEncoding encoding ); const TiXmlCursor& Cursor() const { return cursor; } private: // Only used by the document! TiXmlParsingData( const char* start, int _tabsize, int row, int col ) { assert( start ); stamp = start; tabsize = _tabsize; cursor.row = row; cursor.col = col; } TiXmlCursor cursor; const char* stamp; int tabsize; }; void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) { assert( now ); // Do nothing if the tabsize is 0. if ( tabsize < 1 ) { return; } // Get the current row, column. int row = cursor.row; int col = cursor.col; const char* p = stamp; assert( p ); while ( p < now ) { // Treat p as unsigned, so we have a happy compiler. const unsigned char* pU = (const unsigned char*)p; // Code contributed by Fletcher Dunn: (modified by lee) switch (*pU) { case 0: // We *should* never get here, but in case we do, don't // advance past the terminating null character, ever return; case '\r': // bump down to the next line ++row; col = 0; // Eat the character ++p; // Check for \r\n sequence, and treat this as a single character if (*p == '\n') { ++p; } break; case '\n': // bump down to the next line ++row; col = 0; // Eat the character ++p; // Check for \n\r sequence, and treat this as a single // character. (Yes, this bizarre thing does occur still // on some arcane platforms...) if (*p == '\r') { ++p; } break; case '\t': // Eat the character ++p; // Skip to next tab stop col = (col / tabsize + 1) * tabsize; break; case TIXML_UTF_LEAD_0: if ( encoding == TIXML_ENCODING_UTF8 ) { if ( *(p+1) && *(p+2) ) { // In these cases, don't advance the column. These are // 0-width spaces. if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) p += 3; else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU ) p += 3; else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU ) p += 3; else { p +=3; ++col; } // A normal character. } } else { ++p; ++col; } break; default: if ( encoding == TIXML_ENCODING_UTF8 ) { // Eat the 1 to 4 byte utf8 character. int step = TiXmlBase::utf8ByteTable[*((const unsigned char*)p)]; if ( step == 0 ) step = 1; // Error case from bad encoding, but handle gracefully. p += step; // Just advance one column, of course. ++col; } else { ++p; ++col; } break; } } cursor.row = row; cursor.col = col; assert( cursor.row >= -1 ); assert( cursor.col >= -1 ); stamp = p; assert( stamp ); } const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding ) { if ( !p || !*p ) { return 0; } if ( encoding == TIXML_ENCODING_UTF8 ) { while ( *p ) { const unsigned char* pU = (const unsigned char*)p; // Skip the stupid Microsoft UTF-8 Byte order marks if ( *(pU+0)==TIXML_UTF_LEAD_0 && *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) { p += 3; continue; } else if(*(pU+0)==TIXML_UTF_LEAD_0 && *(pU+1)==0xbfU && *(pU+2)==0xbeU ) { p += 3; continue; } else if(*(pU+0)==TIXML_UTF_LEAD_0 && *(pU+1)==0xbfU && *(pU+2)==0xbfU ) { p += 3; continue; } if ( IsWhiteSpace( *p ) ) // Still using old rules for white space. ++p; else break; } } else { while ( *p && IsWhiteSpace( *p ) ) ++p; } return p; } #ifdef TIXML_USE_STL /*static*/ bool TiXmlBase::StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ) { for( ;; ) { if ( !in->good() ) return false; int c = in->peek(); // At this scope, we can't get to a document. So fail silently. if ( !IsWhiteSpace( c ) || c <= 0 ) return true; *tag += (char) in->get(); } } /*static*/ bool TiXmlBase::StreamTo( std::istream * in, int character, TIXML_STRING * tag ) { //assert( character > 0 && character < 128 ); // else it won't work in utf-8 while ( in->good() ) { int c = in->peek(); if ( c == character ) return true; if ( c <= 0 ) // Silent failure: can't get document at this scope return false; in->get(); *tag += (char) c; } return false; } #endif // One of TinyXML's more performance demanding functions. Try to keep the memory overhead down. The // "assign" optimization removes over 10% of the execution time. // const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncoding encoding ) { // Oddly, not supported on some compilers, //name->clear(); // So use this: *name = ""; assert( p ); // Names start with letters or underscores. // Of course, in unicode, tinyxml has no idea what a letter *is*. The // algorithm is generous. // // After that, they can be letters, underscores, numbers, // hyphens, or colons. (Colons are valid only for namespaces, // but tinyxml can't tell namespaces from names.) if ( p && *p && ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) ) { const char* start = p; while( p && *p && ( IsAlphaNum( (unsigned char ) *p, encoding ) || *p == '_' || *p == '-' || *p == '.' || *p == ':' ) ) { //(*name) += *p; // expensive ++p; } if ( p-start > 0 ) { name->assign( start, p-start ); } return p; } return 0; } const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding ) { // Presume an entity, and pull it out. TIXML_STRING ent; int i; *length = 0; if ( *(p+1) && *(p+1) == '#' && *(p+2) ) { unsigned long ucs = 0; ptrdiff_t delta = 0; unsigned mult = 1; if ( *(p+2) == 'x' ) { // Hexadecimal. if ( !*(p+3) ) return 0; const char* q = p+3; q = strchr( q, ';' ); if ( !q || !*q ) return 0; delta = q-p; --q; while ( *q != 'x' ) { if ( *q >= '0' && *q <= '9' ) ucs += mult * (*q - '0'); else if ( *q >= 'a' && *q <= 'f' ) ucs += mult * (*q - 'a' + 10); else if ( *q >= 'A' && *q <= 'F' ) ucs += mult * (*q - 'A' + 10 ); else return 0; mult *= 16; --q; } } else { // Decimal. if ( !*(p+2) ) return 0; const char* q = p+2; q = strchr( q, ';' ); if ( !q || !*q ) return 0; delta = q-p; --q; while ( *q != '#' ) { if ( *q >= '0' && *q <= '9' ) ucs += mult * (*q - '0'); else return 0; mult *= 10; --q; } } if ( encoding == TIXML_ENCODING_UTF8 ) { // convert the UCS to UTF-8 ConvertUTF32ToUTF8( ucs, value, length ); } else { *value = (char)ucs; *length = 1; } return p + delta + 1; } // Now try to match it. for( i=0; iappend( cArr, len ); } } else { bool whitespace = false; // Remove leading white space: p = SkipWhiteSpace( p, encoding ); while ( p && *p && !StringEqual( p, endTag, caseInsensitive, encoding ) ) { if ( *p == '\r' || *p == '\n' ) { whitespace = true; ++p; } else if ( IsWhiteSpace( *p ) ) { whitespace = true; ++p; } else { // If we've found whitespace, add it before the // new character. Any whitespace just becomes a space. if ( whitespace ) { (*text) += ' '; whitespace = false; } int len; char cArr[4] = { 0, 0, 0, 0 }; p = GetChar( p, cArr, &len, encoding ); if ( len == 1 ) (*text) += cArr[0]; // more efficient else text->append( cArr, len ); } } } if ( p && *p ) p += strlen( endTag ); return ( p && *p ) ? p : 0; } #ifdef TIXML_USE_STL void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag ) { // The basic issue with a document is that we don't know what we're // streaming. Read something presumed to be a tag (and hope), then // identify it, and call the appropriate stream method on the tag. // // This "pre-streaming" will never read the closing ">" so the // sub-tag can orient itself. if ( !StreamTo( in, '<', tag ) ) { SetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } while ( in->good() ) { int tagIndex = (int) tag->length(); while ( in->good() && in->peek() != '>' ) { int c = in->get(); if ( c <= 0 ) { SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); break; } (*tag) += (char) c; } if ( in->good() ) { // We now have something we presume to be a node of // some sort. Identify it, and call the node to // continue streaming. TiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING ); if ( node ) { node->StreamIn( in, tag ); bool isElement = node->ToElement() != 0; delete node; node = 0; // If this is the root element, we're done. Parsing will be // done by the >> operator. if ( isElement ) { return; } } else { SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } } } // We should have returned sooner. SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); } #endif const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiXmlEncoding encoding ) { ClearError(); // Parse away, at the document level. Since a document // contains nothing but other tags, most of what happens // here is skipping white space. if ( !p || !*p ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } // Note that, for a document, this needs to come // before the while space skip, so that parsing // starts from the pointer we are given. location.Clear(); if ( prevData ) { location.row = prevData->cursor.row; location.col = prevData->cursor.col; } else { location.row = 0; location.col = 0; } TiXmlParsingData data( p, TabSize(), location.row, location.col ); location = data.Cursor(); if ( encoding == TIXML_ENCODING_UNKNOWN ) { // Check for the Microsoft UTF-8 lead bytes. const unsigned char* pU = (const unsigned char*)p; if ( *(pU+0) && *(pU+0) == TIXML_UTF_LEAD_0 && *(pU+1) && *(pU+1) == TIXML_UTF_LEAD_1 && *(pU+2) && *(pU+2) == TIXML_UTF_LEAD_2 ) { encoding = TIXML_ENCODING_UTF8; useMicrosoftBOM = true; } } p = SkipWhiteSpace( p, encoding ); if ( !p ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); return 0; } while ( p && *p ) { TiXmlNode* node = Identify( p, encoding ); if ( node ) { p = node->Parse( p, &data, encoding ); LinkEndChild( node ); } else { break; } // Did we get encoding info? if ( encoding == TIXML_ENCODING_UNKNOWN && node->ToDeclaration() ) { TiXmlDeclaration* dec = node->ToDeclaration(); const char* enc = dec->Encoding(); assert( enc ); if ( *enc == 0 ) encoding = TIXML_ENCODING_UTF8; else if ( StringEqual( enc, "UTF-8", true, TIXML_ENCODING_UNKNOWN ) ) encoding = TIXML_ENCODING_UTF8; else if ( StringEqual( enc, "UTF8", true, TIXML_ENCODING_UNKNOWN ) ) encoding = TIXML_ENCODING_UTF8; // incorrect, but be nice else encoding = TIXML_ENCODING_LEGACY; } p = SkipWhiteSpace( p, encoding ); } // Was this empty? if ( !firstChild ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, encoding ); return 0; } // All is well. return p; } void TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding ) { // The first error in a chain is more accurate - don't set again! if ( error ) return; assert( err > 0 && err < TIXML_ERROR_STRING_COUNT ); error = true; errorId = err; errorDesc = errorString[ errorId ]; errorLocation.Clear(); if ( pError && data ) { data->Stamp( pError, encoding ); errorLocation = data->Cursor(); } } TiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding ) { TiXmlNode* returnNode = 0; p = SkipWhiteSpace( p, encoding ); if( !p || !*p || *p != '<' ) { return 0; } p = SkipWhiteSpace( p, encoding ); if ( !p || !*p ) { return 0; } // What is this thing? // - Elements start with a letter or underscore, but xml is reserved. // - Comments: "; if ( !StringEqual( p, startTag, false, encoding ) ) { if ( document ) document->SetError( TIXML_ERROR_PARSING_COMMENT, p, data, encoding ); return 0; } p += strlen( startTag ); // [ 1475201 ] TinyXML parses entities in comments // Oops - ReadText doesn't work, because we don't want to parse the entities. // p = ReadText( p, &value, false, endTag, false, encoding ); // // from the XML spec: /* [Definition: Comments may appear anywhere in a document outside other markup; in addition, they may appear within the document type declaration at places allowed by the grammar. They are not part of the document's character data; an XML processor MAY, but need not, make it possible for an application to retrieve the text of comments. For compatibility, the string "--" (double-hyphen) MUST NOT occur within comments.] Parameter entity references MUST NOT be recognized within comments. An example of a comment: */ value = ""; // Keep all the white space. while ( p && *p && !StringEqual( p, endTag, false, encoding ) ) { value.append( p, 1 ); ++p; } if ( p && *p ) p += strlen( endTag ); return p; } const char* TiXmlAttribute::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) { p = SkipWhiteSpace( p, encoding ); if ( !p || !*p ) return 0; if ( data ) { data->Stamp( p, encoding ); location = data->Cursor(); } // Read the name, the '=' and the value. const char* pErr = p; p = ReadName( p, &name, encoding ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding ); return 0; } p = SkipWhiteSpace( p, encoding ); if ( !p || !*p || *p != '=' ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); return 0; } ++p; // skip '=' p = SkipWhiteSpace( p, encoding ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); return 0; } const char* end; const char SINGLE_QUOTE = '\''; const char DOUBLE_QUOTE = '\"'; if ( *p == SINGLE_QUOTE ) { ++p; end = "\'"; // single quote in string p = ReadText( p, &value, false, end, false, encoding ); } else if ( *p == DOUBLE_QUOTE ) { ++p; end = "\""; // double quote in string p = ReadText( p, &value, false, end, false, encoding ); } else { // All attribute values should be in single or double quotes. // But this is such a common error that the parser will try // its best, even without them. value = ""; while ( p && *p // existence && !IsWhiteSpace( *p ) // whitespace && *p != '/' && *p != '>' ) // tag end { if ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) { // [ 1451649 ] Attribute values with trailing quotes not handled correctly // We did not have an opening quote but seem to have a // closing one. Give up and throw an error. if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); return 0; } value += *p; ++p; } } return p; } #ifdef TIXML_USE_STL void TiXmlText::StreamIn( std::istream * in, TIXML_STRING * tag ) { while ( in->good() ) { int c = in->peek(); if ( !cdata && (c == '<' ) ) { return; } if ( c <= 0 ) { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } (*tag) += (char) c; in->get(); // "commits" the peek made above if ( cdata && c == '>' && tag->size() >= 3 ) { size_t len = tag->size(); if ( (*tag)[len-2] == ']' && (*tag)[len-3] == ']' ) { // terminator of cdata. return; } } } } #endif const char* TiXmlText::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) { value = ""; TiXmlDocument* document = GetDocument(); if ( data ) { data->Stamp( p, encoding ); location = data->Cursor(); } const char* const startTag = ""; if ( cdata || StringEqual( p, startTag, false, encoding ) ) { cdata = true; if ( !StringEqual( p, startTag, false, encoding ) ) { if ( document ) document->SetError( TIXML_ERROR_PARSING_CDATA, p, data, encoding ); return 0; } p += strlen( startTag ); // Keep all the white space, ignore the encoding, etc. while ( p && *p && !StringEqual( p, endTag, false, encoding ) ) { value += *p; ++p; } TIXML_STRING dummy; p = ReadText( p, &dummy, false, endTag, false, encoding ); return p; } else { bool ignoreWhite = true; const char* end = "<"; p = ReadText( p, &value, ignoreWhite, end, false, encoding ); if ( p && *p ) return p-1; // don't truncate the '<' return 0; } } #ifdef TIXML_USE_STL void TiXmlDeclaration::StreamIn( std::istream * in, TIXML_STRING * tag ) { while ( in->good() ) { int c = in->get(); if ( c <= 0 ) { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); return; } (*tag) += (char) c; if ( c == '>' ) { // All is well. return; } } } #endif const char* TiXmlDeclaration::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding _encoding ) { p = SkipWhiteSpace( p, _encoding ); // Find the beginning, find the end, and look for // the stuff in-between. TiXmlDocument* document = GetDocument(); if ( !p || !*p || !StringEqual( p, "SetError( TIXML_ERROR_PARSING_DECLARATION, 0, 0, _encoding ); return 0; } if ( data ) { data->Stamp( p, _encoding ); location = data->Cursor(); } p += 5; version = ""; encoding = ""; standalone = ""; while ( p && *p ) { if ( *p == '>' ) { ++p; return p; } p = SkipWhiteSpace( p, _encoding ); if ( StringEqual( p, "version", true, _encoding ) ) { TiXmlAttribute attrib; p = attrib.Parse( p, data, _encoding ); version = attrib.Value(); } else if ( StringEqual( p, "encoding", true, _encoding ) ) { TiXmlAttribute attrib; p = attrib.Parse( p, data, _encoding ); encoding = attrib.Value(); } else if ( StringEqual( p, "standalone", true, _encoding ) ) { TiXmlAttribute attrib; p = attrib.Parse( p, data, _encoding ); standalone = attrib.Value(); } else { // Read over whatever it is. while( p && *p && *p != '>' && !IsWhiteSpace( *p ) ) ++p; } } return 0; } bool TiXmlText::Blank() const { for ( unsigned i=0; i. */ #ifndef GOURCE_H #define GOURCE_H #include #include #include #include "core/display.h" #include "core/shader.h" #include "core/sdlapp.h" #include "core/fxfont.h" #include "core/bounds.h" #include "core/seeklog.h" #include "core/frustum.h" #include "core/regex.h" #include "core/ppm.h" #include "core/mousecursor.h" #include "gource_settings.h" #include "logmill.h" #include "core/vbo.h" #include "bloom.h" #include "slider.h" #include "textbox.h" #include "action.h" #include "caption.h" #include "file.h" #include "user.h" #include "dirnode.h" #include "zoomcamera.h" #include "key.h" class Gource : public SDLApp { std::string logfile; FrameExporter* frameExporter; RLogMill* logmill; RCommitLog* commitlog; PositionSlider slider; ZoomCamera camera; FileKey file_key; bool debug, trace_debug; bool manual_zoom; bool manual_rotate; bool manual_camera; float rotation_remaining_angle; MouseCursor cursor; bool grab_mouse; bool mousemoved; bool mouseclicked; bool mousedragged; vec2 cursor_move; bool recolour; bool use_selection_bounds; Bounds2D selection_bounds; float rotate_angle; vec2 mousepos; float last_percent; bool stop_position_reached; int tag_seq, commit_seq; GLint mouse_hits; RFile* hoverFile; RFile* selectedFile; RUser* hoverUser; RUser* selectedUser; quadbuf file_vbo; quadbuf user_vbo; quadbuf edge_vbo; quadbuf action_vbo; bloombuf bloom_vbo; GLuint selectionDepth; RDirNode* root; std::string displaydate; int date_x_offset; TextureResource* bloomtex; TextureResource* beamtex; TextureResource* logotex; TextureResource* backgroundtex; TextureResource* usertex; Shader* shadow_shader; Shader* text_shader; Shader* bloom_shader; float font_texel_size; TextBox textbox; FXFont font, fontlarge, fontmedium, fontcaption, fontdirname; bool first_read; bool paused; bool reloaded; bool take_screenshot; float max_tick_rate; int frameskip; int framecount; time_t currtime; time_t lasttime; float runtime; float subseconds; float splash; float idle_time; Uint32 screen_project_time; Uint32 draw_edges_time; Uint32 draw_shadows_time; Uint32 draw_actions_time; Uint32 draw_files_time; Uint32 draw_users_time; Uint32 draw_bloom_time; Uint32 update_vbos_time; Uint32 update_dir_tree_time; Uint32 update_user_tree_time; Uint32 draw_scene_time; Uint32 logic_time; Uint32 trace_time; Uint32 text_time; Uint32 text_update_time; Uint32 text_vbo_commit_time; Uint32 text_vbo_draw_time; bool track_users; Bounds2D dir_bounds; Bounds2D user_bounds; Bounds2D active_user_bounds; int commitqueue_max_size; float starting_z; std::deque commitqueue; std::map users; std::map files; std::map tagusermap; std::list captions; std::list active_captions; QuadTree* dirNodeTree; QuadTree* userTree; std::string message; float message_timer; void setMessage(const char* str, ...); void reset(); RUser* addUser(const std::string& username); RFile* addFile(const RCommitFile& cf); void deleteUser(RUser* user); void deleteFile(RFile* file); void selectBackground(); void selectUser(RUser* user); void selectFile(RFile* file); void selectNextUser(); void loadCaptions(); void readLog(); void logReadingError(const std::string& error); void processCommit(const RCommit& commit, float t); void addFileAction(const RCommit& commit, const RCommitFile& cf, RFile* file, float t); std::string dateAtPosition(float percent); void toggleCameraMode(); void updateCamera(float dt); void updateUsers(float t, float dt); void updateDirs(float dt); void interactUsers(); void interactDirs(); void updateBounds(); void updateTime(time_t display_time); void mousetrace(float dt); bool canSeek(); void seekTo(float percent); void zoom(bool zoomin); void loadingScreen(); void drawBackground(float dt); void drawScene(float dt); void updateVBOs(float dt); void updateAndDrawEdges(); void drawFileShadows(float dt); void drawUserShadows(float dt); void drawActions(float dt); void drawFiles(float dt); void drawUsers(float dt); void drawBloom(float dt); void screenshot(); void changeColours(); void grabMouse(bool grab_mouse); public: Gource(FrameExporter* frameExporter = 0); ~Gource(); static void writeCustomLog(const std::string& logfile, const std::string& output_file); void setCameraMode(const std::string& mode); void setCameraMode(bool track_users); void setFrameExporter(FrameExporter* exporter, int video_framerate); void showSplash(); bool isBusy(); void logic(float t, float dt); void draw(float t, float dt); void init(); void unload(); void reload(); void quit(); void update(float t, float dt); void keyPress(SDL_KeyboardEvent *e); void mouseMove(SDL_MouseMotionEvent *e); void mouseClick(SDL_MouseButtonEvent *e); #if SDL_VERSION_ATLEAST(2,0,0) void mouseWheel(SDL_MouseWheelEvent *e); #endif }; #endif gource-0.56/src/action.h0000644002342600234260000000341015152463042015005 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef RACTION_H #define RACTION_H #include "user.h" #include "file.h" class RUser; class RFile; class RAction { protected: vec3 colour; virtual void apply(); public: RUser* source; RFile* target; time_t timestamp; float t; float progress; float rate; RAction(RUser* source, RFile* target, time_t timestamp, float t, const vec3& colour); virtual ~RAction() {}; inline bool isFinished() const { return (progress >= 1.0); }; virtual void logic(float dt); void drawToVBO(quadbuf& buffer) const ; void draw(float dt); }; class CreateAction : public RAction { public: CreateAction(RUser* source, RFile* target, time_t timestamp, float t); }; class RemoveAction : public RAction { public: RemoveAction(RUser* source, RFile* target, time_t timestamp, float t); void logic(float dt); }; class ModifyAction : public RAction { protected: vec3 modify_colour; public: ModifyAction(RUser* source, RFile* target, time_t timestamp, float t, const vec3& modify_colour); void apply(); }; #endif gource-0.56/src/user.cpp0000664002342600234260000002513515152463042015053 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "user.h" float gGourceBeamDist = 100.0; float gGourceActionDist = 50.0; float gGourcePersonalSpaceDist = 100.0; RUser::RUser(const std::string& name, vec2 pos, int tagid) : Pawn(name,pos,tagid) { this->name = name; speed = gGourceSettings.max_user_speed; size = 20.0 * gGourceSettings.user_scale; shadowOffset = vec2(2.0, 2.0) * gGourceSettings.user_scale; shadow = true; highlighted=false; assignUserImage(); setSelected(false); last_action = 0.0; action_interval = 0.2; name_interval = 5.0; min_units_ps = 100.0; actionCount = activeCount = 0; } void RUser::addAction(RAction* action) { if(action->source != this) return; if(isIdle()) showName(); //name_interval = name_interval > 0.0 ? std::max(name_interval,nametime-1.0f) : nametime; actions.push_back(action); actionCount++; } // remove references to this file void RUser::fileRemoved(RFile* f) { for(std::list::iterator it = actions.begin(); it != actions.end(); ) { RAction* a = *it; if(a->target == f) { it = actions.erase(it); delete a; actionCount--; continue; } it++; } for(std::list::iterator it = activeActions.begin(); it != activeActions.end(); ) { RAction* a = *it; if(a->target == f) { it = activeActions.erase(it); delete a; continue; } it++; } } void RUser::applyForceUser(RUser* u) { if(u==this) return; vec2 u_pos = u->getPos(); vec2 dir = u_pos - pos; float dist = glm::length(dir); //different repelling force depending on how busy the user is float desired_dist = getActionCount() == 0 ? gGourcePersonalSpaceDist : (!actions.empty() && activeActions.empty()) ? gGourcePersonalSpaceDist * 0.1 : gGourcePersonalSpaceDist * 0.5; //resolve overlap if(dist < 0.001) { accel += 1.0f * normalise(vec2( (rand() % 100) - 50, (rand() % 100) - 50)); return; } //repelling force if(dist < desired_dist) { accel -= (desired_dist-dist) * normalise(dir); } } void RUser::applyForceAction(RAction* action) { RFile* f = action->target; vec2 f_pos = f->getAbsolutePos(); vec2 dir = f_pos - pos; float dist = glm::length(dir); float desired_dist = gGourceActionDist; //resolve overlap if(dist < 0.001) { accel += normalise(vec2( (rand() % 100) - 50, (rand() % 100) - 50)); return; } //repelling force if(dist < desired_dist) { accel -= (desired_dist - dist) * normalise(dir); return; } if(dist > gGourceBeamDist) { accel += (dist-gGourceBeamDist) * normalise(dir); } } void RUser::applyForceToActions() { if(activeActions.empty() && actions.empty()) return; last_action = elapsed; int action_influence = 0; int max_influence = 3; // move towards actions being worked on for(std::list::iterator it = activeActions.begin(); it != activeActions.end(); it++) { RAction* action = *it; applyForceAction(action); action_influence++; if(action_influence >= max_influence) break; } if(!activeActions.empty()) return; //if no actions being worked on, move towards one pending action for(std::list::iterator it = actions.begin(); it != actions.end(); it++) { RAction* action = *it; applyForceAction(action); break; } } void RUser::colourize() { usercol = colourHash(name); } void RUser::assignUserImage() { colourize(); TextureResource* graphic = 0; if(gGourceSettings.user_image_dir.size() > 0) { //try their username // TODO: replace with map of name -> image of all pngs and jpgs in directory //gGourceSettings.user_image_dir + name + std::string(".jpg"); std::map::iterator findimage; findimage = gGourceSettings.user_image_map.find(name); //do we have this image if(findimage != gGourceSettings.user_image_map.end()) { std::string imagefile = findimage->second; if(!gGourceSettings.colour_user_images) usercol = vec3(1.0, 1.0, 1.0); graphic = texturemanager.grabFile(imagefile, true, GL_CLAMP_TO_EDGE); } } //TODO: trilinear probably should be an attribute of the texture // perhaps the mipmap option should be an enum: eg TEX_MIPMAP_TRILINEAR //nope if(!graphic) { if(gGourceSettings.default_user_image.size() > 0) { if(!gGourceSettings.colour_user_images) usercol = vec3(1.0, 1.0, 1.0); graphic = texturemanager.grabFile(gGourceSettings.default_user_image, true, GL_CLAMP_TO_EDGE); } else { graphic = texturemanager.grab("user.png", true, GL_CLAMP_TO_EDGE); } } setGraphic(graphic); usercol = usercol * 0.6f + vec3(1.0f) * 0.4f; usercol *= 0.9f; } int RUser::getActionCount() { return actionCount + activeCount; } int RUser::getPendingActionCount() { return actionCount; } void RUser::logic(float t, float dt) { Pawn::logic(dt); action_interval -= dt; bool find_nearby_action = false; if(!actions.empty() && action_interval <= 0) { find_nearby_action = true; } //add next active action, if it is in range for(std::list::iterator it = actions.begin(); it != actions.end();) { RAction* action = *it; //add all files which are too old if(gGourceSettings.max_file_lag>=0.0 && action->t < t - gGourceSettings.max_file_lag) { it = actions.erase(it); actionCount--; action->rate = 2.0; activeActions.push_back(action); activeCount++; continue; } if(!find_nearby_action) break; float action_dist = glm::length(action->target->getAbsolutePos() - pos); //queue first action in range if(action_dist < gGourceBeamDist) { it = actions.erase(it); activeActions.push_back(action); actionCount--; activeCount++; break; } it++; } //reset action interval if(action_interval <= 0) { int total_actions = actionCount + activeCount; action_interval = total_actions ? (1.0 / (float)total_actions) : 1.0; } //update actions for(std::list::iterator it = activeActions.begin(); it != activeActions.end(); ) { RAction* action = *it; action->logic(dt); if(action->isFinished()) { it = activeActions.erase(it); delete action; activeCount--; continue; } it++; } if(glm::length2(accel) > speed * speed) { accel = normalise(accel) * speed; } pos += accel * dt; accel = accel * std::max(0.0f, (1.0f - gGourceSettings.user_friction*dt)); } void RUser::updateFont() { if(selected) { font = fontmanager.grab(gGourceSettings.font_file, 18); font.dropShadow(true); } else { font = fontmanager.grab(gGourceSettings.font_file, gGourceSettings.scaled_user_font_size); font.dropShadow(true); } font.alignTop(false); namewidth = font.getWidth(name); } void RUser::setHighlighted(bool highlight) { this->highlighted = highlight; updateFont(); } void RUser::setSelected(bool selected) { Pawn::setSelected(selected); updateFont(); } const vec3& RUser::getNameColour() const { return selected ? gGourceSettings.selection_colour : highlighted ? gGourceSettings.highlight_colour : namecol; } vec3 RUser::getColour() const{ if(selected) return vec3(1.0, 1.0, 1.0); return usercol; } const std::string& RUser::getName() const { return name; } float RUser::getAlpha() const { float alpha = Pawn::getAlpha(); //user fades out if not doing anything if(elapsed - last_action > gGourceSettings.user_idle_time) { alpha = 1.0 - std::min(elapsed - last_action - gGourceSettings.user_idle_time, 1.0f); } return alpha; } bool RUser::isIdle() { return (activeActions.empty() && actions.empty()); } bool RUser::isFading() { return isIdle() && (elapsed - last_action) > gGourceSettings.user_idle_time; } bool RUser::isInactive() { return isIdle() && (elapsed - last_action) > 10.0; } bool RUser::nameVisible() const { return (Pawn::nameVisible() || gGourceSettings.highlight_all_users || highlighted) ? true : false; } void RUser::calcScreenPos(GLint* viewport, GLdouble* modelview, GLdouble* projection) { static GLdouble screen_x, screen_y, screen_z; vec2 text_pos = pos; text_pos.y -= dims.y * 0.5f; gluProject( text_pos.x, text_pos.y, 0.0f, modelview, projection, viewport, &screen_x, &screen_y, &screen_z); screen_y = (float)viewport[3] - screen_y; screenpos.x = screen_x - namewidth * 0.5; screenpos.y = screen_y - font.getMaxHeight(); } void RUser::drawNameText(float alpha) { float user_alpha = getAlpha(); if(gGourceSettings.highlight_all_users || highlighted || selected || alpha>0.0) { vec3 name_col = getNameColour(); float name_alpha = (selected||highlighted||gGourceSettings.highlight_all_users) ? user_alpha : alpha; font.setColour(vec4(name_col.x, name_col.y, name_col.z, name_alpha)); font.draw(screenpos.x, screenpos.y, name); } } void RUser::updateActionsVBO(quadbuf& buffer) { for(std::list::iterator it = activeActions.begin(); it != activeActions.end(); it++) { RAction* action = *it; action->drawToVBO(buffer); } } void RUser::drawActions(float dt) { for(std::list::iterator it = activeActions.begin(); it != activeActions.end(); it++) { RAction* action = *it; action->draw(dt); } } void RUser::draw(float dt) { if(gGourceSettings.hide_users) return; Pawn::draw(dt); } gource-0.56/src/slider.cpp0000644002342600234260000000735015152463042015354 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "slider.h" #include "gource_settings.h" // PositionSlider PositionSlider::PositionSlider(float percent) { this->percent = percent; } void PositionSlider::init() { font = fontmanager.grab(gGourceSettings.font_file, 16 * gGourceSettings.font_scale); font.dropShadow(true); slidercol = vec3(1.0, 1.0, 1.0); mouseover = -1.0; mouseover_elapsed = 1.0; fade_time = 1.0; alpha = 0.0; capwidth = 0.0f; resize(); } const Bounds2D& PositionSlider::getBounds() const { return bounds; } void PositionSlider::resize() { int gap = 35; bounds.reset(); bounds.update(vec2(gap, display.height - gap*2)); bounds.update(vec2(display.width - gap, display.height - gap)); } void PositionSlider::setColour(vec3 col) { slidercol = col; } void PositionSlider::show() { mouseover_elapsed = 0.0; } bool PositionSlider::mouseOver(vec2 pos, float* percent_ptr) { if(bounds.contains(pos)) { mouseover_elapsed = 0; mouseover = pos.x; if(percent_ptr != 0) { *percent_ptr = (float) (pos.x - bounds.min.x) / (bounds.max.x - bounds.min.x); } return true; } mouseover = -1.0; return false; } bool PositionSlider::click(vec2 pos, float* percent_ptr) { if(mouseOver(pos, &percent)) { if(percent_ptr != 0) { *percent_ptr = percent; } return true; } return false; } void PositionSlider::setCaption(const std::string& caption) { capwidth = 0.0; this->caption = caption; if(caption.size()) { capwidth = font.getWidth(caption.c_str()); } } void PositionSlider::setPercent(float percent) { this->percent = percent; } void PositionSlider::logic(float dt) { if(mouseover < 0.0 && mouseover_elapsed < fade_time) mouseover_elapsed += dt; if(mouseover_elapsed < fade_time && alpha < 1.0) { alpha = std::min(1.0f, alpha+dt); } else if(mouseover_elapsed >= fade_time && alpha > 0.0) { alpha = std::max(0.0f, alpha-dt); } } void PositionSlider::drawSlider(float pos_x) const { glLineWidth(2.0f); bounds.draw(); glLineWidth(2.0f); glBegin(GL_LINES); glVertex2f(pos_x, bounds.min.y); glVertex2f(pos_x, bounds.max.y); glEnd(); } void PositionSlider::draw(float dt) { glDisable(GL_TEXTURE_2D); float pos_x = bounds.min.x + (bounds.max.x - bounds.min.x) * percent; glColor4f(0.0f, 0.0f, 0.0f, 0.7*alpha); glPushMatrix(); glTranslatef(2.0, 2.0, 0.0); drawSlider(pos_x); glPopMatrix(); glColor4f(slidercol.x, slidercol.y, slidercol.z, alpha); drawSlider(pos_x); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glColor4f(1.0, 1.0, 1.0, 1.0); if(caption.size() && mouseover >= 0.0) { int height_offset = 25 * gGourceSettings.font_scale; font.draw(std::min((double)display.width - capwidth - 1.0, std::max(1.0, mouseover - (capwidth/2.0))), bounds.min.y - height_offset, caption); } } gource-0.56/src/test/0000775002342600234260000000000015152463042014342 5ustar andrewcandrewcgource-0.56/src/test/main.cpp0000644002342600234260000000013115152463042015763 0ustar andrewcandrewc#define BOOST_TEST_MODULE Gource Test Suite #include gource-0.56/src/test/datetime_tests.cpp0000644002342600234260000001103515152463042020062 0ustar andrewcandrewc/* Copyright (C) 2021 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "../main.h" #include "../gource_settings.h" #include #include BOOST_AUTO_TEST_CASE( parse_date_time_tests ) { time_t timestamp; BOOST_CHECK_EQUAL(putenv((char*)"TZ=UTC"), 0); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635724800); BOOST_CHECK_EQUAL(putenv((char*)"TZ=Pacific/Auckland"), 0); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635678000); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01Z", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635724800); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01+0", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635724800); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01+13", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635678000); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 +13", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635678000); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01+5:30", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635705000); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721260); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01Z", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635768060); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01+0", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635768060); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01+13", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721260); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01 +13", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721260); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01+5:30", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635748260); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01:59", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721319); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01T12:01:59.123", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721319); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01:59Z", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635768119); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01:59+0", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635768119); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01:59+13", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721319); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01:59 +13", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721319); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01 12:01:59+5:30", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635748319); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01T12:01:59", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721319); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01T12:01:59.123", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721319); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01T12:01:59Z", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635768119); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01T12:01:59+0", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635768119); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01T12:01:59+13", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721319); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01T12:01:59+13", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635721319); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01T12:01:59+5:30", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635748319); BOOST_CHECK(SDLAppSettings::parseDateTime("2021-11-01T12:01:59.123+5:30", timestamp)); BOOST_CHECK_EQUAL(timestamp, 1635748319); } gource-0.56/src/test/regex_tests.cpp0000644002342600234260000000300415152463042017375 0ustar andrewcandrewc/* Copyright (C) 2021 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "../core/regex.h" #include #include BOOST_AUTO_TEST_CASE( regex_tests ) { Regex regex("^[A-Z]+$"); BOOST_CHECK(regex.isValid()); BOOST_CHECK(regex.match("ABC")); BOOST_CHECK(regex.match("abc") == false); BOOST_CHECK(regex.match("ABC123") == false); Regex regex_copy = Regex("^[A-Z]+$"); BOOST_CHECK(regex_copy.isValid()); BOOST_CHECK(regex_copy.match("ABC")); BOOST_CHECK_THROW(Regex("^[A-Z+$"), RegexCompilationException); Regex test_regex("^[A-Z+$", true); BOOST_CHECK(test_regex.isValid() == false); std::vector matches; Regex capture_regex("([0-9]+)"); BOOST_CHECK(capture_regex.match("ABC123", &matches)); BOOST_CHECK_EQUAL(matches.size(), 1); BOOST_CHECK_EQUAL(matches[0], "123"); } gource-0.56/src/gource_settings.h0000664002342600234260000001010415152463042016734 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef GOURCE_SETTINGS_H #define GOURCE_SETTINGS_H #define GOURCE_VERSION "0.56" #include "core/texture.h" #include "core/settings.h" #include "core/regex.h" class GourceSettings : public SDLAppSettings { protected: void commandLineOption(const std::string& name, const std::string& value); public: int repo_count; bool hide_date; bool hide_users; bool hide_tree; bool hide_files; bool hide_usernames; bool hide_filenames; bool hide_dirnames; bool hide_progress; bool hide_bloom; bool hide_mouse; bool hide_root; bool disable_auto_rotate; bool disable_input; bool show_key; std::string load_config; std::string save_config; std::string path; bool default_path; std::string logo; vec2 logo_offset; std::string start_date; std::string stop_date; time_t start_timestamp; time_t stop_timestamp; float start_position; float stop_position; float stop_at_time; bool shutdown; bool stop_on_idle; bool stop_at_end; bool dont_stop; bool no_time_travel; bool fixed_user_size; bool author_time; float auto_skip_seconds; float days_per_second; float file_idle_time; float file_idle_time_at_end; float loop_delay_seconds; bool loop; bool ffp; bool colour_user_images; std::string default_user_image; std::string user_image_dir; std::map user_image_map; float camera_zoom_min; float camera_zoom_max; float camera_zoom_default; std::string camera_mode; float padding; bool crop_vertical; bool crop_horizontal; float bloom_multiplier; float bloom_intensity; vec3 background_colour; std::string background_image; std::string title; std::string font_file; int font_size; int filename_font_size; int dirname_font_size; int user_font_size; vec3 font_colour; float font_scale; bool default_font_scale; int scaled_font_size; int scaled_filename_font_size; int scaled_dirname_font_size; int scaled_user_font_size; float elasticity; std::string git_branch; std::string log_format; std::string date_format; int max_files; float max_user_speed; float max_file_lag; float user_idle_time; float user_friction; float user_scale; float time_scale; bool highlight_dirs; bool highlight_all_users; vec3 dir_colour; vec3 highlight_colour; vec3 selection_colour; int dir_name_depth; float dir_name_position; std::vector highlight_users; std::vector follow_users; std::vector file_filters; std::vector file_show_filters; std::vector user_filters; std::vector user_show_filters; bool file_extensions; bool file_extension_fallback; std::string caption_file; vec3 caption_colour; float caption_duration; int caption_size; int caption_offset; vec3 filename_colour; float filename_time; std::string output_custom_filename; TextureResource* file_graphic; int log_level; GourceSettings(); void setGourceDefaults(); void setScaledFontSizes(); void importGourceSettings(ConfFile& conf, ConfSection* gource_settings = 0); void help(bool extended_help=false); }; extern GourceSettings gGourceSettings; #endif gource-0.56/src/main.h0000644002342600234260000000146415152463042014463 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef GOURCE_MAIN_H #define GOURCE_MAIN_H #include "gource_shell.h" #include "gource.h" #endif gource-0.56/src/pawn.cpp0000664002342600234260000001057415152463042015043 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "pawn.h" float gGourceShadowStrength = 0.5; Pawn::Pawn(const std::string& name, vec2 pos, int tagid) { this->name = name; this->pos = pos; this->tagid = tagid; this->hidden = false; this->speed = 1.0; selected = false; mouseover = false; shadow = false; namewidth = 0; this->shadowOffset = vec2(2.0, 2.0); this->elapsed = 0.0; this->fadetime = 1.0; this->nametime = 5.0; this->name_interval = 0.0; this->namecol = vec3(1.0, 1.0, 1.0); this->graphic = 0; this->graphic_ratio = 1.0; size = 0.0f; } float Pawn::getSize() { return size; } void Pawn::setPos(vec2 pos) { this->pos = pos; } int Pawn::getTagID() { return tagid; } void Pawn::showName() { if(name_interval <= 0.0) name_interval = nametime; } void Pawn::updateQuadItemBounds() { float halfsize_x = size * 0.5f; vec2 halfsize ( halfsize_x, halfsize_x * graphic_ratio ); //set bounds quadItemBounds.set(pos - halfsize, pos + halfsize); } void Pawn::logic(float dt) { elapsed += dt; if(!isHidden()) { if(name_interval>0.0) name_interval -= dt; } } void Pawn::setGraphic(TextureResource* graphic) { if(graphic) { graphic_ratio = graphic->h / (float) graphic->w; } else { graphic_ratio = 1.0f; } this->graphic = graphic; this->dims = vec2(size, size*graphic_ratio); } void Pawn::setMouseOver(bool over) { //showName(); this->mouseover = over; } void Pawn::setSelected(bool selected) { this->selected = selected; } const vec3& Pawn::getNameColour() const { return namecol; } void Pawn::calcScreenPos(const vec2& offset) { screenpos = display.project(vec3(pos.x+offset.x, pos.y+offset.y, 0.0f)); } bool Pawn::nameVisible() const { return ((!selected && name_interval < 0.0) || isHidden()) ? false : true; } void Pawn::drawName() { if(!nameVisible()) return; float done = nametime - name_interval; if(done < 1.0) { drawNameText(done); } else if(done > 1.0 && done < nametime - 1.0) { drawNameText(1.0); } else { drawNameText((nametime - done)); } } void Pawn::drawShadow(float dt) { if(isHidden() || !shadow) return; float halfsize = size * 0.5f; vec2 offsetpos = pos - vec2(halfsize, halfsize*graphic_ratio) + shadowOffset; float alpha = getAlpha(); glBindTexture(GL_TEXTURE_2D, graphic->textureid); glColor4f(0.0, 0.0, 0.0, alpha * gGourceShadowStrength); glPushMatrix(); glTranslatef(offsetpos.x, offsetpos.y, 0.0f); glBegin(GL_QUADS); glTexCoord2f(0.0f,0.0f); glVertex2f(0.0f, 0.0f); glTexCoord2f(1.0f,0.0f); glVertex2f(size, 0.0f); glTexCoord2f(1.0f,1.0f); glVertex2f(size, size*graphic_ratio); glTexCoord2f(0.0f,1.0f); glVertex2f(0.0f, size*graphic_ratio); glEnd(); glPopMatrix(); } void Pawn::draw(float dt) { if(hidden) return; float halfsize = size * 0.5f; vec2 offsetpos = pos - vec2(halfsize, halfsize*graphic_ratio); float alpha = getAlpha(); vec3 col = getColour(); glBindTexture(GL_TEXTURE_2D, graphic->textureid); glPushMatrix(); glTranslatef(offsetpos.x, offsetpos.y, 0.0f); glColor4f(col.x, col.y, col.z, alpha); glBegin(GL_QUADS); glTexCoord2f(0.0f,0.0f); glVertex2f(0.0f, 0.0f); glTexCoord2f(1.0f,0.0f); glVertex2f(size, 0.0f); glTexCoord2f(1.0f,1.0f); glVertex2f(size, size*graphic_ratio); glTexCoord2f(0.0f,1.0f); glVertex2f(0.0f, size*graphic_ratio); glEnd(); glPopMatrix(); } gource-0.56/src/gource_shell.h0000644002342600234260000000323115152463042016204 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef GOURCE_SHELL_H #define GOURCE_SHELL_H #include "core/display.h" #include "core/sdlapp.h" #include "gource.h" class GourceShell : public SDLApp { Gource* gource; bool next; TextureResource* transition_texture; float transition_interval; float toggle_delay; FrameExporter* exporter; ConfFile* conf; ConfSectionList::iterator gource_settings; Gource* getNext(); void blendLastFrame(float dt); public: GourceShell(ConfFile* conf, FrameExporter* exporter); ~GourceShell(); void update(float t, float dt); void resize(int width, int height); void reload(); void toggleFullscreen(); void toggleWindowFrame(); void quit(); void keyPress(SDL_KeyboardEvent *e); void mouseMove(SDL_MouseMotionEvent *e); void mouseClick(SDL_MouseButtonEvent *e); #if SDL_VERSION_ATLEAST(2,0,0) void mouseWheel(SDL_MouseWheelEvent *e); #endif }; #endif extern GourceShell* gGourceShell; gource-0.56/src/key.h0000644002342600234260000000417515152463042014331 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef FILE_KEY_H #define FILE_KEY_H #include "core/display.h" #include "core/vectors.h" #include "core/fxfont.h" #include "file.h" #include #include class FileKeyEntry { FXFont font; vec3 colour; std::string ext; std::string display_ext; float alpha; float brightness; int count; float pos_y; float src_y; float dest_y; float move_elapsed; float left_margin; float width; float height; vec2 pos; vec2 shadow; bool show; public: FileKeyEntry(const FXFont& font, const std::string& ext, const vec3& colour); const vec3& getColour() const; const std::string& getExt() const; void setDestY(float dest_y); void colourize(); void inc(); void dec(); void setShow(bool show); int getCount() const; void setCount(int count); bool isNew() const; bool isFinished() const; void logic(float dt); void draw(); }; class FileKey { std::vector active_keys; std::map keymap; FXFont font; float update_interval; float interval_remaining; bool show; public: FileKey(); ~FileKey(); FileKey(float update_interval); void setShow(bool show); void clear(); void colourize(); void inc(RFile* file); void dec(RFile* file); void logic(float dt); void draw(); }; #endif gource-0.56/src/caption.cpp0000644002342600234260000000321615152463042015524 0ustar andrewcandrewc/* Copyright (C) 2010 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "caption.h" RCaption::RCaption(const std::string& caption, time_t timestamp, const FXFont& font) { this->caption = caption; this->timestamp = timestamp; this->font = font; alpha = 0.0; elapsed = 0.0; colour = gGourceSettings.caption_colour; } void RCaption::setPos(const vec2& pos) { this->pos = pos; } const vec2& RCaption::getPos() const { return pos; } const std::string& RCaption::getCaption() const { return caption; } bool RCaption::isFinished() const { return elapsed >= gGourceSettings.caption_duration; } void RCaption::logic(float dt) { float fade_in = glm::min(2.0f, gGourceSettings.caption_duration / 3.0f); elapsed += dt; alpha = glm::min(1.0f, glm::min(elapsed,glm::max(0.0f,gGourceSettings.caption_duration-elapsed)) / fade_in); } void RCaption::draw() { font.setColour(vec4(colour.x, colour.y, colour.z, alpha)); font.draw(pos.x, pos.y, caption); } gource-0.56/src/zoomcamera.h0000644002342600234260000000430615152463042015672 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef ZOOM_CAMERA_H #define ZOOM_CAMERA_H #include "core/bounds.h" #include "core/frustum.h" #include "gource_settings.h" class ZoomCamera { vec3 pos; vec3 dest; vec3 target; vec3 up; vec3 _pos; vec3 _target; bool lockon; float speed; float lockon_time; float padding; float min_distance, max_distance; float fov; float znear, zfar; public: ZoomCamera(); ZoomCamera(vec3 start, vec3 target, float min_distance, float max_distance); void setSpeed(float speed); void lockOn(bool lockon); void look(); void lookAt(const vec3& target); void focus(); const vec3& getPos() const { return pos; }; const vec3& getUp() const { return up; }; const vec3& getTarget() const { return target; }; const vec3& getDest() const { return dest; }; float getFOV() { return fov; }; float getZNear() { return znear; }; float getZFar() { return zfar; }; void setPos(const vec3& pos, bool keep_angle = false); float getMinDistance(); float getMaxDistance(); void setPadding(float padding); void setDistance(float distance); void setMinDistance(float min); void setMaxDistance(float max); void reset(); void logic(float dt); void adjustDistance(); void adjust(const Bounds2D& bounds); void adjust(const Bounds2D& bounds, bool adjust_distance); void stop(); }; extern bool gGourceVerticalCrop; extern bool gGourceHorizontalCrop; #endif gource-0.56/src/gource.cpp0000664002342600234260000022006115152463042015354 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "gource.h" #include "core/png_writer.h" bool gGourceDrawBackground = true; bool gGourceQuadTreeDebug = false; int gGourceMaxQuadTreeDepth = 6; int gGourceUserInnerLoops = 0; Gource::Gource(FrameExporter* exporter) { this->logfile = gGourceSettings.path; commitlog = 0; //disable OpenGL 2.0 functions if not supported if(!GLEW_VERSION_2_0) gGourceSettings.ffp = true; if(!gGourceSettings.file_graphic) { gGourceSettings.file_graphic = texturemanager.grab("file.png", true, GL_CLAMP_TO_EDGE); } if(gGourceSettings.default_font_scale) { if(display.viewport_dpi_ratio.x > 1.0f) { gGourceSettings.font_scale = display.viewport_dpi_ratio.x; } else { int threshold = 1600; gGourceSettings.font_scale = (float) (1 + glm::max(0, display.height / threshold)); } debugLog("setting font scale for resolution %d x %d to %.2f", display.width, display.height, gGourceSettings.font_scale); gGourceSettings.setScaledFontSizes(); } fontlarge = fontmanager.grab(gGourceSettings.font_file, 42 * gGourceSettings.font_scale); fontlarge.dropShadow(true); fontlarge.roundCoordinates(true); fontmedium = fontmanager.grab(gGourceSettings.font_file, gGourceSettings.scaled_font_size); fontmedium.dropShadow(true); fontmedium.roundCoordinates(false); fontcaption = fontmanager.grab(gGourceSettings.font_file, gGourceSettings.caption_size); fontcaption.dropShadow(true); fontcaption.roundCoordinates(false); fontcaption.alignTop(false); font = fontmanager.grab(gGourceSettings.font_file, 14 * gGourceSettings.font_scale); font.dropShadow(true); font.roundCoordinates(true); fontdirname = fontmanager.grab(gGourceSettings.font_file, gGourceSettings.scaled_dirname_font_size); fontdirname.dropShadow(true); fontdirname.roundCoordinates(true); slider.init(); //only use bloom with alpha channel if transparent due to artifacts on some video cards std::string bloom_tga = gGourceSettings.transparent ? "bloom_alpha.tga" : "bloom.tga"; bloomtex = texturemanager.grab(bloom_tga); beamtex = texturemanager.grab("beam.png"); usertex = texturemanager.grab("user.png", true, GL_CLAMP_TO_EDGE); shadow_shader = text_shader = bloom_shader = 0; if(!gGourceSettings.ffp) { shadow_shader = shadermanager.grab("shadow"); bloom_shader = shadermanager.grab("bloom"); text_shader = shadermanager.grab("text"); } //calculate once GLint max_texture_size; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size); font_texel_size = 1.0f / (float) std::min( 512, max_texture_size ); logotex = 0; backgroundtex = 0; //load logo if(gGourceSettings.logo.size() > 0) { bool mipmap_logo = !(GLEW_ARB_texture_non_power_of_two || GLEW_VERSION_2_0); logotex = texturemanager.grabFile(gGourceSettings.logo, mipmap_logo); } //load background image if(gGourceSettings.background_image.size() > 0) { backgroundtex = texturemanager.grabFile(gGourceSettings.background_image); } stop_position_reached=false; reloaded = false; paused = false; first_read = true; grab_mouse = false; mousemoved = false; mousedragged = false; mouseclicked = false; take_screenshot = false; if(gGourceSettings.hide_mouse) { cursor.showCursor(false); } splash = -1.0; debug = false; trace_debug = false; frameExporter = 0; dirNodeTree = 0; userTree = 0; selectedFile = 0; hoverFile = 0; selectedUser = 0; hoverUser = 0; date_x_offset = 0; starting_z = -300.0f; textbox = TextBox(fontmanager.grab(gGourceSettings.font_file, 18 * gGourceSettings.font_scale)); textbox.setBrightness(0.5f); textbox.show(); file_key = FileKey(1.0f); camera = ZoomCamera(vec3(0,0, starting_z), vec3(0.0, 0.0, 0.0), gGourceSettings.camera_zoom_default, gGourceSettings.camera_zoom_max); camera.setPadding(gGourceSettings.padding); setCameraMode(gGourceSettings.camera_mode); root = 0; //min physics rate 60fps (ie maximum allowed delta 1.0/60) max_tick_rate = 1.0 / 60.0; runtime = 0.0f; frameskip = 0; framecount = 0; reset(); logmill = new RLogMill(logfile); if(exporter!=0) setFrameExporter(exporter, gGourceSettings.output_framerate); //if recording a video or in demo mode, or multiple repos, the slider is initially hidden if(exporter==0 && gGourceSettings.repo_count==1) slider.show(); } void Gource::writeCustomLog(const std::string& logfile, const std::string& output_file) { RLogMill logmill(logfile); RCommitLog* commitlog = logmill.getLog(); // TODO: exception handling if(!commitlog) { std::string error = logmill.getError(); if(!error.empty()) SDLAppQuit(error); return; } RCommit commit; FILE* fh = stdout; if(output_file != "-") { fh = fopen(output_file.c_str(), "w"); if(!fh) return; } while(!commitlog->isFinished()) { RCommit commit; if(!commitlog->nextCommit(commit)) { if(!commitlog->isSeekable()) { break; } continue; } for(std::list::iterator it = commit.files.begin(); it != commit.files.end(); it++) { RCommitFile& cf = *it; fprintf(fh, "%lld|%s|%s|%s\n", (long long int) commit.timestamp, commit.username.c_str(), cf.action.c_str(), cf.filename.c_str()); } commit.files.clear(); } if(output_file != "-") fclose(fh); } Gource::~Gource() { reset(); if(logmill!=0) delete logmill; if(root!=0) delete root; //reset settings gGourceSettings.setGourceDefaults(); } void Gource::init() { } void Gource::unload() { file_vbo.unload(); user_vbo.unload(); edge_vbo.unload(); action_vbo.unload(); bloom_vbo.unload(); } void Gource::reload() { reloaded = true; } void Gource::quit() { } void Gource::update(float t, float dt) { float scaled_dt = std::min(dt, max_tick_rate); //if exporting a video use a fixed tick rate rather than time based if(frameExporter != 0) { scaled_dt = max_tick_rate; } //apply time scaling scaled_dt *= gGourceSettings.time_scale; //have to manage runtime internally as we're messing with dt if(!paused) runtime += scaled_dt; if(gGourceSettings.stop_at_time > 0.0 && runtime >= gGourceSettings.stop_at_time) stop_position_reached = true; logic_time = SDL_GetTicks(); logic(runtime, scaled_dt); logic_time = SDL_GetTicks() - logic_time; draw(runtime, scaled_dt); //extract frames based on frameskip setting if frameExporter defined if(frameExporter != 0 && commitlog && !gGourceSettings.shutdown) { if(framecount % (frameskip+1) == 0) { frameExporter->dump(); } } if(!gGourceSettings.hide_mouse) { //note: cursor uses real dt cursor.logic(dt); cursor.draw(); } framecount++; } //peek at the date under the mouse pointer on the slider std::string Gource::dateAtPosition(float percent) { RCommit commit; std::string date; if(percent<1.0 && commitlog->getCommitAt(percent, commit)) { //display date char datestr[256]; // TODO: memory leak ?? struct tm* timeinfo = localtime ( &(commit.timestamp) ); strftime(datestr, 256, "%A, %d %B, %Y", timeinfo); date = std::string(datestr); } return date; } void Gource::grabMouse(bool grab_mouse) { this->grab_mouse = grab_mouse; #if SDL_VERSION_ATLEAST(2,0,0) if(grab_mouse) { if(!SDL_GetRelativeMouseMode()) { // NOTE: SDL_SetWindowGrab needed as well to work around this bug: // http://bugzilla.libsdl.org/show_bug.cgi?id=1967 SDL_SetWindowGrab(display.sdl_window, SDL_TRUE); SDL_SetRelativeMouseMode(SDL_TRUE); } } else { if(SDL_GetRelativeMouseMode()) { SDL_SetWindowGrab(display.sdl_window, SDL_FALSE); SDL_SetRelativeMouseMode(SDL_FALSE); SDL_WarpMouseInWindow(display.sdl_window, mousepos.x, mousepos.y); } } #endif #if not SDL_VERSION_ATLEAST(2,0,0) if(!grab_mouse) { // restore old mouse position SDL_WarpMouse(mousepos.x, mousepos.y); } #endif cursor.showCursor(!grab_mouse); } void Gource::mouseMove(SDL_MouseMotionEvent *e) { if(commitlog==0) return; if(gGourceSettings.disable_input) return; if(gGourceSettings.hide_mouse) return; // debugLog("mouse move %d, %d (change %d, %d)", e->x, e->y, e->xrel, e->yrel); if(grab_mouse) { #if not SDL_VERSION_ATLEAST(2,0,0) int warp_x = display.width/2; int warp_y = display.height/2; //this is an even we generated by warping the mouse below if(e->x == warp_x && e->y == warp_y) return; SDL_WarpMouse(warp_x, warp_y); #endif } bool rightmouse = cursor.rightButtonPressed(); //move camera in direction the user dragged the mouse if(mousedragged || rightmouse) { vec2 mag( e->xrel, e->yrel ); //if right mouse button is held while dragging, rotate tree instead of //moving camera if(rightmouse) { manual_rotate = true; if(fabs(mag.x) > fabs(mag.y)) { rotate_angle = std::min(1.0f, (float) fabs(mag.x) / 10.0f) * 5.0f * DEGREES_TO_RADIANS; if(mag.x < 0.0f) rotate_angle = -rotate_angle; } else { rotate_angle = std::min(1.0f, (float) fabs(mag.y) / 10.0f) * 5.0f * DEGREES_TO_RADIANS; if(mag.y < 0.0f) rotate_angle = -rotate_angle; } return; } cursor_move += mag; return; } if(grab_mouse) return; mousepos = vec2(e->x, e->y); mousemoved=true; cursor.updatePos(mousepos); float pos; if(!gGourceSettings.hide_progress && slider.mouseOver(mousepos, &pos)) { std::string date = dateAtPosition(pos); slider.setCaption(date); } } void Gource::zoom(bool zoomin) { manual_zoom = true; float zoom_multi = 1.1; float distance = -camera.getDest().z; if(zoomin) { distance /= zoom_multi; if(distance < gGourceSettings.camera_zoom_min) distance = gGourceSettings.camera_zoom_min; } else { distance *= zoom_multi; if(distance > gGourceSettings.camera_zoom_max) distance = gGourceSettings.camera_zoom_max; } camera.setDistance(distance); } #if SDL_VERSION_ATLEAST(2,0,0) void Gource::mouseWheel(SDL_MouseWheelEvent *e) { if(gGourceSettings.disable_input) return; if(e->y > 0) { zoom(true); } if(e->y < 0) { zoom(false); } } #endif void Gource::mouseClick(SDL_MouseButtonEvent *e) { if(commitlog==0) return; if(gGourceSettings.disable_input) return; if(gGourceSettings.hide_mouse) return; //mouse click should stop the cursor being idle cursor.updatePos(mousepos); if(e->type == SDL_MOUSEBUTTONUP) { if(e->button == SDL_BUTTON_LEFT) { //stop dragging mouse, return the mouse to where //the user started dragging. mousedragged=false; } if(e->button == SDL_BUTTON_LEFT || e->button == SDL_BUTTON_RIGHT) { if(!cursor.buttonPressed()) { grabMouse(false); } } } if(e->type != SDL_MOUSEBUTTONDOWN) return; #if not SDL_VERSION_ATLEAST(2,0,0) //wheel up if(e->button == SDL_BUTTON_WHEELUP) { zoom(true); return; } //wheel down if(e->button == SDL_BUTTON_WHEELDOWN) { zoom(false); return; } #endif if(e->button == SDL_BUTTON_MIDDLE) { toggleCameraMode(); return; } if(e->button == SDL_BUTTON_RIGHT) { grabMouse(true); return; } if(e->button == SDL_BUTTON_LEFT) { //mousepos = vec2(e->x, e->y); mouseclicked=true; if(canSeek()) { float position; if(slider.click(mousepos, &position)) { seekTo(position); } } } } void Gource::showSplash() { splash = 15.0; } void Gource::setFrameExporter(FrameExporter* exporter, int video_framerate) { int gource_framerate = video_framerate; this->framecount = 0; this->frameskip = 0; //calculate appropriate tick rate for video frame rate while(gource_framerate<60) { gource_framerate += video_framerate; this->frameskip++; } this->max_tick_rate = 1.0f / ((float) gource_framerate); this->frameExporter = exporter; } void Gource::setCameraMode(const std::string& mode) { setCameraMode(mode == "track"); } void Gource::setCameraMode(bool track_users) { manual_rotate = false; manual_zoom = false; this->track_users = track_users; if(selectedUser!=0) camera.lockOn(track_users); manual_camera = false; gGourceSettings.camera_mode = track_users ? "track" : "overview"; } void Gource::toggleCameraMode() { setCameraMode(!track_users); } //trace click of mouse on background void Gource::selectBackground() { //is the left mouse button down? if(!cursor.leftButtonPressed()) return; selectUser(0); manual_camera = true; mousedragged=true; grabMouse(true); } //select a user, deselect current file/user void Gource::selectUser(RUser* user) { //already selected do nothing if(user!=0 && selectedUser==user) return; if(selectedFile != 0) { selectedFile->setSelected(false); selectedFile = 0; } // deselect current user if(selectedUser != 0) { selectedUser->setSelected(false); selectedUser = 0; } //if no user return if(user == 0) { camera.lockOn(false); return; } selectedUser = user; //select user, lock on camera selectedUser->setSelected(true); if(track_users) camera.lockOn(true); } //select a file, deselect current file/user void Gource::selectFile(RFile* file) { //already selected do nothing if(file!=0 && selectedFile==file) return; if(selectedUser != 0) { selectedUser->setSelected(false); selectedUser = 0; } // deselect current file if(selectedFile != 0) { selectedFile->setSelected(false); selectedFile = 0; } //if no file return if(file == 0) { return; } selectedFile = file; //select user, lock on camera selectedFile->setSelected(true); } void Gource::selectNextUser() { //debugLog("selectNextUser()\n"); int currTagId = -1; if(selectedUser != 0) { currTagId = selectedUser->getTagID(); } RUser* newSelectedUser = 0; // find next user after this user for(std::map::iterator it = tagusermap.begin(); it != tagusermap.end(); it++) { RUser* user = it->second; if(!user->isInactive() && user->getTagID() > currTagId && user->getAlpha() >= 1.0) { newSelectedUser = user; break; } } // just get first user if(newSelectedUser == 0) { for(std::map::iterator it = tagusermap.begin(); it != tagusermap.end(); it++) { RUser* user = it->second; if(!user->isInactive() && user->getAlpha() >= 1.0) { newSelectedUser = user; break; } } } selectUser(newSelectedUser); } void Gource::keyPress(SDL_KeyboardEvent *e) { if (gGourceSettings.disable_input) return; if (e->type == SDL_KEYUP) return; if (e->type == SDL_KEYDOWN) { #if SDL_VERSION_ATLEAST(2,0,0) bool key_escape = e->keysym.sym == SDLK_ESCAPE; bool key_tab = e->keysym.sym == SDLK_TAB; bool key_space = e->keysym.sym == SDLK_SPACE; bool key_plus = e->keysym.sym == SDLK_PLUS; bool key_equals = e->keysym.sym == SDLK_EQUALS; bool key_minus = e->keysym.sym == SDLK_MINUS; bool key_leftbracket = e->keysym.sym == SDLK_LEFTBRACKET; bool key_rightbracket = e->keysym.sym == SDLK_RIGHTBRACKET; bool key_comma = e->keysym.sym == SDLK_COMMA; bool key_period = e->keysym.sym == SDLK_PERIOD; bool key_slash = e->keysym.sym == SDLK_SLASH; #else bool key_escape = e->keysym.unicode == SDLK_ESCAPE; bool key_tab = e->keysym.unicode == SDLK_TAB; bool key_space = e->keysym.unicode == SDLK_SPACE; bool key_plus = e->keysym.unicode == SDLK_PLUS; bool key_equals = e->keysym.unicode == SDLK_EQUALS; bool key_minus = e->keysym.unicode == SDLK_MINUS; bool key_leftbracket = e->keysym.unicode == SDLK_LEFTBRACKET; bool key_rightbracket = e->keysym.unicode == SDLK_RIGHTBRACKET; bool key_comma = e->keysym.unicode == SDLK_COMMA; bool key_period = e->keysym.unicode == SDLK_PERIOD; bool key_slash = e->keysym.unicode == SDLK_SLASH; #endif if (key_escape) { quit(); } if(commitlog==0) return; if(e->keysym.sym == SDLK_F12) { take_screenshot = true; } if (e->keysym.sym == SDLK_q) { debug = !debug; } if (e->keysym.sym == SDLK_w) { trace_debug = !trace_debug; } if (e->keysym.sym == SDLK_m) { //toggle mouse visibility unless mouse clicked/pressed/dragged if(!(mousedragged || mouseclicked || cursor.leftButtonPressed() )) { if(!cursor.isHidden()) { cursor.showCursor(false); gGourceSettings.hide_mouse = true; } else { cursor.showCursor(true); gGourceSettings.hide_mouse = false; } } } if (e->keysym.sym == SDLK_n) { idle_time = gGourceSettings.auto_skip_seconds; } if (e->keysym.sym == SDLK_y) { gGourceQuadTreeDebug = !gGourceQuadTreeDebug; } if (e->keysym.sym == SDLK_t) { gGourceSettings.hide_tree = !gGourceSettings.hide_tree; } if (e->keysym.sym == SDLK_g) { gGourceSettings.hide_users = !gGourceSettings.hide_users; } if (e->keysym.sym == SDLK_u) { if(gGourceSettings.hide_usernames && !gGourceSettings.highlight_all_users) { gGourceSettings.hide_usernames = false; gGourceSettings.highlight_all_users = true; } else if (gGourceSettings.highlight_all_users && !gGourceSettings.hide_usernames) { gGourceSettings.hide_usernames = false; gGourceSettings.highlight_all_users = false; } else { gGourceSettings.hide_usernames = true; gGourceSettings.highlight_all_users = false; } } if (e->keysym.sym == SDLK_d) { if(gGourceSettings.hide_dirnames && !gGourceSettings.highlight_dirs) { gGourceSettings.hide_dirnames = false; gGourceSettings.highlight_dirs = true; } else if(gGourceSettings.highlight_dirs && !gGourceSettings.hide_dirnames) { gGourceSettings.hide_dirnames = false; gGourceSettings.highlight_dirs = false; } else { gGourceSettings.hide_dirnames = true; gGourceSettings.highlight_dirs = false; } } if (e->keysym.sym == SDLK_f) { if(gGourceSettings.hide_filenames && !gGourceSettings.file_extensions) { gGourceSettings.hide_filenames = false; } else if(!gGourceSettings.hide_filenames && gGourceSettings.file_extensions) { gGourceSettings.file_extensions = false; gGourceSettings.hide_filenames = true; } else { gGourceSettings.file_extensions = true; gGourceSettings.hide_filenames = false; } } if (e->keysym.sym == SDLK_r) { gGourceSettings.hide_root = !gGourceSettings.hide_root; } if (e->keysym.sym == SDLK_k) { gGourceSettings.show_key = !gGourceSettings.show_key; } if(e->keysym.sym == SDLK_c) { splash = 15.0f; } if (e->keysym.sym == SDLK_v) { toggleCameraMode(); } if (e->keysym.sym == SDLK_p) { if(GLEW_VERSION_2_0 && bloom_shader != 0) { gGourceSettings.ffp = !gGourceSettings.ffp; } } if (e->keysym.sym == SDLK_z) { gGourceGravity = !gGourceGravity; } if (e->keysym.sym == SDLK_s) { recolour=true; } if(key_tab) { selectNextUser(); } if (key_space) { paused = !paused; } if (key_equals || key_plus) { if(gGourceSettings.days_per_second>=1.0) { gGourceSettings.days_per_second = std::min(30.0f, floorf(gGourceSettings.days_per_second) + 1.0f); } else { gGourceSettings.days_per_second = std::min(1.0f, gGourceSettings.days_per_second * 2.0f); } } if (key_minus) { if(gGourceSettings.days_per_second>1.0) { gGourceSettings.days_per_second = std::max(0.0f, floorf(gGourceSettings.days_per_second) - 1.0f); } else { gGourceSettings.days_per_second = std::max(0.0f, gGourceSettings.days_per_second * 0.5f); } } if(e->keysym.sym == SDLK_KP_MINUS) { zoom(true); } if(e->keysym.sym == SDLK_KP_PLUS) { zoom(false); } if(key_leftbracket) { gGourceForceGravity /= 1.1; } if(key_rightbracket) { gGourceForceGravity *= 1.1; } if(key_period) { if(gGourceSettings.time_scale>=1.0) { gGourceSettings.time_scale = std::min(4.0f, floorf(gGourceSettings.time_scale) + 1.0f); } else { gGourceSettings.time_scale = std::min(1.0f, gGourceSettings.time_scale * 2.0f); } } if(key_comma) { if(gGourceSettings.time_scale>1.0) { gGourceSettings.time_scale = std::max(0.0f, floorf(gGourceSettings.time_scale) - 1.0f); } else { gGourceSettings.time_scale = std::max(0.25f, gGourceSettings.time_scale * 0.5f); } } if(key_slash) { gGourceSettings.time_scale = 1.0f; } } } void Gource::reset() { camera.reset(); user_bounds.reset(); active_user_bounds.reset(); dir_bounds.reset(); commitqueue.clear(); tagusermap.clear(); gGourceRemovedFiles.clear(); if(userTree!=0) delete userTree; if(dirNodeTree!=0) delete dirNodeTree; recolour = false; userTree = 0; dirNodeTree = 0; selectedFile = 0; hoverFile = 0; use_selection_bounds = false; selection_bounds.reset(); manual_rotate = false; manual_zoom = false; rotation_remaining_angle = 0.0f; message_timer = 0.0f; cursor_move = vec2(0.0f, 0.0f); selectedUser = 0; hoverUser = 0; manual_camera = false; grab_mouse = false; mouseclicked=false; mousemoved=false; mousedragged = false; commitqueue_max_size = 100; rotate_angle = 0.0f; if(root!=0) delete root; root = new RDirNode(0, "/"); //delete users for(std::map::iterator it = users.begin(); it != users.end(); it++) { delete it->second; } users.clear(); //delete for(std::map::iterator it = files.begin(); it != files.end(); it++) { delete it->second; } for(std::list::iterator it = captions.begin(); it!=captions.end();it++) { delete (*it); } for(std::list::iterator it = active_captions.begin(); it!=active_captions.end();it++) { delete (*it); } files.clear(); captions.clear(); active_captions.clear(); last_percent = 0.0; file_key.clear(); idle_time=0; currtime=0; lasttime=0; subseconds=0.0; tag_seq = 1; commit_seq = 1; } void Gource::deleteFile(RFile* file) { //debugLog("removing file %s\n", file->fullpath.c_str()); root->removeFile(file); if(hoverFile == file) { hoverFile = 0; } if(selectedFile == file) { selectFile(0); } //remove from any users with actions against this file - wrong way around? meh for(std::map::iterator it = users.begin(); it!=users.end(); it++) { RUser* user = it->second; user->fileRemoved(file); } files.erase(file->fullpath); file_key.dec(file); //debugLog("removed file %s\n", file->fullpath.c_str()); delete file; } RFile* Gource::addFile(const RCommitFile& cf) { //if we already have max files in circulation //we cant add any more if(gGourceSettings.max_files > 0 && files.size() >= gGourceSettings.max_files) return 0; //see if this is a directory std::string file_as_dir = cf.filename; if(file_as_dir[file_as_dir.size()-1] != '/') file_as_dir.append("/"); if(root->isDir(file_as_dir)) return 0; int tagid = tag_seq++; RFile* file = new RFile(cf.filename, cf.colour, vec2(0.0,0.0), tagid); files[cf.filename] = file; root->addFile(file); file_key.inc(file); while(root->getParent() != 0) { debugLog("parent changed to %s", root->getPath().c_str()); root = root->getParent(); } return file; } RUser* Gource::addUser(const std::string& username) { vec2 pos; if(dir_bounds.area() > 0) { pos = dir_bounds.centre(); } else { pos = vec2(0,0); } int tagid = tag_seq++; RUser* user = new RUser(username, pos, tagid); users[username] = user; tagusermap[tagid] = user; //debugLog("added user %s, tagid = %d\n", username.c_str(), tagid); return user; } void Gource::deleteUser(RUser* user) { if(hoverUser == user) { hoverUser = 0; } if(selectedUser == user) { selectUser(0); } users.erase(user->getName()); tagusermap.erase(user->getTagID()); //debugLog("deleted user %s, tagid = %d\n", user->getName().c_str(), user->getTagID()); delete user; } bool Gource::canSeek() { if(gGourceSettings.hide_progress || commitlog == 0 || !commitlog->isSeekable()) return false; return true; } void Gource::seekTo(float percent) { //debugLog("seekTo(%.2f)\n", percent); if(commitlog == 0 || !commitlog->isSeekable()) return; // end pause if(paused) paused = false; reset(); commitlog->seekTo(percent); } Regex caption_regex("^(?:\\xEF\\xBB\\xBF)?([^|]+)\\|(.+)$"); void Gource::loadCaptions() { if(!gGourceSettings.caption_file.size()) return; std::ifstream cf(gGourceSettings.caption_file.c_str()); if(!cf.is_open()) return; std::string line; std::vector matches; time_t last_timestamp = 0; while(std::getline(cf, line)) { ConfFile::trim(line); if(!caption_regex.match(line, &matches)) continue; time_t timestamp; // Allow timestamp to be a string if(matches[0].size() > 1 && matches[0].find("-", 1) != std::string::npos) { if(!SDLAppSettings::parseDateTime(matches[0], timestamp)) continue; } else { timestamp = (time_t) atoll(matches[0].c_str()); if(!timestamp && matches[0] != "0") continue; } std::string caption = RCommitLog::filter_utf8(matches[1]); //ignore older captions if(timestamp < currtime) continue; //ignore out of order captions if(timestamp < last_timestamp) continue; last_timestamp = timestamp; //fprintf(stderr, "%d %s\n", timestamp, matches[1].c_str()); captions.push_back(new RCaption(caption, timestamp, fontcaption)); } //fprintf(stderr, "loaded %d captions\n", captions.size()); } void Gource::readLog() { if(stop_position_reached) return; //debugLog("readLog()\n"); // read commits until either we are ahead of currtime while((commitlog->hasBufferedCommit() || !commitlog->isFinished()) && (commitqueue.empty() || (commitqueue.back().timestamp <= currtime && commitqueue.size() < commitqueue_max_size)) ) { RCommit commit; if(!commitlog->nextCommit(commit)) { if(!commitlog->isSeekable()) { break; } continue; } if(gGourceSettings.stop_timestamp != 0 && commit.timestamp > gGourceSettings.stop_timestamp) { stop_position_reached = true; break; } commitqueue.push_back(commit); } if(first_read && commitqueue.empty()) { throw SDLAppException("no commits found"); } first_read = false; if(!commitlog->isFinished() && commitlog->isSeekable()) { last_percent = commitlog->getPercent(); slider.setPercent(last_percent); } bool is_finished = commitlog->isFinished(); if( // end reached (gGourceSettings.stop_at_end && is_finished) // stop position reached || (gGourceSettings.stop_position > 0.0 && commitlog->isSeekable() && (is_finished || last_percent >= gGourceSettings.stop_position)) ) { stop_position_reached = true; } if((is_finished || stop_position_reached) && gGourceSettings.file_idle_time_at_end > 0.0f) { gGourceSettings.file_idle_time = gGourceSettings.file_idle_time_at_end; } // useful to figure out where we have crashes //debugLog("current date: %s\n", displaydate.c_str()); } void Gource::processCommit(const RCommit& commit, float t) { //find files of this commit or create it for(std::list::const_iterator it = commit.files.begin(); it != commit.files.end(); it++) { const RCommitFile& cf = *it; RFile* file = 0; //is this a directory (ends in slash) //deleting a directory - find directory: then for each file, remove each file if(!cf.filename.empty() && cf.filename[cf.filename.size()-1] == '/') { //ignore unless it is a delete: we cannot 'add' or 'modify' a directory //as its not a physical entity in Gource, only files are. if(cf.action != "D") continue; std::list dirs; root->findDirs(cf.filename, dirs); for(std::list::iterator it = dirs.begin(); it != dirs.end(); it++) { RDirNode* dir = (*it); //fprintf(stderr, "deleting everything under %s because of %s\n", dir->getPath().c_str(), cf.filename.c_str()); //foreach dir files std::list dir_files; dir->getFilesRecursive(dir_files); for(std::list::iterator it = dir_files.begin(); it != dir_files.end(); it++) { RFile* file = *it; addFileAction(commit, cf, file, t); } } continue; } std::map::iterator seen_file = files.find(cf.filename); if(seen_file != files.end()) file = seen_file->second; if(file == 0) { file = addFile(cf); if(!file) continue; } addFileAction(commit, cf, file, t); } } void Gource::addFileAction(const RCommit& commit, const RCommitFile& cf, RFile* file, float t) { //create user if havent yet. do it here to ensure at least one of there files //was added (incase we hit gGourceSettings.max_files) //find user of this commit or create them RUser* user = 0; //see if user already exists std::map::iterator seen_user = users.find(commit.username); if(seen_user != users.end()) user = seen_user->second; if(user == 0) { user = addUser(commit.username); if(gGourceSettings.highlight_all_users) user->setHighlighted(true); else { // set the highlighted flag if name matches a highlighted user for(std::vector::iterator hi = gGourceSettings.highlight_users.begin(); hi != gGourceSettings.highlight_users.end(); hi++) { std::string highlight = *hi; if(!highlight.empty() && user->getName() == highlight) { user->setHighlighted(true); break; } } } } //create action RAction* userAction = 0; commit_seq++; if(cf.action == "D") { userAction = new RemoveAction(user, file, commit.timestamp, t); } else { if(cf.action == "A") { userAction = new CreateAction(user, file, commit.timestamp, t); } else { userAction = new ModifyAction(user, file, commit.timestamp, t, cf.colour); } } user->addAction(userAction); } void Gource::interactUsers() { // update quad tree Bounds2D quadtreebounds = user_bounds; quadtreebounds.min -= vec2(1.0f, 1.0f); quadtreebounds.max += vec2(1.0f, 1.0f); update_user_tree_time = SDL_GetTicks(); if(userTree != 0) delete userTree; int max_depth = 1; //dont use deep quad tree initially when all the nodes are in one place if(dir_bounds.area() > 10000.0) { max_depth = gGourceMaxQuadTreeDepth; } userTree = new QuadTree(quadtreebounds, max_depth, 1); for(std::map::iterator it = users.begin(); it!=users.end(); it++) { RUser* user = it->second; userTree->addItem(user); } //move users - interact with other users and files for(std::map::iterator ait = users.begin(); ait!=users.end(); ait++) { RUser* a = ait->second; UserForceFunctor uff(a); userTree->visitItemsInBounds(a->quadItemBounds, uff); gGourceUserInnerLoops += uff.getLoopCount(); a->applyForceToActions(); } update_user_tree_time = SDL_GetTicks() - update_user_tree_time; } void Gource::updateBounds() { user_bounds.reset(); active_user_bounds.reset(); for(std::map::iterator it = users.begin(); it!=users.end(); it++) { RUser* user = it->second; user->updateQuadItemBounds(); user_bounds.update(user->quadItemBounds); if(!user->isIdle()) { active_user_bounds.update(user->quadItemBounds); } } dir_bounds.reset(); for(std::map::iterator it = gGourceDirMap.begin(); it!=gGourceDirMap.end(); it++) { RDirNode* node = it->second; if(node->isVisible()) { node->updateQuadItemBounds(); dir_bounds.update(node->quadItemBounds); } } } void Gource::updateUsers(float t, float dt) { std::vector inactiveUsers; size_t idle_users = 0; // move users for(std::map::iterator it = users.begin(); it!=users.end(); it++) { RUser* u = it->second; u->logic(t, dt); //deselect user if fading out from inactivity if(u->isFading() && selectedUser == u) { selectUser(0); } if(u->isInactive()) { inactiveUsers.push_back(u); } if(u->isIdle()) { idle_users++; } else { //if nothing is selected, and this user is active and this user is the specified user to follow, select them if(selectedUser == 0 && selectedFile == 0) { for(std::vector::iterator ui = gGourceSettings.follow_users.begin(); ui != gGourceSettings.follow_users.end(); ui++) { std::string follow = *ui; if(follow.size() && u->getName() == follow) { selectUser(u); } } } } } if(users.empty() && stop_position_reached) { appFinished = true; } //nothing is moving so increment idle if(idle_users==users.size()) { idle_time += dt; } else { idle_time = 0; } // delete inactive users for(std::vector::iterator it = inactiveUsers.begin(); it != inactiveUsers.end(); it++) { deleteUser(*it); } } void Gource::interactDirs() { // update quad tree Bounds2D quadtreebounds = dir_bounds; quadtreebounds.min -= vec2(1.0f, 1.0f); quadtreebounds.max += vec2(1.0f, 1.0f); update_dir_tree_time = SDL_GetTicks(); if(dirNodeTree !=0) delete dirNodeTree; int max_depth = 1; //dont use deep quad tree initially when all the nodes are in one place if(dir_bounds.area() > 10000.0) { max_depth = gGourceMaxQuadTreeDepth; } dirNodeTree = new QuadTree(quadtreebounds, max_depth, 1); //apply forces with other directories for(std::map::iterator it = gGourceDirMap.begin(); it!=gGourceDirMap.end(); it++) { RDirNode* node = it->second; if(!node->empty()) { dirNodeTree->addItem(node); } } update_dir_tree_time = SDL_GetTicks() - update_dir_tree_time; } void Gource::updateDirs(float dt) { root->applyForces(*dirNodeTree); root->logic(dt); } void Gource::updateTime(time_t display_time) { if(display_time == 0) { displaydate = ""; return; } //display date char datestr[256]; struct tm* timeinfo = localtime ( &display_time ); strftime(datestr, 256, gGourceSettings.date_format.c_str(), timeinfo); displaydate = datestr; //avoid wobbling by only moving font if change is sufficient int date_offset = (int) fontmedium.getWidth(displaydate) * 0.5; if(abs(date_x_offset - date_offset) > 5) date_x_offset = date_offset; } void Gource::updateCamera(float dt) { //camera tracking bool auto_rotate = !manual_rotate && !gGourceSettings.disable_auto_rotate; if(manual_camera) { if(glm::length2(cursor_move) > 0.0f) { float cam_rate = ( -camera.getPos().z ) / ( 5000.0f ); vec3 cam_pos = camera.getPos(); vec2 cursor_delta = cursor_move * cam_rate * 10.0f; cam_pos.x += cursor_delta.x; cam_pos.y += cursor_delta.y; camera.setPos(cam_pos, true); camera.stop(); auto_rotate = false; cursor_move = vec2(0.0f, 0.0f); } } else { Bounds2D cambounds; if(track_users && (selectedFile !=0 || selectedUser !=0)) { Bounds2D focusbounds; if(selectedUser !=0) focusbounds.update(selectedUser->getPos()); if(selectedFile !=0) focusbounds.update(selectedFile->getAbsolutePos()); cambounds = focusbounds; } else { if(track_users && idle_time==0) cambounds = active_user_bounds; else cambounds = dir_bounds; } camera.adjust(cambounds, !manual_zoom); } camera.logic(dt); //automatically rotate camera if(auto_rotate) { if(rotation_remaining_angle > 0.0f) { //rotation through 90 degrees, speed peaks at half way float angle_rate = std::max(dt, (float) (1.0f - fabs((rotation_remaining_angle / 90.0f) - 0.5) * 2.0f)) * dt; rotate_angle = std::min(rotation_remaining_angle, 90.0f * angle_rate); rotation_remaining_angle -= rotate_angle; rotate_angle *= DEGREES_TO_RADIANS; } else if(!cursor.rightButtonPressed() && dir_bounds.area() > 10000.0f) { float aspect_ratio = display.width / (float) display.height; float bounds_ratio = (aspect_ratio > 1.0f) ? dir_bounds.width() / dir_bounds.height() : dir_bounds.height() / dir_bounds.width(); if(bounds_ratio < 0.67f) { rotation_remaining_angle = 90.0f; } } } else { rotation_remaining_angle = 0.0f; } } //change the string hashing seed and recolour files and users void Gource::changeColours() { gStringHashSeed = (rand() % 10000) + 1; for(std::map::iterator it = users.begin(); it != users.end(); it++) { it->second->colourize(); } for(std::map::iterator it = files.begin(); it != files.end(); it++) { it->second->colourize(); } file_key.colourize(); } void Gource::logic(float t, float dt) { if(gGourceSettings.shutdown && logmill->isFinished()) { appFinished=true; return; } if(message_timer>0.0f) message_timer -= dt; if(splash>0.0f) splash -= dt; //init log file if(commitlog == 0) { if(!logmill->isFinished()) return; commitlog = logmill->getLog(); std::string error = logmill->getError(); if(!commitlog) { if(!error.empty()) { throw SDLAppException(error); } else { if(frameExporter!=0) frameExporter->stop(); SDL_Quit(); SDLAppException exception(""); exception.setShowHelp(true); throw exception; } } if(gGourceSettings.start_position>0.0) { seekTo(gGourceSettings.start_position); } } file_key.logic(dt); slider.logic(dt); bool right = false; bool left = false; bool up = false; bool down = false; #if SDL_VERSION_ATLEAST(2,0,0) const Uint8 *keystate = SDL_GetKeyboardState(0); right = keystate[SDL_SCANCODE_RIGHT]; left = keystate[SDL_SCANCODE_LEFT]; up = keystate[SDL_SCANCODE_UP]; down = keystate[SDL_SCANCODE_DOWN]; #else Uint8 *keystate = SDL_GetKeyState(0); right = keystate[SDLK_RIGHT]; left = keystate[SDLK_LEFT]; up = keystate[SDLK_UP]; down = keystate[SDLK_DOWN]; #endif if(right) { cursor_move.x = 10.0; manual_camera = true; } if(left) { cursor_move.x = -10.0; manual_camera = true; } if(up) { cursor_move.y = -10.0; manual_camera = true; } if(down) { cursor_move.y = 10.0; manual_camera = true; } //apply rotation if(rotate_angle != 0.0f) { float s = sinf(rotate_angle); float c = cosf(rotate_angle); if(manual_rotate) { // rotate around camera position if manual vec2 centre = vec2(camera.getPos()); root->rotate(s, c, centre); for(std::map::iterator it = users.begin(); it!=users.end(); it++) { RUser* user = it->second; vec2 rotated_user_pos = rotate_vec2(user->getPos() - centre, s, c) + centre; user->setPos(rotated_user_pos); } } else { root->rotate(s, c); for(std::map::iterator it = users.begin(); it!=users.end(); it++) { RUser* user = it->second; vec2 rotated_user_pos = rotate_vec2(user->getPos(), s, c); user->setPos(rotated_user_pos); } } rotate_angle = 0.0f; } if(recolour) { changeColours(); recolour = false; } //still want to update camera while paused if(paused) { updateBounds(); interactUsers(); interactDirs(); updateCamera(dt); return; } // get more entries if(commitqueue.empty()) { readLog(); } //loop in attempt to find commits if(gGourceSettings.loop && commitqueue.empty() && commitlog->isSeekable()) { if(idle_time >= gGourceSettings.loop_delay_seconds) { first_read=true; seekTo(0.0); readLog(); } } if(currtime==0 && !commitqueue.empty()) { currtime = lasttime = commitqueue[0].timestamp; subseconds = 0.0; loadCaptions(); } //set current time float time_inc = (dt * 86400.0 * gGourceSettings.days_per_second); int seconds = (int) time_inc; subseconds += time_inc - ((float) seconds); if(subseconds >= 1.0) { currtime += (int) subseconds; subseconds -= (int) subseconds; } currtime += seconds; // delete files for(std::vector::iterator it = gGourceRemovedFiles.begin(); it != gGourceRemovedFiles.end(); it++) { deleteFile(*it); } gGourceRemovedFiles.clear(); //add commits up until the current time while(!commitqueue.empty()) { RCommit commit = commitqueue.front(); //auto skip ahead, unless stop_position_reached if(gGourceSettings.auto_skip_seconds>=0.0 && idle_time >= gGourceSettings.auto_skip_seconds && !stop_position_reached) { currtime = lasttime = commit.timestamp; idle_time = 0.0; } if(commit.timestamp > currtime) break; processCommit(commit, t); if(gGourceSettings.no_time_travel) { if(commit.timestamp > lasttime) { lasttime = commit.timestamp; } } else { // allow for non linear time lines if(lasttime > commit.timestamp) { currtime = commit.timestamp; } lasttime = commit.timestamp; } subseconds = 0.0; commitqueue.pop_front(); } slider.resize(); float caption_height = fontcaption.getMaxHeight(); float caption_start_y = canSeek() ? slider.getBounds().min.y - 35.0f : display.height - fontmedium.getMaxHeight() - 20.0f; if(!gGourceSettings.title.empty()) { caption_start_y = glm::min( caption_start_y, display.height - 20.0f - fontmedium.getMaxHeight() ); } caption_start_y = glm::floor(caption_start_y); if(reloaded) { // reposition active captions float y = caption_start_y; for(RCaption* cap : active_captions) { int caption_offset_x = gGourceSettings.caption_offset; // centre if(caption_offset_x == 0) { caption_offset_x = (display.width / 2) - (fontcaption.getWidth(cap->getCaption()) / 2); } else if(caption_offset_x < 0) { caption_offset_x = display.width + caption_offset_x - fontcaption.getWidth(cap->getCaption()); } cap->setPos(vec2(caption_offset_x, y)); y -= caption_height; } reloaded = false; } while(captions.size() > 0) { RCaption* caption = captions.front(); if(caption->timestamp > currtime) break; float y = caption_start_y; while(1) { bool found = false; for(RCaption* cap : active_captions) { if(cap->getPos().y == y) { found = true; break; } } if(!found) break; y -= caption_height; } int caption_offset_x = gGourceSettings.caption_offset; // centre if(caption_offset_x == 0) { caption_offset_x = (display.width / 2) - (fontcaption.getWidth(caption->getCaption()) / 2); } else if(caption_offset_x < 0) { caption_offset_x = display.width + caption_offset_x - fontcaption.getWidth(caption->getCaption()); } caption->setPos(vec2(caption_offset_x, y)); captions.pop_front(); active_captions.push_back(caption); } for(std::list::iterator it = active_captions.begin(); it!=active_captions.end();) { RCaption* caption = *it; caption->logic(dt); if(caption->isFinished()) { it = active_captions.erase(it); delete caption; continue; } it++; } //reset loop counters gGourceUserInnerLoops = 0; gGourceDirNodeInnerLoops = 0; gGourceFileInnerLoops = 0; updateBounds(); interactUsers(); updateUsers(t, dt); interactDirs(); updateDirs(dt); updateCamera(dt); updateTime(!commitqueue.empty() ? currtime : lasttime); } void Gource::mousetrace(float dt) { vec3 cam_pos = camera.getPos(); vec2 projected_mouse = vec2( -(mousepos.x * 2.0f - ((float)display.width)) / ((float)display.height), (1.0f - (2.0f * mousepos.y) / ((float)display.height))) * cam_pos.z; projected_mouse.x += cam_pos.x; projected_mouse.y += cam_pos.y; //find user/file under mouse RFile* fileSelection = 0; RUser* userSelection = 0; if(!gGourceSettings.hide_users) { std::set userset; userTree->getItemsAt(userset, projected_mouse); for(std::set::iterator it = userset.begin(); it != userset.end(); it++) { RUser* user = (RUser*) *it; if(!user->isFading() && user->quadItemBounds.contains(projected_mouse)) { userSelection = user; break; } } } if(!userSelection && !gGourceSettings.hide_files) { std::set dirset; dirNodeTree->getItemsAt(dirset, projected_mouse); for(std::set::iterator it = dirset.begin(); it != dirset.end(); it++) { RDirNode* dir = (RDirNode*) *it; const std::list* files = dir->getFiles(); for(std::list::const_iterator fi = files->begin(); fi != files->end(); fi++) { RFile* file = *fi; if(!file->isHidden() && file->overlaps(projected_mouse)) { fileSelection = file; break; } } } } // is over a file if(fileSelection != 0) { // un hover a user if(hoverUser != 0) { hoverUser->setMouseOver(false); hoverUser = 0; } if(fileSelection != hoverFile) { //deselect previous selection if(hoverFile !=0) hoverFile->setMouseOver(false); //select new fileSelection->setMouseOver(true); hoverFile = fileSelection; } // is over a user } else if(userSelection != 0) { // un hover a file if(hoverFile != 0) { hoverFile->setMouseOver(false); hoverFile = 0; } if(userSelection != hoverUser) { //deselect previous selection if(hoverUser !=0) hoverUser->setMouseOver(false); //select new userSelection->setMouseOver(true); hoverUser = userSelection; } } else { if(hoverFile!=0) hoverFile->setMouseOver(false); if(hoverUser!=0) hoverUser->setMouseOver(false); hoverFile=0; hoverUser=0; } if(mouseclicked) { if(hoverUser!=0) { camera.lockOn(false); selectUser(hoverUser); } else if(hoverFile!=0) { camera.lockOn(false); selectFile(hoverFile); } else { selectBackground(); } } //fprintf(stderr, "end trace\n"); } void Gource::loadingScreen() { if(!gGourceDrawBackground) return; display.mode2D(); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glColor4f(1.0, 1.0, 1.0, 1.0); const char* progress = ""; switch(int(runtime*3.0f)%4) { case 0: progress = ""; break; case 1: progress = "."; break; case 2: progress = ".."; break; case 3: progress = "..."; break; } const char* action = !gGourceSettings.shutdown ? "Reading Log" : "Aborting"; int width = font.getWidth(action); font.setColour(vec4(1.0f)); font.print(display.width/2 - width/2, display.height/2 - 10, "%s%s", action, progress); } void Gource::drawBackground(float dt) { if(!gGourceDrawBackground) return; display.setClearColour(vec4(gGourceSettings.background_colour, gGourceSettings.transparent ? 0.0f : 1.0f)); display.clear(); if(backgroundtex!=0) { glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glColor4f(1.0, 1.0, 1.0, 1.0); glBindTexture(GL_TEXTURE_2D, backgroundtex->textureid); glPushMatrix(); glTranslatef(display.width/2 - backgroundtex->w/2, display.height/2 - backgroundtex->h/2, 0.0f); glBegin(GL_QUADS); glTexCoord2f(0.0f,0.0f); glVertex2i(0, 0); glTexCoord2f(1.0f,0.0f); glVertex2i(backgroundtex->w, 0); glTexCoord2f(1.0f,1.0f); glVertex2i(backgroundtex->w, backgroundtex->h); glTexCoord2f(0.0f,1.0f); glVertex2i(0, backgroundtex->h); glEnd(); glPopMatrix(); } } void Gource::drawScene(float dt) { //draw edges draw_edges_time = SDL_GetTicks(); updateAndDrawEdges(); draw_edges_time = SDL_GetTicks() - draw_edges_time; //draw file shadows draw_shadows_time = SDL_GetTicks(); drawFileShadows(dt); draw_shadows_time = SDL_GetTicks() - draw_shadows_time; //draw actions draw_actions_time = SDL_GetTicks(); drawActions(dt); draw_actions_time = SDL_GetTicks() - draw_actions_time; //draw files draw_files_time = SDL_GetTicks(); drawFiles(dt); draw_files_time = SDL_GetTicks() - draw_files_time; //draw users draw_users_time = SDL_GetTicks(); drawUserShadows(dt); drawUsers(dt); draw_users_time = SDL_GetTicks() - draw_users_time; //draw bloom draw_bloom_time = SDL_GetTicks(); drawBloom(dt); draw_bloom_time = SDL_GetTicks() - draw_bloom_time; } void Gource::updateAndDrawEdges() { root->calcEdges(); if(gGourceSettings.hide_tree) return; //switch to 2d glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, display.width, display.height, 0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBindTexture(GL_TEXTURE_2D, beamtex->textureid); if(!gGourceSettings.ffp) { edge_vbo.reset(); root->updateEdgeVBO(edge_vbo); edge_vbo.update(); shadow_shader->setSampler2D("tex", 0); shadow_shader->setFloat("shadow_strength", 0.5); shadow_shader->use(); vec2 shadow_offset = vec2(2.0, 2.0); glPushMatrix(); glTranslatef(shadow_offset.x, shadow_offset.y, 0.0f); edge_vbo.draw(); glPopMatrix(); glUseProgramObjectARB(0); edge_vbo.draw(); } else { root->drawEdgeShadows(); root->drawEdges(); } //switch back glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } void Gource::drawActions(float dt) { if(gGourceSettings.hide_users) return; glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, beamtex->textureid); glEnable(GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if(!gGourceSettings.ffp) { action_vbo.draw(); } else { //draw actions for(std::map::iterator it = users.begin(); it!=users.end(); it++) { it->second->drawActions(dt); } } } void Gource::drawBloom(float dt) { if(gGourceSettings.hide_bloom) return; glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc (GL_ONE, GL_ONE); if(!gGourceSettings.ffp) { bloom_shader->use(); bloom_vbo.draw(); glUseProgramObjectARB(0); } else { //draw 'gourceian blur' around dirnodes glBindTexture(GL_TEXTURE_2D, bloomtex->textureid); root->drawBloom(dt); } } void Gource::setMessage(const char* str, ...) { char msgbuff[1024]; va_list vl; va_start(vl, str); vsnprintf(msgbuff, 1024, str, vl); va_end(vl); message = std::string(msgbuff); message_timer = 5.0; } void Gource::screenshot() { //get next free recording name char pngname[256]; struct stat finfo; int pngno = 1; while(pngno < 10000) { snprintf(pngname, 256, "gource-%04d.png", pngno); if(stat(pngname, &finfo) != 0) break; pngno++; } //write png std::string filename(pngname); PNGWriter png(gGourceSettings.transparent ? 4 : 3); png.screenshot(filename); setMessage("Wrote screenshot %s", pngname); } void Gource::updateVBOs(float dt) { if(gGourceSettings.ffp) return; if(!gGourceSettings.hide_users) { user_vbo.reset(); action_vbo.reset(); //use a separate vbo for each user texture for(std::map::iterator it = users.begin(); it!=users.end(); it++) { RUser* user = it->second; float alpha = user->getAlpha(); vec3 col = user->getColour(); vec2 scaled_dims = user->dims; if(gGourceSettings.fixed_user_size) scaled_dims *= (-camera.getPos().z / -starting_z); user_vbo.add(user->graphic->textureid, user->getPos() - scaled_dims*0.5f, scaled_dims, vec4(col.x, col.y, col.z, alpha)); //draw actions user->updateActionsVBO(action_vbo); } user_vbo.update(); action_vbo.update(); } if(!gGourceSettings.hide_bloom) { bloom_vbo.reset(); root->updateBloomVBO(bloom_vbo, dt); bloom_vbo.update(); } if(!gGourceSettings.hide_files) { file_vbo.reset(); root->updateFilesVBO(file_vbo, dt); file_vbo.update(); } } void Gource::drawFileShadows(float dt) { if(gGourceSettings.hide_files) return; glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if(!gGourceSettings.ffp) { shadow_shader->setSampler2D("tex", 0); shadow_shader->setFloat("shadow_strength", 0.5); shadow_shader->use(); glBindTexture(GL_TEXTURE_2D, gGourceSettings.file_graphic->textureid); glPushMatrix(); glTranslatef(2.0f, 2.0f, 0.0f); file_vbo.draw(); glPopMatrix(); glUseProgramObjectARB(0); } else { root->drawShadows(dt); } } void Gource::drawUserShadows(float dt) { if(gGourceSettings.hide_users) return; glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if(!gGourceSettings.ffp) { shadow_shader->setSampler2D("tex", 0); shadow_shader->setFloat("shadow_strength", 0.5); shadow_shader->use(); vec2 shadow_offset = vec2(2.0, 2.0) * gGourceSettings.user_scale; glPushMatrix(); glTranslatef(shadow_offset.x, shadow_offset.y, 0.0f); user_vbo.draw(); glPopMatrix(); glUseProgramObjectARB(0); } else { for(std::map::iterator it = users.begin(); it!=users.end(); it++) { it->second->drawShadow(dt); } } } void Gource::drawFiles(float dt) { if(gGourceSettings.hide_files) return; if(trace_debug) { glDisable(GL_TEXTURE_2D); } else { glEnable(GL_TEXTURE_2D); } glEnable(GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if(!gGourceSettings.ffp) { glBindTexture(GL_TEXTURE_2D, gGourceSettings.file_graphic->textureid); file_vbo.draw(); } else { root->drawFiles(dt); } } void Gource::drawUsers(float dt) { if(gGourceSettings.hide_users) return; if(trace_debug) { glDisable(GL_TEXTURE_2D); } else { glEnable(GL_TEXTURE_2D); } glEnable(GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); if(!gGourceSettings.ffp) { user_vbo.draw(); } else { for(std::map::iterator it = users.begin(); it!=users.end(); it++) { it->second->draw(dt); } } } void Gource::draw(float t, float dt) { display.mode2D(); drawBackground(dt); if(!commitlog) { loadingScreen(); return; } Frustum frustum(camera.getPos(), camera.getTarget(), camera.getUp(), camera.getFOV(), camera.getZNear(), camera.getZFar()); trace_time = SDL_GetTicks(); if(!gGourceSettings.hide_mouse && cursor.isVisible()) { mousetrace(dt); } else { if(hoverUser) { hoverUser->setMouseOver(false); hoverUser = 0; } if(hoverFile) { hoverFile->setMouseOver(false); hoverFile = 0; } } trace_time = SDL_GetTicks() - trace_time; glMatrixMode(GL_PROJECTION); glLoadIdentity(); camera.focus(); //check visibility root->checkFrustum(frustum); screen_project_time = SDL_GetTicks(); GLint viewport[4]; GLdouble modelview[16]; GLdouble projection[16]; glGetIntegerv( GL_VIEWPORT, viewport ); glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); root->calcScreenPos(viewport, modelview, projection); for(std::map::iterator it = users.begin(); it!=users.end(); it++) { it->second->calcScreenPos(viewport, modelview, projection); } //need to calc screen pos of selected file if hiding other //file names if(selectedFile!=0 && gGourceSettings.hide_filenames) { selectedFile->calcScreenPos(viewport, modelview, projection); } screen_project_time = SDL_GetTicks() - screen_project_time; //update file and user vbos update_vbos_time = SDL_GetTicks(); updateVBOs(dt); update_vbos_time = SDL_GetTicks() - update_vbos_time; //draw scene draw_scene_time = SDL_GetTicks(); drawScene(dt); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); draw_scene_time = SDL_GetTicks() - draw_scene_time; glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); text_time = text_update_time = SDL_GetTicks(); //switch to 2D, preserve current state display.push2D(); if(!gGourceSettings.ffp) { fontmanager.startBuffer(); } fontdirname.roundCoordinates(false); fontdirname.setColour(vec4(gGourceSettings.dir_colour, 1.0f)); root->drawNames(fontdirname); if(!(gGourceSettings.hide_usernames || gGourceSettings.hide_users)) { for(std::map::iterator it = users.begin(); it!=users.end(); it++) { RUser* user = it->second; if(!user->isSelected()) { user->drawName(); } } } text_update_time = SDL_GetTicks() - text_update_time; text_vbo_commit_time = 0; text_vbo_draw_time = 0; if(!gGourceSettings.ffp) { text_vbo_commit_time = SDL_GetTicks(); fontmanager.commitBuffer(); text_vbo_commit_time = SDL_GetTicks() - text_vbo_commit_time; text_vbo_draw_time = SDL_GetTicks(); text_shader->setSampler2D("tex", 0); text_shader->setFloat("shadow_strength", 0.7); text_shader->setFloat("texel_size", font_texel_size); text_shader->use(); fontmanager.drawBuffer(); glUseProgramObjectARB(0); text_vbo_draw_time = SDL_GetTicks() - text_vbo_draw_time; } //draw selected item names again so they are over the top if(selectedUser !=0) selectedUser->drawName(); if(selectedFile !=0) { selectedFile->drawName(); } //switch back display.pop2D(); text_time = SDL_GetTicks() - text_time; if(debug) { glDisable(GL_TEXTURE_2D); glLineWidth(2.0); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); track_users ? active_user_bounds.draw() : dir_bounds.draw(); } if(gGourceQuadTreeDebug) { glDisable(GL_TEXTURE_2D); glLineWidth(1.0); glColor4f(0.0f, 1.0f, 0.0f, 1.0f); dirNodeTree->outline(); glColor4f(0.0f, 1.0f, 1.0f, 1.0f); userTree->outline(); glColor4f(0.0f, 1.0f, 0.5f, 1.0f); userTree->outlineItems(); } glColor4f(1.0f, 1.0f, 1.0f, 1.0f); display.mode2D(); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); vec3 campos = camera.getPos(); if(logotex!=0) { glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glColor4f(1.0, 1.0, 1.0, 1.0); glBindTexture(GL_TEXTURE_2D, logotex->textureid); vec2 logopos = vec2(display.width, display.height) - vec2(logotex->w, logotex->h) - gGourceSettings.logo_offset; glPushMatrix(); glTranslatef(logopos.x, logopos.y, 0.0); glBegin(GL_QUADS); glTexCoord2f(0.0f,0.0f); glVertex2i(0, 0); glTexCoord2f(1.0f,0.0f); glVertex2i(logotex->w, 0); glTexCoord2f(1.0f,1.0f); glVertex2i(logotex->w, logotex->h); glTexCoord2f(0.0f,1.0f); glVertex2i(0, logotex->h); glEnd(); glPopMatrix(); } font.roundCoordinates(true); if(splash>0.0f) { int logowidth = fontlarge.getWidth("Gource"); int logoheight = 100 * gGourceSettings.font_scale; int cwidth = font.getWidth("Software Version Control Visualization"); int awidth = font.getWidth("(C) 2009 Andrew Caudwell"); vec2 corner(display.width/2 - logowidth/2 - 30.0f * gGourceSettings.font_scale, display.height/2 - 40 * gGourceSettings.font_scale); glDisable(GL_TEXTURE_2D); glColor4f(0.0f, 0.5f, 1.0f, splash * 0.015f); glBegin(GL_QUADS); glVertex2f(0.0f, corner.y); glVertex2f(0.0f, corner.y + logoheight); glVertex2f(display.width, corner.y + logoheight); glVertex2f(display.width, corner.y); glEnd(); glEnable(GL_TEXTURE_2D); fontlarge.setColour(vec4(1.0f)); fontlarge.draw(display.width/2 - logowidth/2,display.height/2 - 30 * gGourceSettings.font_scale, "Gource"); font.setColour(vec4(1.0f)); font.draw(display.width/2 - cwidth/2,display.height/2 + 10 * gGourceSettings.font_scale, "Software Version Control Visualization"); font.draw(display.width/2 - awidth/2,display.height/2 + 30 * gGourceSettings.font_scale, "(C) 2009 Andrew Caudwell"); } // text using the specified font goes here fontmedium.setColour(vec4(gGourceSettings.font_colour, 1.0f)); if(!gGourceSettings.hide_date) { fontmedium.draw(display.width/2 - date_x_offset, 20, displaydate); } if(!gGourceSettings.title.empty()) { fontmedium.alignTop(false); fontmedium.draw(10, display.height - 10, gGourceSettings.title); fontmedium.alignTop(true); } for(std::list::iterator it = active_captions.begin(); it!=active_captions.end(); it++) { RCaption* caption = *it; caption->draw(); } //file key file_key.draw(); file_key.setShow(gGourceSettings.show_key); //slider if(canSeek()) { slider.draw(dt); } //text box if(hoverFile && hoverFile != selectedFile) { std::string display_path = hoverFile->path; display_path.erase(0,1); textbox.setText(hoverFile->getName()); if(display_path.size()) textbox.addLine(display_path); textbox.setColour(hoverFile->getColour()); textbox.setPos(mousepos, true); textbox.draw(); } else if(hoverUser && hoverUser != selectedUser) { textbox.setText(hoverUser->getName()); textbox.setColour(hoverUser->getColour()); textbox.setPos(mousepos, true); textbox.draw(); } //debug info if(debug) { font.setColour(vec4(1.0f)); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); font.print(1,20, "FPS: %.2f", fps); font.print(1,40,"Days Per Second: %.2f", gGourceSettings.days_per_second); font.print(1,60,"Commit Queue: %d", commitqueue.size()); font.print(1,80,"Users: %d", users.size()); font.print(1,100,"Files: %d", files.size()); font.print(1,120,"Dirs: %d", gGourceDirMap.size()); font.print(1,140,"Log Position: %.4f", commitlog->getPercent()); font.print(1,160,"Camera: (%.2f, %.2f, %.2f)", campos.x, campos.y, campos.z); font.print(1,180,"Gravity: %.2f", gGourceForceGravity); font.print(1,200,"Update Tree: %u ms", update_dir_tree_time); font.print(1,220,"Update VBOs: %u ms", update_vbos_time); font.print(1,240,"Projection: %u ms", screen_project_time); font.print(1,260,"Draw Scene: %u ms", draw_scene_time); font.print(1,280," - Edges: %u ms", draw_edges_time); font.print(1,300," - Shadows: %u ms", draw_shadows_time); font.print(1,320," - Actions: %u ms", draw_actions_time); font.print(1,340," - Files: %u ms", draw_files_time); font.print(1,360," - Users: %u ms", draw_users_time); font.print(1,380," - Bloom: %u ms", draw_bloom_time); font.print(1,400,"Text: %u ms", text_time); font.print(1,420,"- Update: %u ms", text_update_time); font.print(1,440,"- VBO Commit: %u ms", text_vbo_commit_time); font.print(1,460,"- VBO Draw: %u ms", text_vbo_draw_time); font.print(1,480,"Mouse Trace: %u ms", trace_time); font.print(1,500,"Logic Time: %u ms", logic_time); font.print(1,520,"File Inner Loops: %d", gGourceFileInnerLoops); font.print(1,540,"User Inner Loops: %d", gGourceUserInnerLoops); font.print(1,560,"Dir Inner Loops: %d (QTree items = %d, nodes = %d, max node depth = %d)", gGourceDirNodeInnerLoops, dirNodeTree->item_count, dirNodeTree->node_count, dirNodeTree->max_node_depth); font.print(1,580,"Dir Bounds Ratio: %.2f, %.5f", dir_bounds.width() / dir_bounds.height(), rotation_remaining_angle); font.print(1,600,"String Hash Seed: %d", gStringHashSeed); if(!gGourceSettings.ffp) { font.print(1,620,"Text VBO: %d/%d vertices, %d texture changes", fontmanager.font_vbo.vertices(), fontmanager.font_vbo.capacity(), fontmanager.font_vbo.texture_changes()); font.print(1,640,"File VBO: %d/%d vertices, %d texture changes", file_vbo.vertices(), file_vbo.capacity(), file_vbo.texture_changes()); font.print(1,660,"User VBO: %d/%d vertices, %d texture changes", user_vbo.vertices(), user_vbo.capacity(), user_vbo.texture_changes()); font.print(1,680,"Action VBO: %d/%d vertices", action_vbo.vertices(), action_vbo.capacity()); font.print(1,700,"Bloom VBO: %d/%d vertices", bloom_vbo.vertices(), bloom_vbo.capacity()); font.print(1,720,"Edge VBO: %d/%d vertices", edge_vbo.vertices(), edge_vbo.capacity()); } if(selectedUser != 0) { } if(selectedFile != 0) { font.print(1,740,"%s: %d files (%d visible)", selectedFile->getDir()->getPath().c_str(), selectedFile->getDir()->fileCount(), selectedFile->getDir()->visibleFileCount()); } } mousemoved=false; mouseclicked=false; if(take_screenshot) { screenshot(); take_screenshot = false; } if(message_timer > 0.0f) { font.setColour(vec4(1.0f)); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); font.draw(1, 3, message); } } gource-0.56/src/core/0000775002342600234260000000000015152463042014313 5ustar andrewcandrewcgource-0.56/src/core/texture.h0000644002342600234260000000626615152463042016174 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef TEXTURE_H #define TEXTURE_H #include "SDL_image.h" #include "resource.h" #include "gl.h" #include class TextureException : public ResourceException { public: TextureException(std::string& texture_file) : ResourceException(texture_file) {} }; class TextureResource : public Resource { bool mipmaps; GLint wrap; GLint min_filter; GLint mag_filter; std::string filename; GLenum colourFormat(SDL_Surface* surface); public: int w, h; GLenum target; GLenum format; GLuint textureid; GLubyte* data; TextureResource(); TextureResource(int width, int height, bool mipmaps, GLint wrap, GLenum format, GLubyte* data = 0); TextureResource(const std::string& filename, bool mipmaps, GLint wrap, bool external); void setWrapStyle(GLint wrap); void setFiltering(GLint min_filter, GLint mag_filter); void setDefaultFiltering(); void bind(); void createTexture(); void reload(); void load(bool reload = false); void unload(); ~TextureResource(); }; class TextureManager : public ResourceManager { int resource_seq; void addResource(TextureResource* r); public: bool trilinear; TextureManager(); TextureResource* grabFile(const std::string& filename, bool mipmaps = true, GLint wrap = GL_CLAMP_TO_EDGE); TextureResource* grab(const std::string& filename, bool mipmaps = true, GLint wrap = GL_CLAMP_TO_EDGE, bool external_file = false); TextureResource* create(int width, int height, bool mipmaps, GLint wrap, GLenum format, GLubyte* data = 0); TextureResource* create(GLenum target = GL_TEXTURE_2D); void unload(); void reload(); }; extern TextureManager texturemanager; #endif gource-0.56/src/core/seeklog.h0000664002342600234260000000550315152463042016120 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SEEK_LOG_H #define SEEK_LOG_H #include "display.h" #include "logger.h" #include #include #include #include class BaseLog { protected: std::istream* stream; public: virtual ~BaseLog() {}; virtual bool getNextLine(std::string& line) { return false; }; virtual bool isFinished() { return false; }; }; class StreamLog : public BaseLog { bool fcntl_fail; #ifdef _WIN32 void* stdin_handle; #endif public: StreamLog(); ~StreamLog(); bool getNextLine(std::string& line); bool isFinished(); }; class SeekLogException : public std::exception { protected: std::string filename; public: SeekLogException(std::string& filename) : filename(filename) {} virtual ~SeekLogException() throw () {}; virtual const char* what() const throw() { return filename.c_str(); } }; class SeekLog : public BaseLog { std::string logfile; long long file_size; float current_percent; bool readFully(); public: SeekLog(std::string logfile); ~SeekLog(); void setPointer(std::streampos pointer); std::streampos getPointer(); void seekTo(float percent); bool getNextLine(std::string& line); bool getNextLineAt(std::string& line, float percent); float getPercent(); bool isFinished(); }; extern long long gSeekLogMaxBufferSize; #endif gource-0.56/src/core/regex.cpp0000644002342600234260000001375115152463042016136 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "regex.h" Regex::Regex(std::string regex, bool test) { int errornumber; PCRE2_SIZE erroroffset; re = pcre2_compile( (PCRE2_SPTR) regex.c_str(), regex.size(), 0, &errornumber, &erroroffset, NULL ); if(!re) { valid = false; if(!test) { throw RegexCompilationException(regex); } } else { valid = true; } } Regex::Regex(const Regex& regex) { if(regex.isValid()) { re = pcre2_code_copy(regex.re); valid = true; } else { re = 0; valid = false; } } Regex::~Regex() { if(re != 0) pcre2_code_free(re); } bool Regex::isValid() const { return valid; } bool Regex::replace(std::string& str, const std::string& replacement_str) { int offset = replaceOffset(str, replacement_str, 0); return (offset != -1); } bool Regex::replaceAll(std::string& str, const std::string& replacement_str) { int offset = -1; while((offset = replaceOffset(str, replacement_str, offset+1)) != -1 && offset < str.size()); return (offset != -1); } int Regex::replaceOffset(std::string& str, const std::string& replacement_str, int offset) { pcre2_match_data* match_data = pcre2_match_data_create_from_pattern(re, NULL); int rc = pcre2_match( re, (PCRE2_SPTR) str.c_str(), str.size(), offset, 0, match_data, NULL ); //failed match if(rc<1) { pcre2_match_data_free(match_data); return -1; } PCRE2_SIZE* ovector = pcre2_get_ovector_pointer(match_data); // replace matched section of string std::string new_str = str; new_str.replace(ovector[0], ovector[1]-ovector[0], replacement_str); size_t end_offset = ovector[0] + replacement_str.size(); for (int i = 1; i < rc; i++) { int match_start = ovector[2*i]; int match_end = ovector[2*i+1]; std::string matched_str; if(match_start != -1) { matched_str = std::string(str, match_start, match_end-match_start); } // check if 'str' contains $i, if it does, replace with match string size_t string_size = new_str.size(); for(size_t j=0; j* results) { if(results != 0) results->clear(); int offset = matchOffset(str, results, 0); return offset != -1; } bool Regex::matchAll(const std::string& str, std::vector* results) { int offset = 0; int match_count = 0; if(results != 0) results->clear(); int str_size = str.size(); while((offset = matchOffset(str, results, offset)) != -1) { match_count++; if(offset >= str_size) break; } return match_count > 0; } int Regex::matchOffset(const std::string& str, std::vector* results, int offset) { if(offset >= str.size()) return -1; pcre2_match_data* match_data = pcre2_match_data_create_from_pattern(re, NULL); int rc = pcre2_match( re, // To allow ^ to match the start of the remaining string // offset the string before passing it (PCRE2_SPTR)(str.c_str() + offset), str.size() - offset, 0, 0, match_data, NULL ); //failed match if(rc < 1) { pcre2_match_data_free(match_data); return -1; } PCRE2_SIZE* ovector = pcre2_get_ovector_pointer(match_data); if(results != 0) { for (int i = 1; i < rc; i++) { int match_start = ovector[2*i]; int match_end = ovector[2*i+1]; // insert a empty string for non-matching optional regex if(match_start == -1) { results->push_back(std::string("")); } else { std::string match(str, match_start+offset, match_end-match_start); results->push_back(match); } } } int result_offset = ovector[1] + offset; pcre2_match_data_free(match_data); return result_offset; } gource-0.56/src/core/ppm.cpp0000644002342600234260000001061615152463042015615 0ustar andrewcandrewc/* Copyright (C) 2009 Johannes Schindelin (johannes.schindelin@gmx.de) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "ppm.h" #include "display.h" #include "sdlapp.h" #ifdef _WIN32 #include #include #endif extern "C" { static int dumper_thread(void *arg) { FrameExporter *e = static_cast(arg); e->dumpThr(); return 0; } }; // FrameExporter FrameExporter::FrameExporter() { //this now assumes the display is setup //before the frame exporter is created //(which seems reasonable) rowstride = display.width * 3; pixels1 = new char[display.height * rowstride]; pixels2 = new char[display.height * rowstride]; pixels_out = new char[display.height * rowstride]; pixels_shared_ptr = 0; dumper_thread_state = FRAME_EXPORTER_WAIT; cond = SDL_CreateCond(); mutex = SDL_CreateMutex(); #if SDL_VERSION_ATLEAST(2,0,0) thread = SDL_CreateThread( dumper_thread, "frame_exporter", this ); #else thread = SDL_CreateThread( dumper_thread, this ); #endif } FrameExporter::~FrameExporter() { stop(); SDL_DestroyCond(cond); SDL_DestroyMutex(mutex); pixels_shared_ptr = 0; delete[] pixels1; delete[] pixels2; delete[] pixels_out; } void FrameExporter::stop() { if(!thread) return; if(dumper_thread_state == FRAME_EXPORTER_STOPPED || dumper_thread_state == FRAME_EXPORTER_EXIT) return; SDL_mutexP(mutex); dumper_thread_state = FRAME_EXPORTER_EXIT; SDL_CondSignal(cond); SDL_mutexV(mutex); SDL_WaitThread(thread, 0); thread = 0; } void FrameExporter::dump() { display.mode2D(); glEnable(GL_TEXTURE_2D); glDisable(GL_BLEND); char* next_pixel_ptr = (pixels_shared_ptr == pixels1) ? pixels2 : pixels1; // copy pixels - now the right way up glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPixels(0, 0, display.width, display.height, GL_RGB, GL_UNSIGNED_BYTE, next_pixel_ptr); // wait for lock before changing the pointer to point to our new buffer SDL_mutexP(mutex); //flip buffer we are pointing at pixels_shared_ptr = next_pixel_ptr; dumper_thread_state = FRAME_EXPORTER_DUMP; SDL_CondSignal(cond); SDL_mutexV(mutex); } void FrameExporter::dumpThr() { SDL_mutexP(mutex); while(dumper_thread_state != FRAME_EXPORTER_EXIT) { dumper_thread_state = FRAME_EXPORTER_WAIT; while (dumper_thread_state == FRAME_EXPORTER_WAIT) { SDL_CondWait(cond, mutex); } if (dumper_thread_state == FRAME_EXPORTER_EXIT) break; if (pixels_shared_ptr != 0) { //invert image for(int y=0;yfail()) { delete output; throw PPMExporterException(outputfile); } } //write header sprintf(ppmheader, "P6\n%d %d 255\n", display.width, display.height); } PPMExporter::~PPMExporter() { stop(); if(filename.size()>0) ((std::fstream*)output)->close(); } void PPMExporter::dumpImpl() { *output << ppmheader; output->write(pixels_out, rowstride * display.height); } gource-0.56/src/core/quadtree.cpp0000644002342600234260000002762415152463042016642 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "quadtree.h" // QUAD NODE // allow more items in node if // - has no children and one of any of: // * maximum depth reached // * item count is less than desired capacity bool QuadNode::allowMoreItems() { return (children.empty() && (depth >= tree->max_node_depth || items.size() < tree->max_node_items ) ); } void QuadNode::addItem(QuadItem* item) { if(allowMoreItems()) { tree->item_count++; item->node_count++; items.push_back(item); return; } if(!children.empty()) { addToChild(item); return; } vec2 average = bounds.centre(); vec2 middle = average - bounds.min; vec2 relmax = bounds.max-bounds.min; Bounds2D newbounds; children.reserve(4); //top left newbounds = Bounds2D( bounds.min + vec2(0.0, 0.0), bounds.min + middle ); children.push_back(new QuadNode(tree, this, newbounds, depth)); //top right newbounds = Bounds2D( bounds.min + vec2(middle.x, 0.0), bounds.min + vec2(relmax.x,middle.y) ); children.push_back(new QuadNode(tree, this, newbounds, depth)); //bottom left newbounds = Bounds2D( bounds.min + vec2(0.0, middle.y), bounds.min + vec2(middle.x,relmax.y) ); children.push_back(new QuadNode(tree, this, newbounds, depth)); //bottom right newbounds = Bounds2D( bounds.min + middle, bounds.max ); children.push_back(new QuadNode(tree, this, newbounds, depth)); for(std::list::iterator it = items.begin(); it != items.end(); it++) { QuadItem* oi = *it; tree->item_count--; oi->node_count--; addToChild(oi); } items.clear(); addToChild(item); } void QuadNode::addToChild(QuadItem* item) { if(children.empty()) return; for(int i=0;i<4;i++) { if(children[i]->bounds.overlaps(item->quadItemBounds)) { children[i]->addItem(item); } } } void QuadNode::getLeavesInFrustum(std::set& nodeset, Frustum& frustum) { if(!items.empty()) { nodeset.insert(this); return; } if(children.empty()) return; //for each 4 corners for(int i=0;i<4;i++) { if(!children[i]->empty() && frustum.intersects(children[i]->bounds)) { children[i]->getLeavesInFrustum(nodeset, frustum); } } return; } int QuadNode::getItemsInFrustum(std::set& itemset, Frustum& frustum) { if(!items.empty()) { int items_added = 0; for(std::list::iterator it = items.begin(); it != items.end(); it++) { QuadItem* oi = (*it); if(oi!=0) { itemset.insert(oi); items_added++; } } return items_added; } if(children.empty()) return 0; int count = 0; //for each 4 corners for(int i=0;i<4;i++) { if(!children[i]->empty() && frustum.intersects(children[i]->bounds)) { count += children[i]->getItemsInFrustum(itemset, frustum); } } return count; } int QuadNode::getItemsInBounds(std::set& itemset, Bounds2D& bounds) const{ if(!items.empty()) { int items_added = 0; for(std::list::const_iterator it = items.begin(); it != items.end(); it++) { QuadItem* oi = (*it); itemset.insert(oi); items_added++; } return items_added; } if(children.empty()) return 0; int count = 0; //for each 4 corners for(int i=0;i<4;i++) { if(!children[i]->empty() && bounds.overlaps(children[i]->bounds)) { count += children[i]->getItemsInBounds(itemset, bounds); } } return count; } int QuadNode::getItemsAt(std::set& itemset, vec2 pos) { if(!items.empty()) { int items_added = 0; for(std::list::iterator it = items.begin(); it != items.end(); it++) { QuadItem* oi = (*it); if(oi!=0) { itemset.insert(oi); items_added++; } } return items_added; } if(children.empty()) return 0; int index = getChildIndex(pos); if(index == -1) return 0; return children[index]->getItemsAt(itemset, pos); } void QuadNode::visitLeavesInFrustum(const Frustum& frustum, VisitFunctor & visit){ if(!items.empty()) { visit(this); }else if(!children.empty()){ //visit each corner for(int i=0;i<4;i++) if(!children[i]->empty() && frustum.intersects(children[i]->bounds)) children[i]->visitLeavesInFrustum(frustum, visit); } } void QuadNode::visitItemsInFrustum(const Frustum & frustum, VisitFunctor & visit){ if(!items.empty()) { for(std::list::const_iterator it = items.begin(); it != items.end(); it++) visit(*it); }else if(!children.empty()){ //visit each corner for(int i=0;i<4;i++) if(!children[i]->empty() && frustum.intersects(children[i]->bounds)) children[i]->visitItemsInFrustum(frustum, visit); } } void QuadNode::visitItemsInBounds(const Bounds2D & bounds, VisitFunctor & visit){ if(!items.empty()) { for(std::list::const_iterator it = items.begin(); it != items.end(); it++) visit(*it); }else if(!children.empty()){ //visit each corner for(int i=0;i<4;i++) if(!children[i]->empty() && bounds.overlaps(children[i]->bounds)) children[i]->visitItemsInBounds(bounds, visit); } } void QuadNode::visitItemsAt(const vec2 & pos, VisitFunctor & visit){ if(!items.empty()){ for(std::list::const_iterator it = items.begin(); it != items.end(); it++) if(*it) visit(*it); }else if(!children.empty()){ int index = getChildIndex(pos); if(index != -1) children[index]->visitItemsAt(pos, visit); } } bool QuadNode::empty() { return (items.empty() && children.empty()); } int QuadNode::getChildIndex(const vec2 & pos) const{ if(children.empty()) return -1; for(int i=0;i<4;i++) { if(children[i]->bounds.contains(pos)) { return i; } } return -1; } QuadNode::QuadNode(QuadTree* tree, QuadNode* parent, Bounds2D bounds, int parent_depth) { this->parent = parent; this->tree = tree; this->bounds = bounds; this->depth = parent_depth + 1; listid = 0; tree->node_count++; } QuadNode::~QuadNode() { if(listid) glDeleteLists(listid, 1); if(!children.empty()) { for(int i=0;i<4;i++) { delete children[i]; } } tree->item_count -= items.size(); items.clear(); tree->node_count--; } int QuadNode::usedChildren() { int populated = 0; if(!children.empty()) { for(int i=0;i<4;i++) { if(!children[i]->empty()) populated++; } } return populated; } int QuadNode::draw(Frustum& frustum) { if(listid && !items.empty()) { glPushMatrix(); glCallList(listid); glPopMatrix(); return 1; } int drawn = 0; if(!children.empty()) { for(int i=0;i<4;i++) { QuadNode* c = children[i]; if(!c->empty() && frustum.intersects(c->bounds)) { drawn += c->draw(frustum); } } } return drawn; } void QuadNode::generateLists() { if(!items.empty()) { if(!listid) listid = glGenLists(1); glNewList(listid, GL_COMPILE); for(std::list::iterator it = items.begin(); it != items.end(); it++) { QuadItem* oi = (*it); oi->drawQuadItem(); } glEndList(); return; } if(!children.empty()) { for(int i=0;i<4;i++) { QuadNode* c = children[i]; if(!c->empty()) { c->generateLists(); } } } } void QuadNode::outline() { //bounds.draw(); if(!items.empty()) { bounds.draw(); /*glBegin(GL_LINES); glVertex2fv(bounds.min); glVertex2fv(bounds.max); glEnd();*/ } if(children.empty()) return; for(int i=0;i<4;i++) { QuadNode* c = children[i]; if(c!=0) { c->outline(); } } } void QuadNode::outlineItems() { if(items.empty() && children.empty()) return; for(std::list::iterator it = items.begin(); it != items.end(); it++) { QuadItem* oi = (*it); oi->quadItemBounds.draw(); } if(children.empty()) return; for(int i=0;i<4;i++) { QuadNode* c = children[i]; if(c!=0) { c->outlineItems(); } } } //Quad TREE QuadTree::QuadTree(Bounds2D bounds, int max_node_depth, int max_node_items) { item_count = 0; node_count = 0; unique_item_count = 0; this->max_node_depth = max_node_depth; this->max_node_items = max_node_items; root = new QuadNode(this, 0, bounds, 0); } QuadTree::~QuadTree() { delete root; } int QuadTree::getItemsAt(std::set& itemset, vec2 pos) { int return_count = root->getItemsAt(itemset, pos); return return_count; } int QuadTree::getItemsInFrustum(std::set& itemset, Frustum& frustum) { return root->getItemsInFrustum(itemset, frustum); } int QuadTree::getItemsInBounds(std::set& itemset, Bounds2D& bounds) const{ return root->getItemsInBounds(itemset, bounds); } void QuadTree::getLeavesInFrustum(std::set& nodeset, Frustum& frustum) { return root->getLeavesInFrustum(nodeset, frustum); } void QuadTree::visitItemsAt(const vec2 & pos, VisitFunctor & visit){ return root->visitItemsAt(pos, visit); } void QuadTree::visitItemsInFrustum(const Frustum & frustum, VisitFunctor & visit){ root->visitItemsInFrustum(frustum, visit); } void QuadTree::visitItemsInBounds(const Bounds2D & bounds, VisitFunctor & visit){ root->visitItemsInBounds(bounds, visit); } void QuadTree::visitLeavesInFrustum(const Frustum& frustum, VisitFunctor & visit){ root->visitLeavesInFrustum(frustum, visit); } void QuadTree::addItem(QuadItem* item) { item->node_count = 0; root->addItem(item); unique_item_count++; } int QuadTree::drawNodesInFrustum(Frustum& frustum) { return root->draw(frustum); } void QuadTree::generateLists() { root->generateLists(); } void QuadTree::outline() { root->outline(); } void QuadTree::outlineItems() { root->outlineItems(); } gource-0.56/src/core/png_writer.h0000644002342600234260000000550715152463042016651 0ustar andrewcandrewc/* Copyright (c) 2013 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef PNG_WRITER_H #define PNG_WRITER_H #include "SDL_thread.h" #include #include class PNGWriter { protected: std::ostream* out; size_t components; void init(); public: PNGWriter(int components = 3); bool open(const std::string& filename); void close(); void setOutputStream(std::ostream* out); void screenshot(const std::string& filename); void capture(std::vector& buffer); void writePNG(std::vector& buffer); }; enum png_exporter_state { PNG_EXPORTER_WAIT, PNG_EXPORTER_WRITE, PNG_EXPORTER_EXIT, PNG_EXPORTER_STOPPED }; class PNGExporter { protected: PNGWriter writer; std::vector* buffer_shared_ptr; std::vector buffer1; std::vector buffer2; SDL_cond* cond; SDL_mutex* mutex; SDL_Thread* thread; int thread_state; std::string filename; static int startThread(void *exporter); public: PNGExporter(const std::string& filename); ~PNGExporter(); void run(); void stop(); void capture(); }; class PNGExporterException : public std::exception { protected: std::string filename; public: PNGExporterException(const std::string& filename) : filename(filename) {}; virtual ~PNGExporterException() throw () {}; virtual const char* what() const throw() { return filename.c_str(); }; }; #endif gource-0.56/src/core/frustum.cpp0000644002342600234260000001250315152463042016523 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "frustum.h" // Lighthouse 3D Frustum tutorial: // http://www.lighthouse3d.com/opengl/viewfrustum/index.php?gasource Frustum::Frustum() { } Frustum::Frustum(const vec3& source, const vec3& target, const vec3& up, float fov, float near_distance, float far_distance) { update(source, target, up, fov, near_distance, far_distance); } void Frustum::update(const vec3& source, const vec3& target, const vec3& up, float fov, float near_distance, float far_distance) { updatePerspective(fov, near_distance, far_distance); updateView(source, target, up); } void Frustum::updatePerspective(float fov, float near_distance, float far_distance) { this->near_distance = near_distance; this->far_distance = far_distance; view_ratio = (float) display.width / (float) display.height; float toa = (float) tan(fov * 0.5 * DEGREES_TO_RADIANS); near_half_height = near_distance * toa; near_half_width = near_half_height * view_ratio; far_half_height = far_distance * toa; far_half_width = far_half_height * view_ratio; } void Frustum::updateView(const vec3& source, const vec3& target, const vec3& up) { vec3 view_ray = normalise(target - source); vec3 horiz_normal = normalise(glm::cross(view_ray,up)); vec3 vert_normal = glm::cross(horiz_normal, view_ray); //calculate the positions of the 8 points that make up //the viewing frustum and then use them to create the 6 planes vec3 near_centre = source + view_ray * near_distance; vec3 far_centre = source + view_ray * far_distance; vec3 near_horiz_offset = horiz_normal * near_half_width; vec3 near_vert_offset = vert_normal * near_half_height; near_top_left = near_centre + near_vert_offset - near_horiz_offset; near_top_right = near_centre + near_vert_offset + near_horiz_offset; near_bottom_left = near_centre - near_vert_offset - near_horiz_offset; near_bottom_right = near_centre - near_vert_offset + near_horiz_offset; vec3 far_horiz_offset = horiz_normal * far_half_width; vec3 far_vert_offset = vert_normal * far_half_height; far_top_left = far_centre + far_vert_offset - far_horiz_offset; far_top_right = far_centre + far_vert_offset + far_horiz_offset; far_bottom_left = far_centre - far_vert_offset - far_horiz_offset; far_bottom_right = far_centre - far_vert_offset + far_horiz_offset; //top planes[0] = Plane(near_top_right, near_top_left, far_top_left); //bottom planes[1] = Plane(near_bottom_left, near_bottom_right, far_bottom_right); //left planes[2] = Plane(near_top_left, near_bottom_left, far_bottom_left); //right planes[3] = Plane(near_bottom_right, near_top_right, far_bottom_right); //near planes[4] = Plane(near_top_left, near_top_right, near_bottom_right); //far planes[5] = Plane(far_top_right, far_top_left, far_bottom_left); } bool Frustum::contains(const vec3& p) const { for(int i=0; i < 6; i++) { float dist = planes[i].distance(p); if(dist < 0) return false; } return true; } bool Frustum::intersects(const Bounds3D& bounds) const { vec3 corner; for(int i=0; i<6; i++) { corner.x = planes[i].normal.x > 0.0 ? bounds.max.x : bounds.min.x; corner.y = planes[i].normal.y > 0.0 ? bounds.max.y : bounds.min.y; corner.z = planes[i].normal.z > 0.0 ? bounds.max.z : bounds.min.z; if (planes[i].distance(corner) < 0.0) return false; } return true; } bool Frustum::intersects(const Bounds2D& bounds, float z) const { vec3 corner; for(int i=0; i<6; i++) { corner.x = planes[i].normal.x > 0.0 ? bounds.max.x : bounds.min.x; corner.y = planes[i].normal.y > 0.0 ? bounds.max.y : bounds.min.y; corner.z = z; if (planes[i].distance(corner) < 0.0) return false; } return true; } gource-0.56/src/core/plane.h0000644002342600234260000000334415152463042015565 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef PLANE_H #define PLANE_H #include "vectors.h" class Plane { public: vec3 normal; vec3 point; float d; Plane(); Plane(const vec3 & v1, const vec3 & v2, const vec3 & v3); float distance(const vec3 & p) const; }; #endif gource-0.56/src/core/logger.h0000644002342600234260000000743615152463042015753 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef LOGGER_H #define LOGGER_H #include #include #include #include enum logger_level { LOG_LEVEL_OFF, LOG_LEVEL_ERROR, LOG_LEVEL_CONSOLE, LOG_LEVEL_INFO, LOG_LEVEL_SCRIPT, LOG_LEVEL_DEBUG, LOG_LEVEL_WARN, LOG_LEVEL_PEDANTIC }; class LoggerMessage { public: LoggerMessage(int level, const std::string& message); int level; std::string message; }; class Logger { protected: std::deque history; int hist_capacity; FILE* stream; int level; static Logger* default_logger; int message_count; bool auto_flush; public: static Logger* getDefault(); const std::deque& getHistory() const; void setLevel(int level) { this->level = level; }; int getLevel() const { return level; } int getMessageCount(); void setHistoryCapacity(int hist_capacity); void setAutoFlush(bool auto_flush); Logger(int level, FILE* stream, int history_capacity = 0); void init(int level, FILE* stream, int history_capacity); void message(int level, const std::string& message); }; void warnLog(const char *args, ...); void debugLog(const char *args, ...); void infoLog(const char *args, ...); void errorLog(const char *args, ...); void consoleLog(const char *args, ...); void scriptLog(const char *args, ...); void pedanticLog(const char *args, ...); class LoggerStringStream { protected: Logger* logger; std::ostringstream* ss; logger_level log_level; int count; public: LoggerStringStream(logger_level level) : ss(nullptr), log_level(level), count(0) { logger = Logger::getDefault(); } ~LoggerStringStream() { if(logger && ss != nullptr && count > 0) { logger->message(log_level, ss->str()); } delete ss; } template LoggerStringStream& operator<<(const T& value) { if(logger != nullptr && logger->getLevel() >= log_level) { if(!ss) ss = new std::ostringstream(); if(count > 0) { *ss << " "; } *ss << value; count++; } return *this; } }; LoggerStringStream WarnLog(); LoggerStringStream DebugLog(); LoggerStringStream InfoLog(); LoggerStringStream ErrorLog(); LoggerStringStream ConsoleLog(); LoggerStringStream ScriptLog(); #endif gource-0.56/src/core/fxfont.h0000644002342600234260000001623015152463042015770 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Portions of this code are derivived from FTGL (FTTextureFont.cpp) FTGL - OpenGL font library Copyright (c) 2001-2004 Henry Maddocks Copyright (c) 2008 Sam Hocevar Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef FX_FONT_H #define FX_FONT_H #include "display.h" #include "vectors.h" #include "logger.h" #include "resource.h" #include "texture.h" #include "vbo.h" #include #include #include #include #include FT_FREETYPE_H #include FT_GLYPH_H #include "ftgl/FTUnicode.h" class FXFontException : public ResourceException { public: FXFontException(const std::string & font_file) : ResourceException(font_file) {} }; class FXGlyph; class FXGlyphSet; class FXGlyphPage { GLubyte* texture_data; bool needs_update; int page_width; int page_height; public: TextureResource* texture; FXGlyphPage(int page_width, int page_height); ~FXGlyphPage(); bool addGlyph(FXGlyph* glyph); void updateTexture(); int cursor_x, cursor_y; int max_glyph_height; }; class FXGlyph { unsigned int chr; vec2 dims; vec2 corner; vec2 advance; int height; public: vec2 vertex_positions[4]; vec2 vertex_texcoords[4]; FXGlyphPage* page; vec4 texcoords; FXGlyphSet* set; FT_Glyph ftglyph; FT_BitmapGlyph glyph_bitmap; FXGlyph(FXGlyphSet* set, unsigned int chr); ~FXGlyph(); const vec2& getAdvance() const { return advance; }; const vec2& getCorner() const { return corner; }; const vec2& getDimensions() const { return dims; }; int getHeight() const { return height; }; void setPage(FXGlyphPage* page, const vec4& texcoords); void drawToVBO(quadbuf& buffer, const vec2& offset, const vec4& colour) const; void draw(const vec2& pos) const; }; class FXGlyphSet { FT_Library freetype; FT_Face ft_face; FT_Int32 ft_flags; std::string fontfile; int max_height; int size; int dpi; float tab_width; vec2 unit_scale; bool pre_caching; std::vector pages; std::map glyphs; void init(); FXGlyph* getGlyph(unsigned int chr); public: FXGlyphSet(FT_Library freetype, const std::string& fontfile, int size, int dpi, FT_Int32 ft_flags); ~FXGlyphSet(); void precache(const std::string& chars); FT_Face getFTFace() const { return ft_face; } FT_Int32 getFlags() const { return ft_flags; } const std::string& getFontFile() const { return fontfile; } float getWidth(const std::string& text); float getAscender() const; float getDescender() const; float getMaxWidth() const; float getMaxHeight() const; int getSize() const { return size; }; void drawToVBO(vec2& cursor, const std::string& text, const vec4& colour); void draw(const std::string& text); void drawPages(); }; class FXFont { FXGlyphSet* glyphset; std::string fontfile; bool shadow; bool round; float shadow_strength; vec2 shadow_offset; vec4 shadow_colour; vec4 colour; bool align_right, align_top; void render(float x, float y, const std::string& text, const vec4& colour) const; void init(); public: FXFont(); FXFont(FXGlyphSet* glyphset); bool initialized() const { return (glyphset!=0); } void print(float x, float y, const char *str, ...) const; void draw(float x, float y, const std::string& text) const; float getWidth(const std::string& text) const; float getHeight() const; float getAscender() const; float getDescender() const; void alignTop(bool top); void alignRight(bool right); void roundCoordinates(bool round); const std::string& getFontFile() const; float getMaxWidth() const; float getMaxHeight() const; int getFontSize() const; bool dropShadow() const { return shadow; }; void dropShadow(bool shadow); void shadowStrength(float s); void shadowOffset(float x, float y); void setColour(const vec4& colour); void setAlpha(float alpha); void drawGlyphes(); }; typedef std::map fontSizeMap; class FXFontManager { std::string font_dir; std::map fonts; FT_Library library; public: quadbuf font_vbo; FXFontManager(); bool use_vbo; void setDir(std::string font_dir); void init(); void unload(); void reload(); void destroy(); void purge(); void startBuffer(); void commitBuffer(); void drawBuffer(); FXFont grab(std::string font_file, int size, int dpi = 72, FT_Int32 ft_flags = FT_LOAD_DEFAULT); }; extern FXFontManager fontmanager; #endif gource-0.56/src/core/tga.h0000644002342600234260000000623615152463042015244 0ustar andrewcandrewc/* Copyright (c) 2012 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef TGA_WRITER_H #define TGA_WRITER_H #include "SDL_thread.h" #include #include #include #include class TGAWriter { protected: bool rle; size_t components; size_t rle_count; size_t raw_count; std::ostream* out; void writeHeader(); inline void writeRLE(int pixel_count, const char* pixel); inline void writeRaw(std::vector& buffer, int start, int pixel_count); void writeScanlines(std::vector& buffer, int width, int height); void init(); public: TGAWriter(int components = 3); bool open(const std::string& filename); void close(); void setOutputStream(std::ostream* out); void screenshot(const std::string& filename); void capture(std::vector& buffer); void writeTGA(std::vector& buffer); }; enum tga_exporter_state { TGA_EXPORTER_WAIT, TGA_EXPORTER_WRITE, TGA_EXPORTER_EXIT, TGA_EXPORTER_STOPPED }; class TGAExporter { protected: TGAWriter writer; std::vector* buffer_shared_ptr; std::vector buffer1; std::vector buffer2; SDL_cond* cond; SDL_mutex* mutex; SDL_Thread* thread; int thread_state; std::string filename; static int startThread(void *exporter); public: TGAExporter(const std::string& filename); ~TGAExporter(); void run(); void stop(); void capture(); }; class TGAExporterException : public std::exception { protected: std::string filename; public: TGAExporterException(const std::string& filename) : filename(filename) {}; virtual ~TGAExporterException() throw () {}; virtual const char* what() const throw() { return filename.c_str(); }; }; #endif gource-0.56/src/core/vectors.h0000644002342600234260000000606415152463042016155 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef VECTORS_H #define VECTORS_H #define GLM_FORCE_RADIANS // the following are required for compatibility with GLM 0.9.9 #define GLM_FORCE_CTOR_INIT #define GLM_ENABLE_EXPERIMENTAL #include #include #include #include #include using glm::vec2; using glm::vec3; using glm::vec4; using glm::mat3; using glm::mat4; vec2 rotate_vec2(const vec2& v, float s, float c); vec2 normalise(const vec2& v); vec3 normalise(const vec3& v); vec4 normalise(const vec4& v); class lerp2 : public glm::vec2 { public: vec2 p; vec2 l; lerp2() : vec2(), p(), l() { } const lerp2& snap() { p = *this; return *this; } static vec2 lerp(const vec2& a, const vec2& b, float n) { return a + (b - a) * n; } const vec2& lerp(float n) { l = p + (*this - p) * n; return l; } const lerp2& operator= (const vec2& vec) { this->x = vec.x; this->y = vec.y; return *this; } }; class lerp3 : public vec3 { public: vec3 p; vec3 l; lerp3() : vec3(), p(), l() { } const lerp3& snap() { p = *this; return *this; } static vec3 lerp(const vec3& a, const vec3& b, float n) { return a + (b - a) * n; } const vec3& lerp(float n) { l = p + (*this - p) * n; return l; } const lerp3& operator= (const vec3& vec) { this->x = vec.x; this->y = vec.y; this->z = vec.z; return *this; } }; #endif gource-0.56/src/core/ppm.h0000644002342600234260000000372615152463042015266 0ustar andrewcandrewc/* Copyright (C) 2009 Johannes Schindelin (johannes.schindelin@gmx.de) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef PPM_FRAME_EXPORTER_H #define PPM_FRAME_EXPORTER_H #include #include #include #include #include #include "SDL.h" #include "gl.h" enum { FRAME_EXPORTER_WAIT, FRAME_EXPORTER_DUMP, FRAME_EXPORTER_EXIT, FRAME_EXPORTER_STOPPED }; class FrameExporter { protected: char* pixels1; char* pixels2; char* pixels_out; char* pixels_shared_ptr; size_t rowstride; GLuint screentex; SDL_Thread* thread; SDL_mutex* mutex; SDL_cond* cond; int dumper_thread_state; public: FrameExporter(); virtual ~FrameExporter(); void stop(); void dump(); void dumpThr(); virtual void dumpImpl() {}; }; class PPMExporterException : public std::exception { protected: std::string filename; public: PPMExporterException(std::string& filename) : filename(filename) {} virtual ~PPMExporterException() throw () {}; virtual const char* what() const throw() { return filename.c_str(); } }; class PPMExporter : public FrameExporter { protected: std::ostream* output; std::string filename; char ppmheader[1024]; public: PPMExporter(std::string outputfile); virtual ~PPMExporter(); virtual void dumpImpl(); }; #endif gource-0.56/src/core/timer.cpp0000644002342600234260000000310315152463042016132 0ustar andrewcandrewc#include "timer.h" // GLTimer GLTimer::GLTimer() { query_id = 0; query_value = 0; query_start = 0; query_stop = 0; cpu_time = 0; } GLTimer::GLTimer(const std::string& name) : name(name) { query_id = 0; query_value = 0; query_start = 0; query_stop = 0; cpu_time = 0; } GLTimer::~GLTimer() { unload(); } void GLTimer::unload() { query_value = 0; if(query_id) { glDeleteQueries(1, &query_id); query_id = 0; } query_start = query_stop = 0; } void GLTimer::start() { if(query_start > 0) return; query_start = SDL_GetTicks(); if(!query_id) glGenQueries( 1, &query_id ); glBeginQuery(GL_TIME_ELAPSED, query_id); query_stop = 0; } void GLTimer::stop() { if(!query_start || query_stop > 0) return; glEndQuery(GL_TIME_ELAPSED); query_stop = SDL_GetTicks(); } const std::string& GLTimer::getName() const { return name; } GLuint64 GLTimer::getValue() const { return query_value; } Uint32 GLTimer::getGLMillis() const { return query_value / 1000000; } Uint32 GLTimer::getCPUMillis() const { return cpu_time; } bool GLTimer::check() { if(!query_start) return false; GLuint64 elapsed; GLint available = 0; glGetQueryObjectiv(query_id, GL_QUERY_RESULT_AVAILABLE, &available); if(!available) return false; glGetQueryObjectui64v(query_id, GL_QUERY_RESULT, &elapsed); query_value = elapsed; cpu_time = query_stop-query_start; query_start = query_stop = 0; return true; } gource-0.56/src/core/vbo.cpp0000644002342600234260000001273015152463042015606 0ustar andrewcandrewc/* Copyright (c) 2011 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "vbo.h" //quadbuf quadbuf::quadbuf(int vertex_capacity) : vertex_capacity(vertex_capacity) { vertex_count = 0; data = vertex_capacity > 0 ? new quadbuf_vertex[vertex_capacity] : 0; //fprintf(stderr, "size of quadbuf_vertex = %d\n", sizeof(quadbuf_vertex)); } quadbuf::~quadbuf() { if(data!=0) delete[] data; } void quadbuf::unload() { buf.unload(); } void quadbuf::resize(int new_size) { quadbuf_vertex* _data = data; data = new quadbuf_vertex[new_size]; for(int i=0;i vertex_capacity) { resize(vertex_count*2); } data[i] = v1; data[i+1] = v2; data[i+2] = v3; data[i+3] = v4; if(textureid>0 && (textures.empty() || textures.back().textureid != textureid)) { textures.push_back(quadbuf_tex(i, textureid)); } } void quadbuf::add(GLuint textureid, const quadbuf_vertex& v1, const quadbuf_vertex& v2, const quadbuf_vertex& v3, const quadbuf_vertex& v4) { int i = vertex_count; vertex_count += 4; if(vertex_count > vertex_capacity) { resize(vertex_count*2); } data[i] = v1; data[i+1] = v2; data[i+2] = v3; data[i+3] = v4; if(textureid>0 && (textures.empty() || textures.back().textureid != textureid)) { textures.push_back(quadbuf_tex(i, textureid)); } } void quadbuf::update() { if(vertex_count==0) return; //recreate buffer if less than the vertex_count buf.buffer( vertex_count, sizeof(quadbuf_vertex), vertex_capacity, &(data[0].pos.x), GL_DYNAMIC_DRAW ); } void quadbuf::draw() { if(vertex_count==0) return; buf.bind(); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, sizeof(quadbuf_vertex), 0); glColorPointer(4, GL_FLOAT, sizeof(quadbuf_vertex), (GLvoid*)8); // offset pos (2x4 bytes) glTexCoordPointer(2, GL_FLOAT, sizeof(quadbuf_vertex), (GLvoid*)24); // offset pos + colour (2x4 + 4x4 bytes) int last_index = vertex_count-1; if(textures.empty()) { glDrawArrays(GL_QUADS, 0, vertex_count); } else { for(std::vector::iterator it = textures.begin(); it != textures.end();) { quadbuf_tex* tex = &(*it); int end_index; it++; if(it == textures.end()) { end_index = last_index; } else { end_index = (*it).start_index; } glBindTexture(GL_TEXTURE_2D, tex->textureid); glDrawArrays(GL_QUADS, tex->start_index, end_index - tex->start_index + 1); if(end_index==last_index) break; } } glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); buf.unbind(); } gource-0.56/src/core/texture.cpp0000664002342600234260000001732115152463042016523 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "texture.h" #include "display.h" TextureManager texturemanager; // texture manager TextureManager::TextureManager() : ResourceManager() { resource_seq = 0; trilinear = true; } TextureResource* TextureManager::grabFile(const std::string& filename, bool mipmaps, GLint wrap) { return grab(filename, mipmaps, wrap, true); } TextureResource* TextureManager::grab(const std::string& filename, bool mipmaps, GLint wrap, bool external) { TextureResource* r = 0; //look up this resource if((r = (TextureResource*) resources[filename]) != 0) { r->addref(); return r; } r = new TextureResource(filename, mipmaps, wrap, external); r->load(); addResource(r); return r; } void TextureManager::addResource(TextureResource* r) { if(r->resource_name.empty()) { char res_name[256]; snprintf(res_name, 256, "__texture_resource_%d", ++resource_seq); std::string resource_name(res_name); r->setResourceName(resource_name); } resources[r->resource_name] = r; r->addref(); } TextureResource* TextureManager::create(GLenum target) { TextureResource* r = new TextureResource(); r->target = target; r->load(); addResource(r); return (TextureResource*)r; } TextureResource* TextureManager::create(int width, int height, bool mipmaps, GLint wrap, GLenum format, GLubyte* data) { TextureResource* r = new TextureResource(width, height, mipmaps, wrap, format, data); r->load(); addResource(r); return (TextureResource*)r; } void TextureManager::unload() { for(std::map::iterator it= resources.begin(); it!=resources.end();it++) { ((TextureResource*)it->second)->unload(); } } void TextureManager::reload() { for(std::map::iterator it= resources.begin(); it!=resources.end();it++) { ((TextureResource*)it->second)->load(); } } // TextureResource TextureResource::TextureResource() { textureid = 0; w = 0; h = 0; format = 0; data = 0; wrap = GL_CLAMP_TO_EDGE; target = GL_TEXTURE_2D; mipmaps = false; setDefaultFiltering(); } TextureResource::TextureResource(const std::string& filename, bool mipmaps, GLint wrap, bool external) : Resource(filename) { this->mipmaps = mipmaps; this->wrap = wrap; data = 0; format = 0; textureid = 0; target = GL_TEXTURE_2D; //if doesnt have an absolute path, look in resource dir if(!external && !(filename.size() > 2 && filename[1] == ':') && !(filename.size() > 1 && filename[0] == '/')) { this->filename = texturemanager.getDir() + filename; } else { this->filename = filename; } setDefaultFiltering(); } TextureResource::TextureResource(int width, int height, bool mipmaps, GLint wrap, GLenum format, GLubyte* data) { this->w = width; this->h = height; this->data = data; this->format = format; this->mipmaps = mipmaps; this->wrap = wrap; this->target = GL_TEXTURE_2D; textureid = 0; setDefaultFiltering(); } TextureResource::~TextureResource() { unload(); } void TextureResource::setDefaultFiltering() { if(mipmaps) { if(texturemanager.trilinear) { min_filter = GL_LINEAR_MIPMAP_LINEAR; } else { min_filter = GL_LINEAR_MIPMAP_NEAREST; } mag_filter = GL_LINEAR; } else { min_filter = GL_LINEAR; mag_filter = GL_LINEAR; } } void TextureResource::setFiltering(GLint min_filter, GLint mag_filter) { this->min_filter = min_filter; this->mag_filter = mag_filter; glTexParameteri(target, GL_TEXTURE_MIN_FILTER, min_filter); glTexParameteri(target, GL_TEXTURE_MAG_FILTER, mag_filter); } void TextureResource::setWrapStyle(GLint wrap) { this->wrap = wrap; glTexParameteri(target, GL_TEXTURE_WRAP_S, wrap); glTexParameteri(target, GL_TEXTURE_WRAP_T, wrap); } void TextureResource::unload() { if(textureid!=0) glDeleteTextures(1, &textureid); textureid=0; } void TextureResource::createTexture() { if(!textureid) glGenTextures(1, &textureid); glBindTexture(target, textureid); if(w != 0 && format != 0) { GLint internalFormat = 0; switch(format) { case GL_ALPHA: internalFormat = GL_ALPHA; break; case GL_LUMINANCE: internalFormat = GL_LUMINANCE; break; default: internalFormat = GL_RGBA; break; } if(mipmaps) { gluBuild2DMipmaps(target, internalFormat, w, h, format, GL_UNSIGNED_BYTE, data); } else { glTexImage2D(target, 0, internalFormat, w, h, 0, format, GL_UNSIGNED_BYTE, data); } } setFiltering(min_filter, mag_filter); setWrapStyle(wrap); } void TextureResource::reload() { load(true); } void TextureResource::load(bool reload) { if(textureid != 0) { if(!reload) return; debugLog("texture %d is being reloaded", textureid); } SDL_Surface *surface = 0; if(!filename.empty()) { debugLog("creating texture from %s", filename.c_str()); surface = IMG_Load(filename.c_str()); if(surface==0) throw TextureException(filename); w = surface->w; h = surface->h; //figure out image colour order format = colourFormat(surface); data = (GLubyte*) surface->pixels; if(format==0) throw TextureException(filename); } createTexture(); if(surface != 0) { SDL_FreeSurface(surface); data = 0; } } GLenum TextureResource::colourFormat(SDL_Surface* surface) { int colours = surface->format->BytesPerPixel; int format = 0; if (colours == 4) { if (surface->format->Rmask == 0x000000ff) { format = GL_RGBA; } else { format = GL_BGRA; } } else if (colours == 3) { if (surface->format->Rmask == 0x000000ff) format = GL_RGB; else format = GL_BGR; } return format; } void TextureResource::bind() { if(!textureid) load(); glBindTexture(target, textureid); } gource-0.56/src/core/ftgl/0000775002342600234260000000000015152463042015247 5ustar andrewcandrewcgource-0.56/src/core/ftgl/FTUnicode.h0000644002342600234260000001773415152463042017252 0ustar andrewcandrewc/* * FTGL - OpenGL font library * * Copyright (c) 2008 Daniel Remenak * * Portions derived from ConvertUTF.c Copyright (C) 2001-2004 Unicode, Inc * Unicode, Inc. hereby grants the right to freely use the information * supplied in this file in the creation of products supporting the * Unicode Standard, and to make copies of this file in any form * for internal or external distribution as long as this notice * remains attached. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef __FTUnicode__ #define __FTUnicode__ /** * Provides a way to easily walk multibyte unicode strings in the various * Unicode encodings (UTF-8, UTF-16, UTF-32, UCS-2, and UCS-4). Encodings * with elements larger than one byte must already be in the correct endian * order for the current architecture. */ template class FTUnicodeStringItr { public: /** * Constructor. Also reads the first character and stores it. * * @param string The buffer to iterate. No copy is made. */ FTUnicodeStringItr(const T* string) : curPos(string), nextPos(string) { (*this)++; }; /** * Pre-increment operator. Reads the next unicode character and sets * the state appropriately. * Note - not protected against overruns. */ FTUnicodeStringItr& operator++() { curPos = nextPos; // unicode handling switch (sizeof(T)) { case 1: // UTF-8 // get this character readUTF8(); break; case 2: // UTF-16 readUTF16(); break; case 4: // UTF-32 // fall through default: // error condition really, but give it a shot anyway curChar = *nextPos++; } return *this; } /** * Post-increment operator. Reads the next character and sets * the state appropriately. * Note - not protected against overruns. */ FTUnicodeStringItr operator++(int) { FTUnicodeStringItr temp = *this; ++*this; return temp; } /** * Equality operator. Two FTUnicodeStringItrs are considered equal * if they have the same current buffer and buffer position. */ bool operator==(const FTUnicodeStringItr& right) const { if (curPos == right.getBufferFromHere()) return true; return false; } /** * Dereference operator. * * @return The unicode codepoint of the character currently pointed * to by the FTUnicodeStringItr. */ unsigned int operator*() const { return curChar; } /** * Buffer-fetching getter. You can use this to retreive the buffer * starting at the currently-iterated character for functions which * require a Unicode string as input. */ const T* getBufferFromHere() const { return curPos; } private: /** * Helper function for reading a single UTF8 character from the string. * Updates internal state appropriately. */ void readUTF8(); /** * Helper function for reading a single UTF16 character from the string. * Updates internal state appropriately. */ void readUTF16(); /** * The buffer position of the first element in the current character. */ const T* curPos; /** * The character stored at the current buffer position (prefetched on * increment, so there's no penalty for dereferencing more than once). */ unsigned int curChar; /** * The buffer position of the first element in the next character. */ const T* nextPos; // unicode magic numbers static const char utf8bytes[256]; static const unsigned long offsetsFromUTF8[6]; static const unsigned long highSurrogateStart; static const unsigned long highSurrogateEnd; static const unsigned long lowSurrogateStart; static const unsigned long lowSurrogateEnd; static const unsigned long highSurrogateShift; static const unsigned long lowSurrogateBase; }; /* The first character in a UTF8 sequence indicates how many bytes * to read (among other things) */ template const char FTUnicodeStringItr::utf8bytes[256] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6 }; /* Magic values subtracted from a buffer value during UTF8 conversion. * This table contains as many values as there might be trailing bytes * in a UTF-8 sequence. */ template const unsigned long FTUnicodeStringItr::offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; // get a UTF8 character; leave the tracking pointer at the start of the // next character // not protected against invalid UTF8 template inline void FTUnicodeStringItr::readUTF8() { unsigned int ch = 0; unsigned int extraBytesToRead = utf8bytes[(unsigned char)(*nextPos)]; // falls through switch (extraBytesToRead) { case 6: ch += *nextPos++; ch <<= 6; /* remember, illegal UTF-8 */ case 5: ch += *nextPos++; ch <<= 6; /* remember, illegal UTF-8 */ case 4: ch += *nextPos++; ch <<= 6; case 3: ch += *nextPos++; ch <<= 6; case 2: ch += *nextPos++; ch <<= 6; case 1: ch += *nextPos++; } ch -= offsetsFromUTF8[extraBytesToRead-1]; curChar = ch; } // Magic numbers for UTF-16 conversions template const unsigned long FTUnicodeStringItr::highSurrogateStart = 0xD800; template const unsigned long FTUnicodeStringItr::highSurrogateEnd = 0xDBFF; template const unsigned long FTUnicodeStringItr::lowSurrogateStart = 0xDC00; template const unsigned long FTUnicodeStringItr::lowSurrogateEnd = 0xDFFF; template const unsigned long FTUnicodeStringItr::highSurrogateShift = 10; template const unsigned long FTUnicodeStringItr::lowSurrogateBase = 0x0010000UL; template inline void FTUnicodeStringItr::readUTF16() { unsigned int ch = *nextPos++; // if we have the first half of the surrogate pair if (ch >= highSurrogateStart && ch <= highSurrogateEnd) { unsigned int ch2 = *curPos; // complete the surrogate pair if (ch2 >= lowSurrogateStart && ch2 <= lowSurrogateEnd) { ch = ((ch - highSurrogateStart) << highSurrogateShift) + (ch2 - lowSurrogateStart) + lowSurrogateBase; ++nextPos; } } curChar = ch; } #endif gource-0.56/src/core/conffile.cpp0000644002342600234260000004706015152463042016611 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "conffile.h" #include "logger.h" #include "regex.h" //section of config file Regex ConfFile_section("^\\s*\\[([^\\]]+)\\]\\s*$"); Regex ConfFile_int_value("^\\s*-?(\\d+)\\s*$"); Regex ConfFile_float_value("^\\s*-?(\\d*\\.?\\d+)\\s*$"); // parse key value pair, seperated by an equals sign, removing white space on key and front of the value Regex ConfFile_key_value("^\\s*([^=\\s]+)\\s*=\\s*([^\\s].*)?$"); // vec2, vec3, or vec4 with liberal allowance for whitespace Regex ConfFile_vec2_value("^\\s*vec2\\(\\s*(-?[0-9.]+)\\s*,\\s*(-?[0-9.]+)\\s*\\)\\s*$"); Regex ConfFile_vec3_value("^\\s*vec3\\(\\s*(-?[0-9.]+)\\s*,\\s*(-?[0-9.]+)\\s*,\\s*(-?[0-9.]+)\\s*\\)\\s*$"); Regex ConfFile_vec4_value("^\\s*vec4\\(\\s*(-?[0-9.]+)\\s*,\\s*(-?[0-9.]+)\\s*,\\s*(-?[0-9.]+)\\s*,\\s*(-?[0-9.]+)\\s*\\)\\s*$"); //ConfEntry ConfEntry::ConfEntry(const std::string& name) { this->name = name; } ConfEntry::ConfEntry(const std::string& name, const std::string& value, int lineno) { this->name = name; this->value = value; this->lineno = lineno; } ConfEntry::ConfEntry(const std::string& name, bool value) { this->name = name; setBool(value); } ConfEntry::ConfEntry(const std::string& name, int value) { this->name = name; setInt(value); } ConfEntry::ConfEntry(const std::string& name, float value) { this->name = name; setFloat(value); } ConfEntry::ConfEntry(const std::string& name, vec2 value) { this->name = name; setVec2(value); } ConfEntry::ConfEntry(const std::string& name, vec3 value) { this->name = name; setVec3(value); } ConfEntry::ConfEntry(const std::string& name, vec4 value) { this->name = name; setVec4(value); } void ConfEntry::setName(const std::string& name) { this->name = name; } void ConfEntry::setString(const std::string& value) { this->value = value; } void ConfEntry::setFloat(float value) { char floattostr[256]; snprintf(floattostr, 256, "%.5f", value); this->value = std::string(floattostr); } void ConfEntry::setInt(int value) { char inttostr[256]; snprintf(inttostr, 256, "%d", value); this->value = std::string(inttostr); } void ConfEntry::setBool(bool value) { this->value = std::string(value ? "yes" : "no"); } void ConfEntry::setVec2(vec2 value) { char vectostr[256]; snprintf(vectostr, 256, "vec2(%.5f, %.5f)", value.x, value.y); this->value = std::string(vectostr); } void ConfEntry::setVec3(vec3 value) { char vectostr[256]; snprintf(vectostr, 256, "vec3(%.5f, %.5f, %.5f)", value.x, value.y, value.z); this->value = std::string(vectostr); } void ConfEntry::setVec4(vec4 value) { char vectostr[256]; snprintf(vectostr, 256, "vec4(%.5f, %.5f, %.5f, %.5f)", value.x, value.y, value.z, value.w); this->value = std::string(vectostr); } std::string ConfEntry::getName() { return name; } std::string ConfEntry::getString() { return value; } int ConfEntry::getLineNumber() { return lineno; } int ConfEntry::getInt() { return atoi(value.c_str()); } bool ConfEntry::isFloat() { if(ConfFile_float_value.match(value)) return true; return false; } bool ConfEntry::isInt() { if(ConfFile_float_value.match(value)) return true; return false; } float ConfEntry::getFloat() { return atof(value.c_str()); } bool ConfEntry::hasValue() { return getString().size() > 0; } bool ConfEntry::isBool() { if( value == "1" || value == "true" || value == "True" || value == "TRUE" || value == "yes" || value == "Yes" || value == "YES" || value == "0" || value == "false" || value == "False" || value == "FALSE" || value == "no" || value == "No" || value == "NO") return true; return false; } bool ConfEntry::getBool() { if(value == "1" || value == "true" || value == "True" || value == "TRUE" || value == "yes" || value == "Yes" || value == "YES") return true; return false; } bool ConfEntry::isVec2() { if(ConfFile_vec2_value.match(value)) return true; return false; } vec2 ConfEntry::getVec2() { std::vector matches; if(ConfFile_vec2_value.match(value, &matches)) { return vec2(atof(matches[0].c_str()), atof(matches[1].c_str())); } return vec2(0.0, 0.0); } bool ConfEntry::isVec3() { if(ConfFile_vec3_value.match(value)) return true; return false; } vec3 ConfEntry::getVec3() { std::vector matches; if(ConfFile_vec3_value.match(value, &matches)) { return vec3(atof(matches[0].c_str()), atof(matches[1].c_str()), atof(matches[2].c_str())); } return vec3(0.0, 0.0, 0.0); } bool ConfEntry::isVec4() { if(ConfFile_vec4_value.match(value)) return true; return false; } vec4 ConfEntry::getVec4() { std::vector matches; if(ConfFile_vec4_value.match(value, &matches)) { return vec4(atof(matches[0].c_str()), atof(matches[1].c_str()), atof(matches[2].c_str()), atof(matches[3].c_str()) ); } return vec4(0.0, 0.0, 0.0, 0.0); } //ConfSection ConfSection::ConfSection() { lineno = 0; conf = 0; } ConfSection::ConfSection(const std::string& name, int lineno) { this->name = name; this->lineno = lineno; this->conf = 0; } ConfSection::~ConfSection() { clear(); } std::string ConfSection::getName() { return name; } ConfFile* ConfSection::getConfFile() { return conf; } void ConfSection::setConfFile(ConfFile* conf) { this->conf = conf; } int ConfSection::getLineNumber() { return lineno; } ConfEntryList* ConfSection::getEntries(const std::string& key) { std::map::iterator entry_finder = entrymap.find(key); if(entry_finder == entrymap.end()) return 0; return entry_finder->second; } ConfEntry* ConfSection::getEntry(const std::string& key) { ConfEntryList* entryList = getEntries(key); if(entryList==0 || entryList->size()==0) return 0; return entryList->front(); } void ConfSection::addEntry(ConfEntry* entry) { ConfEntryList* entrylist = entrymap[entry->getName()]; if(entrylist==0) { entrymap[entry->getName()] = entrylist = new ConfEntryList; } entrylist->push_back(entry); } void ConfSection::addEntry(const std::string& name, const std::string& value, int lineno) { ConfEntry* entry = new ConfEntry(name, value, lineno); addEntry(entry); } //replace first entry with that name void ConfSection::setEntry(ConfEntry* entry) { ConfEntryList* entrylist = entrymap[entry->getName()]; if(entrylist==0) { entrymap[entry->getName()] = entrylist = new ConfEntryList; } //remove any entries with this name while(entrylist->size()>0) { ConfEntry* front = entrylist->front(); entrylist->pop_front(); delete front; } //add new entry entrylist->push_front(entry); } void ConfSection::setEntry(const std::string& name, const std::string& value, int lineno) { ConfEntry* entry = new ConfEntry(name, value, lineno); setEntry(entry); } void ConfSection::clear() { //delete entries for(std::map::iterator it = entrymap.begin(); it!= entrymap.end(); it++) { ConfEntryList* entrylist = it->second; for(std::list::iterator eit = entrylist->begin(); eit != entrylist->end(); eit++) { ConfEntry* e = *eit; delete e; } delete entrylist; } entrymap.clear(); } bool ConfSection::hasValue(const std::string& key) { std::string value = getString(key); if(value.size()>0) return true; return false; } std::string ConfSection::getString(const std::string& key) { ConfEntry* entry = getEntry(key); if(entry==0) return std::string(""); return entry->getString(); } int ConfSection::getInt(const std::string& key) { ConfEntry* entry = getEntry(key); if(entry) return entry->getInt(); return 0; } float ConfSection::getFloat(const std::string& key) { ConfEntry* entry = getEntry(key); if(entry) return entry->getFloat(); return 0.0f; } bool ConfSection::getBool(const std::string& key) { ConfEntry* entry = getEntry(key); if(entry) return entry->getBool(); return false; } vec3 ConfSection::getVec3(const std::string& key) { ConfEntry* entry = getEntry(key); if(entry) return entry->getVec3(); return vec3(0.0, 0.0, 0.0); } vec4 ConfSection::getVec4(const std::string& key) { ConfEntry* entry = getEntry(key); if(entry) return entry->getVec4(); return vec4(0.0, 0.0, 0.0, 0.0); } void ConfSection::print(std::ostream& out) { out << "[" << getName() << "]" << std::endl; for(std::map::iterator it = entrymap.begin(); it!= entrymap.end(); it++) { ConfEntryList* entrylist = it->second; for(std::list::iterator eit = entrylist->begin(); eit != entrylist->end(); eit++) { ConfEntry* e = *eit; out << e->getName() << "=" << e->getString() << std::endl; } } out << std::endl; } //ConfFile ConfFile::ConfFile() { } ConfFile::~ConfFile() { clear(); } void ConfFile::clear() { //delete sections for(std::map::iterator it = sectionmap.begin(); it!= sectionmap.end(); it++) { ConfSectionList* sectionlist = it->second; for(std::list::iterator sit = sectionlist->begin(); sit != sectionlist->end(); sit++) { ConfSection* s = *sit; delete s; } delete sectionlist; } sectionmap.clear(); } void ConfFile::setFilename(const std::string& filename) { this->conffile = filename; } std::string ConfFile::getFilename() { return conffile; } void ConfFile::save(const std::string& conffile) { this->conffile = conffile; save(); } void ConfFile::save() { if(conffile.size()==0) { throw ConfFileException("filename not set", conffile.c_str(), 0); } //save conf file std::ofstream out; out.open(conffile.c_str()); if(!out.is_open()) { std::string write_error = std::string("failed to write config to ") + conffile; throw ConfFileException(write_error, conffile.c_str(), 0); } for(std::map::iterator it = sectionmap.begin(); it!= sectionmap.end(); it++) { ConfSectionList* sectionlist = it->second; for(ConfSectionList::iterator sit = sectionlist->begin(); sit != sectionlist->end(); sit++) { ConfSection* s = *sit; s->print(out); } } out.close(); } void ConfFile::load(const std::string& conffile) { this->conffile = conffile; load(); } static const std::string conffile_whitespaces(" \t\f\v\n\r"); void ConfFile::trim(std::string& value) { if(value.size() == 0) return; size_t string_end = value.find_last_not_of(conffile_whitespaces); if(string_end == std::string::npos) value.assign(""); else if(string_end != value.size()-1) value.assign(value.substr(0,string_end+1)); } void ConfFile::load() { debugLog("ConfFile::load(%s)", conffile.c_str()); clear(); char buff[1024]; int lineno = 0; ConfSection* sec = 0; std::ifstream in(conffile.c_str()); if(!in.is_open()) { snprintf(buff, 1024, "failed to open config file %s", conffile.c_str()); std::string conf_error = std::string(buff); throw ConfFileException(conf_error, conffile, 0); } std::string line; while(std::getline(in, line)) { lineno++; std::vector matches; // blank line or commented out lines if(line.size() == 0 || (line.size() > 0 && line[0] == '#')) { continue; // sections } else if(ConfFile_section.match(line, &matches)) { if(sec != 0) addSection(sec); sec = new ConfSection(matches[0], lineno); // key value pairs } else if(ConfFile_key_value.match(line, &matches)) { std::string key = matches[0]; std::string value = (matches.size()>1) ? matches[1] : ""; //trim whitespace ConfFile::trim(value); if(sec==0) sec = new ConfSection("", lineno); sec->addEntry(key, value, lineno); debugLog("%s: [%s] %s => %s", conffile.c_str(), sec->getName().c_str(), key.c_str(), value.c_str()); } else { snprintf(buff, 1024, "%s, line %d: could not parse line", conffile.c_str(), lineno); std::string conf_error = std::string(buff); throw ConfFileException(conf_error, conffile, lineno); } } if(sec != 0) addSection(sec); in.close(); } bool ConfFile::hasEntry(const std::string& section, const std::string& key) { ConfEntry* entry = getEntry(section, key); if(entry != 0) return true; return false; } bool ConfFile::hasValue(const std::string& section, const std::string& key) { std::string value = getString(section, key); if(value.size()>0) return true; return false; } int ConfFile::countSection(const std::string& section) { ConfSectionList* sectionlist = getSections(section); if(sectionlist==0) return 0; int count = 0; for(ConfSectionList::iterator sit = sectionlist->begin(); sit != sectionlist->end(); sit++) { count++; } return count; } bool ConfFile::hasSection(const std::string& section) { ConfSection* sec = getSection(section); if(sec==0) return false; return true; } ConfSection* ConfFile::addSection(const std::string& section) { ConfSection* sec = new ConfSection(section); addSection(sec); return sec; } void ConfFile::addSection(ConfSection* section) { ConfSectionList* sectionlist = getSections(section->getName()); if(sectionlist==0) { sectionmap[section->getName()] = sectionlist = new ConfSectionList; } section->setConfFile(this); sectionlist->push_back(section); } void ConfFile::setSection(ConfSection* section) { ConfSectionList* sectionlist = getSections(section->getName()); if(sectionlist==0) { sectionmap[section->getName()] = sectionlist = new ConfSectionList; } if(sectionlist->size() != 0) { ConfSection* front = sectionlist->front(); sectionlist->pop_front(); delete front; } sectionlist->push_back(section); } //returns the list of all sections with a particular name ConfSectionList* ConfFile::getSections(const std::string& section) { std::map::iterator section_finder = sectionmap.find(section); if(section_finder == sectionmap.end()) return 0; return section_finder->second; } //returns the first section with a particular name ConfSection* ConfFile::getSection(const std::string& section) { ConfSectionList* sectionlist = getSections(section); if(sectionlist==0 || sectionlist->size()==0) return 0; return sectionlist->front(); } //returns the first section with a particular name void ConfFile::setEntry(const std::string& section, const std::string& key, const std::string& value) { ConfSection* sec = getSection(section); if(sec==0) { sec = addSection(section); } sec->setEntry(key, value); } //returns a list of all entries in a section with a particular name ConfEntryList* ConfFile::getEntries(const std::string& section, const std::string& key) { ConfSection* sec = getSection(section); if(sec==0) return 0; ConfEntryList* entryList = sec->getEntries(key); return entryList; } //get first entry in a section with a particular name ConfEntry* ConfFile::getEntry(const std::string& section, const std::string& key) { ConfSection* sec = getSection(section); if(sec==0) return 0; ConfEntry* entry = sec->getEntry(key); return entry; } std::string ConfFile::getString(const std::string& section, const std::string& key) { ConfEntry* entry = getEntry(section, key); if(entry==0) return std::string(""); return entry->getString(); } int ConfFile::getInt(const std::string& section, const std::string& key) { ConfEntry* entry = getEntry(section, key); if(entry) return entry->getInt(); return 0; } float ConfFile::getFloat(const std::string& section, const std::string& key) { ConfEntry* entry = getEntry(section, key); if(entry) return entry->getFloat(); return 0.0f; } bool ConfFile::getBool(const std::string& section, const std::string& key) { ConfEntry* entry = getEntry(section, key); if(entry) return entry->getBool(); return false; } vec3 ConfFile::getVec3(const std::string& section, const std::string& key) { ConfEntry* entry = getEntry(section, key); if(entry) return entry->getVec3(); return vec3(0.0, 0.0, 0.0); } vec4 ConfFile::getVec4(const std::string& section, const std::string& key) { ConfEntry* entry = getEntry(section, key); if(entry) return entry->getVec4(); return vec4(0.0, 0.0, 0.0, 0.0); } void ConfFile::unknownOptionException(ConfEntry* entry) { std::string reason = "unknown option '"; reason += entry->getName(); reason += std::string("'"); entryException(entry, reason); } void ConfFile::missingValueException(ConfEntry* entry) { std::string reason = std::string("no value specified for '"); reason += entry->getName(); reason += std::string("'"); entryException(entry, reason); } void ConfFile::invalidValueException(ConfEntry* entry) { std::string reason = std::string("invalid '"); reason += entry->getName(); reason += std::string("' value"); entryException(entry, reason); } void ConfFile::missingEntryException(ConfSection* section, std::string entryname) { std::string reason = std::string("section '"); reason += section->getName(); reason += std::string("' missing required entry '"); reason += entryname; reason += std::string("'"); sectionException(section, reason); } void ConfFile::sectionException(ConfSection* section, std::string reason) { std::string errmsg; int lineno = 0; if(conffile.size()) { errmsg = conffile; if(section != 0 && section->getLineNumber() != 0) { lineno = section->getLineNumber(); char linebuff[256]; snprintf(linebuff, 256, ", line %d", lineno); errmsg += std::string(linebuff); } errmsg += std::string(": "); } errmsg += reason; throw ConfFileException(errmsg, conffile, lineno); } void ConfFile::entryException(ConfEntry* entry, std::string reason) { std::string errmsg; int lineno = 0; if(conffile.size()) { errmsg = conffile; if(entry != 0 && entry->getLineNumber() != 0) { lineno = entry->getLineNumber(); char linebuff[256]; snprintf(linebuff, 256, ", line %d", lineno); errmsg += std::string(linebuff); } errmsg += std::string(": "); } errmsg += reason; throw ConfFileException(errmsg, conffile, lineno); } gource-0.56/src/core/timer.h0000644002342600234260000000104715152463042015604 0ustar andrewcandrewc#ifndef CORE_TIMER_H #define CORE_TIMER_H #include #include "gl.h" class GLTimer { Uint32 query_start; Uint32 query_stop; Uint32 cpu_time; GLuint64 query_value; GLuint query_id; std::string name; public: GLTimer(); GLTimer(const std::string& name); ~GLTimer(); void start(); void stop(); bool check(); const std::string& getName() const; GLuint64 getValue() const; Uint32 getGLMillis() const; Uint32 getCPUMillis() const; void unload(); }; #endif gource-0.56/src/core/png_writer.cpp0000644002342600234260000001432115152463042017176 0ustar andrewcandrewc/* Copyright (c) 2013 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "png_writer.h" #include "display.h" #include #define PNG_SKIP_SETJMP_CHECK #include PNGWriter::PNGWriter(int components) : components(components) { out = 0; } bool PNGWriter::open(const std::string& filename) { out = new std::ofstream(filename.c_str(), std::ios::out | std::ios::binary); if(out->fail()) { delete out; out = 0; return false; } return true; } void PNGWriter::close() { ((std::fstream*)out)->close(); } void PNGWriter::setOutputStream(std::ostream* out) { this->out = out; } void PNGWriter::screenshot(const std::string& filename) { if(!open(filename)) return; std::vector buffer; buffer.resize(display.width * display.height * components); capture(buffer); writePNG(buffer); close(); } void PNGWriter::capture(std::vector& buffer) { GLenum pixel_format = components == 4 ? GL_RGBA : GL_RGB; glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPixels(0, 0, display.width, display.height, pixel_format, GL_UNSIGNED_BYTE, &(buffer[0])); } void png_writer_write_data(png_structp png_ptr, png_bytep data, png_size_t length) { std::ostream* out = (std::ostream*) png_get_io_ptr(png_ptr); if (!out->write((char*)data, length)) png_error(png_ptr, "png_writer_write_data error"); } void png_writer_flush_data(png_structp png_ptr) { std::ostream *out = (std::ostream*) png_get_io_ptr(png_ptr); if (!out->flush()) png_error(png_ptr, "png_writer_flush_data error"); } void PNGWriter::writePNG(std::vector& buffer) { png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0); if(!png_ptr) throw PNGExporterException("png_create_write_struct failed"); png_set_write_fn(png_ptr, out, png_writer_write_data, png_writer_flush_data); png_infop info_ptr = png_create_info_struct(png_ptr); if(!info_ptr) throw PNGExporterException("png_create_info_struct failed"); if(setjmp(png_jmpbuf(png_ptr))) { throw PNGExporterException("setjmp failed"); } int colour_type = (components == 4) ? PNG_COLOR_TYPE_RGB_ALPHA : PNG_COLOR_TYPE_RGB; png_set_IHDR(png_ptr, info_ptr, display.width, display.height, 8, colour_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); std::vector rows(display.height); for (int i = 0; i < display.height; i++) { rows[i] = (png_bytep) &(buffer[(display.height-i-1) * components * display.width]); } png_write_info(png_ptr, info_ptr); png_write_image(png_ptr, &(rows[0])); png_write_end(png_ptr, 0); png_destroy_write_struct(&png_ptr, &info_ptr); } // PNGExporter PNGExporter::PNGExporter(const std::string& filename) { buffer1.resize(display.width * display.height * 3); buffer2.resize(display.width * display.height * 3); buffer_shared_ptr = 0; thread_state = PNG_EXPORTER_WAIT; cond = SDL_CreateCond(); mutex = SDL_CreateMutex(); if(filename == "-") { writer.setOutputStream(&std::cout); } else { this->filename = filename; if(!writer.open(filename)) { throw PNGExporterException(filename); } } #if SDL_VERSION_ATLEAST(2,0,0) thread = SDL_CreateThread( PNGExporter::startThread, "png_exporter", this ); #else thread = SDL_CreateThread( PNGExporter::startThread, this ); #endif } PNGExporter::~PNGExporter() { stop(); SDL_DestroyCond(cond); SDL_DestroyMutex(mutex); buffer_shared_ptr = 0; if(!filename.empty()) { writer.close(); } } int PNGExporter::startThread(void *exporter) { (static_cast(exporter))->run(); return 0; } void PNGExporter::run() { SDL_mutexP(mutex); while(thread_state != PNG_EXPORTER_EXIT) { thread_state = PNG_EXPORTER_WAIT; while (thread_state == PNG_EXPORTER_WAIT) { SDL_CondWait(cond, mutex); } if (thread_state != PNG_EXPORTER_WRITE) break; if (buffer_shared_ptr != 0) { writer.writePNG(*buffer_shared_ptr); } } thread_state = PNG_EXPORTER_STOPPED; SDL_mutexV(mutex); } void PNGExporter::stop() { if(!thread) return; if(thread_state == PNG_EXPORTER_STOPPED || thread_state == PNG_EXPORTER_EXIT) return; SDL_mutexP(mutex); thread_state = PNG_EXPORTER_EXIT; SDL_CondSignal(cond); SDL_mutexV(mutex); SDL_WaitThread(thread, 0); thread = 0; } void PNGExporter::capture() { std::vector* next_pixel_ptr = (buffer_shared_ptr == &buffer1) ? &buffer2 : &buffer1; writer.capture(*next_pixel_ptr); SDL_mutexP(mutex); buffer_shared_ptr = next_pixel_ptr; thread_state = PNG_EXPORTER_WRITE; SDL_CondSignal(cond); SDL_mutexV(mutex); } gource-0.56/src/core/gl.h0000644002342600234260000000051215152463042015062 0ustar andrewcandrewc#ifndef CORE_GL_H #define CORE_GL_H #include #define PRINT_GL_ERRORS #ifdef PRINT_GL_ERRORS #define glCheckError() { \ int gl_error = glGetError(); \ if(gl_error != GL_NO_ERROR) warnLog("GL error %s at %s:%d", gluErrorString(gl_error), __FILE__, __LINE__); \ } #else #define glCheckError() #endif #endif gource-0.56/src/core/quadtree.h0000644002342600234260000001030415152463042016272 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef QUADTREE_H #define QUADTREE_H #include #include #include "gl.h" #include "bounds.h" #include "frustum.h" class QuadItem { public: Bounds2D quadItemBounds; int node_count; virtual ~QuadItem() {}; virtual void updateQuadItemBounds() {}; virtual void drawQuadItem() {}; }; template class VisitFunctor{ public: virtual void operator()(Data *)=0; }; class QuadTree; class QuadNode { GLuint listid; Bounds2D bounds; std::vector children; std::list items; QuadTree* tree; int getChildIndex(const vec2 & pos) const; void addToChild(QuadItem* item); int depth; QuadNode* parent; public: bool allowMoreItems(); int usedChildren(); QuadNode(QuadTree* tree, QuadNode* parent, Bounds2D itembounds, int parent_depth); ~QuadNode(); void addItem(QuadItem* item); //if not subdivided, subdivide, add to correct subdivided node. int getItemsAt(std::set& itemset, vec2 pos); void getLeavesInFrustum(std::set& nodeset, Frustum& frustum); int getItemsInFrustum(std::set& itemset, Frustum& frustum); int getItemsInBounds(std::set& itemset, Bounds2D& bounds) const; void visitItemsInFrustum(const Frustum & frustum, VisitFunctor & visit); void visitItemsInBounds(const Bounds2D & bounds, VisitFunctor & visit); void visitItemsAt(const vec2 & pos, VisitFunctor & visit); void visitLeavesInFrustum(const Frustum & frustum, VisitFunctor & visit); bool empty(); void generateLists(); int draw(Frustum& frustum); void outline(); void outlineItems(); }; class QuadTree { Bounds2D bounds; QuadNode* root; public: int unique_item_count; int item_count; int node_count; int max_node_depth; int max_node_items; int getItemsAt(std::set& itemset, vec2 pos); void getLeavesInFrustum(std::set& nodeset, Frustum& frustum); int getItemsInFrustum(std::set& itemset, Frustum& frustum); int getItemsInBounds(std::set& itemset, Bounds2D& bounds) const; void visitItemsAt(const vec2 & pos, VisitFunctor & visit); void visitLeavesInFrustum(const Frustum & frustum, VisitFunctor & visit); void visitItemsInFrustum(const Frustum & frustum, VisitFunctor & visit); void visitItemsInBounds(const Bounds2D & bounds, VisitFunctor & visit); void addItem(QuadItem* item); void generateLists(); int drawNodesInFrustum(Frustum& frustum); QuadTree(Bounds2D bounds, int max_node_depth, int max_node_items); ~QuadTree(); void outline(); void outlineItems(); }; #endif gource-0.56/src/core/utf8/0000775002342600234260000000000015152463042015201 5ustar andrewcandrewcgource-0.56/src/core/utf8/utf8.h0000644002342600234260000000274715152463042016250 0ustar andrewcandrewc// Copyright 2006 Nemanja Trifunovic /* Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef UTF8_FOR_CPP_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_2675DCD0_9480_4c0c_B92A_CC14C027B731 #include "checked.h" #include "unchecked.h" #endif // header guard gource-0.56/src/core/utf8/unchecked.h0000644002342600234260000002535515152463042017313 0ustar andrewcandrewc// Copyright 2006 Nemanja Trifunovic /* Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef UTF8_FOR_CPP_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #include "core.h" namespace utf8 { namespace unchecked { template octet_iterator append(uint32_t cp, octet_iterator result) { if (cp < 0x80) // one octet *(result++) = static_cast(cp); else if (cp < 0x800) { // two octets *(result++) = static_cast((cp >> 6) | 0xc0); *(result++) = static_cast((cp & 0x3f) | 0x80); } else if (cp < 0x10000) { // three octets *(result++) = static_cast((cp >> 12) | 0xe0); *(result++) = static_cast(((cp >> 6) & 0x3f) | 0x80); *(result++) = static_cast((cp & 0x3f) | 0x80); } else { // four octets *(result++) = static_cast((cp >> 18) | 0xf0); *(result++) = static_cast(((cp >> 12) & 0x3f)| 0x80); *(result++) = static_cast(((cp >> 6) & 0x3f) | 0x80); *(result++) = static_cast((cp & 0x3f) | 0x80); } return result; } template output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, uint32_t replacement) { while (start != end) { octet_iterator sequence_start = start; internal::utf_error err_code = utf8::internal::validate_next(start, end); switch (err_code) { case internal::UTF8_OK : for (octet_iterator it = sequence_start; it != start; ++it) *out++ = *it; break; case internal::NOT_ENOUGH_ROOM: out = utf8::unchecked::append (replacement, out); start = end; break; case internal::INVALID_LEAD: out = utf8::unchecked::append (replacement, out); ++start; break; case internal::INCOMPLETE_SEQUENCE: case internal::OVERLONG_SEQUENCE: case internal::INVALID_CODE_POINT: out = utf8::unchecked::append (replacement, out); ++start; // just one replacement mark for the sequence while (start != end && utf8::internal::is_trail(*start)) ++start; break; } } return out; } template inline output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out) { static const uint32_t replacement_marker = utf8::internal::mask16(0xfffd); return utf8::unchecked::replace_invalid(start, end, out, replacement_marker); } template uint32_t next(octet_iterator& it) { uint32_t cp = utf8::internal::mask8(*it); typename std::iterator_traits::difference_type length = utf8::internal::sequence_length(it); switch (length) { case 1: break; case 2: it++; cp = ((cp << 6) & 0x7ff) + ((*it) & 0x3f); break; case 3: ++it; cp = ((cp << 12) & 0xffff) + ((utf8::internal::mask8(*it) << 6) & 0xfff); ++it; cp += (*it) & 0x3f; break; case 4: ++it; cp = ((cp << 18) & 0x1fffff) + ((utf8::internal::mask8(*it) << 12) & 0x3ffff); ++it; cp += (utf8::internal::mask8(*it) << 6) & 0xfff; ++it; cp += (*it) & 0x3f; break; } ++it; return cp; } template uint32_t peek_next(octet_iterator it) { return utf8::unchecked::next(it); } template uint32_t prior(octet_iterator& it) { while (utf8::internal::is_trail(*(--it))) ; octet_iterator temp = it; return utf8::unchecked::next(temp); } template void advance (octet_iterator& it, distance_type n) { const distance_type zero(0); if (n < zero) { // backward for (distance_type i = n; i < zero; ++i) utf8::unchecked::prior(it); } else { // forward for (distance_type i = zero; i < n; ++i) utf8::unchecked::next(it); } } template typename std::iterator_traits::difference_type distance (octet_iterator first, octet_iterator last) { typename std::iterator_traits::difference_type dist; for (dist = 0; first < last; ++dist) utf8::unchecked::next(first); return dist; } template octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result) { while (start != end) { uint32_t cp = utf8::internal::mask16(*start++); // Take care of surrogate pairs first if (utf8::internal::is_lead_surrogate(cp)) { uint32_t trail_surrogate = utf8::internal::mask16(*start++); cp = (cp << 10) + trail_surrogate + internal::SURROGATE_OFFSET; } result = utf8::unchecked::append(cp, result); } return result; } template u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result) { while (start < end) { uint32_t cp = utf8::unchecked::next(start); if (cp > 0xffff) { //make a surrogate pair *result++ = static_cast((cp >> 10) + internal::LEAD_OFFSET); *result++ = static_cast((cp & 0x3ff) + internal::TRAIL_SURROGATE_MIN); } else *result++ = static_cast(cp); } return result; } template octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result) { while (start != end) result = utf8::unchecked::append(*(start++), result); return result; } template u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result) { while (start < end) (*result++) = utf8::unchecked::next(start); return result; } // The iterator class template class iterator { octet_iterator it; public: typedef uint32_t value_type; typedef uint32_t* pointer; typedef uint32_t& reference; typedef std::ptrdiff_t difference_type; typedef std::bidirectional_iterator_tag iterator_category; iterator () {} explicit iterator (const octet_iterator& octet_it): it(octet_it) {} // the default "big three" are OK octet_iterator base () const { return it; } uint32_t operator * () const { octet_iterator temp = it; return utf8::unchecked::next(temp); } bool operator == (const iterator& rhs) const { return (it == rhs.it); } bool operator != (const iterator& rhs) const { return !(operator == (rhs)); } iterator& operator ++ () { ::std::advance(it, utf8::internal::sequence_length(it)); return *this; } iterator operator ++ (int) { iterator temp = *this; ::std::advance(it, utf8::internal::sequence_length(it)); return temp; } iterator& operator -- () { utf8::unchecked::prior(it); return *this; } iterator operator -- (int) { iterator temp = *this; utf8::unchecked::prior(it); return temp; } }; // class iterator } // namespace utf8::unchecked } // namespace utf8 #endif // header guard gource-0.56/src/core/utf8/cpp11.h0000644002342600234260000000635215152463042016302 0ustar andrewcandrewc// Copyright 2018 Nemanja Trifunovic /* Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef UTF8_FOR_CPP_a184c22c_d012_11e8_a8d5_f2801f1b9fd1 #define UTF8_FOR_CPP_a184c22c_d012_11e8_a8d5_f2801f1b9fd1 #include "checked.h" #include namespace utf8 { inline void append(char32_t cp, std::string& s) { append(uint32_t(cp), std::back_inserter(s)); } inline std::string utf16to8(const std::u16string& s) { std::string result; utf16to8(s.begin(), s.end(), std::back_inserter(result)); return result; } inline std::u16string utf8to16(const std::string& s) { std::u16string result; utf8to16(s.begin(), s.end(), std::back_inserter(result)); return result; } inline std::string utf32to8(const std::u32string& s) { std::string result; utf32to8(s.begin(), s.end(), std::back_inserter(result)); return result; } inline std::u32string utf8to32(const std::string& s) { std::u32string result; utf8to32(s.begin(), s.end(), std::back_inserter(result)); return result; } inline std::size_t find_invalid(const std::string& s) { std::string::const_iterator invalid = find_invalid(s.begin(), s.end()); return (invalid == s.end()) ? std::string::npos : (invalid - s.begin()); } inline bool is_valid(const std::string& s) { return is_valid(s.begin(), s.end()); } inline std::string replace_invalid(const std::string& s, char32_t replacement) { std::string result; replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement); return result; } inline std::string replace_invalid(const std::string& s) { std::string result; replace_invalid(s.begin(), s.end(), std::back_inserter(result)); return result; } inline bool starts_with_bom(const std::string& s) { return starts_with_bom(s.begin(), s.end()); } } // namespace utf8 #endif // header guard gource-0.56/src/core/utf8/checked.h0000644002342600234260000003016115152463042016737 0ustar andrewcandrewc// Copyright 2006-2016 Nemanja Trifunovic /* Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #include "core.h" #include namespace utf8 { // Base for the exceptions that may be thrown from the library class exception : public ::std::exception { }; // Exceptions that may be thrown from the library functions. class invalid_code_point : public exception { uint32_t cp; public: invalid_code_point(uint32_t codepoint) : cp(codepoint) {} virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Invalid code point"; } uint32_t code_point() const {return cp;} }; class invalid_utf8 : public exception { uint8_t u8; public: invalid_utf8 (uint8_t u) : u8(u) {} virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Invalid UTF-8"; } uint8_t utf8_octet() const {return u8;} }; class invalid_utf16 : public exception { uint16_t u16; public: invalid_utf16 (uint16_t u) : u16(u) {} virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Invalid UTF-16"; } uint16_t utf16_word() const {return u16;} }; class not_enough_room : public exception { public: virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Not enough space"; } }; /// The library API - functions intended to be called by the users template octet_iterator append(uint32_t cp, octet_iterator result) { if (!utf8::internal::is_code_point_valid(cp)) throw invalid_code_point(cp); if (cp < 0x80) // one octet *(result++) = static_cast(cp); else if (cp < 0x800) { // two octets *(result++) = static_cast((cp >> 6) | 0xc0); *(result++) = static_cast((cp & 0x3f) | 0x80); } else if (cp < 0x10000) { // three octets *(result++) = static_cast((cp >> 12) | 0xe0); *(result++) = static_cast(((cp >> 6) & 0x3f) | 0x80); *(result++) = static_cast((cp & 0x3f) | 0x80); } else { // four octets *(result++) = static_cast((cp >> 18) | 0xf0); *(result++) = static_cast(((cp >> 12) & 0x3f) | 0x80); *(result++) = static_cast(((cp >> 6) & 0x3f) | 0x80); *(result++) = static_cast((cp & 0x3f) | 0x80); } return result; } template output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, uint32_t replacement) { while (start != end) { octet_iterator sequence_start = start; internal::utf_error err_code = utf8::internal::validate_next(start, end); switch (err_code) { case internal::UTF8_OK : for (octet_iterator it = sequence_start; it != start; ++it) *out++ = *it; break; case internal::NOT_ENOUGH_ROOM: out = utf8::append (replacement, out); start = end; break; case internal::INVALID_LEAD: out = utf8::append (replacement, out); ++start; break; case internal::INCOMPLETE_SEQUENCE: case internal::OVERLONG_SEQUENCE: case internal::INVALID_CODE_POINT: out = utf8::append (replacement, out); ++start; // just one replacement mark for the sequence while (start != end && utf8::internal::is_trail(*start)) ++start; break; } } return out; } template inline output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out) { static const uint32_t replacement_marker = utf8::internal::mask16(0xfffd); return utf8::replace_invalid(start, end, out, replacement_marker); } template uint32_t next(octet_iterator& it, octet_iterator end) { uint32_t cp = 0; internal::utf_error err_code = utf8::internal::validate_next(it, end, cp); switch (err_code) { case internal::UTF8_OK : break; case internal::NOT_ENOUGH_ROOM : throw not_enough_room(); case internal::INVALID_LEAD : case internal::INCOMPLETE_SEQUENCE : case internal::OVERLONG_SEQUENCE : throw invalid_utf8(*it); case internal::INVALID_CODE_POINT : throw invalid_code_point(cp); } return cp; } template uint32_t peek_next(octet_iterator it, octet_iterator end) { return utf8::next(it, end); } template uint32_t prior(octet_iterator& it, octet_iterator start) { // can't do much if it == start if (it == start) throw not_enough_room(); octet_iterator end = it; // Go back until we hit either a lead octet or start while (utf8::internal::is_trail(*(--it))) if (it == start) throw invalid_utf8(*it); // error - no lead byte in the sequence return utf8::peek_next(it, end); } template void advance (octet_iterator& it, distance_type n, octet_iterator end) { const distance_type zero(0); if (n < zero) { // backward for (distance_type i = n; i < zero; ++i) utf8::prior(it, end); } else { // forward for (distance_type i = zero; i < n; ++i) utf8::next(it, end); } } template typename std::iterator_traits::difference_type distance (octet_iterator first, octet_iterator last) { typename std::iterator_traits::difference_type dist; for (dist = 0; first < last; ++dist) utf8::next(first, last); return dist; } template octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result) { while (start != end) { uint32_t cp = utf8::internal::mask16(*start++); // Take care of surrogate pairs first if (utf8::internal::is_lead_surrogate(cp)) { if (start != end) { uint32_t trail_surrogate = utf8::internal::mask16(*start++); if (utf8::internal::is_trail_surrogate(trail_surrogate)) cp = (cp << 10) + trail_surrogate + internal::SURROGATE_OFFSET; else throw invalid_utf16(static_cast(trail_surrogate)); } else throw invalid_utf16(static_cast(cp)); } // Lone trail surrogate else if (utf8::internal::is_trail_surrogate(cp)) throw invalid_utf16(static_cast(cp)); result = utf8::append(cp, result); } return result; } template u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result) { while (start < end) { uint32_t cp = utf8::next(start, end); if (cp > 0xffff) { //make a surrogate pair *result++ = static_cast((cp >> 10) + internal::LEAD_OFFSET); *result++ = static_cast((cp & 0x3ff) + internal::TRAIL_SURROGATE_MIN); } else *result++ = static_cast(cp); } return result; } template octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result) { while (start != end) result = utf8::append(*(start++), result); return result; } template u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result) { while (start < end) (*result++) = utf8::next(start, end); return result; } // The iterator class template class iterator { octet_iterator it; octet_iterator range_start; octet_iterator range_end; public: typedef uint32_t value_type; typedef uint32_t* pointer; typedef uint32_t& reference; typedef std::ptrdiff_t difference_type; typedef std::bidirectional_iterator_tag iterator_category; iterator () {} explicit iterator (const octet_iterator& octet_it, const octet_iterator& rangestart, const octet_iterator& rangeend) : it(octet_it), range_start(rangestart), range_end(rangeend) { if (it < range_start || it > range_end) throw std::out_of_range("Invalid utf-8 iterator position"); } // the default "big three" are OK octet_iterator base () const { return it; } uint32_t operator * () const { octet_iterator temp = it; return utf8::next(temp, range_end); } bool operator == (const iterator& rhs) const { if (range_start != rhs.range_start || range_end != rhs.range_end) throw std::logic_error("Comparing utf-8 iterators defined with different ranges"); return (it == rhs.it); } bool operator != (const iterator& rhs) const { return !(operator == (rhs)); } iterator& operator ++ () { utf8::next(it, range_end); return *this; } iterator operator ++ (int) { iterator temp = *this; utf8::next(it, range_end); return temp; } iterator& operator -- () { utf8::prior(it, range_start); return *this; } iterator operator -- (int) { iterator temp = *this; utf8::prior(it, range_start); return temp; } }; // class iterator } // namespace utf8 #if UTF_CPP_CPLUSPLUS >= 201103L // C++ 11 or later #include "cpp11.h" #endif // C++ 11 or later #endif //header guard gource-0.56/src/core/utf8/core.h0000644002342600234260000002526015152463042016305 0ustar andrewcandrewc// Copyright 2006 Nemanja Trifunovic /* Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef UTF8_FOR_CPP_CORE_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #define UTF8_FOR_CPP_CORE_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 #include // Determine the C++ standard version. // If the user defines UTF_CPP_CPLUSPLUS, use that. // Otherwise, trust the unreliable predefined macro __cplusplus #if !defined UTF_CPP_CPLUSPLUS #define UTF_CPP_CPLUSPLUS __cplusplus #endif #if UTF_CPP_CPLUSPLUS >= 201103L // C++ 11 or later #define UTF_CPP_OVERRIDE override #define UTF_CPP_NOEXCEPT noexcept #else // C++ 98/03 #define UTF_CPP_OVERRIDE #define UTF_CPP_NOEXCEPT throw() #endif // C++ 11 or later namespace utf8 { // The typedefs for 8-bit, 16-bit and 32-bit unsigned integers // You may need to change them to match your system. // These typedefs have the same names as ones from cstdint, or boost/cstdint typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; // Helper code - not intended to be directly called by the library users. May be changed at any time namespace internal { // Unicode constants // Leading (high) surrogates: 0xd800 - 0xdbff // Trailing (low) surrogates: 0xdc00 - 0xdfff const uint16_t LEAD_SURROGATE_MIN = 0xd800u; const uint16_t LEAD_SURROGATE_MAX = 0xdbffu; const uint16_t TRAIL_SURROGATE_MIN = 0xdc00u; const uint16_t TRAIL_SURROGATE_MAX = 0xdfffu; const uint16_t LEAD_OFFSET = 0xd7c0u; // LEAD_SURROGATE_MIN - (0x10000 >> 10) const uint32_t SURROGATE_OFFSET = 0xfca02400u; // 0x10000u - (LEAD_SURROGATE_MIN << 10) - TRAIL_SURROGATE_MIN // Maximum valid value for a Unicode code point const uint32_t CODE_POINT_MAX = 0x0010ffffu; template inline uint8_t mask8(octet_type oc) { return static_cast(0xff & oc); } template inline uint16_t mask16(u16_type oc) { return static_cast(0xffff & oc); } template inline bool is_trail(octet_type oc) { return ((utf8::internal::mask8(oc) >> 6) == 0x2); } template inline bool is_lead_surrogate(u16 cp) { return (cp >= LEAD_SURROGATE_MIN && cp <= LEAD_SURROGATE_MAX); } template inline bool is_trail_surrogate(u16 cp) { return (cp >= TRAIL_SURROGATE_MIN && cp <= TRAIL_SURROGATE_MAX); } template inline bool is_surrogate(u16 cp) { return (cp >= LEAD_SURROGATE_MIN && cp <= TRAIL_SURROGATE_MAX); } template inline bool is_code_point_valid(u32 cp) { return (cp <= CODE_POINT_MAX && !utf8::internal::is_surrogate(cp)); } template inline typename std::iterator_traits::difference_type sequence_length(octet_iterator lead_it) { uint8_t lead = utf8::internal::mask8(*lead_it); if (lead < 0x80) return 1; else if ((lead >> 5) == 0x6) return 2; else if ((lead >> 4) == 0xe) return 3; else if ((lead >> 3) == 0x1e) return 4; else return 0; } template inline bool is_overlong_sequence(uint32_t cp, octet_difference_type length) { if (cp < 0x80) { if (length != 1) return true; } else if (cp < 0x800) { if (length != 2) return true; } else if (cp < 0x10000) { if (length != 3) return true; } return false; } enum utf_error {UTF8_OK, NOT_ENOUGH_ROOM, INVALID_LEAD, INCOMPLETE_SEQUENCE, OVERLONG_SEQUENCE, INVALID_CODE_POINT}; /// Helper for get_sequence_x template utf_error increase_safely(octet_iterator& it, octet_iterator end) { if (++it == end) return NOT_ENOUGH_ROOM; if (!utf8::internal::is_trail(*it)) return INCOMPLETE_SEQUENCE; return UTF8_OK; } #define UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(IT, END) {utf_error ret = increase_safely(IT, END); if (ret != UTF8_OK) return ret;} /// get_sequence_x functions decode utf-8 sequences of the length x template utf_error get_sequence_1(octet_iterator& it, octet_iterator end, uint32_t& code_point) { if (it == end) return NOT_ENOUGH_ROOM; code_point = utf8::internal::mask8(*it); return UTF8_OK; } template utf_error get_sequence_2(octet_iterator& it, octet_iterator end, uint32_t& code_point) { if (it == end) return NOT_ENOUGH_ROOM; code_point = utf8::internal::mask8(*it); UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point = ((code_point << 6) & 0x7ff) + ((*it) & 0x3f); return UTF8_OK; } template utf_error get_sequence_3(octet_iterator& it, octet_iterator end, uint32_t& code_point) { if (it == end) return NOT_ENOUGH_ROOM; code_point = utf8::internal::mask8(*it); UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point = ((code_point << 12) & 0xffff) + ((utf8::internal::mask8(*it) << 6) & 0xfff); UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point += (*it) & 0x3f; return UTF8_OK; } template utf_error get_sequence_4(octet_iterator& it, octet_iterator end, uint32_t& code_point) { if (it == end) return NOT_ENOUGH_ROOM; code_point = utf8::internal::mask8(*it); UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point = ((code_point << 18) & 0x1fffff) + ((utf8::internal::mask8(*it) << 12) & 0x3ffff); UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point += (utf8::internal::mask8(*it) << 6) & 0xfff; UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) code_point += (*it) & 0x3f; return UTF8_OK; } #undef UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR template utf_error validate_next(octet_iterator& it, octet_iterator end, uint32_t& code_point) { if (it == end) return NOT_ENOUGH_ROOM; // Save the original value of it so we can go back in case of failure // Of course, it does not make much sense with i.e. stream iterators octet_iterator original_it = it; uint32_t cp = 0; // Determine the sequence length based on the lead octet typedef typename std::iterator_traits::difference_type octet_difference_type; const octet_difference_type length = utf8::internal::sequence_length(it); // Get trail octets and calculate the code point utf_error err = UTF8_OK; switch (length) { case 0: return INVALID_LEAD; case 1: err = utf8::internal::get_sequence_1(it, end, cp); break; case 2: err = utf8::internal::get_sequence_2(it, end, cp); break; case 3: err = utf8::internal::get_sequence_3(it, end, cp); break; case 4: err = utf8::internal::get_sequence_4(it, end, cp); break; } if (err == UTF8_OK) { // Decoding succeeded. Now, security checks... if (utf8::internal::is_code_point_valid(cp)) { if (!utf8::internal::is_overlong_sequence(cp, length)){ // Passed! Return here. code_point = cp; ++it; return UTF8_OK; } else err = OVERLONG_SEQUENCE; } else err = INVALID_CODE_POINT; } // Failure branch - restore the original value of the iterator it = original_it; return err; } template inline utf_error validate_next(octet_iterator& it, octet_iterator end) { uint32_t ignored; return utf8::internal::validate_next(it, end, ignored); } } // namespace internal /// The library API - functions intended to be called by the users // Byte order mark const uint8_t bom[] = {0xef, 0xbb, 0xbf}; template octet_iterator find_invalid(octet_iterator start, octet_iterator end) { octet_iterator result = start; while (result != end) { utf8::internal::utf_error err_code = utf8::internal::validate_next(result, end); if (err_code != internal::UTF8_OK) return result; } return result; } template inline bool is_valid(octet_iterator start, octet_iterator end) { return (utf8::find_invalid(start, end) == end); } template inline bool starts_with_bom (octet_iterator it, octet_iterator end) { return ( ((it != end) && (utf8::internal::mask8(*it++)) == bom[0]) && ((it != end) && (utf8::internal::mask8(*it++)) == bom[1]) && ((it != end) && (utf8::internal::mask8(*it)) == bom[2]) ); } } // namespace utf8 #endif // header guard gource-0.56/src/core/vectors.cpp0000644002342600234260000000071415152463042016504 0ustar andrewcandrewc#include "vectors.h" vec2 rotate_vec2(const vec2& v, float s, float c) { return vec2( v.x * c - v.y * s, v.x * s + v.y * c ); } vec2 normalise(const vec2& v) { float l = glm::length(v); if(l > 0.0) return v / l; return v; } vec3 normalise(const vec3& v) { float l = glm::length(v); if(l > 0.0) return v / l; return v; } vec4 normalise(const vec4& v) { float l = glm::length(v); if(l > 0.0) return v / l; return v; } gource-0.56/src/core/resource.cpp0000644002342600234260000000522115152463042016644 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "resource.h" #include ResourceManager::ResourceManager() { } std::string ResourceManager::getDir() { return resource_dir; } void ResourceManager::setDir(const std::string& resource_dir) { this->resource_dir = resource_dir; } void ResourceManager::purge() { //free all resources - should be called BEFORE SDL_QUIT ... for(std::map::iterator it= resources.begin(); it!=resources.end();it++) { delete it->second; } resources.clear(); } ResourceManager::~ResourceManager() { } bool ResourceManager::fileExists(const std::string& filename) { return boost::filesystem::is_regular_file(filename); } bool ResourceManager::dirExists(const std::string& dirname) { return boost::filesystem::is_directory(dirname); } void ResourceManager::release(Resource* resource) { Resource* r = resources[resource->resource_name]; if(r==0) return; //debugLog("decrementing ref count for %s\n", name.c_str()); r->deref(); if(r->refcount()<=0) { //debugLog("no refs to %s, deleting\n", name.c_str()); resources.erase(r->resource_name); //sufficient? delete r; } } gource-0.56/src/core/timezone.h0000644002342600234260000000032115152463042016310 0ustar andrewcandrewc#ifndef CORE_TIMEZONE_H #define CORE_TIMEZONE_H #include extern "C" { void init_tz(); void set_utc_tz(); void unset_utc_tz(); time_t mktime_utc(struct tm* timeinfo); }; #endif gource-0.56/src/core/shader.cpp0000644002342600234260000003220615152463042016266 0ustar andrewcandrewc#include "shader.h" /* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #ifndef USE_MGL_NAMESPACE #include "gl.h" #endif #include "logger.h" ShaderManager shadermanager; //ShaderManager ShaderManager::ShaderManager() { } Shader* ShaderManager::grab(const std::string& shader_prefix) { Resource* s = resources[shader_prefix]; if(s==0) { s = new Shader(shader_prefix); resources[shader_prefix] = s; } s->addref(); return (Shader*) s; } void ShaderManager::manage(Shader* shader) { if(shader->resource_name.empty()) { throw ShaderException("Cannot manage shader with no resource name"); } if(resources[shader->resource_name] != 0) { throw ShaderException(str(boost::format("A shader resource already exists under the name '%s'") % shader->resource_name)); } resources[shader->resource_name] = shader; shader->addref(); } void ShaderManager::unload() { for(std::map::iterator it= resources.begin(); it!=resources.end();it++) { ((Shader*)it->second)->unload(); } } void ShaderManager::reload(bool force) { for(std::map::iterator it= resources.begin(); it!=resources.end();it++) { ((Shader*)it->second)->reload(force); } } // ShaderPass ShaderPass::ShaderPass(Shader* parent, int shader_object_type, const std::string& shader_object_desc) : AbstractShaderPass(parent, shader_object_type, shader_object_desc) { } ShaderPass::~ShaderPass() { unload(); } void ShaderPass::unload() { if(shader_object!=0) glDeleteShader(shader_object); shader_object = 0; } void ShaderPass::attachTo(unsigned int program) { glAttachShader(program, shader_object); } void ShaderPass::checkError() { if(!shader_object) return; int compile_success; glGetShaderiv(shader_object, GL_COMPILE_STATUS, &compile_success); int info_log_length; glGetShaderiv(shader_object, GL_INFO_LOG_LENGTH, &info_log_length); const char* resource_desc = !parent->resource_name.empty() ? parent->resource_name.c_str() : "???"; if(info_log_length > 1) { char* info_log = new char[info_log_length]; glGetShaderInfoLog(shader_object, info_log_length, &info_log_length, info_log); std::string info_log_str(info_log); delete [] info_log; std::string context; if(!errorContext(info_log_str, context)) context = shader_object_source; if(!compile_success) { throw ShaderException(str(boost::format("%s shader '%s' failed to compile:\n%s\n%s") % shader_object_desc % resource_desc % info_log_str.c_str() % context), shader_object_source); } if(Logger::getDefault()->getLevel() == LOG_LEVEL_WARN) { warnLog("%s shader '%s':\n%s\n%s", shader_object_desc.c_str(), resource_desc, info_log_str.c_str(), context.c_str()); } return; } if(!compile_success) { throw ShaderException(str(boost::format("%s shader '%s' failed to compile") % shader_object_desc % resource_desc), shader_object_source); } } void ShaderPass::compile() { if(!shader_object) shader_object = glCreateShader(shader_object_type); if(source.empty()) return; shader_object_source.clear(); toString(shader_object_source); // apply subsitutions parent->applySubstitutions(shader_object_source); for(ShaderUniform* u: uniforms) { u->setModified(false); } //fprintf(stderr, "src:\n%s", shader_object_source.c_str()); const char* source_ptr = shader_object_source.c_str(); int source_len = shader_object_source.size(); glShaderSource(shader_object, 1, (const GLchar**) &source_ptr, &source_len); glCompileShader(shader_object); checkError(); } // Shader Shader::Shader(const std::string& prefix) : AbstractShader(prefix) { loadPrefix(); } Shader::Shader() : AbstractShader() { } Shader::~Shader() { clear(); } void Shader::unload() { if(program != 0) glDeleteProgram(program); program = 0; for(std::map::iterator it= uniforms.begin(); it!=uniforms.end();it++) { it->second->unload(); } } void Shader::compile() { if(program !=0) unload(); if(vertex_shader != 0) vertex_shader->compile(); if(geometry_shader != 0) geometry_shader->compile(); if(fragment_shader != 0) fragment_shader->compile(); if(compute_shader != 0) compute_shader->compile(); program = glCreateProgram(); } void Shader::link() { if(vertex_shader!=0) vertex_shader->attachTo(program); if(geometry_shader!=0) geometry_shader->attachTo(program); if(fragment_shader!=0) fragment_shader->attachTo(program); if(compute_shader!=0) compute_shader->attachTo(program); glLinkProgram(program); checkProgramError(); if(vertex_shader != 0) vertex_shader->unload(); if(geometry_shader != 0) geometry_shader->unload(); if(fragment_shader != 0) fragment_shader->unload(); if(compute_shader != 0) compute_shader->unload(); } void Shader::load() { compile(); link(); } void Shader::loadPrefix() { if(vertex_shader != 0) delete vertex_shader; vertex_shader = 0; if(fragment_shader != 0) delete fragment_shader; fragment_shader = 0; std::string shader_dir = shadermanager.getDir(); std::string vertex_file = shader_dir + prefix + std::string(".vert"); std::string fragment_file = shader_dir + prefix + std::string(".frag"); std::string geometry_file = shader_dir + prefix + std::string(".geom"); std::string compute_file = shader_dir + prefix + std::string(".comp"); if(shadermanager.fileExists(vertex_file)) { vertex_shader = new ShaderPass(this, GL_VERTEX_SHADER, "vertex"); vertex_shader->includeFile(vertex_file); } if(shadermanager.fileExists(fragment_file)) { fragment_shader = new ShaderPass(this, GL_FRAGMENT_SHADER, "fragment"); fragment_shader->includeFile(fragment_file); } if(shadermanager.fileExists(geometry_file)) { geometry_shader = new ShaderPass(this, GL_GEOMETRY_SHADER, "geometry"); geometry_shader->includeFile(geometry_file); } if(shadermanager.fileExists(compute_file)) { compute_shader = new ShaderPass(this, GL_COMPUTE_SHADER, "compute"); compute_shader->includeFile(compute_file); } if(!vertex_shader && !compute_shader) { // should have a vertex shader unless there is a compute shader throw ShaderException(str(boost::format("could not find a vertex shader with prefix '%s'") % prefix)); } load(); } void Shader::checkProgramError() { int link_success; glGetProgramiv(program, GL_LINK_STATUS, &link_success); int info_log_length; glGetProgramiv(program, GL_INFO_LOG_LENGTH, &info_log_length); const char* resource_desc = !resource_name.empty() ? resource_name.c_str() : "???"; if(info_log_length > 1) { char* info_log = new char[info_log_length]; glGetProgramInfoLog(program, info_log_length, &info_log_length, info_log); if(!link_success) { errorLog("shader '%s' linking error:\n%s", resource_desc, info_log); } else if(Logger::getDefault()->getLevel() == LOG_LEVEL_WARN) { warnLog("shader '%s' warning:\n%s", resource_desc, info_log); } delete [] info_log; } if(!link_success) { throw ShaderException(str(boost::format("shader '%s' failed to link") % resource_desc)); } } void Shader::bind() { glUseProgram(program); } void Shader::unbind() { glUseProgram(0); } int Shader::getUniformLocation(const std::string& uniform_name) { return glGetUniformLocation( program, uniform_name.c_str() ); } void Shader::applyUniform(ShaderUniform* u) { int location = u->getLocation(); if(location == -1) { if(Logger::getDefault()->getLevel() == LOG_LEVEL_PEDANTIC) { pedanticLog("shader '%s': invalid uniform '%s'", (!resource_name.empty() ? resource_name.c_str() : "???"), u->getName().c_str()); } return; } switch(u->getType()) { case SHADER_UNIFORM_INT: glUniform1i(location, ((IntShaderUniform*)u)->getValue()); break; case SHADER_UNIFORM_FLOAT: glUniform1f(location, ((FloatShaderUniform*)u)->getValue()); break; case SHADER_UNIFORM_BOOL: glUniform1i(location, ((BoolShaderUniform*)u)->getValue()); break; case SHADER_UNIFORM_SAMPLER_1D: glUniform1i(location, ((Sampler1DShaderUniform*)u)->getValue()); break; case SHADER_UNIFORM_SAMPLER_2D: glUniform1i(location, ((Sampler2DShaderUniform*)u)->getValue()); break; case SHADER_UNIFORM_SAMPLER_3D: glUniform1i(location, ((Sampler3DShaderUniform*)u)->getValue()); break; case SHADER_UNIFORM_VEC2: glUniform2fv(location, 1, glm::value_ptr(((Vec2ShaderUniform*)u)->getValue())); break; case SHADER_UNIFORM_VEC3: glUniform3fv(location, 1, glm::value_ptr(((Vec3ShaderUniform*)u)->getValue())); break; case SHADER_UNIFORM_VEC4: glUniform4fv(location, 1, glm::value_ptr(((Vec4ShaderUniform*)u)->getValue())); break; case SHADER_UNIFORM_MAT3: glUniformMatrix3fv(location, 1, 0, glm::value_ptr(((Mat3ShaderUniform*)u)->getValue())); break; case SHADER_UNIFORM_MAT4: glUniformMatrix4fv(location, 1, 0, glm::value_ptr(((Mat4ShaderUniform*)u)->getValue())); break; case SHADER_UNIFORM_INT_ARRAY: glUniform1iv(location, ((IntegerArrayShaderUniform*)u)->getLength(), &(((IntegerArrayShaderUniform*)u)->getValue()[0])); break; case SHADER_UNIFORM_FLOAT_ARRAY: glUniform1fv(location, ((FloatArrayShaderUniform*)u)->getLength(), &(((FloatArrayShaderUniform*)u)->getValue()[0])); break; case SHADER_UNIFORM_VEC2_ARRAY: glUniform2fv(location, ((Vec2ArrayShaderUniform*)u)->getLength(), glm::value_ptr(((Vec2ArrayShaderUniform*)u)->getValue()[0])); break; case SHADER_UNIFORM_VEC3_ARRAY: glUniform3fv(location, ((Vec3ArrayShaderUniform*)u)->getLength(), glm::value_ptr(((Vec3ArrayShaderUniform*)u)->getValue()[0])); break; case SHADER_UNIFORM_VEC4_ARRAY: glUniform4fv(location, ((Vec4ArrayShaderUniform*)u)->getLength(), glm::value_ptr(((Vec4ArrayShaderUniform*)u)->getValue()[0])); break; default: throw ShaderException(str(boost::format("unsupported uniform type %d") % u->getType())); break; } } AbstractShaderPass* Shader::grabShaderPass(unsigned int shader_object_type) { AbstractShaderPass* shader_pass = 0; switch(shader_object_type) { case GL_VERTEX_SHADER: if(!vertex_shader) vertex_shader = new ShaderPass(this, GL_VERTEX_SHADER, "vertex"); shader_pass = vertex_shader; break; case GL_GEOMETRY_SHADER: if(!geometry_shader) geometry_shader = new ShaderPass(this, GL_GEOMETRY_SHADER, "geometry"); shader_pass = geometry_shader; break; case GL_FRAGMENT_SHADER: if(!fragment_shader) fragment_shader = new ShaderPass(this, GL_FRAGMENT_SHADER, "fragment"); shader_pass = fragment_shader; break; case GL_COMPUTE_SHADER: if(!compute_shader) compute_shader = new ShaderPass(this, GL_COMPUTE_SHADER, "compute"); shader_pass = compute_shader; break; } return shader_pass; } gource-0.56/src/core/settings.cpp0000644002342600234260000003204615152463042016662 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "sdlapp.h" #include "settings.h" #include "regex.h" #include "timezone.h" #include "logger.h" Regex SDLAppSettings_rect_regex("^([0-9.]+)x([0-9.]+)$"); Regex SDLAppSettings_viewport_regex("^([0-9.]+)x([0-9.]+)(!)?$"); SDLAppSettings::SDLAppSettings() { setDisplayDefaults(); default_section_name = "settings"; //conf entries in other sections conf_sections["viewport"] = "display"; conf_sections["windowed"] = "display"; conf_sections["fullscreen"] = "display"; conf_sections["frameless"] = "display"; conf_sections["screen"] = "display"; conf_sections["window-position"] = "display"; conf_sections["multi-sampling"] = "display"; conf_sections["output-ppm-stream"] = "display"; conf_sections["output-framerate"] = "display"; conf_sections["transparent"] = "display"; conf_sections["no-vsync"] = "display"; conf_sections["high-dpi"] = "display"; //translate args arg_aliases["f"] = "fullscreen"; arg_aliases["w"] = "windowed"; arg_aliases["o"] = "output-ppm-stream"; arg_aliases["r"] = "output-framerate"; //boolean args arg_types["viewport"] = "string"; arg_types["windowed"] = "bool"; arg_types["screen"] = "int"; arg_types["window-position"] = "string"; arg_types["fullscreen"] = "bool"; arg_types["frameless"] = "bool"; arg_types["transparent"] = "bool"; arg_types["multi-sampling"] = "bool"; arg_types["no-vsync"] = "bool"; arg_types["high-dpi"] = "bool"; arg_types["output-ppm-stream"] = "string"; arg_types["output-framerate"] = "int"; } void SDLAppSettings::setDisplayDefaults() { display_width = 1024; #ifdef __APPLE__ display_height = 640; #else display_height = 768; #endif viewport_specified = false; fullscreen = false; frameless = false; multisample = false; transparent = false; resizable = true; vsync = true; high_dpi = false; screen = -1; window_x = -1; window_y = -1; output_ppm_filename = ""; output_framerate = 60; } void SDLAppSettings::exportDisplaySettings(ConfFile& conf) { ConfSection* section = new ConfSection("display"); char viewportbuff[256]; snprintf(viewportbuff, 256, "%dx%d%s", display_width, display_height, resizable ? "" : "!" ); std::string viewport = std::string(viewportbuff); section->setEntry(new ConfEntry("viewport", viewport)); if(fullscreen) section->setEntry(new ConfEntry("fullscreen", fullscreen)); else { if(frameless) section->setEntry(new ConfEntry("frameless", frameless)); if(window_x >= 0 && window_y >= 0) { char windowbuff[256]; snprintf(windowbuff, 256, "%dx%d", window_x, window_y); section->setEntry(new ConfEntry("window-position", std::string(windowbuff))); } } if(screen > 0) { section->setEntry(new ConfEntry("screen", screen)); } if(multisample) section->setEntry(new ConfEntry("multi-sampling", multisample)); if(!vsync) { section->setEntry(new ConfEntry("no-vsync", true)); } if(high_dpi) { section->setEntry(new ConfEntry("high-dpi", high_dpi)); } conf.setSection(section); } bool SDLAppSettings::parseRectangle(const std::string& value, int& x, int& y) { std::vector matches; if(SDLAppSettings_rect_regex.match(value, &matches)) { x = atoi(matches[0].c_str()); y = atoi(matches[1].c_str()); return true; } return false; } bool SDLAppSettings::parseViewport(const std::string& value, int& x, int& y, bool& no_resize) { std::vector matches; if(SDLAppSettings_viewport_regex.match(value, &matches)) { x = atoi(matches[0].c_str()); y = atoi(matches[1].c_str()); if(matches.size()>2) no_resize = true; if(x>0 && y>0) return true; } return false; } void SDLAppSettings::parseArgs(int argc, char *argv[], ConfFile& conffile, std::vector* files) { std::vector arguments; for (int i=1; i& arguments, ConfFile& conffile, std::vector* files) { std::map::iterator findit; for(int i=0;i1 && args[0] == '-') { args = args.substr(1, args.size()-1); is_option = true; } if(args.size()==0) continue; if(!is_option) { if(files!=0) { files->push_back(args); } continue; } //translate args with aliases if((findit = arg_aliases.find(args)) != arg_aliases.end()) { args = findit->second; } //NUMBERxNUMBER is a magic alias for viewport if(args.size()>1 && args.rfind("x") != std::string::npos) { std::string displayarg = args; int width = 0; int height = 0; bool no_resize = false; if(parseViewport(displayarg, width, height, no_resize)) { if(width>0 && height>0) { ConfSection* display_settings = conffile.getSection("display"); if(!display_settings) { display_settings = conffile.addSection("display"); } display_settings->setEntry("viewport", displayarg); continue; } } } //get type std::string arg_type; if((findit = arg_types.find(args)) != arg_types.end()) { arg_type = findit->second; } else { std::string unknown_option = std::string("unknown option ") + args; throw ConfFileException(unknown_option, "", 0); } //get value (or set to true for booleans) std::string argvalue; if(arg_type == "bool") argvalue = "true"; else if((i+1)second; } //command line options dont go into the conf file if(section_name == "command-line") { commandLineOption(args, argvalue); continue; } //get section(s) of this type ConfSectionList* sections = conffile.getSections(section_name); if(sections == 0) { conffile.addSection(section_name); sections = conffile.getSections(section_name); } //apply to section for(ConfSectionList::iterator it = sections->begin(); it != sections->end(); it++) { ConfSection* section = *it; if(arg_type == "multi-value") { section->addEntry(args, argvalue); } else { section->setEntry(args, argvalue); } } } } bool SDLAppSettings::parseDateTime(const std::string& datetime, time_t& timestamp) { // Support SQL style timestamps and also ISO 8601 https://www.w3.org/TR/NOTE-datetime // "2010-01-02" // "2010-01-02Z" // "2010-01-02 03:04" // "2010-01-02 03:04:05" // "2010-01-01 03:04:05+12" // "2010-01-01T03:04" // "2010-01-01T03:04:05" // "2010-01-01T03:04:05Z" // "2010-01-01T03:04:05+12" // "2010-01-01T00:04:05+5:30" // Sub-seconds are parsed but discarded // "2010-01-01T03:04:05.6789" Regex timestamp_regex("^(\\d{4})-(\\d{2})-(\\d{2})(?:[T ](\\d{1,2}):(\\d{2})(?::(\\d{2}(?:\\.\\d+)?))?)?(Z| ?([+-])(\\d{1,2})(?::?(\\d{2}))?)?$"); std::vector results; if(!timestamp_regex.match(datetime, &results) || results.size() < 3) return false; // for(int i=0;i= 5 && results[3] != "") { timeinfo.tm_hour = atoi(results[3].c_str()); timeinfo.tm_min = atoi(results[4].c_str()); if(results.size() >= 6) { timeinfo.tm_sec = atoi(results[5].c_str()); } } // optional: Zulu time aka GMT if(results.size() == 7 && results[6] == "Z") { timestamp = mktime_utc(&timeinfo); } // optional: timezone (optional) else if(results.size() >= 9) { int tz_hour = atoi(results[8].c_str()); int tz_min = 0; if(results.size() >= 10) { tz_min = atoi(results[9].c_str()); } int tz_offset = tz_hour * 3600 + tz_min * 60; if(results[7] == "-") { tz_offset = -tz_offset; } timestamp = mktime_utc(&timeinfo); // debugLog("tz_hour = %d", tz_hour); // debugLog("tz_min = %d", tz_min); // debugLog("tz_offset = %d", tz_offset); timestamp -= tz_offset; } else { timestamp = mktime(&timeinfo); } //debugLog("timestamp = %lld", timestamp); return true; } void SDLAppSettings::importDisplaySettings(ConfFile& conffile) { setDisplayDefaults(); ConfSection* display_settings = conffile.getSection("display"); if(display_settings == 0) return; ConfEntry* entry = 0; viewport_specified = false; if((entry = display_settings->getEntry("viewport")) != 0) { std::string viewport = entry->getString(); int width = 0; int height = 0; bool no_resize = false; if(parseViewport(viewport, width, height, no_resize)) { display_width = width; display_height = height; if(no_resize) resizable = false; viewport_specified = true; } else { conffile.invalidValueException(entry); } } if((entry = display_settings->getEntry("window-position")) != 0) { std::string window_position = entry->getString(); if(!parseRectangle(window_position, window_x, window_y)) { conffile.invalidValueException(entry); } } if((entry = display_settings->getEntry("screen")) != 0) { screen = entry->getInt(); if(screen < 1) { conffile.invalidValueException(entry); } } if(display_settings->getBool("multi-sampling")) { multisample = true; } if(display_settings->getBool("fullscreen")) { fullscreen = true; } if(display_settings->getBool("windowed")) { fullscreen = false; } if(display_settings->getBool("frameless") && !fullscreen) { frameless = true; } // default to use desktop resolution for fullscreen unless specified if(fullscreen && !viewport_specified) { display_width = 0; display_height = 0; } if(display_settings->getBool("transparent")) { transparent = true; } if(display_settings->getBool("no-vsync")) { vsync = false; } if(display_settings->getBool("high-dpi")) { high_dpi = true; } if((entry = display_settings->getEntry("output-ppm-stream")) != 0) { if(!entry->hasValue()) { conffile.entryException(entry, "specify ppm output file or '-' for stdout"); } output_ppm_filename = entry->getString(); } if((entry = display_settings->getEntry("output-framerate")) != 0) { if(!entry->hasValue()) { conffile.entryException(entry, "specify framerate (25,30,60)"); } output_framerate = entry->getInt(); if( output_framerate != 25 && output_framerate != 30 && output_framerate != 60) { conffile.entryException(entry, "supported framerates are 25,30,60"); } } } gource-0.56/src/core/settings.h0000644002342600234260000000410715152463042016324 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef SDLAPP_SETTINGS_H #define SDLAPP_SETTINGS_H #include "conffile.h" #include #include #include class SDLAppSettings { protected: std::string default_section_name; std::map arg_types; std::map arg_aliases; std::map conf_sections; virtual void commandLineOption(const std::string& name, const std::string& value) {} bool parseRectangle(const std::string& value, int& x, int& y); bool parseViewport(const std::string& value, int& x, int& y, bool& no_resize); public: int display_width; int display_height; int window_x; int window_y; int screen; bool viewport_specified; bool multisample; bool fullscreen; bool frameless; bool transparent; bool resizable; bool vsync; bool high_dpi; std::string output_ppm_filename; int output_framerate; SDLAppSettings(); static bool parseDateTime(const std::string& datetime, time_t& timestamp); void parseArgs(int argc, char *argv[], ConfFile& conffile, std::vector* files = 0); void parseArgs(const std::vector& args, ConfFile& conffile, std::vector* files = 0); void exportDisplaySettings(ConfFile& conf); void importDisplaySettings(ConfFile& conf); void setDisplayDefaults(); }; #endif gource-0.56/src/core/regex.h0000644002342600234260000000513615152463042015601 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef REGEX_H #define REGEX_H #define PCRE2_CODE_UNIT_WIDTH 8 #include #include #include #include class RegexCompilationException : public std::exception { protected: std::string regex; public: RegexCompilationException(std::string& regex) : regex(regex) {} virtual ~RegexCompilationException() throw () {}; virtual const char* what() const throw() { return regex.c_str(); } }; class Regex { protected: pcre2_code *re; bool valid; int replaceOffset(std::string& str, const std::string& replacement_str, int offset=0); int matchOffset(const std::string& str, std::vector* results = 0, int offset=0); public: Regex(std::string regex, bool test = false); Regex(const Regex& regex); ~Regex(); bool match(const std::string& str, std::vector* results = 0); bool matchAll(const std::string& str, std::vector* results = 0); bool replace(std::string& str, const std::string& replacement_str); bool replaceAll(std::string& str, const std::string& replacement_str); bool isValid() const; }; #endif gource-0.56/src/core/vbo.h0000644002342600234260000000747015152463042015260 0ustar andrewcandrewc/* Copyright (c) 2011 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef CORE_VBO_H #define CORE_VBO_H #include #include #include "gl.h" #include "vectors.h" #include "logger.h" class VBO { public: GLuint id; GLenum buffer_type; int capacity; VBO(GLenum buffer_type = GL_ARRAY_BUFFER) : buffer_type(buffer_type) { capacity = 0; id = 0; } ~VBO() { unload(); } void init() { if(!id) glGenBuffers(1, &id); } void unload() { capacity = 0; if(id != 0) { glDeleteBuffers(1, &id); id = 0; } } void bind() { if(!id) init(); glBindBuffer(buffer_type, id); } void buffer(int item_count, int item_size, int item_capacity, GLvoid* data, GLenum usage) { bind(); if(capacity < item_count) { capacity = item_capacity; glBufferData(buffer_type, capacity * item_size, data, usage); } else { glBufferSubData(buffer_type, 0, item_count * item_size, data); } unbind(); } void unbind() { glBindBuffer(buffer_type, 0); } }; //note this should be 32 bytes (8x4 bytes) class quadbuf_vertex { public: quadbuf_vertex() {}; quadbuf_vertex(const vec2& pos, const vec4& colour, const vec2& texcoord) : pos(pos), colour(colour), texcoord(texcoord) {}; vec2 pos; vec4 colour; vec2 texcoord; }; //maintain ranges corresponding to each texture class quadbuf_tex { public: quadbuf_tex() {}; quadbuf_tex(int start_index, GLuint textureid) : start_index(start_index), textureid(textureid) {}; int start_index; GLuint textureid; }; class quadbuf { quadbuf_vertex* data; int vertex_capacity; std::vector textures; VBO buf; int vertex_count; void resize(int new_size); public: quadbuf(int data_size = 0); ~quadbuf(); void unload(); void reset(); size_t vertices(); size_t capacity(); size_t texture_changes(); void add(GLuint textureid, const vec2& pos, const vec2& dims, const vec4& colour); void add(GLuint textureid, const vec2& pos, const vec2& dims, const vec4& colour, const vec4& texcoord); void add(GLuint textureid, const quadbuf_vertex& v1, const quadbuf_vertex& v2, const quadbuf_vertex& v3, const quadbuf_vertex& v4); void update(); void draw(); }; #endif gource-0.56/src/core/sdlapp.h0000644002342600234260000001050115152463042015742 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SDLAPP_H #define SDLAPP_H #include "SDL.h" #ifdef _WIN32 #ifdef _WIN32_WINNT #undef _WIN32_WINNT #endif #define _WIN32_WINNT 0x0501 #include "windows.h" #endif #include "gl.h" #include #include #include extern std::string gSDLAppConfDir; extern std::string gSDLAppResourceDir; extern std::string gSDLAppPathSeparator; extern std::string gSDLAppTitle; extern std::string gSDLAppExec; void SDLAppInfo(std::string msg); void SDLAppQuit(std::string error); void SDLAppInit(std::string apptitle, std::string execname, std::string exepath = ""); std::string SDLAppAddSlash(std::string path); void SDLAppParseArgs(int argc, char *argv[], int* xres, int* yres, bool* fullscreen, std::vector* otherargs = 0); class SDLAppException : public std::exception { protected: std::string message; bool showhelp; public: SDLAppException(const char* str, ...) : showhelp(false) { va_list vl; char msg[65536]; va_start(vl, str); vsnprintf(msg, 65536, str, vl); va_end(vl); message = std::string(msg); } SDLAppException(std::string message) : showhelp(false), message(message) {} ~SDLAppException() throw () {}; bool showHelp() const { return showhelp; } void setShowHelp(bool showhelp) { this->showhelp = showhelp; }; virtual const char* what() const throw() { return message.c_str(); } }; class SDLApp { int frame_count; int fps_updater; int return_code; void updateFramerate(); protected: int min_delta_msec; bool appFinished; void stop(int return_code); virtual bool handleEvent(SDL_Event& event); public: float fps; SDLApp(); virtual ~SDLApp() {}; #ifdef USE_X11 static void initX11ClipboardEventFilter(); static int X11ClipboardEventFilter(const SDL_Event *event); #endif #ifdef _WIN32 static HWND console_window; static bool existing_console; static void initConsole(); static void showConsole(bool show); static void resizeConsole(int height); #endif int run(); static bool getClipboardText(std::string& text); static void setClipboardText(const std::string& text); virtual void resize(int width, int height) {}; virtual void update(float t, float dt) {}; virtual void init() {}; virtual void logic(float t, float dt) {}; virtual void draw(float t, float dt) {}; virtual void quit() { appFinished = true; }; virtual void mouseMove(SDL_MouseMotionEvent *e) {}; virtual void mouseClick(SDL_MouseButtonEvent *e) {}; virtual void keyPress(SDL_KeyboardEvent *e) {}; #if SDL_VERSION_ATLEAST(2,0,0) virtual void textInput(SDL_TextInputEvent* e) {}; virtual void textEdit(SDL_TextEditingEvent* e) {}; virtual void mouseWheel(SDL_MouseWheelEvent *e) {}; #endif int returnCode(); bool isFinished(); }; #endif gource-0.56/src/core/bounds.h0000644002342600234260000001213215152463042015753 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef BOUNDS_H #define BOUNDS_H #include "display.h" #include "vectors.h" class Bounds2D { public: vec2 min; vec2 max; bool first; vec2 centre() const { return min + (max - min) * 0.5f; } float width() const { return max.x - min.x; } float height() const { return max.y - min.y; } float area() const { return width() * height(); } void reset() { min = vec2(0.0, 0.0); max = vec2(0.0, 0.0); first = true; } Bounds2D() { reset(); } Bounds2D(const vec2& min, const vec2& max) { reset(); update(min); update(max); } void update(const Bounds2D& bounds) { update(bounds.min); update(bounds.max); } void set(const Bounds2D& bounds) { reset(); update(bounds); } void set(vec2 point) { reset(); update(point); } void set(const vec2& a, const vec2& b) { reset(); update(a); update(b); } void update(const vec2& point) { if(first) { min = point; max = point; first=false; return; } if(min.x > point.x) min.x = point.x; if(min.y > point.y) min.y = point.y; if(max.x < point.x) max.x = point.x; if(max.y < point.y) max.y = point.y; } bool contains(const vec2& point) const { if(first) return false; if(min.x<=point.x && min.y<=point.y && max.x >= point.x && max.y >= point.y) return true; return false; } bool overlaps(const Bounds2D & b) const { if(max.y < b.min.y) return false; if(min.y > b.max.y) return false; if(max.x < b.min.x) return false; if(min.x > b.max.x) return false; return true; } void draw() const{ glBegin(GL_LINE_STRIP); glVertex2fv(glm::value_ptr(min)); glVertex2f(max.x, min.y); glVertex2fv(glm::value_ptr(max)); glVertex2f(min.x, max.y); glVertex2fv(glm::value_ptr(min)); glEnd(); } }; class Bounds3D { public: vec3 min; vec3 max; bool first; void reset() { min = vec3(0.0, 0.0, 0.0); max = vec3(0.0, 0.0, 0.0); first = true; } Bounds3D() { reset(); } Bounds3D(vec3 min, vec3 max) { reset(); update(min); update(max); } float width() { return max.x - min.x; } float height() { return max.y - min.y; } float depth() { return max.z - min.z; } float area() { return width() * height() * depth(); } vec3 centre() { return min + ((max-min) * 0.5f); } void update(vec3 point) { if(first) { min = point; max = point; first = false; return; } if(min.x > point.x) min.x = point.x; if(min.y > point.y) min.y = point.y; if(min.z > point.z) min.z = point.z; if(max.x < point.x) max.x = point.x; if(max.y < point.y) max.y = point.y; if(max.z < point.z) max.z = point.z; } bool contains(vec3& point) { if(first) return false; if(min.x<=point.x && min.y<=point.y && min.z<=point.z && max.x >= point.x && max.y >= point.y && max.z >= point.z) return true; return false; } void draw() { glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glBegin(GL_LINES); glVertex3fv(glm::value_ptr(min)); glVertex3fv(glm::value_ptr(max)); glEnd(); } }; #endif gource-0.56/src/core/stringhash.h0000644002342600234260000000343515152463042016641 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef STRINGHASH_H #define STRINGHASH_H #include #include "vectors.h" //basic string hash algorithm int stringHash(const std::string& str); vec2 vec2Hash(const std::string& str); vec3 vec3Hash(const std::string& str); vec3 colourHash(const std::string& str); extern int gStringHashSeed; #endif gource-0.56/src/core/seeklog.cpp0000664002342600234260000001233415152463042016453 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "seeklog.h" #include "sdlapp.h" #ifndef _MSC_VER #include #endif long long gSeekLogMaxBufferSize = 104857600; //StreamLog StreamLog::StreamLog() { this->stream = &std::cin; fcntl_fail = false; #ifdef _WIN32 stdin_handle = GetStdHandle(STD_INPUT_HANDLE); #else int ret = fcntl(STDIN_FILENO, F_GETFL, 0); if (fcntl (STDIN_FILENO, F_SETFL, ret | O_NONBLOCK) < 0) { debugLog("fcntl(stdin) failed"); fcntl_fail = true; } #endif } StreamLog::~StreamLog() { } bool StreamLog::getNextLine(std::string& line) { //try and fix the stream if(isFinished()) stream->clear(); #ifdef _WIN32 DWORD available_bytes; if (!PeekNamedPipe(stdin_handle, 0, 0, 0, &available_bytes, 0)) return false; if(available_bytes==0) return false; #endif std::getline(*stream, line); //remove carriage returns if (line.size() > 0 && line[line.size()-1] == '\r') { line.resize(line.size() - 1); } if(isFinished()) { return false; } return true; } bool StreamLog::isFinished() { if(fcntl_fail || stream->fail() || stream->eof()) { return true; } return false; } // SeekLog SeekLog::SeekLog(std::string logfile) { this->logfile = logfile; this->stream = 0; if(!readFully()) { throw SeekLogException(logfile); } } bool SeekLog::readFully() { if(stream!=0) delete stream; std::ifstream* file = new std::ifstream(logfile.c_str(), std::ios::in | std::ios::binary | std::ios::ate); file_size = file->tellg(); if(!file->is_open()) { delete file; return false; } file->seekg (0, std::ios::beg); //dont load into memory if larger than if(file_size > gSeekLogMaxBufferSize) { stream = file; return true; } //buffer entire file into memory char* filebuffer = new char[file_size+1]; if(!file->read(filebuffer, file_size)) { file->close(); delete file; delete [] filebuffer; return false; } filebuffer[file_size] = '\0'; file->close(); delete file; stream = new std::istringstream(std::string(filebuffer)); delete[] filebuffer; return true; } SeekLog::~SeekLog() { if(stream!=0) delete stream; } float SeekLog::getPercent() { return current_percent; } void SeekLog::setPointer(std::streampos pointer) { stream->clear(); stream->seekg(pointer); } std::streampos SeekLog::getPointer() { return stream->tellg(); } void SeekLog::seekTo(float percent) { std::streampos mem_offset = (std::streampos) (percent * file_size); setPointer(mem_offset); //throw away end of line if(mem_offset != (std::streampos)0) { std::string eol; getNextLine(eol); } } bool SeekLog::getNextLine(std::string& line) { //try and fix the stream if(isFinished()) stream->clear(); std::getline(*stream, line); //remove carriage returns if (line.size() > 0 && line[line.size()-1] == '\r') { line.resize(line.size() - 1); } if(stream->fail()) { return false; } current_percent = (float) stream->tellg() / file_size; //debugLog("current_percent = %.2f\n", current_percent); return true; } // temporarily move the file pointer to get a line somewhere else in the file bool SeekLog::getNextLineAt(std::string& line, float percent) { std::streampos currpointer = getPointer(); seekTo(percent); bool success = getNextLine(line); //set the pointer back setPointer(currpointer); return success; } bool SeekLog::isFinished() { bool finished = false; if(stream->fail() || stream->eof()) { //debugLog("stream is finished"); finished=true; } return finished; } gource-0.56/src/core/sdlapp.cpp0000644002342600234260000003035315152463042016304 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "sdlapp.h" #include "display.h" #include "logger.h" #include "SDL_syswm.h" #ifndef _MSC_VER #include #endif std::string gSDLAppResourceDir; std::string gSDLAppConfDir; #ifdef _WIN32 std::string gSDLAppPathSeparator = "\\"; #else std::string gSDLAppPathSeparator = "/"; #endif std::string gSDLAppTitle = "SDL App"; std::string gSDLAppExec = "sdlapp"; #ifdef _WIN32 HWND SDLApp::console_window = 0; bool SDLApp::existing_console = false; void SDLApp::showConsole(bool show) { if(!SDLApp::console_window) return; ShowWindow( SDLApp::console_window, show); } void SDLApp::initConsole() { if(SDLApp::console_window != 0) return; SDLApp::console_window = GetConsoleWindow(); // check if this is a new console or not CONSOLE_SCREEN_BUFFER_INFO buffer_info; if(GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), &buffer_info )) { existing_console = !(buffer_info.dwCursorPosition.X==0 && buffer_info.dwCursorPosition.Y==0); // assume TERM env implies this is an existing terminal } else if(getenv("TERM") != 0) { existing_console = true; } // don't customize the console unless it was created for this program if(existing_console) return; //disable the close button so the user cant crash the application HMENU hm = GetSystemMenu(SDLApp::console_window, false); DeleteMenu(hm, SC_CLOSE, MF_BYCOMMAND); //set title char consoleTitle[512]; int console_suffix = 0; sprintf(consoleTitle, "%s Console", gSDLAppTitle.c_str()); while(FindWindow(0, consoleTitle)) { sprintf(consoleTitle, "%s Console %d", gSDLAppTitle.c_str(), ++console_suffix); } SetConsoleTitle(consoleTitle); } void SDLApp::resizeConsole(int height) { if(SDLApp::console_window !=0 && !existing_console) { RECT windowRect; if(GetWindowRect(SDLApp::console_window, &windowRect)) { float width = windowRect.right - windowRect.left; MoveWindow(SDLApp::console_window,windowRect.left,windowRect.top,width,height,true); } } } #endif std::string SDLAppAddSlash(std::string path) { //append slash unless the path is empty if(path.size() && path[path.size()-1] != gSDLAppPathSeparator[0]) { path += gSDLAppPathSeparator; } return path; } //info message void SDLAppInfo(std::string msg) { #ifdef _WIN32 SDLApp::showConsole(true); #endif printf("%s\n", msg.c_str()); #ifdef _WIN32 if(!SDLApp::existing_console) { printf("\nPress Enter\n"); getchar(); } #endif exit(0); } //display error only void SDLAppQuit(std::string error) { SDL_Quit(); #ifdef _WIN32 SDLApp::showConsole(true); #endif fprintf(stderr, "%s: %s\n", gSDLAppExec.c_str(), error.c_str()); fprintf(stderr, "Try '%s --help' for more information.\n\n", gSDLAppExec.c_str()); #ifdef _WIN32 if(!SDLApp::existing_console) { fprintf(stderr, "Press Enter\n"); getchar(); } #endif exit(1); } bool SDLApp::getClipboardText(std::string& text) { #if SDL_VERSION_ATLEAST(2,0,0) char* clipboard_text = SDL_GetClipboardText(); if(clipboard_text!=0) { text = std::string(clipboard_text); } else { text.resize(0); } return true; #else return false; #endif } void SDLApp::setClipboardText(const std::string& text) { #if SDL_VERSION_ATLEAST(2,0,0) SDL_SetClipboardText(text.c_str()); #endif } void SDLAppInit(std::string apptitle, std::string execname, std::string exepath) { gSDLAppTitle = apptitle; gSDLAppExec = execname; std::string conf_dir = ""; std::string resource_dir = "data/"; std::string fonts_dir = "data/fonts/"; std::string shaders_dir = "data/shaders/"; #ifdef _WIN32 char szAppPath[MAX_PATH]; GetModuleFileName(0, szAppPath, MAX_PATH); // Extract directory std::string winexepath = std::string(szAppPath); int pos = winexepath.rfind("\\"); std::string path = winexepath.substr(0, pos+1); conf_dir = path + std::string("\\"); resource_dir = path + std::string("\\data\\"); fonts_dir = path + std::string("\\data\\fonts\\"); shaders_dir = path + std::string("\\data\\shaders\\"); #else //get working directory char cwd_buff[1024]; if(getcwd(cwd_buff, 1024) == cwd_buff) { conf_dir = std::string(cwd_buff) + std::string("/"); resource_dir = std::string(cwd_buff) + std::string("/") + resource_dir; fonts_dir = std::string(cwd_buff) + std::string("/") + fonts_dir; shaders_dir = std::string(cwd_buff) + std::string("/") + shaders_dir; } #endif #ifdef SDLAPP_CONF_DIR if (ResourceManager::dirExists(SDLAPP_CONF_DIR)) { conf_dir = SDLAPP_CONF_DIR; } #endif #ifdef SDLAPP_RESOURCE_DIR if (ResourceManager::dirExists(SDLAPP_RESOURCE_DIR)) { resource_dir = SDLAPP_RESOURCE_DIR; fonts_dir = SDLAPP_RESOURCE_DIR + std::string("/fonts/"); shaders_dir = SDLAPP_RESOURCE_DIR + std::string("/shaders/"); } else if(!exepath.empty()) { // make resource path relative to the directory of the executable // if the resource directory doesn't exist size_t pos = exepath.rfind("/"); if (pos != std::string::npos) { std::string path = exepath.substr(0, pos+1); resource_dir = path + std::string("data/"); fonts_dir = path + std::string("data/fonts/"); shaders_dir = path + std::string("data/shaders/"); } } #endif #ifdef SDLAPP_FONT_DIR if (ResourceManager::dirExists(SDLAPP_FONT_DIR)) { fonts_dir = SDLAPP_FONT_DIR; } #endif resource_dir = SDLAppAddSlash(resource_dir); conf_dir = SDLAppAddSlash(conf_dir); fonts_dir = SDLAppAddSlash(fonts_dir); shaders_dir = SDLAppAddSlash(shaders_dir); texturemanager.setDir(resource_dir); fontmanager.setDir(fonts_dir); shadermanager.setDir(shaders_dir); gSDLAppResourceDir = resource_dir; gSDLAppConfDir = conf_dir; gSDLAppShaderDir = shaders_dir; fontmanager.init(); } void SDLAppParseArgs(int argc, char *argv[], int* xres, int* yres, bool* fullscreen, std::vector* otherargs) { for (int i=1; i1 && args[0] == '-' && args.rfind("x") != std::string::npos) { std::string displayarg = args; while(displayarg.size()>1 && displayarg[0] == '-') { displayarg = displayarg.substr(1, displayarg.size()-1); } size_t x = displayarg.rfind("x"); if(x != std::string::npos) { std::string widthstr = displayarg.substr(0, x); std::string heightstr = displayarg.substr(x+1); int width = atoi(widthstr.c_str()); int height = atoi(heightstr.c_str()); if(width>0 && height>0) { debugLog("w=%d, h=%d",width,height); *xres = width; *yres = height; continue; } } } // non display argument if(otherargs != 0) { otherargs->push_back(args); } } } SDLApp::SDLApp() { fps=0; return_code=0; appFinished=false; min_delta_msec = 8; } void SDLApp::updateFramerate() { if(fps_updater>0) { fps = (float)frame_count / (float)fps_updater * 1000.0f; } else { fps = 0; } fps_updater = 0; frame_count = 0; } bool SDLApp::isFinished() { return appFinished; } int SDLApp::returnCode() { return return_code; } void SDLApp::stop(int return_code) { this->return_code = return_code; appFinished=true; } bool SDLApp::handleEvent(SDL_Event& event) { switch(event.type) { case SDL_QUIT: quit(); break; case SDL_MOUSEMOTION: { SDL_MouseMotionEvent motion = event.motion; motion.x *= display.viewport_dpi_ratio.x; motion.y *= display.viewport_dpi_ratio.y; motion.xrel *= display.viewport_dpi_ratio.x; motion.yrel *= display.viewport_dpi_ratio.y; mouseMove(&motion); break; } #if SDL_VERSION_ATLEAST(2,0,0) case SDL_TEXTINPUT: textInput(&event.text); break; case SDL_TEXTEDITING: textEdit(&event.edit); break; case SDL_MOUSEWHEEL: mouseWheel(&event.wheel); break; case SDL_WINDOWEVENT: if(event.window.event == SDL_WINDOWEVENT_RESIZED) { resize(event.window.data1, event.window.data2); } break; #else case SDL_VIDEORESIZE: resize(event.resize.w, event.resize.h); break; #endif case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: { SDL_MouseButtonEvent button = event.button; button.x *= display.viewport_dpi_ratio.x; button.y *= display.viewport_dpi_ratio.y; mouseClick(&button); break; } case SDL_KEYDOWN: case SDL_KEYUP: keyPress(&event.key); break; default: return false; } return true; } int SDLApp::run() { Uint32 msec=0, last_msec=0, buffer_msec=0, total_msec = 0; frame_count = 0; fps_updater = 0; if(!appFinished) init(); msec = SDL_GetTicks(); last_msec = msec; #if SDL_VERSION_ATLEAST(2,0,0) //text input seems to be enabled by default, turn it off SDL_StopTextInput(); #endif while(!appFinished) { last_msec = msec; msec = SDL_GetTicks(); Uint32 delta_msec = msec - last_msec; // cant have delta ticks be less than 8ms buffer_msec += delta_msec; if(buffer_msec < min_delta_msec) { SDL_Delay(1); continue; } delta_msec = buffer_msec; buffer_msec =0; //determine time elapsed since last time we were here total_msec += delta_msec; float t = total_msec / 1000.0f; float dt = delta_msec / 1000.0f; fps_updater += delta_msec; //update framerate if a second has passed if (fps_updater >= 1000) { updateFramerate(); } //process new events SDL_Event event; while ( SDL_PollEvent(&event) ) { handleEvent(event); } update(t, dt); //update display display.update(); frame_count++; } return return_code; } gource-0.56/src/core/tga.cpp0000644002342600234260000002006615152463042015574 0ustar andrewcandrewc/* Copyright (c) 2012 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "tga.h" #include "display.h" #include TGAWriter::TGAWriter(int components) : components(components) { rle = true; out = 0; rle_count = 0; raw_count = 0; } void TGAWriter::writeRLE(int pixel_count, const char* pixel) { rle_count += pixel_count; while(pixel_count > 0) { int write_count = std::min(128, pixel_count); unsigned char counter_byte = (write_count-1) | 0x80; out->write((char*)&counter_byte, 1); out->write(pixel, components); pixel_count -= write_count; } } void TGAWriter::writeRaw(std::vector& buffer, int start, int pixel_count) { raw_count += pixel_count; int written = 0; while(pixel_count > 0) { int write_count = std::min(128, pixel_count); char counter_byte = write_count-1; out->write((char*)&counter_byte, 1); for(int i=0; i < write_count; i++) { out->write(&(buffer[start+(i+written)*components]), components); } pixel_count -= write_count; written += write_count; } } bool TGAWriter::open(const std::string& filename) { out = new std::ofstream(filename.c_str(), std::ios::out | std::ios::binary); if(out->fail()) { delete out; out = 0; return false; } return true; } void TGAWriter::close() { ((std::fstream*)out)->close(); } void TGAWriter::setOutputStream(std::ostream* out) { this->out = out; } void TGAWriter::screenshot(const std::string& filename) { if(!open(filename)) return; std::vector buffer; buffer.resize(display.width * display.height * components); capture(buffer); writeTGA(buffer); close(); } void TGAWriter::writeHeader() { char image_type = rle ? 10 : 2; const char tga_header[12] = { 0, 0, image_type, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; short width = display.width; short height = display.height; char imagedescriptor = components==4 ? 8 : 0; char bpp = components * 8; out->write(tga_header, 12); out->write((char*)&width, sizeof(short)); out->write((char*)&height, sizeof(short)); out->write(&bpp, 1); out->write(&imagedescriptor, 1); } void TGAWriter::capture(std::vector& buffer) { GLenum pixel_format = components == 4 ? GL_BGRA : GL_BGR; glReadPixels(0, 0, display.width, display.height, pixel_format, GL_UNSIGNED_BYTE, &(buffer[0])); } void TGAWriter::writeTGA(std::vector& buffer) { writeHeader(); writeScanlines(buffer, display.width, display.height); } void TGAWriter::writeScanlines(std::vector& buffer, int width, int height) { if(!rle) { out->write(&(buffer[0]), buffer.size()); } else { for(int y=0; y 0) { int skipped = (x-(match_count)) - (last_written+1); if(skipped > 0) { writeRaw(buffer, (last_written + 1 + y*width)*components, skipped); last_written = x-1; } } } else if(match_count > 0) { writeRLE(match_count+1, last_pixel); last_written = x-1; match_count = 0; } last_pixel = pixel; } if(match_count > 0) { writeRLE(match_count+1, last_pixel); } else { int skipped = width - (last_written+1); if(skipped > 0) { writeRaw(buffer, (last_written + 1 + y*width)*components, skipped); } } } } } // TGAExporter TGAExporter::TGAExporter(const std::string& filename) { buffer1.resize(display.width * display.height * 3); buffer2.resize(display.width * display.height * 3); buffer_shared_ptr = 0; thread_state = TGA_EXPORTER_WAIT; cond = SDL_CreateCond(); mutex = SDL_CreateMutex(); if(filename == "-") { writer.setOutputStream(&std::cout); } else { this->filename = filename; if(!writer.open(filename)) { throw TGAExporterException(filename); } } #if SDL_VERSION_ATLEAST(2,0,0) thread = SDL_CreateThread( TGAExporter::startThread, "tga_exporter", this ); #else thread = SDL_CreateThread( TGAExporter::startThread, this ); #endif } TGAExporter::~TGAExporter() { stop(); SDL_DestroyCond(cond); SDL_DestroyMutex(mutex); buffer_shared_ptr = 0; if(!filename.empty()) { writer.close(); } } int TGAExporter::startThread(void *exporter) { (static_cast(exporter))->run(); return 0; } void TGAExporter::run() { SDL_mutexP(mutex); while(thread_state != TGA_EXPORTER_EXIT) { thread_state = TGA_EXPORTER_WAIT; while (thread_state == TGA_EXPORTER_WAIT) { SDL_CondWait(cond, mutex); } if (thread_state != TGA_EXPORTER_WRITE) break; if (buffer_shared_ptr != 0) { writer.writeTGA(*buffer_shared_ptr); } } thread_state = TGA_EXPORTER_STOPPED; SDL_mutexV(mutex); } void TGAExporter::stop() { if(!thread) return; if(thread_state == TGA_EXPORTER_STOPPED || thread_state == TGA_EXPORTER_EXIT) return; SDL_mutexP(mutex); thread_state = TGA_EXPORTER_EXIT; SDL_CondSignal(cond); SDL_mutexV(mutex); SDL_WaitThread(thread, 0); thread = 0; } void TGAExporter::capture() { std::vector* next_pixel_ptr = (buffer_shared_ptr == &buffer1) ? &buffer2 : &buffer1; writer.capture(*next_pixel_ptr); SDL_mutexP(mutex); buffer_shared_ptr = next_pixel_ptr; thread_state = TGA_EXPORTER_WRITE; SDL_CondSignal(cond); SDL_mutexV(mutex); } gource-0.56/src/core/mousecursor.cpp0000644002342600234260000001257015152463042017410 0ustar andrewcandrewc/* Copyright (c) 2010 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "mousecursor.h" MouseCursor::MouseCursor() { system_cursor = true; cursortex = 0; hidden = false; timeout = 3.0f; idle = timeout; scrollwheel = 0; left_click = false; right_click = false; middle_click = false; sdl_default_cursor = SDL_GetCursor(); Uint8 data[4*32]; Uint8 mask[4*32]; memset(data, 0, sizeof(data)); memset(mask, 0, sizeof(mask)); sdl_hidden_cursor = SDL_CreateCursor(data, mask, 32, 32, 0, 0); } MouseCursor::~MouseCursor() { SDL_SetCursor(sdl_default_cursor); SDL_FreeCursor(sdl_hidden_cursor); } void MouseCursor::useSystemCursor(bool system_cursor) { this->system_cursor = system_cursor; if(!hidden) { if(system_cursor) SDL_SetCursor(sdl_default_cursor); else SDL_SetCursor(sdl_hidden_cursor); } else { SDL_SetCursor(sdl_hidden_cursor); } } void MouseCursor::showCursor(bool show) { if(this->hidden == !show) return; this->hidden = !show; if(show) idle = 0.0; if(system_cursor) { if(show) SDL_SetCursor(sdl_default_cursor); else SDL_SetCursor(sdl_hidden_cursor); } } const vec2& MouseCursor::getPos() const { return mousepos; } const vec2& MouseCursor::getRelativePos() const { return rel; } void MouseCursor::updateRelativePos(const vec2& rel) { this->rel = rel; } void MouseCursor::leftClick(bool click) { left_click = click; } void MouseCursor::rightClick(bool click) { right_click = click; } void MouseCursor::middleClick(bool click) { middle_click = click; } bool MouseCursor::leftClick() const { return left_click; } bool MouseCursor::rightClick() const { return right_click; } bool MouseCursor::middleClick() const { return middle_click; } bool MouseCursor::leftButtonPressed() const { Uint8 ms = SDL_GetMouseState(0,0); return ms & SDL_BUTTON(SDL_BUTTON_LEFT); } bool MouseCursor::rightButtonPressed() const { Uint8 ms = SDL_GetMouseState(0,0); return ms & SDL_BUTTON(SDL_BUTTON_RIGHT); } bool MouseCursor::bothPressed() const { Uint8 ms = SDL_GetMouseState(0,0); return (ms & SDL_BUTTON(SDL_BUTTON_RIGHT) && ms & SDL_BUTTON(SDL_BUTTON_LEFT)); } bool MouseCursor::buttonPressed() const { Uint8 ms = SDL_GetMouseState(0,0); return (ms & SDL_BUTTON(SDL_BUTTON_RIGHT) || ms & SDL_BUTTON(SDL_BUTTON_LEFT)); } int MouseCursor::scrollWheel() const { return scrollwheel; } bool MouseCursor::isSystemCursor() const { return system_cursor; } bool MouseCursor::isHidden() const { return hidden; } bool MouseCursor::isVisible() const { return (!hidden && idle < timeout && hasFocus()); } bool MouseCursor::hasFocus() const { #if SDL_VERSION_ATLEAST(2,0,0) return (SDL_GetMouseFocus() == display.sdl_window); #else return (SDL_GetAppState() & SDL_APPMOUSEFOCUS); #endif } void MouseCursor::setCursorTexture(TextureResource* texture) { cursortex = texture; } void MouseCursor::updatePos(const vec2& pos) { mousepos = pos; idle = 0.0f; } void MouseCursor::scroll(bool dir) { scrollwheel += dir ? 1 : -1; } void MouseCursor::resetButtonState() { scrollwheel = 0; right_click = false; left_click = false; middle_click = false; } void MouseCursor::logic(float dt) { idle += dt; } void MouseCursor::draw() const { if(system_cursor || cursortex == 0) return; if(!isVisible()) return; glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); cursortex->bind(); glTranslatef(mousepos.x, mousepos.y, 0.0f); glPushMatrix(); glBegin(GL_QUADS); glTexCoord2f(0.0f,0.0f); glVertex2i(0, 0); glTexCoord2f(1.0f,0.0f); glVertex2i(cursortex->w, 0); glTexCoord2f(1.0f,1.0f); glVertex2i(cursortex->w, cursortex->h); glTexCoord2f(0.0f,1.0f); glVertex2i(0, cursortex->h); glEnd(); glPopMatrix(); } gource-0.56/src/core/fxfont.cpp0000644002342600234260000004245015152463042016326 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Portions of this code are derivived from FTGL (FTTextureFont.cpp) FTGL - OpenGL font library Copyright (c) 2001-2004 Henry Maddocks Copyright (c) 2008 Sam Hocevar Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "fxfont.h" FXFontManager fontmanager; //FxGlyph FXGlyph::FXGlyph(FXGlyphSet* set, unsigned int chr) { this->set = set; this->chr = chr; this->ftglyph = 0; FT_Face ft_face = set->getFTFace(); FT_UInt index = FT_Get_Char_Index( ft_face, chr ); //debugLog("FXGlyph %x %d %d", chr, chr, index); if(FT_Load_Glyph( ft_face, index, set->getFlags())) throw FXFontException(ft_face->family_name); if(FT_Get_Glyph( ft_face->glyph, &ftglyph )) throw FXFontException(ft_face->family_name); FT_Glyph_Metrics *metrics = &ft_face->glyph->metrics; height = glm::ceil(metrics->height / 64.0); FT_Glyph_To_Bitmap( &ftglyph, FT_RENDER_MODE_NORMAL, 0, 1 ); glyph_bitmap = (FT_BitmapGlyph)ftglyph; dims = vec2( glyph_bitmap->bitmap.width, glyph_bitmap->bitmap.rows) + vec2(2.0f, 2.0f); corner = vec2( glyph_bitmap->left, -glyph_bitmap->top) + vec2(0.5, -0.5); advance = vec2( ft_face->glyph->advance.x >> 6, ft_face->glyph->advance.y >> 6); vertex_positions[0] = vec2(0.0f, 0.0f); vertex_positions[1] = vec2(dims.x, 0.0f); vertex_positions[2] = dims; vertex_positions[3] = vec2(0.0f, dims.y); //call_list = 0; page = 0; } FXGlyph::~FXGlyph() { if(ftglyph!=0) FT_Done_Glyph(ftglyph); } void FXGlyph::setPage(FXGlyphPage* page, const vec4& texcoords) { this->page = page; this->texcoords = texcoords; vertex_texcoords[0] = vec2(texcoords.x, texcoords.y); vertex_texcoords[1] = vec2(texcoords.z, texcoords.y); vertex_texcoords[2] = vec2(texcoords.z, texcoords.w); vertex_texcoords[3] = vec2(texcoords.x, texcoords.w); } void FXGlyph::drawToVBO(quadbuf& buffer, const vec2& pos, const vec4& colour) const { buffer.add(page->texture->textureid, pos + corner, dims, colour, texcoords); } void FXGlyph::draw(const vec2& pos) const { for(int i=0;i<4;i++) { vec2 pos_offset = vertex_positions[i] + pos + corner; glTexCoord2fv(glm::value_ptr(vertex_texcoords[i])); glVertex2fv(glm::value_ptr(pos_offset)); } } //FXGlyphPage FXGlyphPage::FXGlyphPage(int page_width, int page_height) { this->page_width = page_width; this->page_height = page_height; texture_data = new GLubyte[ page_width * page_height ]; memset(texture_data, 0, page_width * page_height); needs_update = false; texture = 0; max_glyph_height = cursor_x = cursor_y = 1; } FXGlyphPage::~FXGlyphPage() { delete[] texture_data; } bool FXGlyphPage::addGlyph(FXGlyph* glyph) { FT_BitmapGlyph bitmap = glyph->glyph_bitmap; int corner_x = cursor_x; int corner_y = cursor_y; int padding = 3; if(bitmap->bitmap.rows > max_glyph_height) max_glyph_height = bitmap->bitmap.rows; if(corner_x + bitmap->bitmap.width + padding > page_width) { corner_x = 1; corner_y += max_glyph_height + padding; //bitmap is bigger than the full dimension if(corner_x + bitmap->bitmap.width + padding > page_width) return false; } if(corner_y + bitmap->bitmap.rows + padding > page_height) return false; needs_update = true; for(int j=0; j < bitmap->bitmap.rows;j++) { for(int i=0; i < bitmap->bitmap.width; i++) { texture_data[(corner_x+i+(j+corner_y)*page_width)] = bitmap->bitmap.buffer[i + bitmap->bitmap.width*j]; } } //fprintf(stderr, "corner_x = %d, corner_y = %d\n", corner_x, corner_y); vec4 texcoords = vec4( (((float)corner_x)-0.5f) / (float) page_width, (((float)corner_y)-0.5f) / (float) page_height, (((float)corner_x+bitmap->bitmap.width)+1.5f) / (float) page_width, (((float)corner_y+bitmap->bitmap.rows)+1.5f) / (float) page_height ); glyph->setPage(this, texcoords); //glyph->compile(this, texcoords); // move cursor for next character cursor_x = corner_x + bitmap->bitmap.width + padding; cursor_y = corner_y; return true; } void FXGlyphPage::updateTexture() { if(!needs_update) return; if(!texture) { texture = texturemanager.create(page_width, page_height, false, GL_CLAMP_TO_EDGE, GL_ALPHA, texture_data); } else { texture->reload(); } needs_update = false; } //FXGlyphSet FXGlyphSet::FXGlyphSet(FT_Library freetype, const std::string& fontfile, int size, int dpi, FT_Int32 ft_flags) { this->freetype = freetype; this->fontfile = fontfile; this->size = size; this->dpi = dpi; this->ft_flags = ft_flags; this->ft_face = 0; this->tab_width = 4.0f; this->max_height = 0; init(); } FXGlyphSet::~FXGlyphSet() { if(ft_face!=0) FT_Done_Face(ft_face); for(std::vector::iterator it = pages.begin(); it != pages.end(); it++) { delete (*it); } pages.clear(); for(auto it: glyphs) { delete it.second; } glyphs.clear(); } void FXGlyphSet::init() { if(FT_New_Face(freetype, fontfile.c_str(), 0, &ft_face)) { throw FXFontException(fontfile); } int ft_font_size = 64 * size; FT_Set_Char_Size( ft_face, ft_font_size, ft_font_size, dpi, dpi ); double em_size = 1.0 * ft_face->units_per_EM; unit_scale = vec2( ft_face->size->metrics.x_ppem / em_size, ft_face->size->metrics.y_ppem / em_size); precache("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;:'\",<.>/?-_=+!@#$%^&*()\\ "); } void FXGlyphSet::precache(const std::string& chars) { FTUnicodeStringItr precache_glyphs((const unsigned char*)chars.c_str()); unsigned int chr; //add to bitmap without updating textures until the end pre_caching = true; while (*precache_glyphs) { chr = *precache_glyphs++; getGlyph(chr); } pre_caching = false; for(std::vector::iterator it = pages.begin(); it != pages.end(); it++) { (*it)->updateTexture(); } } FXGlyph* FXGlyphSet::getGlyph(unsigned int chr) { std::map::iterator it; if((it = glyphs.find(chr)) != glyphs.end()) return it->second; //if new FXGlyph* glyph = new FXGlyph(this, chr); // paint glyph to next page it will fit on FXGlyphPage* page = 0; if(!pages.empty()) page = pages.back(); //page is full, create new page if(page == 0 || !page->addGlyph(glyph)) { //allocate page using maximum allowed texture size GLint max_texture_size; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size); max_texture_size = glm::min( 512, max_texture_size ); page = new FXGlyphPage(max_texture_size, max_texture_size); pages.push_back(page); if(!page->addGlyph(glyph)) { throw FXFontException(glyph->set->getFTFace()->family_name); } } max_height = glm::max( glyph->getHeight(), max_height ); //update the texture unless this is the precaching process if(!pre_caching) page->updateTexture(); glyphs[chr] = glyph; return glyph; } float FXGlyphSet::getMaxWidth() const { return ft_face->size->metrics.max_advance / 64.0f; } float FXGlyphSet::getMaxHeight() const { return max_height; } float FXGlyphSet::getAscender() const { return getFTFace()->ascender * unit_scale.y; } float FXGlyphSet::getDescender() const { return getFTFace()->descender * unit_scale.y; } float FXGlyphSet::getWidth(const std::string& text) { FTUnicodeStringItr unicode_text((const unsigned char*)text.c_str()); float width = 0.0; unsigned int chr; while (*unicode_text) { chr = *unicode_text++; FXGlyph* glyph = getGlyph(chr); width += glyph->getAdvance().x; } return width; } void FXGlyphSet::drawToVBO(vec2& cursor, const std::string& text, const vec4& colour) { FTUnicodeStringItr unicode_text((const unsigned char*)text.c_str()); unsigned int chr; while (*unicode_text) { chr = *unicode_text++; FXGlyph* glyph = getGlyph(chr); glyph->drawToVBO(fontmanager.font_vbo, cursor, colour); cursor += glyph->getAdvance(); } } void FXGlyphSet::draw(const std::string& text) { FTUnicodeStringItr unicode_text((const unsigned char*)text.c_str()); GLuint textureid = -1; unsigned int chr; vec2 pos; std::vector glyphs; glyphs.reserve(text.size()); // iterate over glyphs before drawing to avoid // encountering a new glyph while inside the GL draw call while (*unicode_text) { chr = *unicode_text++; if(chr == '\t') { FXGlyph* glyph = getGlyph('M'); pos += glyph->getAdvance() * tab_width; continue; } FXGlyph* glyph = getGlyph(chr); glyphs.push_back(glyph); } for(auto glyph : glyphs) { if(glyph->page->texture->textureid != textureid) { if(textureid != -1) glEnd(); textureid = glyph->page->texture->textureid; glBindTexture(GL_TEXTURE_2D, textureid); glBegin(GL_QUADS); } glyph->draw(pos); pos += glyph->getAdvance(); } if(textureid != -1) glEnd(); } void FXGlyphSet::drawPages() { glPushMatrix(); for(std::vector::iterator it = pages.begin(); it != pages.end(); it++) { FXGlyphPage* page = *it; page->texture->bind(); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex2f(page->texture->w, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex2f(page->texture->w, page->texture->h); glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, page->texture->h); glEnd(); glTranslatef(page->texture->w, 0.0f, 0.0f); } glPopMatrix(); } //FXFont FXFont::FXFont() { glyphset = 0; } FXFont::FXFont(FXGlyphSet* glyphset) { this->glyphset = glyphset; init(); } void FXFont::init() { shadow = false; shadow_strength = 0.7; shadow_offset = vec2(1.0, 1.0); round = false; align_right = false; align_top = true; colour = vec4(1.0f, 1.0f, 1.0f, 1.0f); shadow_colour = vec4(0.0f, 0.0f, 0.0f, shadow_strength); } void FXFont::roundCoordinates(bool round) { this->round = round; } void FXFont::alignRight(bool align_right) { this->align_right = align_right; } void FXFont::alignTop(bool align_top) { this->align_top = align_top; } void FXFont::shadowStrength(float s) { shadow_strength = s; shadow_colour.w = colour.w * shadow_strength; } void FXFont::setColour(const vec4& colour) { this->colour = colour; shadow_colour.w = colour.w * shadow_strength; } void FXFont::setAlpha(float alpha) { colour.w = alpha; shadow_colour.w = shadow_strength * alpha; } void FXFont::shadowOffset(float x, float y) { shadow_offset = vec2(x,y); } void FXFont::dropShadow(bool shadow) { this->shadow = shadow; } const std::string& FXFont::getFontFile() const { return glyphset->getFontFile(); } float FXFont::getMaxWidth() const { return glyphset->getMaxWidth(); } float FXFont::getMaxHeight() const { return glyphset->getMaxHeight(); } int FXFont::getFontSize() const { return glyphset->getSize(); } float FXFont::getWidth(const std::string& text) const { return glyphset->getWidth(text); } float FXFont::getHeight() const { return glm::ceil(getAscender() + getDescender()); } float FXFont::getAscender() const { return glyphset->getAscender(); } float FXFont::getDescender() const { return glyphset->getDescender(); } void FXFont::render(float x, float y, const std::string& text, const vec4& colour) const{ if(fontmanager.use_vbo) { vec2 cursor_start(x,y); glyphset->drawToVBO(cursor_start, text, colour); return; } glColor4fv(glm::value_ptr(colour)); glPushMatrix(); glTranslatef(x,y,0.0f); glyphset->draw(text); glPopMatrix(); } void FXFont::print(float x, float y, const char *str, ...) const{ char buf[4096]; va_list vl; va_start (vl, str); vsnprintf (buf, 4096, str, vl); va_end (vl); std::string text = std::string(buf); draw(x, y, text); } void FXFont::draw(float x, float y, const std::string& text) const { if(align_right) { x -= getWidth(text); } if(align_top) { y += getHeight(); } if(round) { x = roundf(x); y = roundf(y); } //buffered fonts need to do shadow in a shader pass if(shadow && !fontmanager.use_vbo) { render(x + shadow_offset.x, y + shadow_offset.y, text, shadow_colour); } render(x, y, text, colour); } void FXFont::drawGlyphes() { if(glyphset) glyphset->drawPages(); } // FXFontManager FXFontManager::FXFontManager() { library = 0; } void FXFontManager::init() { if(FT_Init_FreeType( &library )) throw FXFontException("Failed to init FreeType"); use_vbo = false; } void FXFontManager::unload() { font_vbo.unload(); } void FXFontManager::reload() { } void FXFontManager::startBuffer() { font_vbo.reset(); use_vbo = true; } void FXFontManager::commitBuffer() { font_vbo.update(); use_vbo = false; } void FXFontManager::drawBuffer() { font_vbo.draw(); } void FXFontManager::destroy() { if(library != 0) FT_Done_FreeType(library); } void FXFontManager::setDir(std::string font_dir) { this->font_dir = font_dir; } void FXFontManager::purge() { for(std::map::iterator it = fonts.begin(); it!=fonts.end();it++) { fontSizeMap* sizemap = it->second; for(fontSizeMap::iterator ft_it = sizemap->begin(); ft_it != sizemap->end(); ft_it++) { delete ft_it->second; } delete sizemap; } fonts.clear(); } FXFont FXFontManager::grab(std::string font_file, int size, int dpi, FT_Int32 ft_flags) { if(font_dir.size()>0 && !(font_file.size() > 2 && font_file[1] == ':') && !(font_file.size() > 1 && font_file[0] == '/')) { font_file = font_dir + font_file; } //sprintf(buf, "%s:%i", font_file.c_str(), size); //std::string font_key = std::string(buf); fontSizeMap* sizemap = fonts[font_file]; if(!sizemap) { sizemap = fonts[font_file] = new fontSizeMap; } fontSizeMap::iterator ft_it = sizemap->find(size); FXGlyphSet* glyphset; if(ft_it == sizemap->end()) { glyphset = new FXGlyphSet(library, font_file.c_str(), size, dpi, ft_flags); sizemap->insert(std::pair(size,glyphset)); } else { glyphset = ft_it->second; } return FXFont(glyphset); } gource-0.56/src/core/display.cpp0000644002342600234260000005366115152463042016475 0ustar andrewcandrewc /* Copyright (c) 2008 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "display.h" #include "sdlapp.h" #include #if SDL_VERSION_ATLEAST(2,0,0) #include "SDL_syswm.h" #endif SDLAppDisplay display; SDLAppDisplay::SDLAppDisplay() { clear_colour = vec4(0.0f,0.0f,0.0f,1.0f); zbuffer_depth = 16; enable_alpha = false; vsync = false; resizable = false; frameless = false; experimental = false; high_dpi_aware = false; multi_sample = 0; width = 0; height = 0; desktop_width = 0; desktop_height = 0; windowed_width = 0; windowed_height = 0; viewport_dpi_ratio = vec2(1.0f, 1.0f); #if SDL_VERSION_ATLEAST(2,0,0) sdl_window = 0; gl_context = 0; framed_width = 0; framed_height = 0; framed_x = 0; framed_y = 0; #else surface = 0; #endif } SDLAppDisplay::~SDLAppDisplay() { } void SDLAppDisplay::setClearColour(vec3 colour) { setClearColour(vec4(colour, enable_alpha ? 0.0f : 1.0f)); } void SDLAppDisplay::setClearColour(vec4 colour) { clear_colour = colour; } Uint32 SDLAppDisplay::SDLWindowFlags(bool fullscreen) { #if SDL_VERSION_ATLEAST(2,0,0) Uint32 flags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN; if (frameless) flags |= SDL_WINDOW_BORDERLESS; if (resizable && !frameless) flags |= SDL_WINDOW_RESIZABLE; if (fullscreen) flags |= SDL_WINDOW_FULLSCREEN; #ifndef _WIN32 // see setWindowsHighDPIAwareness() work around for Windows if(high_dpi_aware) flags |= SDL_WINDOW_ALLOW_HIGHDPI; #endif #else Uint32 flags = SDL_OPENGL | SDL_HWSURFACE | SDL_ANYFORMAT | SDL_DOUBLEBUF; if (frameless) flags |= SDL_NOFRAME; if (resizable && !fullscreen) flags |= SDL_RESIZABLE; if (fullscreen) flags |= SDL_FULLSCREEN; #endif return flags; } void SDLAppDisplay::enableVsync(bool vsync) { this->vsync = vsync; } void SDLAppDisplay::setZBufferDepth(int zbuffer_depth) { this->zbuffer_depth = zbuffer_depth; } void SDLAppDisplay::enableResize(bool resizable) { this->resizable = resizable; } void SDLAppDisplay::enableFrameless(bool frameless) { this->frameless = frameless; } void SDLAppDisplay::enableHighDPIAwareness(bool enable) { high_dpi_aware = enable; } void SDLAppDisplay::enableAlpha(bool enable) { enable_alpha = enable; } void SDLAppDisplay::enableExperimental(bool enable) { experimental = enable; } void SDLAppDisplay::multiSample(int samples) { multi_sample = samples; } void SDLAppDisplay::setupExtensions() { if(experimental) glewExperimental = true; GLenum err = glewInit(); #ifdef GLEW_ERROR_NO_GLX_DISPLAY // Ignore GLEW_ERROR_NO_GLX_DISPLAY error as wont have GLX if using Wayland if (GLEW_OK != err && GLEW_ERROR_NO_GLX_DISPLAY != err) { #else if (GLEW_OK != err) { #endif /* Problem: glewInit failed, something is seriously wrong. */ char glewerr[1024]; snprintf(glewerr, 1024, "GLEW Error: %s", glewGetErrorString(err)); throw SDLInitException(std::string(glewerr)); } } bool SDLAppDisplay::multiSamplingEnabled() { int value; SDL_GL_GetAttribute( SDL_GL_MULTISAMPLEBUFFERS, &value ); return value==1; } #if SDL_VERSION_ATLEAST(2,0,0) && defined(_WIN32) WNDPROC window_proc = 0; LRESULT CALLBACK window_filter_proc(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam) { if (msg == WM_SYSCOMMAND && (wparam & 0xfff0) == SC_KEYMENU) { return 0; } return CallWindowProc(window_proc, wnd, msg, wparam, lparam); } #endif void SDLAppDisplay::updateViewportDPIRatio() { int drawable_width, drawable_height; SDL_GL_GetDrawableSize(sdl_window, &drawable_width, &drawable_height); int sdl_window_width, sdl_window_height; SDL_GetWindowSize(sdl_window, &sdl_window_width, &sdl_window_height); viewport_dpi_ratio = vec2(drawable_width, drawable_height) / vec2(sdl_window_width, sdl_window_height); debugLog("viewport dpi ratio %.2f x %.2f", viewport_dpi_ratio.x, viewport_dpi_ratio.y); } void SDLAppDisplay::setVideoMode(int width, int height, bool fullscreen, int screen) { #if SDL_VERSION_ATLEAST(2,0,0) SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, zbuffer_depth); if(multi_sample > 0) { SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, (GLuint) multi_sample); } if(enable_alpha) { SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); } Uint32 flags = SDLWindowFlags(fullscreen); if(gl_context != 0) SDL_GL_DeleteContext(gl_context); int position_x = -1; int position_y = -1; int display_index = -1; if(sdl_window != 0) { display_index = SDL_GetWindowDisplayIndex(sdl_window); SDL_GetWindowPosition(sdl_window, &position_x, &position_y); SDL_DestroyWindow(sdl_window); } else if(screen > 0 && screen <= SDL_GetNumVideoDisplays()) { display_index = screen-1; } if(display_index != -1) { sdl_window = SDL_CreateWindow(gSDLAppTitle.c_str(), SDL_WINDOWPOS_UNDEFINED_DISPLAY(display_index), SDL_WINDOWPOS_UNDEFINED_DISPLAY(display_index), width, height, flags); if(sdl_window && position_x >= 0 && position_y >= 0) { SDL_SetWindowPosition(sdl_window, position_x, position_y); } } else { sdl_window = SDL_CreateWindow(gSDLAppTitle.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, flags); } if (!sdl_window) { // retry without multi-sampling enabled if(multi_sample > 0) { multi_sample = 0; SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0); if(display_index != -1) { sdl_window = SDL_CreateWindow(gSDLAppTitle.c_str(), SDL_WINDOWPOS_UNDEFINED_DISPLAY(display_index), SDL_WINDOWPOS_UNDEFINED_DISPLAY(display_index), width, height, flags); if(sdl_window && position_x >= 0 && position_y >= 0) { SDL_SetWindowPosition(sdl_window, position_x, position_y); } } else { sdl_window = SDL_CreateWindow(gSDLAppTitle.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, flags); } } if(!sdl_window) { std::string sdlerr(SDL_GetError()); throw SDLInitException(sdlerr); } } SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY); gl_context = SDL_GL_CreateContext(sdl_window); debugLog("opengl version %s", glGetString(GL_VERSION)); if(!gl_context) { std::string sdlerr(SDL_GetError()); throw SDLInitException(sdlerr); } if(vsync) SDL_GL_SetSwapInterval(1); else SDL_GL_SetSwapInterval(0); #else int bpp = 32; int flags = SDLWindowFlags(fullscreen); if(vsync) SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1); else SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 0); if(multi_sample > 0) { SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, (GLuint) multi_sample); } if(enable_alpha) { SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); } SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, zbuffer_depth); surface = SDL_SetVideoMode(width, height, bpp, flags); if (!surface) { if (multi_sample > 0) { #ifndef _WIN32 // Retry without multi-sampling before failing std::cerr << "Failed to set video mode: " << SDL_GetError() << std::endl << "Trying again without multi-sampling" << std::endl; #endif multi_sample = 0; SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0); surface = SDL_SetVideoMode(width, height, bpp, flags); } if (!surface) { std::string sdlerr(SDL_GetError()); throw SDLInitException(sdlerr); } } #endif setupExtensions(); #if SDL_VERSION_ATLEAST(2,0,0) && defined(_WIN32) // suppress 'ding' noise when doing alt+key combinations // solution from: http://forums.libsdl.org/viewtopic.php?t=6075 SDL_SysWMinfo sys_window_info; SDL_VERSION(&sys_window_info.version); if(SDL_GetWindowWMInfo(sdl_window, &sys_window_info)) { HWND wnd = sys_window_info.info.win.window; window_proc = (WNDPROC) GetWindowLongPtr(wnd, GWLP_WNDPROC); SetWindowLongPtr(wnd, GWLP_WNDPROC, (LONG_PTR) &window_filter_proc); } #endif } void SDLAppDisplay::getFullscreenResolution(int& width, int& height) { int fullscreen_width = desktop_width; int fullscreen_height = desktop_height; #if SDL_VERSION_ATLEAST(2,0,0) // TODO: SDL2 api will have a nice way to do this ... #else float aspect_ratio = fullscreen_width / (float) fullscreen_height; if(aspect_ratio > 2.5) { SDL_Rect** modes = SDL_ListModes(0, SDLWindowFlags(true)); if(modes != (SDL_Rect**)0 && modes != (SDL_Rect**)-1) { for (int i=0; modes[i]; i++) { if(modes[i]->h == fullscreen_height && (modes[i]->w/(float)modes[i]->h) < 2.5) { fullscreen_width = modes[i]->w; break; } } } } #endif width = fullscreen_width; height = fullscreen_height; } void SDLAppDisplay::toggleFullscreen() { int width = this->width; int height = this->height; if(!fullscreen) { //save windowed width and height windowed_width = width; windowed_height = height; getFullscreenResolution(width, height); } else { //switch back to window dimensions, if known if(windowed_width != 0) { width = windowed_width; height = windowed_height; } } fullscreen = !fullscreen; int resized_width, resized_height; #if SDL_VERSION_ATLEAST(2,0,0) SDL_SetWindowFullscreen(sdl_window, fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); SDL_GL_GetDrawableSize(sdl_window, &resized_width, &resized_height); updateViewportDPIRatio(); #else setVideoMode(width, height, fullscreen); const SDL_VideoInfo* display_info = SDL_GetVideoInfo(); resized_width = display_info->current_w; resized_height = display_info->current_h; #endif //set viewport to match what we ended up on glViewport(0, 0, resized_width, resized_height); this->width = resized_width; this->height = resized_height; } void SDLAppDisplay::toggleFrameless() { #ifdef __APPLE__ debugLog("Frameless toggle not supported"); return; #endif #if SDL_VERSION_ATLEAST(2,0,0) if(fullscreen) return; frameless = !frameless; if(frameless) { int position_x, position_y; SDL_GetWindowPosition(sdl_window, &position_x, &position_y); framed_width = width; framed_height = height; framed_x = position_x; framed_y = position_y; #ifdef _WIN32 SDL_SysWMinfo sys_window_info; SDL_VERSION(&sys_window_info.version); if(SDL_GetWindowWMInfo(sdl_window, &sys_window_info)) { //make the new window equal the size of the old window including frame HWND wnd = sys_window_info.info.win.window; RECT rect; GetWindowRect(wnd, &rect); position_x = rect.left; position_y = rect.top; width = rect.right - rect.left; height = rect.bottom - rect.top; } #endif //work around window position changing when when frame is toggled //related bug: https://bugzilla.libsdl.org/show_bug.cgi?id=2791 SDL_SetWindowBordered(sdl_window, SDL_FALSE); SDL_SetWindowSize(sdl_window, width, height); SDL_SetWindowPosition(sdl_window, position_x, position_y); //window needs to be recreated to remove SDL_WINDOW_RESIZABLE flag //otherwise there is still a weird border setVideoMode(width, height, fullscreen); } else { #ifdef _WIN32 // handle computing framed window position // if launched in frameless mode initially if(framed_width == 0) { SDL_SysWMinfo sys_window_info; SDL_VERSION(&sys_window_info.version); if(SDL_GetWindowWMInfo(sdl_window, &sys_window_info)) { HWND wnd = sys_window_info.info.win.window; RECT old_rect; GetWindowRect(wnd, &old_rect); SDL_SetWindowBordered(sdl_window, SDL_TRUE); RECT new_rect; GetWindowRect(wnd, &new_rect); SDL_GetWindowSize(sdl_window, &framed_width, &framed_height); SDL_GetWindowPosition(sdl_window, &framed_x, &framed_y); int width_delta = (new_rect.right - new_rect.left) - (old_rect.right - old_rect.left); int height_delta = (new_rect.bottom - new_rect.top) - (old_rect.bottom - old_rect.top); framed_width = width - width_delta; framed_height = height - height_delta; framed_x += width_delta; framed_y += height_delta; // HACK: account for the resizable windows border being 2 pixels wider if(resizable) { framed_x += 2; framed_y += 2; } } } #endif SDL_SetWindowBordered(sdl_window, SDL_TRUE); if(framed_width > 0) { width = framed_width; height = framed_height; } SDL_SetWindowSize(sdl_window, width, height); if(framed_width > 0) { SDL_SetWindowPosition(sdl_window, framed_x, framed_y); } setVideoMode(width, height, fullscreen); } #endif } bool SDLAppDisplay::isFullscreen() const { return fullscreen; } bool SDLAppDisplay::isFrameless() const { return frameless; } void SDLAppDisplay::resize(int width, int height) { debugLog("resize %d x %d", width, height); int resized_width, resized_height; #if SDL_VERSION_ATLEAST(2,0,0) SDL_GL_GetDrawableSize(sdl_window, &resized_width, &resized_height); updateViewportDPIRatio(); #else setVideoMode(width, height, fullscreen); const SDL_VideoInfo* display_info = SDL_GetVideoInfo(); resized_width = display_info->current_w; resized_height = display_info->current_h; #endif //set viewport to match what we ended up on glViewport(0, 0, resized_width, resized_height); this->width = resized_width; this->height = resized_height; } #ifdef _WIN32 void setWindowsHighDPIAwareness() { // Because SDL2 doesn't currently do anything if you set SDL_WINDOW_ALLOW_HIGHDPI // on Windows, it is necessary to manually tell Windows your application supports high DPI, // otherwise it will give you a 1920x1080 window when you request 3840x2160 on a 4K display // https://discourse.libsdl.org/t/sdl-getdesktopdisplaymode-resolution-reported-in-windows-10-when-using-app-scaling/22389/3 typedef enum PROCESS_DPI_AWARENESS { PROCESS_DPI_UNAWARE = 0, PROCESS_SYSTEM_DPI_AWARE = 1, PROCESS_PER_MONITOR_DPI_AWARE = 2 } ; BOOL(WINAPI *SetProcessDPIAware)(void) = NULL; HRESULT(WINAPI *SetProcessDpiAwareness)(PROCESS_DPI_AWARENESS dpiAwareness) = NULL; if (void* userDLL = SDL_LoadObject("USER32.DLL")) { SetProcessDPIAware = (BOOL(WINAPI *)(void)) SDL_LoadFunction(userDLL, "SetProcessDPIAware"); } if (void* shcoreDLL = SDL_LoadObject("SHCORE.DLL")) { SetProcessDpiAwareness = (HRESULT(WINAPI *)(PROCESS_DPI_AWARENESS)) SDL_LoadFunction(shcoreDLL, "SetProcessDpiAwareness"); } if (SetProcessDpiAwareness) { // Windows 8.1 and later HRESULT result = SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE); debugLog("SetProcessDpiAwareness %d", (result == S_OK) ? 1 : 0); } else if (SetProcessDPIAware) { // Vista / Windows 8 BOOL success = SetProcessDPIAware(); debugLog("SetProcessDPIAware %d", (int)success); } } #endif void SDLAppDisplay::init(std::string window_title, int width, int height, bool fullscreen, int screen) { if(SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO) != 0) { throw SDLInitException(SDL_GetError()); } #ifdef _WIN32 if(high_dpi_aware) setWindowsHighDPIAwareness(); #endif #if SDL_VERSION_ATLEAST(2,0,0) // check screen is valid if(screen <= 0 || screen > SDL_GetNumVideoDisplays()) { screen = -1; } SDL_Rect display_rect; SDL_GetDisplayBounds(screen > 0 ? screen-1 : 0, &display_rect); desktop_width = display_rect.w; desktop_height = display_rect.h; #else const SDL_VideoInfo* display_info = SDL_GetVideoInfo(); //save the desktop resolution desktop_width = display_info->current_w; desktop_height = display_info->current_h; #endif //initialize width and height to desktop resolution if un-specified if(!width || !height) { if(fullscreen) { getFullscreenResolution(width, height); } else { if(!width) width = desktop_width; if(!height) height = desktop_height; } } atexit(SDL_Quit); #if SDL_VERSION_ATLEAST(2,0,0) #else SDL_EnableUNICODE(1); SDL_WM_SetCaption(window_title.c_str(),0); #endif debugLog("requesting video mode %d x %d", width, height); setVideoMode(width, height, fullscreen, screen); //get actual opengl viewport GLint viewport[4]; glGetIntegerv( GL_VIEWPORT, viewport ); this->width = viewport[2]; this->height = viewport[3]; this->fullscreen = fullscreen; debugLog("opengl viewport %d x %d", this->width, this->height); int drawable_width, drawable_height; SDL_GL_GetDrawableSize(this->sdl_window, &drawable_width, &drawable_height); debugLog("drawable size %d x %d", drawable_width, drawable_height); updateViewportDPIRatio(); glViewport(0, 0, this->width, this->height); } void SDLAppDisplay::quit() { #if SDL_VERSION_ATLEAST(2,0,0) if(gl_context != 0) SDL_GL_DeleteContext(gl_context); if(sdl_window != 0) SDL_DestroyWindow(sdl_window); #endif texturemanager.purge(); shadermanager.purge(); fontmanager.purge(); fontmanager.destroy(); } void SDLAppDisplay::update() { #if SDL_VERSION_ATLEAST(2,0,0) SDL_GL_SwapWindow(sdl_window); #else SDL_GL_SwapBuffers(); #endif } void SDLAppDisplay::clear() { glClearColor(clear_colour.x, clear_colour.y, clear_colour.z, clear_colour.w); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } void SDLAppDisplay::mode3D(float fov, float znear, float zfar) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(fov, (GLfloat)width/(GLfloat)height, znear, zfar); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void SDLAppDisplay::mode2D() { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, width, height, 0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void SDLAppDisplay::push2D() { glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, display.width, display.height, 0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); } void SDLAppDisplay::pop2D() { glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } vec4 SDLAppDisplay::currentColour() { vec4 colour; glGetFloatv(GL_CURRENT_COLOR, glm::value_ptr(colour)); return colour; } vec3 SDLAppDisplay::project(vec3 pos) { GLint viewport[4]; GLdouble modelview[16]; GLdouble projection[16]; GLdouble winX, winY, winZ; glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); glGetIntegerv( GL_VIEWPORT, viewport ); gluProject( pos.x, pos.y, pos.z, modelview, projection, viewport, &winX, &winY, &winZ); winY = (float)viewport[3] - winY; return vec3((float) winX, (float) winY, (float) winZ); } vec3 SDLAppDisplay::unproject(vec2 pos) { GLint viewport[4]; GLdouble modelview[16]; GLdouble projection[16]; GLfloat winX, winY, winZ; GLdouble posX, posY, posZ; glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); glGetIntegerv( GL_VIEWPORT, viewport ); winX = pos.x; winY = (float)viewport[3] - pos.y; glReadPixels( int(winX), int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ ); gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ); return vec3((float) posX, (float) posY, (float) posZ); } gource-0.56/src/core/plane.cpp0000644002342600234260000000353015152463042016115 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "plane.h" Plane::Plane() { d = 0.0f; } Plane::Plane(const vec3 & v1, const vec3 & v2, const vec3 & v3) { vec3 edge1 = v1 - v2; vec3 edge2 = v3 - v2; normal = glm::normalize(glm::cross(edge2, edge1)); point = v2; d = -(glm::dot(normal, point)); } float Plane::distance(const vec3 & p) const { return d + glm::dot(normal, p); } gource-0.56/src/core/conffile.h0000664002342600234260000001330115152463042016247 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef CONF_FILE_H #define CONF_FILE_H #include #include #include #include #include #include #include "vectors.h" class ConfFileException : public std::exception { protected: std::string errmsg; public: ConfFileException(const std::string& errmsg, const std::string& conffile, int lineno = 0) : errmsg(errmsg), conffile(conffile), lineno(lineno) {} std::string conffile; int lineno; virtual ~ConfFileException() throw () {}; virtual const char* what() const throw() { return errmsg.c_str(); } }; class ConfEntry { std::string name; std::string value; int lineno; public: ConfEntry(); ConfEntry(const std::string& name); ConfEntry(const std::string& name, const std::string& value, int lineno = 0); ConfEntry(const std::string& name, int value); ConfEntry(const std::string& name, float value); ConfEntry(const std::string& name, bool value); ConfEntry(const std::string& name, vec2 value); ConfEntry(const std::string& name, vec3 value); ConfEntry(const std::string& name, vec4 value); void setName(const std::string& name); void setString(const std::string& value); void setFloat(float value); void setInt(int value); void setBool(bool value); void setVec2(vec2 value); void setVec3(vec3 value); void setVec4(vec4 value); bool hasValue(); int getLineNumber(); std::string getName(); std::string getString(); int getInt(); float getFloat(); bool getBool(); vec2 getVec2(); vec3 getVec3(); vec4 getVec4(); bool isFloat(); bool isInt(); bool isBool(); bool isVec2(); bool isVec3(); bool isVec4(); }; typedef std::list ConfEntryList; class ConfFile; class ConfSection { std::map entrymap; std::string name; int lineno; ConfFile* conf; public: ConfSection(); ConfSection(const std::string& name, int lineno = 0); ~ConfSection(); void clear(); ConfFile* getConfFile(); ConfEntry* getEntry(const std::string& key); ConfEntryList* getEntries(const std::string& key); void setConfFile(ConfFile* conf); void sectionException(ConfEntry* entry, std::string reason); std::string getName(); int getLineNumber(); bool hasValue(const std::string& key); std::string getString(const std::string& key); int getInt(const std::string& key); float getFloat(const std::string& key); bool getBool(const std::string& key); vec3 getVec3(const std::string& key); vec4 getVec4(const std::string& key); void print(std::ostream& out); void setEntry(ConfEntry* entry); void addEntry(ConfEntry* entry); void setEntry(const std::string& name, const std::string& value, int lineno=0); void addEntry(const std::string& name, const std::string& value, int lineno=0); }; typedef std::list ConfSectionList; class ConfFile { std::string conffile; std::map sectionmap; public: ConfFile(); ~ConfFile(); void clear(); void setFilename(const std::string& filename); std::string getFilename(); void load(const std::string& conffile); void load(); void save(const std::string& conffile); void save(); bool hasSection(const std::string& section); ConfSection* getSection(const std::string& section); ConfSectionList* getSections(const std::string& section); ConfEntry* getEntry(const std::string& section, const std::string& key); ConfEntryList* getEntries(const std::string& section, const std::string& key); void addSection(ConfSection* section); ConfSection* addSection(const std::string& section); void setSection(ConfSection* section); int countSection(const std::string& section); void setEntry(const std::string& section, const std::string& key, const std::string& value); bool hasEntry(const std::string& section, const std::string& key); bool hasValue(const std::string& section, const std::string& key); std::string getString(const std::string& section, const std::string& key); int getInt(const std::string& section, const std::string& key); float getFloat(const std::string& section, const std::string& key); bool getBool(const std::string& section, const std::string& key); vec3 getVec3(const std::string& section, const std::string& key); vec4 getVec4(const std::string& section, const std::string& key); static void trim(std::string& value); void unknownOptionException(ConfEntry* entry); void missingValueException(ConfEntry* entry); void invalidValueException(ConfEntry* entry); void missingEntryException(ConfSection* section, std::string entryname); void sectionException(ConfSection* section, std::string reason); void entryException(ConfEntry* entry, std::string reason); }; #endif gource-0.56/src/core/display.h0000644002342600234260000000760615152463042016140 0ustar andrewcandrewc /* Copyright (c) 2008 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SDLAPP_DISPLAY_H #define SDLAPP_DISPLAY_H #include "gl.h" #include "shader.h" #include "logger.h" #include "vectors.h" #include "texture.h" #include "fxfont.h" #include #include #include #include #include class SDLInitException : public std::exception { protected: std::string error; public: SDLInitException(const std::string& error) : error(error) {} virtual ~SDLInitException() throw () {}; virtual const char* what() const throw() { return error.c_str(); } }; class SDLAppDisplay { bool enable_alpha; bool resizable; bool fullscreen; bool frameless; bool experimental; bool high_dpi_aware; bool vsync; int zbuffer_depth; int multi_sample; Uint32 SDLWindowFlags(bool fullscreen); void setupExtensions(); void updateViewportDPIRatio(); public: int width, height; int desktop_width, desktop_height; int windowed_width, windowed_height; vec2 viewport_dpi_ratio; #if SDL_VERSION_ATLEAST(2,0,0) SDL_Window* sdl_window; SDL_GLContext gl_context; int framed_width, framed_height; int framed_x, framed_y; #else SDL_Surface *surface; #endif vec4 clear_colour; SDLAppDisplay(); ~SDLAppDisplay(); void getFullscreenResolution(int& width, int& height); void toggleFullscreen(); void toggleFrameless(); bool isFullscreen() const; bool isFrameless() const; void resize(int width, int height); void init(std::string window_title, int width, int height, bool fullscreen, int screen = -1); void setVideoMode(int width, int height, bool fullscreen, int screen = -1); bool multiSamplingEnabled(); void quit(); void update(); void clear(); void setClearColour(vec3 colour); void setClearColour(vec4 colour); void setZBufferDepth(int zbuffer_depth); void enableVsync(bool vsync); void enableAlpha(bool enable); void enableResize(bool resizable); void enableFrameless(bool frameless); void enableHighDPIAwareness(bool enable); void enableExperimental(bool enable); void multiSample(int sample); void mode3D(float fov, float znear, float zfar); void mode2D(); void push2D(); void pop2D(); vec4 currentColour(); vec3 project(vec3 pos); vec3 unproject(vec2 pos); }; extern SDLAppDisplay display; #endif gource-0.56/src/core/mousecursor.h0000644002342600234260000000543215152463042017054 0ustar andrewcandrewc/* Copyright (c) 2010 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SDLAPP_MOUSECURSOR_H #define SDLAPP_MOUSECURSOR_H #include "display.h" class MouseCursor { vec2 mousepos; vec2 rel; bool hidden; bool system_cursor; float idle; float timeout; int scrollwheel; SDL_Cursor* sdl_default_cursor; SDL_Cursor* sdl_hidden_cursor; bool left_click; bool right_click; bool middle_click; TextureResource* cursortex; public: MouseCursor(); ~MouseCursor(); const vec2& getPos() const; const vec2& getRelativePos() const; void leftClick(bool click); void rightClick(bool click); void middleClick(bool click); bool leftClick() const; bool rightClick() const; bool middleClick() const; bool leftButtonPressed() const; bool rightButtonPressed() const; bool bothPressed() const; bool buttonPressed() const; int scrollWheel() const; bool isHidden() const; bool isSystemCursor()const; bool isVisible() const; bool hasFocus() const; void scroll(bool dir); void resetButtonState(); void updateRelativePos(const vec2& rel); void updatePos(const vec2& pos); void showCursor(bool show); void useSystemCursor(bool system_cursor); void setCursorTexture(TextureResource* texture); void logic(float dt); void draw() const; }; #endif gource-0.56/src/core/logger.cpp0000644002342600234260000001161515152463042016300 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "logger.h" #include #include #include #include std::map log_levels = boost::assign::map_list_of (LOG_LEVEL_ERROR, " ERROR" ) (LOG_LEVEL_CONSOLE, "CONSOLE" ) (LOG_LEVEL_INFO, " INFO" ) (LOG_LEVEL_SCRIPT, " SCRIPT" ) (LOG_LEVEL_DEBUG, " DEBUG" ) (LOG_LEVEL_WARN, " WARN" ) (LOG_LEVEL_PEDANTIC, " PEDANT" ); #define PARSE_AND_LOG(LOG_LEVEL) \ Logger* logger = Logger::getDefault(); \ \ if(!logger || logger->getLevel() < LOG_LEVEL) return; \ \ char msgbuff[65536]; \ char* buffer = msgbuff; \ \ va_list vl; \ \ va_start(vl, str); \ int string_size = vsnprintf(buffer, sizeof(msgbuff), str, vl) + 1; \ \ if(string_size > sizeof(msgbuff)) { \ buffer = new char[string_size]; \ string_size = vsnprintf(buffer, string_size, str, vl); \ } \ \ va_end(vl); \ \ \ logger->message( LOG_LEVEL, buffer ); \ \ if(buffer != msgbuff) delete[] buffer; // LoggerMessage LoggerMessage::LoggerMessage(int level, const std::string& message) : level(level), message(message) { } // Logger Logger* Logger::getDefault() { return default_logger; } Logger::Logger(int level, FILE* stream, int hist_capacity) { init(level, stream, hist_capacity); } void Logger::init(int level, FILE* stream, int hist_capacity) { this->level = level; this->stream = stream; this->hist_capacity = hist_capacity; this->message_count = 0; this->auto_flush = false; } int Logger::getMessageCount() { return message_count; } void Logger::message(int level, const std::string& message) { if(!level || this->level < level) return; if(stream != 0) { fprintf(stream, "%s: %s\n", log_levels[level].c_str(), message.c_str()); if(auto_flush) fflush(stream); } if(!hist_capacity) return; while(history.size() >= hist_capacity) { history.pop_front(); } history.push_back(LoggerMessage(level, message)); message_count++; } const std::deque& Logger::getHistory() const { return history; } void Logger::setHistoryCapacity(int hist_capacity) { this->hist_capacity = hist_capacity; } void Logger::setAutoFlush(bool auto_flush) { this->auto_flush = auto_flush; } void warnLog(const char *str, ...) { PARSE_AND_LOG(LOG_LEVEL_WARN); } void debugLog(const char *str, ...) { PARSE_AND_LOG(LOG_LEVEL_DEBUG); } void infoLog(const char *str, ...) { PARSE_AND_LOG(LOG_LEVEL_INFO); } void errorLog(const char *str, ...) { PARSE_AND_LOG(LOG_LEVEL_ERROR) } void consoleLog(const char *str, ...) { PARSE_AND_LOG(LOG_LEVEL_CONSOLE); } void scriptLog(const char *str, ...) { PARSE_AND_LOG(LOG_LEVEL_SCRIPT); } void pedanticLog(const char *str, ...) { PARSE_AND_LOG(LOG_LEVEL_PEDANTIC); } Logger* Logger::default_logger = new Logger(LOG_LEVEL_ERROR, stderr, 0); LoggerStringStream WarnLog() { return LoggerStringStream(LOG_LEVEL_WARN); } LoggerStringStream DebugLog() { return LoggerStringStream(LOG_LEVEL_DEBUG); } LoggerStringStream InfoLog() { return LoggerStringStream(LOG_LEVEL_INFO); } LoggerStringStream ErrorLog() { return LoggerStringStream(LOG_LEVEL_ERROR); } LoggerStringStream ConsoleLog() { return LoggerStringStream(LOG_LEVEL_CONSOLE); } LoggerStringStream ScriptLog() { return LoggerStringStream(LOG_LEVEL_SCRIPT); } gource-0.56/src/core/pi.h0000644002342600234260000000315615152463042015077 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef PI_H #define PI_H #define PI 3.14159265 #define RADIANS_TO_DEGREES 57.29577951 #define DEGREES_TO_RADIANS 0.017453292 #endif gource-0.56/src/core/resource.h0000644002342600234260000000540215152463042016312 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef RESOURCEMANAGER_H #define RESOURCEMANAGER_H #include #include #include class ResourceException : public std::exception { protected: std::string resource; public: ResourceException(const std::string& resource) : resource(resource) {} virtual ~ResourceException() throw () {}; virtual const char* what() const throw() { return resource.c_str(); } }; class Resource { int refs; public: std::string resource_name; Resource() { refs =0; }; Resource(const std::string& resource_name) : resource_name(resource_name), refs(0) {}; virtual ~Resource() {}; void setResourceName(const std::string& resource_name) { if(this->resource_name.empty()) this->resource_name = resource_name; }; int refcount() { return refs; }; void addref() { refs++; }; void deref() { refs--; }; }; class ResourceManager { protected: std::map resources; std::string resource_dir; public: void setDir(const std::string& resource_dir); std::string getDir(); ResourceManager(); virtual ~ResourceManager(); static bool fileExists(const std::string& filename); static bool dirExists(const std::string& dirname); void purge(); void release(Resource* resource); }; #endif gource-0.56/src/core/shader_common.cpp0000644002342600234260000011642615152463042017645 0ustar andrewcandrewc#include "shader_common.h" #include "logger.h" #include #include #include #include std::string gSDLAppShaderDir; Regex Shader_pre_version("^\\s*#version\\s*(\\d+)\\s*"); Regex Shader_pre_extension("^\\s*#extension\\s*([a-zA-Z0-9_]+)\\s+:\\s+(enable|require|warn|disable)\\s*$"); Regex Shader_pre_include("^\\s*#include\\s*\"([^\"]+)\""); Regex Shader_uniform_def("^\\s*uniform\\s+(\\w+)\\s+(\\w+)(?:\\[(\\d+)\\])?\\s*;\\s*(?://\\s*(.+))?$"); Regex Shader_error_line("\\b\\d*\\((\\d+)\\) : error "); Regex Shader_error2_line("\\bERROR: \\d+:(\\d+):"); Regex Shader_error3_line("^\\d+:(\\d+)\\(\\d+\\): error"); Regex Shader_warning_line("\\b\\d*\\((\\d+)\\) : warning "); Regex Shader_redefine_line(" (?:defined|declaration) at \\d*\\((\\d+)\\)"); //ShaderException ShaderException::ShaderException(const std::string& message) : message(message) { } ShaderException::ShaderException(const std::string& message, const std::string& source) : message(message), source(source) { } const std::string& ShaderException::getSource() const { return source; } //ShaderPart ShaderPart::ShaderPart() { } void ShaderPart::setSourceFile(const std::string& filename) { this->filename = filename; loadSourceFile(); } void ShaderPart::loadSourceFile() { processed_source.clear(); raw_source.clear(); // get length std::ifstream in(filename.c_str()); if(!in.is_open()) { throw ShaderException(str(boost::format("could not open '%s'") % filename)); } std::string line; while( std::getline(in,line) ) { raw_source += line; raw_source += "\n"; } in.close(); } void ShaderPart::reload() { loadSourceFile(); } void ShaderPart::reset() { processed_source.clear(); defines.clear(); substitutions.clear(); } void ShaderPart::setSource(const std::string& source) { raw_source = source; } void ShaderPart::applySubstitution(std::string& source, const std::string& name, const std::string& value) { std::string::size_type next_match; for(next_match = source.find(name); next_match != std::string::npos; next_match = source.find(name, next_match)) { source.replace(next_match, name.length(), value); next_match += value.length(); } } void ShaderPart::substitute(const std::string& name, const char *value, ...) { va_list vl; char sub[65536]; char* buffer = sub; va_start(vl, value); int string_size = vsnprintf(sub, sizeof(sub), value, vl); if(string_size > sizeof(sub)) { buffer = new char[string_size]; string_size = vsnprintf(buffer, string_size, value, vl); } va_end(vl); substitutions[name] = buffer; } void ShaderPart::substitute(const std::string& name, const std::string& value) { substitute(name, value.c_str()); } void ShaderPart::applySubstitutions(std::string& source) { for(std::map::iterator it = substitutions.begin(); it != substitutions.end(); it++) { applySubstitution(source, it->first, it->second); } } void ShaderPart::applyDefines(std::string& source) { for(std::map::iterator it = defines.begin(); it != defines.end(); it++) { source.append(str(boost::format("#define %s %s\n") % it->first % it->second)); } } void ShaderPart::define(const std::string& name, const std::string& value) { define(name, value.c_str()); } void ShaderPart::define(const std::string& name, const char *value, ...) { va_list vl; char sub[65536]; char* buffer = sub; va_start(vl, value); int string_size = vsnprintf(sub, sizeof(sub), value, vl); if(string_size > sizeof(sub)) { buffer = new char[string_size]; string_size = vsnprintf(buffer, string_size, value, vl); } va_end(vl); defines[name] = buffer; if(buffer != sub) delete[] buffer; } void ShaderPart::define(const std::string& name) { define(name, ""); } void ShaderPart::preprocess() { processed_source.clear(); // add defines at the top of the source applyDefines(processed_source); // do trivial substitutions std::vector matches; std::stringstream in(raw_source); std::string line; while( std::getline(in,line) ) { applySubstitutions(line); processed_source.append(line); processed_source.append("\n"); } } const std::string& ShaderPart::getSource() { if(processed_source.empty()) preprocess(); return processed_source; } //ShaderUniform ShaderUniform::ShaderUniform(AbstractShader* shader, const std::string& name, int uniform_type, const std::string& type_name) : shader(shader), name(name), location(-1), initialized(false), modified(false), baked(false), uniform_type(uniform_type), type_name(type_name) { } void ShaderUniform::unload() { location = -1; } int ShaderUniform::getLocation() { if(location != -1) return location; location = shader->getUniformLocation( name.c_str() ); return location; } const std::string& ShaderUniform::getName() const { return name; } void ShaderUniform::setBaked(bool baked) { if(this->baked == baked) return; this->baked = baked; modified = true; } void ShaderUniform::setComment(const std::string& comment) { this->comment = comment; } const std::string& ShaderUniform::getComment() const { return comment; } //FloatShaderUniform FloatShaderUniform::FloatShaderUniform(AbstractShader* shader, const std::string& name, float value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_FLOAT, "float") { } void FloatShaderUniform::setValue(float value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } float& FloatShaderUniform::getValue() { return value; } void FloatShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("#define %s %e\n") % name % value)); } else { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } } //IntShaderUniform IntShaderUniform::IntShaderUniform(AbstractShader* shader, const std::string& name, int value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_INT, "int") { } void IntShaderUniform::setValue(int value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } int& IntShaderUniform::getValue() { return value; } void IntShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("#define %s %d\n") % name % value)); } else { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } } //BoolShaderUniform BoolShaderUniform::BoolShaderUniform(AbstractShader* shader, const std::string& name, bool value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_BOOL, "bool") { } void BoolShaderUniform::setValue(bool value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } bool& BoolShaderUniform::getValue() { return value; } void BoolShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("#define %s %s\n") % name % (value ? "true" : "false"))); } else { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } } //Sampler1DShaderUniform Sampler1DShaderUniform::Sampler1DShaderUniform(AbstractShader* shader, const std::string& name, int value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_SAMPLER_1D, "sampler1D") { } void Sampler1DShaderUniform::setValue(int value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } void Sampler1DShaderUniform::setBaked(bool baked) { } void Sampler1DShaderUniform::write(std::string& content) const { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } int& Sampler1DShaderUniform::getValue() { return value; } //Sampler2DShaderUniform Sampler2DShaderUniform::Sampler2DShaderUniform(AbstractShader* shader, const std::string& name, int value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_SAMPLER_2D, "sampler2D") { } void Sampler2DShaderUniform::setValue(int value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } int& Sampler2DShaderUniform::getValue() { return value; } //cant be baked void Sampler2DShaderUniform::setBaked(bool baked) { } void Sampler2DShaderUniform::write(std::string& content) const { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } //Sampler3DShaderUniform Sampler3DShaderUniform::Sampler3DShaderUniform(AbstractShader* shader, const std::string& name, int value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_SAMPLER_3D, "sampler3D") { } void Sampler3DShaderUniform::setValue(int value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } int& Sampler3DShaderUniform::getValue() { return value; } //cant be baked? void Sampler3DShaderUniform::setBaked(bool baked) { } void Sampler3DShaderUniform::write(std::string& content) const { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } //Vec2ShaderUniform Vec2ShaderUniform::Vec2ShaderUniform(AbstractShader* shader, const std::string& name, const vec2& value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_VEC2, "vec2") { } void Vec2ShaderUniform::setValue(const vec2& value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } vec2& Vec2ShaderUniform::getValue() { return value; } void Vec2ShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("#define %s vec2(%e, %e)\n") % name % value.x % value.y)); } else { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } } //Vec3ShaderUniform Vec3ShaderUniform::Vec3ShaderUniform(AbstractShader* shader, const std::string& name, const vec3& value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_VEC3, "vec3") { } void Vec3ShaderUniform::setValue(const vec3& value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } vec3& Vec3ShaderUniform::getValue() { return value; } void Vec3ShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("#define %s vec3(%e, %e, %e)\n") % name % value.x % value.y % value.z)); } else { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } } //Vec4ShaderUniform Vec4ShaderUniform::Vec4ShaderUniform(AbstractShader* shader, const std::string& name, const vec4& value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_VEC4, "vec4") { } void Vec4ShaderUniform::setValue(const vec4& value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } vec4& Vec4ShaderUniform::getValue() { return value; } void Vec4ShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("#define %s vec4(%e, %e, %e, %e)\n") % name % value.x % value.y % value.z % value.w)); } else { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } } //Mat3ShaderUniform Mat3ShaderUniform::Mat3ShaderUniform(AbstractShader* shader, const std::string& name, const mat3& value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_MAT3, "mat3") { } void Mat3ShaderUniform::setValue(const mat3& value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } mat3& Mat3ShaderUniform::getValue() { return value; } void Mat3ShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("#define %s mat3(%e, %e, %e, %e, %e, %e, %e, %e, %e)\n") % name % value[0][0] % value[0][1] % value[0][2] % value[1][0] % value[1][1] % value[1][2] % value[2][0] % value[2][1] % value[2][2])); } else { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } } //Mat4ShaderUniform Mat4ShaderUniform::Mat4ShaderUniform(AbstractShader* shader, const std::string& name, const mat4& value) : value(value), ShaderUniform(shader, name, SHADER_UNIFORM_MAT4, "mat4") { } void Mat4ShaderUniform::setValue(const mat4& value) { if(baked && this->value == value) return; this->value = value; modified = true; initialized = true; } mat4& Mat4ShaderUniform::getValue() { return value; } void Mat4ShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("#define %s mat4(%e, %e, %e, %e, %e, %e, %e, %e, %e, %e, %e, %e, %e, %e, %e, %e)\n") % name % value[0][0] % value[0][1] % value[0][2] % value[0][3] % value[1][0] % value[1][1] % value[1][2] % value[1][3] % value[2][0] % value[2][1] % value[2][2] % value[2][3] % value[3][0] % value[3][1] % value[3][2] % value[3][3])); } else { content.append(str(boost::format("uniform %s %s;\n") % type_name % name)); } } //IntegerArrayShaderUniform IntegerArrayShaderUniform::IntegerArrayShaderUniform(AbstractShader* shader, const std::string& name, size_t length) : length(length), ShaderUniform(shader, name, SHADER_UNIFORM_INT_ARRAY, "int") { } IntegerArrayShaderUniform::~IntegerArrayShaderUniform() { } const std::vector& IntegerArrayShaderUniform::getValue() { return value; } size_t IntegerArrayShaderUniform::getLength() const { return value.size(); } void IntegerArrayShaderUniform::copyValue(const std::vector& value) { this->value = value; } void IntegerArrayShaderUniform::setValue(const std::vector& value) { if(baked) { bool match = true; for(size_t i=0;ivalue[i]) { match = false; break; } } if(match) return; } copyValue(value); modified = true; initialized = true; } void IntegerArrayShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("%s[%d] %s = %s[] (\n") % type_name % length % name % type_name)); for(size_t i=0; i& FloatArrayShaderUniform::getValue() { return value; } size_t FloatArrayShaderUniform::getLength() const { return length; } void FloatArrayShaderUniform::copyValue(const std::vector& value) { this->value = value; } void FloatArrayShaderUniform::setValue(const std::vector& value) { if(baked) { bool match = true; for(size_t i=0;ivalue[i]) { match = false; break; } } if(match) return; } copyValue(value); modified = true; initialized = true; } void FloatArrayShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("%s[%d] %s = %s[] (\n") % type_name % length % name % type_name)); for(size_t i=0; ivalue.resize(length); if(value != 0) copyValue(value); } Vec2ArrayShaderUniform::~Vec2ArrayShaderUniform() { } const std::vector& Vec2ArrayShaderUniform::getValue() { return value; } size_t Vec2ArrayShaderUniform::getLength() const { return length; } void Vec2ArrayShaderUniform::copyValue(const vec2* value) { for(size_t i=0; ivalue[i] = value[i]; } } void Vec2ArrayShaderUniform::copyValue(const std::vector& value) { for(size_t i=0; ivalue[i] = value[i]; } } void Vec2ArrayShaderUniform::setValue(const vec2* value) { if(baked) { bool match = true; for(size_t i=0;ivalue[i]) { match = false; break; } } if(match) return; } copyValue(value); modified = true; initialized = true; } void Vec2ArrayShaderUniform::setValue(const std::vector& value) { if(baked) { bool match = true; for(size_t i=0;ivalue[i]) { match = false; break; } } if(match) return; } copyValue(value); modified = true; initialized = true; } void Vec2ArrayShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("%s[%d] %s = %s[] (\n") % type_name % length % name % type_name)); for(size_t i=0; ivalue.resize(length); if(value != 0) copyValue(value); } Vec3ArrayShaderUniform::~Vec3ArrayShaderUniform() { } const std::vector& Vec3ArrayShaderUniform::getValue() { return value; } size_t Vec3ArrayShaderUniform::getLength() const { return length; } void Vec3ArrayShaderUniform::copyValue(const vec3* value) { for(size_t i=0; ivalue[i] = value[i]; } } void Vec3ArrayShaderUniform::copyValue(const std::vector& value) { for(size_t i=0; ivalue[i] = value[i]; } } void Vec3ArrayShaderUniform::setValue(const vec3* value) { if(baked) { bool match = true; for(size_t i=0;ivalue[i]) { match = false; break; } } if(match) return; } copyValue(value); modified = true; initialized = true; } void Vec3ArrayShaderUniform::setValue(const std::vector& value) { if(baked) { bool match = true; for(size_t i=0;ivalue[i]) { match = false; break; } } if(match) return; } copyValue(value); modified = true; initialized = true; } void Vec3ArrayShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("%s[%d] %s = %s[] (\n") % type_name % length % name % type_name)); for(size_t i=0; ivalue.resize(length); if(value != 0) copyValue(value); } Vec4ArrayShaderUniform::~Vec4ArrayShaderUniform() { } const std::vector& Vec4ArrayShaderUniform::getValue() { return value; } size_t Vec4ArrayShaderUniform::getLength() const { return length; } void Vec4ArrayShaderUniform::copyValue(const std::vector& value) { for(size_t i=0; ivalue[i] = value[i]; } } void Vec4ArrayShaderUniform::copyValue(const vec4* value) { for(size_t i=0; ivalue[i] = value[i]; } } void Vec4ArrayShaderUniform::setValue(const vec4* value) { if(baked) { bool match = true; for(size_t i=0;ivalue[i]) { match = false; break; } } if(match) return; } copyValue(value); modified = true; initialized = true; } void Vec4ArrayShaderUniform::setValue(const std::vector& value) { if(baked) { bool match = true; for(size_t i=0;ivalue[i]) { match = false; break; } } if(match) return; } copyValue(value); modified = true; initialized = true; } void Vec4ArrayShaderUniform::write(std::string& content) const { if(baked) { content.append(str(boost::format("%s[%d] %s = %s[] (\n") % type_name % length % name % type_name)); for(size_t i=0; i=line_no) || (i>line_no && i-amount<=line_no)) { context.append(str(boost::format("%s%4d | %s\n") % (i==line_no ? "-> ": " ") % i % line)); } i++; } } bool AbstractShaderPass::errorContext(const std::string& log_message, std::string& context) { std::vector matches; if( !Shader_error_line.match(log_message, &matches) && !Shader_error2_line.match(log_message, &matches) && !Shader_error3_line.match(log_message, &matches) && !(Logger::getDefault()->getLevel() == LOG_LEVEL_WARN && Shader_warning_line.match(log_message, &matches))) return false; int line_no = atoi(matches[0].c_str()); if(Shader_redefine_line.match(log_message, &matches)) { int redefine_line_no = atoi(matches[0].c_str()); showContext(context, redefine_line_no, 3); context += "\n"; } showContext(context, line_no, 3); return true; } void AbstractShaderPass::toString(std::string& out) { if(version!=0) { out.append(str(boost::format("#version %d\n") % version)); } for(std::map::iterator it = extensions.begin(); it != extensions.end(); it++) { out.append(str(boost::format("#extension %s : %s\n") % it->first % it->second)); } for(ShaderUniform* u : uniforms) { u->write(out); } out.append(source); } const std::string& AbstractShaderPass::getObjectSource() { return shader_object_source; } bool AbstractShaderPass::isEmpty() { return source.empty(); } std::list& AbstractShaderPass::getUniforms() { return uniforms; } //add uniform, unless parent Shader has this in which case link to it ShaderUniform* AbstractShaderPass::addArrayUniform(const std::string& name, const std::string& type, size_t length) { ShaderUniform* uniform = 0; if((uniform = parent->getUniform(name)) == 0) { if(type == "int") { uniform = new IntegerArrayShaderUniform(parent, name, length); } else if(type == "float") { uniform = new FloatArrayShaderUniform(parent, name, length); } else if(type == "vec2") { uniform = new Vec2ArrayShaderUniform(parent, name, length); } else if(type == "vec3") { uniform = new Vec3ArrayShaderUniform(parent, name, length); } else if(type == "vec4") { uniform = new Vec4ArrayShaderUniform(parent, name, length); } else { throw ShaderException(str(boost::format("shader uniform arrays for type '%s' not implemented") % type)); } uniform->setInitialized(false); parent->addUniform(uniform); } uniforms.push_back(uniform); return uniform; } ShaderUniform* AbstractShaderPass::addUniform(const std::string& name, const std::string& type) { ShaderUniform* uniform = 0; if((uniform = parent->getUniform(name)) == 0) { if(type == "float") { uniform = new FloatShaderUniform(parent, name); } else if(type == "int") { uniform = new IntShaderUniform(parent, name); } else if(type == "bool") { uniform = new BoolShaderUniform(parent, name); } else if(type == "sampler1D") { uniform = new Sampler1DShaderUniform(parent, name); } else if(type == "sampler2D") { uniform = new Sampler2DShaderUniform(parent, name); } else if(type == "sampler3D") { uniform = new Sampler3DShaderUniform(parent, name); } else if(type == "vec2") { uniform = new Vec2ShaderUniform(parent, name); } else if(type == "vec3") { uniform = new Vec3ShaderUniform(parent, name); } else if(type == "vec4") { uniform = new Vec4ShaderUniform(parent, name); } else if(type == "mat3") { uniform = new Mat3ShaderUniform(parent, name); } else if(type == "mat4") { uniform = new Mat4ShaderUniform(parent, name); } else { throw ShaderException(str(boost::format("unsupported shader uniform type '%s'") % type)); } uniform->setInitialized(false); parent->addUniform(uniform); } uniforms.push_back(uniform); return uniform; } bool AbstractShaderPass::preprocess(const std::string& line) { std::vector matches; if(Shader_pre_version.match(line, &matches)) { version = atoi(matches[0].c_str()); return true; } if(Shader_pre_extension.match(line, &matches)) { extensions[matches[0]] = matches[1]; return true; } if(Shader_pre_include.match(line, &matches)) { std::string include_file = gSDLAppShaderDir + matches[0]; includeFile(include_file); return true; } if(Shader_uniform_def.match(line, &matches)) { std::string uniform_type = matches[0]; std::string uniform_name = matches[1]; ShaderUniform* uniform = 0; if(matches.size() > 2 && !matches[2].empty()) { size_t uniform_length = atoi(matches[2].c_str()); uniform = addArrayUniform(uniform_name, uniform_type, uniform_length); } else { uniform = addUniform(uniform_name, uniform_type); } if(matches.size() > 3 && !matches[3].empty()) uniform->setComment(matches[3]); return true; } return false; } void AbstractShaderPass::includeFile(const std::string& filename) { // get length std::ifstream in(filename.c_str()); if(!in.is_open()) { throw ShaderException(str(boost::format("could not open '%s'") % filename)); } std::string line; while( std::getline(in,line) ) { if(!preprocess(line)) { source += line; source += "\n"; } } in.close(); } void AbstractShaderPass::includeSource(const std::string& string) { std::stringstream in(string); std::string line; while( std::getline(in,line) ) { if(!preprocess(line)) { source += line; source += "\n"; } } } // AbstractShader AbstractShader::AbstractShader(const std::string& prefix) : prefix(prefix), Resource(prefix) { setDefaults(); } AbstractShader::AbstractShader() { setDefaults(); } void AbstractShader::setDynamicCompile(bool dynamic_compile) { this->dynamic_compile = dynamic_compile; } void AbstractShader::setDefaults() { vertex_shader = 0; fragment_shader = 0; geometry_shader = 0; compute_shader = 0; program = 0; dynamic_compile = false; } void AbstractShader::clear() { unload(); for(std::map::iterator it= uniforms.begin(); it!=uniforms.end();it++) { delete it->second; } uniforms.clear(); uniform_list.clear(); if(vertex_shader != 0) delete vertex_shader; if(geometry_shader != 0) delete geometry_shader; if(fragment_shader != 0) delete fragment_shader; if(compute_shader != 0) delete compute_shader; vertex_shader = 0; geometry_shader = 0; fragment_shader = 0; compute_shader = 0; } bool AbstractShader::isEmpty() { if( (!vertex_shader || vertex_shader->isEmpty()) && (!fragment_shader || fragment_shader->isEmpty()) && (!geometry_shader || geometry_shader->isEmpty()) && (!compute_shader || compute_shader->isEmpty())) { return true; } return false; } void AbstractShader::reload(bool force) { if(isEmpty()) return; if(force && !prefix.empty()) { loadPrefix(); } else { load(); } } void AbstractShader::use() { if(Logger::getDefault()->getLevel() == LOG_LEVEL_PEDANTIC) { for(std::map::iterator it= uniforms.begin(); it!=uniforms.end();it++) { ShaderUniform* u = it->second; if(!u->isInitialized()) pedanticLog("shader '%s': uniform '%s' was never initialized", (!resource_name.empty() ? resource_name.c_str() : "???"), u->getName().c_str()); } } if(dynamic_compile && needsCompile()) { unbind(); load(); infoLog("shader '%s' recompiled", resource_name.c_str()); } bind(); applyUniforms(); } unsigned int AbstractShader::getProgram() { return program; } void AbstractShader::addUniform(ShaderUniform* uniform) { if(getUniform(uniform->getName()) != 0) { throw ShaderException(str(boost::format("shader already has a uniform named '%s'") % uniform->getName())); } uniforms[uniform->getName()] = uniform; uniform_list.push_back(uniform); } ShaderUniform* AbstractShader::getUniform(const std::string& name) { std::map::iterator it = uniforms.find(name); if(it != uniforms.end()) { return it->second; } return 0; } void AbstractShader::includeSource(unsigned int shader_object_type, const std::string& source) { AbstractShaderPass* pass = grabShaderPass(shader_object_type); pass->includeSource(source); } void AbstractShader::includeFile(unsigned int shader_object_type, const std::string& filename) { AbstractShaderPass* pass = grabShaderPass(shader_object_type); pass->includeFile(filename); } void AbstractShader::addSubstitute(const std::string& name, const std::string& value) { substitutions[name] = value; } void AbstractShader::addSubstitute(const std::string& name, const char *value, ...) { va_list vl; char sub[65536]; char* buffer = sub; va_start(vl, value); int string_size = vsnprintf(sub, sizeof(sub), value, vl); if(string_size > sizeof(sub)) { buffer = new char[string_size]; string_size = vsnprintf(buffer, string_size, value, vl); } va_end(vl); substitutions[name] = buffer; if(buffer != sub) delete[] buffer; } void AbstractShader::substitute(std::string& source, const std::string& name, const std::string& value) { std::string::size_type next_match; for(next_match = source.find(name); next_match != std::string::npos; next_match = source.find(name, next_match)) { source.replace(next_match, name.length(), value); next_match += value.length(); } } void AbstractShader::applySubstitutions(std::string& source) { for(std::map::iterator it = substitutions.begin(); it != substitutions.end(); it++) { substitute(source, it->first, it->second); } } void AbstractShader::setBool (const std::string& name, bool value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_BOOL) return; ((BoolShaderUniform*)uniform)->setValue(value); } void AbstractShader::setInteger (const std::string& name, int value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_INT) return; ((IntShaderUniform*)uniform)->setValue(value); } void AbstractShader::setSampler1D (const std::string& name, int value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_SAMPLER_1D) return; ((Sampler1DShaderUniform*)uniform)->setValue(value); } void AbstractShader::setSampler2D (const std::string& name, int value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_SAMPLER_2D) return; ((Sampler2DShaderUniform*)uniform)->setValue(value); } void AbstractShader::setSampler3D (const std::string& name, int value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_SAMPLER_3D) return; ((Sampler3DShaderUniform*)uniform)->setValue(value); } void AbstractShader::setFloat(const std::string& name, float value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_FLOAT) return; ((FloatShaderUniform*)uniform)->setValue(value); } void AbstractShader::setVec2 (const std::string& name, const vec2& value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_VEC2) return; ((Vec2ShaderUniform*)uniform)->setValue(value); } void AbstractShader::setVec3 (const std::string& name, const vec3& value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_VEC3) return; ((Vec3ShaderUniform*)uniform)->setValue(value); } void AbstractShader::setFloatArray(const std::string& name, std::vector& value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_FLOAT_ARRAY) return; ((FloatArrayShaderUniform*)uniform)->setValue(value); } void AbstractShader::setIntegerArray (const std::string& name, std::vector& value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_INT_ARRAY) return; ((IntegerArrayShaderUniform*)uniform)->setValue(value); } void AbstractShader::setVec2Array (const std::string& name, vec2* value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_VEC2_ARRAY) return; ((Vec2ArrayShaderUniform*)uniform)->setValue(value); } void AbstractShader::setVec2Array (const std::string& name, std::vector& value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_VEC2_ARRAY) return; ((Vec2ArrayShaderUniform*)uniform)->setValue(value); } void AbstractShader::setVec3Array (const std::string& name, vec3* value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_VEC3_ARRAY) return; ((Vec3ArrayShaderUniform*)uniform)->setValue(value); } void AbstractShader::setVec3Array (const std::string& name, std::vector& value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_VEC3_ARRAY) return; ((Vec3ArrayShaderUniform*)uniform)->setValue(value); } void AbstractShader::setVec4Array (const std::string& name, vec4* value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_VEC4_ARRAY) return; ((Vec4ArrayShaderUniform*)uniform)->setValue(value); } void AbstractShader::setVec4Array (const std::string& name, std::vector& value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_VEC4_ARRAY) return; ((Vec4ArrayShaderUniform*)uniform)->setValue(value); } void AbstractShader::setVec4 (const std::string& name, const vec4& value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_VEC4) return; ((Vec4ShaderUniform*)uniform)->setValue(value); } void AbstractShader::setMat3 (const std::string& name, const mat3& value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_MAT3) return; ((Mat3ShaderUniform*)uniform)->setValue(value); } void AbstractShader::setMat4 (const std::string& name, const mat4& value) { ShaderUniform* uniform = getUniform(name); if(!uniform || uniform->getType() != SHADER_UNIFORM_MAT4) return; ((Mat4ShaderUniform*)uniform)->setValue(value); } void AbstractShader::setBaked(const std::string& name, bool baked) { ShaderUniform* uniform = getUniform(name); if(!uniform) return; uniform->setBaked(baked); } void AbstractShader::setBakedUniforms(bool baked) { for(std::map::iterator it= uniforms.begin(); it!=uniforms.end();it++) { it->second->setBaked(baked); } } const std::list& AbstractShader::getUniforms() { return uniform_list; } void AbstractShader::applyUniforms() { for(std::map::iterator it= uniforms.begin(); it!=uniforms.end();it++) { ShaderUniform* u = it->second; if(!u->isBaked()) applyUniform(u); } } bool AbstractShader::needsCompile() { for(std::map::iterator it= uniforms.begin(); it!=uniforms.end();it++) { ShaderUniform* u = it->second; if(u->isBaked() && u->isModified()) { //infoLog("baked uniform %s needs update", u->getName().c_str()); return true; } } return false; } gource-0.56/src/core/timezone.cpp0000644002342600234260000000154015152463042016647 0ustar andrewcandrewc#include "timezone.h" #include #include std::string local_tz; bool tz_initialized = false; void init_tz() { if(tz_initialized) return; //check if TZ is set, store current value char* current_tz_env = getenv("TZ"); if(current_tz_env != 0) { local_tz = std::string("TZ="); local_tz += std::string(current_tz_env); } tz_initialized = true; } void set_utc_tz() { //change TZ to UTC putenv((char*)"TZ=UTC"); tzset(); } void unset_utc_tz() { if(!local_tz.empty()) { putenv((char*)local_tz.c_str()); } else { #ifndef _WIN32 unsetenv("TZ"); #else putenv((char*)"TZ="); #endif } tzset(); } time_t mktime_utc(struct tm* timeinfo) { init_tz(); set_utc_tz(); time_t time_utc = mktime(timeinfo); unset_utc_tz(); return time_utc; } gource-0.56/src/core/shader_common.h0000644002342600234260000003273415152463042017311 0ustar andrewcandrewc#ifndef SHADER_COMMON_H #define SHADER_COMMON_H #include "resource.h" #include "regex.h" #include "vectors.h" #include #include #include #include #include extern std::string gSDLAppShaderDir; enum { SHADER_UNIFORM_INT, SHADER_UNIFORM_FLOAT, SHADER_UNIFORM_BOOL, SHADER_UNIFORM_SAMPLER_1D, SHADER_UNIFORM_SAMPLER_2D, SHADER_UNIFORM_SAMPLER_3D, SHADER_UNIFORM_VEC2, SHADER_UNIFORM_VEC3, SHADER_UNIFORM_VEC4, SHADER_UNIFORM_MAT3, SHADER_UNIFORM_MAT4, SHADER_UNIFORM_INT_ARRAY, SHADER_UNIFORM_FLOAT_ARRAY, SHADER_UNIFORM_VEC2_ARRAY, SHADER_UNIFORM_VEC3_ARRAY, SHADER_UNIFORM_VEC4_ARRAY }; extern Regex Shader_pre_version; extern Regex Shader_pre_extension; extern Regex Shader_pre_include; extern Regex Shader_uniform_def; extern Regex Shader_error_line; extern Regex Shader_error2_line; extern Regex Shader_error3_line; extern Regex Shader_warning_line; extern Regex Shader_redefine_line; class ShaderException : public std::exception { protected: std::string message; std::string source; public: ShaderException(const std::string& message); ShaderException(const std::string& message, const std::string& source); ~ShaderException() throw () {}; virtual const char* what() const throw() { return message.c_str(); } const std::string& getSource() const; }; class AbstractShader; class ShaderUniform { protected: std::string name; std::string comment; int location; AbstractShader* shader; int uniform_type; std::string type_name; bool modified; bool initialized; bool baked; public: ShaderUniform(AbstractShader* shader, const std::string& name, int uniform_type, const std::string& type_name); virtual ~ShaderUniform() {}; virtual void unload(); int getLocation(); int getType() { return uniform_type; }; virtual void write(std::string& content) const {}; const std::string& getName() const; bool isInitialized() const { return initialized; }; bool isBaked() const { return baked; }; bool isModified() const { return modified; }; void setComment(const std::string& comment); const std::string& getComment() const; void setInitialized(bool initialized) { this->initialized = initialized; }; virtual void setBaked(bool baked); virtual void setModified(bool modified) { this->modified = modified; }; }; class FloatShaderUniform : public ShaderUniform { float value; public: FloatShaderUniform(AbstractShader* shader, const std::string& name, float value = 0.0f); void write(std::string& content) const; void setValue(float value); float& getValue(); }; class IntShaderUniform : public ShaderUniform { int value; public: IntShaderUniform(AbstractShader* shader, const std::string& name, int value = 0); void write(std::string& content) const; void setValue(int value); int& getValue(); }; class BoolShaderUniform : public ShaderUniform { bool value; public: BoolShaderUniform(AbstractShader* shader, const std::string& name, bool value = false); void write(std::string& content) const; void setValue(bool value); bool& getValue(); }; class Sampler1DShaderUniform : public ShaderUniform { int value; public: Sampler1DShaderUniform(AbstractShader* shader, const std::string& name, int value = 0); void write(std::string& content) const; void setBaked(bool baked); void setValue(int value); int& getValue(); }; class Sampler2DShaderUniform : public ShaderUniform { int value; public: Sampler2DShaderUniform(AbstractShader* shader, const std::string& name, int value = 0); void write(std::string& content) const; void setBaked(bool baked); void setValue(int value); int& getValue(); }; class Sampler3DShaderUniform : public ShaderUniform { int value; public: Sampler3DShaderUniform(AbstractShader* shader, const std::string& name, int value = 0); void write(std::string& content) const; void setBaked(bool baked); void setValue(int value); int& getValue(); }; class Vec2ShaderUniform : public ShaderUniform { vec2 value; public: Vec2ShaderUniform(AbstractShader* shader, const std::string& name, const vec2& value = vec2(0.0f)) ; void write(std::string& content) const; void setValue(const vec2& value); vec2& getValue(); }; class Vec3ShaderUniform : public ShaderUniform { vec3 value; public: Vec3ShaderUniform(AbstractShader* shader, const std::string& name, const vec3& value = vec3(0.0f)); void write(std::string& content) const; void setValue(const vec3& value); vec3& getValue(); }; class Vec4ShaderUniform : public ShaderUniform { vec4 value; public: Vec4ShaderUniform(AbstractShader* shader, const std::string& name, const vec4& value = vec4(0.0f)); void write(std::string& content) const; void setValue(const vec4& value); vec4& getValue(); }; class Mat3ShaderUniform : public ShaderUniform { mat3 value; public: Mat3ShaderUniform(AbstractShader* shader, const std::string& name, const mat3& value = mat3(1.0f)); void write(std::string& content) const; void setValue(const mat3& value); mat3& getValue(); }; class Mat4ShaderUniform : public ShaderUniform { mat4 value; public: Mat4ShaderUniform(AbstractShader* shader, const std::string& name, const mat4& value = mat4(1.0f)); void write(std::string& content) const; void setValue(const mat4& value); mat4& getValue(); }; class IntegerArrayShaderUniform : public ShaderUniform { std::vector value; size_t length; void copyValue(const std::vector& value); public: IntegerArrayShaderUniform(AbstractShader* shader, const std::string& name, size_t length); ~IntegerArrayShaderUniform(); void write(std::string& content) const; void setValue(const std::vector& value); const std::vector& getValue(); size_t getLength() const; }; class FloatArrayShaderUniform : public ShaderUniform { std::vector value; size_t length; void copyValue(const std::vector& value); public: FloatArrayShaderUniform(AbstractShader* shader, const std::string& name, size_t length); ~FloatArrayShaderUniform(); void write(std::string& content) const; void setValue(const std::vector& value); const std::vector& getValue(); size_t getLength() const; }; class Vec2ArrayShaderUniform : public ShaderUniform { std::vector value; size_t length; void copyValue(const vec2* value); void copyValue(const std::vector& value); public: Vec2ArrayShaderUniform(AbstractShader* shader, const std::string& name, size_t length, const vec2* value = 0); ~Vec2ArrayShaderUniform(); void write(std::string& content) const; void setValue(const vec2* value); void setValue(const std::vector& value); const std::vector& getValue(); size_t getLength() const; }; class Vec3ArrayShaderUniform : public ShaderUniform { std::vector value; size_t length; void copyValue(const vec3* value); void copyValue(const std::vector& value); public: Vec3ArrayShaderUniform(AbstractShader* shader, const std::string& name, size_t length, const vec3* value = 0); ~Vec3ArrayShaderUniform(); void write(std::string& content) const; void setValue(const vec3* value); void setValue(const std::vector& value); const std::vector& getValue(); size_t getLength() const; }; class Vec4ArrayShaderUniform : public ShaderUniform { std::vector value; size_t length; void copyValue(const vec4* value); void copyValue(const std::vector& value); public: Vec4ArrayShaderUniform(AbstractShader* shader, const std::string& name, size_t length, const vec4* value = 0); ~Vec4ArrayShaderUniform(); void write(std::string& content) const; void setValue(const vec4* value); void setValue(const std::vector& value); const std::vector& getValue(); size_t getLength() const; }; class ShaderPart { std::string filename; std::string raw_source; std::string processed_source; std::map defines; std::map substitutions; void preprocess(); void loadSourceFile(); void applySubstitution(std::string& source, const std::string& name, const std::string& value); void applyDefines(std::string& source); void applySubstitutions(std::string& source); public: ShaderPart(); void setSourceFile(const std::string& filename); void setSource(const std::string& source); void reload(); void reset(); void substitute(const std::string& name, const char *value, ...); void substitute(const std::string& name, const std::string& value); void define(const std::string& name); void define(const std::string& name, const char *value, ...); void define(const std::string& name, const std::string& value); const std::string& getSource(); }; class AbstractShaderPass { protected: int shader_object_type; std::string shader_object_desc; unsigned int shader_object; int version; std::map extensions; AbstractShader* parent; std::string source; std::string shader_object_source; std::list uniforms; void showContext(std::string& context, int line_no, int amount); bool errorContext(const std::string& log_message, std::string& context); bool preprocess(const std::string& line); public: AbstractShaderPass(AbstractShader* parent, int shader_object_type, const std::string& shader_object_desc); virtual ~AbstractShaderPass() {}; int getType() { return shader_object_type; }; bool isEmpty(); void toString(std::string& out); const std::string& getObjectSource(); ShaderUniform* addArrayUniform(const std::string& name, const std::string& type, size_t length); ShaderUniform* addUniform(const std::string& name, const std::string& type); void includeSource(const std::string& source); void includeFile(const std::string& filename); std::list& getUniforms(); virtual void attachTo(unsigned int program) = 0; virtual void unload() = 0; virtual void compile() = 0; virtual void checkError() = 0; }; class AbstractShader : public Resource { protected: std::map uniforms; std::list uniform_list; std::map substitutions; std::string prefix; unsigned int program; bool dynamic_compile; void setDefaults(); virtual void loadPrefix() = 0; virtual void checkProgramError() = 0; public: AbstractShaderPass* vertex_shader; AbstractShaderPass* geometry_shader; AbstractShaderPass* compute_shader; AbstractShaderPass* fragment_shader; AbstractShader(); AbstractShader(const std::string& prefix); unsigned int getProgram(); void clear(); void reload(bool force = false); bool isEmpty(); void includeSource(unsigned int shader_object_type, const std::string& source); void includeFile(unsigned int shader_object_type, const std::string& filename); static void substitute(std::string& source, const std::string& name, const std::string& value); void addSubstitute(const std::string& name, const std::string& value); void addSubstitute(const std::string& name, const char *value, ...); void applySubstitutions(std::string& source); void addUniform(ShaderUniform* uniform); ShaderUniform* getUniform(const std::string& name); void setDynamicCompile(bool dynamic_compile); bool needsCompile(); const std::list& getUniforms(); void applyUniforms(); void setBool(const std::string& name, bool value); void setInteger (const std::string& name, int value); void setSampler1D(const std::string& name, int value); void setSampler2D(const std::string& name, int value); void setSampler3D(const std::string& name, int value); void setFloat(const std::string& name, float value); void setVec2 (const std::string& name, const vec2& value); void setVec3 (const std::string& name, const vec3& value); void setVec4 (const std::string& name, const vec4& value); void setMat3 (const std::string& name, const mat3& value); void setMat4 (const std::string& name, const mat4& value); void setIntegerArray(const std::string& name, std::vector& value); void setFloatArray(const std::string& name, std::vector& value); void setVec2Array(const std::string& name, vec2* value); void setVec2Array(const std::string& name, std::vector& value); void setVec3Array(const std::string& name, vec3* value); void setVec3Array(const std::string& name, std::vector& value); void setVec4Array(const std::string& name, vec4* value); void setVec4Array(const std::string& name, std::vector& value); void setBaked(const std::string& name, bool baked); void setBakedUniforms(bool baked); virtual AbstractShaderPass* grabShaderPass(unsigned int shader_object_type) = 0; virtual void applyUniform(ShaderUniform* u) = 0; virtual int getUniformLocation(const std::string& uniform_name) = 0; virtual void compile() = 0; virtual void link() = 0; virtual void load() = 0; virtual void unload() = 0; virtual void bind() = 0; virtual void unbind() = 0; void use(); }; #endif gource-0.56/src/core/frustum.h0000644002342600234260000000507415152463042016175 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FRUSTUM_H #define FRUSTUM_H #include "gl.h" #include "plane.h" #include "pi.h" #include "bounds.h" class Frustum { float near_distance, far_distance; float view_ratio; float fov; float near_half_width; float near_half_height; float far_half_width; float far_half_height; vec3 near_top_left, near_top_right; vec3 near_bottom_left, near_bottom_right; vec3 far_top_left, far_top_right; vec3 far_bottom_left, far_bottom_right; Plane planes[6]; public: Frustum(); Frustum(const vec3& source, const vec3& target, const vec3& up, float fov, float near_distance, float far_distance); void update(const vec3& source, const vec3& target, const vec3& up, float fov, float near_distance, float far_distance); void updatePerspective(float fov, float near_distance, float far_distance); void updateView(const vec3& source, const vec3& target, const vec3& up); bool contains(const vec3& p) const; bool intersects(const Bounds3D& bounds) const; bool intersects(const Bounds2D& bounds, float z = 0.0) const; }; #endif gource-0.56/src/core/stringhash.cpp0000644002342600234260000000466315152463042017200 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "stringhash.h" int gStringHashSeed = 31; int stringHash(const std::string& str) { int val = 0; int n = str.size(); for (int i = 0; i < n; i++) { val = val + str[i] * (gStringHashSeed^(n-i)); } if(val<0) { val = -val; } return val; } vec2 vec2Hash(const std::string& str) { int hash = stringHash(str); int x = ((hash/7) % 255) - 127; int y = ((hash/3) % 255) - 127; vec2 v = normalise(vec2(x, y)); return v; } vec3 vec3Hash(const std::string& str) { int hash = stringHash(str); int x = ((hash/7) % 255) - 127; int y = ((hash/3) % 255) - 127; int z = hash % 255; vec3 v = normalise(vec3(x, y, z)); return v; } vec3 colourHash(const std::string& str) { int hash = stringHash(str); if(hash == 0) hash++; int r = (hash/7) % 255; int g = (hash/3) % 255; int b = hash % 255; vec3 colour = normalise(vec3(r, g, b)); return colour; } gource-0.56/src/core/shader.h0000644002342600234260000000531615152463042015735 0ustar andrewcandrewc/* Copyright (c) 2009 Andrew Caudwell (acaudwell@gmail.com) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef GLSL_SHADER_H #define GLSL_SHADER_H #include "vectors.h" #include "resource.h" #include #include #include #include #include #include #include "shader_common.h" class Shader; class ShaderPass : public AbstractShaderPass { public: ShaderPass(Shader* parent, int shader_object_type, const std::string& shader_object_desc); ~ShaderPass(); void attachTo(unsigned int program); void unload(); void compile(); void checkError(); }; class Shader : public AbstractShader { protected: void checkProgramError(); public: Shader(); Shader(const std::string& prefix); ~Shader(); void applyUniform(ShaderUniform* u); int getUniformLocation(const std::string& uniform_name); void loadPrefix(); void compile(); void link(); void load(); void unload(); void bind(); void unbind(); AbstractShaderPass* grabShaderPass(unsigned int shader_object_type); }; class ShaderManager : public ResourceManager { public: ShaderManager(); Shader* grab(const std::string& shader_prefix); void manage(Shader* shader); void unload(); void reload(bool force = false); }; extern ShaderManager shadermanager; #endif gource-0.56/src/action.cpp0000644002342600234260000000742015152463042015345 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "action.h" RAction::RAction(RUser* source, RFile* target, time_t timestamp, float t, const vec3& colour) : colour(colour), source(source), target(target), timestamp(timestamp), t(t), progress(0.0f), rate(0.5f) { } void RAction::apply() { target->touch(timestamp, colour); } void RAction::logic(float dt) { if(progress >= 1.0) return; if(progress == 0.0) { apply(); } float action_rate = std::min(10.0f, rate * std::max(1.0f, ((float)source->getPendingActionCount()))); progress = std::min(progress + action_rate * dt, 1.0f); } void RAction::drawToVBO(quadbuf& buffer) const { if(isFinished()) return; vec2 src = source->getPos(); vec2 dest = target->getAbsolutePos(); //TODO: could use glm::perp vec2 n = normalise(dest - src); vec2 perp = vec2(-n.y, n.x); vec2 offset = perp * target->getSize() * 0.5f; vec2 offset_src = offset * 0.3f; float alpha = 1.0 - progress; float alpha2 = alpha * 0.1; vec4 col1 = vec4(colour, alpha); vec4 col2 = vec4(colour, alpha2); quadbuf_vertex v1(src - offset_src, col2, vec2(0.0f, 0.0f)); quadbuf_vertex v2(src + offset_src, col2, vec2(0.0f, 1.0f)); quadbuf_vertex v3(dest + offset, col1, vec2(1.0f, 1.0f)); quadbuf_vertex v4(dest - offset, col1, vec2(1.0f, 0.0f)); buffer.add(0, v1, v2, v3, v4); } void RAction::draw(float dt) { if(isFinished()) return; vec2 src = source->getPos(); vec2 dest = target->getAbsolutePos(); vec2 n = normalise(dest - src); vec2 perp = vec2(-n.y, n.x); vec2 offset = perp * target->getSize() * 0.5f; vec2 offset_src = offset * 0.3f; float alpha = 1.0 - progress; float alpha2 = alpha * 0.1; vec4 col1 = vec4(colour, alpha); vec4 col2 = vec4(colour, alpha2); glBegin(GL_QUADS); glColor4fv(glm::value_ptr(col2)); glTexCoord2f(0.0,0.0); glVertex2f(src.x - offset_src.x, src.y - offset_src.y); glTexCoord2f(0.0,1.0); glVertex2f(src.x + offset_src.x, src.y + offset_src.y); glColor4fv(glm::value_ptr(col1)); glTexCoord2f(1.0,1.0); glVertex2f(dest.x + offset.x, dest.y + offset.y); glTexCoord2f(1.0,0.0); glVertex2f(dest.x - offset.x, dest.y - offset.y); glEnd(); } CreateAction::CreateAction(RUser* source, RFile* target, time_t timestamp, float t) : RAction(source, target, timestamp, t, vec3(0.0f, 1.0f, 0.0f)) { } RemoveAction::RemoveAction(RUser* source, RFile* target, time_t timestamp, float t) : RAction(source, target, timestamp, t, vec3(1.0f, 0.0f, 0.0f)) { } void RemoveAction::logic(float dt) { float old_progress = progress; RAction::logic(dt); if(old_progress < 1.0 && progress >= 1.0) { target->remove(timestamp); } } ModifyAction::ModifyAction(RUser* source, RFile* target, time_t timestamp, float t, const vec3& modify_colour) : RAction(source, target, timestamp, t, vec3(1.0f, 0.7f, 0.3f)), modify_colour(modify_colour) { } void ModifyAction::apply() { RAction::apply(); target->setFileColour(modify_colour); } gource-0.56/src/bloom.h0000644002342600234260000000313315152463042014642 0ustar andrewcandrewc/* Copyright (C) 2011 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef GOURCE_BLOOM_VBO_H #define GOURCE_BLOOM_VBO_H #include #include "core/display.h" #include "core/vectors.h" #include "core/logger.h" //note this should be 64 bytes class bloom_vertex { public: bloom_vertex() {}; bloom_vertex(const vec2& pos, const vec4& colour, const vec4& texcoord) : pos(pos), colour(colour), texcoord(texcoord) {}; vec2 pos; vec4 colour; vec4 texcoord; char padding[24]; }; class bloombuf { bloom_vertex* data; int data_size; GLuint bufferid; int buffer_size; int vertex_count; void resize(int new_size); public: bloombuf(int data_size = 0); ~bloombuf(); void unload(); void reset(); size_t vertices(); size_t capacity(); void add(GLuint textureid, const vec2& pos, const vec2& dims, const vec4& colour, const vec4& texcoord); void update(); void draw(); }; #endif gource-0.56/src/spline.cpp0000644002342600234260000001037115152463042015361 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "spline.h" SplineEdge::SplineEdge() { } void SplineEdge::update(const vec2& pos1, const vec4& col1, const vec2& pos2, const vec4& col2, const vec2& spos) { vec2 pt_last; vec4 col_last; vec2 mid = (pos1 - pos2) * 0.5f; vec2 to = vec2(pos1 - spos); //TODO: not sure this makes any sense //float dp = std::min(1.0f, to.normal().dot(mid.normal())); float dp = std::min(1.0f, glm::dot(normalise(to), normalise(mid)) ); float ang = acos(dp) / PI; int edge_detail = std::min(10, (int) (ang * 100.0)); if(edge_detail<1) edge_detail = 1; spline_point.clear(); spline_colour.clear(); spline_point.reserve(edge_detail+1); spline_colour.reserve(edge_detail+1); //calculate positions for(int i=0; i <= edge_detail; i++) { float t = (float)i/edge_detail; float tt = 1.0f-t; vec2 p0 = pos1 * t + spos * tt; vec2 p1 = spos * t + pos2 * tt; vec2 pt = p0 * t + p1 * tt; vec4 coln = col1 * t + col2 * tt; spline_point.push_back(pt); spline_colour.push_back(coln); } const float pos = gGourceSettings.dir_name_position; const float s_quota = 0.5f - glm::abs(pos - 0.5f); const float p_quota = 1.0f - s_quota; label_pos = pos1 * (p_quota * (1.0f - pos)) + pos2 * (p_quota * pos) + spos * s_quota; } const vec2& SplineEdge::getLabelPos() const { return label_pos; } void SplineEdge::drawToVBO(quadbuf& buffer) const { int edges_count = spline_point.size() - 1; for(int i=0; i < edges_count; i++) { //vec2 perp = (spline_point[i] - spline_point[i+1]).perpendicular().normal() * 2.5f; vec2 perp = (spline_point[i] - spline_point[i+1]); perp = normalise(vec2(-perp.y, perp.x)) * 2.5f; quadbuf_vertex v1(spline_point[i] + perp, spline_colour[i], vec2(1.0f, 0.0f)); quadbuf_vertex v2(spline_point[i] - perp, spline_colour[i], vec2(0.0f, 0.0f)); quadbuf_vertex v3(spline_point[i+1] - perp, spline_colour[i+1], vec2(0.0f, 0.0f)); quadbuf_vertex v4(spline_point[i+1] + perp, spline_colour[i+1], vec2(1.0f, 0.0f)); buffer.add(0, v1, v2, v3, v4); } } void SplineEdge::drawBeam(const vec2 & pos1, const vec4 & col1, const vec2 & pos2, const vec4 & col2, float radius, bool first) const{ //vec2 perp = (pos1 - pos2).perpendicular().normal() * radius; vec2 perp = (pos1 - pos2); perp = normalise(vec2(-perp.y, perp.x)) * radius; // src point if(first) { glColor4fv(glm::value_ptr(col1)); glTexCoord2f(1.0,0.0); glVertex2f(pos1.x + perp.x, pos1.y + perp.y); glTexCoord2f(0.0,0.0); glVertex2f(pos1.x - perp.x, pos1.y - perp.y); } // dest point glColor4fv(glm::value_ptr(col2)); glTexCoord2f(1.0,0.0); glVertex2f(pos2.x + perp.x, pos2.y + perp.y); glTexCoord2f(0.0,0.0); glVertex2f(pos2.x - perp.x, pos2.y - perp.y); } void SplineEdge::drawShadow() const{ int edges_count = spline_point.size() - 1; vec2 offset(2.0, 2.0); glBegin(GL_QUAD_STRIP); for(int i=0;i. */ #include "gource_settings.h" #include "core/sdlapp.h" #include #include #include #include "core/utf8/utf8.h" #include #include "formats/hg.h" #include "formats/git.h" #include "formats/bzr.h" #include "formats/cvs-exp.h" #include "formats/cvs2cl.h" #include "formats/svn.h" #ifndef GOURCE_FONT_FILE #define GOURCE_FONT_FILE "FreeSans.ttf" #endif GourceSettings gGourceSettings; //display help message void GourceSettings::help(bool extended_help) { #ifdef _WIN32 //resize window to fit help message SDLApp::resizeConsole(1040); SDLApp::showConsole(true); #endif printf("Gource v%s\n", GOURCE_VERSION); printf("Usage: gource [options] [path]\n"); printf("\nOptions:\n"); printf(" -h, --help Help\n\n"); printf(" -WIDTHxHEIGHT, --viewport Set viewport size\n"); printf(" -f, --fullscreen Fullscreen\n"); printf(" --screen SCREEN Screen number\n"); printf(" --multi-sampling Enable multi-sampling\n"); #ifndef _WIN32 printf(" --high-dpi Request a high DPI display\n"); #endif printf(" --no-vsync Disable vsync\n\n"); printf(" --start-date 'YYYY-MM-DD hh:mm:ss +tz' Start at a date and optional time\n"); printf(" --stop-date 'YYYY-MM-DD hh:mm:ss +tz' Stop at a date and optional time\n\n"); printf(" -p, --start-position POSITION Start at some position (0.0-1.0 or 'random')\n"); printf(" --stop-position POSITION Stop at some position\n"); printf(" -t, --stop-at-time SECONDS Stop after a specified number of seconds\n"); printf(" --stop-at-end Stop at end of the log\n"); printf(" --dont-stop Keep running after the end of the log\n"); printf(" --loop Loop at the end of the log\n\n"); printf(" -a, --auto-skip-seconds SECONDS Auto skip to next entry if nothing happens\n"); printf(" for a number of seconds (default: 3)\n"); printf(" --disable-auto-skip Disable auto skip\n"); printf(" -s, --seconds-per-day SECONDS Speed in seconds per day (default: 10)\n"); printf(" --realtime Realtime playback speed\n"); printf(" --no-time-travel Use the time of the last commit if the\n"); printf(" time of a commit is in the past\n"); printf(" --author-time Use the timestamp of the author instead of\n"); printf(" the timestamp of the committer\n"); printf(" -c, --time-scale SCALE Change simulation time scale (default: 1.0)\n"); printf(" -e, --elasticity FLOAT Elasticity of nodes (default: 0.0)\n\n"); printf(" --key Show file extension key\n\n"); printf(" --user-image-dir DIRECTORY Dir containing images to use as avatars\n"); printf(" --default-user-image IMAGE Default user image file\n"); printf(" --fixed-user-size Use a fixed size throughout\n"); printf(" --colour-images Colourize user images\n\n"); printf(" -i, --file-idle-time SECONDS Time files remain idle (default: 0)\n"); printf(" --file-idle-time-at-end SECONDS Time files remain idle at end (default: 0)\n\n"); printf(" --max-files NUMBER Max number of files or 0 for no limit\n"); printf(" --max-file-lag SECONDS Max time files of a commit can take to appear\n\n"); printf(" --log-command VCS Show the VCS log command (git,svn,hg,bzr,cvs2cl)\n"); printf(" --log-format VCS Specify the log format (git,svn,hg,bzr,cvs2cl,custom)\n\n"); printf(" --load-config CONF_FILE Load a config file\n"); printf(" --save-config CONF_FILE Save a config file with the current options\n\n"); printf(" -o, --output-ppm-stream FILE Output PPM stream to a file ('-' for STDOUT)\n"); printf(" -r, --output-framerate FPS Framerate of output (25,30,60)\n\n"); if(extended_help) { printf("Extended Options:\n\n"); printf(" --window-position XxY Initial window position\n"); printf(" --frameless Frameless window\n\n"); printf(" --output-custom-log FILE Output a custom format log file ('-' for STDOUT).\n\n"); printf(" -b, --background-colour FFFFFF Background colour in hex\n"); printf(" --background-image IMAGE Set a background image\n\n"); printf(" --bloom-multiplier Adjust the amount of bloom (default: 1.0)\n"); printf(" --bloom-intensity Adjust the intensity of the bloom (default: 0.75)\n\n"); printf(" --camera-mode MODE Camera mode (overview,track)\n"); printf(" --crop AXIS Crop view on an axis (vertical,horizontal)\n"); printf(" --padding FLOAT Camera view padding (default: 1.1)\n\n"); printf(" --disable-auto-rotate Disable automatic camera rotation\n\n"); printf(" --disable-input Disable keyboard and mouse input\n\n"); printf(" --date-format FORMAT Specify display date string (strftime format)\n\n"); printf(" --font-file FILE Specify the font\n"); printf(" --font-scale SCALE Scale the size of all fonts\n"); printf(" --font-size SIZE Font size used by date and title\n"); printf(" --file-font-size SIZE Font size for filenames\n"); printf(" --dir-font-size SIZE Font size for directory names\n"); printf(" --user-font-size SIZE Font size for user names\n"); printf(" --font-colour FFFFFF Font colour used by date and title in hex\n\n"); printf(" --file-extensions Show filename extensions only\n"); printf(" --file-extension-fallback Use filename as extension if the extension\n"); printf(" is missing or empty\n\n"); printf(" --git-branch Get the git log of a particular branch\n\n"); printf(" --hide DISPLAY_ELEMENT bloom,date,dirnames,files,filenames,mouse,progress,\n"); printf(" root,tree,users,usernames\n\n"); printf(" --logo IMAGE Logo to display in the foreground\n"); printf(" --logo-offset XxY Offset position of the logo\n\n"); printf(" --loop-delay-seconds SECONDS Seconds to delay before looping (default: 3)\n\n"); printf(" --title TITLE Set a title\n\n"); printf(" --transparent Make the background transparent\n\n"); printf(" --user-filter REGEX Ignore usernames matching this regex\n"); printf(" --user-show-filter REGEX Show only usernames matching this regex\n\n"); printf(" --file-filter REGEX Ignore file paths matching this regex\n"); printf(" --file-show-filter REGEX Show only file paths matching this regex\n\n"); printf(" --user-friction SECONDS Change the rate users slow down (default: 0.67)\n"); printf(" --user-scale SCALE Change scale of users (default: 1.0)\n"); printf(" --max-user-speed UNITS Speed users can travel per second (default: 500)\n\n"); printf(" --follow-user USER Camera will automatically follow this user\n"); printf(" --highlight-dirs Highlight the names of all directories\n"); printf(" --highlight-user USER Highlight the names of a particular user\n"); printf(" --highlight-users Highlight the names of all users\n\n"); printf(" --highlight-colour Font colour for highlighted users in hex.\n"); printf(" --selection-colour Font colour for selected users and files.\n"); printf(" --filename-colour Font colour for filenames.\n"); printf(" --dir-colour Font colour for directories.\n\n"); printf(" --dir-name-depth DEPTH Draw names of directories down to a specific depth.\n"); printf(" --dir-name-position FLOAT Position along edge of the directory name\n"); printf(" (between 0.0 and 1.0, default is 0.5).\n\n"); printf(" --filename-time SECONDS Duration to keep filenames on screen (default: 4.0)\n\n"); printf(" --caption-file FILE Caption file\n"); printf(" --caption-size SIZE Caption font size\n"); printf(" --caption-colour FFFFFF Caption colour in hex\n"); printf(" --caption-duration SECONDS Caption duration (default: 10.0)\n"); printf(" --caption-offset X Caption horizontal offset\n\n"); printf(" --hash-seed SEED Change the seed of hash function.\n\n"); printf(" --path PATH\n\n"); } printf("PATH may be a supported version control directory, a log file, a gource config\n"); printf("file, or '-' to read STDIN. If omitted, gource will attempt to generate a log\n"); printf("from the current directory.\n\n"); if(!extended_help) { printf("To see the full command line options use '-H'\n\n"); } #ifdef _WIN32 if(!SDLApp::existing_console) { printf("Press Enter\n"); getchar(); } #endif exit(0); } GourceSettings::GourceSettings() { repo_count = 0; file_graphic = 0; log_level = LOG_LEVEL_OFF; shutdown = false; setGourceDefaults(); default_section_name = "gource"; //translate args arg_aliases["p"] = "start-position"; arg_aliases["a"] = "auto-skip-seconds"; arg_aliases["s"] = "seconds-per-day"; arg_aliases["t"] = "stop-at-time"; arg_aliases["i"] = "file-idle-time"; arg_aliases["e"] = "elasticity"; arg_aliases["h"] = "help"; arg_aliases["?"] = "help"; arg_aliases["H"] = "extended-help"; arg_aliases["b"] = "background-colour"; arg_aliases["c"] = "time-scale"; arg_aliases["background"] = "background-colour"; arg_aliases["disable-bloom"] = "hide-bloom"; arg_aliases["disable-progress"] = "hide-progress"; arg_aliases["highlight-all-users"] = "highlight-users"; //command line only options conf_sections["help"] = "command-line"; conf_sections["extended-help"] = "command-line"; conf_sections["log-command"] = "command-line"; conf_sections["git-log-command"] = "command-line"; conf_sections["cvs-exp-command"] = "command-line"; conf_sections["cvs2cl-command"] = "command-line"; conf_sections["hg-log-command"] = "command-line"; conf_sections["bzr-log-command"] = "command-line"; conf_sections["svn-log-command"] = "command-line"; conf_sections["load-config"] = "command-line"; conf_sections["save-config"] = "command-line"; conf_sections["output-custom-log"] = "command-line"; conf_sections["log-level"] = "command-line"; //boolean args arg_types["help"] = "bool"; arg_types["extended-help"] = "bool"; arg_types["stop-on-idle"] = "bool"; arg_types["stop-at-end"] = "bool"; arg_types["dont-stop"] = "bool"; arg_types["loop"] = "bool"; arg_types["realtime"] = "bool"; arg_types["no-time-travel"] = "bool"; arg_types["colour-images"] = "bool"; arg_types["hide-date"] = "bool"; arg_types["hide-files"] = "bool"; arg_types["hide-users"] = "bool"; arg_types["hide-tree"] = "bool"; arg_types["hide-usernames"] = "bool"; arg_types["hide-filenames"] = "bool"; arg_types["hide-dirnames"] = "bool"; arg_types["hide-progress"] = "bool"; arg_types["hide-bloom"] = "bool"; arg_types["hide-mouse"] = "bool"; arg_types["hide-root"] = "bool"; arg_types["highlight-users"] = "bool"; arg_types["highlight-dirs"] = "bool"; arg_types["file-extensions"] = "bool"; arg_types["file-extension-fallback"] = "bool"; arg_types["fixed-user-size"] = "bool"; arg_types["author-time"] = "bool"; arg_types["key"] = "bool"; arg_types["ffp"] = "bool"; arg_types["disable-auto-rotate"] = "bool"; arg_types["disable-auto-skip"] = "bool"; arg_types["disable-input"] = "bool"; arg_types["git-log-command"]= "bool"; arg_types["cvs-exp-command"]= "bool"; arg_types["cvs2cl-command"] = "bool"; arg_types["svn-log-command"]= "bool"; arg_types["hg-log-command"] = "bool"; arg_types["bzr-log-command"]= "bool"; arg_types["bloom-intensity"] = "float"; arg_types["bloom-multiplier"] = "float"; arg_types["elasticity"] = "float"; arg_types["seconds-per-day"] = "float"; arg_types["auto-skip-seconds"] = "float"; arg_types["stop-at-time"] = "float"; arg_types["max-user-speed"] = "float"; arg_types["user-friction"] = "float"; arg_types["padding"] = "float"; arg_types["time-scale"] = "float"; arg_types["dir-name-position"] = "float"; arg_types["loop-delay-seconds"] = "float"; arg_types["max-files"] = "int"; arg_types["font-size"] = "int"; arg_types["font-scale"] = "float"; arg_types["file-font-size"] = "int"; arg_types["dir-font-size"] = "int"; arg_types["user-font-size"] = "int"; arg_types["hash-seed"] = "int"; arg_types["user-filter"] = "multi-value"; arg_types["user-show-filter"] = "multi-value"; arg_types["file-filter"] = "multi-value"; arg_types["file-show-filter"] = "multi-value"; arg_types["follow-user"] = "multi-value"; arg_types["highlight-user"] = "multi-value"; arg_types["log-level"] = "string"; arg_types["background-image"] = "string"; arg_types["logo"] = "string"; arg_types["logo-offset"] = "string"; arg_types["log-command"] = "string"; arg_types["load-config"] = "string"; arg_types["save-config"] = "string"; arg_types["output-custom-log"] = "string"; arg_types["path"] = "string"; arg_types["log-command"] = "string"; arg_types["background-colour"] = "string"; arg_types["file-idle-time"] = "string"; arg_types["file-idle-time-at-end"] = "string"; arg_types["user-image-dir"] = "string"; arg_types["default-user-image"] = "string"; arg_types["date-format"] = "string"; arg_types["log-format"] = "string"; arg_types["git-branch"] = "string"; arg_types["start-position"] = "string"; arg_types["start-date"] = "string"; arg_types["stop-date"] = "string"; arg_types["stop-position"] = "string"; arg_types["crop"] = "string"; arg_types["hide"] = "string"; arg_types["max-file-lag"] = "string"; arg_types["user-scale"] = "string"; arg_types["camera-mode"] = "string"; arg_types["title"] = "string"; arg_types["font-file"] = "string"; arg_types["font-colour"] = "string"; arg_types["highlight-colour"] = "string"; arg_types["selection-colour"] = "string"; arg_types["dir-colour"] = "string"; arg_types["caption-file"] = "string"; arg_types["caption-size"] = "int"; arg_types["caption-duration"] = "float"; arg_types["caption-colour"] = "string"; arg_types["caption-offset"] = "int"; arg_types["filename-colour"] = "string"; arg_types["filename-time"] = "float"; arg_types["dir-name-depth"] = "int"; } void GourceSettings::setGourceDefaults() { path = "."; default_path = true; ffp = false; hide_date = false; hide_users = false; hide_tree = false; hide_files = false; hide_usernames = false; hide_filenames = false; hide_dirnames = false; hide_progress = false; hide_bloom = false; hide_mouse = false; hide_root = false; start_timestamp = 0; start_date = ""; stop_timestamp = 0; stop_date = ""; start_position = 0.0f; stop_position = 0.0f; stop_at_time = -1.0f; stop_on_idle = false; stop_at_end = false; dont_stop = false; no_time_travel = false; fixed_user_size = false; author_time = false; show_key = false; disable_auto_rotate = false; disable_input = false; auto_skip_seconds = 3.0f; days_per_second = 0.1f; // TODO: check this is right file_idle_time = 0.0f; file_idle_time_at_end = 0.0f; time_scale = 1.0f; loop = false; loop_delay_seconds = 3.0f; logo = ""; logo_offset = vec2(20.0f,20.0f); colour_user_images = false; default_user_image = ""; user_image_dir = ""; user_image_map.clear(); camera_zoom_min = 50.0f; camera_zoom_default = 100.0f; camera_zoom_max = 10000.0f; camera_mode = "overview"; padding = 1.1f; crop_vertical = false; crop_horizontal = false; bloom_multiplier = 1.0f; bloom_intensity = 0.75f; background_colour = vec3(0.1f, 0.1f, 0.1f); background_image = ""; title = ""; font_scale = 1.0f; default_font_scale = true; font_file = GOURCE_FONT_FILE; font_size = 16; filename_font_size = 14; dirname_font_size = 14; user_font_size = 14; dir_colour = vec3(1.0f); font_colour = vec3(1.0f); highlight_colour = vec3(1.0f); selection_colour = vec3(1.0, 1.0, 0.3f); dir_name_depth = 0; dir_name_position = 0.5f; elasticity = 0.0f; git_branch = ""; log_format = ""; date_format = "%A, %d %B, %Y %X"; max_files = 0; max_user_speed = 500.0f; max_file_lag = 5.0f; user_idle_time = 3.0f; user_friction = 1.0f; user_scale = 1.0f; follow_users.clear(); highlight_users.clear(); highlight_all_users = false; highlight_dirs = false; caption_file = ""; caption_duration = 10.0f; caption_size = 16; caption_offset = 0; caption_colour = vec3(1.0f, 1.0f, 1.0f); filename_colour = vec3(1.0f, 1.0f, 1.0f); filename_time = 4.0f; gStringHashSeed = 31; //delete file filters for(std::vector::iterator it = file_filters.begin(); it != file_filters.end(); it++) { delete (*it); } file_filters.clear(); //delete file whitelists for(std::vector::iterator it = file_show_filters.begin(); it != file_show_filters.end(); it++) { delete (*it); } file_show_filters.clear(); file_extensions = false; file_extension_fallback = false; //delete user filters for(std::vector::iterator it = user_filters.begin(); it != user_filters.end(); it++) { delete (*it); } user_filters.clear(); //delete user whitelist for(std::vector::iterator it = user_show_filters.begin(); it != user_show_filters.end(); it++) { delete (*it); } user_show_filters.clear(); setScaledFontSizes(); } void GourceSettings::setScaledFontSizes() { scaled_font_size = glm::clamp((int)(font_size * font_scale), 1, 100); scaled_user_font_size = glm::clamp((int)(user_font_size * font_scale), 1, 100); scaled_dirname_font_size = glm::clamp((int)(dirname_font_size * font_scale), 1, 100); scaled_filename_font_size = glm::clamp((int)(filename_font_size * font_scale), 1, 100); } void GourceSettings::commandLineOption(const std::string& name, const std::string& value) { if(name == "help") { help(); } if(name == "extended-help") { help(true); } if(name == "load-config" && value.size() > 0) { load_config = value; return; } if(name == "save-config" && value.size() > 0) { save_config = value; return; } std::string log_command; if(name == "log-command") { log_command = value; } if(name == "git-log-command" || log_command == "git") { SDLAppInfo(GitCommitLog::logCommand()); } if(name == "cvs-exp-command" || log_command == "cvs-exp") { SDLAppInfo(CVSEXPCommitLog::logCommand()); } if(log_command == "cvs") { throw ConfFileException("please use either 'cvs2cl' or 'cvs-exp'", "", 0); } if(name == "cvs2cl-command" || log_command == "cvs2cl") { SDLAppInfo(CVS2CLCommitLog::logCommand()); } if(name == "svn-log-command" || log_command == "svn") { SDLAppInfo(SVNCommitLog::logCommand()); } if(name == "hg-log-command" || log_command == "hg") { SDLAppInfo(MercurialLog::logCommand()); } if(name == "bzr-log-command" || log_command == "bzr") { SDLAppInfo(BazaarLog::logCommand()); } if(name == "output-custom-log" && value.size() > 0) { output_custom_filename = value; return; } if(name == "log-level") { if(value == "warn") { log_level = LOG_LEVEL_WARN; } else if(value == "debug") { log_level = LOG_LEVEL_DEBUG; } else if(value == "info") { log_level = LOG_LEVEL_INFO; } else if(value == "error") { log_level = LOG_LEVEL_ERROR; } else if(value == "pedantic") { log_level = LOG_LEVEL_PEDANTIC; } return; } std::string invalid_error = std::string("invalid ") + name + std::string(" value"); throw ConfFileException(invalid_error, "", 0); } #ifdef __APPLE__ #include #endif void GourceSettings::importGourceSettings(ConfFile& conffile, ConfSection* gource_settings) { setGourceDefaults(); if(gource_settings == 0) gource_settings = conffile.getSection(default_section_name); if(gource_settings == 0) { gource_settings = conffile.addSection("gource"); } ConfEntry* entry = 0; //hide flags std::vector hide_fields; if((entry = gource_settings->getEntry("hide")) != 0) { if(!entry->hasValue()) conffile.missingValueException(entry); std::string hide_string = entry->getString(); size_t sep; while((sep = hide_string.find(",")) != std::string::npos) { if(sep == 0 && hide_string.size()==1) break; if(sep == 0) { hide_string = hide_string.substr(sep+1, hide_string.size()-1); continue; } std::string hide_field = hide_string.substr(0, sep); hide_fields.push_back(hide_field); hide_string = hide_string.substr(sep+1, hide_string.size()-1); } if(hide_string.size() > 0 && hide_string != ",") hide_fields.push_back(hide_string); //validate field list for(std::vector::iterator it = hide_fields.begin(); it != hide_fields.end(); it++) { std::string hide_field = (*it); if( hide_field != "date" && hide_field != "users" && hide_field != "tree" && hide_field != "files" && hide_field != "usernames" && hide_field != "filenames" && hide_field != "dirnames" && hide_field != "bloom" && hide_field != "progress" && hide_field != "mouse" && hide_field != "root") { std::string unknown_hide_option = std::string("unknown option hide ") + hide_field; conffile.entryException(entry, unknown_hide_option); } } } //check hide booleans for(std::map::iterator it = arg_types.begin(); it != arg_types.end(); it++) { if(it->first.find("hide-") == 0 && it->second == "bool") { if(gource_settings->getBool(it->first)) { std::string hide_field = it->first.substr(5, it->first.size()-5); hide_fields.push_back(hide_field); } } } if(hide_fields.size()>0) { for(std::vector::iterator it = hide_fields.begin(); it != hide_fields.end(); it++) { std::string hidestr = (*it); if(hidestr == "date") hide_date = true; else if(hidestr == "users") hide_users = true; else if(hidestr == "tree") hide_tree = true; else if(hidestr == "files") hide_files = true; else if(hidestr == "usernames") hide_usernames = true; else if(hidestr == "filenames") hide_filenames = true; else if(hidestr == "dirnames") hide_dirnames = true; else if(hidestr == "bloom") hide_bloom = true; else if(hidestr == "progress") hide_progress = true; else if(hidestr == "root") hide_root = true; else if(hidestr == "mouse") { hide_mouse = true; hide_progress = true; } } } if((entry = gource_settings->getEntry("date-format")) != 0) { if(!entry->hasValue()) conffile.missingValueException(entry); date_format = entry->getString(); } if(gource_settings->getBool("disable-auto-rotate")) { disable_auto_rotate=true; } if(gource_settings->getBool("disable-auto-skip")) { auto_skip_seconds = -1.0; } if(gource_settings->getBool("disable-input")) { disable_input=true; } if(gource_settings->getBool("loop")) { loop = true; } if((entry = gource_settings->getEntry("loop-delay-seconds")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify loop-delay-seconds (float)"); loop_delay_seconds = entry->getFloat(); if(loop_delay_seconds<=0.0f) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("git-branch")) != 0) { if(!entry->hasValue()) conffile.missingValueException(entry); Regex branch_regex("^(?!-)[/\\w.,;_=+{}\\[\\]-]+$"); std::string branch = entry->getString(); if(branch_regex.match(branch)) { git_branch = branch; } else { conffile.invalidValueException(entry); } } if(gource_settings->getBool("colour-images")) { colour_user_images = true; } if((entry = gource_settings->getEntry("crop")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify crop (vertical,horizontal)"); std::string crop = entry->getString(); if(crop == "vertical") { crop_vertical = true; } else if (crop == "horizontal") { crop_horizontal = true; } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("log-format")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify log-format (format)"); log_format = entry->getString(); if(log_format == "cvs") { conffile.entryException(entry, "please use either 'cvs2cl' or 'cvs-exp'"); } if( log_format != "git" && log_format != "cvs-exp" && log_format != "cvs2cl" && log_format != "svn" && log_format != "custom" && log_format != "hg" && log_format != "bzr" && log_format != "apache") { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("default-user-image")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify default-user-image (image path)"); default_user_image = entry->getString(); } if((entry = gource_settings->getEntry("user-image-dir")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify user-image-dir (directory)"); user_image_dir = entry->getString(); //append slash if(user_image_dir[user_image_dir.size()-1] != '/') { user_image_dir += std::string("/"); } user_image_map.clear(); boost::filesystem::path image_dir_path(user_image_dir); if(!is_directory(image_dir_path)) { conffile.entryException(entry, "specified user-image-dir is not a directory"); } std::vector image_dir_files; try { copy(boost::filesystem::directory_iterator(image_dir_path), boost::filesystem::directory_iterator(), back_inserter(image_dir_files)); } catch(const boost::filesystem::filesystem_error& exception) { conffile.entryException(entry, "error reading specified user-image-dir"); } for(boost::filesystem::path& p : image_dir_files) { std::string dirfile; #ifdef _WIN32 std::wstring dirfile_16 = p.filename().wstring(); utf8::utf16to8(dirfile_16.begin(), dirfile_16.end(), back_inserter(dirfile)); #else dirfile = p.filename().string(); #endif std::string file_ext = p.extension().string(); boost::algorithm::to_lower(file_ext); if(file_ext != ".jpg" && file_ext != ".jpeg" && file_ext != ".png") continue; std::string image_path = gGourceSettings.user_image_dir + dirfile; std::string name = dirfile.substr(0,dirfile.size() - file_ext.size()); #ifdef __APPLE__ CFMutableStringRef help = CFStringCreateMutable(kCFAllocatorDefault, 0); CFStringAppendCString(help, name.c_str(), kCFStringEncodingUTF8); CFStringNormalize(help, kCFStringNormalizationFormC); char data[4096]; CFStringGetCString(help, data, sizeof(data), kCFStringEncodingUTF8); name = data; #endif debugLog("%s => %s", name.c_str(), image_path.c_str()); user_image_map[name] = image_path; } } if((entry = gource_settings->getEntry("caption-file")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify caption file (filename)"); caption_file = entry->getString(); if(!boost::filesystem::exists(caption_file)) { conffile.entryException(entry, "caption file not found"); } } if((entry = gource_settings->getEntry("caption-duration")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify caption duration (seconds)"); caption_duration = entry->getFloat(); if(caption_duration <= 0.0f) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("caption-size")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify caption size"); caption_size = entry->getInt(); if(caption_size<1 || caption_size>100) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("caption-offset")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify caption offset"); caption_offset = entry->getInt(); } if((entry = gource_settings->getEntry("caption-colour")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify caption colour (FFFFFF)"); int r,g,b; std::string colstring = entry->getString(); if(entry->isVec3()) { caption_colour = entry->getVec3(); } else if(colstring.size()==6 && sscanf(colstring.c_str(), "%02x%02x%02x", &r, &g, &b) == 3) { caption_colour = vec3(r,g,b); caption_colour /= 255.0f; } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("filename-colour")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify filename colour (FFFFFF)"); int r,g,b; std::string colstring = entry->getString(); if(entry->isVec3()) { filename_colour = entry->getVec3(); } else if(colstring.size()==6 && sscanf(colstring.c_str(), "%02x%02x%02x", &r, &g, &b) == 3) { filename_colour = vec3(r,g,b); filename_colour /= 255.0f; } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("filename-time")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify duration to keep files on screen (float)"); filename_time = entry->getFloat(); if(filename_time<2.0f) { conffile.entryException(entry, "filename-time must be >= 2.0"); } } if((entry = gource_settings->getEntry("bloom-intensity")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify bloom-intensity (float)"); bloom_intensity = entry->getFloat(); if(bloom_intensity<=0.0f) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("bloom-multiplier")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify bloom-multiplier (float)"); bloom_multiplier = entry->getFloat(); if(bloom_multiplier<=0.0f) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("elasticity")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify elasticity (float)"); elasticity = entry->getFloat(); if(elasticity<=0.0f) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("font-file")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify font file"); font_file = entry->getString(); boost::filesystem::path font_file_path(font_file); if(!boost::filesystem::exists(font_file_path)) { conffile.invalidValueException(entry); } font_file = boost::filesystem::canonical(font_file_path).string(); if(font_file.empty()) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("font-size")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify font size"); font_size = entry->getInt(); if(font_size<1 || font_size>100) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("file-font-size")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify font size"); filename_font_size = entry->getInt(); if(filename_font_size<1 || filename_font_size>100) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("dir-font-size")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify font size"); dirname_font_size = entry->getInt(); if(dirname_font_size<1 || dirname_font_size>100) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("user-font-size")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify font size"); user_font_size = entry->getInt(); if(user_font_size<1 || user_font_size>100) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("font-scale")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify font scale"); font_scale = entry->getFloat(); default_font_scale = false; if(font_scale<0.0f || font_scale>10.0f) { conffile.invalidValueException(entry); } setScaledFontSizes(); } if((entry = gource_settings->getEntry("hash-seed")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify hash seed (integer)"); gStringHashSeed = entry->getInt(); } if((entry = gource_settings->getEntry("font-colour")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify font colour (FFFFFF)"); int r,g,b; std::string colstring = entry->getString(); if(entry->isVec3()) { font_colour = entry->getVec3(); } else if(colstring.size()==6 && sscanf(colstring.c_str(), "%02x%02x%02x", &r, &g, &b) == 3) { font_colour = vec3(r,g,b); font_colour /= 255.0f; } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("background-colour")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify background colour (FFFFFF)"); int r,g,b; std::string colstring = entry->getString(); if(entry->isVec3()) { background_colour = entry->getVec3(); } else if(colstring.size()==6 && sscanf(colstring.c_str(), "%02x%02x%02x", &r, &g, &b) == 3) { background_colour = vec3(r,g,b); background_colour /= 255.0f; } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("highlight-colour")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify highlight colour (FFFFFF)"); int r,g,b; std::string colstring = entry->getString(); if(entry->isVec3()) { highlight_colour = entry->getVec3(); } else if(colstring.size()==6 && sscanf(colstring.c_str(), "%02x%02x%02x", &r, &g, &b) == 3) { highlight_colour = vec3(r,g,b); highlight_colour /= 255.0f; } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("selection-colour")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify selection colour (FFFFFF)"); int r,g,b; std::string colstring = entry->getString(); if(entry->isVec3()) { selection_colour = entry->getVec3(); } else if(colstring.size()==6 && sscanf(colstring.c_str(), "%02x%02x%02x", &r, &g, &b) == 3) { selection_colour = vec3(r,g,b); selection_colour /= 255.0f; } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("dir-colour")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify dir colour (FFFFFF)"); int r,g,b; std::string colstring = entry->getString(); if(entry->isVec3()) { dir_colour = entry->getVec3(); } else if(colstring.size()==6 && sscanf(colstring.c_str(), "%02x%02x%02x", &r, &g, &b) == 3) { dir_colour = vec3(r,g,b); dir_colour /= 255.0f; } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("background-image")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify background image (image path)"); background_image = entry->getString(); } if((entry = gource_settings->getEntry("title")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify title"); title = entry->getString(); } if((entry = gource_settings->getEntry("logo")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify logo (image path)"); logo = entry->getString(); } if((entry = gource_settings->getEntry("logo-offset")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify logo-offset (XxY)"); std::string logo_offset_str = entry->getString(); int posx = 0; int posy = 0; if(parseRectangle(logo_offset_str, posx, posy)) { logo_offset = vec2(posx, posy); } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("seconds-per-day")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify seconds-per-day (seconds)"); float seconds_per_day = entry->getFloat(); if(seconds_per_day<=0.0f) { conffile.invalidValueException(entry); } // convert seconds-per-day to days-per-second days_per_second = 1.0 / seconds_per_day; } if((entry = gource_settings->getEntry("auto-skip-seconds")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify auto-skip-seconds (seconds)"); auto_skip_seconds = entry->getFloat(); if(auto_skip_seconds <= 0.0) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("file-idle-time")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify file-idle-time (seconds)"); std::string file_idle_str = entry->getString(); file_idle_time = (float) atoi(file_idle_str.c_str()); if(file_idle_time<0.0f || (file_idle_time == 0.0f && file_idle_str[0] != '0') ) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("file-idle-time-at-end")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify file-idle-time-at-end (seconds)"); std::string file_idle_at_end_str = entry->getString(); file_idle_time_at_end = (float) atoi(file_idle_at_end_str.c_str()); if(file_idle_time_at_end<0.0f || (file_idle_time_at_end == 0.0f && file_idle_at_end_str[0] != '0') ) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("user-idle-time")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify user-idle-time (seconds)"); user_idle_time = entry->getFloat(); if(user_idle_time < 0.0f) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("time-scale")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify time-scale (scale)"); time_scale = entry->getFloat(); if(time_scale <= 0.0f || time_scale > 4.0f) { conffile.entryException(entry, "time-scale outside of range 0.0 - 4.0"); } } if((entry = gource_settings->getEntry("start-date")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify start-date (YYYY-MM-DD hh:mm:ss)"); std::string start_date_string = entry->getString(); if(parseDateTime(start_date_string, start_timestamp)) { char datestr[256]; strftime(datestr, 256, "%Y-%m-%d", localtime ( &start_timestamp )); start_date = datestr; } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("stop-date")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify stop-date (YYYY-MM-DD hh:mm:ss)"); std::string end_date_string = entry->getString(); if(parseDateTime(end_date_string, stop_timestamp)) { struct tm * timeinfo; timeinfo = localtime ( &stop_timestamp ); time_t stop_timestamp_rounded = stop_timestamp; if(timeinfo->tm_hour > 0 || timeinfo->tm_min > 0 || timeinfo->tm_sec > 0) { stop_timestamp_rounded += 60*60*24; } char datestr[256]; strftime(datestr, 256, "%Y-%m-%d", localtime ( &stop_timestamp_rounded )); stop_date = datestr; } else { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("start-position")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify start-position (float,random)"); if(entry->getString() == "random") { srand(time(0)); start_position = (rand() % 1000) / 1000.0f; } else { start_position = entry->getFloat(); if(start_position<=0.0 || start_position>=1.0) { conffile.entryException(entry, "start-position outside of range 0.0 - 1.0 (non-inclusive)"); } } } if((entry = gource_settings->getEntry("stop-position")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify stop-position (float)"); stop_position = entry->getFloat(); if(stop_position<=0.0 || stop_position>1.0) { conffile.entryException(entry, "stop-position outside of range 0.0 - 1.0 (inclusive)"); } } if((entry = gource_settings->getEntry("stop-at-time")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify stop-at-time (seconds)"); stop_at_time = entry->getFloat(); if(stop_at_time <= 0.0) { conffile.invalidValueException(entry); } } if(gource_settings->getBool("key")) { show_key = true; } if(gource_settings->getBool("ffp")) { ffp = true; } if(gource_settings->getBool("realtime")) { days_per_second = 1.0 / 86400.0; } if(gource_settings->getBool("no-time-travel")) { no_time_travel = true; } if(gource_settings->getBool("dont-stop")) { dont_stop = true; } if(gource_settings->getBool("stop-at-end")) { stop_at_end = true; } //NOTE: this no longer does anything if(gource_settings->getBool("stop-on-idle")) { stop_on_idle = true; } if(gource_settings->getBool("fixed-user-size")) { fixed_user_size = true; } if(gource_settings->getBool("author-time")) { author_time = true; } if((entry = gource_settings->getEntry("max-files")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify max-files (number)"); max_files = entry->getInt(); if( max_files<0 || (max_files == 0 && entry->getString() != "0") ) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("max-file-lag")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify max-file-lag (seconds)"); max_file_lag = entry->getFloat(); if(max_file_lag==0.0) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("user-friction")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify user-friction (seconds)"); user_friction = entry->getFloat(); if(user_friction<=0.0) { conffile.invalidValueException(entry); } user_friction = 1.0 / user_friction; } if((entry = gource_settings->getEntry("user-scale")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify user-scale (scale)"); user_scale = entry->getFloat(); if(user_scale<=0.0 || user_scale>100.0) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("max-user-speed")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify max-user-speed (units)"); max_user_speed = entry->getFloat(); if(max_user_speed<=0) { conffile.invalidValueException(entry); } } if( gource_settings->getBool("highlight-users") || gource_settings->getBool("highlight-all-users")) { highlight_all_users = true; } if(gource_settings->getBool("highlight-dirs")) { highlight_dirs = true; } if((entry = gource_settings->getEntry("camera-mode")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify camera-mode (overview,track)"); camera_mode = entry->getString(); if(camera_mode != "overview" && camera_mode != "track") { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("padding")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify padding (float)"); padding = entry->getFloat(); if(padding <= 0.0f || padding >= 2.0f) { conffile.invalidValueException(entry); } } // multi-value entries if((entry = gource_settings->getEntry("highlight-user")) != 0) { ConfEntryList* highlight_user_entries = gource_settings->getEntries("highlight-user"); for(ConfEntryList::iterator it = highlight_user_entries->begin(); it != highlight_user_entries->end(); it++) { entry = *it; if(!entry->hasValue()) conffile.entryException(entry, "specify highlight-user (user)"); highlight_users.push_back(entry->getString()); } } if((entry = gource_settings->getEntry("follow-user")) != 0) { ConfEntryList* follow_user_entries = gource_settings->getEntries("follow-user"); for(ConfEntryList::iterator it = follow_user_entries->begin(); it != follow_user_entries->end(); it++) { entry = *it; if(!entry->hasValue()) conffile.entryException(entry, "specify follow-user (user)"); follow_users.push_back(entry->getString()); } } if(gource_settings->getBool("file-extensions")) { file_extensions=true; } if(gource_settings->getBool("file-extension-fallback")) { file_extension_fallback=true; } if((entry = gource_settings->getEntry("file-filter")) != 0) { ConfEntryList* filters = gource_settings->getEntries("file-filter"); for(ConfEntryList::iterator it = filters->begin(); it != filters->end(); it++) { entry = *it; if(!entry->hasValue()) conffile.entryException(entry, "specify file-filter (regex)"); std::string filter_string = entry->getString(); Regex* r = new Regex(filter_string, 1); if(!r->isValid()) { delete r; conffile.entryException(entry, "invalid file-filter regular expression"); } file_filters.push_back(r); } } if((entry = gource_settings->getEntry("file-show-filter")) != 0) { ConfEntryList* filters = gource_settings->getEntries("file-show-filter"); for(ConfEntryList::iterator it = filters->begin(); it != filters->end(); it++) { entry = *it; if(!entry->hasValue()) conffile.entryException(entry, "specify file-show-filter (regex)"); std::string filter_string = entry->getString(); Regex* r = new Regex(filter_string, 1); if(!r->isValid()) { delete r; conffile.entryException(entry, "invalid file-show-filter regular expression"); } file_show_filters.push_back(r); } } if((entry = gource_settings->getEntry("user-filter")) != 0) { ConfEntryList* filters = gource_settings->getEntries("user-filter"); for(ConfEntryList::iterator it = filters->begin(); it != filters->end(); it++) { entry = *it; if(!entry->hasValue()) conffile.entryException(entry, "specify user-filter (regex)"); std::string filter_string = entry->getString(); Regex* r = new Regex(filter_string, 1); if(!r->isValid()) { delete r; conffile.entryException(entry, "invalid user-filter regular expression"); } user_filters.push_back(r); } } if((entry = gource_settings->getEntry("user-show-filter")) != 0) { ConfEntryList* filters = gource_settings->getEntries("user-show-filter"); for(ConfEntryList::iterator it = filters->begin(); it != filters->end(); it++) { entry = *it; if(!entry->hasValue()) conffile.entryException(entry, "specify user-show-filter (regex)"); std::string filter_string = entry->getString(); Regex* r = new Regex(filter_string, 1); if(!r->isValid()) { delete r; conffile.entryException(entry, "invalid user-show-filter regular expression"); } user_show_filters.push_back(r); } } if((entry = gource_settings->getEntry("dir-name-depth")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify dir-name-depth (depth)"); dir_name_depth = entry->getInt(); if(dir_name_depth <= 0) { conffile.invalidValueException(entry); } } if((entry = gource_settings->getEntry("dir-name-position")) != 0) { if(!entry->hasValue()) conffile.entryException(entry, "specify dir-name-position (float)"); dir_name_position = entry->getFloat(); if(dir_name_position < 0.1f || dir_name_position > 1.0f) { conffile.entryException(entry, "dir-name-position outside of range 0.1 - 1.0 (inclusive)"); } } //validate path if(gource_settings->hasValue("path")) { path = gource_settings->getString("path"); default_path = false; } if(path == "-") { if(log_format.size() == 0) { throw ConfFileException("log-format required when reading from STDIN", "", 0); } #ifdef _WIN32 DWORD available_bytes; HANDLE stdin_handle = GetStdHandle(STD_INPUT_HANDLE); while(PeekNamedPipe(stdin_handle, 0, 0, 0, &available_bytes, 0) && available_bytes==0 && !std::cin.fail()) { SDL_Delay(100); } #else while(std::cin.peek() == EOF && !std::cin.fail()) SDL_Delay(100); #endif std::cin.clear(); } else if(!path.empty() && path != ".") { //remove trailing slash if(path[path.size()-1] == '\\' || path[path.size()-1] == '/') { path.resize(path.size()-1); } // check path exists if(!boost::filesystem::exists(path)) { throw ConfFileException(str(boost::format("'%s' does not appear to be a valid file or directory") % path), "", 0); } } } gource-0.56/src/logmill.h0000644002342600234260000000313615152463042015174 0ustar andrewcandrewc/* Copyright (C) 2012 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef LOGMILL_H #define LOGMILL_H #include #include "SDL_thread.h" #include "core/sdlapp.h" #include "core/display.h" #include "formats/commitlog.h" #if defined(HAVE_PTHREAD) && !defined(_WIN32) #include #endif enum { LOGMILL_STATE_STARTUP, LOGMILL_STATE_FETCHING, LOGMILL_STATE_SUCCESS, LOGMILL_STATE_FAILURE }; class RLogMill { SDL_Thread* thread; SDL_mutex* mutex; SDL_cond* cond; int logmill_thread_state; std::string logfile; RCommitLog* clog; std::string error; bool findRepository(boost::filesystem::path& dir, std::string& log_format); RCommitLog* fetchLog(std::string& log_format); public: RLogMill(const std::string& logfile); ~RLogMill(); void run(); void abort(); std::string getError(); int getStatus(); bool isFinished(); RCommitLog* getLog(); }; #endif gource-0.56/src/file.h0000664002342600234260000000441015152463042014452 0ustar andrewcandrewc/* Copyright (C) 2009 Andrew Caudwell (acaudwell@gmail.com) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef RFILE_H #define RFILE_H #include "pawn.h" #include "dirnode.h" #include "core/stringhash.h" class RDirNode; class RFile : public Pawn { vec3 file_colour; vec3 touch_colour; RDirNode* dir; time_t removed_timestamp; bool forced_removal; bool expired; bool removing; float fade_start; float last_action; float radius; vec2 dest; float distance; // FXLabel* label; //GLuint namelist; void setFilename(const std::string& abs_file_path); const vec3& getNameColour() const; void drawNameText(float alpha); public: std::string path; std::string fullpath; std::string ext; RFile(const std::string & name, const vec3 & colour, const vec2 & pos, int tagid); ~RFile(); bool overlaps(const vec2& pos) const; void setFileColour(const vec3 & colour); const vec3 & getFileColour() const; vec3 getColour() const; void colourize(); float getAlpha() const; void touch(time_t touch_timestamp, const vec3& colour); void setHidden(bool hidden); void setDest(const vec2 & dest){ this->dest = dest; } void setDistance(float distance){ this->distance = distance; } void calcScreenPos(GLint* viewport, GLdouble* modelview, GLdouble* projection); void logic(float dt); void draw(float dt); void remove(time_t removed_timestamp); void remove(); vec2 getAbsolutePos() const; RDirNode* getDir() const; void setDir(RDirNode* dir); }; extern float gGourceFileDiameter; extern std::vector gGourceRemovedFiles; #endif gource-0.56/aclocal.m40000664002342600234260000012311415152463042014436 0ustar andrewcandrewc# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, [m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ax_boost_base.m4]) m4_include([m4/ax_boost_filesystem.m4]) m4_include([m4/ax_check_gl.m4]) m4_include([m4/ax_check_glu.m4]) m4_include([m4/ax_restore_flags_with_prefix.m4]) m4_include([m4/ax_save_flags_with_prefix.m4]) m4_include([m4/pkg.m4])