From 69fb83dd74426cbd336b6800886ec106e864ce91 Mon Sep 17 00:00:00 2001 From: schrom01 Date: Tue, 15 Nov 2022 10:20:07 +0100 Subject: [PATCH] initial commit --- build.gradle | 26 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 234 ++ gradlew.bat | 89 + settings.gradle | 10 + src/ch/zhaw/ads/ADS9_2_test.java | 35 + src/ch/zhaw/ads/ADS9_3_test.java | 144 + src/ch/zhaw/ads/ADS9_4_test.java | 119 + src/ch/zhaw/ads/AnyServer.java | 15 + src/ch/zhaw/ads/CommandExecutor.java | 20 + src/ch/zhaw/ads/ExBox.java | 13 + src/ch/zhaw/ads/ExBoxFrame.java | 294 ++ src/ch/zhaw/ads/ExBoxJUnit.java | 92 + src/ch/zhaw/ads/GraphicPanel.java | 84 + src/ch/zhaw/ads/HashServer.java | 45 + src/ch/zhaw/ads/MyCompetitor.java | 65 + src/ch/zhaw/ads/MyHashtable.java | 96 + src/ch/zhaw/ads/RangZuerich.csv | 3166 ++++++++++++++++++++++ src/ch/zhaw/ads/ServerFactory.java | 76 + 20 files changed, 4628 insertions(+) create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/ch/zhaw/ads/ADS9_2_test.java create mode 100644 src/ch/zhaw/ads/ADS9_3_test.java create mode 100644 src/ch/zhaw/ads/ADS9_4_test.java create mode 100644 src/ch/zhaw/ads/AnyServer.java create mode 100644 src/ch/zhaw/ads/CommandExecutor.java create mode 100644 src/ch/zhaw/ads/ExBox.java create mode 100644 src/ch/zhaw/ads/ExBoxFrame.java create mode 100644 src/ch/zhaw/ads/ExBoxJUnit.java create mode 100644 src/ch/zhaw/ads/GraphicPanel.java create mode 100644 src/ch/zhaw/ads/HashServer.java create mode 100644 src/ch/zhaw/ads/MyCompetitor.java create mode 100644 src/ch/zhaw/ads/MyHashtable.java create mode 100644 src/ch/zhaw/ads/RangZuerich.csv create mode 100644 src/ch/zhaw/ads/ServerFactory.java diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..2430006 --- /dev/null +++ b/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'application' +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.junit.jupiter:junit-jupiter:5.9.0' + implementation 'org.junit.platform:junit-platform-engine:1.9.0' + implementation 'org.junit.platform:junit-platform-launcher:1.9.0' +} + +application { + mainClass = 'ch.zhaw.ads.ExBox' +} + +sourceSets { + main.java.srcDirs = ['src'] + test.java.srcDirs = ['src'] +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..aa991fc --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..1b6c787 --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..725faf6 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,10 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user manual at https://docs.gradle.org/7.4.2/userguide/multi_project_builds.html + */ + +rootProject.name = 'ADS Praktikum 9' diff --git a/src/ch/zhaw/ads/ADS9_2_test.java b/src/ch/zhaw/ads/ADS9_2_test.java new file mode 100644 index 0000000..6764df3 --- /dev/null +++ b/src/ch/zhaw/ads/ADS9_2_test.java @@ -0,0 +1,35 @@ +package ch.zhaw.ads; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +/** + * @author K Rege + * @version 1.00 2018/3/17 + * @version 1.01 2021/8/1 + */ +public class ADS9_2_test { + MyCompetitor c1 = new MyCompetitor(1, "Kiptum Daniel", "02:11:31"); + MyCompetitor c2 = new MyCompetitor(1, "Kiptum Daniel", "02:11:31"); + MyCompetitor c3 = new MyCompetitor(2, "Ancay Tarcis", "02:20:02"); + + @Test + public void testEquals() { + assertEquals(c1, c2); + assertNotEquals(c1, c3); + } + + @Test + public void testCompareTo() { + assertEquals(0, c1.compareTo(c2)); + assertNotEquals(0, c1.compareTo(c3)); + } + + @Test + public void testHashcode() { + assertEquals(c1.hashCode(), c2.hashCode()); + assertNotEquals(c1.hashCode(), c3.hashCode()); + } +} diff --git a/src/ch/zhaw/ads/ADS9_3_test.java b/src/ch/zhaw/ads/ADS9_3_test.java new file mode 100644 index 0000000..6951258 --- /dev/null +++ b/src/ch/zhaw/ads/ADS9_3_test.java @@ -0,0 +1,144 @@ +package ch.zhaw.ads; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class Town { + int hashCode; + String name; + String nb; + Town (int hashCode, String name, String nb) { + this.name = name; this.hashCode = hashCode; this.nb = nb; + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof Town)) return false; + return ((Town)o).name.equals(this.name); + } + + @Override + public int hashCode() { + return hashCode; + } + + @Override + public String toString() { + return name + " " + hashCode; + } +} + +public class ADS9_3_test { + Map hashmap; + List towns; + + @BeforeEach + public void setUp() { + towns = List.of( + new Town(5, "Bari", "BA"), + new Town(8, "Bologna", "BO"), + new Town(3, "Catania", "CA"), + new Town(9, "Firenze", "FI"), + new Town(0, "Genova", "GV"), + new Town(12, "Milano", "MI"), + new Town(7, "Napoli", "NA"), + new Town(7, "Palermo", "PA"), + new Town(7, "Roma", "RM"), + new Town(5, "Torino", "TO") + ); + + hashmap = new MyHashtable<>(100); + } + + @Test + public void testAdd() { + hashmap.clear(); + Town t0 = towns.get(0); + hashmap.put(t0, t0); + Town t1 = hashmap.get(t0); + assertEquals(t0, t1); + } + + @Test + public void testAdd2() { + hashmap.clear(); + Town t0 = towns.get(0); + Town t1 = towns.get(1); + hashmap.put(t0, t0); + hashmap.put(t1, t1); + Town t2 = hashmap.get(t0); + assertEquals(t0, t2); + t2 = hashmap.get(t1); + assertEquals(t1, t2); + } + + @Test + public void testAdd3() { + hashmap.clear(); + Town t0 = towns.get(0); + hashmap.remove(t0); + hashmap.put(t0, t0); + hashmap.put(t0, t0); + assertEquals(1, hashmap.size()); + Town t1 = hashmap.get(t0); + assertEquals(t0, t1); + } + + @Test + public void testAdd4() { + hashmap.clear(); + Town t0 = towns.get(0); + hashmap.put(t0, t0); + hashmap.put(t0, t0); + assertEquals(1, hashmap.size()); + } + + @Test + public void testSize() { + hashmap.clear(); + assertEquals(0, hashmap.size()); + testAdd2(); + assertEquals(2, hashmap.size()); + } + + @Test + public void testRemove() { + hashmap.clear(); + Town t0 = towns.get(0); + Town t1 = towns.get(1); + hashmap.put(t0, t0); + hashmap.remove(t0); + assertEquals(0, hashmap.size()); + hashmap.put(t0, t0); + hashmap.remove(t1); + assertEquals(1, hashmap.size()); + hashmap.remove(t0); + assertEquals(0, hashmap.size()); + } + + @Test + public void testMixed() { + hashmap.clear(); + Map hashmap2 = new HashMap<>(); + for (int i = 0; i < 10000; i++) { + Town c = towns.get((int)(Math.random() * towns.size())); + int op = (int)(Math.random() * 2); + switch (op) { + case 0: hashmap.put(c, c); hashmap2.put(c, c); break; + case 1: hashmap.remove(c); hashmap2.remove(c); break; + } + } + assertEquals(hashmap2.size(), hashmap.size()); + for (Town t : towns) { + Town c1 = hashmap.get(t); + Town c2 = hashmap2.get(t); + assertEquals(c1, c2); + } + } +} diff --git a/src/ch/zhaw/ads/ADS9_4_test.java b/src/ch/zhaw/ads/ADS9_4_test.java new file mode 100644 index 0000000..13baa9a --- /dev/null +++ b/src/ch/zhaw/ads/ADS9_4_test.java @@ -0,0 +1,119 @@ +package ch.zhaw.ads; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ADS9_4_test { + Map hashmap; + List towns; + + @BeforeEach + public void setUp() { + towns = List.of( + new Town(5, "Bari", "BA"), + new Town(8, "Bologna", "BO"), + new Town(3, "Catania", "CA"), + new Town(9, "Firenze", "FI"), + new Town(0, "Genova", "GV"), + new Town(12, "Milano", "MI"), + new Town(7, "Napoli", "NA"), + new Town(7, "Palermo", "PA"), + new Town(7, "Roma", "RM"), + new Town(5, "Torino", "TO") + ); + + hashmap = new MyHashtable<>(2); + } + + @Test + public void testAdd() { + hashmap.clear(); + Town t0 = towns.get(0); + hashmap.put(t0, t0); + Town t1 = hashmap.get(t0); + assertEquals(t0, t1); + } + + @Test + public void testAdd2() { + hashmap.clear(); + Town t0 = towns.get(0); + Town t1 = towns.get(1); + hashmap.put(t0, t0); + hashmap.put(t1, t1); + Town t2 = hashmap.get(t0); + assertEquals(t0, t2); + t2 = hashmap.get(t1); + assertEquals(t1, t2); + } + + @Test + public void testAdd3() { + hashmap.clear(); + Town t0 = towns.get(0); + hashmap.remove(t0); + hashmap.put(t0, t0); + hashmap.put(t0, t0); + assertEquals(1, hashmap.size()); + Town t1 = hashmap.get(t0); + assertEquals(t0, t1); + } + + @Test + public void testAdd4() { + hashmap.clear(); + Town t0 = towns.get(0); + hashmap.put(t0, t0); + hashmap.put(t0, t0); + assertEquals(1, hashmap.size()); + } + + @Test + public void testSize() { + hashmap.clear(); + assertEquals(0, hashmap.size()); + testAdd2(); + assertEquals(2, hashmap.size()); + } + + @Test + public void testRemove() { + hashmap.clear(); + Town t0 = towns.get(0); + Town t1 = towns.get(1); + hashmap.put(t0, t0); + hashmap.remove(t0); + assertEquals(0, hashmap.size()); + hashmap.put(t0, t0); + hashmap.remove(t1); + assertEquals(1, hashmap.size()); + hashmap.remove(t0); + assertEquals(0, hashmap.size()); + } + + @Test + public void testMixed() { + hashmap.clear(); + Map hashmap2 = new HashMap<>(); + for (int i = 0; i < 1000; i++) { + Town c = towns.get((int)(Math.random() * towns.size())); + int op = (int)(Math.random() * 2); + switch (op) { + case 0: hashmap.put(c, c); hashmap2.put(c, c); break; + case 1: hashmap.remove(c); hashmap2.remove(c); break; + } + } + assertEquals(hashmap2.size(), hashmap.size()); + for (Town t : towns) { + Town c1 = hashmap.get(t); + Town c2 = hashmap2.get(t); + assertEquals(c1, c2); + } + } +} diff --git a/src/ch/zhaw/ads/AnyServer.java b/src/ch/zhaw/ads/AnyServer.java new file mode 100644 index 0000000..cf89f5f --- /dev/null +++ b/src/ch/zhaw/ads/AnyServer.java @@ -0,0 +1,15 @@ +package ch.zhaw.ads; + +/** + * AnyServer -- Praktikum Experimentierkasten -- ADS + * + * @author E. Mumprecht + * @version 1.0 -- Geruest fuer irgendeinen Server + */ +public class AnyServer implements CommandExecutor { + //----- Dies implementiert das CommandExecutor Interface. + @Override + public String execute(String command) { + return "Die Eingabe ist \"" + command + "\"\n"; + } +} diff --git a/src/ch/zhaw/ads/CommandExecutor.java b/src/ch/zhaw/ads/CommandExecutor.java new file mode 100644 index 0000000..bb2a018 --- /dev/null +++ b/src/ch/zhaw/ads/CommandExecutor.java @@ -0,0 +1,20 @@ +package ch.zhaw.ads; + +/** + * CommandExecutor -- Praktikum Experimentierkasten -- SW3 Dieses Interface muss + * von jedem Server implementiert werden. + * + * @author E. Mumprecht + * @version 1.0 -- Geruest fuer irgendeinen Server + * @version 1.1 -- K. Rege Fehlerueckgabe hinzugefuegt + */ +public interface CommandExecutor { + /** + * execute -- nimmt eine Kommandozeile, tut irgendetwas gescheites, und + * berichtet das Resultat. + * + * @param command Kommandozeile + * @return Resultat, ueblicherweise eine oder mehrere Zeilen. + */ + String execute(String command) throws Exception; +} \ No newline at end of file diff --git a/src/ch/zhaw/ads/ExBox.java b/src/ch/zhaw/ads/ExBox.java new file mode 100644 index 0000000..81a6992 --- /dev/null +++ b/src/ch/zhaw/ads/ExBox.java @@ -0,0 +1,13 @@ +package ch.zhaw.ads; + +/** + * @author K. Rege + * @version 1.0 -- Experimentierkasten + */ +public class ExBox { + public static void main(String[] args) { + ExBoxFrame f = new ExBoxFrame(); + f.setLocationRelativeTo(null); + f.setVisible(true); + } +} \ No newline at end of file diff --git a/src/ch/zhaw/ads/ExBoxFrame.java b/src/ch/zhaw/ads/ExBoxFrame.java new file mode 100644 index 0000000..e43aaa9 --- /dev/null +++ b/src/ch/zhaw/ads/ExBoxFrame.java @@ -0,0 +1,294 @@ +package ch.zhaw.ads; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.net.URISyntaxException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Set; + +/** + * @(#)ExBoxFrame.java + * + * JFC ExBox application + * + * @author K.Rege + * @version 1.00 2014/2/3 + * @version 1.01 2016/8/2 + * @version 2.00 2017/8/30 Test + * @version 2.01 2018/2/5 AutoscaleFaktor + * @version 2.02 2018/3/12 Reconnect (inspired by S. Kunz) + * @version 2.03 2021/7/24 Test (repeat) + * @version 2.04 2021/9/11 Test as plugin + */ +public class ExBoxFrame extends JFrame implements ActionListener, ItemListener { + private final int UHDTHRESHOLD = 1920; + private final String STANDARDENCODING = "ISO-8859-1"; + + private JMenuItem connect, exit, open, test, retest, textView, graphicView, clear; + private JMenu menuServer; + private JButton enter; + private JTextField arguments; + private JComboBox history; + private JTextArea output; + private JScrollPane scrollPane; + private CommandExecutor command; + private CommandExecutor unitTest; + private boolean graphicOn; + private GraphicPanel graphic; + private String lastServer; + private String lastTestFile; + + public void setFontSize(int size) { + Set keySet = UIManager.getLookAndFeelDefaults().keySet(); + for (Object key : keySet) { + if (key != null && key.toString().toLowerCase().contains("font")) { + Font font = UIManager.getDefaults().getFont(key); + if (font != null) { + font = font.deriveFont((float) size); + UIManager.put(key, font); + } + } + } + } + + private void initMenu() { + JMenuBar menuBar = new JMenuBar(); + setJMenuBar(menuBar); + + JMenu menuFile = new JMenu("File"); + menuBar.add(menuFile); + open = new JMenuItem("Open..."); + open.addActionListener(this); + menuFile.add(open); + exit = new JMenuItem(); + exit.setText("Exit"); + exit.addActionListener(this); + menuFile.add(exit); + + menuServer = new JMenu("Server"); + menuBar.add(menuServer); + connect = new JMenuItem("Connect ..."); + connect.addActionListener(this); + menuServer.add(connect); + + JMenu menuView = new JMenu("View"); + menuBar.add(menuView); + clear = new JMenuItem("Clear"); + clear.addActionListener(this); + menuView.add(clear); + textView = new JMenuItem("Text"); + textView.addActionListener(this); + menuView.add(textView); + graphicView = new JMenuItem("Graphic"); + graphicView.addActionListener(this); + menuView.add(graphicView); + } + + private void initJUnit() { + try { + unitTest = ServerFactory.createServer(getPathCompiled().resolve("ExBoxJUnit.class").toString()); + test = new JMenuItem("Test ..."); + test.addActionListener(this); + menuServer.add(test); + retest = new JMenuItem("Test"); + retest.addActionListener(this); + menuServer.add(retest); + } catch (Exception e) { + warning("Test Plugin not found\n"); + } + } + + private void initComponents() { + setLayout(new BorderLayout()); + output = new JTextArea(); + scrollPane = new JScrollPane(output); + add(BorderLayout.CENTER, scrollPane); + + JPanel panel = new JPanel(new BorderLayout()); + panel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); + arguments = new JTextField(); + arguments.addActionListener(this); + panel.add(BorderLayout.CENTER, arguments); + enter = new JButton("enter"); + enter.addActionListener(this); + panel.add(BorderLayout.EAST, enter); + history = new JComboBox<>(); + history.addItemListener(this); + panel.add(BorderLayout.SOUTH, history); + add(BorderLayout.SOUTH, panel); + } + + /** + * get default path for file open dialog + */ + private Path getPathCompiled() { + try { + Path path = Paths.get(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()); + for (String part : getClass().getPackage().getName().split("\\.")) { + path = path.resolve(part); + } + return path; + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } + + /** + * The constructor + */ + public ExBoxFrame() { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception ex) { + ex.printStackTrace(); + } + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + double scaleFaktor = (screenSize.getWidth() <= UHDTHRESHOLD) ? 1 : 2; + setFontSize((int) (11 * scaleFaktor)); + setSize( + new Dimension((int) (400 * scaleFaktor), (int) (400 * scaleFaktor))); + setTitle("ExBox"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + initComponents(); + initMenu(); + initJUnit(); + } + + private void warning(String s) { + System.err.println("\nWARNING: " + s + "\n"); + } + + private void error(String s) { + output.append("\nERROR: " + s + "\n"); + } + + private void execute(String args) throws Exception { + /* if (lastServer != null) { + command = ServerFactory.createServer(lastServer); + }*/ + if (!arguments.getText().equals(history.getItemAt(0)) + && !arguments.getText().equals(history.getSelectedItem())) { + history.insertItemAt(arguments.getText(), 0); + } + if (command == null) { + error("no Server connected"); + } else { + String res = command.execute(args); + if (graphicOn) { + graphic.setFigure(res); + } else { + output.append(res); + } + } + } + + private void setGraphicView() { + if (!graphicOn) { + remove(scrollPane); + graphic = new GraphicPanel(); + output.removeNotify(); + add(BorderLayout.CENTER, graphic); + graphicOn = true; + validate(); + repaint(); + } + } + + private void setTextView() { + if (graphicOn) { + remove(graphic); + add(BorderLayout.CENTER, scrollPane); + graphicOn = false; + validate(); + repaint(); + } + } + + private String openFileDialog(Path startDirectory, String pattern) { + FileDialog fd = new FileDialog(this, "Open"); + if (pattern != null) fd.setFile(pattern); + if (startDirectory != null) fd.setDirectory(startDirectory.toString()); + fd.setVisible(true); + return fd.getDirectory() + fd.getFile(); + } + + private void testCommand(boolean retest) throws Exception { + if (!retest) { + lastTestFile = openFileDialog(getPathCompiled(), "*test.class"); + } + if (lastTestFile == null) { + output.append("ERROR no Test spezified\n"); + } else if (unitTest != null) { + output.append(unitTest.execute(lastTestFile)); + } + } + + private void connectCommand() throws Exception { + String name = openFileDialog(getPathCompiled(), "*Server.class"); + command = ServerFactory.createServer(name); + lastServer = name; + String fullClassName = command.getClass().getName(); + String simpleClassName = fullClassName.substring( + fullClassName.lastIndexOf('.') + 1); + setTitle("ExBox connected to " + simpleClassName); + + } + + private void openFile() throws Exception { + String name = openFileDialog(null, null); + + BufferedReader br = new BufferedReader( + new InputStreamReader(new FileInputStream(name), STANDARDENCODING)); + StringBuilder b = new StringBuilder(); + String line; + while ((line = br.readLine()) != null) { + b.append(line); + b.append('\n'); + } + execute(b.toString()); + } + + public void itemStateChanged(ItemEvent e) { + try { + arguments.setText((String) e.getItem()); + execute(arguments.getText()); + } catch (Throwable ex) { + error(ex.toString()); + } + } + + public void actionPerformed(ActionEvent e) { + try { + if ((e.getSource() == arguments) || (e.getSource() == enter)) { + execute(arguments.getText()); + } else if (e.getSource() == connect) { + connectCommand(); + } else if (e.getSource() == test) { + testCommand(false); + } else if (e.getSource() == retest) { + testCommand(true); + } else if (e.getSource() == open) { + openFile(); + } else if (e.getSource() == textView) { + setTextView(); + } else if (e.getSource() == graphicView) { + setGraphicView(); + } else if (e.getSource() == clear) { + output.setText(""); + } else if (e.getSource() == exit) { + System.exit(0); + } + } catch (Throwable ex) { + ex.printStackTrace(); + error(ex.toString()); + } + } +} diff --git a/src/ch/zhaw/ads/ExBoxJUnit.java b/src/ch/zhaw/ads/ExBoxJUnit.java new file mode 100644 index 0000000..b382669 --- /dev/null +++ b/src/ch/zhaw/ads/ExBoxJUnit.java @@ -0,0 +1,92 @@ +package ch.zhaw.ads; + +import org.junit.platform.engine.TestDescriptor; +import org.junit.platform.engine.TestExecutionResult; +import org.junit.platform.engine.discovery.DiscoverySelectors; +import org.junit.platform.launcher.Launcher; +import org.junit.platform.launcher.LauncherDiscoveryRequest; +import org.junit.platform.launcher.TestExecutionListener; +import org.junit.platform.launcher.TestIdentifier; +import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder; +import org.junit.platform.launcher.core.LauncherFactory; + +import java.io.*; +import java.util.LinkedList; +import java.util.List; + +public class ExBoxJUnit implements CommandExecutor { + @Override + public String execute(String testFile) throws Exception { + final List successfulTests = new LinkedList<>(); + final List failedResults = new LinkedList<>(); + + StringBuilder output = new StringBuilder(); + + output.append("\nRUN TESTS ").append(new File(testFile).getName().split("\\.")[0]).append("\n"); + + LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() + .selectors(DiscoverySelectors.selectClass(ServerFactory.loadClass(testFile))) + .build(); + + Launcher launcher = LauncherFactory.create(); + launcher.discover(request); + launcher.registerTestExecutionListeners(new TestExecutionListener() { + @Override + public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) { + if (testIdentifier.getType() != TestDescriptor.Type.TEST) { + return; + } + + if (testExecutionResult.getStatus() == TestExecutionResult.Status.SUCCESSFUL) { + successfulTests.add(testIdentifier.getDisplayName()); + } else { + failedResults.add(new TestFailure(testIdentifier.getDisplayName(), + testExecutionResult.getThrowable().orElse(null))); + } + } + }); + launcher.execute(request); + + for (String testName : successfulTests) { + output.append(testName).append(": OK\n"); + } + for (TestFailure result : failedResults) { + output.append(result.getName()).append(": ERROR\n"); + String error = result.errorString(); + if (!error.isEmpty()) { + output.append(error).append("\n"); + } + } + boolean wasSuccessful = failedResults.isEmpty(); + output.append("TESTS ").append(wasSuccessful ? "PASSED" : "FAILED").append(": ") + .append(wasSuccessful ? "OK \u263a" : failedResults.size() + " ERRORS").append("\n"); + return output.toString(); + } + + private static class TestFailure { + private final String name; + private final Throwable throwable; + + TestFailure(String name, Throwable throwable) { + this.name = name; + this.throwable = throwable; + } + + public String getName() { + return name; + } + + public String errorString() { + if (throwable == null) { + return ""; + } + try (StringWriter stringWriter = new StringWriter(); + PrintWriter printWriter = new PrintWriter(stringWriter)) { + throwable.printStackTrace(printWriter); + return stringWriter.toString(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + } +} \ No newline at end of file diff --git a/src/ch/zhaw/ads/GraphicPanel.java b/src/ch/zhaw/ads/GraphicPanel.java new file mode 100644 index 0000000..ae0b1f0 --- /dev/null +++ b/src/ch/zhaw/ads/GraphicPanel.java @@ -0,0 +1,84 @@ +package ch.zhaw.ads; + +import javax.swing.*; +import java.awt.*; +import java.util.StringTokenizer; + +public class GraphicPanel extends JPanel { + String figure; + + public void setFigure(String figure) { + this.figure = figure; + paint(getGraphics()); + } + + private void drawRect(Graphics g, double x, double y, double width, double height, String style) { + int w = getWidth(); + int h = getHeight(); + int ix0 = (int) (w * x); + int iy0 = (int) (h * y); + int ix1 = (int) (w * (x + width)); + int iy1 = (int) (h * (y + height)); + if (style.equals("draw")) { + g.drawRect(ix0, h - iy1, ix1 - ix0, iy1 - iy0); + } else { + g.fillRect(ix0, h - iy1, ix1 - ix0, iy1 - iy0); + } + } + + private void drawFigure(Graphics g) { + if (figure != null) { + int w = getWidth(); + int h = getHeight(); + g.setColor(Color.black); + StringTokenizer tok = new StringTokenizer(figure, " <>=/,\"\n"); + while (tok.hasMoreTokens()) { + String fig = tok.nextToken(); + if (fig.equals("line")) { + tok.nextToken(); + double x1 = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double y1 = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double x2 = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double y2 = Double.parseDouble(tok.nextToken()); + g.drawLine((int) (x1 * w), h - (int) (y1 * h), + (int) (x2 * w), h - (int) (y2 * h)); + } else if (fig.equals("rect")) { + tok.nextToken(); + double x = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double y = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double width = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + double height = Double.parseDouble(tok.nextToken()); + tok.nextToken(); + String style = tok.nextToken(); + drawRect(g, x, y, width, height, style); + } else if (fig.equals("color")) { + tok.nextToken(); + int red = Integer.parseInt(tok.nextToken()); + tok.nextToken(); + int green = Integer.parseInt(tok.nextToken()); + tok.nextToken(); + int blue = Integer.parseInt(tok.nextToken()); + g.setColor(new Color(red, green, blue)); + } + } + } + } + + private void clear(Graphics g) { + int w = getWidth(); + int h = getHeight(); + g.setColor(new Color(240, 240, 240)); + g.fillRect(0, 0, w, h); + } + + public void paint(Graphics g) { + clear(g); + drawFigure(g); + } +} \ No newline at end of file diff --git a/src/ch/zhaw/ads/HashServer.java b/src/ch/zhaw/ads/HashServer.java new file mode 100644 index 0000000..91b6fdf --- /dev/null +++ b/src/ch/zhaw/ads/HashServer.java @@ -0,0 +1,45 @@ +package ch.zhaw.ads; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +public class HashServer implements CommandExecutor { + private final static int STARTNR = 0; + private final static int NAME = 1; + private final static int TIME = 2; + + private final Map data = new MyHashtable<>(4000); + + private long parseTime(String s) throws Exception { + DateFormat sdf = new SimpleDateFormat("HH:mm:ss.S"); + Date date = sdf.parse(s); + return date.getTime(); + } + + public void load(Map data, String list) { + String[] lines = list.split("\n"); + for (String line : lines) { + String[] items = line.split(";"); + MyCompetitor c = new MyCompetitor(Integer.parseInt(items[STARTNR]), // startNr + items[NAME], // name + items[TIME]); // time + data.put(c, c); + } + } + + public String execute(String arg) { + if (arg.toUpperCase().startsWith("GET")) { + String[] items = arg.substring(3).trim().split(";"); + MyCompetitor key = new MyCompetitor(Integer.parseInt(items[1]), items[0], "00:00:00.0"); + MyCompetitor o = data.get(key); + if (o != null) { + return items[0] + " " + items[1] + " -> " + o + "\n"; + } + return "not found\n"; + } + load(data, arg); + return "" + data.size() + " loaded\n"; + } +} diff --git a/src/ch/zhaw/ads/MyCompetitor.java b/src/ch/zhaw/ads/MyCompetitor.java new file mode 100644 index 0000000..0e14684 --- /dev/null +++ b/src/ch/zhaw/ads/MyCompetitor.java @@ -0,0 +1,65 @@ +package ch.zhaw.ads; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class MyCompetitor implements Comparable { + private final String name; + private final String time; + private int rank; + + public MyCompetitor(int rank, String name, String time) { + this.rank = rank; + this.name = name; + this.time = time; + } + + public void setRank(int rank) { + this.rank = rank; + } + + public String getTime() { + return time; + } + + public String getName() { + return name; + } + + private static long parseTime(String s) { + try { + DateFormat sdf = new SimpleDateFormat("HH:mm:ss"); + Date date = sdf.parse(s); + return date.getTime(); + } catch (Exception e) {System.err.println(e);} + return 0; + } + + private static String timeToString(int time) { + SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); + return df.format(new Date(time)); + } + + public String toString() { + return ""+ rank + " "+name+" "+time; + } + + @Override + public int compareTo(MyCompetitor o) { + // to be done + return -1; + } + + @Override + public int hashCode() { + // to be done + return -1; + } + + @Override + public boolean equals (Object o) { + // to be done + return false; + } +} diff --git a/src/ch/zhaw/ads/MyHashtable.java b/src/ch/zhaw/ads/MyHashtable.java new file mode 100644 index 0000000..740d37a --- /dev/null +++ b/src/ch/zhaw/ads/MyHashtable.java @@ -0,0 +1,96 @@ +package ch.zhaw.ads; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +@SuppressWarnings("unchecked") +public class MyHashtable implements Map { + private K[] keys = (K[]) new Object[10]; + private V[] values = (V[]) new Object[10]; + + private int hash(Object k) { + int h = Math.abs(k.hashCode()); + return h % keys.length; + } + + public MyHashtable(int size) { + // to be done + } + + // Removes all mappings from this map (optional operation). + public void clear() { + // to be done + throw new UnsupportedOperationException(); + } + + // Associates the specified value with the specified key in this map (optional operation). + public V put(K key, V value) { + // to be done + throw new UnsupportedOperationException(); + } + + // Returns the value to which this map maps the specified key. + public V get(Object key) { + // to be done + throw new UnsupportedOperationException(); + } + + // Removes the mapping for this key from this map if present (optional operation). + public V remove(Object key) { + // to be done (Aufgabe 3) + throw new UnsupportedOperationException(); + } + + // Returns the number of key-value mappings in this map. + public int size() { + // to be done + throw new UnsupportedOperationException(); + } + + // UnsupportedOperationException =================================================================== + // Returns a collection view of the values contained in this map. + public Collection values() { + throw new UnsupportedOperationException(); + } + + // Returns true if this map contains a mapping for the specified key. + public boolean containsKey(Object key) { + throw new UnsupportedOperationException(); + } + + // Returns true if this map maps one or more keys to the specified value. + public boolean containsValue(Object value) { + throw new UnsupportedOperationException(); + } + + // Returns a set view of the mappings contained in this map. + public Set> entrySet() { + throw new UnsupportedOperationException(); + } + + // Compares the specified object with this map for equality. + public boolean equals(Object o) { + throw new UnsupportedOperationException(); + } + + // Copies all of the mappings from the specified map to this map (optional operation). + public void putAll(Map t) { + throw new UnsupportedOperationException(); + } + + // Returns the hash code value for this map. + public int hashCode() { + throw new UnsupportedOperationException(); + } + + // Returns true if this map contains no key-value mappings. + public boolean isEmpty() { + throw new UnsupportedOperationException(); + } + + // Returns a set view of the keys contained in this map. + public Set keySet() { + throw new UnsupportedOperationException(); + } +} diff --git a/src/ch/zhaw/ads/RangZuerich.csv b/src/ch/zhaw/ads/RangZuerich.csv new file mode 100644 index 0000000..0e68b7d --- /dev/null +++ b/src/ch/zhaw/ads/RangZuerich.csv @@ -0,0 +1,3166 @@ +3;Kiptum Daniel;02:11:31.1 +51;Ançay Tarcis;02:20:02.9 +52;Kreienbühl Christian;02:21:47.6 +53;Ott Michael;02:33:48.9 +54;Menzi Christoph;02:27:26.4 +55;Oliver Ruben;02:32:12.8 +57;Elmer Beat;02:33:53.3 +58;Kühni Martin;02:33:36.9 +59;Müller Stefan;02:31:14.0 +62;Marti Adrian;02:30:09.7 +63;Zwicky Christian;02:36:28.5 +64;Gehrig Roman;02:33:50.3 +65;Körner Lutz;02:32:47.1 +67;Nunige Guy;02:34:11.7 +69;Marti Fredi;02:44:48.7 +70;Dufaux Laurent;02:43:48.8 +71;Hamd Mohamednur;02:19:45.7 +72;Simpson Guy;02:30:50.8 +151;Morceli Patricia;02:37:28.0 +152;Berchtold Rachel;02:53:42.2 +153;Di Marco Magali;02:42:56.3 +156;Wyss Sandra;02:54:06.3 +157;Amiet Tanja;02:53:08.5 +159;Meneghin-Pliska Maja;02:46:07.6 +163;Zimmermann Denise;02:56:54.0 +165;Beffa Heidi;03:09:43.9 +166;Haller Natasha;03:01:07.3 +167;Lohri Nicole;02:52:31.3 +168;Serafini Susanna;03:29:00.2 +169;Annen Lamard Sandra;02:57:20.3 +170;Mayer-Hofmann Lucia;02:59:35.4 +201;Allard David;04:26:57.0 +202;Andres Robert;03:33:42.9 +203;Angehrn Otto;04:20:16.5 +204;Bader Philipp;03:40:53.1 +205;Baer Willi;03:28:12.9 +206;Baumann Simon;03:03:47.9 +207;Baumann Simon;03:12:09.6 +208;Baumann Werner;03:45:49.7 +209;Baur Hansruedi;04:04:04.5 +210;Bellerjeau James;03:42:08.6 +211;Benz Felix;02:58:13.2 +212;Bergamin Mario;03:26:30.3 +213;Bernhard Stefan;04:46:01.3 +215;Berweger Peter;02:53:15.4 +218;Bischof Thomas;03:26:40.1 +219;Blatter Eveline;02:56:49.7 +220;Bolliger Armin;03:00:08.5 +221;Brem Daniel;03:49:53.5 +222;Meier Zgraggen Stefani;04:33:30.8 +223;Brunold Andrea;03:34:27.0 +224;Brüschweiler Mathias;03:29:48.0 +225;Bucher René;04:06:20.5 +226;Buchmann Isabel;03:26:18.3 +227;Bühler Sigi;03:41:30.9 +228;Bühler Willi;03:30:40.3 +229;Buzzi Andreas;03:46:55.3 +230;Cavelti Roland;03:17:16.1 +231;Cremon René;03:39:32.4 +233;Denker Catrina;03:13:34.8 +235;Egli Ariane;04:06:18.9 +236;Ehrismann Martin;03:31:04.9 +237;Eichholzer Hans;03:57:46.6 +239;Estermann Thomas;03:48:47.8 +240;Fahrni Kurt;03:32:56.4 +241;Fesli Mehmet;04:46:31.2 +242;Flück Heinz;04:41:57.5 +243;Flühmann Katrin;03:31:29.0 +244;Fuchs Stefan;03:02:36.3 +245;Füglistaller Jörg;03:32:35.2 +246;Fürst Roger;03:24:10.4 +247;Fürst Willi;04:39:57.6 +248;Galati Francesco;03:29:38.1 +249;Gasser Matthias;03:29:03.8 +250;Gäumann Coni;03:59:14.9 +251;Gautschi Martin;03:02:27.4 +252;Gerber Bernhard;04:06:33.1 +254;Gianini Franz;04:01:52.1 +255;Giger Claudio;03:06:06.0 +256;Giger Stephan;03:56:50.1 +257;Good Erich;03:30:46.9 +258;Merkt Jürg;02:59:49.3 +259;Streit Markus;02:59:49.2 +260;Goudsmit Gerrit;02:56:51.0 +261;Gut Viktor;03:22:35.2 +262;Haag Elisabeth;04:10:05.7 +263;Häberli Roland;04:36:11.0 +264;Hächler Roland;04:00:18.3 +265;Haefeli Angela;03:48:09.9 +266;Häfliger Jürg;03:42:23.5 +267;Hafner Jürg;04:25:44.5 +268;Hager Armin;03:22:35.8 +269;Händle Heinz;04:13:38.7 +270;Herren Kurt;04:49:31.2 +271;Brüniger Markus;03:56:54.1 +272;Hirschi Peter;04:32:42.3 +273;Höck Stefan;03:34:37.9 +274;Hofmann Martin;04:21:51.7 +275;Hofstetter Corinne;03:30:35.2 +277;Holzinger Adrian;03:15:05.9 +279;Huber Edi;03:10:04.9 +280;Huber Mac;03:46:59.0 +281;Huggenberger Kurt;04:20:30.3 +282;Jaccard Marc Pierre;04:41:07.1 +283;Jakopic Klemen;03:17:07.9 +284;Jarjour Kamel;03:47:02.2 +285;Jordi Markus;03:51:01.0 +286;Jost Hansueli;03:49:31.9 +287;Jucker Andreas H.;03:22:44.9 +288;Jud Ueli;02:52:15.4 +289;Jutzi Victor;03:40:25.6 +290;Kälin Léon;04:04:11.0 +291;Kaufmann Patrick;04:03:16.0 +293;Keller Peter;03:23:54.9 +294;Keller Stephan;03:26:12.3 +295;Kilchherr Virginia;03:44:11.6 +296;Kloter Georg;03:38:02.6 +297;Koch Stephan;03:28:39.7 +298;Kopp Martin;03:17:15.1 +300;Kreienbühl Anna;04:04:25.4 +301;Kreienbühl Fridolin;03:51:50.0 +302;Kuendig Christoph;04:18:39.9 +303;Kulik Karsten;03:07:13.8 +304;Kunz Thomas;03:47:52.3 +305;Kunz Tommy;04:00:43.7 +306;Kuonen Kurt;03:16:10.8 +307;Kurz Daniel;03:42:28.9 +308;Kuster Verena;04:46:49.9 +309;Laffer Urs;03:48:15.5 +310;Landolt Andreas;03:19:46.2 +311;Ledermann Martin;04:51:42.7 +313;Nüssli Dave;03:14:49.2 +314;Graf Peter;03:14:47.9 +315;Lilley Darrel;04:16:09.6 +316;Manning John;03:38:25.5 +318;Maslarevic Dragan;04:45:37.9 +319;Meier Pascal;03:53:51.1 +320;Meier Pius;05:24:48.8 +321;Meier Robert;03:58:11.2 +322;Meyer Arthur;04:36:21.2 +323;Meyer Christoph;03:49:14.4 +324;Meyer Dirk;03:13:32.3 +325;Meyer Stephan;03:26:31.8 +326;Milivojevic Ljubomir;03:04:44.1 +327;Miller Barbara;03:17:17.1 +330;Mona Sergio;03:19:03.6 +331;Monn Matilda;03:59:34.9 +332;Müller Adrian;03:54:32.6 +333;Müller Doris;03:40:25.5 +334;Müller Thomas;03:23:52.0 +335;Ochsner René;04:01:31.7 +336;Patcas Michel;03:53:53.1 +337;Peric Frank;03:27:59.8 +338;Pfister Matthias;03:22:09.8 +339;Prosdocimi Ivan;03:46:41.9 +340;Pürro Beat;03:44:25.9 +341;Rau Dani;03:24:19.5 +342;Renggli Thomas;02:53:46.2 +343;Helfenstein Alain;03:44:44.0 +344;Anderhalden Donnino;03:44:01.1 +346;Rezan Robert;03:34:37.5 +347;Rickli Jörg;03:29:51.8 +348;Rothen Franz;03:25:01.6 +349;Röthlisberger Alain P.;03:34:40.8 +350;Rüegg Beat;03:26:53.1 +351;Rüegg Herbert;03:23:31.0 +352;Ruoss Sven;03:06:32.8 +353;Sandmeier Ueli;03:13:54.5 +354;Saxer Peter;03:45:15.0 +355;Schaffer Bernard;03:37:55.1 +356;Schaub Werner;03:36:45.4 +357;Schilling Hans;03:55:00.8 +358;Appenzeller Ulrich;03:59:30.8 +359;Fischer Reto;03:59:33.1 +360;Schlatter Sonya;04:18:26.3 +361;Schmid Christian;03:00:53.9 +362;Schmid Richard;02:58:46.7 +363;Schuster Mathias;03:11:42.3 +364;Seiler Hans;03:37:28.8 +365;Späni Urs;04:22:38.1 +366;Spiess Paul;03:42:34.9 +367;Stalder Martin;03:57:32.6 +368;Steimann Ernst;04:41:02.1 +369;Stöckli Urs;03:03:26.1 +370;Straumann Urs;03:01:40.9 +371;Studer Franz;04:17:49.1 +372;Sturzenegger Daniel;03:28:01.9 +373;Süssli Philipp;03:08:02.0 +374;Suter Kurt;03:46:46.6 +375;Tanner Christian;03:34:34.6 +376;Taschi Sander;03:36:13.3 +377;Thalmann Martin;03:49:11.2 +378;Theiler Alois;03:47:54.7 +379;Tischer Georg;04:44:08.7 +380;Tramacere Enrico;04:00:20.5 +381;Veraguth Christian;05:29:08.8 +382;Vetterli Thomas;04:16:32.9 +383;Vogel Marco;03:25:36.1 +384;Vögeli Thomas;03:49:27.0 +385;Vogt Urs;03:19:15.3 +386;Voser Therese;03:29:13.2 +387;Vosseler Beat;02:56:34.7 +388;Waller Max;04:15:17.0 +389;Walther Rita;04:23:45.5 +390;Wäschle Stefan;03:15:35.3 +391;Wenger Beat;03:34:52.6 +392;Wettstein Walter;04:53:57.7 +393;Wild Ruedi;03:27:44.3 +394;Wyser Norbert;03:26:23.0 +395;Zahler Markus;03:56:47.9 +396;Zgraggen Walter;03:33:11.9 +397;Zimmermann Herbert;04:26:40.4 +398;Zingg Marcel;03:45:33.1 +399;Zollinger Thomas;03:17:47.8 +400;Zingg Matthias;03:28:26.8 +402;Züger Fritz;04:20:41.2 +403;Zurbuchen Röbi;03:26:40.4 +404;Alpiger Karl Jun.;03:26:11.7 +405;Amacher Tom;03:54:37.7 +406;Ammann Anton;04:54:02.2 +407;Ammann Hansruedi;03:49:23.4 +408;Anneler James;04:59:47.5 +409;Bailey Richard;03:24:29.3 +411;Baumberger Rolf;03:05:38.5 +412;Uhler Remo;04:13:30.8 +413;Jaussi Lars;04:13:31.4 +414;Baumgartner Peter;04:43:47.2 +415;Bebie Bruno;03:23:03.2 +416;Beck René;04:21:30.0 +417;Bergamin Roland;03:24:28.6 +418;Berger Beat;02:42:27.0 +419;Bertschinger Erwin;03:24:17.3 +420;Binder Peter;03:49:11.9 +421;Bischofberger Lukas;03:17:26.2 +422;Böhler Thomas;03:43:48.7 +424;Borner Daniel;04:51:53.1 +425;Bosshard Roland;03:18:10.3 +426;Breitenmoser Stefan;02:56:21.4 +427;Brem Gabriella;03:56:23.3 +428;Huber Yvonne;04:27:59.6 +429;Malischke Jacqueline;04:27:59.2 +430;Brem Ruedi;03:32:12.2 +432;Bruhin Marino;03:32:43.9 +433;Bryner Adrian;04:06:52.1 +434;Bürgi Matthias;04:11:55.0 +436;Christen David;05:02:03.8 +437;Ciprian Peter;04:12:24.3 +438;Conrad Otto;04:34:00.0 +439;Conti Antonio;03:14:49.1 +440;Della Rossa Hanspeter;04:04:20.0 +441;Deseö Katja;04:32:53.5 +442;Deseö Thomas;03:52:05.9 +443;Reichmuth Ruedi;04:40:20.4 +444;Mettler Martin;04:39:44.8 +445;Ehrhard Andre;03:29:17.4 +446;Eigenmann Markus;03:40:47.1 +447;Engeli Benjamin;02:57:53.2 +448;Etzold Liz;04:33:10.0 +450;Flury Alois;04:51:02.6 +451;Frei Martin;02:46:47.7 +452;Geerdsema Jan;04:32:20.6 +453;Gloor Ruedi;04:20:10.2 +454;Grimm Schädel Christia;03:49:06.0 +456;Hauck Rene;03:28:20.9 +457;Haupt Hanspeter;04:20:51.3 +458;Josty Adrian;04:59:25.2 +459;Wieser Andreas;04:59:26.2 +460;Heer Andreas;03:50:32.2 +461;Hegner Connie;03:51:46.0 +463;Huerlimann Markus;03:33:33.9 +465;Jordi Christine;03:56:35.0 +466;Juhasz Bruno;03:45:55.0 +467;Kämpf Kurt;03:57:28.5 +468;Keller Andreas;03:53:52.6 +469;Keller Markus;03:14:12.6 +470;Kern Jean-Pierre;03:55:37.6 +471;Läderach Peter;03:35:32.3 +472;Landolt Fredi;03:57:25.0 +473;Lörtscher Robin;03:29:19.5 +474;Lutz Peter;04:39:56.3 +476;Mächler Anton;03:47:14.9 +477;Manz Thomas;03:33:38.9 +479;Meier Kurt;04:04:48.9 +480;Meier Philipp;03:32:31.2 +481;Meile Urs;04:10:32.5 +482;Melchior Ursula;03:46:13.7 +484;Münzenmaier Samuel;02:58:03.2 +485;Nägeli Oliver;03:45:17.4 +486;Niederberger Martin;03:55:45.4 +487;Pfenniger Peter;03:55:37.5 +488;Rhyn Andy;03:28:54.3 +489;Rieder Marcos;03:08:11.3 +490;Rüeger Urs;03:19:30.1 +492;Schreiber Christian;03:27:36.0 +493;Sobaszkiewicz Markus;04:06:39.1 +495;Sonderer Marcel;03:11:32.6 +496;Spielmann Hans-Peter;03:44:30.3 +497;Steiner Ueli;03:56:34.9 +498;Stöckli Silvia;05:10:36.7 +499;Straube Wolfgang;03:42:04.6 +500;Zielmann Sarah;03:59:32.8 +501;Suter Thomas;03:21:52.2 +502;Sutter Fritz;04:23:39.4 +503;Tschopp André;03:25:06.6 +504;Utzinger Reto;03:24:43.8 +506;Waltl Günther;03:28:29.0 +507;Wartmann Matthias;03:42:03.9 +508;Wegmueller Marc Simon;03:15:37.4 +509;Wegmüller Rolf;03:15:38.6 +510;Widmer Lucas;02:46:06.3 +513;Bugmann Daniel;03:15:19.8 +514;Dos Reis Romeo;03:34:55.0 +515;Meier-Pfosi Marlies;05:11:40.1 +516;Schmid Beat;04:19:03.8 +517;Sicurelli Ernesto;03:26:25.5 +518;Ulrich Beat;03:25:27.1 +519;Bossi Daniel;04:04:24.4 +520;Coradi Reto;03:38:27.0 +522;Kaufmann Reto;05:10:43.1 +523;Margreth Pascal;04:24:04.5 +524;Schaffner Lukas;03:35:23.0 +525;Schatt Hansjörg;04:09:32.5 +526;Schmid Ernst;02:51:07.9 +527;Soland Benjamin;03:31:59.2 +528;Meier Stefan;03:33:03.6 +777;Herzog Margrit;03:57:45.0 +801;Bartholdi Roger;04:01:38.7 +802;Lauber Gerold;03:48:01.4 +1001;Abegg Monica;03:56:33.1 +1002;Abeguile Juliette;03:33:44.5 +1004;Aerne Rusterholz Susan;04:05:15.9 +1006;Allemann Olivia;04:12:36.4 +1007;Altmann Béatrice;03:31:22.2 +1008;Altwegg Fehr Susanne;03:44:40.6 +1011;Angst Nicole;03:58:32.6 +1012;Antener Doris;03:47:33.4 +1014;Arena Michaela;04:12:27.7 +1015;Arlitt Nicole;04:10:56.4 +1016;Arnold Corinne;03:28:30.5 +1017;Arnold Ruth;03:24:42.8 +1018;Bächle Karin;03:47:12.8 +1019;Bachmann Nicole;03:47:13.8 +1024;Ballamann Gudrun;04:10:45.9 +1025;Bannier Elsbeth;03:54:42.0 +1026;Bättig Ruth;03:45:44.9 +1031;Bebi Mirjam;02:58:12.9 +1032;Béguin Sandrine;04:21:05.8 +1035;Belk Brigitte;04:04:51.2 +1036;Bellgardt Sabine;04:21:17.8 +1037;Bennett Nicole;04:53:22.1 +1038;Benz Regula;03:30:19.7 +1039;Berchtold Marion;03:45:48.0 +1040;Berchtold Silvia;05:00:58.2 +1044;Bienz Sabrina;03:54:02.0 +1045;Bissig Katharina;03:57:07.4 +1046;Blaeser Manelle;04:05:37.7 +1047;Blatter Priska;04:16:43.4 +1048;Boehm Martina;03:58:38.9 +1050;Bolfing Petra;03:09:24.2 +1051;Boos-Hautmann Andrea;04:16:17.6 +1052;Borsatti Luciana;04:39:50.9 +1053;Bosshard Erika;04:21:35.5 +1054;Bottesi Elisabeth;04:11:56.3 +1056;Brandenberg Monika;03:41:55.3 +1057;Brändle Cindy;04:07:53.1 +1062;Brülisauer Marianne;03:09:16.8 +1063;Brunner Jeannette;03:38:03.1 +1065;Bucher Yvonne;04:04:11.0 +1066;Buchser Marie-Louise;04:27:44.9 +1067;Buehler Luzia;03:37:34.9 +1069;Bugmann Franziska;04:04:06.0 +1070;Buholzer Marlis;04:14:25.0 +1071;Burgardt Sonja;03:53:53.8 +1072;Bürge-Stahel Ursula;04:21:06.2 +1075;Busque Stephanie;04:16:09.0 +1078;Calic Manda;04:01:57.7 +1079;Camathias Heidi;04:25:21.0 +1081;Casagrande Ruth;03:47:47.4 +1083;Cathomas Yvonne;04:33:50.5 +1084;Cavelti Gaby;03:32:08.7 +1086;Claivaz Patricia;04:57:11.2 +1087;Clark Joan;04:09:41.9 +1088;Clematide Renate;03:12:23.6 +1093;Cotroneo Laura;04:40:20.6 +1096;De Cristofaro Teresa;04:31:18.3 +1098;Debély-Escher Raphaela;03:56:36.2 +1099;Deck-Meier Rosie;04:00:35.9 +1102;Diethelm Melanie;04:43:21.4 +1105;Dober Karin;03:41:48.9 +1107;Dollerup Brit;03:34:36.5 +1109;Dossenbach Laura;03:48:51.4 +1112;Ducrey Marie-Claire;03:37:40.4 +1115;Ecoffey Liliane;04:26:32.2 +1120;Emmenegger Sandra;03:52:23.9 +1121;Emmenegger Tanja;03:42:35.7 +1122;Engeler-Zöllig Monika;04:01:55.1 +1123;Erismann Liliane;04:09:57.5 +1125;Eyerman Jennifer;03:27:32.3 +1127;Addea Jasmin;03:43:23.5 +1128;Fikarova Olga;04:14:49.8 +1130;Fischer Marion;04:05:54.4 +1131;Fischknecht Sibylle;03:30:21.3 +1134;Föller Fiona;04:27:12.9 +1135;Forrer Brigitte;03:43:13.4 +1137;Forster Kundert Helen;05:02:18.5 +1139;Frankiny Denise;03:13:41.3 +1140;Franz-Pfetzer Ursula;05:14:57.7 +1141;Fratila Ana-Maria;04:06:41.1 +1142;Frei Melanie;03:54:41.0 +1143;Frei Miriam;04:43:31.6 +1144;Frey Gaby;03:41:35.6 +1145;Frey Viola;04:03:08.5 +1146;Frey-Martins Eli;03:58:10.1 +1147;Friederich-Baur Marian;04:37:22.9 +1148;Friedli Gertrud;04:33:34.9 +1150;Fritzsche Sandra;04:01:35.4 +1151;Fuchs Katharina;04:16:29.9 +1152;Fuchser Karin;04:01:53.8 +1154;Furrer-Theiler Imelda;03:49:14.6 +1155;Gagliardi Ulla;04:09:39.5 +1156;Gahlinger Chantal;03:58:12.1 +1157;Gähwiler Anita;05:13:12.4 +1158;Gähwiler Liselotte;03:16:54.3 +1163;Gass Regina;04:01:53.2 +1164;Gattiker Irene;04:11:34.3 +1165;Gautschi Caroline;04:13:10.1 +1168;Gerth-Zellweger Trudi;04:12:03.6 +1169;Glaus Barbara;03:11:55.5 +1171;Gleises Alice;04:11:29.1 +1172;Gloor Isabelle;03:57:49.9 +1175;Goeree Michelle;04:57:30.0 +1176;Gomringer Nicole;03:12:56.5 +1177;Graf-Ganz Ursula;04:26:49.8 +1179;Graule Karin;03:56:29.5 +1182;Grosswiler Katrin;04:01:13.2 +1184;Guenat Raquel;03:45:58.1 +1186;Häcki Florence;03:22:38.0 +1187;Hägle Monika;04:49:05.5 +1189;Hannay Jackie;03:48:34.5 +1191;Hartmann Hanne;04:05:53.4 +1193;Haudenschild Barbara;04:11:32.2 +1194;Häusermann Anya;03:41:17.8 +1195;Häusler Eva;03:39:02.5 +1196;Hayoz Catherine;03:40:32.0 +1197;Hefti Eliane;04:23:02.4 +1200;Heim Tina;03:33:22.1 +1202;Heiniger Daniela;03:44:44.1 +1203;Heiniger Elsbeth;04:06:59.8 +1205;Hersberger-Gsell Vera;03:58:03.6 +1206;Herwig Marie-Therese;04:11:08.1 +1209;Hoffmann Dorothee;04:08:14.4 +1210;Hofmann Judith;03:39:20.5 +1213;Höglund Mikaela;02:59:13.3 +1220;Hotz Sigrist Gabriela;04:03:19.2 +1222;Huber Alice;03:45:15.5 +1224;Huber-Muhl Prisca;03:27:03.8 +1225;Hübscher Sara;04:06:30.3 +1226;Huclova Sonja;03:28:29.1 +1229;Hunn Erika;03:47:11.7 +1231;Huwyler Renate;04:56:46.2 +1232;In-Albon Wampfler Tina;02:54:59.8 +1233;Inglin Heidi;04:08:25.3 +1234;Insley-Darling Janet;04:01:18.8 +1235;Issakainen Vilma;03:59:57.6 +1238;Jeker Sabine;03:40:53.9 +1239;Jenny Esther;03:26:56.8 +1240;Jenzer Nina;04:33:15.5 +1241;Jokl Franziska;05:15:39.1 +1244;Jud Daniela;04:10:28.8 +1245;Käch Silvia;04:03:47.1 +1246;Kaderli Iris;04:15:39.5 +1247;Kaetzke Philomela;03:48:35.9 +1249;Kaltenrieder Margrit;03:25:23.4 +1250;Kamm Heidy;04:56:29.1 +1251;Käppeli Helena;03:59:34.3 +1253;Karremans Jeannette;03:33:33.0 +1255;Keller Jacqueline;03:09:10.5 +1257;Keller-Noser Nicole;04:21:59.9 +1258;Kellerhals Luzia;03:30:14.3 +1259;Kern Beatrice;04:32:41.8 +1263;Keup Verena;04:34:54.3 +1265;Kirchhof Frizzi;03:57:05.6 +1266;Kleinlaut Karin;03:56:20.7 +1273;Knuchel Patrizia;03:13:21.6 +1274;Koch Tamara;04:00:47.4 +1278;Kramer Jutta;03:57:31.5 +1281;Krebs-Stickel Sandra;04:03:03.0 +1286;Krummenacher Brigitte;04:00:52.9 +1287;Kubli Rebekka;04:07:21.4 +1288;Küffner Marianne;03:36:19.5 +1290;Kuhn Patricia;04:05:17.5 +1291;Kunz Sibylle;03:50:46.1 +1292;Lacher Priska;03:22:38.7 +1294;Landolt Bernadette;03:54:31.3 +1297;Lanner Regina;04:20:58.1 +1303;Lehner Christa;04:44:59.2 +1305;Leitmann Petra;04:13:02.7 +1309;Lewis Anne;05:07:56.6 +1315;Litzius Denise;04:16:19.8 +1316;Long Lisbeth;05:28:42.2 +1317;Loretz Manuela;03:27:22.2 +1318;Lüthi Lisa;03:52:40.7 +1320;Maag-Hegetschweiler Ch;03:32:15.8 +1322;Maggini Esther;04:35:40.9 +1324;Marti Rosmarie;04:46:36.4 +1326;Matz Brigitte;03:27:20.3 +1328;Mazzolini Mbenda Betti;04:02:53.3 +1331;Meier Gisela;04:20:56.8 +1332;Meier Isabel;03:54:29.6 +1333;Meier Jessica;03:47:11.8 +1334;Allemann Isabelle;03:20:13.7 +1335;Meister Franziska;03:43:43.8 +1336;Messmer Monika;04:43:05.6 +1338;Metzger Hübi;03:56:50.5 +1340;Michel Irène;04:40:33.3 +1343;Mlekusch Sabine;04:57:10.7 +1344;Möckli Ruth;04:55:14.3 +1345;Modoux Liliane;04:33:28.4 +1347;Mühldorfer Annette;03:58:49.9 +1348;Morf Doris;04:46:54.3 +1349;Mosetti Michelle;04:21:30.0 +1350;Muggleton Belinda;04:18:22.4 +1351;Bärtsch Edith;03:40:14.9 +1354;Müller Jennifer;03:29:58.2 +1355;Müller Sandra;03:31:42.8 +1359;Näf Esther;04:04:42.8 +1360;Nakanishi Yoshiko;04:26:51.9 +1361;Nardiello Selina;03:43:57.5 +1363;Neidhart Jana;03:36:45.1 +1365;Nelson Christen;03:24:28.6 +1368;Baumann Flavia;03:50:36.9 +1369;Neri Claudia;03:52:57.9 +1370;Neustadt Rita;03:35:23.3 +1372;Niederberger Fränzi;03:54:18.1 +1373;Niederberger Trudi;04:39:30.0 +1374;Niederhauser Dami;04:14:27.6 +1375;Nielsen Birgitte;03:44:22.1 +1378;O'Neill Annemarie;04:10:48.7 +1379;Odenbach Mary;03:50:44.8 +1382;Oneta Cristina;04:07:10.3 +1383;Ossowska Maria;03:57:34.6 +1384;Padberg Barbara;03:46:42.8 +1385;Paganini Chiara;04:16:43.3 +1390;Praz Maria;04:26:42.8 +1393;Pulver Barbara;03:21:09.7 +1395;Purtschert Amanda;04:07:03.6 +1396;Rada Marianne;03:51:41.6 +1398;Rakic Silvia;04:25:10.4 +1400;Rechsteiner Sandra;03:23:42.4 +1401;Recine Lisa;04:33:10.5 +1402;Reinhold Irene;03:57:05.1 +1405;Renggli Conny;04:23:09.5 +1407;Reusser Christine;04:08:57.5 +1408;Rhomberg Birgitta;03:29:49.0 +1409;Richards Shola;05:05:02.8 +1410;Riga Petra;03:30:53.5 +1413;Ringger Christa;04:14:44.5 +1414;Rippstein Hilde;04:02:11.3 +1415;Riva Anita;04:57:03.1 +1418;Rosenast Andrea;03:33:20.5 +1419;Rosenberger Thekla;04:03:36.2 +1420;Rossi Marianne;03:43:50.4 +1421;Roth Barbara;04:38:53.2 +1424;Rüeger Riikka;04:10:10.9 +1425;Rüegg Kim;04:11:34.6 +1426;Ruesch Caroline;04:28:02.8 +1429;Russenberger Doris;03:13:34.4 +1430;Russo Andrea;04:41:49.5 +1431;Rutishauser Cornelia;04:28:46.0 +1436;Saly Katrin;03:31:23.0 +1437;Schaub Andrea;04:08:39.9 +1438;Scheiwiller Margrit;05:03:02.2 +1440;Schenkel Gabriela;03:34:02.3 +1441;Schenkel Karin;04:13:08.8 +1442;Scherer Cornelia;04:27:02.8 +1445;Schild-Leuthold Juliet;02:57:44.4 +1452;Schneider Anne;04:01:13.0 +1453;Schneider Monica;03:59:27.5 +1455;Schölly Deborah;04:39:56.0 +1458;Schudel Jacqueline;04:27:00.3 +1459;Schülin Sabina;03:47:19.8 +1461;Schwander Gabriela;04:14:55.3 +1463;Schwarzentruber Cornel;03:45:09.2 +1465;Schwegler Nicole;03:42:48.1 +1466;Schwerzmann Michèle;03:17:01.7 +1470;Seiler Sonja;03:09:36.5 +1471;Seitz Judith;04:00:13.6 +1472;Senn Claudia;03:45:32.6 +1474;Siegenthaler Brigitte;03:48:24.8 +1475;Siegfried Anita;04:14:01.9 +1476;Sigrist Jeannette;03:36:39.8 +1477;Simmen Sabine;03:24:12.0 +1479;Skreckova Denisa;03:51:43.8 +1482;Smith Sarah;03:52:56.6 +1483;Sobrino Karen;03:26:49.4 +1488;Stadler Eufemia;04:16:10.4 +1489;Stäger Marianne;03:46:56.2 +1491;Stampfer Brigitte;04:19:50.8 +1496;Steiger Birgit;04:31:36.7 +1497;Steimann Dana;04:48:23.3 +1498;Steiner Marianne;03:12:17.5 +1499;Stettler-Brotschi Clau;04:13:17.0 +1500;Stich Isabelle;04:11:38.4 +1501;Stöckli Jolanda;04:04:16.1 +1502;Stöckli Mara;03:46:21.8 +1504;Streule Eliane;04:28:34.0 +1506;Strub Kunz Jrène;03:56:17.7 +1507;Studer Cornelia;03:29:55.4 +1508;Surber Tanja;03:33:44.2 +1509;Symonds Rebecca;03:54:16.6 +1510;Szlavik Vanda;03:52:35.9 +1511;Tan Siew;04:40:39.9 +1513;Tellefsen Tina;03:28:51.4 +1514;Theiler Nadia;04:04:38.6 +1515;Tholen Anna;03:54:26.7 +1516;Thoma Erika;03:53:09.7 +1517;Tiebout Isabelle;03:53:32.2 +1518;Tietz Julia;03:16:22.2 +1520;Toledano Marisol;04:12:36.5 +1521;Toumani Jenna;03:41:53.4 +1526;Tricarico Gabi;03:07:35.1 +1528;Trovato Carmela;03:48:41.6 +1531;Ulrich Katharina;03:47:35.1 +1532;Urbach Deborah;04:27:53.8 +1534;van Rijs Ursula;04:57:03.0 +1535;Vasilache Cristina;03:49:57.6 +1536;Vermeulen Helene;04:37:14.6 +1539;Villiger Sonja;04:04:59.3 +1541;Vocke Daniela;04:27:03.6 +1542;Voegeli Nico;03:55:29.7 +1543;Voigt Cornelia;04:29:36.7 +1544;Volfschütz Simona;03:43:40.1 +1545;von Mandach Annette;03:40:33.3 +1546;von Niederhäusern Cris;04:39:56.5 +1547;Vopat Johanna;04:08:22.7 +1548;Wachter Karin D.;03:38:58.7 +1549;Wackernagel Britta;04:23:01.6 +1550;Walder Darja;03:57:22.1 +1551;Wartenberg Alexandra;04:39:44.3 +1552;Washington Caroline;04:36:48.4 +1554;Weber Tosca;04:33:11.8 +1555;Weiersmüller Jacquelin;04:10:53.8 +1556;Weiler Katja;04:42:27.7 +1558;Welbergen Louisa;03:08:03.9 +1561;Werner Stephanie;03:40:08.7 +1562;Werthmüller Gabriele;03:09:45.3 +1564;Wettstein Edith;04:19:31.1 +1565;Wey Mirjam;04:16:23.0 +1566;Widmer Monika;03:22:33.7 +1567;Wiedmer Christine;04:09:04.6 +1569;Wild Irene;04:40:20.9 +1571;Winklehner Anna;03:50:53.8 +1574;Wittwer Gertrud;04:08:44.0 +1576;Wyler Karin;03:35:51.3 +1577;Wyss Ingrid;04:44:13.8 +1578;Wyss Sonja;04:07:25.2 +1580;Zaugg Sibil;03:51:58.2 +1581;Zeller Seline;03:47:18.3 +1582;Zenger Daniela;04:26:55.5 +1583;Ziegler Isabella;03:41:15.8 +1585;Zingg Karin;03:16:04.1 +1586;Zuber Helen;03:36:41.9 +1587;Zuber Sabrina;04:35:32.4 +1589;Zwicker Selinda;03:26:18.7 +1592;Brazerol Carmen;03:37:38.4 +1593;Bucher Sylvie;03:51:22.5 +1597;Freiburghaus Rahel;03:53:47.1 +1598;Götsch Helen;03:51:34.2 +1599;Güntzel Sara;03:25:25.7 +1600;Gurtner Susanne;03:52:40.0 +1602;Hauser-Ruckli Cornelia;03:39:46.5 +1603;Heimbs Anette;04:36:24.5 +1606;Inauen Fränzi;03:14:21.5 +1609;Jaggi Theres;04:55:33.0 +1610;Janser Susanne;04:13:22.6 +1611;Jörg Regina;03:43:22.1 +1612;Kern Alexandra;04:41:12.4 +1613;Kolhaupt Tanja;04:26:48.7 +1614;Landolt Christina;04:12:17.6 +1616;Lienhard Sonja;03:30:23.9 +1620;Müntener Brigitte;03:55:51.9 +1622;Ochieng Pernet Awilo;04:17:59.9 +1624;Peer Sandy;03:31:59.1 +1625;Polinelli Christina;03:34:40.5 +1626;Queralto Cristina;03:50:26.5 +1627;Ramsay Julie;04:54:41.0 +1628;Röthisberger Céline;04:21:20.7 +1629;Rüegger Andrea;04:31:24.6 +1630;Rütimann Gabriela;03:51:33.9 +1631;Scheitlin Julie;04:11:09.3 +1632;Schiess Gabriela;03:23:41.8 +1633;Schillig-Planzer Stefa;03:04:46.4 +1635;Schlegel Alexandra;03:24:22.5 +1636;Schmid Catherine;03:56:28.3 +1637;Schmid Conny;03:08:27.9 +1638;Schrott Andrea;03:53:30.9 +1639;Schumacher Sandra;03:53:25.1 +1640;Senn Brigitte;04:09:12.6 +1642;Sommer Daniela;03:04:31.1 +1643;Sonderegger Tanja;03:20:13.9 +1644;Stalder Caroline;03:44:15.9 +1645;Steiner Denise;04:48:42.2 +1646;Stoppiello Banu;04:27:05.5 +1647;Stucki Sonja;03:27:03.9 +1648;Tambini Irma;03:50:24.4 +1649;Tangorra Sabrina;04:21:32.4 +1650;Tschannen Nathalie;04:27:15.2 +1655;Wiederkehr Denise;04:41:12.9 +1656;Zähnler Bircher Silvia;04:27:22.4 +1657;Zanetti Windegger Lara;03:26:56.9 +1658;Zehnder Corinne;04:42:04.4 +1660;Antila Heidi;05:04:33.0 +1663;Flockerzi Martina;04:03:55.2 +1664;Kieran Rose;04:05:28.3 +1665;Merz Beatrix;03:40:06.9 +1666;Minard Delphine;04:14:28.2 +1668;Schoch Katharina;04:12:52.0 +1669;Steiger Susanne;04:12:15.1 +1670;von Rotz Madeleine;03:58:13.6 +1672;Fischer Muriel;04:33:00.6 +1674;Köpfli Stephanie;03:49:57.6 +1952;Walser Hans;03:56:38.0 +2001;Abderhalden Claude;03:41:42.6 +2002;Abdo Osman;02:58:00.5 +2003;Abegglen Timon;03:58:34.4 +2004;Abgottspon Benjamin;04:50:43.5 +2007;Achermann Alois;03:58:12.6 +2008;Ackermann Michael;03:18:34.7 +2009;Adler Ruedi;03:31:56.7 +2010;Adler Sandro;04:27:06.5 +2012;Aebersold Thomas;04:14:11.4 +2013;Aebi Hansjörg;04:12:29.4 +2015;Aeby Pascal;03:48:08.2 +2016;Aegerter Michael;04:45:55.9 +2017;Aeschlimann Martin;03:49:39.1 +2018;Affentranger Fernando;03:58:24.0 +2020;Agostini Bernardo;03:51:52.9 +2021;Ait Bahassou Mohamed;03:05:18.4 +2022;Akeret Martin;02:59:54.0 +2023;Akermann Elmar;04:13:06.1 +2025;Albers Vincent;03:14:20.7 +2026;Albin Basil;04:10:33.7 +2027;Albin Norbert;03:56:43.3 +2028;Albin Silvan;04:10:34.6 +2030;Alder Daniel;04:41:19.3 +2031;Alder Ernesto;03:59:27.8 +2032;Alfassi Sami;03:48:59.5 +2033;Allemann Patrick;04:18:55.4 +2036;Alpiger Patrick Michae;03:55:21.8 +2039;Amacker Hugo;03:42:20.5 +2041;Ambühl Dany;04:33:00.9 +2042;Amstalden Guido;03:50:47.7 +2043;Amstutz Jean-Luc;03:19:09.6 +2046;Andenmatten Cyril;03:43:33.6 +2048;Anderegg Kurt;03:54:38.2 +2050;Andres Peter Thomas;03:20:56.6 +2051;Andrews John;03:33:53.3 +2054;Anneler Albert;04:59:47.1 +2055;Antweiler Ralf;03:13:22.8 +2056;Arbenz Beat;03:42:12.2 +2058;Aretano Aldo;04:30:15.4 +2060;Arm Ueli;03:32:38.9 +2063;Arnold Philipp;02:41:46.9 +2064;Artan Ayhan;03:16:46.4 +2067;Aurag Daniel;03:45:18.9 +2070;Azzato Remo;04:20:56.2 +2071;Bäbler Ruedi;04:32:46.8 +2073;Bachmann Markus;03:01:39.2 +2074;Bachmann Markus;03:56:19.8 +2075;Bachmann Rolf;03:49:30.5 +2076;Bächthold Jj;04:20:38.4 +2077;Baco Uwe;03:27:34.1 +2078;Bader Sandro;03:45:03.5 +2080;Badertscher Christian;03:40:18.2 +2081;Badorff Cornel;03:27:32.8 +2082;Baer Tobias;03:16:28.8 +2083;Baeriswyl René;04:07:47.5 +2084;Bahl Alexander;04:26:05.3 +2085;Bahner Bertram;03:20:11.2 +2087;Bako Barnabas;04:34:08.5 +2088;Bamert Rafael;03:32:01.0 +2089;Bangerter Adrian;03:08:16.8 +2090;Bannier Marcel;03:39:04.9 +2091;Bänninger Andy;03:17:49.5 +2096;Bärtsch Jonas;04:26:32.4 +2097;Baschera Matteo;03:39:47.5 +2100;Basler Michael;03:45:33.0 +2105;Bauer Jürgen;04:17:56.1 +2106;Bauer Mathias;03:35:49.3 +2107;Bauert Stephan;03:20:28.6 +2108;Baumann David;03:13:50.4 +2109;Baumann Reto;03:23:53.3 +2110;Baumgartner Benjamin;03:11:34.9 +2111;Baumgartner Christoph;03:02:43.1 +2112;Colombani Jonathan;03:02:45.8 +2113;Baumgartner Philipp;03:14:08.0 +2115;Bäumler Werner;03:59:00.8 +2116;Baumstark Achim;03:24:55.8 +2117;Baur Sigrist Dieter;04:00:33.8 +2118;Bayer Claudio;04:13:54.3 +2119;Bebi Michael;04:30:52.3 +2123;Beeler Karl;02:48:41.2 +2124;Beeli Gian;04:27:39.3 +2125;Beer Patrick;04:22:37.2 +2127;Beglinger Michael;04:27:45.7 +2128;Beglinger Urs;03:18:09.9 +2129;Belk Thomas;04:26:06.6 +2131;Benfatto Alessandro;03:42:59.3 +2133;Benz Andy;02:48:55.1 +2135;Berg Christian;03:27:36.3 +2136;Berger Gedeon;04:12:06.3 +2137;Berger Olivier;03:44:03.2 +2138;Berger Walo;04:08:34.0 +2141;Bernet Heiri;03:03:49.8 +2142;Bernet Rolf;03:51:10.1 +2143;Bernhard Daniel;03:37:57.5 +2144;Bernhardsgrütter Pitsc;03:27:47.0 +2145;Bernotto Stefano;03:55:01.3 +2147;Bertozzi Silvio;04:25:58.6 +2148;Berz Fabian;03:26:17.0 +2149;Betschon Stefan;03:45:15.6 +2150;Bettini Enrico;03:49:03.2 +2152;Biber Alex;03:40:45.8 +2153;Bichler Christoph;03:31:24.9 +2154;Biedermann Daniel;03:03:17.0 +2155;Bieler Walter;03:23:17.7 +2156;Bieri Walter;03:20:22.7 +2158;Neiger Lukas;03:24:45.9 +2159;Bigler Gilles;03:45:09.7 +2161;Billeter Jürg;03:33:56.5 +2163;Binder Walter;03:55:38.1 +2164;Binggeli Hansjörg;04:26:21.7 +2166;Birbaum Patrice;03:35:36.8 +2168;Birrer Hanspeter;04:38:21.7 +2171;Bischofberger Guido;02:54:27.2 +2174;Bissig Hans;03:34:42.2 +2175;Bissoli Benno;03:44:17.8 +2177;Bitterlin Stephan;04:22:11.4 +2179;Blaser Hanspeter;04:18:12.7 +2180;Blaser Sascha;03:14:32.3 +2182;Blattmann Heiner;02:59:53.0 +2184;Bleiker Harry;04:01:36.3 +2185;Blöchlinger Fabian;02:58:56.8 +2186;Blumer Philipp;03:28:15.9 +2187;Blumer Renato;04:36:55.7 +2188;Blumer Sascha;03:43:56.6 +2192;Bodenmann Andreas;02:55:28.6 +2193;Bodenmann Hanspeter;03:40:22.0 +2194;Bodmer David;04:25:48.7 +2196;Bohnet Christophe;03:04:42.0 +2197;Bohnet Nicolas;03:04:07.4 +2198;Boller Simon;03:45:47.8 +2199;Bolli Kilian;03:30:05.9 +2200;Bolliger Bruno;04:28:09.2 +2201;Bollinger Beat;03:39:58.4 +2202;Bolt Thomas;02:55:14.0 +2203;Bommer Hans;04:15:28.9 +2205;Böniger-Prüfer Michael;03:47:21.1 +2206;Bonner John;04:16:28.9 +2207;Bonvin Jean-Charles;03:04:59.5 +2208;Bonvin John;03:59:43.3 +2209;Born Leo;03:29:51.8 +2210;Bortolin Sergio;04:21:40.2 +2212;Bosshard Stefan;03:23:59.4 +2214;Bottecchi Diego;03:32:12.4 +2219;Boulter Robert;02:59:49.3 +2221;Boutellier René;02:41:54.7 +2223;Bozi Imre;03:20:05.5 +2225;Braathen Einar H;04:57:19.7 +2227;Bracher Ueli;03:28:21.2 +2228;Brachetto Pascal;03:45:04.5 +2231;Brändli Jakob;04:08:40.6 +2232;Brändli Urs-Beat;03:09:05.9 +2233;Brandt Maximilian;03:58:13.5 +2234;Brandt Simppa;03:15:55.2 +2238;Brecht Jens;03:37:16.1 +2240;Breimer Mans;03:40:50.6 +2245;Bressa Massimo;03:46:41.6 +2247;Brotz Sandro;03:42:38.4 +2250;Bruderer Daniel;04:27:11.2 +2251;Brühwiler Rolf;02:59:26.3 +2252;Brüllmann David;03:57:33.8 +2253;Brunhart Jakob;03:16:31.0 +2254;Brunner Alfred;03:29:59.2 +2255;Brunner André;03:21:22.6 +2256;Brunner Jan;03:36:53.6 +2257;Brunner Johannes;02:56:57.4 +2259;Brunner Reinhard;04:23:31.4 +2260;Bruno Emanuele;04:12:47.4 +2261;Bruns Wolfgang;03:33:18.8 +2262;Brunschweiler Marco;03:18:51.7 +2266;Bucher Johannes;03:10:20.7 +2267;Büchler Fredi;05:21:01.2 +2269;Buchli Urs;04:52:55.4 +2271;Buchser Thomas;03:41:24.0 +2272;Buck Andreas;04:32:20.4 +2274;Büeler Gerry;03:36:59.5 +2276;Bügükkaya Abuzer;03:14:12.4 +2277;Bühler D.J Wale;03:59:32.5 +2278;Bühler Raphael;03:20:21.5 +2280;Bührer John;03:43:03.4 +2282;Bünter Jean Pierre;04:15:52.4 +2284;Burger Willi;03:51:02.3 +2285;Bürgi Simon;03:09:10.3 +2286;Bürgis Stefan;03:28:37.3 +2287;Burkhard Beat;02:39:47.5 +2288;Burkhard Roger;03:45:58.0 +2289;Burkhardt Ralf;03:46:35.5 +2290;Burns Kevin;03:51:19.0 +2291;Burri Christian;03:24:58.4 +2293;Buser Thomas;04:05:20.1 +2295;Buslau Michael;04:33:12.4 +2296;Bussinger Manuel;04:32:51.2 +2297;Bussmann Oliver;02:58:43.7 +2298;Butty Stéphane;02:59:31.2 +2301;Caflisch Amedeo;03:14:34.3 +2302;Caillet Cédric;03:21:40.0 +2304;Calame Louis;03:35:20.8 +2305;Calcagni Carlo;03:52:42.3 +2306;Calendo Ciro;04:32:47.0 +2307;Camathias Ulrich;05:21:11.8 +2308;Camenisch Glauco;03:25:24.3 +2309;Camenzind Markus;03:00:07.2 +2310;Caprez Andrea;02:54:43.7 +2311;Carbonara Toni;04:16:44.0 +2312;Carbotti Franco;03:35:47.3 +2314;Caretta Claudio;04:12:04.8 +2317;Carminati Walter;03:51:24.1 +2319;Caruso Renato;04:29:06.9 +2320;Casanovas Ramon;03:24:06.5 +2321;Castella Vincent;03:13:41.1 +2322;Castiglioni Luca;03:47:45.2 +2323;Casto Salvatore;05:25:47.6 +2325;Caudwell David;04:36:27.3 +2327;Cavegn Werner;03:45:44.1 +2328;Caviezel Andrin;03:41:56.6 +2329;Ceccarini Massimo;03:26:18.4 +2330;Ceriani Angelo;04:25:25.3 +2331;Cester Marc;03:03:44.4 +2333;Chapman Brian;04:14:02.5 +2335;Chassot Pierre-André;03:43:24.5 +2336;Chatila Rico;03:26:02.0 +2337;Chatzichrisafis Nikos;03:33:49.6 +2338;Chevalley Raymond;04:22:45.3 +2339;Chiller-Glaus Michael;03:53:35.8 +2340;Choffat Yves;03:17:39.2 +2341;Choukroun Daniel;02:45:27.4 +2342;Christ Tobias;03:30:40.3 +2343;Christiner Mario;02:48:10.6 +2347;Clavadetscher Georg;04:23:21.2 +2348;Clesle Hanspeter;04:32:43.1 +2349;Cloetta Andri;03:41:44.0 +2353;Collenberg Reto;03:39:01.9 +2355;Colvin Graham;03:20:35.2 +2356;Conrad Alex;04:29:04.0 +2360;Cooke Sam;03:28:23.2 +2361;Corbisiero Salvatore;03:34:25.0 +2362;Cortelezzi Paolo;03:40:05.0 +2363;Cottet Laurent;03:23:56.8 +2364;Crespo Ricardo;04:49:35.9 +2365;Crettenand Olivier;04:25:31.7 +2366;Crisafulli Sebastiano;03:26:57.1 +2368;Curda Josef;04:37:56.2 +2369;Curda Tobias;03:40:33.1 +2371;Cusack John-Paul;03:38:38.3 +2372;D'Amato Gionni;03:52:25.2 +2373;Da Col Claudio;03:31:27.0 +2374;Da Costa Fernando;03:05:47.2 +2376;Daly Paul;04:21:31.1 +2377;Dambach René;03:22:06.3 +2380;Danz Martin;03:52:38.9 +2381;Däpp Willi;04:17:14.8 +2382;Dariz Michele;03:51:17.9 +2383;Daschmann Volker;04:49:31.1 +2385;De Faria Patrick;04:43:32.0 +2387;De Martin Marco;02:49:12.6 +2388;De Murga John;04:58:21.6 +2389;De Plinval Pierre-Loui;03:41:55.6 +2390;De Toffol Simon;04:14:18.7 +2391;De Wit Guido;03:52:16.4 +2393;Degen Lukas;02:58:50.8 +2395;Della Badia Antonio;03:24:35.6 +2396;Delley Alain;03:20:38.0 +2397;Dentskevich Andrew;03:27:49.7 +2399;Dessimoz Philippe;03:09:13.0 +2400;Desteffani Jörg;03:09:27.4 +2402;Dhom Michael;03:03:48.4 +2403;Di Giorgio Benedetto;04:04:34.1 +2404;Di Mauro Philipp;04:01:57.7 +2406;Diallo Ousmane;03:23:35.8 +2407;Dick Markus;03:21:35.5 +2409;Diener Erwin;02:55:16.4 +2410;Diethelm Karl;03:53:47.7 +2411;Dietrich Rainer;03:00:12.0 +2413;Dillner Tomas;03:03:47.3 +2414;Diviney Craig;03:20:23.3 +2416;Döbeli Philipp;03:05:55.6 +2417;Dober Meinrad;03:38:30.9 +2423;Dooney Barry;04:44:52.8 +2425;Doubman Jay;02:57:42.2 +2429;Downey Denis;03:53:09.6 +2430;Drayton Jeffrey;03:43:02.5 +2432;Dreier Daniel;03:51:25.7 +2433;Dreier Matthias;03:18:07.5 +2435;Dübi Roland;04:05:24.0 +2436;Dubugnon Christian;03:27:29.5 +2437;Dudle Cornel;03:35:12.7 +2438;Duerr Hampi;03:36:35.9 +2440;Dummermuth Jürg;03:09:28.3 +2443;Düringer Michael;03:39:12.5 +2444;Durrer Daniel;04:27:31.7 +2447;Dürst Michael;03:12:56.5 +2448;Duschl Martin;04:25:17.7 +2451;Dütschler Joel;03:06:38.0 +2453;Eberhard Thomas;04:05:07.0 +2455;Eberle Paul;03:44:00.7 +2457;Eckard Christophe;03:47:58.1 +2458;Eckert Clemens;03:24:09.5 +2459;Eckhardt Jürg;03:42:48.4 +2460;Eggenschwiler Bernhard;02:44:49.4 +2461;Eggenschwiler Christop;02:59:47.6 +2462;Eggenschwiler Denis;03:04:59.8 +2466;Egidio Arturo;03:29:56.5 +2467;Egli Martin;03:47:10.6 +2468;Egli Peter;04:21:32.1 +2469;Egli Sven;03:27:58.8 +2471;Eiche Francis;04:06:02.4 +2472;Eichelberger Pascal;04:01:48.3 +2474;Eichhorn Beat;03:16:51.8 +2478;Eisenlohr Frank;03:21:41.6 +2479;Eisner Hannes;03:28:45.2 +2480;Ellinger Thomas;04:11:31.5 +2483;Elmer Markus;03:07:08.3 +2484;Emert Frank;04:29:08.6 +2491;Eppler Beat;03:09:38.4 +2493;Erb Peter;03:10:21.4 +2494;Erb Thomas;03:57:37.7 +2496;Erian Tom;02:57:11.9 +2498;Ernst Andreas;03:38:39.2 +2499;Ernst Andreas;03:47:40.6 +2501;Ettlinger Claudius;03:49:48.9 +2502;Eugster Marcel;02:59:33.6 +2503;Eugster Tobias;03:44:23.8 +2504;Faccoli Gabriele;03:37:58.8 +2505;Faerber Philipp;02:50:59.7 +2507;Fahrni Andreas;03:22:49.6 +2510;Falconer John;03:49:34.7 +2511;Falcy Yves-Alain;04:23:41.0 +2512;Falter Harald;03:19:52.3 +2513;Fanger Adrian;04:11:25.3 +2514;Fankhauser Martin;03:36:21.8 +2515;Farner Kurt;04:41:50.4 +2516;Farner Martin;03:51:54.1 +2517;Farner René;03:29:55.9 +2518;Farner Roger;03:51:55.2 +2519;Fasel Samuel;03:49:40.2 +2520;Fasnacht Markus;03:17:36.8 +2521;Fässler Christoph;03:57:08.5 +2522;Fässler Lukas;04:01:23.3 +2524;Fatio Didier;03:16:59.1 +2525;Fattorini Leonardo;02:54:53.3 +2526;Fausch Jörg;03:42:54.5 +2529;Fehr Adrian;03:32:24.9 +2530;Fehr Harry;03:09:24.7 +2531;Fehr Kurt;04:25:06.1 +2532;Fehr Matthias;03:34:08.9 +2534;Feigl Christopher;03:29:22.5 +2535;Fejes Stefan;03:20:33.5 +2536;Fejry Khalil;03:31:07.1 +2537;Felchlin Walter;04:18:13.9 +2538;Felder Oliver;03:57:32.9 +2539;Felder Willhelm;04:27:39.1 +2542;Fernandes Casimiro;03:04:51.4 +2543;Fernandez Antonio;03:22:54.5 +2545;Ferraiuolo Salvatore;03:40:18.9 +2546;Ferrini Mattia;04:13:05.9 +2547;Fetzer Roland;03:00:23.0 +2550;Fior Guglielmo;02:59:38.8 +2552;Fischer Cosy;04:26:53.8 +2553;Fischer Felix;03:34:08.0 +2555;Fischer Kai;02:43:15.0 +2557;Fischer Oliver;03:10:50.3 +2558;Flach Roland;03:28:52.0 +2559;Fleischer Thomas;03:19:07.9 +2560;Fleischhacker Cris;04:22:00.4 +2561;Fleischmann Rene;03:37:43.1 +2562;Fleischmann Sascha;03:28:45.9 +2565;Flueckiger Joerg;03:55:45.3 +2566;Flum Michael;03:29:34.5 +2567;Föllmi Daniel;02:47:15.8 +2568;Folly Olivier;03:08:24.4 +2569;Fontana Patrick;04:49:09.1 +2570;Forlesi Maurice;04:00:31.6 +2571;Forney Jean-Francois;03:50:11.3 +2572;Forrer Andi;03:57:35.8 +2573;Forrer Markus;03:43:13.6 +2574;Forrer Thomas;03:26:44.2 +2575;Forster Urs;03:56:10.2 +2576;Fort Pierre-Andre;03:43:23.0 +2577;Fortgens Erik;03:12:57.2 +2578;Foster Cheran;04:09:16.7 +2579;Foster Kevin;03:39:59.2 +2580;Fraefel Beat;03:39:42.4 +2581;Fraefel Mario;03:42:55.1 +2582;Franck Andreas;03:19:31.1 +2583;Francois Herve;03:56:16.3 +2587;Frehner Jakob;05:29:09.2 +2588;Frei Christoph;03:34:04.8 +2589;Frei Marc;03:37:59.3 +2590;Frei Martin;02:44:02.8 +2591;Frei Othmar;03:59:15.3 +2592;Frei Pascal;03:34:47.5 +2593;Frei Thomas;03:28:06.0 +2595;Freisler Peter;04:06:40.1 +2597;Fretz Willi;04:35:35.7 +2599;Frey Dominik;04:00:28.3 +2600;Frey Heini;03:56:30.0 +2601;Frey Stefan;03:51:14.3 +2604;Frieden Thomas;02:32:25.2 +2605;Friederich Mathias;03:26:38.5 +2607;Friedli Jürg;03:39:09.0 +2609;Frischknecht Fritz;03:27:40.5 +2611;Fritsche Lukas;03:29:27.6 +2612;Fritschi Michael;03:19:32.7 +2615;Fuchs Christian;02:58:20.9 +2616;Fuchs Heinz;04:23:57.8 +2617;Fuchs Markus;04:28:36.3 +2618;Fuchs Peter;04:31:50.6 +2620;Fürer Karl;03:30:37.6 +2621;Furrer Felix;03:38:12.0 +2622;Fürst René;03:25:04.1 +2623;Fusco Carlo;03:20:24.2 +2625;Gabathuler Tobias;03:35:08.2 +2626;Gabriel Daniel;03:54:27.7 +2627;Gächter Roland;03:22:01.8 +2628;Gadient Hans;03:53:31.1 +2629;Gähwiler Hanspeter;03:03:34.2 +2631;Galliker Philipp;03:28:25.2 +2632;Gambino Dario;04:12:56.5 +2633;Gameiro Antonio;02:56:40.2 +2635;Gantenbein Silvan;04:45:52.8 +2637;Gartmann Urs;03:34:59.7 +2638;Gasser Marc;03:44:28.9 +2640;Gast Fritz;03:36:32.3 +2641;Gattiker Roger;04:12:59.8 +2643;Gaussmann Andreas;02:49:19.1 +2646;Geiger Christian;03:30:05.2 +2647;Geissbühler Andreas;03:12:39.6 +2649;Geissmann Walter;03:27:55.4 +2651;Genné Daniel;03:44:54.1 +2653;Gerber Bernhard;04:11:50.8 +2654;Gerber Roger;02:49:17.7 +2655;Gerber Thomas;03:14:33.7 +2657;Gerlof Wolfram;04:36:04.7 +2658;Germain Jean-Pierre;05:05:54.1 +2659;Germann Pascal;03:24:18.5 +2662;Gerster Richard;03:57:09.8 +2664;Gertsch Marcel;02:52:23.0 +2665;Gertsch Ralph;04:04:17.7 +2666;Gertsch Silvan;04:09:01.0 +2667;Gertschen Mike;04:14:45.5 +2668;Gex-Collet Pierre-Jose;03:01:05.9 +2669;Geyer Marc;04:48:45.7 +2673;Gibel Richard;03:47:26.8 +2674;Gigandet Sylvain;03:01:43.5 +2677;Giordano Lorenz;03:33:03.4 +2678;Girsberger Martin;03:49:07.5 +2679;Gisler Beat;02:57:43.5 +2680;Gisler Jan;03:05:52.6 +2681;Gisler Karl;02:46:40.4 +2684;Glässner Marcel;03:58:25.3 +2685;Gleitz Robert;03:29:13.4 +2686;Gloden Alain;03:42:54.6 +2689;Gnos Renato;03:51:49.2 +2693;Gomez David;04:38:57.5 +2694;Gorgerat Jean-Philippe;03:10:36.4 +2696;Gosteli Hansjörg;02:56:59.9 +2697;Gosteli Oliver José;03:07:01.8 +2698;Goto Fumihiko;03:28:24.1 +2700;Gottwald Martin;03:53:30.7 +2701;Götz Markus;03:59:00.6 +2702;Grab Manfred;03:25:34.2 +2703;Graber Marcel;03:10:08.0 +2706;Graf Daniel;03:48:08.4 +2708;Graf Klaus;03:29:26.8 +2710;Granges Thierry;03:08:17.8 +2711;Grausgruber Johannes;04:21:27.5 +2713;Greil Maeck;03:13:35.2 +2714;Greter Arno;04:19:22.0 +2717;Grisoni Gérald;03:50:38.4 +2718;Gröbli Adrian;02:42:11.6 +2721;Grossmann Frank;03:06:51.7 +2722;Grubenmann Hens;03:42:41.4 +2723;Gruber Bernhard;03:48:54.7 +2724;Grüebler Thomas;04:28:45.2 +2725;Grujcic Dejan;03:59:53.0 +2726;Grundmann Oliver;03:56:49.0 +2727;Grüter André;02:58:56.1 +2728;Grütter Matthias;03:04:15.1 +2729;Gubler Daniel;03:23:50.2 +2730;Gubler Peter;05:00:05.7 +2731;Gückel Christian;03:18:41.5 +2733;Gudehus Kim;03:34:02.0 +2734;Guex Stéphane;03:07:06.1 +2735;Gugelmann René;03:23:28.6 +2736;Guidon Andri;03:58:33.8 +2737;Guignard Philippe;03:48:33.7 +2739;Guillet Marc-Antoine;03:42:50.7 +2740;Günthard Huldrych;03:44:06.1 +2741;Gunti Markus;03:14:02.3 +2744;Gut Daniel;03:24:08.6 +2747;Gutjahr Rolf;02:58:02.6 +2748;Gutzwiller Mark;03:48:16.6 +2753;Gyger Peter;03:05:00.1 +2754;Gygli Walter;03:03:59.7 +2755;Gysin Ernst;05:07:37.7 +2757;Ha Thomas;03:41:22.8 +2759;Haas Ingo;03:05:20.4 +2761;Hablützel Roman;02:55:57.3 +2762;Hadorn Jonas;04:49:10.6 +2764;Haefeli Stephan;03:48:07.5 +2766;Häfliger Peter;03:28:20.5 +2767;Häfliger Rolf;03:44:11.9 +2769;Hähni Marcel;04:10:06.0 +2770;Haider Martin;03:35:02.2 +2773;Halvorsroed Jan;04:30:52.1 +2776;Hänggi Gerold;04:26:09.0 +2777;Häni Stephan;03:13:50.4 +2778;Hannah Jeremy;03:14:27.7 +2779;Hannay Mark;03:46:52.0 +2780;Hansen Kjetil Hoie;03:53:12.0 +2781;Hansmann Daniel;03:26:44.7 +2783;Härri Markus;02:56:18.7 +2789;Haselbach Stefan;03:15:22.1 +2790;Häsler Daniel;03:40:47.6 +2791;Hässig Ralph;03:45:53.1 +2792;Hassler Daniel;03:06:09.3 +2794;Haubensack André;03:54:47.5 +2796;Haukaas Magnus Solli;04:02:41.9 +2797;Hausammann Urs;03:35:21.0 +2798;Hauser Daniel;03:01:58.0 +2799;Hauser Olivier;04:01:12.2 +2800;Hauser Thomas;03:00:12.2 +2801;Hauser Thomas;03:05:45.6 +2802;Häusermann Christian;03:10:43.9 +2804;Haussner Enrico;03:10:05.3 +2806;Heckendorn Felix;04:54:02.0 +2809;Heer Dominik;03:49:37.4 +2810;Hefti Gian-Franco;02:59:32.3 +2812;Hegglin Marco;03:52:19.2 +2813;Hegglin Markus;03:30:57.7 +2814;Hegner Norbert;02:38:11.0 +2815;Heide Uwe;04:15:06.3 +2820;Heiniger Peter;03:46:31.7 +2821;Heiniger Stefan;03:52:21.0 +2822;Heinz Max;03:33:11.5 +2825;Helbling Daniel;03:21:41.8 +2826;Helbling Felix;03:48:07.8 +2827;Held Michel;03:20:14.4 +2832;Henle Lukas;03:49:53.3 +2838;Herger Anton;04:11:29.0 +2840;Herrmann Daniel;03:07:48.1 +2841;Hersche Marcel;04:48:12.9 +2842;Herz Daniel;03:49:14.2 +2843;Hess Dieter;03:24:08.5 +2844;Hess Florian;04:13:36.8 +2846;Hess Michael;03:33:11.0 +2851;Heyer Serge;04:13:31.5 +2853;Hilpertshauser Urs;04:18:49.7 +2855;Hiltbrand Martin;03:19:24.5 +2856;Hirschi Alexandre;03:56:11.0 +2857;Hischier Aldo;03:43:51.1 +2859;Hochuli Reto;03:18:25.6 +2860;Hodel Roger;03:11:15.0 +2862;Hofer Cédric;05:20:20.3 +2863;Hofer Erich;03:44:20.3 +2865;Hofer Urs;03:57:42.1 +2868;Hofmann Edy;03:54:47.9 +2870;Hofmann Raymond;03:00:32.8 +2871;Hofstetter Martin;03:53:26.1 +2872;Hofstetter Roman;03:39:15.6 +2873;Hohl Andreas;03:26:04.0 +2876;Holenweger Mirko;03:28:22.4 +2877;Holenweger Thomas;04:16:36.0 +2878;Hölling Matthias;04:11:46.0 +2880;Holub Marc;04:20:54.6 +2881;Holzhüter Dirk;02:56:32.7 +2882;Hommann Edgar;03:33:34.7 +2886;Hookey Mark;05:08:11.2 +2888;Höppli Marcel;04:18:59.9 +2889;Horat Karl;03:43:51.2 +2892;Hosner Markus;04:22:08.1 +2897;Huber Andreas;03:55:22.3 +2898;Huber Daniel;04:06:24.1 +2899;Huber Erwin;04:14:35.5 +2900;Huber Michael;02:59:15.1 +2901;Huber Michael;04:34:43.1 +2902;Huber Rolf;03:31:34.6 +2904;Huber-Meier Hans;04:09:42.8 +2907;Hug Jean-Pierre;03:34:08.1 +2908;Hugener Thomas;04:39:42.7 +2909;Hugentobler Martin;03:07:55.8 +2912;Hügli Heinz;03:53:16.9 +2913;Humbel Markus;04:10:57.1 +2914;Hungerbühler Andreas;03:51:39.2 +2917;Hürlimann Fabrizio;03:55:19.2 +2918;Hurni Beat;04:33:18.0 +2920;Huser Josef;04:06:01.1 +2921;Huser Roland;03:21:57.2 +2922;Huwiler Denis;03:23:18.4 +2924;Ijland Marcel;04:06:59.7 +2925;Illi Ruedi;03:28:01.8 +2927;Immer Marcel;03:34:15.8 +2929;Inglin Roger;04:28:05.4 +2930;Ingold Marc;03:54:20.3 +2931;Ingold Markus;03:25:36.6 +2932;Ingold-Martinez Lukas;03:43:56.2 +2934;Inzirillo Maurice;03:03:34.5 +2935;Ippel Rene;03:35:14.9 +2937;Iseli Ernst;04:32:16.9 +2938;Isenring Martin;03:39:07.5 +2939;Aeschlimann Ulrich;03:13:16.6 +2940;Ismajli Alban;03:42:49.6 +2941;Iten Ralph;04:28:17.3 +2942;Iten Roman;03:48:06.4 +2944;Jacky Florian;03:57:40.1 +2946;Jacobs Reto;03:21:41.6 +2949;Jäger Fabian;04:16:02.4 +2950;Jäggi Andreas;03:40:32.7 +2951;Jähde Oliver;03:28:19.8 +2954;Janes Paul;03:29:51.7 +2955;Janssen Volker;03:50:45.8 +2962;Jegerlehner Andreas;05:07:38.7 +2963;Jenny Florian;03:58:43.3 +2965;Jimenez José Manuel;03:30:23.0 +2967;Jöchle Werner;04:28:05.2 +2970;Johnson Mike;03:29:50.5 +2971;Joos Markus;02:40:24.0 +2972;Jörgensen Martin;04:05:49.6 +2973;Jöri Sandro;02:45:27.7 +2974;Jornot-Schmitt Michael;04:23:37.8 +2975;Joss Marc;02:57:44.3 +2977;Jost Urs;03:39:56.8 +2984;Jud Toni;02:52:57.6 +2985;Juengling Stephan;03:43:04.6 +2988;Jung Urs;03:21:31.7 +2989;Jutz Josef Sepp;04:48:17.4 +2990;Jutz Otto;03:14:52.0 +2991;Jutz Stephan;04:16:13.2 +2992;Jutzi Urs;04:54:10.1 +2994;Kaderli Oliver;04:03:21.3 +2995;Kägi Benjamin;04:15:08.3 +2996;Kägi Christian;04:35:32.5 +2997;Kägi Rolf;03:54:31.9 +2998;Kaiser Walter;05:10:37.2 +2999;Kälin Christian;03:28:06.3 +3000;Stampfli Marc;04:23:41.2 +3001;Kälin Stefan;03:07:00.7 +3003;Kalt Markus;02:57:56.6 +3004;Kameni Gaétan;03:28:13.3 +3005;Kamer Stefan;03:08:06.5 +3006;Känzig Jürg;03:57:34.5 +3008;Karlen Werner;04:23:48.6 +3010;Käser Hans;03:56:16.3 +3011;Kastrati Albert;05:21:39.8 +3012;Kathriner Reto;03:01:41.9 +3013;Kätsch Hans-Martin;04:24:59.6 +3016;Kaufmann Corrado;04:19:27.1 +3017;Kaufmann Ferdi;03:43:39.3 +3018;Kaufmann Hubert;03:04:03.6 +3019;Kaufmann Michael;02:53:19.2 +3022;Kehl Arthur;03:41:36.8 +3023;Keller Christian;02:53:05.9 +3027;Keller Michael;03:14:50.1 +3030;Kellerhals Martin;02:59:54.3 +3032;Kempter Christoph;03:47:44.2 +3034;Kerenyi Alexander;03:24:44.5 +3035;Kern Andreas;04:27:23.6 +3036;Kern Daniel;03:34:17.1 +3037;Kersten Udo;03:58:34.3 +3038;Kessler Beat;03:22:49.2 +3039;Kessler Marcel;04:36:38.0 +3040;Kessler Nicolas;02:54:36.3 +3041;Kessler Thomas;04:17:33.7 +3042;Key Matthew;03:41:19.8 +3043;Kimati Celso;04:34:19.4 +3045;Kirchmayr Wolfgang;03:36:00.5 +3047;Kirst Christian;03:06:06.1 +3048;Kiser Felix;04:31:01.6 +3049;Kistler Roger;03:26:48.5 +3051;Klaus Oliver;03:04:59.5 +3052;Kläusler Stefan;03:02:23.3 +3055;Klingelfuss Marc;03:52:57.3 +3056;Klingenberg Björn;03:11:35.5 +3057;Klopfenstein Marco;03:41:02.8 +3059;Klotz Matthias;02:53:23.2 +3060;Klotzsch Thomas;02:57:37.5 +3062;Knapp Christian;03:11:29.8 +3064;Knobel Albert;03:13:01.7 +3067;Koch Dominik;02:45:03.4 +3068;Kock Carsten;02:59:08.3 +3069;Kodlinsky Christian;04:37:31.6 +3072;Kohler Marcel;05:10:40.1 +3073;Kohler Pirmin;04:00:18.2 +3077;Koller Gerold;02:59:33.2 +3079;Kölliker Thomas;03:14:11.2 +3080;Kolly Jean-Bernard;03:13:14.0 +3081;Königbauer Stefan;03:43:36.7 +3086;Koskela Ari;03:09:54.7 +3088;Kostic Milan;03:57:18.7 +3089;Koutny Zdenek;03:23:51.1 +3091;Krähemann Thomas;03:40:47.4 +3093;Kral Philipp;04:19:30.0 +3095;Krause Rainer;03:14:44.7 +3097;Krebs Marcel;03:38:13.1 +3098;Krebs Markus;03:33:16.8 +3100;Krebs Sandro;03:47:07.4 +3101;Krebs Thomas;03:41:12.5 +3103;Kreis Pablo;04:03:57.3 +3104;Kreis Simon;03:19:31.0 +3107;Krieger Urs;02:59:44.4 +3108;Kron Marius;03:18:23.7 +3109;Krucher Daniel;03:13:52.3 +3112;Kubli Jürg;03:45:40.2 +3113;Kuczynski Roman;03:25:29.1 +3116;Kuhn Bruno;04:09:49.9 +3119;Kühne Raphael;03:23:39.4 +3121;Kuipers Dennis;02:42:30.1 +3122;Kulendik Martin;04:29:19.8 +3124;Kümin Michael;05:05:16.6 +3127;Kündig Walter;03:24:59.1 +3128;Küng Martin;03:56:01.3 +3129;Küng Ralf;04:11:58.5 +3130;Kunkel Maximilian;03:07:48.5 +3131;Kunz Dieter;04:22:50.6 +3132;Kunz Gerhard;03:09:07.6 +3133;Kunz Markus;04:40:40.0 +3136;Künzle Peter;03:16:12.1 +3137;Kupny Wojciech;05:23:35.3 +3140;Kushwaha Imran;03:12:23.2 +3141;Küttel Lars;03:45:04.6 +3142;Küttel Peter;02:58:08.2 +3143;Küttel Ruedi;03:23:20.7 +3145;Kyburz Reto;03:23:32.8 +3146;Lagotzki Andreas;04:21:42.7 +3148;Lamard David;03:36:50.7 +3149;Lambert Gerard;04:02:37.0 +3150;Lampart Remo;03:26:15.9 +3151;Landi Marco;03:23:33.8 +3152;Landtwing Martin;04:54:11.6 +3154;Langenegger Christian;03:25:43.7 +3157;Langridge James;03:43:34.7 +3158;Lanter Guido;03:39:57.9 +3159;Lanz Peter;04:07:17.9 +3161;Larsson David;03:56:14.8 +3163;Lasser Philippe;03:51:09.8 +3164;Laticevschi Dumitru;03:35:32.4 +3168;Lay Daniel;03:42:40.1 +3169;Le Quang Duc;03:59:50.7 +3170;Ledergerber Ruedi;04:32:10.3 +3171;Ledergerber Stefan;04:32:10.5 +3174;Leek Peter;02:59:20.8 +3179;Lehner Jürg;03:57:37.1 +3182;Leimgruber Jörg;03:15:32.3 +3186;Lennon Mark Antony;04:03:01.3 +3187;Lerose Luigi;03:54:21.4 +3188;Leserf Gottlieb;04:38:43.5 +3189;Letta Marco;03:24:07.6 +3190;Leuenberger Frank;03:36:30.0 +3191;Leuenberger Hans;03:54:21.9 +3192;Leuenberger Michael;03:41:23.2 +3194;Leuthold Bernhard;03:26:03.5 +3197;Liard Gilles;03:21:25.7 +3198;Lichtin Jürg;03:34:19.1 +3199;Lichtsteiner Klemens;03:51:32.0 +3200;Liechti Alexander;04:10:06.8 +3202;Lienhard Cédric;03:06:33.8 +3203;Lienhard Tobias;04:27:54.1 +3209;Lindner Jack Olav;03:26:11.1 +3210;Lindsay Luke;03:42:14.7 +3211;Lippuner Christoph;03:49:09.0 +3212;Liver Richard;03:50:15.1 +3214;Lloyd William;03:35:22.3 +3215;Locantore Paolo;04:27:21.7 +3217;Lockyer Mark;04:01:55.6 +3218;Lockyer Paul;04:30:44.9 +3220;Loher Martin;03:26:47.0 +3221;Lohri Philipp;02:52:34.0 +3222;Loiudice Giulio;04:01:09.9 +3223;Loosli Peter;03:21:24.2 +3225;Lorenz Roman;03:43:56.6 +3226;Lorenz Tino;03:50:20.8 +3230;Louis Jvan;03:39:52.0 +3231;Loye Eric;03:27:17.7 +3234;Luder Beat;02:44:46.7 +3236;Luginbühl Guy;03:36:20.6 +3238;Lüönd Urs;03:42:14.2 +3239;Lupp Bjoern;04:04:57.0 +3241;Lüscher Urs;03:00:51.0 +3242;Lustenberger Silvan;03:46:35.3 +3243;Lusti André;03:41:12.8 +3246;Lutz Hansjörg;03:47:12.2 +3248;Luzzani Roger;02:57:26.5 +3250;Maccioni Sandro;04:04:04.7 +3251;Machowetz Alex;03:49:38.8 +3253;Macquarrie Hugh;04:08:57.1 +3254;Stadler Christian;02:51:48.2 +3255;Magnenat David;03:26:51.3 +3256;Maier Jürgen;03:47:16.1 +3259;Maier Robert;03:57:45.8 +3260;Maier Thomas;05:04:51.4 +3261;Maier-Thurn Marcus;05:25:28.0 +3262;Maillard Joel;04:23:55.4 +3263;Maillefer Joël;02:45:44.7 +3264;Maio Giuseppe;03:55:33.4 +3268;Mani Simon;02:50:34.2 +3269;Mann Felix;03:38:33.8 +3272;Marchand Antoine;02:46:45.4 +3273;Marchand Tony;02:52:58.6 +3278;Mariuzzo Christian;03:27:13.4 +3279;Marrel David;03:21:55.0 +3280;Marro Alain;03:20:56.9 +3283;Marta Massimo;03:24:48.8 +3284;Martel Sylvain;03:34:24.9 +3286;Marti Michael;03:59:00.9 +3287;Martin Javier;04:33:40.7 +3289;Martin Sergio;03:37:34.2 +3291;Martino Giuseppe;03:32:26.7 +3292;Marty Patrick;03:12:04.6 +3293;Marty Philipp;04:27:48.1 +3296;Matos Gilberto;04:06:32.7 +3297;Matter Chrigi;04:41:38.8 +3298;Mattheis Hartmut;05:12:34.9 +3300;Mattle Paul;03:46:07.8 +3301;Mattmüller Martin;03:45:00.0 +3303;Maurer Heinz;03:15:31.1 +3304;Maurer Oliver;03:25:13.3 +3305;Maurer Urs;03:17:04.8 +3306;Maury Laribiere Martia;03:37:06.3 +3308;Mayer Jens;03:53:36.6 +3311;Mccreadie Murray;02:57:57.5 +3313;Mecchia Francesco;03:59:13.7 +3314;Meier Andreas;03:37:11.4 +3315;Meier Daniel;03:51:59.7 +3316;Meier Elias;03:23:41.4 +3317;Meier Franz;03:35:51.3 +3318;Meier Heinz;03:35:11.1 +3319;Meier Kusi;04:36:10.4 +3320;Meier Marcel;03:57:58.0 +3321;Meier Marcel;03:56:53.4 +3322;Meier Michael;03:24:24.0 +3323;Meier Patrick;03:45:18.5 +3325;Meier Peter;04:17:58.2 +3328;Meier Roland;03:57:37.9 +3329;Meier Simon;03:09:02.0 +3330;Meier Stefan;05:18:06.7 +3332;Meierhans Roman;03:49:47.5 +3333;Felix Manuela;04:27:31.7 +3334;Meisser Reto;03:43:24.9 +3335;Meister Roger;04:08:36.6 +3337;Mele Piero;04:17:55.5 +3338;Melzer Tino;03:01:31.3 +3339;Menghini Daniel;03:40:05.3 +3340;Menzi Micha;03:07:26.1 +3342;Merkle Othmar;03:18:39.4 +3343;Merkt Peter;02:46:41.7 +3345;Merup Christian;03:11:09.0 +3347;Mesaros Thomas;03:31:36.5 +3349;Metger Georg;04:11:15.4 +3351;Metzler Hans;03:28:18.4 +3352;Meuris Richard;03:56:30.3 +3353;Meyer Daniel;03:54:19.2 +3356;Meyer Stephan;03:39:00.0 +3358;Michel Dominique;02:53:22.9 +3359;Michel Walter;03:28:38.6 +3360;Michnac Ivan;03:17:43.2 +3361;Milesi Luca;03:29:29.2 +3362;Milic Mladen;03:50:36.8 +3363;Millius Beat;03:05:01.2 +3366;Misic Andrija;03:45:35.2 +3367;Misiek Wiktor;04:39:59.9 +3368;Mistretta Antinoo;03:22:25.9 +3369;Mittelholcz Béla;02:59:34.5 +3374;Moehlecke Thomas;03:38:22.7 +3375;Moggi Christoph;03:07:46.8 +3376;Mohring Stephan;04:14:29.0 +3377;Mollitt Andrew;03:43:01.7 +3379;Monachon Jean-Claude;03:48:13.6 +3380;Monney Roland;03:55:16.2 +3381;Montanari Matteo;03:58:59.3 +3382;Monterosso Germano;04:11:41.3 +3383;Monterosso Vincenzo;03:31:29.0 +3384;Mordasini Niccolo;03:50:29.5 +3385;Moret Eloi;04:20:10.4 +3387;Morley Tim;05:01:53.6 +3388;Moscetti Christian;04:23:30.5 +3389;Moser Felix;03:25:57.2 +3390;Moser Rudolf;03:36:15.4 +3391;Mosetti Nicolas;03:07:06.4 +3392;Mourtada Samir Paul;04:04:00.4 +3393;Mozzi Guido;04:58:45.1 +3395;Muehlethaler Adrian;03:05:54.3 +3397;Muff Christian;03:17:48.1 +3398;Muff René;02:59:55.7 +3399;Muff Roland;03:44:48.1 +3402;Müller Andreas;04:19:43.0 +3403;Müller Bruno;02:59:29.8 +3404;Müller Daniel;02:41:27.6 +3407;Müller Hans-Jörg;03:39:32.5 +3408;Müller Hansruedi;04:54:25.1 +3409;Müller Heinrich;04:50:24.5 +3412;Müller Lukas;02:58:48.0 +3414;Müller Michael;03:27:18.4 +3415;Müller Michael;04:47:25.2 +3416;Müller Patrick;03:20:42.2 +3417;Müller Rolf;03:24:52.5 +3418;Müller Ronnie;03:37:55.2 +3420;Müller Thomas;03:18:13.2 +3422;Mumenthaler Stephan;03:18:08.8 +3423;Munz Thomas;04:44:53.8 +3424;Murer Werner;04:12:53.0 +3425;Muriqi Agron;03:51:22.8 +3426;Murray Mark;03:12:56.2 +3428;Nachbaur Gerd;03:42:44.4 +3431;Nater Remo;03:15:12.2 +3432;Naylor Charles;03:55:34.7 +3433;Nazabal Alexis;03:27:10.9 +3436;Neff Armin;03:23:51.9 +3438;Neff Yanick;03:35:05.6 +3443;Neuländner Martin;03:45:52.5 +3445;Neumüller Peter;02:59:15.1 +3447;Nicolet Samuel;02:57:24.5 +3448;Niederberger Guido;05:01:39.4 +3449;Niederberger Philippe;03:11:47.0 +3450;Niederer Christian;03:44:10.4 +3451;Niedermair Uli;03:13:04.2 +3452;Niethammer Thomas;03:22:03.9 +3454;Niklaus Michael;03:26:55.0 +3457;Nobis Markus;03:30:49.1 +3460;Noli Lorenz;03:57:45.7 +3462;Notter René;04:10:33.5 +3463;Notter Stefan;03:13:32.4 +3464;Notz Ruedi;04:12:35.0 +3465;Nussbaum Walter;02:51:47.6 +3467;Nutt Reto;03:31:59.7 +3469;Nyikos Thomas;02:58:29.4 +3471;Oberkalmsteiner Karl;03:25:11.7 +3472;Oberle Adrian;03:32:21.9 +3474;Obermeit Volker;03:48:01.2 +3475;Obrecht Walter;03:41:35.5 +3476;Ochsner Daniel;03:50:44.7 +3477;Ochsner Harry;03:57:42.9 +3478;Odermatt Fredi;03:14:26.0 +3479;Odermatt Michael;02:56:50.0 +3480;Odermatt Urs;03:18:56.2 +3481;Oehninger Ernst;04:44:48.1 +3482;Oester Patrick;04:29:57.7 +3485;Omollo Omondi;03:39:25.4 +3486;Oppitz Lothar;03:30:46.4 +3487;Oppitz Ulrich;03:33:17.7 +3488;Oppliger Christophe;02:58:07.5 +3489;Oreilly David;03:22:25.4 +3490;Ortega Ilias;04:50:08.7 +3491;Ortkemper Frank;04:00:41.3 +3492;Ott Manuel;04:19:27.5 +3493;Otter Ueli;04:05:48.4 +3494;Overbeck Gernot;04:04:16.5 +3497;Overeem Joost;04:00:38.8 +3498;Paccaud Christophe;03:23:05.7 +3499;Pacozzi Romeo;03:54:08.0 +3501;Page Basile;03:24:58.5 +3503;Pagy Eilam;04:17:56.6 +3504;Palmiere Cristian;03:36:36.7 +3505;Panatti Erik;02:55:22.0 +3510;Passera Giacomo;03:58:51.6 +3512;Pauchard Patrick;03:42:45.6 +3517;Pedrini Claudio;04:34:43.7 +3518;Peinsold Martin;03:23:16.6 +3519;Pellegrini Flavio;03:19:52.9 +3520;Pellet Laurent;03:30:38.5 +3521;Peng Pierre;05:29:00.9 +3522;Pepe Pasquale;03:55:45.2 +3527;Perisset Laurent;03:27:54.1 +3531;Perseghini Mauro;03:06:10.0 +3532;Pescheta Donato;02:47:34.7 +3533;Peter Guido;04:13:58.5 +3534;Peterhans Urs;04:45:28.4 +3535;Petrig Markus;03:42:58.9 +3536;Peyer Thomas;03:43:03.0 +3537;Pfäffli Roger;04:23:41.2 +3538;Pfändler Jonas;03:23:40.4 +3540;Pfenninger Roland;04:25:03.0 +3541;Pfister Felix;03:49:12.2 +3542;Pfister Heinz;04:49:13.4 +3543;Pfister Jeremias;03:57:51.8 +3544;Pfister Samuel;04:19:00.1 +3547;Pfyffer Roland;03:18:30.6 +3548;Pfyffer Urs;03:20:18.4 +3551;Pianaro Claudio;03:17:17.1 +3557;Piguet Florian;02:44:03.2 +3558;Pillard Luc;05:12:05.1 +3560;Piras Davide;03:58:44.8 +3561;Pirrello Antonino;03:54:18.8 +3562;Pirscher Andreas;03:20:13.0 +3563;Pittet Laurent;02:48:33.8 +3564;Place Raymond;03:57:29.2 +3567;Ploetz Armin;03:36:55.6 +3568;Plum Carsten;03:28:52.6 +3569;Plüss Fabian;03:42:49.1 +3571;Porfido Franco;03:25:53.3 +3573;Portmann Hansjörg;03:18:53.2 +3574;Portmann Marco;03:53:52.0 +3575;Németh Aniko;03:38:23.1 +3576;Portmann Thomas;03:04:13.2 +3578;Praz Max;03:46:00.7 +3581;Procacci Fabio;05:27:44.8 +3582;Protze Sören;03:32:31.6 +3583;Pulizzi Antonino;04:30:16.3 +3586;Putallaz Jean-Yves;03:46:42.2 +3587;Quauka Daniel;03:24:49.4 +3588;Quirici Giulio;03:13:54.4 +3589;Raca Mirko;03:56:05.5 +3590;Raccuglia Armando;03:50:52.4 +3593;Ramer Stefan;03:47:44.9 +3595;Randegger Erwin;04:35:57.6 +3596;Ranta Tommy;03:13:32.0 +3597;Raschle Adrian;03:53:25.5 +3598;Rasquinet Patrick;05:33:14.5 +3601;Raymann Patrick;03:32:12.0 +3603;Rechsteiner Helmut;03:28:02.9 +3604;Rechsteiner Kuno;02:54:25.3 +3606;Rehm Martin;03:36:33.3 +3607;Rehmet Joachim;03:58:16.8 +3608;Reichmuth Thomas;03:43:29.9 +3611;Reinhard-Miltz Gerhard;03:39:41.8 +3612;Reinhardt Stephan;04:24:27.6 +3614;Reitbauer Stefan;03:26:39.9 +3617;Rentsch Peter;04:22:15.2 +3620;Reutemann Patrick;04:39:43.6 +3622;Rentsch Max;03:21:56.5 +3623;Rezzonico Andrea;03:27:57.2 +3625;Richter Carsten;03:15:23.8 +3627;Richter Manfred;04:25:00.3 +3628;Richterich Lukas;03:21:29.5 +3631;Riedi Mattias;04:03:12.7 +3635;Riekert Patrick;04:10:28.1 +3637;Rigoni Bruno;03:45:09.7 +3638;Rinderknecht Christoph;03:39:20.5 +3639;Rindlisbacher Martin;02:45:30.3 +3640;Rippstein Guido;03:45:54.2 +3641;Risby Lee Alexander;04:13:36.7 +3642;Risi Christoph;04:03:02.2 +3643;Ritler Roger;03:25:15.4 +3644;Ritschard Mario;03:59:14.8 +3645;Ritter Daniel;03:21:43.3 +3646;Ritz Daniel;03:19:33.6 +3647;Rizzello Roberto;04:23:05.6 +3651;Rodelli Leo;03:59:53.5 +3652;Roduit Pascal;03:38:15.8 +3653;Roduner Christoph;04:00:27.0 +3654;Roffler Markus;03:32:14.8 +3655;Rohner Marius;04:09:52.2 +3656;Rohr Stephan;02:46:41.1 +3657;Rohrer Hansruedi;03:07:34.0 +3659;Röllin Martin;04:13:18.0 +3660;Roman Emilio;03:18:19.8 +3664;Rosen Oliver;03:43:32.7 +3665;Rosic Renato;04:39:25.6 +3667;Rosset Gilles;03:43:26.7 +3668;Rossi Lorenzo;03:23:54.0 +3669;Roth Heiner;04:15:00.2 +3670;Roth Nick;03:36:42.9 +3671;Röthlisberger Andres;04:37:29.6 +3672;Röthlisberger Sergio;04:25:03.5 +3673;Röthlisberger Urs;04:16:25.6 +3676;Roulet Vincent;03:54:01.8 +3680;Rückstein Bruno;04:34:57.3 +3681;Rudaz Gérald;04:23:41.7 +3682;Rudolf Hanspeter;03:27:18.9 +3683;Rüede Christian;03:53:44.9 +3684;Rüede Nico;03:59:46.6 +3685;Rueegg Patrick Stefan;03:44:51.7 +3686;Rüegg Armin;04:53:59.0 +3687;Rüegg Walter;03:27:05.9 +3688;Rüesch Peter;03:42:38.2 +3689;Ruf Andreas;04:11:30.1 +3693;Rupper Patrick;03:56:31.2 +3694;Rusch Stefan;03:39:31.0 +3706;Safi Kamran;03:52:32.5 +3708;Sägesser Simon;03:10:45.4 +3710;Salamin Michel;03:14:35.9 +3713;Salmi Janne;02:40:56.0 +3715;Salzmann Urs;02:58:48.1 +3716;Sanchez Walter;05:02:44.7 +3718;Sano Shogo;04:07:36.9 +3721;Sara Benedé Enrique;03:49:28.4 +3723;Sauder Patrick;02:46:46.9 +3724;Saurer Werner;03:51:01.8 +3725;Sauter Markus;03:05:55.1 +3726;Savill Ian;04:04:16.3 +3727;Savola Juha;02:59:23.7 +3729;Schaad Marco;02:59:09.3 +3730;Schaad Thomas;03:31:23.0 +3731;Schaerer Bruno;04:37:21.1 +3732;Schaermeli Claudio;03:32:27.7 +3733;Schäfer Andreas;04:44:07.9 +3734;Schäfer Roger;03:54:43.3 +3735;Schäffer Beat;03:30:50.2 +3739;Schär Markus;03:25:26.7 +3740;Schärer Kurt;03:38:13.8 +3741;Schärli Christoph;04:27:06.9 +3742;Schaub Rolf;03:40:58.9 +3743;Schegg Stefan;03:53:05.2 +3745;Scheidegger René;03:34:04.4 +3746;Schelbert Armin;03:17:03.3 +3749;Schenk Felix;02:40:59.9 +3750;Schenkel Patrick;03:54:05.6 +3753;Scherer Kurt;02:48:44.0 +3757;Scherzinger Fredy;03:47:12.0 +3758;Schibig Viktor;04:14:23.6 +3763;Schilling Martin;03:26:17.5 +3765;Schläfli Matthias;03:27:33.2 +3766;Schläpfer Marco;03:41:13.5 +3767;Schlatter Adrian;02:47:58.4 +3768;Schlatter David;03:56:07.0 +3771;Schlicht Michael;03:56:54.8 +3772;Schlub Jarbas;03:32:39.0 +3773;Schlüchter Roland;04:08:56.7 +3777;Schmid Philipp;04:35:30.8 +3779;Schmid Tobias;04:24:42.1 +3780;Schmid Tom;03:50:12.9 +3781;Schmid-Erni Reto;03:54:33.1 +3785;Schmidt Roberto;03:28:11.7 +3787;Schmidt Urs;04:11:40.1 +3788;Schmidt Urs-Peter;03:24:14.3 +3789;Schmied Bruno;04:15:44.7 +3792;Schmutz Dominik;03:10:12.2 +3793;Schneckenburger Julian;03:20:55.8 +3794;Schneider Hans-Peter;03:43:26.5 +3795;Schneider Jochen;03:59:45.6 +3797;Schneider Martin;03:49:35.3 +3798;Schneider Martin;03:14:47.1 +3800;Schneider Reto;03:31:42.6 +3803;Schnüriger Erwin;03:21:49.3 +3805;Schnyder Roger;02:39:40.0 +3807;Schoch Christoph;03:45:11.6 +3808;Scholian Heinz;03:18:56.5 +3809;Scholl Hans;03:09:32.4 +3813;Schönenberger Bruno;03:44:13.9 +3814;Schönenberger Felix;04:12:40.9 +3815;Schönenberger Samuel;03:48:07.0 +3816;Schönenberger Tim;03:22:48.0 +3817;Schönenberger Urs;02:59:20.6 +3818;Schönherr Andreas;03:27:28.9 +3819;Schöni Beat;03:37:03.4 +3820;Schöni Martin;03:14:32.6 +3821;Schoppe Mathias;03:20:08.7 +3822;Schorno Enrico;03:27:34.8 +3824;Schranz Fred;03:13:16.8 +3826;Schreiber Mark;03:30:52.4 +3827;Schreiber Simon;03:24:29.2 +3829;Schröder Jan;03:45:37.6 +3832;Schüepp Daniel;03:58:33.0 +3834;Schuler Paul;03:16:16.7 +3835;Schuler Werner;04:56:45.6 +3836;Schulte Christian;03:47:49.3 +3839;Schultheiss Tobias;03:45:27.9 +3840;Schulze Elko;03:49:49.4 +3843;Schüpbach Fabian;04:19:23.7 +3844;Schütz Patrick;02:54:51.3 +3845;Schütz Reinhart;03:06:23.8 +3849;Schweitzer Pascal;04:03:43.6 +3850;Schweizer Marcel;04:37:07.7 +3851;Schwery Rolf;04:49:04.8 +3854;Scotece Gerardo;03:11:52.4 +3856;Seeger Andreas;04:15:25.0 +3859;Seiler Rico;03:19:04.9 +3860;Seipel Oliver;04:28:28.1 +3863;Seki Tomoo;04:30:38.1 +3864;Semadeni Gian Andrea;03:48:33.3 +3865;Senn Lucien;03:58:23.8 +3867;Senteler Roger;03:26:22.0 +3868;Serrano Camilo;04:25:15.4 +3870;Sgier Giusep;03:17:08.5 +3871;Sibilia Enrico;03:56:19.7 +3874;Sieber Oliver;03:44:20.5 +3875;Siegenthaler Fredy;03:38:44.8 +3877;Siegrist Thomas;03:16:43.6 +3881;Signer Martin;03:06:23.2 +3882;Signer Ueli;03:42:23.1 +3883;Sigrist Daniel;03:40:57.5 +3884;Sigrist Felix;03:07:04.2 +3886;Silberschmidt Rico;03:26:22.9 +3887;Simon Robert;04:53:49.2 +3889;Siragusa Pietro Giovan;04:03:53.2 +3890;Sitruk Yves;04:32:17.3 +3895;Smith Craig;03:27:00.7 +3898;Somerville Trevor;04:03:32.3 +3901;Soto Josetxo;03:20:56.8 +3904;Spaargaren Marco;03:06:49.2 +3905;Spaggiari Giuseppe;03:54:22.4 +3906;Späh Martin;04:06:19.7 +3907;Specht Dominique;04:03:52.9 +3908;Al-Godari Hamid;03:41:40.7 +3909;Spielhofer Hans;03:59:34.2 +3910;Spielhofer Reto;03:54:43.7 +3911;Spiess Thomas;03:10:09.5 +3912;Spilker Max;04:03:58.3 +3913;Spitteler Peter;03:18:07.2 +3914;Spitznagel Kurt;04:10:00.5 +3915;Spörndli Daniel;03:19:23.3 +3916;Sprenger Raphael;02:58:37.5 +3917;Spring Daniel;02:44:39.4 +3920;Stadelmann Marc;04:22:33.9 +3921;Maeder Walter;03:24:38.6 +3922;Stadler Marcel;03:16:27.9 +3923;Stadler Reto;03:44:02.1 +3924;Staeheli Oliver;03:57:53.2 +3925;Staffelbach Thomas;03:08:56.5 +3926;Stähli Sandro;03:45:28.5 +3927;Stamm Dominik;03:52:10.3 +3928;Stamm Franz;03:21:11.0 +3929;Stamm Urs;04:25:34.8 +3931;Stämpfli Bernhard;02:54:25.7 +3932;Kälin Kurt;03:43:37.0 +3933;Stangl Dominik;03:00:46.5 +3934;Stangl Stefan;03:04:52.5 +3935;Stäuble Roland;03:04:43.0 +3936;Staudenmann Beat;03:15:38.4 +3938;Stauffacher Ruedi;03:11:28.7 +3939;Stauffer Alexandre;04:06:21.6 +3940;Stauffer Mario;05:15:15.7 +3941;Stauffer Markus;03:42:13.0 +3942;Stebler Markus;03:02:06.8 +3943;Steffen Peter;03:10:42.4 +3946;Steigmeier Linus;04:08:41.2 +3947;Stein Martin;03:22:45.4 +3948;Steiner Armin;02:50:52.4 +3949;Steiner Daniel;03:43:36.2 +3950;Steiner Markus;03:05:14.2 +3951;Steiner Patrick;03:24:12.0 +3952;Steiner Peter;04:09:50.0 +3953;Steiner Rolf;03:09:05.2 +3954;Steiner Thomas;04:10:46.1 +3956;Steinhof Co Rosen Arne;03:47:55.7 +3958;Stern Pascal Nicolas;03:19:11.3 +3959;Stettler Roman;03:40:48.8 +3961;Stifel Peter;04:15:30.1 +3962;Stillman David;02:38:27.6 +3964;Stirnemann Paul;03:40:07.0 +3966;Stirnimann Daniel;02:41:11.4 +3968;Stocker Ueli;03:49:26.0 +3969;Stockmann Hubertus;03:25:34.4 +3973;Stoll Oliver;04:02:48.0 +3975;Storchenegger Daniel;03:42:10.7 +3977;Strähl Stefan;02:51:29.0 +3981;Strebel Philipp;02:59:26.1 +3982;Strehler Erich;03:13:55.1 +3983;Streich Daniel;04:41:40.2 +3984;Streiff Christoph;03:43:42.3 +3985;Streule Ralf;04:01:55.6 +3987;Strickler Werner;04:03:01.8 +3988;Strimer Simon;03:34:57.6 +3990;Stucker Jürg;03:46:43.0 +3992;Studer Adrian;03:15:06.9 +3993;Studer Jürg;03:44:32.3 +3994;Studer Peter;03:36:35.5 +3995;Stupp Oliver;03:26:35.1 +3996;Sturzenegger Hans-Rudo;03:28:40.3 +3997;Sturzenegger Michael;03:33:10.9 +3999;Sturzenegger Thomas;03:32:38.9 +4001;Stütz Andy;03:11:15.4 +4002;Stutz Bruno;04:20:28.5 +4003;Stutz Michael;03:26:25.5 +4004;Stutz Toni;03:46:37.2 +4005;Sulser Silvio;03:09:20.4 +4006;Sumi Arthur;04:36:55.9 +4008;Süssli Eric;03:16:24.9 +4010;Suter Jürg;03:50:56.7 +4013;Sutter Jürg;04:32:57.9 +4014;Swars Erik;03:53:42.4 +4015;Szegvary Thomas;02:51:21.5 +4016;Szentgyörgyi Istvan;04:12:33.5 +4018;Tabakovic Velid;03:48:12.8 +4019;Tacca Gianni;03:48:33.6 +4021;Tanner Marcel;03:02:51.3 +4023;Tauber Albert;03:52:15.9 +4025;Tellefsen Anders;03:49:52.4 +4026;Teshima Ryo;05:12:50.9 +4030;Thalmann Rolf;03:25:29.9 +4031;Theis Manuel;03:26:20.6 +4033;Theules Olivier;03:43:07.9 +4034;Thiel Dieter;04:13:20.5 +4036;Thoma Remo;03:23:37.5 +4037;Thoma Turi;03:17:57.7 +4044;Thür Raphaél;03:39:33.5 +4045;Thurre Jean-Daniel;04:37:23.7 +4046;Tighnavard Babak;04:11:49.9 +4047;Tobler Urs;04:26:49.9 +4054;Tourolle Bruno;05:09:51.3 +4056;Traber Fabio;04:23:21.4 +4058;Trajkovic Ivo;03:18:32.4 +4063;Tremp Christof;03:32:14.2 +4064;Tresch Reto;03:27:44.2 +4065;Triantafillou Christos;04:52:37.0 +4067;Tripolt Fabio;04:50:44.1 +4069;Troller Rolf;03:16:04.1 +4070;Trolp Frank;03:47:42.8 +4071;Troxler Andreas;03:05:43.5 +4073;Trümpler Michael;03:59:59.4 +4074;Truninger Joey;04:21:42.2 +4076;Trüssel Stefan;03:32:50.1 +4077;Tschamon Martin;04:26:02.9 +4078;Tschanz Lukas;03:50:40.1 +4079;Tschopp Silvan;03:11:38.3 +4081;Tschumper Markus;03:23:05.0 +4082;Turberg Yves;03:11:45.6 +4084;Uebbing Jürgen;03:25:51.0 +4085;Ueltschi Thomas;03:03:16.8 +4087;Ulber Wolfgang;02:56:59.8 +4088;Ullmann Rolf;04:23:43.6 +4091;Ulrich Daniel;02:47:17.1 +4093;Umbricht Niklaus;03:28:21.8 +4094;Vacheron Thierry;03:56:01.6 +4095;Vagt Toni;03:05:22.5 +4097;van Zyl Charl;03:17:57.7 +4100;Veronesi Silvio;04:04:59.4 +4101;Vetsch Matthias;03:20:04.1 +4103;Vieux Florian;02:44:19.9 +4104;Vilchez Martin;03:32:58.5 +4109;Voegeli Matthias;03:46:10.7 +4110;Vögeli Pierre;04:20:39.9 +4111;Voegeli Ueli;03:36:28.4 +4114;Vogel Hanspeter;04:59:03.8 +4115;Vogel Markus;03:42:53.5 +4116;Vogel Roland;03:59:22.0 +4117;Vögeli Bernhard;04:15:08.8 +4122;Völlmin Manuel;03:19:55.7 +4125;von Dahlen Steffen;03:47:50.9 +4126;von Holzen Christoph;03:01:28.8 +4127;von Kaenel Dominik;04:54:14.0 +4128;von Mandach Conrad;03:15:07.5 +4129;Vonarburg Christian;03:43:28.5 +4130;Vonbach Lukas;03:27:53.3 +4132;Vonplon Raymond;03:46:02.7 +4133;Votteler Michael;04:08:24.6 +4134;Vournelis Ellin;03:19:49.1 +4135;Vuillemez Samuel;03:08:05.7 +4136;Vuilleumier Cédric;04:14:26.1 +4138;Waeber Pascal;03:03:57.3 +4142;Wahl Kurt;03:53:47.6 +4143;Waldburger Hans;03:57:57.1 +4144;Walder Vitus;03:13:37.1 +4145;Waldis Stefan;02:55:28.2 +4146;Waldner Peter;03:19:31.4 +4148;Allemann Urs;03:34:53.7 +4152;Wälti Jean Pierre;03:28:59.4 +4153;Wälti Thomas;03:30:38.1 +4154;Wangler Timothy;03:43:31.5 +4155;Wanner Florian;03:27:05.3 +4156;Wanner Laurent;03:44:52.1 +4161;Weber Heinrich;04:07:24.7 +4162;Weber Jakob;03:15:35.5 +4164;Weber Peter;03:13:56.6 +4166;Weber Stefan;03:28:52.6 +4167;Wegmann Marco;02:53:05.3 +4168;Wegmann-Wittlin Andrea;03:08:13.7 +4169;Wegscheider Beat;03:13:23.5 +4170;Wehrli Fabian;03:53:27.5 +4171;Weibel Patrick;03:45:57.3 +4172;Weibel Xaver;03:20:43.3 +4173;Weiersmüller J-C;05:01:02.3 +4175;Weilenmann Pascal;04:21:39.3 +4176;Weiler Andreas;02:49:59.5 +4177;Weiler Christoph;03:53:47.9 +4181;Weiser Thomas;04:26:18.4 +4182;Weisheimer Thomas;03:21:52.9 +4183;Weisser Klaus;03:47:57.0 +4184;Welbergen Anthony;03:18:37.6 +4185;Welten Ernst;04:24:38.0 +4192;Wenger Urban;03:33:01.9 +4195;Werder Daniel;03:44:31.4 +4199;Wernli Oliver;03:27:50.9 +4200;Wernli Raphael;03:39:33.1 +4201;Wespi Marcel;03:13:52.0 +4204;Westphalen Stephan;05:24:41.6 +4205;Wettstein Erich;03:48:10.3 +4206;Wettstein Markus;03:27:17.7 +4212;Wicki Roger;03:14:34.4 +4214;Widmer Erhard;03:49:04.0 +4219;Wildhaber Walter;03:49:04.8 +4220;Wilkening Jan;03:08:18.8 +4222;Willisegger Christoph;03:25:32.0 +4223;Wilson Antony;03:48:14.0 +4224;Windmüller Stefan;03:56:11.3 +4225;Winistörfer Georges;04:20:29.0 +4226;Winkler Michael;02:44:19.7 +4230;Wirz Daniel;03:27:50.7 +4231;Wittlin Marc;03:42:46.4 +4232;Wittwer David;05:10:20.7 +4233;Wohlers Florian;03:42:07.4 +4234;Wolf Etienne;02:32:49.2 +4236;Wollnow Jörg;04:10:28.4 +4240;Wörner Mike;03:23:40.6 +4241;Wullimann Markus;02:51:35.0 +4243;Würzebesser Christian;04:26:22.1 +4246;Wüthrich Jürg;03:47:43.4 +4248;Wyler Karl;03:47:18.4 +4249;Wymann Fredi;04:30:06.6 +4250;Wymann Markus;04:43:36.1 +4251;Wyniger Lukas;03:21:22.8 +4253;Wyss Eric;02:54:59.2 +4254;Wyss Roman;02:55:54.9 +4255;Wyss Stefan;03:26:00.0 +4257;Yamashita Masato;03:43:53.9 +4258;Zabe-Kühn Martin;03:41:01.1 +4262;Zampiccoli Manuel;04:05:48.2 +4263;Zanella Bruno;04:49:35.7 +4264;Zangl Christian;03:41:31.8 +4265;Zaouia Mehdi;04:14:01.3 +4266;Zbinden Manfred;03:40:48.7 +4267;Zbinden René;03:25:40.5 +4268;Zbinden Thomas;02:54:31.5 +4269;Zeder Markus;03:11:35.9 +4270;Zeder Patrick;03:06:35.5 +4272;Zehnder Marcel;03:10:08.5 +4274;Zekhnini Ahmed;04:49:37.5 +4275;Zemp Marco;03:23:55.1 +4276;Zemp Markus;03:07:50.2 +4277;Zengaffinen Erwin;03:54:57.9 +4278;Zgraggen Franz;03:20:19.9 +4279;Ziegler Marc;04:19:45.6 +4280;Ziegler Robert;03:44:31.8 +4284;Zimmerli Thomas;03:32:23.9 +4285;Zimmermann Patrick;03:29:36.6 +4286;Zimmermann Robert;03:38:54.1 +4288;Zingg Christoph;03:02:52.0 +4290;Zink Fritz;04:07:32.2 +4293;Zoder Roland;02:53:55.6 +4294;Zoller Stefan;03:23:42.0 +4295;Zollinger Marcel;03:17:44.3 +4297;Zuber Benno;03:40:35.5 +4298;Zuber Ralf;04:35:44.6 +4299;Zubler Martin;03:22:58.5 +4300;Zulauf Stefan;04:04:22.2 +4301;Zumer Robert;03:36:37.2 +4302;Zumsteg Rene;03:45:16.9 +4303;Zurbuchen Christian;03:51:40.2 +4305;Zurflüh-Begré Daniel;03:13:49.8 +4306;Zutter Jerome;04:04:45.2 +4307;Zwahlen Beat;03:57:51.2 +4308;Zwick Jürg;03:17:10.8 +4310;Zwygart Stephan;04:01:59.8 +4311;Alvarez Fernando;03:51:14.8 +4313;Ambrosini Stefan;04:55:45.4 +4315;Ayeah Ebenezer;03:17:16.7 +4316;Bachsteffel Niklaus;03:30:01.2 +4317;Bagnoud Gérard;02:39:30.3 +4318;Bartel Marco;03:44:18.2 +4319;Barz Andreas;04:09:47.4 +4320;Baumann Rainer;03:15:53.4 +4321;Baumann Walter;02:57:59.7 +4323;Baumgartner Andreas;03:51:00.5 +4324;Beck Jan;03:03:19.3 +4327;Beer Sebastian;03:17:11.4 +4328;Beerli Urs-Peter;03:20:06.6 +4329;Beermann Stefan;03:09:44.7 +4330;Bekcic Vladimir;03:37:21.9 +4331;Benkert Fritz;03:38:32.5 +4334;Birkenmaier Claude;03:38:56.5 +4335;Blum Edgar;03:52:36.6 +4336;Bogner Walter;03:03:47.5 +4337;Bonfanti Stefan;03:17:04.7 +4341;Bronner Reto;03:52:08.1 +4342;Brönnimann Ruedi;03:24:43.9 +4343;Bucher Martin;03:07:06.7 +4344;Buehler Andreas;03:34:03.6 +4345;Buerki Fritz;04:35:05.4 +4346;Bühlmann Daniel;04:12:59.2 +4347;Burgener Hubert;03:35:04.4 +4348;Bürgi Thomas;03:06:51.1 +4350;Businger Urs;03:20:45.9 +4351;Camenzind Peter;02:54:41.7 +4354;Carisch Emanuel;03:55:06.5 +4355;Carrasco Ernesto;04:38:15.0 +4356;Casanova Lukas;03:37:50.9 +4357;Castella Jean-Marc;05:11:31.3 +4358;Caviezel Marzel;03:39:40.9 +4361;Coradi Thomas;03:57:57.3 +4362;Coray Roger;03:59:48.4 +4363;Crosara Michel;03:09:28.6 +4367;Derron Simon;04:07:34.9 +4369;Dobler Christoph;03:32:07.5 +4370;Dos Santos Nelson;04:33:45.9 +4373;Duschen Patrick;03:07:44.2 +4374;Dütschler Reto;03:57:58.0 +4375;Eckert Marc;04:24:13.0 +4376;Egger Daniel;03:12:08.4 +4377;Ehrbar Martin;03:13:13.1 +4378;Eigenmann Raffael;03:26:14.5 +4379;Enemrke Simon;03:34:52.6 +4381;Fallegger Hans-Jörg;03:26:03.3 +4383;Fessler Andreas;05:33:39.1 +4384;Forster Martin;03:57:47.7 +4385;Frei Nicola;03:18:16.7 +4386;Fritz Romeo;04:21:34.3 +4388;Geissmann Willy;04:04:51.8 +4390;Gisi Daniel;02:58:06.3 +4391;Gomez Carlos;03:09:16.6 +4392;Gossauer Andreas;04:23:59.5 +4393;Graham Colin;03:25:39.3 +4394;Grau Patrick;04:38:55.4 +4395;Grüninger Thomas;03:56:50.4 +4397;Gujer Hanspeter;04:21:31.6 +4398;Gyger Franz;03:06:10.5 +4399;Haider Thomas;02:53:41.2 +4400;Haller Heinrich;03:14:40.7 +4401;Hartmann Thomas;04:21:26.2 +4402;Haueter Max;04:12:49.0 +4403;Hauser Wolfgang;02:55:57.6 +4404;Häusler Philippe;03:26:49.3 +4406;Herren Lars;04:11:27.4 +4407;Hertach Alain;03:46:24.5 +4408;Hess Ivan;03:43:57.6 +4409;Hess Oliver;04:05:34.2 +4411;Hohler Patrick;03:56:55.4 +4412;Holenweger Michael;04:16:36.2 +4413;Hollenstein Alex;03:44:11.4 +4414;Hösli Hans;03:28:24.9 +4415;Hubacher Thomas;03:13:08.5 +4416;Huber René;04:36:47.8 +4417;Hug Rene;03:14:54.9 +4419;Humbel Jürg;03:30:52.9 +4420;Hungerbuehler Pius;03:53:02.2 +4421;Inniger Hans-Christoph;04:41:42.5 +4424;Janser Alfred;04:13:22.2 +4425;Jegen Thomas;03:57:29.2 +4426;Joller Thomas;03:23:38.6 +4428;Jutzi Stephan;04:09:25.0 +4433;Kaufmann Hanspeter;03:50:16.8 +4435;Kellenberger Stephan;03:15:43.1 +4436;Keller Daniel;03:58:39.7 +4437;Keller Ernst;02:58:15.0 +4438;Kelling Udo;03:04:50.7 +4440;Kimmerlin Thierry;03:16:52.9 +4441;Kindlimann Heinz;03:43:31.0 +4444;Kobi Peider;04:43:57.9 +4445;Kopalek Peter;03:20:33.6 +4448;Küchler Thorsten;03:22:32.7 +4449;Kuster Marcel;03:17:29.6 +4450;Kuster Matthias;03:53:57.8 +4452;Lanz Peter;02:51:38.1 +4453;Laubscher Daniel;03:35:14.5 +4454;Leach Steven;04:22:52.4 +4455;Leder Manfred;03:38:05.7 +4456;Lehmann Nik;03:08:46.4 +4457;Lehni Markus;03:51:10.8 +4458;Leiggener Christoph;04:24:27.4 +4459;Leuener Felix;03:56:31.0 +4461;Loosli Adrian;03:07:31.4 +4462;Lopes Oliveira Leonel;03:05:47.9 +4463;Lorencez Isaac;03:48:08.4 +4465;Lucas François;03:44:05.5 +4466;Lüthi Jean-Pierre;03:36:16.2 +4467;Lüthi Marc;04:06:42.3 +4468;Lüthi Markus;03:55:50.1 +4469;Maag Reto;03:30:04.5 +4470;Maegli Rolf;04:07:31.1 +4471;Maier Bernhard;03:49:12.4 +4472;Malacarne Sergio;03:57:34.6 +4475;Martel Jan;04:12:25.3 +4477;Maurer Dani;03:06:14.8 +4478;Meichtry Urs;03:14:13.7 +4479;Meier Bruno;03:03:26.5 +4480;Meier Daniel;03:28:25.1 +4481;Meier Martin;04:39:50.7 +4483;Merian Paul;03:27:56.6 +4484;Messer Markus;03:18:13.8 +4485;Metzger Bernhard;04:24:15.7 +4487;Minuscoli Patrik;03:17:11.0 +4488;Miralhos Paulo;02:42:54.8 +4490;Moncaro Andrea;04:00:17.6 +4491;Montagut Vidal Jorge;03:27:46.0 +4492;Moser Ives Jan;03:13:18.8 +4493;Moser Mario;04:25:43.7 +4494;Motavalli Masoud;04:39:41.9 +4495;Mühle Housi;03:44:56.6 +4496;Mullaney Chris;04:00:35.0 +4497;Murbach Umberto;04:44:47.0 +4499;Nehmer Raphael;04:12:31.0 +4500;Neuenschwander Hanspet;04:31:36.4 +4501;Notter Thomy;04:11:43.5 +4502;Nünlist Nüni;04:26:57.3 +4503;Nusseck Peter;03:20:19.2 +4504;Nyfeler Thomas;03:29:17.7 +4505;Oberhänsli Fabian;03:20:58.3 +4506;Obrist Beat;04:26:57.6 +4507;Obrist Fabio;04:11:19.7 +4508;Odden Lee;03:26:42.2 +4509;Odermatt Karlheinz;04:23:05.4 +4510;Oetiker Beat;04:43:15.9 +4511;Omlin Niklaus;03:39:26.4 +4512;Ommerborn Stephan;03:57:30.2 +4513;Ort Fred;03:42:06.9 +4514;Pagan Olivier;03:56:16.6 +4515;Pauli Marc;03:18:53.3 +4516;Perez De La Sota Gabri;04:08:57.6 +4517;Perren Patrick;02:42:52.6 +4519;Pfäffli Andreas;03:12:35.9 +4521;Pfister Andreas;03:11:43.3 +4522;Pfister Christian;03:51:55.3 +4523;Plattner Daniel;04:14:34.5 +4525;Poenaru Daniel;03:58:25.8 +4527;Portmann Philipp;03:33:19.1 +4529;Pravato David;03:18:04.8 +4530;Provinzano Ignazio;03:14:06.3 +4531;Racine Gabriel;04:12:19.3 +4532;Raiser Thomas;03:30:12.3 +4533;Rando Andrés;03:36:42.3 +4535;Reber Rolf;03:30:37.7 +4537;Renz Thomas;03:17:41.1 +4538;Rickenbacher Leo;03:03:42.2 +4541;Risler Martin;03:31:03.8 +4542;Romer Paul;03:16:56.2 +4544;Rüegg Roman;03:23:46.4 +4545;Russenberger Thomas;03:30:07.3 +4546;Rütimann Willy;04:06:31.0 +4547;Sadriu Kreshnik;05:17:51.5 +4548;Salisbury David;03:40:37.7 +4549;Schädeli Ernst;03:44:00.9 +4550;Schäfer Kai;03:05:08.6 +4551;Scheller Gerd;03:15:32.5 +4552;Schiavarelli Nicola;03:31:43.0 +4554;Schlepfer Roland;04:07:21.4 +4556;Schmidl Martin;03:21:19.3 +4558;Schmitt Marius Gerhard;03:43:19.3 +4559;Schuler Othmar;03:10:19.1 +4560;Schwegler Klaus;04:12:49.8 +4561;Siegenthaler Thomas;03:43:26.1 +4562;Signer Peter;03:36:24.1 +4564;Spiegel Patrick;03:11:15.1 +4565;Städler Oliver;03:32:53.0 +4568;Steiner Daniel;04:36:39.3 +4569;Steinhauser Jürg;03:55:45.8 +4570;Stephani Reto;04:14:32.2 +4571;Stoppiello Frank;04:27:04.8 +4572;Strebel Paddy;03:33:53.2 +4573;Suter Daniel;04:04:30.7 +4574;Taucher Joshua;04:22:37.3 +4576;Thode Andreas;03:34:42.0 +4577;Isler Bruno;03:33:38.7 +4578;Thomschke Till;03:33:50.5 +4579;Tobler Daniel;03:12:40.1 +4580;Tomic Slobodan Bob;04:29:48.6 +4581;Tonak Torsten;02:52:15.5 +4582;Tonolli Alberto;05:04:59.1 +4584;Tuta Niko;04:18:53.6 +4588;Vogt Roland;03:42:03.5 +4589;von Känel Hans;03:40:14.8 +4590;Vonchristen Martin;04:08:13.8 +4591;Walder Christoph;04:27:39.5 +4592;Walker Steven;03:10:20.3 +4593;Walter Martin;03:02:43.1 +4594;Wang Lei;05:21:55.4 +4596;Wehren Marcel;03:31:01.8 +4597;Wey Franz;04:08:53.7 +4598;Wey Herbert;04:01:43.8 +4599;Wey Simon;03:22:42.6 +4600;Wick Bernhard;03:50:22.0 +4602;Wille David;04:46:13.0 +4603;Wirth Thomas;04:30:41.6 +4605;Wüest Simon;03:59:02.1 +4606;Wunderli Andreas;03:38:17.9 +4607;Wyler Marco;04:21:15.1 +4608;Zähnler Bruno;04:27:22.2 +4609;Zehnder Rolf;03:58:45.5 +4610;Zehntner Daniel;03:23:23.5 +4611;Zimmermann Niklaus;03:36:50.5 +4612;Zimmermann Werner;04:37:54.2 +4613;Zumbach Charles;03:33:26.8 +4614;Ackermann Martin;03:28:06.3 +4615;Berndt Matthias;04:05:43.4 +4616;Bertucci Dario;03:51:29.8 +4619;Buchmann Remo;04:12:44.2 +4620;Flückiger Hans;03:46:16.2 +4621;Germann Peter;03:32:20.3 +4622;Hagemann Peter;03:31:09.0 +4623;Halme Tero;02:59:02.2 +4625;Huber Daniel;03:25:29.1 +4626;Jeannet Olivier;03:26:00.8 +4627;Jorge Humberto;03:38:11.0 +4629;Kälin Sepp;03:27:46.9 +4631;Kellenberger Daniel;04:33:31.9 +4632;Knupfer Stefan;02:58:32.2 +4633;Knüsel Markus;03:26:26.8 +4634;Kovar Thomas;02:59:45.9 +4636;Kuhn Matthias;03:02:55.4 +4638;Lustenberger Kurt;02:39:45.1 +4640;Mantel Rico;05:11:09.4 +4641;Martin Ludwig;03:26:31.4 +4642;Mazzotta Cosimo;03:21:14.2 +4644;Moret Raoul;03:55:48.2 +4645;Nebbe Harry;03:13:15.5 +4646;Neuenschwander Andre;04:13:30.5 +4647;Pellegrini Fausto;03:08:09.8 +4648;Pellkofer Martin;03:32:45.4 +4649;Peterli Ralph;04:26:53.4 +4650;Phan Quang Biu;03:38:30.9 +4653;Ruoss Patrick;03:17:49.2 +4654;Ryser Martin;03:22:53.6 +4655;Schmid Andreas;02:45:39.7 +4656;Schmidt Yvan;04:03:33.3 +4657;Schwarzkopf Dominik;04:57:38.5 +4660;Stoob Max;04:29:24.7 +4661;Tomczak Krzysztof;03:13:04.2 +4664;Wellington Daniel;03:57:55.6 +4665;Zgraggen Lorenzo;04:01:05.6 +4668;Häuptli Daniel;03:34:36.8 +4669;Babounakis Antonios;03:20:54.8 +4670;Di Giovanni Bruno;03:54:13.1 +4672;Böni André;04:21:43.2 +4673;Keller Christian;04:40:52.6 +4674;Briner-Weber Markus;03:43:34.2 +4676;Brenner Patrick;02:38:58.1 +4677;Oyetan Seun;04:24:23.2 +4678;Manivanan Vijay Sudhak;04:08:11.8 +4679;Lehner Markus;04:23:29.0 +4680;Stadel Joachim;03:14:49.9 +4681;Sudan Philippe;03:11:11.3 +4682;Holzapfel Helmut;04:10:32.5 +4683;Lanz Martin;02:37:54.8 +4684;Gorrie Luke;04:44:13.6 +4685;Sutter Markus;03:05:39.8 +4686;Meier Werner;03:51:16.6 +4687;Mvongo Jean-Paul;03:20:08.7 +4688;Czaykowsky Marco;03:25:26.2 +4689;Czaykowsky Yves;03:14:06.0 +4690;Kümin Otto;05:09:42.8 +4691;Thalmann Daniel;03:15:41.4 +4692;Wespi Bernhard;03:41:54.0 +4693;Geiger Christoph;04:18:19.6 +4694;Oswald Flurin;05:01:23.6 +4695;Mader Kevin;03:20:24.8 +4696;Gentile Daniele;03:26:43.6 +4698;Ahler Markus;03:58:28.3 +4700;Zuzolo Vincenzo;04:32:45.9 +4701;Lochmann Guido;04:03:18.1 +4702;Bartosch Lukas;03:54:56.4 +4703;Pfyffer Stefan;03:37:36.1 +4704;Unternährer René;03:24:40.5 +4705;Habisreutinger Thomas;03:35:27.8 +4706;Pokora Daniel;03:13:45.2 +4708;Steinbach Simon;03:44:59.6 +4709;Bischof Harald;04:06:47.0 +4710;Kohli Bernhard;03:40:30.6 +4711;Bigger Reto;03:25:21.6 +4712;Lopez Oswaldo;04:38:07.8 +4713;Ortiz Claviso Luis Alb;04:28:03.2 +4949;Richner Peter;03:29:21.3 +6003;Beinhoff Martin;03:51:58.2 +6004;Bucherer Thomas;04:07:49.2 +6005;Cupples Richard;03:34:25.9 +6006;Dorn Alexander;03:47:21.5 +6007;Frou Benoit;03:31:11.6 +6008;Gerull John-Phillip;03:23:42.2 +6010;Hertig Andi;03:59:01.1 +6011;Joss Myriam;03:33:17.7 +6012;Lichtenberger Alexande;04:10:32.4 +6013;Mimouni Didier;03:13:49.1 +6014;Moeckli Simon;03:55:15.5 +6015;Nashid Ibrahim;04:13:34.7 +6016;Ochsner Thomy;04:52:15.2 +6017;Schmid Alex;04:20:38.5 +6018;van Ulzen Manuela;03:56:48.8 +6019;Vogeli Bernhard;03:23:07.4 +6020;Waldburger Claudio;03:43:51.9 +6021;Walser Alexander;04:15:57.0 +6022;Witzel Christian;03:17:20.1 +6023;Rupp Thomas H.;03:29:09.6 +6101;Affolter Darius;03:24:44.8 +6104;Graham Angus;04:31:29.8 +6106;Lee Jon;03:55:54.6 +6107;Luessi Andreas;03:19:44.4 +6108;Melas Theocharis;05:24:59.7 +6110;Rentsch Beat;03:41:14.7 +6111;Rezk Markus;03:56:55.2 +6112;Schumacher Martin;03:44:43.2 +6113;Sieger Pascal;03:17:43.8 +6115;Sutter Andy;04:12:08.0 +6116;van Buul Peter;03:26:02.6 +6118;Wieland Lucio;04:56:57.3 +6119;Zuzak Miro;04:30:29.7 +6120;De-Vizzi Evelyn;04:52:55.3 +6121;De-Vizzi Fiona;04:26:54.7 +6122;Kläger Roland;03:15:58.8 +6201;Allard Darren;04:26:56.4 +6204;Greco Luigi;04:01:57.2 +6205;Huber Sibylle;03:52:02.2 +6206;Ostertag Andreas;03:02:03.7 +6207;Piekarz Iwona;04:05:35.5 +6208;Rodriguez José Manuel;04:26:30.9 +6210;Waelti Philippe;03:43:39.0 +6211;Ziegler Philippe;03:26:06.0 +6301;Baumgartner Rico;03:57:39.3 +6302;Cestonato Antonella;04:01:16.4 +6303;Eggenberger Kurt;03:40:38.8 +6304;Enderlin Michèle;04:41:47.1 +6305;Hauser Claudia;03:53:32.8 +6306;Litscher Daniel;04:06:55.2 +6307;Regenscheit Fabian;03:43:11.8 +6308;Sommer Martin;04:23:44.8 +6309;Mathis Stefan;03:36:46.0 +6310;Merkli Stephan;03:06:32.1 +6311;Türler Thomas;03:08:12.6 +6401;Baumann Matthias;03:31:08.5 +6402;Baumgartner Philip;03:42:46.7 +6403;Biefer Christian;03:34:56.4 +6405;Faller Sascha;04:17:10.0 +6406;Ganz Jeannette;03:52:36.6 +6407;Hari Daniel;03:01:44.4 +6408;Hüsser Zoe;04:10:43.6 +6409;Lacy David;03:26:32.1 +6411;Maag Felix;03:38:30.9 +6412;Rehal Jaspal;03:53:54.4 +6413;Sax Fredi;04:31:08.8 +6414;Schmitt Martin;03:54:46.5 +6415;Schraven Jan-Christian;05:28:19.0 +6416;Stoller Fabienne;04:38:16.1 +6417;Winkler Hansjörg;03:25:01.0 +6418;Zanotelli Reto;03:47:17.5 +6419;Hug Pascal;03:13:19.9 +6420;Pavlovic Marko;03:06:25.1 +6421;Seebach Nicole;04:18:42.6 +6422;Wegmann Joachim;04:22:49.0 +7001;Leupi Daniel;03:38:01.3 +7002;Ziegler Roger;03:16:34.3 +7003;Fässler Hildegard;03:38:29.4 +7005;Egger Urs;03:17:35.5 +7006;Egger Urs;03:35:12.7 +7007;Abele Martin;03:17:01.9 +7008;Schmidig Urs;03:25:06.6 +7009;Mayenzet Didier;03:24:19.9 +7010;Rüdisüli Pius;03:09:17.0 +7011;Lauener Nicole;03:55:59.2 +7012;Wettstein Peter;03:58:32.8 +7013;Wettstein Peter;03:33:56.4 +7014;Wettstein Peter;03:48:10.4 +7015;Welti Martin;03:21:19.9 +7016;Smits Léon;03:31:41.3 +7017;Diethelm Theri;04:17:34.0 +7018;Achermann Annemarie;04:04:04.4 +7019;Thomys Heike;03:55:56.8 +7020;Thomys Heike;04:04:24.4 +7021;Dettwiler Daniel;03:35:12.1 +7022;Zehr Bruno;03:20:21.9 +7024;Spycher Hunziker Susan;03:29:11.2 +7025;Grieder Sandra;04:03:23.1 +7026;Schumpf Nicole;04:33:36.3 +7027;Gantner Felicitas;03:39:29.7 +7028;Vaucher Pascale;03:37:56.5 +7029;Frost Elke;03:15:55.7 +7030;Vorbrodt Dominique;03:41:23.8 +7031;Koch Pascal;03:21:34.9 +7032;Ferrari-Fidel Frederic;03:21:19.8 +7033;Cloos Lis;03:42:50.9 +7034;Urosevic Aleksandra;03:36:55.0 +7035;Knaus Michèle;04:24:04.0 +7036;Flückiger Miriam;03:48:12.8 +7037;Stutz Markus;03:29:55.2 +7038;Niffenegger Viktor;03:15:01.3 +7039;Wehleit Kolja;03:37:34.4 +7040;Wehleit Kolja;03:53:06.3 +7041;Wehleit Kolja;03:38:34.9 +7042;Knecht Anina;03:28:39.7 +7043;Pfister René;04:04:57.2 +7044;Fröhlich Valérie;03:35:20.5 +7045;Blomberg Per-Inge;04:02:01.8 +7046;Lhommel Laurence;03:13:06.8 +7047;Bollinger-Könz Dieter;03:08:41.2 +7049;Brutschi Daniela;03:38:47.8 +7050;Platzer Martina;03:46:53.0 +7051;Ammann Barbara;02:58:56.3 +7052;Aubry Luzia;03:29:33.1 +7054;Stössel Daniel;03:26:15.0 +7055;Gschwend Christian;03:41:46.2 +7056;Leiser Kolja;03:37:04.8 +7057;Grütter Urs;03:05:29.8 +7058;Coester Franz;03:53:05.8 +7059;Wirz Markus;03:25:52.8 +7060;Wirz Markus;03:22:32.2 +7061;Albisser Beat;03:36:49.4 +7062;Endres Julia;03:56:24.5 +7063;Ummel Beat;03:14:20.7 +7064;Fischer Hurter Daniel;03:12:31.4 +7065;Senn Rolf;03:04:12.0 +7066;Tobler Raphael;03:17:22.0 +7067;Tobler Raphael;03:16:41.6 +7068;Tobler Raphael;03:15:21.0 +7070;Eggimann Thomas;03:25:22.5 +7071;Bartholdi Andre;03:26:19.9 +7072;Merk Gaby;03:49:16.5 +7073;Limacher Esther;03:20:57.8 +7074;Badertscher Sara;03:45:10.6 +7075;Francotte Benedicte;03:55:30.9 +7076;Boschung Bernard;04:01:42.7 +7077;Oswald Manfred;03:27:07.8 +7078;Steiner Markus;03:28:41.5 +7079;von Euw Martin;03:40:19.3 +7080;Buergi Taboada Carole;03:09:43.1 +7081;Cordey Olivier;03:44:06.7 +7082;Richinger David;03:29:20.7 +7083;Caminada Rafael;03:47:59.1 +7084;Schuermann Balz;03:14:12.4 +7085;Charrière Thomas;03:49:45.7 +7086;Vaterlaus Peter;03:34:58.1 +7087;Eggimann Andreas;03:21:26.4 +7088;Gemperle Patrik;03:40:13.6 +7090;Point Laetitia;03:24:53.5 +7091;Preisig Ueli;03:25:43.5 +7092;Huber Nadine;04:15:00.0 +7093;Friedli Corinne;03:30:37.4 +7094;Knechtli Thomas;03:26:56.1 +7095;Hasler Catherine;03:32:33.5 +7096;Böllenrücher Melanie;03:09:13.6 +7097;Oung Raymond;03:57:14.8 +7098;Hassler Daniel;03:33:44.8 +7099;Bachmann Maria;03:43:11.0 +7100;Petersen Claus Gregers;04:00:18.8 +7101;Petersen Claus Gregers;03:52:08.6 +7102;Koch Roman;03:56:38.8 +7103;Thalmann Hans-Peter;03:44:32.5 +7104;Beck Lea;03:30:28.7 +7105;Beck Lea;03:10:59.2 +7106;Beck Lea;03:27:46.3 +7107;Inderbitzin Kevin;03:30:31.4 +7108;Ledergerber Isabelle;03:26:53.5 +7109;Carnevale Vito;03:54:49.9 +7110;Nguyen Raphael;03:38:06.6 +7111;Huwyler Reto;03:49:32.6 +7112;Trappitsch Stefan;03:49:28.6 +7113;Meier David;03:55:16.3 +7114;Weisstanner Andreas;03:39:43.2 +7115;Donath Marc;03:33:25.0 +7117;Klein Tobias;03:51:55.8 +7118;Keller Claudia;03:33:02.7 +7119;Gabriel Reto;03:35:04.0 +7120;Holzinger Thomas;03:35:01.2 +7121;Frischknecht Christine;03:52:07.1 +7122;Roth Jeannine;04:01:38.6 +7123;Delahaye Benjamin;03:22:30.2 +7124;Trifari Patricia;03:34:45.5 +7125;Mühlberg Martin;03:28:10.9 +7127;Leuenberger Susanne;04:09:14.5 +7128;Lurati Laura;03:41:38.9 +7129;Cackett Joanne;03:35:02.7 +7130;Baumgartner Philipp;03:31:11.3 +7131;Altmann Andreas;03:38:29.8 +7132;Marti Gabriel;03:20:21.8 +7133;Steiger-Glocker Gaby;03:59:20.6 +7134;Ruprecht Balz;03:04:17.3 +7135;Stoessel Laura;03:39:06.5 +7136;Lauffenburger Roman;03:56:36.6 +7138;Williamson Libby;03:54:41.0 +7139;Koch Gisela;04:21:23.3 +7140;Gubelmann Patrick;03:49:50.0 +7141;Majoleth Stefan;03:16:44.7 +7142;Parro Paolo;03:23:59.2 +7143;Zollinger Reto;03:23:12.7 +7144;Gundermann Julia;04:19:35.5 +7145;Tross-Müller Marianne;04:02:29.8 +7146;Müller Anna-Katharina;03:32:55.9 +7147;Suter Lorena;03:46:31.1 +7148;Grindley Peter;03:49:28.6 +7149;Leutwiler Sara;03:40:08.6 +7150;Bachmann Beatrice;04:23:48.9 +7151;Streuli Gabriela;03:18:41.6 +7152;Stefka Daniel;03:49:46.4 +7153;Kofel Felix;03:34:29.6 +7154;Burkhard Patrick;03:06:38.8 +7155;Hess Corina;03:56:24.7 +7156;Lehmann Beat;04:18:47.4 +7157;Patkovic Slavica;04:14:22.9 +7158;Rudat Jörg;04:03:15.4 +7159;Price Robert;03:48:57.9 +7160;Imhof Nathalie;04:10:43.7 +7161;Sommer Ernesto;04:23:31.9 +7162;von Gunten Erich;03:36:42.9 +7163;Niederberger Katja;04:31:56.7 +7164;Püchel Johannes;03:43:53.3 +7165;Studer Lukas;03:20:55.7 +7167;Graf Bettina;03:32:31.9 +7168;Burckhardt Straub Caro;04:10:05.5 +7169;Camenzind Sepp;03:36:18.1 +7170;Rech Marielle;03:25:46.7 +7171;Gut Michael;03:31:07.9 +7172;Sigg Arnold;03:25:00.5 +7173;Honegger Silja;03:45:55.5 +7174;Heiz Patrick;04:12:02.0 +7175;Rais Jeanne;04:01:39.4 +7176;Beyeler Erika;03:53:31.7 +7177;Zürcher Thomas;03:33:57.9 +7178;Sutter Matthias;03:46:55.3 +7179;Sutter Matthias;03:24:44.2 +7180;Sutter Matthias;03:54:50.5 +7181;Jud Maria;03:49:48.5 +7182;Bonfranchi Riccardo;04:33:12.3 +7183;Rigamonti Alessandro;03:31:34.0 +7184;Kaufmann Patrick;03:26:30.1 +7185;Ortega Lydia;04:20:15.7 +7186;De Faveri Marisa;03:50:29.7 +7187;Ortega Lydia;03:41:42.2 +7188;Hruba Gabriela;03:35:52.7 +7189;Hruba Gabriela;03:53:28.6 +7190;Kilbert Gert;02:58:12.3 +7191;Aniol Wars;02:51:31.1 +7192;Kraus Bret;03:31:50.2 +7193;Wenger Esther;03:58:17.1 +7194;Schneeberger Ivonne;03:33:36.3 +7195;Luginbühl Carolin;03:41:17.9 +7196;Furrer Roman;03:24:42.4 +7197;Nesme Salome;03:41:42.7 +7198;Pirlet Xavier;02:51:29.0 +7199;Schneeberger Ivonne;03:55:03.3 +7200;Schneeberger Ivonne;03:30:43.7 +7201;Schneeberger Ivonne;04:34:24.8 +7202;Schneeberger Ivonne;03:40:37.1 +7203;Schneeberger Ivonne;03:13:40.7 +7204;Schneeberger Ivonne;03:50:16.8 +7205;Schneeberger Ivonne;03:54:05.3 +7206;Schneeberger Ivonne;03:14:16.9 +7207;Schneeberger Ivonne;04:05:02.7 +7208;Montanari Dani;03:01:41.2 +7209;Dolfing Henrico;02:52:39.4 +7210;Maag Ana;02:50:57.2 +7211;Hafner Markus;03:48:44.7 +7213;Schilliger Rolf;03:41:56.1 +7214;Fontanive Christian;04:39:49.0 +7215;Fontanive Christian;03:32:31.9 +7216;Fontanive Christian;03:50:43.3 +7217;Mäder Petra;04:12:24.2 +7218;Schneeberger Ivonne;04:13:15.0 +7219;Ritter Christine;03:53:54.8 +7220;Hancock Julia;04:06:52.5 +7221;Hildebrand Carmen;03:30:30.0 +7222;Reiser Evelyne;03:23:32.0 +7223;Schaller Oscar;02:58:40.7 +7224;Fäh Marco;03:03:43.9 +7225;Grogg Diana;03:08:03.7 +7226;Holdener Laura;03:57:17.3 +7227;Jud Janine;03:28:37.9 +7228;Ebnöther Reto;03:18:10.3 +7229;Thomas Astrid;04:08:52.8 +7230;Schawalder Peter;03:51:06.5 +7231;Lassmann Fredi;03:09:56.7 +7232;Hansmann Nicole;03:52:12.0 +7233;Fuhrer Susanna;03:36:22.6 +7235;Güttinger Daniel;03:34:01.3 +7236;Eugster Olivier;02:53:58.1 +7237;Fitoussi Cecile;04:32:55.9 +7238;Holzberg Nina;03:38:14.5 +7239;Zahno Andi;03:54:03.4 +7240;Gyomlay Katinka;03:40:30.9 +7241;Leitner Fabian;03:19:16.4 +7242;Reber Samuel;03:13:08.2 +7243;Marti Georg;03:33:04.8 +7244;Ruggaber Michel;03:18:31.2 +7245;Theiler Helen;04:11:34.1 +7246;Theiler Helen;03:44:07.8 +7247;Hormann Christian;03:28:45.1 +7248;Hempen Roland;03:55:05.5 +7249;Koch Gisela;03:50:52.0 +7250;Kollbrunner Rebekka;03:53:14.9 +7251;Schmid Daria;03:35:02.3 +7252;Wigger Marcel;03:32:08.3 +7253;Hirt Christian;04:11:43.3 +7254;Mühlethaler Armando;03:37:55.2 +7258;Weiss Ruth;03:45:49.1 +7259;Weisstanner Andreas;03:30:56.0 +7260;Roberts Tania;03:52:05.6 +7261;Fischer Marcel;03:21:50.0 +7262;Fischer Marcel;03:37:54.2 +7263;Blunschi Selina;04:04:23.1 +7264;Säuberli Franziska;03:50:01.9 +7265;Hürlimann Janine;04:30:01.3 +7266;Favre Guy;02:38:31.4 +7267;Wehrli Edith;03:40:23.1 +7268;Bonfils Jacqueline;03:40:51.1 +7269;Schneider Sven;03:37:03.3 +7270;Annaheim Simon;02:29:43.2 +7271;Mohenski Brigitte;04:06:01.5 +7272;Fischer Marc Pascal;03:17:03.8 +7273;Stettler Stefan;03:49:30.2 +7274;Stettler Christa;03:20:45.8 +7275;Hocher Ursula;04:09:44.0 +7276;Hager Michel;03:29:40.7 +7277;Kreppke Jan-Niklas;02:37:53.1 +7278;Grassi Grazia;04:03:01.1 +7279;Cerjak-Frei Cornelia;03:52:05.8 +7280;Suter Peter A.;03:32:10.6 +7281;Föllmi Carolyn;04:15:45.6 +7282;Bischof Simone;03:08:49.4 +7284;Ruile Stefan;02:46:27.9 +7285;Schneider Roland;03:46:04.9 +7286;Scott Steven;03:04:03.1 +7287;Hohl Isabelle;03:33:15.7 +7288;Stirnimann Ruedi;03:47:04.2 +7289;Stirnimann Ruedi;03:44:25.4 +7290;Weiss Martin;03:07:33.0 +7291;Fuccaro Alexandra;03:31:42.7 +7292;Ratjen Christian;03:33:12.7 +7293;Walter Susanna;04:09:57.4 +7294;Lucas Elise;03:29:58.8 +7295;Abbenseth Ben;03:13:55.0 +7296;Skalik Vojtech;03:25:57.6 +7297;Meier Michael;03:08:48.7 +7298;Bieler Sarah;03:57:19.5 +7299;Vetter Beat;03:02:15.8 +7300;Klinkmann Thomas;03:22:48.2 +7301;Frey Marcel;04:07:28.3 +7302;Frey Marcel;03:33:33.8 +7304;Scholz Urte;04:03:08.1 +7305;Maltry Karin;03:50:28.7 +7306;Gloor Marco;03:47:16.8 +7307;Ströbele René;04:01:34.2 +7308;Calörtscher Denise;03:37:54.9 +7309;Magee Karina;03:21:43.1 +7310;Rabenbauer Karin;03:48:48.0 +7311;Rauber-Lüthy Christine;03:58:37.3 +7312;Ballabio-Höhne Sabrina;03:52:51.5 +7314;Mächler Emil;03:36:50.7 +7315;Hausmann Nicole;04:00:49.7 +7316;Kälin Robin;04:24:31.2 +7317;Maier Sandy;04:04:36.9 +7319;Werer Karin;03:41:33.6 +7320;Schilling Stephanie;04:22:31.9 +7321;Ineichen Gerhard;03:16:54.1 +7322;Gilgen Sascha;03:27:09.1 +7323;Salinas Antoinette;03:52:57.3 +7324;Rüthemann Helen;03:25:42.5 +7325;Bracko Oliver;03:09:00.2 +7326;Schaelin Marcel;03:47:54.9 +7327;Lüllau Claus;04:07:23.3 +7328;Späni Andrea;03:41:38.7 +7329;Donner Georg;03:26:31.9 +7330;Rutz Eric;03:49:55.7 +7331;Stampfli Reto;03:10:50.2 +7332;Wloka Martin;03:32:23.2 +7333;Belguendouz Abdelmalek;03:51:14.4 +7334;Wüthrich Thomas;03:21:20.5 +7335;Schmiedler Ursula;03:25:43.0 +7336;Güldenapfel Erhard;03:41:31.0 +7337;Schönbächler Ralph;03:41:31.5 +7338;Hofmann Daniel;03:20:55.5 +7339;Traxler Sabrina;03:23:26.2 +7340;Traxler Sabrina;03:24:52.8 +7341;Schneble Max Charles;03:11:57.8 +7342;Wichmann Fabienne;03:47:39.0 +7343;Frei Stefan;03:41:43.6 +7344;Biedermann Urs;03:27:19.3 +7345;Guindo Dominique;04:17:47.1 +7346;Niehus Swaantje;03:43:50.3 +7347;Chèvre Frédéric;04:07:45.6 +7349;Mose Soren;03:43:22.5 +7350;Shtufi Lara;03:59:00.0 +7352;Müller Wenzel;03:51:13.7 +7353;Schoenholzer Beat;03:46:45.7 +7354;Schultz Tilman;04:07:14.6 +7355;Kölsky Carsten;03:40:21.6 +7356;Schieler Katrin;04:27:28.6 +7357;Schmidt Marc Andre;04:13:16.0 +7358;Kadlec Sven;03:35:45.2 +7359;Hörler Rhea;03:59:12.4 +7360;Gehri Friederike;04:01:45.4 +7361;Kaufmann Christian;03:51:07.3 +7362;Tschurr Flavian;03:20:50.2 +7363;Dörgeloh Martin;03:13:13.5 +7364;Elmer Heiri;03:23:34.2 +7365;Elmer Heiri;03:31:30.3 +7366;Elmer Heiri;03:26:55.4 +7367;Stauch Vanessa;03:11:35.6 +7368;Sieber Eva;03:57:18.3 +7369;Suter Franziska;02:59:01.5 +7370;Scattolin Pascal;03:11:31.8 +7371;Walter Thomas;03:29:40.3 +7372;Seger Holger;03:29:57.5 +7373;Ruest Erich;03:29:54.5 +7375;Sigrist Yvonne;03:28:37.3 +7376;Landolt Fridolin;03:15:18.2 +7377;Meier Anita;04:12:26.0 +7379;Bleiker Rolf;03:21:31.4 +7380;Fontolliet Daniel;03:55:58.9 +7381;Foletti Anita;03:51:07.8 +7382;Denier Claudia;04:05:17.5 +7383;Fuchs Ruth;04:28:01.9 +7384;Studer Larissa;04:07:31.6 +7385;Flückiger Reto;03:42:29.2 +7386;Egli Susanne;03:54:19.9 +7388;Bachmann Roger;03:51:44.7 +7389;Brunner Heiko;03:46:08.8 +7390;Zemp Peter;03:51:09.1 +7391;Bachmann Ruedi;03:22:08.6 +7392;Camenzind André;02:54:12.8 +7393;Steiner Sarah;03:34:59.1 +7394;Walter Urs;03:28:45.0 +7395;Curiger Andreas;03:08:36.7 +7396;Romaniuc Marcelo Rober;04:07:36.4 +7397;Fehr Jessica;03:30:09.2 +7398;Jakob Barbara;03:42:04.4 +7399;Jakob Barbara;04:00:14.3 +7400;Casali Daniela;03:54:45.6 +7401;Casali Fulvio;03:46:58.7 +7402;Felger Martin;03:38:26.5 +7403;Zürcher Toni;03:32:47.5 +7404;Flachsmann Stefan;03:03:28.0 +7405;Weiersmüller Jacquelin;04:07:45.3 +7406;Weiersmüller Jacquelin;04:06:21.6 +7407;Weiersmüller Jacquelin;04:02:38.3 +7408;Weiersmüller Jacquelin;04:27:12.0 +7410;Willi Barbara;03:20:14.4 +7411;Auf der Mauer Raphael;02:43:58.0 +7412;Kutej Stefan;03:27:40.5 +7413;Cappiello Mauro;03:28:20.4 +7414;Tatalias Melina;03:41:37.0 +7415;Sherlock Cushla;03:41:14.2 +7416;Benhauresch Abdel;03:27:43.6 +7417;Pircher Daniel;03:54:15.9 +7418;Sasso Angela;03:46:20.3 +7419;Meyer Bernhard;03:13:50.2 +7420;Olson Garrett;03:36:52.4 +7421;Künzle Doris;03:39:37.1 +7422;Knauer Anne-Juliane;03:25:26.0 +7423;Schleifer Judith;03:57:50.6 +7424;Goessler Franziska;03:43:50.0 +7425;Beeler Etienne;03:27:16.0 +7426;Wagner Mario;03:27:13.1 +7427;Niklaus Christin;03:41:38.2 +7429;Birkeland Ina;03:55:35.1 +7430;Adelmann Horst;03:41:01.5 +7431;Sommer Martin;03:55:51.4 +7432;Eltgen Johannes;03:19:10.5 +7433;Jörg Silvana;03:42:14.0 +7434;Baumann Thomas;03:47:21.1 +7435;Ulrich Barbara;03:41:15.5 +7436;Volz Andreas;03:34:37.7 +7437;Britschgi Dani;03:51:54.0 +7438;Fleetwood Rahel;03:40:22.3 +7439;Goulbourne Jane;04:06:30.0 +7440;Plüss Samuel;03:22:32.4 +7441;Fotheringham Jilly;04:39:27.5 +7442;Wirz Peter;03:05:58.8 +7443;Hall Terry;03:25:45.6 +7444;Wintsch Hanna;03:52:58.5 +7445;Götz Thomas;03:14:35.0 +7446;Götz Thomas;03:10:48.9 +7447;Krampf Eckhard;04:18:50.5 +7448;Akpinar Hakan;03:04:17.3 +7449;Bourquin Philippe;03:41:35.5 +7450;Bley Petra;03:44:29.2 +7451;Landolt Thomas;03:18:15.3 +7452;Thoma Rolf;03:11:29.2 +7453;Dickenmann Stefan;03:09:23.3 +7454;Lehner Christoph;03:37:26.4 +7455;Marxer Ruth;04:12:30.2 +7456;Koch Gisela;04:00:22.9 +7457;Hiestand Steve;04:09:43.0 +7458;Maggiulli Ivan;04:22:05.4 +7459;Wu Daye;03:43:45.0 +7460;Wantz Nadine;03:37:12.6 +7461;Müller Rolf;03:34:40.7 +7462;Locher Beatrice;03:25:04.9 +7463;Cevik Selim;03:40:55.8 +7464;Schulz Bianca;03:30:38.0 +7465;von Aesch Christoph;03:07:51.5 +7466;Borner Laura;03:19:52.4 +7467;Koch Gustav;03:21:28.8 +7468;Lendenmann Tobias;03:37:11.0 +7469;Berger Verena;03:36:21.3 +7470;Berger Verena;03:31:16.4 +7471;Berger Verena;03:35:27.7 +7472;Betschart Markus;03:27:50.5 +7473;Feroce Adrian;02:59:01.1 +7474;Meier Thomas;03:02:31.4 +7475;Müller Lothar;03:19:58.5 +7476;Böni Ralf;03:20:43.9 +7477;Koller Urs;03:23:11.9 +7478;Bründl Michael;03:46:03.5 +7479;Wicki Robin;03:10:14.0 +7480;Fisler Guido;04:16:11.0 +7481;Bonato Dario;04:00:03.7 +7482;Müller Matthias;03:49:18.0 +7483;Balz Rene;03:18:02.0 +7484;Geiger Dominik;04:10:40.8 +7485;Werder Roland;03:35:59.1 +7486;Haldemann Peter;03:47:50.5 +7487;Peterhans Renato;03:50:15.9 +7488;Heusser Daniel;03:32:16.0 +7489;Meuli Barbara;04:15:41.5 +7490;Abplanalp Beat;02:56:18.8 +7491;Hoogerwerf Erik;03:20:51.9 +7492;Feurer Olivia;03:32:15.5 +7493;Lange Otto;03:37:58.9 +7494;De Lemos Antonio;04:10:09.7 +7495;Seematter Marc;03:02:33.2 +7496;Bühlmann Sandra;04:00:50.0 +7497;Benz Fabienne;04:00:49.9 +7498;Huber Paul;03:40:27.0 +7499;Pilz Michelle M.;03:56:20.5 +7500;Walser Thomas;03:40:42.7 +7501;Senn Monika;03:40:59.4 +7502;Denneberg Jürg;03:55:59.1 +7503;Lutz Stephan;03:12:00.6 +7504;Steiner Melvin;03:59:26.5 +7505;Jetter Patrick;03:39:07.8 +7506;Isler Dominik;03:33:58.7 +7507;Kaufmann Ursula;04:14:10.7 +7508;Reimann Olivia;03:41:57.2 +7509;Ziesack Myriam;03:44:39.6 +7510;Moser-Hausammann Brigi;03:56:57.8 +7511;Moser-Hausammann Brigi;03:56:57.7 +7512;Manz Hansruedi;03:40:15.9 +7513;Manz Hansruedi;03:41:44.7 +7514;Berli Beatrice;04:01:07.5 +7515;Weiler Walter;03:05:54.9 +7516;Bos Heleen;04:43:34.3 +7517;Hoidn Anuschka;03:55:28.0 +7519;Schroeder Bernd;03:26:23.5 +7520;Barlow Mike;03:17:44.7 +7521;Müller Philippe;03:17:20.1 +7522;Grob Gabriela;03:34:51.3 +7523;Bosshardt Felix;03:33:12.2 +7524;Bührer Roger;03:55:46.8 +7526;Pletscher Thomas;03:29:04.7 +7527;Rüttimann Erhard;03:13:11.7 +7528;Janik Evelyn;03:09:22.8 +7529;Huber Peter;03:35:41.4 +7530;Federspiel Heike;03:44:35.7 +7531;Müller Patrick;03:06:35.9 +7532;Karrer Dominique;03:38:35.0 +7533;Bührer Roger;03:47:50.4 +7534;Schönbächler Pascal;04:12:22.4 +7535;Kögel Harald;03:26:37.7 +7536;Huber Nicolas;03:53:55.4 +7537;Utz Patrick;03:29:23.6 +7538;Ricardoch Ag;03:54:22.7 +7539;Ricardoch Ag;03:39:43.7 +7540;Luise Ivo;03:24:29.5 +7541;Enz Daniel;03:38:51.4 +7542;Wiederkehr Mirjam;03:33:14.0 +7543;Ricardoch Ag;03:42:17.8 +7544;Ricardoch Ag;04:04:55.3 +7545;Jäggi Jean-Pierre;04:09:59.3 +7546;Habermacher Claudia;03:21:07.0 +7547;Rey Bruno;04:04:48.9 +7548;Krismer Saskia;03:44:54.0 +7549;Greuel Wanja;03:17:44.7 +7550;Weibel Martina;04:02:34.4 +7551;Hofmann Markus;03:20:40.2 +7552;Cathrein Rene;03:39:27.6 +7553;Cathrein Rene;03:28:22.3 +7554;Badertscher Jörg;03:12:07.7 +7555;Hassler Brigitte;04:09:54.8 +7556;Gisler Sybille;03:24:08.0 +7557;Bräm Corina;03:24:43.0 +7558;Hinder Christine;03:52:37.9 +7559;Buner Sacha;03:23:47.2 +7560;Illi Liselotte;03:28:04.8 +7561;Gasser Ronny;03:03:53.1 +7562;Schefer Stefan;02:59:20.5 +7563;Carl Anna Barbla;03:43:24.5 +7564;Hottinger Nicole;03:21:51.0 +7565;Rechsteiner Simone;03:28:45.5 +7566;Rutz Miriam;03:14:39.8 +7567;Umbricht Sarah;03:15:55.8 +7568;Gonzalez Arza Jose;04:28:07.1 +7570;Tedeschi Alfonso;03:28:39.8 +7571;Krebs Michaela;03:31:25.8 +7572;Willborn Alexander;03:30:52.6 +7573;Niederbacher Martin;04:10:14.3 +7574;Langhard Markus;03:34:16.7 +7575;Blatter Samuel;03:20:59.4 +7576;Kwak Grace;03:47:04.2 +7577;Müri Michaela;03:35:15.5 +7578;Seuring Carolin;03:45:02.9 +7579;Bär Eva;03:48:23.5 +7580;Meyer Nina;04:32:29.3 +7581;Zellweger Monique;03:25:58.5 +7582;Sutter Samuel;03:30:12.4 +7583;Saar Rachel-Lee;03:52:13.9 +7584;Morf Celine;03:29:13.6 +7585;Naito Shinichi;03:24:00.8 +7586;De Boni Oliver;03:30:53.5 +7587;Keller Max;03:29:53.3 +7588;Pinchiroli Ettore;03:14:14.3 +7589;Peter Peter;02:30:28.8 +7590;Ziegler Paul;02:29:58.0 +7591;Schärer Sandra;03:36:52.0 +7592;Kessler Hannes;03:22:18.0 +7593;Fraczak Marcin;03:43:49.7 +7594;Rüegg Roger;03:32:10.6 +7595;Tschudi Michèle;03:12:09.2 +7596;Bächer Rico;03:34:27.7 +7597;Hottarek Tatjana;03:58:52.1 +7598;Blatter Samuel;03:16:14.9 +7599;Bingesser Barbara;03:24:11.3 +7600;Vaia Karin;03:53:39.9 +7601;Gellert Alexandre;03:35:09.7 +7602;Sagolla Markus;03:41:17.9 +7603;Bisgaard Jane;04:00:09.4 +7604;Beurret Hermes;03:08:37.5 +7605;Harder Daniel;03:29:57.9 +7606;Harder Daniel;03:30:32.1 +7607;Kugler Raphael;03:13:30.7 +7608;Ploskonka Elmar;03:39:46.1 +7609;Kammerer Dorothee;03:26:09.6 +7610;Kammerer Dorothee;03:02:54.5 +7611;Koch Rachelle;03:44:11.7 +7612;Bolliger Aino;03:02:42.2 +7613;Bolliger Aino;03:55:59.6 +7614;Guggisberg Michael;03:03:11.1 +7615;Winter Beatrix;04:39:01.4 +7616;Vincenz Claudia;03:30:31.1 +7617;Györvari Lars;03:50:30.3 +7618;Künzle Stefan;03:25:50.0 +7619;Dütting André;03:42:42.2 +7620;Mondini Michèle;04:09:20.5 +7621;Rohner Catherine;03:29:21.0 +7622;Ammann Beat;02:37:36.2 +7623;Kummrow Valerie;03:36:06.5 +7624;Graf Peter;03:44:18.9 +7625;Graf Peter;02:42:09.8 +7626;Winiger Benjamin;03:50:28.6 +7627;Lüthi Markus;03:24:57.6 +7628;Blatter Samuel;03:33:51.6 +7629;Gaillard Stephane;03:33:35.1 +7630;Rüegg Marco;03:23:19.8 +7631;Rüttimann Urs;03:07:43.9 +7633;Koller Markus;03:04:41.8 +7634;Flury Ernesto;03:16:30.0 +7635;Specker Marco;03:09:45.6 +7636;Niklaus Tina;03:37:33.4 +7637;Widmer Nathalie;03:49:31.9 +7638;Gröbli Susanne;03:34:44.0 +7639;Rütimann Thomas;03:26:25.4 +7640;Graf Beatrice;03:31:13.2 +7641;Steiner Elisabeth;03:45:54.0 +7642;Croset Marcel;03:25:34.8 +7643;Scherrer Rainer;03:00:26.2 +7644;Kuhn Gabriela;03:36:44.4 +7645;Bernold Roman;03:25:29.2 +7646;Insley Anne;04:01:04.7 +7647;Wirth Jessy;03:17:09.9 +7648;Soldo Lovro;03:56:04.1 +7649;Mazziotta Raffaele;03:52:18.5 +7650;Lacharite Claudie;03:51:29.9 +7651;Manz Alexander;04:14:01.7 +7652;Staub Jürg;04:12:48.2 +7653;Petrakis Stefanos;03:37:33.9 +7654;Gerber Mark;03:15:01.1 +7655;Gerber Mark;03:17:27.8 +7656;Franzi Roger;03:27:52.3 +7657;Schmid Stefanie;03:36:29.5 +7658;Mehta Sunil;04:00:20.4 +7660;Spillmann Roger;04:05:07.3 +7661;Bolli Andreas;04:02:04.2 +7662;Suter Sabrina;03:52:01.0 +7663;Meier Helen;03:57:12.2 diff --git a/src/ch/zhaw/ads/ServerFactory.java b/src/ch/zhaw/ads/ServerFactory.java new file mode 100644 index 0000000..16805ae --- /dev/null +++ b/src/ch/zhaw/ads/ServerFactory.java @@ -0,0 +1,76 @@ +package ch.zhaw.ads; + +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; + +/** + * Classloader that handles file path of class + */ +class MyClassLoader extends ClassLoader { + private String path; + + MyClassLoader(ClassLoader parent) { + super(parent); + } + + /** + * @param name filename of class + * return content of file as array of bytes; if file does not exist return null + */ + private byte[] getBytes(String name) { + try { + System.out.println(name); + RandomAccessFile file = new RandomAccessFile(name, "r"); + byte[] data = new byte[(int) file.length()]; + file.readFully(data); + file.close(); + return data; + } catch (IOException e) { + } + return null; + } + + /** + * @param name filename of class + */ + public Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + System.out.println("load:" + name + " " + resolve); + Class clazz; + byte[] classData = getBytes(name); + if (classData != null) { + clazz = defineClass(null, classData, 0, classData.length); + path = name.substring(0, + name.length() - clazz.getName().length() - ".class".length()); + return clazz; + } + if (!resolve) { + classData = getBytes( + path + name.replace(".", File.separator) + ".class"); + if (classData != null) { + return defineClass(null, classData, 0, classData.length); + } + } + return findSystemClass(name); + } +} + +/** + * ServerFactory -- Praktikum Experimentierkasten -- + * + * @author K. Rege + * @version 1.0 -- Factory zur Erstellung von Server Objekten + * @version 2.0 -- Dynamisches Nachladen + * @version 2.01 -- Fix deprecated Functions + */ +public class ServerFactory { + public static Class loadClass(String name) throws Exception { + MyClassLoader myClassLoader = new MyClassLoader( + MyClassLoader.class.getClassLoader()); + return myClassLoader.loadClass(name, true); + } + + public static CommandExecutor createServer(String name) throws Exception { + return (CommandExecutor) loadClass(name).getConstructor(new Class[]{}).newInstance(); + } +} \ No newline at end of file