diff --git a/README.md b/README.md
index 47aeac049f53cbd30cc4bf36fe2986840d229471..84fbe5a4f43acdc5d8f0963c20d7c3739c182d14 100644
--- a/README.md
+++ b/README.md
@@ -1,244 +1,367 @@
-# map_messages
-
-
-## Introduction 
-
-Dieses Package enthält alle benutzerdefinierten Messages, die neben den in ROS enthaltenen Messages für das Mapping und die Navigation verwendet werden. Das Package enthält keine Node oder Librabries.
-
-## Messages 
-
-
-### PointOfInterest
-
-
-Die PointOfInterest-Message enthält alle Informationen, um einen POI zu erstellen, zu verschicken und zu speichern.
-
-~~~~~~ {.cpp}
-PointOfInterest.msg
-
-
-
-int32 DEFAULT=100
-int32 VICTIM=200
-int32 OBJECT=300
-int32 GRIPPABLE_OBJECT=400
-int32 PERSON=600
-int32 ROOMBA=700
-int32 HAZARD_MATERIAL=800
-int32 START_POSITION=900
-int32 START_ORIENTATION=1000
-
-int32 type
-string name
-string remarks
-
-geometry_msgs/Pose pose
-~~~~~~
-
-* `type` bezeichnet den Typ des POIs. Es kann eine der in dieser Message vorhandenen Konstanten verwendet werden. 
-* `name` bezeichnet den Namen des POIs. Dieser Name muss einzigartig sein, da die POIs über ihren Namen unterschieden werden.
-* `remarks`: Hier können Anmerkungen reingeschrieben werden. Diese werden in der GUI angezeigt.
-* `pose` bezeichnet die Position und Orientierung des POIS im /map-Frame.
-
-
-### ModifyPOI
-
-
-ModifyPOI ist dafür zuständig, einen vorhandenen POI zu verändern.
-
-~~~~~~ {.cpp}
-ModifyPOI.msg
-
-PointOfInterest poi
-string old_name
-~~~~~~
-
-* `poi` beinhaltet den POI, durch den der alte ersetzt werden soll.
-* `old_name` bezeichnet den Namen des POIs, der verändert werden soll.
-
-
-### TargetUnreachable
-
-
-
-TargetUnreachable wird von der Navigation versendet, sobald kein Pfad mehr zu einem Ziel geplant werden kann.
-
-
-~~~~~~ {.cpp}
-TargetUnreachable.msg
-
-int8 UNKNOWN=0
-int8 TILT_OCCURED=10
-int8 GRAVE_TILT_OCCURED=15
-int8 STALL_OCCURED=20
-int8 LASER_OBSTACLE=30
-
-int8 reason
-~~~~~~
-
-* `reason` kann einen von den in dieser Message definierten Konstanten annehmen und beschreibt den Grund des Fehlers.
-
-
-### SaveMap
-
-SaveMap wird versendet, wenn eine Karte gespeichert oder geladen werden soll und beinhaltet den Dateipfad zum Kartenordner.
-
-
-~~~~~~ {.cpp}
-SaveMap.msg
-
-string filename
-~~~~~~
-
-* `filename` bezeichnet den Dateipfad zum Kartenordner.
-
-
-### PointsOfInterest
-
-
-PointsOfInterest wird verwendet, um alle aktuellen POIs zu versenden.
-
-
-~~~~~~ {.cpp}
-PointsOfInterest.msg
-
-PointOfInterest[] pois
-~~~~~~
-
-* `pois` beinhaltet einen Vektor mit allen aktuellen POIs.
-
-
-### StartNavigation
-
-
-StartNavigation ist eine von zwei Methoden, um eine Navigation zu starten. Hier wird Der POI mitgegeben, zu dem der Roboter navigieren soll.
-
-
-~~~~~~ {.cpp}
-StartNavigation.msg
-
-geometry_msgs/Pose goal
-float32 distance_to_target
-bool skip_final_turn
-bool fast_planning
-~~~~~~
-
-* `goal` beinhaltet den Ziel-POI
-* `distance_to_target`: Hier kann angegeben werden, ab welcher Distanz zum Ziel die Navigation als erfolgreich abgeschlossen wird. 
-* `skip_final_turn`: Hier kann eingestellt werden, ob der Roboter sich am Ziel-POI in Richtund der POI-Orientierung ausrichten soll oder nicht.
-* `fast_planning`: Mit dieser Option kann ein experimentelles "Schnelles Planen" eingeschaltet werden. Es werden nur Pfade geplant, die sich in einer Boundingbox zwischen Roboter und Zielposition befinden.
-
-
-### MapLayers
-
-MapLayers definiert die vorhanden Kartenebenen als Konstanten und kann zudem verwendet werden, um einzelne Ebenen ein- oder auszuschalten.
-
-
-~~~~~~ {.cpp}
-MapLayers.msg
-
-int32 SLAM_LAYER=0
-int32 MASKING_LAYER=1
-int32 KINECT_LAYER=2
-int32 SICK_LAYER=3
-
-int32 layer
-bool state
-~~~~~~
-
-* `layer` enthält die Kartenebenen-ID und kann einen Wert dern in dieser Message definierten Konstanten annehmen.
-* `state` besagt, ob die ausgewählte Kartenebene aktiviert sein soll.
-
-
-
-
-### NavigateToPOI
-
-
-NavigateToPOI ist die zweite Art eine Navigation zu starten. Anstatt das gesamte POI-Objekt mitzugeben, wird nur der Name eines bereits im map_manger vorhandenen POIs mitgegeben, der daraufhin von der Navigation nachgeschlagen wird.
-
-~~~~~~ {.cpp}
-NavigateToPOI.msg
-
-string poi_name
-float32 distance_to_target
-bool skip_final_turn
-~~~~~~
-
-* `poi_name` beschreibt den Namen des POIS, zu dem navigiert werden soll.
-* `distance_to_target` siehe StartNavigation
-* `skip_final_turn` siehe StartNavigation
-
-
-### ModifyMap
-
-
-Mit dieser Message können Bereiche in einzelnen Kartenebenen verändert werden.
-
-
-~~~~~~ {.cpp}
-ModifyMap.msg
-
-int32 FREE = 0         
-int32 BLOCKED = 100    
-int32 OBSTACLE = 99     
-int32 NOT_MASKED = -1 
-
-geometry_msgs/Point[] region
-int32 maskAction
-int32 mapLayer 
-~~~~~~
-
-* `region` beschreibt die Eckpunkte des Polygons, das maskiert werden soll.
-* `maskAction` kann einen Wert der in dieser Message definierten Konstanten annehmen. OBSTACLE  wird in der Karte rot dargestellt. Mit NOT_MASKED können bereits maskierte Bereiche wieder gelöscht werden.
-* `mapLayer` enthält die ID der zu verändernden Kartenebene. Die IDs sind in der Message MapLayers definiert.
-
-
-
-### DeletePointOfInterest
-
-Löscht einen vorhandenen POI.
-
-
-~~~~~~ {.cpp}
-DeletePointOfInterest.msg
-
-string name
-~~~~~~
-
-* `name` beschreibt den Namen des zu löschenden POIs.
-
-
-### DoMapping
-
-
-
-Mit dieser Message kann das Mapping ein- oder ausgeschaltet werden.
-
-~~~~~~ {.cpp}
-DoMapping.msg
-
-bool state
-~~~~~~
-
-* `state` beinhaltet den Zustand des Mappings (true = an, false = off).
-
-
-## Services 
-
-### GetPointsOfInterest
-
-
-Ãœber diesen Service kann die aktuelle Liste der POIs angefordert werden.
-
-
-~~~~~~ {.cpp}
-GetPointsOfInterest.srv
-
----
-PointsOfInterest poi_list
-~~~~~~
-
-* `poi_list` beinhaltet einen Vektor mit allen aktuellen POIs.
-
-
+## homer_mapnav (indigo) - 1.0.10-0
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Tue, 01 Dec 2015 23:59:02 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.9-0`
+- old version: `1.0.9-0`
+- new version: `1.0.10-0`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.9-0
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Tue, 01 Dec 2015 17:52:28 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.8-0`
+- old version: `1.0.8-0`
+- new version: `1.0.9-0`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.8-0
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Sun, 29 Nov 2015 23:46:05 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.7-0`
+- old version: `1.0.7-0`
+- new version: `1.0.8-0`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.7-0
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Sat, 28 Nov 2015 22:58:14 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.6-0`
+- old version: `1.0.6-0`
+- new version: `1.0.7-0`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.6-0
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Fri, 27 Nov 2015 14:33:00 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.5-0`
+- old version: `1.0.5-0`
+- new version: `1.0.6-0`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.5-0
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Tue, 24 Nov 2015 13:28:24 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.4-0`
+- old version: `1.0.4-0`
+- new version: `1.0.5-0`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.4-0
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Fri, 20 Nov 2015 02:07:32 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.2-0`
+- old version: `1.0.2-0`
+- new version: `1.0.4-0`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.2-0
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav` on `Fri, 20 Nov 2015 00:10:16 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.1-5`
+- old version: `1.0.1-5`
+- new version: `1.0.2-0`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.1-5
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Tue, 17 Nov 2015 15:51:44 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.1-2`
+- old version: `1.0.1-4`
+- new version: `1.0.1-5`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.1-4
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Tue, 17 Nov 2015 15:42:59 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.1-2`
+- old version: `1.0.1-3`
+- new version: `1.0.1-4`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.1-3
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Tue, 17 Nov 2015 15:29:03 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.1-2`
+- old version: `1.0.1-2`
+- new version: `1.0.1-3`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.10`
+- rosdep version: `0.11.4`
+- rosdistro version: `0.4.2`
+- vcstools version: `0.1.38`
+
+
+## homer_mapnav (indigo) - 1.0.1-2
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Fri, 09 Oct 2015 09:48:20 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.1-1`
+- old version: `1.0.1-1`
+- new version: `1.0.1-2`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.7`
+- rosdep version: `0.11.1`
+- rosdistro version: `0.4.1`
+- vcstools version: `0.1.36`
+
+
+## homer_mapnav (indigo) - 1.0.1-1
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Fri, 25 Sep 2015 06:07:06 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- rosdistro version: `1.0.1-0`
+- old version: `1.0.1-0`
+- new version: `1.0.1-1`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.7`
+- rosdep version: `0.11.1`
+- rosdistro version: `0.4.1`
+- vcstools version: `0.1.36`
+
+
+## homer_mapnav (indigo) - 1.0.1-0
+
+The packages in the `homer_mapnav` repository were released into the `indigo` distro by running `/usr/bin/bloom-release --rosdistro indigo --track indigo homer_mapnav --edit` on `Tue, 15 Sep 2015 09:11:11 -0000`
+
+These packages were released:
+- `homer_map_manager`
+- `homer_mapnav_msgs`
+- `homer_mapping`
+- `homer_nav_libs`
+- `homer_navigation`
+
+Version of package(s) in repository `homer_mapnav`:
+- upstream repository: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+- release repository: unknown
+- rosdistro version: `null`
+- old version: `null`
+- new version: `1.0.1-0`
+
+Versions of tools used:
+- bloom version: `0.5.20`
+- catkin_pkg version: `0.2.7`
+- rosdep version: `0.11.1`
+- rosdistro version: `0.4.1`
+- vcstools version: `0.1.36`
+
+
+# mapping and navigation
+
+Here you can find the homer mapping and navigation packages
diff --git a/homer_map_manager/CHANGELOG.rst b/homer_map_manager/CHANGELOG.rst
new file mode 100644
index 0000000000000000000000000000000000000000..6c54e90a5fa124e87222f4eb1d070a1ad0f1ad42
--- /dev/null
+++ b/homer_map_manager/CHANGELOG.rst
@@ -0,0 +1,62 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package homer_map_manager
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+1.0.11 (2015-12-02)
+-------------------
+* added std_srvs dependency
+* Contributors: Niklas Yann Wettengel
+
+1.0.10 (2015-12-02)
+-------------------
+* added yaml-cpp dependency
+* Contributors: Niklas Yann Wettengel
+
+1.0.9 (2015-12-01)
+------------------
+* added sdl-image dependency
+* Contributors: Niklas Yann Wettengel
+
+1.0.8 (2015-11-30)
+------------------
+* added sdl dependency
+* Contributors: Niklas Yann Wettengel
+
+1.0.7 (2015-11-28)
+------------------
+* updated changelog
+* updated catkin_depends
+* Contributors: Niklas Yann Wettengel
+
+* updated catkin_depends
+* Contributors: Niklas Yann Wettengel
+
+1.0.6 (2015-11-27)
+------------------
+* removed env HOMER_DIR from CMakeLists.txt
+* Contributors: Niklas Yann Wettengel
+
+1.0.5 (2015-11-24)
+------------------
+
+1.0.4 (2015-11-20)
+------------------
+* changed build dependency from libeigen3-dev to eigen
+* Contributors: Niklas Yann Wettengel
+
+1.0.3 (2015-11-20)
+------------------
+* added libeigen3-dev build dependency
+* Contributors: Niklas Yann Wettengel
+
+1.0.2 (2015-11-20)
+------------------
+* added Maintainers
+* added cmake_modules build dependency
+* added raphael as maintainer
+* Contributors: Niklas Yann Wettengel, Raphael Memmesheimer
+
+1.0.1 (2015-09-08)
+------------------
+* init
+* Contributors: Raphael Memmesheimer
diff --git a/homer_map_manager/CMakeLists.txt b/homer_map_manager/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6b3b07b12a3a86a72092437d02454f1125489cce
--- /dev/null
+++ b/homer_map_manager/CMakeLists.txt
@@ -0,0 +1,39 @@
+cmake_minimum_required(VERSION 2.8.3)
+project(homer_map_manager)
+
+find_package(catkin REQUIRED COMPONENTS roscpp roslib tf homer_mapnav_msgs homer_nav_libs std_srvs cmake_modules)
+
+find_package( Eigen REQUIRED )
+
+catkin_package(
+	CATKIN_DEPENDS
+		roscpp
+		roslib
+		tf
+		homer_mapnav_msgs
+		homer_nav_libs
+		std_srvs
+)
+
+include_directories(
+	${catkin_INCLUDE_DIRS}
+	${EIGEN_INCLUDE_DIRS}
+)
+
+add_subdirectory(${PROJECT_SOURCE_DIR}/src/Managers)
+add_subdirectory(${PROJECT_SOURCE_DIR}/src/MapIO)
+
+add_executable(map_manager src/map_manager_node.cpp)
+
+target_link_libraries(
+	map_manager
+		${catkin_LIBRARIES}
+		Managers
+		image_io
+)
+
+add_dependencies(
+	map_manager
+		${catkin_EXPORTED_TARGETS}
+		homer_mapnav_msgs_gencpp
+)
diff --git a/homer_map_manager/README.md b/homer_map_manager/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..39a46914d0f3b5b945ca0675ead28a7947da2370
--- /dev/null
+++ b/homer_map_manager/README.md
@@ -0,0 +1,42 @@
+# map_manager
+
+## Known Issues / Todo's 
+
+Aus bisher ungeklärten Gründen kann es in seltenen Fällen passieren, dass der map_manager die Verbindung zum roscore verliert. In diesem Fall muss er durch rosrun map_manager map_manager neugestartet werden.
+
+
+## Introduction 
+
+Der map_manager ist der Mittelpunkt der Kommunikation zwischen homer_mapping, homer_navigation, GUI und die Spiel-Nodes.
+Das Zusammenspiel dieser Nodes ist im Screenshot des rqt_graphs zu sehen.
+
+![rqt_graph](images/rosgraph.png)
+
+Er verwaltet die aktuell durch das mapping erstellte Karte sowie weitere Kartebenen. Aktuell sind das die SLAM-Karte, die aktuellen Laserdaten in einer weiteren Ebene und eine Masking-Ebene, in der mit Hilfe der GUI Hindernisse oder freie Flächen in die Karte gezeichnet werden können.
+Jedes mal, wenn eine SLAM-Karte von der mapping-Node geschickt wird, wird diese mit allen anderen Karteneben überschrieben (in der Reihenfolge SLAM, Masking, Laserdaten) und als eine zusammengefügte Karte versendet.
+Zudem verwaltet der map_manager alle erstellten Points Of Interest (POIs), die z.B. als Ziele für die Navigation verwendet werden.
+Die Node ist außerdem zuständig für das Speichern und Laden der Kartenebenen und der POIs. Dabei wird die SLAM-Ebene sowie die Masking-Ebene berücksichtigt.
+
+
+
+## Topics 
+
+
+#### Publisher 
+* `/map`: Die aktuelle Karte, die aus allen aktivierten Kartenebenen zusammengesetzt ist. Diese wird in der GUI angezeigt und für die Navigation verwendet.
+* `/map_manager/poi_list`: Verschickt einen Vektor mit allen aktuellen POIs. Dieser Publisher wird immer ausgelöst, sobald sich ein POI ändert oder ein neuer hinzugefügt wird.
+* `/map_manager/loaded_map`: Wenn eine Karte geladen wird, wird über dieses Topic die geladene SLAM-Ebene an die homer_mapping-Node verschickt.
+* `/map_manager/mask_slam`: Über die GUI kann die SLAM-Map verändert werden. Diese Modifizierungen werden über dieses Topic vom map_manager an das homer_mapping versendet.
+
+#### Subscriber
+
+* `/homer_mapping/slam_map (nav_msgs/OccupancyGrid)`: Hierüber wird die aktuelle SLAM-Map empfangen.
+* `/map_manager/save_map (map_messages/SaveMap)`: Hierüber wird der Befehl zum Speichern der Karte inklusive des Dateinamens empfangen.
+* `/map_manager/load_map (map_messages/SaveMap)`: Hiermit wird eine Karte geladen und alle bisherigen Kartenebenen durch die geladenen ersetzt.
+* `/map_manager/toggle_map_visibility (map_messages/MapLayers)`: Hierüber können einzelne Kartenebenen aktiviert beziehungsweise deaktiviert werden. Deaktivierte werden nicht mehr beim Zusammenfügen der Karte berücksichtigt und dementsprechend auch nicht in der GUI angezeigt sowie für die Navigation verwendet.
+* `/scan (nav_msgs/LaserScan)`: Der aktuelle Laserscan, der in die Laserscan-Ebene gezeichnet wird.
+* `/map_manager/add_POI (map_messages/PointOfInterest)`: Hierüber kann ein POI hinzugefügt werden.
+* `/map_manager/modify_POI (map_messages/ModifyPOI)`: Hierüber kann ein vorhandener POI verändert werden (Name, Position,...)
+* `/map_manager/delete_POI (map_messages/DeletePointOfInterest)`: Hierüber kann ein vorhander POI gelöscht werden.
+* `/map_manager/modify_map (map_messages/ModifyMap)`: Über dieses Topic werden die Koordinaten der Polygone verschickt, die über die GUI maskiert wurden. Außerdem wird die Kartenebene mitgeteilt, die verändet werden soll (SLAM oder Masking-Ebene).
+* `/map_manager/reset_maps (std_msgs/Empty)`: Hierüber werden alle Kartenebenen zurückgesetzt.
\ No newline at end of file
diff --git a/homer_map_manager/config/custom.xml b/homer_map_manager/config/custom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1686162e4d67d213b6202bd129c0d6d7c366e2da
--- /dev/null
+++ b/homer_map_manager/config/custom.xml
@@ -0,0 +1,3 @@
+<map_manager>
+
+</map_manager>
diff --git a/homer_map_manager/config/default.xml b/homer_map_manager/config/default.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bdd881518b61270ebfd567b924f8f743435fcf4a
--- /dev/null
+++ b/homer_map_manager/config/default.xml
@@ -0,0 +1,327 @@
+<default>
+
+<!-- MAPPING SETTINGS -->
+	<Map>
+		<!-- Path to a default map file that is loaded at start (e.g. maps/test.map). If value is not set, no map is loaded -->
+		<value name="sDefaultMapFile" value=""/>
+		<!--	Size of the map in x and y direction. -->
+		<!--	Note: the robot's initial pose is in the middle
+					of the map, so choose an adequate size.
+					i.e. if you set it to 2000, the map size will be
+					2000 * 2000 mm and the robot's start position is at (1000, 1000) -->
+		<!-- Note: values > 50000 may cause segmentation faults -->
+		<value name="iSize" value="35000"/>
+		<!--	Size of one cell of the map in mm.
+					The grid map will be of size iSize/iCellSize+1 -->
+		<value name="iCellSize" value="50"/>
+		<!-- Minimum occupancy probability for treating a map pixel as obstacle -->
+		<value name="fMinObstacleOccupancy" value="0.5"/>
+		<!-- This variabe is true, if dynamic obstacles are integrated in the map. -->
+		<value name="bDynamicMapping" value="1"/>
+		<!-- This variabe is true, if a loaded map shall be updated by the current laserdata.
+				 If it is false, the map is just used for localization. -->
+		<value name="bUpdateLoadedMap" value="0"/>
+		<!-- Minimum distance (in mm) between two samples for probability calcualation
+				 Values above 1.0 speed things up, but can result in lower accuracy -->
+		<value name="fMeasureSamplingStep" value="150.0"/>
+		<!-- Enable checking to avoid matching front- and backside of obstacles, e.g. walls.
+				 Useful when creating high resolution maps. -->
+		<value name="bBacksideChecking" value="0"/>
+		<!-- Leaves a small border around obstacles unchanged when inserting a laser scan.
+				 Useful when creating high resolution maps. -->
+		<value name="bObstacleBorders" value="1"/>
+		<!-- Options for map generation based on the sonar sensors -->
+		<Sonar>
+			<!-- If the sonar sensors detect an obstacle at a larger distance than this value,
+					 only a free beam is inserted into the map, the position of the detected obstacle
+					 is left blank. -->
+			<value name="fMaxTrustedObstacleDistance" value="800.0"/>
+			<!-- Minimal movement of the robot [deg/mm] when inserting a new measurement -->
+			<value name="fMinMoveAngle" value="2.0"/>
+			<value name="fMinMoveDistance" value="5.0"/>
+			<!-- Minimal difference between last and current sonar measurement when inserting -->
+			<value name="iMinSonarDiff" value="50"/>
+		</Sonar>
+		<Geotiff>
+			<!-- Standard file name for geotiff export
+					 As the filename is printed on the geotiff map, a reasonable filename has to be choosen
+					 During a competition this value should be set for providing backup savings-->
+			<value name="sStandardFileName" value="Resko.tiff"/>
+			<!-- Number of necessary observations of a cell to be displayed without transparency.
+					 Transparency is approached via different gray level.-->
+			<value name="iTrancparencyThreshold" value="10"/>
+			<!-- Threshold to mark an occupied cell as an obstacle in the geotiff map.
+					 In percentage of reliability. -->
+			<value name="iObstacleThreshold" value="90"/>
+			<Visibility>
+				<!-- 1 if the inaccessible regions shall be displayed in geotiff. -->
+				<value name="bShowInaccessibleRegions" value="1"/>
+				<!-- 1 if the navigation map shall be displayed in geotiff. -->
+				<value name="bShowNavigationMap" value="1"/>
+				<!-- 1 if the robot path shall be displayed in geotiff. -->
+				<value name="bShowRobotPath" value="1"/>
+				<!-- Sizes of the geotiff map.
+						 Attention: all this values influence the map resolution -->
+			</Visibility>
+			<Sizes>
+				<!-- The width (in mm) of one forground grid cell in an exported map. -->
+				<value name="iGridWidth" value="500"/>
+				<!-- Thickness of the grid in the background of the explored area in mm -->
+				<value name="iExploredAreaGrid" value="10"/>
+				<!-- Size of the victim sign, radius in mm -->
+				<value name="iVictimLocation" value="350"/>
+				<!-- Size of the hazard sign, radius in mm -->
+				<value name="iHazardLocation" value="400"/>
+				<!-- Thickness of the robot path in mm -->
+				<value name="iRobotPath" value="20"/>
+			</Sizes>
+			<!-- Used color schemas for geotiff export. -->
+			<ColorSchema>
+				<NavigationMap>
+					<value name="iRed" value="160"/>
+					<value name="iGreen" value="230"/>
+					<value name="iBlue" value="160"/>
+				</NavigationMap>
+				<VictimLocation>
+					<value name="iRed" value="240"/>
+					<value name="iGreen" value="10"/>
+					<value name="iBlue" value="10"/>
+				</VictimLocation>
+				<HazardLocation>
+					<value name="iRed" value="255"/>
+					<value name="iGreen" value="100"/>
+					<value name="iBlue" value="30"/>
+				</HazardLocation>
+				<InitialRobotPosition>
+					<value name="iRed" value="250"/>
+					<value name="iGreen" value="200"/>
+					<value name="iBlue" value="0"/>
+				</InitialRobotPosition>
+				<RobotPath>
+					<value name="iRed" value="120"/>
+					<value name="iGreen" value="0"/>
+					<value name="iBlue" value="140"/>
+				</RobotPath>
+				<Obstacle>
+					<value name="iRed" value="0"/>
+					<value name="iGreen" value="40"/>
+					<value name="iBlue" value="120"/>
+				</Obstacle>
+				<FileInfo>
+					<value name="iRed" value="0"/>
+					<value name="iGreen" value="50"/>
+					<value name="iBlue" value="140"/>
+				</FileInfo>
+				<!-- Checkerbord pattern of two colors in the background of the unexplored region -->
+				<UnexploredAreaGrid>
+					<Light>
+						<value name="iRed" value="170"/>
+						<value name="iGreen" value="170"/>
+						<value name="iBlue" value="171"/>
+					</Light>
+					<Dark>
+						<value name="iRed" value="160"/>
+						<value name="iGreen" value="160"/>
+						<value name="iBlue" value="161"/>
+					</Dark>
+				</UnexploredAreaGrid>
+				<!-- Grid lines painted in the background in the explored region -->
+				<ExploredAreaGrid>
+					<value name="iRed" value="0"/>
+					<value name="iGreen" value="0"/>
+					<value name="iBlue" value="1"/>
+				</ExploredAreaGrid>
+			</ColorSchema>
+		</Geotiff>
+	</Map>
+
+	<!-- PARTICLE FILTER SETTINGS -->
+	<ParticleFilter>
+		<HyperSlamFilter>
+			<!-- Number of particle filters to use (hyper particles) -->
+			<value name="iParticleFilterNum" value="1"/>
+			<!-- Threshold for deleting particle filters (quotient between best/worst contrast) -->
+			<value name="fDeletionThreshold" value="0.98"/>
+		</HyperSlamFilter>
+		<!--	Number of particles to use -->
+		<value name="iParticleNum" value="1000"/>
+		<!--	The maximal rotation if mapping is performed. If the rotation is
+					bigger, mapping is interrupted.
+					This value may depend on the computing power, because it is influenced
+					by the size of time intervals of mapping. 0.35-->
+		<value name="fMaxRotationPerSecond" value="1.0"/> <!-- 0.55-->
+		<!-- Minimum time to wait between two mapping/localization steps -->
+		<value name="iWaitTime" value="500"/>
+		<!-- The map is only updated when the robot has turned a minimal angle (iUpdateMinMoveAngle),
+				 has moved a minimal distance (iUpdateMinMoveDist) or a maximal time has passed( iMaxUpdateInterval ) -->
+		<value name="iUpdateMinMoveAngle" value="5"/>
+		<value name="iUpdateMinMoveDist" value="100"/>
+		<value name="iMaxUpdateInterval" value="2000"/>
+		<!-- Handle all incoming sensordata messages (AlwaysDeliver - value="1" - for SLAM benchmark) or only newest messages (keeponlynewest - value="0" - default) -->
+		<value name="bProcessAllMeasurements" value="0"/>
+		<!-- ASSUMED ERROR VALUES OF MOTION CALCULATION -->
+		<ErrorValues>
+			<!--	Rotation error while rotating in percent - old value: 50 20-->
+			<value name="fRotationErrorRotating" value="5.0"/>
+			<!--	Rotation error while translating in degrees per meter - old value: 5 2.0-->
+			<value name="fRotationErrorTranslating" value="5.0"/>
+			<!--	Translation error while translating in percent - old value: 15-25-->
+			<value name="fTranslationErrorTranslating" value="15.0"/>
+			<!--	Translation error while rotating in mm per degree - old value: 0.0-->
+			<value name="fTranslationErrorRotating" value="0.0"/>
+			<!--	Move jitter while turning in mm per degree - old value: 45800-->
+			<value name="fMoveJitterWhileTurning" value="30000.0"/>
+		</ErrorValues>
+		<!-- SETTINGS FOR SCAN MATCHING-->
+			<!-- SETTINGS FOR SCAN MATCHING-->
+			<ScanMatching>
+				<!-- If this variabe is true, scan matching is performed to improve the odometry data.
+						 In a dynamic environment scan matching causes grave errors, especially if the
+						 moving objects are close to the robot -->
+				<value name="bActivated" value="0"/>
+				<!-- Ignore odometry if true -->
+				<value name="bTest" value="0"/>
+				<!-- Used algorithm for scan matching.
+							1 = ICP, 2 = IDC, 3 = MbICP -->
+				<value name="iUsedAlgorithm" value="3"/>
+				<!--	Minimal point distance after reducing the number of scan points for
+							scan matching.
+							Value in mm. Value 0.0 means it is switched off. Standard: 200.0-->
+				<value name="fReducedPointDist" value="100.0"/>
+				<!--	 Maximal distance of corresponding scan points, which are used
+							 for scan matching. Value in mm. Standard: 300.0-->
+				<value name="fMaxCorrespondenceDiff" value="300.0"/>
+				<!--	 Difference of scan angles which is considered to find
+							 corresponding scan points for scan matching.
+							 Value in degree. Standard: 90.0-->
+					<value name="fMaxAngleDiff" value="40.0"/>
+				<!--	Maximal distance of points in a cluster which is considered in
+							scan matching. Value in mm. 100.0-->
+				<value name="fMaxClusterDist" value="100.0"/>
+				<!--	Minimal diameter of a cluster of scan points which is considered
+							in scan matching.
+							Value in mm. Value 1.0 means it is switched of. Standard: 200.0-->
+				<value name="fMinClusterSize" value="200.0"/> <!--!!!!!!-->
+				<LineExtraction>
+					<!-- If this variable is true, the scan matcher works line-based.
+							 If it is false, it works on the raw scan data.-->
+					<value name="bActivated" value="0"/>
+					<!-- Maximal distance of two consecutive points of a line -->
+					<value name="fMaxPointDistance" value="50.0"/>
+					<!-- Minimal number of points on a line -->
+					<value name="iMinPointsOnLine" value="10"/>
+					<!-- Minimal length of a line -->
+					<value name="fMinLength" value="100.0"/>
+					<!-- Maximal standard deviation of all points of a line-->
+					<value name="fMaxSigma" value="15.0"/>
+				</LineExtraction>
+				<MbICP>
+					<!--Factor which influences the behavior of the applied metric distance.
+							It describes the relation between rotation and translation.
+							If it is set to inifity, the behaviour of the MbIcpScanMatcher draws near to the IcpScanMatcher.
+							The value must be > 0. -->
+					<value name="fMetricFactor" value="1800.0"/>
+				</MbICP>
+			</ScanMatching>
+	</ParticleFilter>
+
+	<Kinect>
+		<!-- Settings for the kinect rgb camera -->
+		<Camera>
+			<!-- Note: sColorFormat can be RGB8 or Y8UV8 -->
+			<value name="sColorFormat" value="RGB8"/>
+		</Camera>
+
+                <!-- Determines whether to use Pointcloud(0) or Image(1) messages to compute our RGBDepthM -->
+                <value name="bUseImageTransport" value="1" />
+
+                <!-- Determines whether to use Image compression for transport of Images
+                        If true(1) be sure to add a compression value (in percent) -->
+                <value name="bCompressImages" value="0" />
+                <value name="iCompressionValue" value="100" />
+
+		<value name="bSendContinuousDepthData" value="1" />
+
+		<!-- Determines how often RGBDepthDataM is updated -->
+		<value name="iIdleInterval" value="250" />
+		<value name="iTofIdleInterval" value="50" />
+
+
+		<!-- If set to true, RGBDepthM will be kept for painting and a 3DMap will be created
+			Always set to false, because of memory usage. -->
+		<value name="bCreate3DMap" value="0" />
+
+		<!-- 1: We are using the kinect instead of Laser Scanner data, affects PeopleTrackingModule (list may be incomplete)-->
+		<value name="bUseKinect" value="1" />
+		<value name="bUseKinectTracking" value="0" />
+		<value name="fTiltAngle" value="0"/>
+
+		<!-- If bMaskObstacles is true, then 3D Scan points with height greater
+				 fMinObstacleHeight are marked inaccessible in the map -->
+                <value name="bMaskObstacles" value="1"/>
+
+		<!--value name="fMinObstacleHeight" value="140"/-->
+   		<value name="fMinObstacleHeight" value="70"/>
+		<!-- Threshold for the maximum distance of points that are candidates as obstacles.
+			Needed because accuracy of the Kinect is decreasing by distance -->
+		<value name="fMaxObstacleFromRobotDistance" value="2000"/>
+		<value name="fMinObstacleFromRobotDistance" value="300"/>
+
+		<!-- How long is an obstcle saved after his last appearance in the kinect data -->
+		<value name="iObstacleSaveTime" value="10"/>
+                <value name="bDoKinectMappingWithTemporaryObstacles" value="1"/>
+		<!-- How often must an obstacle appear before it is known as an real obstacle -->
+		<value name="iObstacleMinAppearance" value="5"/>
+	</Kinect>
+
+	<SelfLocalization>
+		<value name="fScatterVarXY" value="50"/>
+		<!-- scattering variance for pose orientation in radiants -->
+		<value name="fScatterVarTheta" value="0.2"/>
+	</SelfLocalization>
+
+	<LaserScanners>
+		<SickLMS100>
+			<!-- Use this device in ActiveLaserScannerModule? -->
+			<value name="bActiveLaserScanner" value="0"/>
+			<!-- Is the device used for navigation? -->
+			<value name="bPassiveScan" value="1"/>
+			<!--	the ip and port the scanner is providing -->
+			<value name="sIP" value="169.254.97.144"/>
+			<value name="iPort" value="2111"/>
+			<!--	position of laserscanner in robot coordinates in mm -->
+			<value name="fPositionX" value="240"/>
+			<value name="fPositionY" value="0.0"/>
+			<value name="fPositionZ" value="40"/>
+			<!-- rotation radiuses of laserscanner beam in mm -->
+			<value name="fRotateRadiusY" value="0"/>
+			<value name="fRotateRadiusX" value="0"/>
+			<!--	orientation of laserscanner in robot coordinates
+						in degrees (counter clockwise) -->
+			<value name="fOrientation" value="-0.5"/>
+			<!--	valid maximum range (mm) -->
+			<value name="iValidMaxRange" value="30000"/>
+			<!--	valid minimum range (mm) -->
+			<value name="iValidMinRange" value="150"/>
+			<!--	minimum distance to be classified as free in case of errorneous measurement -->
+			<value name="iFreeReadingDistance" value="800"/>
+			<!--	number of scan points old 541-->
+			<value name="iScanSteps" value="1081"/>
+			<!--	scan angle in degrees -->
+			<value name="fScanAngle" value="270.0"/>
+			<!--	starting angle of one scan in degrees -->
+			<value name="fStartAngle" value="-135.0"/>
+			<value name="fObstacleThreshold" value="10"/>
+			<value name="iNumOffsetSteps" value="110" />
+			<value name="iNumBottomOffsetSteps" value="0"/>
+			<value name="iNumTopOffsetSteps" value="100"/>
+					<!--	iNumClearSlots for a 270Degree scanner. Only 180 Degree are used. Left and right 45 degree are deaktivated. For 0.5 resolution with 541 scanpoints we will need 90 points at each side masked. For security the Value for 0.5Degree Resolution is 100. If we use a 0.25 resulution we need 45Degree to masked out that means 180 Points + 10 Points security = 190 Points	 -->
+			<value name="iNumClearSlots" value="190"/>
+			<value name="sId" value="FrontLRF"/>
+			<!-- Set to 1 if scanner is mounted upside down -->
+			<value name="bMirror" value="1"/>
+		</SickLMS100>
+	</LaserScanners>
+
+
+</default>
diff --git a/homer_map_manager/config/merged.xml b/homer_map_manager/config/merged.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3f6a3b31a2b3a376d90796217193aad1359a3eab
--- /dev/null
+++ b/homer_map_manager/config/merged.xml
@@ -0,0 +1,339 @@
+<?xml version="1.0" standalone="no" ?>
+
+<MergedConfig>
+
+<default>
+
+<!-- MAPPING SETTINGS -->
+	<Map>
+		<!-- Path to a default map file that is loaded at start (e.g. maps/test.map). If value is not set, no map is loaded -->
+		<value name="sDefaultMapFile" value=""/>
+		<!--	Size of the map in x and y direction. -->
+		<!--	Note: the robot's initial pose is in the middle
+					of the map, so choose an adequate size.
+					i.e. if you set it to 2000, the map size will be
+					2000 * 2000 mm and the robot's start position is at (1000, 1000) -->
+		<!-- Note: values > 50000 may cause segmentation faults -->
+		<value name="iSize" value="35000"/>
+		<!--	Size of one cell of the map in mm.
+					The grid map will be of size iSize/iCellSize+1 -->
+		<value name="iCellSize" value="50"/>
+		<!-- Minimum occupancy probability for treating a map pixel as obstacle -->
+		<value name="fMinObstacleOccupancy" value="0.5"/>
+		<!-- This variabe is true, if dynamic obstacles are integrated in the map. -->
+		<value name="bDynamicMapping" value="1"/>
+		<!-- This variabe is true, if a loaded map shall be updated by the current laserdata.
+				 If it is false, the map is just used for localization. -->
+		<value name="bUpdateLoadedMap" value="0"/>
+		<!-- Minimum distance (in mm) between two samples for probability calcualation
+				 Values above 1.0 speed things up, but can result in lower accuracy -->
+		<value name="fMeasureSamplingStep" value="150.0"/>
+		<!-- Enable checking to avoid matching front- and backside of obstacles, e.g. walls.
+				 Useful when creating high resolution maps. -->
+		<value name="bBacksideChecking" value="0"/>
+		<!-- Leaves a small border around obstacles unchanged when inserting a laser scan.
+				 Useful when creating high resolution maps. -->
+		<value name="bObstacleBorders" value="1"/>
+		<!-- Options for map generation based on the sonar sensors -->
+		<Sonar>
+			<!-- If the sonar sensors detect an obstacle at a larger distance than this value,
+					 only a free beam is inserted into the map, the position of the detected obstacle
+					 is left blank. -->
+			<value name="fMaxTrustedObstacleDistance" value="800.0"/>
+			<!-- Minimal movement of the robot [deg/mm] when inserting a new measurement -->
+			<value name="fMinMoveAngle" value="2.0"/>
+			<value name="fMinMoveDistance" value="5.0"/>
+			<!-- Minimal difference between last and current sonar measurement when inserting -->
+			<value name="iMinSonarDiff" value="50"/>
+		</Sonar>
+		<Geotiff>
+			<!-- Standard file name for geotiff export
+					 As the filename is printed on the geotiff map, a reasonable filename has to be choosen
+					 During a competition this value should be set for providing backup savings-->
+			<value name="sStandardFileName" value="Resko.tiff"/>
+			<!-- Number of necessary observations of a cell to be displayed without transparency.
+					 Transparency is approached via different gray level.-->
+			<value name="iTrancparencyThreshold" value="10"/>
+			<!-- Threshold to mark an occupied cell as an obstacle in the geotiff map.
+					 In percentage of reliability. -->
+			<value name="iObstacleThreshold" value="90"/>
+			<Visibility>
+				<!-- 1 if the inaccessible regions shall be displayed in geotiff. -->
+				<value name="bShowInaccessibleRegions" value="1"/>
+				<!-- 1 if the navigation map shall be displayed in geotiff. -->
+				<value name="bShowNavigationMap" value="1"/>
+				<!-- 1 if the robot path shall be displayed in geotiff. -->
+				<value name="bShowRobotPath" value="1"/>
+				<!-- Sizes of the geotiff map.
+						 Attention: all this values influence the map resolution -->
+			</Visibility>
+			<Sizes>
+				<!-- The width (in mm) of one forground grid cell in an exported map. -->
+				<value name="iGridWidth" value="500"/>
+				<!-- Thickness of the grid in the background of the explored area in mm -->
+				<value name="iExploredAreaGrid" value="10"/>
+				<!-- Size of the victim sign, radius in mm -->
+				<value name="iVictimLocation" value="350"/>
+				<!-- Size of the hazard sign, radius in mm -->
+				<value name="iHazardLocation" value="400"/>
+				<!-- Thickness of the robot path in mm -->
+				<value name="iRobotPath" value="20"/>
+			</Sizes>
+			<!-- Used color schemas for geotiff export. -->
+			<ColorSchema>
+				<NavigationMap>
+					<value name="iRed" value="160"/>
+					<value name="iGreen" value="230"/>
+					<value name="iBlue" value="160"/>
+				</NavigationMap>
+				<VictimLocation>
+					<value name="iRed" value="240"/>
+					<value name="iGreen" value="10"/>
+					<value name="iBlue" value="10"/>
+				</VictimLocation>
+				<HazardLocation>
+					<value name="iRed" value="255"/>
+					<value name="iGreen" value="100"/>
+					<value name="iBlue" value="30"/>
+				</HazardLocation>
+				<InitialRobotPosition>
+					<value name="iRed" value="250"/>
+					<value name="iGreen" value="200"/>
+					<value name="iBlue" value="0"/>
+				</InitialRobotPosition>
+				<RobotPath>
+					<value name="iRed" value="120"/>
+					<value name="iGreen" value="0"/>
+					<value name="iBlue" value="140"/>
+				</RobotPath>
+				<Obstacle>
+					<value name="iRed" value="0"/>
+					<value name="iGreen" value="40"/>
+					<value name="iBlue" value="120"/>
+				</Obstacle>
+				<FileInfo>
+					<value name="iRed" value="0"/>
+					<value name="iGreen" value="50"/>
+					<value name="iBlue" value="140"/>
+				</FileInfo>
+				<!-- Checkerbord pattern of two colors in the background of the unexplored region -->
+				<UnexploredAreaGrid>
+					<Light>
+						<value name="iRed" value="170"/>
+						<value name="iGreen" value="170"/>
+						<value name="iBlue" value="171"/>
+					</Light>
+					<Dark>
+						<value name="iRed" value="160"/>
+						<value name="iGreen" value="160"/>
+						<value name="iBlue" value="161"/>
+					</Dark>
+				</UnexploredAreaGrid>
+				<!-- Grid lines painted in the background in the explored region -->
+				<ExploredAreaGrid>
+					<value name="iRed" value="0"/>
+					<value name="iGreen" value="0"/>
+					<value name="iBlue" value="1"/>
+				</ExploredAreaGrid>
+			</ColorSchema>
+		</Geotiff>
+	</Map>
+
+	<!-- PARTICLE FILTER SETTINGS -->
+	<ParticleFilter>
+		<HyperSlamFilter>
+			<!-- Number of particle filters to use (hyper particles) -->
+			<value name="iParticleFilterNum" value="1"/>
+			<!-- Threshold for deleting particle filters (quotient between best/worst contrast) -->
+			<value name="fDeletionThreshold" value="0.98"/>
+		</HyperSlamFilter>
+		<!--	Number of particles to use -->
+		<value name="iParticleNum" value="1000"/>
+		<!--	The maximal rotation if mapping is performed. If the rotation is
+					bigger, mapping is interrupted.
+					This value may depend on the computing power, because it is influenced
+					by the size of time intervals of mapping. 0.35-->
+		<value name="fMaxRotationPerSecond" value="1.0"/> <!-- 0.55-->
+		<!-- Minimum time to wait between two mapping/localization steps -->
+		<value name="iWaitTime" value="500"/>
+		<!-- The map is only updated when the robot has turned a minimal angle (iUpdateMinMoveAngle),
+				 has moved a minimal distance (iUpdateMinMoveDist) or a maximal time has passed( iMaxUpdateInterval ) -->
+		<value name="iUpdateMinMoveAngle" value="5"/>
+		<value name="iUpdateMinMoveDist" value="100"/>
+		<value name="iMaxUpdateInterval" value="2000"/>
+		<!-- Handle all incoming sensordata messages (AlwaysDeliver - value="1" - for SLAM benchmark) or only newest messages (keeponlynewest - value="0" - default) -->
+		<value name="bProcessAllMeasurements" value="0"/>
+		<!-- ASSUMED ERROR VALUES OF MOTION CALCULATION -->
+		<ErrorValues>
+			<!--	Rotation error while rotating in percent - old value: 50 20-->
+			<value name="fRotationErrorRotating" value="5.0"/>
+			<!--	Rotation error while translating in degrees per meter - old value: 5 2.0-->
+			<value name="fRotationErrorTranslating" value="5.0"/>
+			<!--	Translation error while translating in percent - old value: 15-25-->
+			<value name="fTranslationErrorTranslating" value="15.0"/>
+			<!--	Translation error while rotating in mm per degree - old value: 0.0-->
+			<value name="fTranslationErrorRotating" value="0.0"/>
+			<!--	Move jitter while turning in mm per degree - old value: 45800-->
+			<value name="fMoveJitterWhileTurning" value="30000.0"/>
+		</ErrorValues>
+		<!-- SETTINGS FOR SCAN MATCHING-->
+			<!-- SETTINGS FOR SCAN MATCHING-->
+			<ScanMatching>
+				<!-- If this variabe is true, scan matching is performed to improve the odometry data.
+						 In a dynamic environment scan matching causes grave errors, especially if the
+						 moving objects are close to the robot -->
+				<value name="bActivated" value="0"/>
+				<!-- Ignore odometry if true -->
+				<value name="bTest" value="0"/>
+				<!-- Used algorithm for scan matching.
+							1 = ICP, 2 = IDC, 3 = MbICP -->
+				<value name="iUsedAlgorithm" value="3"/>
+				<!--	Minimal point distance after reducing the number of scan points for
+							scan matching.
+							Value in mm. Value 0.0 means it is switched off. Standard: 200.0-->
+				<value name="fReducedPointDist" value="100.0"/>
+				<!--	 Maximal distance of corresponding scan points, which are used
+							 for scan matching. Value in mm. Standard: 300.0-->
+				<value name="fMaxCorrespondenceDiff" value="300.0"/>
+				<!--	 Difference of scan angles which is considered to find
+							 corresponding scan points for scan matching.
+							 Value in degree. Standard: 90.0-->
+					<value name="fMaxAngleDiff" value="40.0"/>
+				<!--	Maximal distance of points in a cluster which is considered in
+							scan matching. Value in mm. 100.0-->
+				<value name="fMaxClusterDist" value="100.0"/>
+				<!--	Minimal diameter of a cluster of scan points which is considered
+							in scan matching.
+							Value in mm. Value 1.0 means it is switched of. Standard: 200.0-->
+				<value name="fMinClusterSize" value="200.0"/> <!--!!!!!!-->
+				<LineExtraction>
+					<!-- If this variable is true, the scan matcher works line-based.
+							 If it is false, it works on the raw scan data.-->
+					<value name="bActivated" value="0"/>
+					<!-- Maximal distance of two consecutive points of a line -->
+					<value name="fMaxPointDistance" value="50.0"/>
+					<!-- Minimal number of points on a line -->
+					<value name="iMinPointsOnLine" value="10"/>
+					<!-- Minimal length of a line -->
+					<value name="fMinLength" value="100.0"/>
+					<!-- Maximal standard deviation of all points of a line-->
+					<value name="fMaxSigma" value="15.0"/>
+				</LineExtraction>
+				<MbICP>
+					<!--Factor which influences the behavior of the applied metric distance.
+							It describes the relation between rotation and translation.
+							If it is set to inifity, the behaviour of the MbIcpScanMatcher draws near to the IcpScanMatcher.
+							The value must be > 0. -->
+					<value name="fMetricFactor" value="1800.0"/>
+				</MbICP>
+			</ScanMatching>
+	</ParticleFilter>
+
+	<Kinect>
+		<!-- Settings for the kinect rgb camera -->
+		<Camera>
+			<!-- Note: sColorFormat can be RGB8 or Y8UV8 -->
+			<value name="sColorFormat" value="RGB8"/>
+		</Camera>
+
+                <!-- Determines whether to use Pointcloud(0) or Image(1) messages to compute our RGBDepthM -->
+                <value name="bUseImageTransport" value="1" />
+
+                <!-- Determines whether to use Image compression for transport of Images
+                        If true(1) be sure to add a compression value (in percent) -->
+                <value name="bCompressImages" value="0" />
+                <value name="iCompressionValue" value="100" />
+
+		<value name="bSendContinuousDepthData" value="1" />
+
+		<!-- Determines how often RGBDepthDataM is updated -->
+		<value name="iIdleInterval" value="250" />
+		<value name="iTofIdleInterval" value="50" />
+
+
+		<!-- If set to true, RGBDepthM will be kept for painting and a 3DMap will be created
+			Always set to false, because of memory usage. -->
+		<value name="bCreate3DMap" value="0" />
+
+		<!-- 1: We are using the kinect instead of Laser Scanner data, affects PeopleTrackingModule (list may be incomplete)-->
+		<value name="bUseKinect" value="1" />
+		<value name="bUseKinectTracking" value="0" />
+		<value name="fTiltAngle" value="0"/>
+
+		<!-- If bMaskObstacles is true, then 3D Scan points with height greater
+				 fMinObstacleHeight are marked inaccessible in the map -->
+                <value name="bMaskObstacles" value="1"/>
+
+		<!--value name="fMinObstacleHeight" value="140"/-->
+   		<value name="fMinObstacleHeight" value="70"/>
+		<!-- Threshold for the maximum distance of points that are candidates as obstacles.
+			Needed because accuracy of the Kinect is decreasing by distance -->
+		<value name="fMaxObstacleFromRobotDistance" value="2000"/>
+		<value name="fMinObstacleFromRobotDistance" value="300"/>
+
+		<!-- How long is an obstcle saved after his last appearance in the kinect data -->
+		<value name="iObstacleSaveTime" value="10"/>
+                <value name="bDoKinectMappingWithTemporaryObstacles" value="1"/>
+		<!-- How often must an obstacle appear before it is known as an real obstacle -->
+		<value name="iObstacleMinAppearance" value="5"/>
+	</Kinect>
+
+	<SelfLocalization>
+		<value name="fScatterVarXY" value="50"/>
+		<!-- scattering variance for pose orientation in radiants -->
+		<value name="fScatterVarTheta" value="0.2"/>
+	</SelfLocalization>
+
+	<LaserScanners>
+		<SickLMS100>
+			<!-- Use this device in ActiveLaserScannerModule? -->
+			<value name="bActiveLaserScanner" value="0"/>
+			<!-- Is the device used for navigation? -->
+			<value name="bPassiveScan" value="1"/>
+			<!--	the ip and port the scanner is providing -->
+			<value name="sIP" value="169.254.97.144"/>
+			<value name="iPort" value="2111"/>
+			<!--	position of laserscanner in robot coordinates in mm -->
+			<value name="fPositionX" value="240"/>
+			<value name="fPositionY" value="0.0"/>
+			<value name="fPositionZ" value="40"/>
+			<!-- rotation radiuses of laserscanner beam in mm -->
+			<value name="fRotateRadiusY" value="0"/>
+			<value name="fRotateRadiusX" value="0"/>
+			<!--	orientation of laserscanner in robot coordinates
+						in degrees (counter clockwise) -->
+			<value name="fOrientation" value="-0.5"/>
+			<!--	valid maximum range (mm) -->
+			<value name="iValidMaxRange" value="30000"/>
+			<!--	valid minimum range (mm) -->
+			<value name="iValidMinRange" value="150"/>
+			<!--	minimum distance to be classified as free in case of errorneous measurement -->
+			<value name="iFreeReadingDistance" value="800"/>
+			<!--	number of scan points old 541-->
+			<value name="iScanSteps" value="1081"/>
+			<!--	scan angle in degrees -->
+			<value name="fScanAngle" value="270.0"/>
+			<!--	starting angle of one scan in degrees -->
+			<value name="fStartAngle" value="-135.0"/>
+			<value name="fObstacleThreshold" value="10"/>
+			<value name="iNumOffsetSteps" value="110" />
+			<value name="iNumBottomOffsetSteps" value="0"/>
+			<value name="iNumTopOffsetSteps" value="100"/>
+					<!--	iNumClearSlots for a 270Degree scanner. Only 180 Degree are used. Left and right 45 degree are deaktivated. For 0.5 resolution with 541 scanpoints we will need 90 points at each side masked. For security the Value for 0.5Degree Resolution is 100. If we use a 0.25 resulution we need 45Degree to masked out that means 180 Points + 10 Points security = 190 Points	 -->
+			<value name="iNumClearSlots" value="190"/>
+			<value name="sId" value="FrontLRF"/>
+			<!-- Set to 1 if scanner is mounted upside down -->
+			<value name="bMirror" value="1"/>
+		</SickLMS100>
+	</LaserScanners>
+
+
+</default>
+
+<map_manager>
+
+</map_manager>
+
+
+
+</MergedConfig>
\ No newline at end of file
diff --git a/homer_map_manager/images/rosgraph.png b/homer_map_manager/images/rosgraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1d9f2221cd94165784f358d2af8609390b866ee
Binary files /dev/null and b/homer_map_manager/images/rosgraph.png differ
diff --git a/homer_map_manager/images/rosgraph.svg b/homer_map_manager/images/rosgraph.svg
new file mode 100644
index 0000000000000000000000000000000000000000..65b647c8dcc4b02ee4878611703144b7e93dcbb6
--- /dev/null
+++ b/homer_map_manager/images/rosgraph.svg
@@ -0,0 +1,3607 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg width="955.675mm" height="893.586mm"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"  version="1.2" baseProfile="tiny">
+<title>Qt Svg Document</title>
+<desc>Generated with Qt</desc>
+<defs>
+</defs>
+<g fill="none" stroke="black" stroke-width="1" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="bevel" >
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1,0,0,1,0,0)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1,0,0,1,0,0)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#ffffff" fill-opacity="1" stroke="none" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="evenodd" d="M0.0004,-1246.9 L1354.5,-1246.9 L1354.5,19.6591 L0.0004,19.6591 L0.0004,-1246.9"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M278.5,-597.94 L331.5,-597.94 L331.5,-562.94 L278.5,-562.94 L278.5,-597.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,576.378,1317.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,576.378,1317.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,576.378,1317.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M6.20312,11.0156 L6.20312,14.5 L5.125,14.5 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.4375 C6.43229,6.04167 6.71875,5.75 7.0625,5.5625 C7.40625,5.375 7.81771,5.28125 8.29688,5.28125 C9.09896,5.28125 9.75,5.59635 10.25,6.22656 C10.75,6.85677 11,7.6875 11,8.71875 C11,9.75 10.75,10.5833 10.25,11.2188 C9.75,11.8542 9.09896,12.1719 8.29688,12.1719 C7.81771,12.1719 7.40625,12.0755 7.0625,11.8828 C6.71875,11.6901 6.43229,11.401 6.20312,11.0156 M9.875,8.71875 C9.875,7.92708 9.71094,7.30729 9.38281,6.85938 C9.05469,6.41146 8.60938,6.1875 8.04688,6.1875 C7.47396,6.1875 7.02344,6.41146 6.69531,6.85938 C6.36719,7.30729 6.20312,7.92708 6.20312,8.71875 C6.20312,9.51042 6.36719,10.1328 6.69531,10.5859 C7.02344,11.0391 7.47396,11.2656 8.04688,11.2656 C8.60938,11.2656 9.05469,11.0391 9.38281,10.5859 C9.71094,10.1328 9.875,9.51042 9.875,8.71875 M15.3125,6.1875 C14.7396,6.1875 14.2839,6.41406 13.9453,6.86719 C13.6068,7.32031 13.4375,7.9375 13.4375,8.71875 C13.4375,9.51042 13.6042,10.1302 13.9375,10.5781 C14.2708,11.026 14.7292,11.25 15.3125,11.25 C15.8854,11.25 16.3411,11.0234 16.6797,10.5703 C17.0182,10.1172 17.1875,9.5 17.1875,8.71875 C17.1875,7.94792 17.0182,7.33333 16.6797,6.875 C16.3411,6.41667 15.8854,6.1875 15.3125,6.1875 M15.3125,5.28125 C16.25,5.28125 16.987,5.58594 17.5234,6.19531 C18.0599,6.80469 18.3281,7.64583 18.3281,8.71875 C18.3281,9.79167 18.0599,10.6354 17.5234,11.25 C16.987,11.8646 16.25,12.1719 15.3125,12.1719 C14.375,12.1719 13.638,11.8646 13.1016,11.25 C12.5651,10.6354 12.2969,9.79167 12.2969,8.71875 C12.2969,7.64583 12.5651,6.80469 13.1016,6.19531 C13.638,5.58594 14.375,5.28125 15.3125,5.28125 M24.2812,5.625 L24.2812,6.65625 C23.9792,6.5 23.6641,6.38281 23.3359,6.30469 C23.0078,6.22656 22.6667,6.1875 22.3125,6.1875 C21.7812,6.1875 21.3802,6.26823 21.1094,6.42969 C20.8385,6.59115 20.7031,6.83854 20.7031,7.17188 C20.7031,7.42188 20.7995,7.61719 20.9922,7.75781 C21.1849,7.89844 21.5729,8.03125 22.1562,8.15625 L22.5156,8.25 C23.2865,8.40625 23.8333,8.63542 24.1562,8.9375 C24.4792,9.23958 24.6406,9.65625 24.6406,10.1875 C24.6406,10.8021 24.3984,11.2865 23.9141,11.6406 C23.4297,11.9948 22.7656,12.1719 21.9219,12.1719 C21.5677,12.1719 21.2005,12.138 20.8203,12.0703 C20.4401,12.0026 20.0417,11.901 19.625,11.7656 L19.625,10.6406 C20.0208,10.849 20.4115,11.0052 20.7969,11.1094 C21.1823,11.2135 21.5677,11.2656 21.9531,11.2656 C22.4531,11.2656 22.8411,11.1797 23.1172,11.0078 C23.3932,10.8359 23.5312,10.5885 23.5312,10.2656 C23.5312,9.97396 23.4323,9.75 23.2344,9.59375 C23.0365,9.4375 22.6042,9.28646 21.9375,9.14062 L21.5625,9.0625 C20.8958,8.91667 20.4141,8.69792 20.1172,8.40625 C19.8203,8.11458 19.6719,7.71875 19.6719,7.21875 C19.6719,6.59375 19.8906,6.11458 20.3281,5.78125 C20.7656,5.44792 21.3854,5.28125 22.1875,5.28125 C22.5833,5.28125 22.9583,5.3099 23.3125,5.36719 C23.6667,5.42448 23.9896,5.51042 24.2812,5.625 M31.9688,8.45312 L31.9688,8.96875 L27,8.96875 C27.0521,9.71875 27.2786,10.2865 27.6797,10.6719 C28.0807,11.0573 28.6354,11.25 29.3438,11.25 C29.7604,11.25 30.1641,11.2005 30.5547,11.1016 C30.9453,11.0026 31.3333,10.849 31.7188,10.6406 L31.7188,11.6719 C31.3229,11.8281 30.9219,11.9505 30.5156,12.0391 C30.1094,12.1276 29.6979,12.1719 29.2812,12.1719 C28.2396,12.1719 27.4115,11.8672 26.7969,11.2578 C26.1823,10.6484 25.875,9.82292 25.875,8.78125 C25.875,7.70833 26.1667,6.85677 26.75,6.22656 C27.3333,5.59635 28.1146,5.28125 29.0938,5.28125 C29.9792,5.28125 30.6797,5.5651 31.1953,6.13281 C31.7109,6.70052 31.9688,7.47396 31.9688,8.45312 M30.8906,8.125 C30.8802,7.54167 30.7135,7.07292 30.3906,6.71875 C30.0677,6.36458 29.6406,6.1875 29.1094,6.1875 C28.5052,6.1875 28.0234,6.35938 27.6641,6.70312 C27.3047,7.04688 27.099,7.52604 27.0469,8.14062 L30.8906,8.125"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,576.378,1317.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,576.378,1317.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M558.5,-1034.9 L783.5,-1034.9 L783.5,-999.9 L558.5,-999.9 L558.5,-1034.9"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1155.29,443.982)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1155.29,443.982)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1155.29,443.982)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.625,8.03125 L10.625,12 L9.54688,12 L9.54688,8.07812 C9.54688,7.45312 9.42448,6.98698 9.17969,6.67969 C8.9349,6.3724 8.57292,6.21875 8.09375,6.21875 C7.51042,6.21875 7.04948,6.40365 6.71094,6.77344 C6.3724,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,2.875 L6.20312,2.875 L6.20312,6.45312 C6.46354,6.05729 6.76823,5.76302 7.11719,5.57031 C7.46615,5.3776 7.86979,5.28125 8.32812,5.28125 C9.07812,5.28125 9.64844,5.51302 10.0391,5.97656 C10.4297,6.4401 10.625,7.125 10.625,8.03125 M15.2969,6.1875 C14.724,6.1875 14.2682,6.41406 13.9297,6.86719 C13.5911,7.32031 13.4219,7.9375 13.4219,8.71875 C13.4219,9.51042 13.5885,10.1302 13.9219,10.5781 C14.2552,11.026 14.7135,11.25 15.2969,11.25 C15.8698,11.25 16.3255,11.0234 16.6641,10.5703 C17.0026,10.1172 17.1719,9.5 17.1719,8.71875 C17.1719,7.94792 17.0026,7.33333 16.6641,6.875 C16.3255,6.41667 15.8698,6.1875 15.2969,6.1875 M15.2969,5.28125 C16.2344,5.28125 16.9714,5.58594 17.5078,6.19531 C18.0443,6.80469 18.3125,7.64583 18.3125,8.71875 C18.3125,9.79167 18.0443,10.6354 17.5078,11.25 C16.9714,11.8646 16.2344,12.1719 15.2969,12.1719 C14.3594,12.1719 13.6224,11.8646 13.0859,11.25 C12.5495,10.6354 12.2812,9.79167 12.2812,8.71875 C12.2812,7.64583 12.5495,6.80469 13.0859,6.19531 C13.6224,5.58594 14.3594,5.28125 15.2969,5.28125 M25.1875,6.70312 C25.4583,6.21354 25.7812,5.85417 26.1562,5.625 C26.5312,5.39583 26.974,5.28125 27.4844,5.28125 C28.1719,5.28125 28.7005,5.52083 29.0703,6 C29.4401,6.47917 29.625,7.15625 29.625,8.03125 L29.625,12 L28.5469,12 L28.5469,8.07812 C28.5469,7.44271 28.4349,6.97396 28.2109,6.67188 C27.987,6.36979 27.6458,6.21875 27.1875,6.21875 C26.625,6.21875 26.1823,6.40365 25.8594,6.77344 C25.5365,7.14323 25.375,7.65104 25.375,8.29688 L25.375,12 L24.2969,12 L24.2969,8.07812 C24.2969,7.44271 24.1849,6.97396 23.9609,6.67188 C23.737,6.36979 23.3906,6.21875 22.9219,6.21875 C22.3698,6.21875 21.9323,6.40365 21.6094,6.77344 C21.2865,7.14323 21.125,7.65104 21.125,8.29688 L21.125,12 L20.0469,12 L20.0469,5.4375 L21.125,5.4375 L21.125,6.45312 C21.375,6.05729 21.6719,5.76302 22.0156,5.57031 C22.3594,5.3776 22.7656,5.28125 23.2344,5.28125 C23.7135,5.28125 24.1198,5.40104 24.4531,5.64062 C24.7865,5.88021 25.0312,6.23438 25.1875,6.70312 M37.3906,8.45312 L37.3906,8.96875 L32.4219,8.96875 C32.474,9.71875 32.7005,10.2865 33.1016,10.6719 C33.5026,11.0573 34.0573,11.25 34.7656,11.25 C35.1823,11.25 35.5859,11.2005 35.9766,11.1016 C36.3672,11.0026 36.7552,10.849 37.1406,10.6406 L37.1406,11.6719 C36.7448,11.8281 36.3438,11.9505 35.9375,12.0391 C35.5312,12.1276 35.1198,12.1719 34.7031,12.1719 C33.6615,12.1719 32.8333,11.8672 32.2188,11.2578 C31.6042,10.6484 31.2969,9.82292 31.2969,8.78125 C31.2969,7.70833 31.5885,6.85677 32.1719,6.22656 C32.7552,5.59635 33.5365,5.28125 34.5156,5.28125 C35.401,5.28125 36.1016,5.5651 36.6172,6.13281 C37.1328,6.70052 37.3906,7.47396 37.3906,8.45312 M36.3125,8.125 C36.3021,7.54167 36.1354,7.07292 35.8125,6.71875 C35.4896,6.36458 35.0625,6.1875 34.5312,6.1875 C33.9271,6.1875 33.4453,6.35938 33.0859,6.70312 C32.7266,7.04688 32.5208,7.52604 32.4688,8.14062 L36.3125,8.125 M42.9531,6.4375 C42.8281,6.375 42.6953,6.32552 42.5547,6.28906 C42.4141,6.2526 42.2552,6.23438 42.0781,6.23438 C41.474,6.23438 41.0078,6.43229 40.6797,6.82812 C40.3516,7.22396 40.1875,7.79688 40.1875,8.54688 L40.1875,12 L39.1094,12 L39.1094,5.4375 L40.1875,5.4375 L40.1875,6.45312 C40.4167,6.05729 40.7135,5.76302 41.0781,5.57031 C41.4427,5.3776 41.8854,5.28125 42.4062,5.28125 C42.4792,5.28125 42.5599,5.28646 42.6484,5.29688 C42.737,5.30729 42.8333,5.32292 42.9375,5.34375 L42.9531,6.4375 M49.0625,14 L49.0625,14.8281 L42.8281,14.8281 L42.8281,14 L49.0625,14 M55.1719,6.70312 C55.4427,6.21354 55.7656,5.85417 56.1406,5.625 C56.5156,5.39583 56.9583,5.28125 57.4688,5.28125 C58.1562,5.28125 58.6849,5.52083 59.0547,6 C59.4245,6.47917 59.6094,7.15625 59.6094,8.03125 L59.6094,12 L58.5312,12 L58.5312,8.07812 C58.5312,7.44271 58.4193,6.97396 58.1953,6.67188 C57.9714,6.36979 57.6302,6.21875 57.1719,6.21875 C56.6094,6.21875 56.1667,6.40365 55.8438,6.77344 C55.5208,7.14323 55.3594,7.65104 55.3594,8.29688 L55.3594,12 L54.2812,12 L54.2812,8.07812 C54.2812,7.44271 54.1693,6.97396 53.9453,6.67188 C53.7214,6.36979 53.375,6.21875 52.9062,6.21875 C52.3542,6.21875 51.9167,6.40365 51.5938,6.77344 C51.2708,7.14323 51.1094,7.65104 51.1094,8.29688 L51.1094,12 L50.0312,12 L50.0312,5.4375 L51.1094,5.4375 L51.1094,6.45312 C51.3594,6.05729 51.6562,5.76302 52,5.57031 C52.3438,5.3776 52.75,5.28125 53.2188,5.28125 C53.6979,5.28125 54.1042,5.40104 54.4375,5.64062 C54.7708,5.88021 55.0156,6.23438 55.1719,6.70312 M64.7344,8.70312 C63.8698,8.70312 63.2682,8.80208 62.9297,9 C62.5911,9.19792 62.4219,9.53646 62.4219,10.0156 C62.4219,10.401 62.5495,10.7057 62.8047,10.9297 C63.0599,11.1536 63.401,11.2656 63.8281,11.2656 C64.4323,11.2656 64.9141,11.0547 65.2734,10.6328 C65.6328,10.2109 65.8125,9.64583 65.8125,8.9375 L65.8125,8.70312 L64.7344,8.70312 M66.8906,8.25 L66.8906,12 L65.8125,12 L65.8125,11 C65.5625,11.3958 65.2552,11.6901 64.8906,11.8828 C64.526,12.0755 64.0781,12.1719 63.5469,12.1719 C62.8698,12.1719 62.3333,11.9818 61.9375,11.6016 C61.5417,11.2214 61.3438,10.7188 61.3438,10.0938 C61.3438,9.35417 61.5911,8.79688 62.0859,8.42188 C62.5807,8.04688 63.3177,7.85938 64.2969,7.85938 L65.8125,7.85938 L65.8125,7.75 C65.8125,7.25 65.6484,6.86458 65.3203,6.59375 C64.9922,6.32292 64.5365,6.1875 63.9531,6.1875 C63.5781,6.1875 63.2109,6.23438 62.8516,6.32812 C62.4922,6.42188 62.151,6.55729 61.8281,6.73438 L61.8281,5.73438 C62.224,5.57812 62.6068,5.46354 62.9766,5.39062 C63.3464,5.31771 63.7083,5.28125 64.0625,5.28125 C65.0104,5.28125 65.7188,5.52604 66.1875,6.01562 C66.6562,6.50521 66.8906,7.25 66.8906,8.25 M70.1406,11.0156 L70.1406,14.5 L69.0625,14.5 L69.0625,5.4375 L70.1406,5.4375 L70.1406,6.4375 C70.3698,6.04167 70.6562,5.75 71,5.5625 C71.3438,5.375 71.7552,5.28125 72.2344,5.28125 C73.0365,5.28125 73.6875,5.59635 74.1875,6.22656 C74.6875,6.85677 74.9375,7.6875 74.9375,8.71875 C74.9375,9.75 74.6875,10.5833 74.1875,11.2188 C73.6875,11.8542 73.0365,12.1719 72.2344,12.1719 C71.7552,12.1719 71.3438,12.0755 71,11.8828 C70.6562,11.6901 70.3698,11.401 70.1406,11.0156 M73.8125,8.71875 C73.8125,7.92708 73.6484,7.30729 73.3203,6.85938 C72.9922,6.41146 72.5469,6.1875 71.9844,6.1875 C71.4115,6.1875 70.9609,6.41146 70.6328,6.85938 C70.3047,7.30729 70.1406,7.92708 70.1406,8.71875 C70.1406,9.51042 70.3047,10.1328 70.6328,10.5859 C70.9609,11.0391 71.4115,11.2656 71.9844,11.2656 C72.5469,11.2656 72.9922,11.0391 73.3203,10.5859 C73.6484,10.1328 73.8125,9.51042 73.8125,8.71875 M77.75,11.0156 L77.75,14.5 L76.6719,14.5 L76.6719,5.4375 L77.75,5.4375 L77.75,6.4375 C77.9792,6.04167 78.2656,5.75 78.6094,5.5625 C78.9531,5.375 79.3646,5.28125 79.8438,5.28125 C80.6458,5.28125 81.2969,5.59635 81.7969,6.22656 C82.2969,6.85677 82.5469,7.6875 82.5469,8.71875 C82.5469,9.75 82.2969,10.5833 81.7969,11.2188 C81.2969,11.8542 80.6458,12.1719 79.8438,12.1719 C79.3646,12.1719 78.9531,12.0755 78.6094,11.8828 C78.2656,11.6901 77.9792,11.401 77.75,11.0156 M81.4219,8.71875 C81.4219,7.92708 81.2578,7.30729 80.9297,6.85938 C80.6016,6.41146 80.1562,6.1875 79.5938,6.1875 C79.0208,6.1875 78.5703,6.41146 78.2422,6.85938 C77.9141,7.30729 77.75,7.92708 77.75,8.71875 C77.75,9.51042 77.9141,10.1328 78.2422,10.5859 C78.5703,11.0391 79.0208,11.2656 79.5938,11.2656 C80.1562,11.2656 80.6016,11.0391 80.9297,10.5859 C81.2578,10.1328 81.4219,9.51042 81.4219,8.71875 M84.3125,5.4375 L85.3906,5.4375 L85.3906,12 L84.3125,12 L84.3125,5.4375 M84.3125,2.875 L85.3906,2.875 L85.3906,4.25 L84.3125,4.25 L84.3125,2.875 M93.1094,8.03125 L93.1094,12 L92.0312,12 L92.0312,8.07812 C92.0312,7.45312 91.9089,6.98698 91.6641,6.67969 C91.4193,6.3724 91.0573,6.21875 90.5781,6.21875 C89.9948,6.21875 89.5339,6.40365 89.1953,6.77344 C88.8568,7.14323 88.6875,7.65104 88.6875,8.29688 L88.6875,12 L87.6094,12 L87.6094,5.4375 L88.6875,5.4375 L88.6875,6.45312 C88.9479,6.05729 89.2526,5.76302 89.6016,5.57031 C89.9505,5.3776 90.3542,5.28125 90.8125,5.28125 C91.5625,5.28125 92.1328,5.51302 92.5234,5.97656 C92.9141,6.4401 93.1094,7.125 93.1094,8.03125 M99.5625,8.64062 C99.5625,7.85938 99.401,7.25521 99.0781,6.82812 C98.7552,6.40104 98.3021,6.1875 97.7188,6.1875 C97.1458,6.1875 96.6979,6.40104 96.375,6.82812 C96.0521,7.25521 95.8906,7.85938 95.8906,8.64062 C95.8906,9.42188 96.0521,10.026 96.375,10.4531 C96.6979,10.8802 97.1458,11.0938 97.7188,11.0938 C98.3021,11.0938 98.7552,10.8802 99.0781,10.4531 C99.401,10.026 99.5625,9.42188 99.5625,8.64062 M100.641,11.1875 C100.641,12.3021 100.393,13.1328 99.8984,13.6797 C99.4036,14.2266 98.6406,14.5 97.6094,14.5 C97.2344,14.5 96.8776,14.4714 96.5391,14.4141 C96.2005,14.3568 95.875,14.2708 95.5625,14.1562 L95.5625,13.1094 C95.875,13.276 96.1875,13.401 96.5,13.4844 C96.8125,13.5677 97.125,13.6094 97.4375,13.6094 C98.1458,13.6094 98.6771,13.4245 99.0312,13.0547 C99.3854,12.6849 99.5625,12.125 99.5625,11.375 L99.5625,10.8438 C99.3333,11.2292 99.0469,11.5182 98.7031,11.7109 C98.3594,11.9036 97.9427,12 97.4531,12 C96.651,12 96.0026,11.6927 95.5078,11.0781 C95.013,10.4635 94.7656,9.65104 94.7656,8.64062 C94.7656,7.63021 95.013,6.81771 95.5078,6.20312 C96.0026,5.58854 96.651,5.28125 97.4531,5.28125 C97.9427,5.28125 98.3594,5.3776 98.7031,5.57031 C99.0469,5.76302 99.3333,6.05208 99.5625,6.4375 L99.5625,5.4375 L100.641,5.4375 L100.641,11.1875 M104.766,3.25 L105.766,3.25 L102.719,13.1094 L101.719,13.1094 L104.766,3.25 M106.766,9.40625 L106.766,5.4375 L107.844,5.4375 L107.844,9.375 C107.844,9.98958 107.966,10.4531 108.211,10.7656 C108.456,11.0781 108.818,11.2344 109.297,11.2344 C109.88,11.2344 110.341,11.0495 110.68,10.6797 C111.018,10.3099 111.188,9.80208 111.188,9.15625 L111.188,5.4375 L112.266,5.4375 L112.266,12 L111.188,12 L111.188,10.9844 C110.927,11.3906 110.625,11.6901 110.281,11.8828 C109.938,12.0755 109.536,12.1719 109.078,12.1719 C108.318,12.1719 107.742,11.9375 107.352,11.4688 C106.961,11 106.766,10.3125 106.766,9.40625 M118.656,5.625 L118.656,6.65625 C118.354,6.5 118.039,6.38281 117.711,6.30469 C117.383,6.22656 117.042,6.1875 116.688,6.1875 C116.156,6.1875 115.755,6.26823 115.484,6.42969 C115.214,6.59115 115.078,6.83854 115.078,7.17188 C115.078,7.42188 115.174,7.61719 115.367,7.75781 C115.56,7.89844 115.948,8.03125 116.531,8.15625 L116.891,8.25 C117.661,8.40625 118.208,8.63542 118.531,8.9375 C118.854,9.23958 119.016,9.65625 119.016,10.1875 C119.016,10.8021 118.773,11.2865 118.289,11.6406 C117.805,11.9948 117.141,12.1719 116.297,12.1719 C115.943,12.1719 115.576,12.138 115.195,12.0703 C114.815,12.0026 114.417,11.901 114,11.7656 L114,10.6406 C114.396,10.849 114.786,11.0052 115.172,11.1094 C115.557,11.2135 115.943,11.2656 116.328,11.2656 C116.828,11.2656 117.216,11.1797 117.492,11.0078 C117.768,10.8359 117.906,10.5885 117.906,10.2656 C117.906,9.97396 117.807,9.75 117.609,9.59375 C117.411,9.4375 116.979,9.28646 116.312,9.14062 L115.938,9.0625 C115.271,8.91667 114.789,8.69792 114.492,8.40625 C114.195,8.11458 114.047,7.71875 114.047,7.21875 C114.047,6.59375 114.266,6.11458 114.703,5.78125 C115.141,5.44792 115.76,5.28125 116.562,5.28125 C116.958,5.28125 117.333,5.3099 117.688,5.36719 C118.042,5.42448 118.365,5.51042 118.656,5.625 M126.344,8.45312 L126.344,8.96875 L121.375,8.96875 C121.427,9.71875 121.654,10.2865 122.055,10.6719 C122.456,11.0573 123.01,11.25 123.719,11.25 C124.135,11.25 124.539,11.2005 124.93,11.1016 C125.32,11.0026 125.708,10.849 126.094,10.6406 L126.094,11.6719 C125.698,11.8281 125.297,11.9505 124.891,12.0391 C124.484,12.1276 124.073,12.1719 123.656,12.1719 C122.615,12.1719 121.786,11.8672 121.172,11.2578 C120.557,10.6484 120.25,9.82292 120.25,8.78125 C120.25,7.70833 120.542,6.85677 121.125,6.22656 C121.708,5.59635 122.49,5.28125 123.469,5.28125 C124.354,5.28125 125.055,5.5651 125.57,6.13281 C126.086,6.70052 126.344,7.47396 126.344,8.45312 M125.266,8.125 C125.255,7.54167 125.089,7.07292 124.766,6.71875 C124.443,6.36458 124.016,6.1875 123.484,6.1875 C122.88,6.1875 122.398,6.35938 122.039,6.70312 C121.68,7.04688 121.474,7.52604 121.422,8.14062 L125.266,8.125 M131.906,6.4375 C131.781,6.375 131.648,6.32552 131.508,6.28906 C131.367,6.2526 131.208,6.23438 131.031,6.23438 C130.427,6.23438 129.961,6.43229 129.633,6.82812 C129.305,7.22396 129.141,7.79688 129.141,8.54688 L129.141,12 L128.062,12 L128.062,5.4375 L129.141,5.4375 L129.141,6.45312 C129.37,6.05729 129.667,5.76302 130.031,5.57031 C130.396,5.3776 130.839,5.28125 131.359,5.28125 C131.432,5.28125 131.513,5.28646 131.602,5.29688 C131.69,5.30729 131.786,5.32292 131.891,5.34375 L131.906,6.4375 M137.344,6.4375 L137.344,2.875 L138.422,2.875 L138.422,12 L137.344,12 L137.344,11.0156 C137.115,11.401 136.828,11.6901 136.484,11.8828 C136.141,12.0755 135.724,12.1719 135.234,12.1719 C134.443,12.1719 133.797,11.8542 133.297,11.2188 C132.797,10.5833 132.547,9.75 132.547,8.71875 C132.547,7.6875 132.797,6.85677 133.297,6.22656 C133.797,5.59635 134.443,5.28125 135.234,5.28125 C135.724,5.28125 136.141,5.375 136.484,5.5625 C136.828,5.75 137.115,6.04167 137.344,6.4375 M133.672,8.71875 C133.672,9.51042 133.833,10.1328 134.156,10.5859 C134.479,11.0391 134.927,11.2656 135.5,11.2656 C136.073,11.2656 136.523,11.0391 136.852,10.5859 C137.18,10.1328 137.344,9.51042 137.344,8.71875 C137.344,7.92708 137.18,7.30729 136.852,6.85938 C136.523,6.41146 136.073,6.1875 135.5,6.1875 C134.927,6.1875 134.479,6.41146 134.156,6.85938 C133.833,7.30729 133.672,7.92708 133.672,8.71875 M146.25,8.45312 L146.25,8.96875 L141.281,8.96875 C141.333,9.71875 141.56,10.2865 141.961,10.6719 C142.362,11.0573 142.917,11.25 143.625,11.25 C144.042,11.25 144.445,11.2005 144.836,11.1016 C145.227,11.0026 145.615,10.849 146,10.6406 L146,11.6719 C145.604,11.8281 145.203,11.9505 144.797,12.0391 C144.391,12.1276 143.979,12.1719 143.562,12.1719 C142.521,12.1719 141.693,11.8672 141.078,11.2578 C140.464,10.6484 140.156,9.82292 140.156,8.78125 C140.156,7.70833 140.448,6.85677 141.031,6.22656 C141.615,5.59635 142.396,5.28125 143.375,5.28125 C144.26,5.28125 144.961,5.5651 145.477,6.13281 C145.992,6.70052 146.25,7.47396 146.25,8.45312 M145.172,8.125 C145.161,7.54167 144.995,7.07292 144.672,6.71875 C144.349,6.36458 143.922,6.1875 143.391,6.1875 C142.786,6.1875 142.305,6.35938 141.945,6.70312 C141.586,7.04688 141.38,7.52604 141.328,8.14062 L145.172,8.125 M151.328,2.875 L151.328,3.78125 L150.297,3.78125 C149.911,3.78125 149.643,3.85938 149.492,4.01562 C149.341,4.17188 149.266,4.45312 149.266,4.85938 L149.266,5.4375 L151.047,5.4375 L151.047,6.28125 L149.266,6.28125 L149.266,12 L148.188,12 L148.188,6.28125 L147.156,6.28125 L147.156,5.4375 L148.188,5.4375 L148.188,4.98438 C148.188,4.25521 148.357,3.72135 148.695,3.38281 C149.034,3.04427 149.573,2.875 150.312,2.875 L151.328,2.875 M157.219,14 L157.219,14.8281 L150.984,14.8281 L150.984,14 L157.219,14 M159.266,11.0156 L159.266,14.5 L158.188,14.5 L158.188,5.4375 L159.266,5.4375 L159.266,6.4375 C159.495,6.04167 159.781,5.75 160.125,5.5625 C160.469,5.375 160.88,5.28125 161.359,5.28125 C162.161,5.28125 162.812,5.59635 163.312,6.22656 C163.812,6.85677 164.062,7.6875 164.062,8.71875 C164.062,9.75 163.812,10.5833 163.312,11.2188 C162.812,11.8542 162.161,12.1719 161.359,12.1719 C160.88,12.1719 160.469,12.0755 160.125,11.8828 C159.781,11.6901 159.495,11.401 159.266,11.0156 M162.938,8.71875 C162.938,7.92708 162.773,7.30729 162.445,6.85938 C162.117,6.41146 161.672,6.1875 161.109,6.1875 C160.536,6.1875 160.086,6.41146 159.758,6.85938 C159.43,7.30729 159.266,7.92708 159.266,8.71875 C159.266,9.51042 159.43,10.1328 159.758,10.5859 C160.086,11.0391 160.536,11.2656 161.109,11.2656 C161.672,11.2656 162.117,11.0391 162.445,10.5859 C162.773,10.1328 162.938,9.51042 162.938,8.71875 M168.375,6.1875 C167.802,6.1875 167.346,6.41406 167.008,6.86719 C166.669,7.32031 166.5,7.9375 166.5,8.71875 C166.5,9.51042 166.667,10.1302 167,10.5781 C167.333,11.026 167.792,11.25 168.375,11.25 C168.948,11.25 169.404,11.0234 169.742,10.5703 C170.081,10.1172 170.25,9.5 170.25,8.71875 C170.25,7.94792 170.081,7.33333 169.742,6.875 C169.404,6.41667 168.948,6.1875 168.375,6.1875 M168.375,5.28125 C169.312,5.28125 170.049,5.58594 170.586,6.19531 C171.122,6.80469 171.391,7.64583 171.391,8.71875 C171.391,9.79167 171.122,10.6354 170.586,11.25 C170.049,11.8646 169.312,12.1719 168.375,12.1719 C167.438,12.1719 166.701,11.8646 166.164,11.25 C165.628,10.6354 165.359,9.79167 165.359,8.71875 C165.359,7.64583 165.628,6.80469 166.164,6.19531 C166.701,5.58594 167.438,5.28125 168.375,5.28125 M177.344,5.625 L177.344,6.65625 C177.042,6.5 176.727,6.38281 176.398,6.30469 C176.07,6.22656 175.729,6.1875 175.375,6.1875 C174.844,6.1875 174.443,6.26823 174.172,6.42969 C173.901,6.59115 173.766,6.83854 173.766,7.17188 C173.766,7.42188 173.862,7.61719 174.055,7.75781 C174.247,7.89844 174.635,8.03125 175.219,8.15625 L175.578,8.25 C176.349,8.40625 176.896,8.63542 177.219,8.9375 C177.542,9.23958 177.703,9.65625 177.703,10.1875 C177.703,10.8021 177.461,11.2865 176.977,11.6406 C176.492,11.9948 175.828,12.1719 174.984,12.1719 C174.63,12.1719 174.263,12.138 173.883,12.0703 C173.503,12.0026 173.104,11.901 172.688,11.7656 L172.688,10.6406 C173.083,10.849 173.474,11.0052 173.859,11.1094 C174.245,11.2135 174.63,11.2656 175.016,11.2656 C175.516,11.2656 175.904,11.1797 176.18,11.0078 C176.456,10.8359 176.594,10.5885 176.594,10.2656 C176.594,9.97396 176.495,9.75 176.297,9.59375 C176.099,9.4375 175.667,9.28646 175,9.14062 L174.625,9.0625 C173.958,8.91667 173.477,8.69792 173.18,8.40625 C172.883,8.11458 172.734,7.71875 172.734,7.21875 C172.734,6.59375 172.953,6.11458 173.391,5.78125 C173.828,5.44792 174.448,5.28125 175.25,5.28125 C175.646,5.28125 176.021,5.3099 176.375,5.36719 C176.729,5.42448 177.052,5.51042 177.344,5.625 M185.031,8.45312 L185.031,8.96875 L180.062,8.96875 C180.115,9.71875 180.341,10.2865 180.742,10.6719 C181.143,11.0573 181.698,11.25 182.406,11.25 C182.823,11.25 183.227,11.2005 183.617,11.1016 C184.008,11.0026 184.396,10.849 184.781,10.6406 L184.781,11.6719 C184.385,11.8281 183.984,11.9505 183.578,12.0391 C183.172,12.1276 182.76,12.1719 182.344,12.1719 C181.302,12.1719 180.474,11.8672 179.859,11.2578 C179.245,10.6484 178.938,9.82292 178.938,8.78125 C178.938,7.70833 179.229,6.85677 179.812,6.22656 C180.396,5.59635 181.177,5.28125 182.156,5.28125 C183.042,5.28125 183.742,5.5651 184.258,6.13281 C184.773,6.70052 185.031,7.47396 185.031,8.45312 M183.953,8.125 C183.943,7.54167 183.776,7.07292 183.453,6.71875 C183.13,6.36458 182.703,6.1875 182.172,6.1875 C181.568,6.1875 181.086,6.35938 180.727,6.70312 C180.367,7.04688 180.161,7.52604 180.109,8.14062 L183.953,8.125"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1155.29,443.982)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1155.29,443.982)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M541.5,-200.94 L800.5,-200.94 L800.5,-165.94 L541.5,-165.94 L541.5,-200.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1130.55,2111.82)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1130.55,2111.82)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1130.55,2111.82)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.625,8.03125 L10.625,12 L9.54688,12 L9.54688,8.07812 C9.54688,7.45312 9.42448,6.98698 9.17969,6.67969 C8.9349,6.3724 8.57292,6.21875 8.09375,6.21875 C7.51042,6.21875 7.04948,6.40365 6.71094,6.77344 C6.3724,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,2.875 L6.20312,2.875 L6.20312,6.45312 C6.46354,6.05729 6.76823,5.76302 7.11719,5.57031 C7.46615,5.3776 7.86979,5.28125 8.32812,5.28125 C9.07812,5.28125 9.64844,5.51302 10.0391,5.97656 C10.4297,6.4401 10.625,7.125 10.625,8.03125 M15.2969,6.1875 C14.724,6.1875 14.2682,6.41406 13.9297,6.86719 C13.5911,7.32031 13.4219,7.9375 13.4219,8.71875 C13.4219,9.51042 13.5885,10.1302 13.9219,10.5781 C14.2552,11.026 14.7135,11.25 15.2969,11.25 C15.8698,11.25 16.3255,11.0234 16.6641,10.5703 C17.0026,10.1172 17.1719,9.5 17.1719,8.71875 C17.1719,7.94792 17.0026,7.33333 16.6641,6.875 C16.3255,6.41667 15.8698,6.1875 15.2969,6.1875 M15.2969,5.28125 C16.2344,5.28125 16.9714,5.58594 17.5078,6.19531 C18.0443,6.80469 18.3125,7.64583 18.3125,8.71875 C18.3125,9.79167 18.0443,10.6354 17.5078,11.25 C16.9714,11.8646 16.2344,12.1719 15.2969,12.1719 C14.3594,12.1719 13.6224,11.8646 13.0859,11.25 C12.5495,10.6354 12.2812,9.79167 12.2812,8.71875 C12.2812,7.64583 12.5495,6.80469 13.0859,6.19531 C13.6224,5.58594 14.3594,5.28125 15.2969,5.28125 M25.1875,6.70312 C25.4583,6.21354 25.7812,5.85417 26.1562,5.625 C26.5312,5.39583 26.974,5.28125 27.4844,5.28125 C28.1719,5.28125 28.7005,5.52083 29.0703,6 C29.4401,6.47917 29.625,7.15625 29.625,8.03125 L29.625,12 L28.5469,12 L28.5469,8.07812 C28.5469,7.44271 28.4349,6.97396 28.2109,6.67188 C27.987,6.36979 27.6458,6.21875 27.1875,6.21875 C26.625,6.21875 26.1823,6.40365 25.8594,6.77344 C25.5365,7.14323 25.375,7.65104 25.375,8.29688 L25.375,12 L24.2969,12 L24.2969,8.07812 C24.2969,7.44271 24.1849,6.97396 23.9609,6.67188 C23.737,6.36979 23.3906,6.21875 22.9219,6.21875 C22.3698,6.21875 21.9323,6.40365 21.6094,6.77344 C21.2865,7.14323 21.125,7.65104 21.125,8.29688 L21.125,12 L20.0469,12 L20.0469,5.4375 L21.125,5.4375 L21.125,6.45312 C21.375,6.05729 21.6719,5.76302 22.0156,5.57031 C22.3594,5.3776 22.7656,5.28125 23.2344,5.28125 C23.7135,5.28125 24.1198,5.40104 24.4531,5.64062 C24.7865,5.88021 25.0312,6.23438 25.1875,6.70312 M37.3906,8.45312 L37.3906,8.96875 L32.4219,8.96875 C32.474,9.71875 32.7005,10.2865 33.1016,10.6719 C33.5026,11.0573 34.0573,11.25 34.7656,11.25 C35.1823,11.25 35.5859,11.2005 35.9766,11.1016 C36.3672,11.0026 36.7552,10.849 37.1406,10.6406 L37.1406,11.6719 C36.7448,11.8281 36.3438,11.9505 35.9375,12.0391 C35.5312,12.1276 35.1198,12.1719 34.7031,12.1719 C33.6615,12.1719 32.8333,11.8672 32.2188,11.2578 C31.6042,10.6484 31.2969,9.82292 31.2969,8.78125 C31.2969,7.70833 31.5885,6.85677 32.1719,6.22656 C32.7552,5.59635 33.5365,5.28125 34.5156,5.28125 C35.401,5.28125 36.1016,5.5651 36.6172,6.13281 C37.1328,6.70052 37.3906,7.47396 37.3906,8.45312 M36.3125,8.125 C36.3021,7.54167 36.1354,7.07292 35.8125,6.71875 C35.4896,6.36458 35.0625,6.1875 34.5312,6.1875 C33.9271,6.1875 33.4453,6.35938 33.0859,6.70312 C32.7266,7.04688 32.5208,7.52604 32.4688,8.14062 L36.3125,8.125 M42.9531,6.4375 C42.8281,6.375 42.6953,6.32552 42.5547,6.28906 C42.4141,6.2526 42.2552,6.23438 42.0781,6.23438 C41.474,6.23438 41.0078,6.43229 40.6797,6.82812 C40.3516,7.22396 40.1875,7.79688 40.1875,8.54688 L40.1875,12 L39.1094,12 L39.1094,5.4375 L40.1875,5.4375 L40.1875,6.45312 C40.4167,6.05729 40.7135,5.76302 41.0781,5.57031 C41.4427,5.3776 41.8854,5.28125 42.4062,5.28125 C42.4792,5.28125 42.5599,5.28646 42.6484,5.29688 C42.737,5.30729 42.8333,5.32292 42.9375,5.34375 L42.9531,6.4375 M49.0625,14 L49.0625,14.8281 L42.8281,14.8281 L42.8281,14 L49.0625,14 M55.5312,8.03125 L55.5312,12 L54.4531,12 L54.4531,8.07812 C54.4531,7.45312 54.3307,6.98698 54.0859,6.67969 C53.8411,6.3724 53.4792,6.21875 53,6.21875 C52.4167,6.21875 51.9557,6.40365 51.6172,6.77344 C51.2786,7.14323 51.1094,7.65104 51.1094,8.29688 L51.1094,12 L50.0312,12 L50.0312,5.4375 L51.1094,5.4375 L51.1094,6.45312 C51.3698,6.05729 51.6745,5.76302 52.0234,5.57031 C52.3724,5.3776 52.776,5.28125 53.2344,5.28125 C53.9844,5.28125 54.5547,5.51302 54.9453,5.97656 C55.3359,6.4401 55.5312,7.125 55.5312,8.03125 M60.6406,8.70312 C59.776,8.70312 59.1745,8.80208 58.8359,9 C58.4974,9.19792 58.3281,9.53646 58.3281,10.0156 C58.3281,10.401 58.4557,10.7057 58.7109,10.9297 C58.9661,11.1536 59.3073,11.2656 59.7344,11.2656 C60.3385,11.2656 60.8203,11.0547 61.1797,10.6328 C61.5391,10.2109 61.7188,9.64583 61.7188,8.9375 L61.7188,8.70312 L60.6406,8.70312 M62.7969,8.25 L62.7969,12 L61.7188,12 L61.7188,11 C61.4688,11.3958 61.1615,11.6901 60.7969,11.8828 C60.4323,12.0755 59.9844,12.1719 59.4531,12.1719 C58.776,12.1719 58.2396,11.9818 57.8438,11.6016 C57.4479,11.2214 57.25,10.7188 57.25,10.0938 C57.25,9.35417 57.4974,8.79688 57.9922,8.42188 C58.487,8.04688 59.224,7.85938 60.2031,7.85938 L61.7188,7.85938 L61.7188,7.75 C61.7188,7.25 61.5547,6.86458 61.2266,6.59375 C60.8984,6.32292 60.4427,6.1875 59.8594,6.1875 C59.4844,6.1875 59.1172,6.23438 58.7578,6.32812 C58.3984,6.42188 58.0573,6.55729 57.7344,6.73438 L57.7344,5.73438 C58.1302,5.57812 58.513,5.46354 58.8828,5.39062 C59.2526,5.31771 59.6146,5.28125 59.9688,5.28125 C60.9167,5.28125 61.625,5.52604 62.0938,6.01562 C62.5625,6.50521 62.7969,7.25 62.7969,8.25 M64.2344,5.4375 L65.375,5.4375 L67.4219,10.9375 L69.4844,5.4375 L70.625,5.4375 L68.1562,12 L66.6875,12 L64.2344,5.4375 M72.0938,5.4375 L73.1719,5.4375 L73.1719,12 L72.0938,12 L72.0938,5.4375 M72.0938,2.875 L73.1719,2.875 L73.1719,4.25 L72.0938,4.25 L72.0938,2.875 M79.75,8.64062 C79.75,7.85938 79.5885,7.25521 79.2656,6.82812 C78.9427,6.40104 78.4896,6.1875 77.9062,6.1875 C77.3333,6.1875 76.8854,6.40104 76.5625,6.82812 C76.2396,7.25521 76.0781,7.85938 76.0781,8.64062 C76.0781,9.42188 76.2396,10.026 76.5625,10.4531 C76.8854,10.8802 77.3333,11.0938 77.9062,11.0938 C78.4896,11.0938 78.9427,10.8802 79.2656,10.4531 C79.5885,10.026 79.75,9.42188 79.75,8.64062 M80.8281,11.1875 C80.8281,12.3021 80.5807,13.1328 80.0859,13.6797 C79.5911,14.2266 78.8281,14.5 77.7969,14.5 C77.4219,14.5 77.0651,14.4714 76.7266,14.4141 C76.388,14.3568 76.0625,14.2708 75.75,14.1562 L75.75,13.1094 C76.0625,13.276 76.375,13.401 76.6875,13.4844 C77,13.5677 77.3125,13.6094 77.625,13.6094 C78.3333,13.6094 78.8646,13.4245 79.2188,13.0547 C79.5729,12.6849 79.75,12.125 79.75,11.375 L79.75,10.8438 C79.5208,11.2292 79.2344,11.5182 78.8906,11.7109 C78.5469,11.9036 78.1302,12 77.6406,12 C76.8385,12 76.1901,11.6927 75.6953,11.0781 C75.2005,10.4635 74.9531,9.65104 74.9531,8.64062 C74.9531,7.63021 75.2005,6.81771 75.6953,6.20312 C76.1901,5.58854 76.8385,5.28125 77.6406,5.28125 C78.1302,5.28125 78.5469,5.3776 78.8906,5.57031 C79.2344,5.76302 79.5208,6.05208 79.75,6.4375 L79.75,5.4375 L80.8281,5.4375 L80.8281,11.1875 M86.0156,8.70312 C85.151,8.70312 84.5495,8.80208 84.2109,9 C83.8724,9.19792 83.7031,9.53646 83.7031,10.0156 C83.7031,10.401 83.8307,10.7057 84.0859,10.9297 C84.3411,11.1536 84.6823,11.2656 85.1094,11.2656 C85.7135,11.2656 86.1953,11.0547 86.5547,10.6328 C86.9141,10.2109 87.0938,9.64583 87.0938,8.9375 L87.0938,8.70312 L86.0156,8.70312 M88.1719,8.25 L88.1719,12 L87.0938,12 L87.0938,11 C86.8438,11.3958 86.5365,11.6901 86.1719,11.8828 C85.8073,12.0755 85.3594,12.1719 84.8281,12.1719 C84.151,12.1719 83.6146,11.9818 83.2188,11.6016 C82.8229,11.2214 82.625,10.7188 82.625,10.0938 C82.625,9.35417 82.8724,8.79688 83.3672,8.42188 C83.862,8.04688 84.599,7.85938 85.5781,7.85938 L87.0938,7.85938 L87.0938,7.75 C87.0938,7.25 86.9297,6.86458 86.6016,6.59375 C86.2734,6.32292 85.8177,6.1875 85.2344,6.1875 C84.8594,6.1875 84.4922,6.23438 84.1328,6.32812 C83.7734,6.42188 83.4323,6.55729 83.1094,6.73438 L83.1094,5.73438 C83.5052,5.57812 83.888,5.46354 84.2578,5.39062 C84.6276,5.31771 84.9896,5.28125 85.3438,5.28125 C86.2917,5.28125 87,5.52604 87.4688,6.01562 C87.9375,6.50521 88.1719,7.25 88.1719,8.25 M91.4531,3.57812 L91.4531,5.4375 L93.6719,5.4375 L93.6719,6.28125 L91.4531,6.28125 L91.4531,9.84375 C91.4531,10.375 91.526,10.7161 91.6719,10.8672 C91.8177,11.0182 92.1146,11.0938 92.5625,11.0938 L93.6719,11.0938 L93.6719,12 L92.5625,12 C91.7292,12 91.1536,11.8438 90.8359,11.5312 C90.5182,11.2188 90.3594,10.6562 90.3594,9.84375 L90.3594,6.28125 L89.5781,6.28125 L89.5781,5.4375 L90.3594,5.4375 L90.3594,3.57812 L91.4531,3.57812 M95.0781,5.4375 L96.1562,5.4375 L96.1562,12 L95.0781,12 L95.0781,5.4375 M95.0781,2.875 L96.1562,2.875 L96.1562,4.25 L95.0781,4.25 L95.0781,2.875 M100.953,6.1875 C100.38,6.1875 99.9245,6.41406 99.5859,6.86719 C99.2474,7.32031 99.0781,7.9375 99.0781,8.71875 C99.0781,9.51042 99.2448,10.1302 99.5781,10.5781 C99.9115,11.026 100.37,11.25 100.953,11.25 C101.526,11.25 101.982,11.0234 102.32,10.5703 C102.659,10.1172 102.828,9.5 102.828,8.71875 C102.828,7.94792 102.659,7.33333 102.32,6.875 C101.982,6.41667 101.526,6.1875 100.953,6.1875 M100.953,5.28125 C101.891,5.28125 102.628,5.58594 103.164,6.19531 C103.701,6.80469 103.969,7.64583 103.969,8.71875 C103.969,9.79167 103.701,10.6354 103.164,11.25 C102.628,11.8646 101.891,12.1719 100.953,12.1719 C100.016,12.1719 99.2786,11.8646 98.7422,11.25 C98.2057,10.6354 97.9375,9.79167 97.9375,8.71875 C97.9375,7.64583 98.2057,6.80469 98.7422,6.19531 C99.2786,5.58594 100.016,5.28125 100.953,5.28125 M111.203,8.03125 L111.203,12 L110.125,12 L110.125,8.07812 C110.125,7.45312 110.003,6.98698 109.758,6.67969 C109.513,6.3724 109.151,6.21875 108.672,6.21875 C108.089,6.21875 107.628,6.40365 107.289,6.77344 C106.951,7.14323 106.781,7.65104 106.781,8.29688 L106.781,12 L105.703,12 L105.703,5.4375 L106.781,5.4375 L106.781,6.45312 C107.042,6.05729 107.346,5.76302 107.695,5.57031 C108.044,5.3776 108.448,5.28125 108.906,5.28125 C109.656,5.28125 110.227,5.51302 110.617,5.97656 C111.008,6.4401 111.203,7.125 111.203,8.03125 M115.25,3.25 L116.25,3.25 L113.203,13.1094 L112.203,13.1094 L115.25,3.25 M121.547,5.625 L121.547,6.65625 C121.245,6.5 120.93,6.38281 120.602,6.30469 C120.273,6.22656 119.932,6.1875 119.578,6.1875 C119.047,6.1875 118.646,6.26823 118.375,6.42969 C118.104,6.59115 117.969,6.83854 117.969,7.17188 C117.969,7.42188 118.065,7.61719 118.258,7.75781 C118.451,7.89844 118.839,8.03125 119.422,8.15625 L119.781,8.25 C120.552,8.40625 121.099,8.63542 121.422,8.9375 C121.745,9.23958 121.906,9.65625 121.906,10.1875 C121.906,10.8021 121.664,11.2865 121.18,11.6406 C120.695,11.9948 120.031,12.1719 119.188,12.1719 C118.833,12.1719 118.466,12.138 118.086,12.0703 C117.706,12.0026 117.307,11.901 116.891,11.7656 L116.891,10.6406 C117.286,10.849 117.677,11.0052 118.062,11.1094 C118.448,11.2135 118.833,11.2656 119.219,11.2656 C119.719,11.2656 120.107,11.1797 120.383,11.0078 C120.659,10.8359 120.797,10.5885 120.797,10.2656 C120.797,9.97396 120.698,9.75 120.5,9.59375 C120.302,9.4375 119.87,9.28646 119.203,9.14062 L118.828,9.0625 C118.161,8.91667 117.68,8.69792 117.383,8.40625 C117.086,8.11458 116.938,7.71875 116.938,7.21875 C116.938,6.59375 117.156,6.11458 117.594,5.78125 C118.031,5.44792 118.651,5.28125 119.453,5.28125 C119.849,5.28125 120.224,5.3099 120.578,5.36719 C120.932,5.42448 121.255,5.51042 121.547,5.625 M124.688,3.57812 L124.688,5.4375 L126.906,5.4375 L126.906,6.28125 L124.688,6.28125 L124.688,9.84375 C124.688,10.375 124.76,10.7161 124.906,10.8672 C125.052,11.0182 125.349,11.0938 125.797,11.0938 L126.906,11.0938 L126.906,12 L125.797,12 C124.964,12 124.388,11.8438 124.07,11.5312 C123.753,11.2188 123.594,10.6562 123.594,9.84375 L123.594,6.28125 L122.812,6.28125 L122.812,5.4375 L123.594,5.4375 L123.594,3.57812 L124.688,3.57812 M130.859,6.1875 C130.286,6.1875 129.831,6.41406 129.492,6.86719 C129.154,7.32031 128.984,7.9375 128.984,8.71875 C128.984,9.51042 129.151,10.1302 129.484,10.5781 C129.818,11.026 130.276,11.25 130.859,11.25 C131.432,11.25 131.888,11.0234 132.227,10.5703 C132.565,10.1172 132.734,9.5 132.734,8.71875 C132.734,7.94792 132.565,7.33333 132.227,6.875 C131.888,6.41667 131.432,6.1875 130.859,6.1875 M130.859,5.28125 C131.797,5.28125 132.534,5.58594 133.07,6.19531 C133.607,6.80469 133.875,7.64583 133.875,8.71875 C133.875,9.79167 133.607,10.6354 133.07,11.25 C132.534,11.8646 131.797,12.1719 130.859,12.1719 C129.922,12.1719 129.185,11.8646 128.648,11.25 C128.112,10.6354 127.844,9.79167 127.844,8.71875 C127.844,7.64583 128.112,6.80469 128.648,6.19531 C129.185,5.58594 129.922,5.28125 130.859,5.28125 M136.688,11.0156 L136.688,14.5 L135.609,14.5 L135.609,5.4375 L136.688,5.4375 L136.688,6.4375 C136.917,6.04167 137.203,5.75 137.547,5.5625 C137.891,5.375 138.302,5.28125 138.781,5.28125 C139.583,5.28125 140.234,5.59635 140.734,6.22656 C141.234,6.85677 141.484,7.6875 141.484,8.71875 C141.484,9.75 141.234,10.5833 140.734,11.2188 C140.234,11.8542 139.583,12.1719 138.781,12.1719 C138.302,12.1719 137.891,12.0755 137.547,11.8828 C137.203,11.6901 136.917,11.401 136.688,11.0156 M140.359,8.71875 C140.359,7.92708 140.195,7.30729 139.867,6.85938 C139.539,6.41146 139.094,6.1875 138.531,6.1875 C137.958,6.1875 137.508,6.41146 137.18,6.85938 C136.852,7.30729 136.688,7.92708 136.688,8.71875 C136.688,9.51042 136.852,10.1328 137.18,10.5859 C137.508,11.0391 137.958,11.2656 138.531,11.2656 C139.094,11.2656 139.539,11.0391 139.867,10.5859 C140.195,10.1328 140.359,9.51042 140.359,8.71875 M148.25,14 L148.25,14.8281 L142.016,14.8281 L142.016,14 L148.25,14 M154.719,8.03125 L154.719,12 L153.641,12 L153.641,8.07812 C153.641,7.45312 153.518,6.98698 153.273,6.67969 C153.029,6.3724 152.667,6.21875 152.188,6.21875 C151.604,6.21875 151.143,6.40365 150.805,6.77344 C150.466,7.14323 150.297,7.65104 150.297,8.29688 L150.297,12 L149.219,12 L149.219,5.4375 L150.297,5.4375 L150.297,6.45312 C150.557,6.05729 150.862,5.76302 151.211,5.57031 C151.56,5.3776 151.964,5.28125 152.422,5.28125 C153.172,5.28125 153.742,5.51302 154.133,5.97656 C154.523,6.4401 154.719,7.125 154.719,8.03125 M159.828,8.70312 C158.964,8.70312 158.362,8.80208 158.023,9 C157.685,9.19792 157.516,9.53646 157.516,10.0156 C157.516,10.401 157.643,10.7057 157.898,10.9297 C158.154,11.1536 158.495,11.2656 158.922,11.2656 C159.526,11.2656 160.008,11.0547 160.367,10.6328 C160.727,10.2109 160.906,9.64583 160.906,8.9375 L160.906,8.70312 L159.828,8.70312 M161.984,8.25 L161.984,12 L160.906,12 L160.906,11 C160.656,11.3958 160.349,11.6901 159.984,11.8828 C159.62,12.0755 159.172,12.1719 158.641,12.1719 C157.964,12.1719 157.427,11.9818 157.031,11.6016 C156.635,11.2214 156.438,10.7188 156.438,10.0938 C156.438,9.35417 156.685,8.79688 157.18,8.42188 C157.674,8.04688 158.411,7.85938 159.391,7.85938 L160.906,7.85938 L160.906,7.75 C160.906,7.25 160.742,6.86458 160.414,6.59375 C160.086,6.32292 159.63,6.1875 159.047,6.1875 C158.672,6.1875 158.305,6.23438 157.945,6.32812 C157.586,6.42188 157.245,6.55729 156.922,6.73438 L156.922,5.73438 C157.318,5.57812 157.701,5.46354 158.07,5.39062 C158.44,5.31771 158.802,5.28125 159.156,5.28125 C160.104,5.28125 160.812,5.52604 161.281,6.01562 C161.75,6.50521 161.984,7.25 161.984,8.25 M163.422,5.4375 L164.562,5.4375 L166.609,10.9375 L168.672,5.4375 L169.812,5.4375 L167.344,12 L165.875,12 L163.422,5.4375 M171.281,5.4375 L172.359,5.4375 L172.359,12 L171.281,12 L171.281,5.4375 M171.281,2.875 L172.359,2.875 L172.359,4.25 L171.281,4.25 L171.281,2.875 M178.938,8.64062 C178.938,7.85938 178.776,7.25521 178.453,6.82812 C178.13,6.40104 177.677,6.1875 177.094,6.1875 C176.521,6.1875 176.073,6.40104 175.75,6.82812 C175.427,7.25521 175.266,7.85938 175.266,8.64062 C175.266,9.42188 175.427,10.026 175.75,10.4531 C176.073,10.8802 176.521,11.0938 177.094,11.0938 C177.677,11.0938 178.13,10.8802 178.453,10.4531 C178.776,10.026 178.938,9.42188 178.938,8.64062 M180.016,11.1875 C180.016,12.3021 179.768,13.1328 179.273,13.6797 C178.779,14.2266 178.016,14.5 176.984,14.5 C176.609,14.5 176.253,14.4714 175.914,14.4141 C175.576,14.3568 175.25,14.2708 174.938,14.1562 L174.938,13.1094 C175.25,13.276 175.562,13.401 175.875,13.4844 C176.188,13.5677 176.5,13.6094 176.812,13.6094 C177.521,13.6094 178.052,13.4245 178.406,13.0547 C178.76,12.6849 178.938,12.125 178.938,11.375 L178.938,10.8438 C178.708,11.2292 178.422,11.5182 178.078,11.7109 C177.734,11.9036 177.318,12 176.828,12 C176.026,12 175.378,11.6927 174.883,11.0781 C174.388,10.4635 174.141,9.65104 174.141,8.64062 C174.141,7.63021 174.388,6.81771 174.883,6.20312 C175.378,5.58854 176.026,5.28125 176.828,5.28125 C177.318,5.28125 177.734,5.3776 178.078,5.57031 C178.422,5.76302 178.708,6.05208 178.938,6.4375 L178.938,5.4375 L180.016,5.4375 L180.016,11.1875 M185.203,8.70312 C184.339,8.70312 183.737,8.80208 183.398,9 C183.06,9.19792 182.891,9.53646 182.891,10.0156 C182.891,10.401 183.018,10.7057 183.273,10.9297 C183.529,11.1536 183.87,11.2656 184.297,11.2656 C184.901,11.2656 185.383,11.0547 185.742,10.6328 C186.102,10.2109 186.281,9.64583 186.281,8.9375 L186.281,8.70312 L185.203,8.70312 M187.359,8.25 L187.359,12 L186.281,12 L186.281,11 C186.031,11.3958 185.724,11.6901 185.359,11.8828 C184.995,12.0755 184.547,12.1719 184.016,12.1719 C183.339,12.1719 182.802,11.9818 182.406,11.6016 C182.01,11.2214 181.812,10.7188 181.812,10.0938 C181.812,9.35417 182.06,8.79688 182.555,8.42188 C183.049,8.04688 183.786,7.85938 184.766,7.85938 L186.281,7.85938 L186.281,7.75 C186.281,7.25 186.117,6.86458 185.789,6.59375 C185.461,6.32292 185.005,6.1875 184.422,6.1875 C184.047,6.1875 183.68,6.23438 183.32,6.32812 C182.961,6.42188 182.62,6.55729 182.297,6.73438 L182.297,5.73438 C182.693,5.57812 183.076,5.46354 183.445,5.39062 C183.815,5.31771 184.177,5.28125 184.531,5.28125 C185.479,5.28125 186.188,5.52604 186.656,6.01562 C187.125,6.50521 187.359,7.25 187.359,8.25 M190.641,3.57812 L190.641,5.4375 L192.859,5.4375 L192.859,6.28125 L190.641,6.28125 L190.641,9.84375 C190.641,10.375 190.714,10.7161 190.859,10.8672 C191.005,11.0182 191.302,11.0938 191.75,11.0938 L192.859,11.0938 L192.859,12 L191.75,12 C190.917,12 190.341,11.8438 190.023,11.5312 C189.706,11.2188 189.547,10.6562 189.547,9.84375 L189.547,6.28125 L188.766,6.28125 L188.766,5.4375 L189.547,5.4375 L189.547,3.57812 L190.641,3.57812 M194.266,5.4375 L195.344,5.4375 L195.344,12 L194.266,12 L194.266,5.4375 M194.266,2.875 L195.344,2.875 L195.344,4.25 L194.266,4.25 L194.266,2.875 M200.141,6.1875 C199.568,6.1875 199.112,6.41406 198.773,6.86719 C198.435,7.32031 198.266,7.9375 198.266,8.71875 C198.266,9.51042 198.432,10.1302 198.766,10.5781 C199.099,11.026 199.557,11.25 200.141,11.25 C200.714,11.25 201.169,11.0234 201.508,10.5703 C201.846,10.1172 202.016,9.5 202.016,8.71875 C202.016,7.94792 201.846,7.33333 201.508,6.875 C201.169,6.41667 200.714,6.1875 200.141,6.1875 M200.141,5.28125 C201.078,5.28125 201.815,5.58594 202.352,6.19531 C202.888,6.80469 203.156,7.64583 203.156,8.71875 C203.156,9.79167 202.888,10.6354 202.352,11.25 C201.815,11.8646 201.078,12.1719 200.141,12.1719 C199.203,12.1719 198.466,11.8646 197.93,11.25 C197.393,10.6354 197.125,9.79167 197.125,8.71875 C197.125,7.64583 197.393,6.80469 197.93,6.19531 C198.466,5.58594 199.203,5.28125 200.141,5.28125 M210.391,8.03125 L210.391,12 L209.312,12 L209.312,8.07812 C209.312,7.45312 209.19,6.98698 208.945,6.67969 C208.701,6.3724 208.339,6.21875 207.859,6.21875 C207.276,6.21875 206.815,6.40365 206.477,6.77344 C206.138,7.14323 205.969,7.65104 205.969,8.29688 L205.969,12 L204.891,12 L204.891,5.4375 L205.969,5.4375 L205.969,6.45312 C206.229,6.05729 206.534,5.76302 206.883,5.57031 C207.232,5.3776 207.635,5.28125 208.094,5.28125 C208.844,5.28125 209.414,5.51302 209.805,5.97656 C210.195,6.4401 210.391,7.125 210.391,8.03125 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1130.55,2111.82)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1130.55,2111.82)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M576.5,-786.94 L765.5,-786.94 L765.5,-751.94 L576.5,-751.94 L576.5,-786.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1186.66,939.878)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1186.66,939.878)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1186.66,939.878)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M99.8906,5.625 L99.8906,6.65625 C99.5885,6.5 99.2734,6.38281 98.9453,6.30469 C98.6172,6.22656 98.276,6.1875 97.9219,6.1875 C97.3906,6.1875 96.9896,6.26823 96.7188,6.42969 C96.4479,6.59115 96.3125,6.83854 96.3125,7.17188 C96.3125,7.42188 96.4089,7.61719 96.6016,7.75781 C96.7943,7.89844 97.1823,8.03125 97.7656,8.15625 L98.125,8.25 C98.8958,8.40625 99.4427,8.63542 99.7656,8.9375 C100.089,9.23958 100.25,9.65625 100.25,10.1875 C100.25,10.8021 100.008,11.2865 99.5234,11.6406 C99.0391,11.9948 98.375,12.1719 97.5312,12.1719 C97.1771,12.1719 96.8099,12.138 96.4297,12.0703 C96.0495,12.0026 95.651,11.901 95.2344,11.7656 L95.2344,10.6406 C95.6302,10.849 96.0208,11.0052 96.4062,11.1094 C96.7917,11.2135 97.1771,11.2656 97.5625,11.2656 C98.0625,11.2656 98.4505,11.1797 98.7266,11.0078 C99.0026,10.8359 99.1406,10.5885 99.1406,10.2656 C99.1406,9.97396 99.0417,9.75 98.8438,9.59375 C98.6458,9.4375 98.2135,9.28646 97.5469,9.14062 L97.1719,9.0625 C96.5052,8.91667 96.0234,8.69792 95.7266,8.40625 C95.4297,8.11458 95.2812,7.71875 95.2812,7.21875 C95.2812,6.59375 95.5,6.11458 95.9375,5.78125 C96.375,5.44792 96.9948,5.28125 97.7969,5.28125 C98.1927,5.28125 98.5677,5.3099 98.9219,5.36719 C99.276,5.42448 99.599,5.51042 99.8906,5.625 M104.938,8.70312 C104.073,8.70312 103.471,8.80208 103.133,9 C102.794,9.19792 102.625,9.53646 102.625,10.0156 C102.625,10.401 102.753,10.7057 103.008,10.9297 C103.263,11.1536 103.604,11.2656 104.031,11.2656 C104.635,11.2656 105.117,11.0547 105.477,10.6328 C105.836,10.2109 106.016,9.64583 106.016,8.9375 L106.016,8.70312 L104.938,8.70312 M107.094,8.25 L107.094,12 L106.016,12 L106.016,11 C105.766,11.3958 105.458,11.6901 105.094,11.8828 C104.729,12.0755 104.281,12.1719 103.75,12.1719 C103.073,12.1719 102.536,11.9818 102.141,11.6016 C101.745,11.2214 101.547,10.7188 101.547,10.0938 C101.547,9.35417 101.794,8.79688 102.289,8.42188 C102.784,8.04688 103.521,7.85938 104.5,7.85938 L106.016,7.85938 L106.016,7.75 C106.016,7.25 105.852,6.86458 105.523,6.59375 C105.195,6.32292 104.74,6.1875 104.156,6.1875 C103.781,6.1875 103.414,6.23438 103.055,6.32812 C102.695,6.42188 102.354,6.55729 102.031,6.73438 L102.031,5.73438 C102.427,5.57812 102.81,5.46354 103.18,5.39062 C103.549,5.31771 103.911,5.28125 104.266,5.28125 C105.214,5.28125 105.922,5.52604 106.391,6.01562 C106.859,6.50521 107.094,7.25 107.094,8.25 M108.531,5.4375 L109.672,5.4375 L111.719,10.9375 L113.781,5.4375 L114.922,5.4375 L112.453,12 L110.984,12 L108.531,5.4375 M122.016,8.45312 L122.016,8.96875 L117.047,8.96875 C117.099,9.71875 117.326,10.2865 117.727,10.6719 C118.128,11.0573 118.682,11.25 119.391,11.25 C119.807,11.25 120.211,11.2005 120.602,11.1016 C120.992,11.0026 121.38,10.849 121.766,10.6406 L121.766,11.6719 C121.37,11.8281 120.969,11.9505 120.562,12.0391 C120.156,12.1276 119.745,12.1719 119.328,12.1719 C118.286,12.1719 117.458,11.8672 116.844,11.2578 C116.229,10.6484 115.922,9.82292 115.922,8.78125 C115.922,7.70833 116.214,6.85677 116.797,6.22656 C117.38,5.59635 118.161,5.28125 119.141,5.28125 C120.026,5.28125 120.727,5.5651 121.242,6.13281 C121.758,6.70052 122.016,7.47396 122.016,8.45312 M120.938,8.125 C120.927,7.54167 120.76,7.07292 120.438,6.71875 C120.115,6.36458 119.688,6.1875 119.156,6.1875 C118.552,6.1875 118.07,6.35938 117.711,6.70312 C117.352,7.04688 117.146,7.52604 117.094,8.14062 L120.938,8.125 M128.766,14 L128.766,14.8281 L122.531,14.8281 L122.531,14 L128.766,14 M134.875,6.70312 C135.146,6.21354 135.469,5.85417 135.844,5.625 C136.219,5.39583 136.661,5.28125 137.172,5.28125 C137.859,5.28125 138.388,5.52083 138.758,6 C139.128,6.47917 139.312,7.15625 139.312,8.03125 L139.312,12 L138.234,12 L138.234,8.07812 C138.234,7.44271 138.122,6.97396 137.898,6.67188 C137.674,6.36979 137.333,6.21875 136.875,6.21875 C136.312,6.21875 135.87,6.40365 135.547,6.77344 C135.224,7.14323 135.062,7.65104 135.062,8.29688 L135.062,12 L133.984,12 L133.984,8.07812 C133.984,7.44271 133.872,6.97396 133.648,6.67188 C133.424,6.36979 133.078,6.21875 132.609,6.21875 C132.057,6.21875 131.62,6.40365 131.297,6.77344 C130.974,7.14323 130.812,7.65104 130.812,8.29688 L130.812,12 L129.734,12 L129.734,5.4375 L130.812,5.4375 L130.812,6.45312 C131.062,6.05729 131.359,5.76302 131.703,5.57031 C132.047,5.3776 132.453,5.28125 132.922,5.28125 C133.401,5.28125 133.807,5.40104 134.141,5.64062 C134.474,5.88021 134.719,6.23438 134.875,6.70312 M144.438,8.70312 C143.573,8.70312 142.971,8.80208 142.633,9 C142.294,9.19792 142.125,9.53646 142.125,10.0156 C142.125,10.401 142.253,10.7057 142.508,10.9297 C142.763,11.1536 143.104,11.2656 143.531,11.2656 C144.135,11.2656 144.617,11.0547 144.977,10.6328 C145.336,10.2109 145.516,9.64583 145.516,8.9375 L145.516,8.70312 L144.438,8.70312 M146.594,8.25 L146.594,12 L145.516,12 L145.516,11 C145.266,11.3958 144.958,11.6901 144.594,11.8828 C144.229,12.0755 143.781,12.1719 143.25,12.1719 C142.573,12.1719 142.036,11.9818 141.641,11.6016 C141.245,11.2214 141.047,10.7188 141.047,10.0938 C141.047,9.35417 141.294,8.79688 141.789,8.42188 C142.284,8.04688 143.021,7.85938 144,7.85938 L145.516,7.85938 L145.516,7.75 C145.516,7.25 145.352,6.86458 145.023,6.59375 C144.695,6.32292 144.24,6.1875 143.656,6.1875 C143.281,6.1875 142.914,6.23438 142.555,6.32812 C142.195,6.42188 141.854,6.55729 141.531,6.73438 L141.531,5.73438 C141.927,5.57812 142.31,5.46354 142.68,5.39062 C143.049,5.31771 143.411,5.28125 143.766,5.28125 C144.714,5.28125 145.422,5.52604 145.891,6.01562 C146.359,6.50521 146.594,7.25 146.594,8.25 M149.844,11.0156 L149.844,14.5 L148.766,14.5 L148.766,5.4375 L149.844,5.4375 L149.844,6.4375 C150.073,6.04167 150.359,5.75 150.703,5.5625 C151.047,5.375 151.458,5.28125 151.938,5.28125 C152.74,5.28125 153.391,5.59635 153.891,6.22656 C154.391,6.85677 154.641,7.6875 154.641,8.71875 C154.641,9.75 154.391,10.5833 153.891,11.2188 C153.391,11.8542 152.74,12.1719 151.938,12.1719 C151.458,12.1719 151.047,12.0755 150.703,11.8828 C150.359,11.6901 150.073,11.401 149.844,11.0156 M153.516,8.71875 C153.516,7.92708 153.352,7.30729 153.023,6.85938 C152.695,6.41146 152.25,6.1875 151.688,6.1875 C151.115,6.1875 150.664,6.41146 150.336,6.85938 C150.008,7.30729 149.844,7.92708 149.844,8.71875 C149.844,9.51042 150.008,10.1328 150.336,10.5859 C150.664,11.0391 151.115,11.2656 151.688,11.2656 C152.25,11.2656 152.695,11.0391 153.023,10.5859 C153.352,10.1328 153.516,9.51042 153.516,8.71875 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1186.66,939.878)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1186.66,939.878)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M616.499,-462.94 L725.501,-462.94 L725.501,-427.94 L616.499,-427.94 L616.499,-462.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1259.11,1587.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1259.11,1587.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1259.11,1587.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M9.48438,6.4375 L9.48438,2.875 L10.5625,2.875 L10.5625,12 L9.48438,12 L9.48438,11.0156 C9.25521,11.401 8.96875,11.6901 8.625,11.8828 C8.28125,12.0755 7.86458,12.1719 7.375,12.1719 C6.58333,12.1719 5.9375,11.8542 5.4375,11.2188 C4.9375,10.5833 4.6875,9.75 4.6875,8.71875 C4.6875,7.6875 4.9375,6.85677 5.4375,6.22656 C5.9375,5.59635 6.58333,5.28125 7.375,5.28125 C7.86458,5.28125 8.28125,5.375 8.625,5.5625 C8.96875,5.75 9.25521,6.04167 9.48438,6.4375 M5.8125,8.71875 C5.8125,9.51042 5.97396,10.1328 6.29688,10.5859 C6.61979,11.0391 7.06771,11.2656 7.64062,11.2656 C8.21354,11.2656 8.66406,11.0391 8.99219,10.5859 C9.32031,10.1328 9.48438,9.51042 9.48438,8.71875 C9.48438,7.92708 9.32031,7.30729 8.99219,6.85938 C8.66406,6.41146 8.21354,6.1875 7.64062,6.1875 C7.06771,6.1875 6.61979,6.41146 6.29688,6.85938 C5.97396,7.30729 5.8125,7.92708 5.8125,8.71875 M18.3906,8.45312 L18.3906,8.96875 L13.4219,8.96875 C13.474,9.71875 13.7005,10.2865 14.1016,10.6719 C14.5026,11.0573 15.0573,11.25 15.7656,11.25 C16.1823,11.25 16.5859,11.2005 16.9766,11.1016 C17.3672,11.0026 17.7552,10.849 18.1406,10.6406 L18.1406,11.6719 C17.7448,11.8281 17.3438,11.9505 16.9375,12.0391 C16.5312,12.1276 16.1198,12.1719 15.7031,12.1719 C14.6615,12.1719 13.8333,11.8672 13.2188,11.2578 C12.6042,10.6484 12.2969,9.82292 12.2969,8.78125 C12.2969,7.70833 12.5885,6.85677 13.1719,6.22656 C13.7552,5.59635 14.5365,5.28125 15.5156,5.28125 C16.401,5.28125 17.1016,5.5651 17.6172,6.13281 C18.1328,6.70052 18.3906,7.47396 18.3906,8.45312 M17.3125,8.125 C17.3021,7.54167 17.1354,7.07292 16.8125,6.71875 C16.4896,6.36458 16.0625,6.1875 15.5312,6.1875 C14.9271,6.1875 14.4453,6.35938 14.0859,6.70312 C13.7266,7.04688 13.5208,7.52604 13.4688,8.14062 L17.3125,8.125 M21.2188,3.57812 L21.2188,5.4375 L23.4375,5.4375 L23.4375,6.28125 L21.2188,6.28125 L21.2188,9.84375 C21.2188,10.375 21.2917,10.7161 21.4375,10.8672 C21.5833,11.0182 21.8802,11.0938 22.3281,11.0938 L23.4375,11.0938 L23.4375,12 L22.3281,12 C21.4948,12 20.9193,11.8438 20.6016,11.5312 C20.2839,11.2188 20.125,10.6562 20.125,9.84375 L20.125,6.28125 L19.3438,6.28125 L19.3438,5.4375 L20.125,5.4375 L20.125,3.57812 L21.2188,3.57812 M30.4688,8.45312 L30.4688,8.96875 L25.5,8.96875 C25.5521,9.71875 25.7786,10.2865 26.1797,10.6719 C26.5807,11.0573 27.1354,11.25 27.8438,11.25 C28.2604,11.25 28.6641,11.2005 29.0547,11.1016 C29.4453,11.0026 29.8333,10.849 30.2188,10.6406 L30.2188,11.6719 C29.8229,11.8281 29.4219,11.9505 29.0156,12.0391 C28.6094,12.1276 28.1979,12.1719 27.7812,12.1719 C26.7396,12.1719 25.9115,11.8672 25.2969,11.2578 C24.6823,10.6484 24.375,9.82292 24.375,8.78125 C24.375,7.70833 24.6667,6.85677 25.25,6.22656 C25.8333,5.59635 26.6146,5.28125 27.5938,5.28125 C28.4792,5.28125 29.1797,5.5651 29.6953,6.13281 C30.2109,6.70052 30.4688,7.47396 30.4688,8.45312 M29.3906,8.125 C29.3802,7.54167 29.2135,7.07292 28.8906,6.71875 C28.5677,6.36458 28.1406,6.1875 27.6094,6.1875 C27.0052,6.1875 26.5234,6.35938 26.1641,6.70312 C25.8047,7.04688 25.599,7.52604 25.5469,8.14062 L29.3906,8.125 M36.9531,5.6875 L36.9531,6.70312 C36.6406,6.52604 36.3333,6.39583 36.0312,6.3125 C35.7292,6.22917 35.4219,6.1875 35.1094,6.1875 C34.401,6.1875 33.8542,6.40885 33.4688,6.85156 C33.0833,7.29427 32.8906,7.91667 32.8906,8.71875 C32.8906,9.52083 33.0833,10.1432 33.4688,10.5859 C33.8542,11.0286 34.401,11.25 35.1094,11.25 C35.4219,11.25 35.7292,11.2083 36.0312,11.125 C36.3333,11.0417 36.6406,10.9167 36.9531,10.75 L36.9531,11.75 C36.651,11.8854 36.3385,11.9896 36.0156,12.0625 C35.6927,12.1354 35.349,12.1719 34.9844,12.1719 C33.9948,12.1719 33.2083,11.862 32.625,11.2422 C32.0417,10.6224 31.75,9.78125 31.75,8.71875 C31.75,7.65625 32.0443,6.81771 32.6328,6.20312 C33.2214,5.58854 34.0312,5.28125 35.0625,5.28125 C35.3854,5.28125 35.7057,5.3151 36.0234,5.38281 C36.3411,5.45052 36.651,5.55208 36.9531,5.6875 M39.8906,3.57812 L39.8906,5.4375 L42.1094,5.4375 L42.1094,6.28125 L39.8906,6.28125 L39.8906,9.84375 C39.8906,10.375 39.9635,10.7161 40.1094,10.8672 C40.2552,11.0182 40.5521,11.0938 41,11.0938 L42.1094,11.0938 L42.1094,12 L41,12 C40.1667,12 39.5911,11.8438 39.2734,11.5312 C38.9557,11.2188 38.7969,10.6562 38.7969,9.84375 L38.7969,6.28125 L38.0156,6.28125 L38.0156,5.4375 L38.7969,5.4375 L38.7969,3.57812 L39.8906,3.57812 M48.5156,14 L48.5156,14.8281 L42.2812,14.8281 L42.2812,14 L48.5156,14 M53.8438,6.4375 L53.8438,2.875 L54.9219,2.875 L54.9219,12 L53.8438,12 L53.8438,11.0156 C53.6146,11.401 53.3281,11.6901 52.9844,11.8828 C52.6406,12.0755 52.224,12.1719 51.7344,12.1719 C50.9427,12.1719 50.2969,11.8542 49.7969,11.2188 C49.2969,10.5833 49.0469,9.75 49.0469,8.71875 C49.0469,7.6875 49.2969,6.85677 49.7969,6.22656 C50.2969,5.59635 50.9427,5.28125 51.7344,5.28125 C52.224,5.28125 52.6406,5.375 52.9844,5.5625 C53.3281,5.75 53.6146,6.04167 53.8438,6.4375 M50.1719,8.71875 C50.1719,9.51042 50.3333,10.1328 50.6562,10.5859 C50.9792,11.0391 51.4271,11.2656 52,11.2656 C52.5729,11.2656 53.0234,11.0391 53.3516,10.5859 C53.6797,10.1328 53.8438,9.51042 53.8438,8.71875 C53.8438,7.92708 53.6797,7.30729 53.3516,6.85938 C53.0234,6.41146 52.5729,6.1875 52,6.1875 C51.4271,6.1875 50.9792,6.41146 50.6562,6.85938 C50.3333,7.30729 50.1719,7.92708 50.1719,8.71875 M59.6719,6.1875 C59.099,6.1875 58.6432,6.41406 58.3047,6.86719 C57.9661,7.32031 57.7969,7.9375 57.7969,8.71875 C57.7969,9.51042 57.9635,10.1302 58.2969,10.5781 C58.6302,11.026 59.0885,11.25 59.6719,11.25 C60.2448,11.25 60.7005,11.0234 61.0391,10.5703 C61.3776,10.1172 61.5469,9.5 61.5469,8.71875 C61.5469,7.94792 61.3776,7.33333 61.0391,6.875 C60.7005,6.41667 60.2448,6.1875 59.6719,6.1875 M59.6719,5.28125 C60.6094,5.28125 61.3464,5.58594 61.8828,6.19531 C62.4193,6.80469 62.6875,7.64583 62.6875,8.71875 C62.6875,9.79167 62.4193,10.6354 61.8828,11.25 C61.3464,11.8646 60.6094,12.1719 59.6719,12.1719 C58.7344,12.1719 57.9974,11.8646 57.4609,11.25 C56.9245,10.6354 56.6562,9.79167 56.6562,8.71875 C56.6562,7.64583 56.9245,6.80469 57.4609,6.19531 C57.9974,5.58594 58.7344,5.28125 59.6719,5.28125 M67,6.1875 C66.4271,6.1875 65.9714,6.41406 65.6328,6.86719 C65.2943,7.32031 65.125,7.9375 65.125,8.71875 C65.125,9.51042 65.2917,10.1302 65.625,10.5781 C65.9583,11.026 66.4167,11.25 67,11.25 C67.5729,11.25 68.0286,11.0234 68.3672,10.5703 C68.7057,10.1172 68.875,9.5 68.875,8.71875 C68.875,7.94792 68.7057,7.33333 68.3672,6.875 C68.0286,6.41667 67.5729,6.1875 67,6.1875 M67,5.28125 C67.9375,5.28125 68.6745,5.58594 69.2109,6.19531 C69.7474,6.80469 70.0156,7.64583 70.0156,8.71875 C70.0156,9.79167 69.7474,10.6354 69.2109,11.25 C68.6745,11.8646 67.9375,12.1719 67,12.1719 C66.0625,12.1719 65.3255,11.8646 64.7891,11.25 C64.2526,10.6354 63.9844,9.79167 63.9844,8.71875 C63.9844,7.64583 64.2526,6.80469 64.7891,6.19531 C65.3255,5.58594 66.0625,5.28125 67,5.28125 M75.5938,6.4375 C75.4688,6.375 75.3359,6.32552 75.1953,6.28906 C75.0547,6.2526 74.8958,6.23438 74.7188,6.23438 C74.1146,6.23438 73.6484,6.43229 73.3203,6.82812 C72.9922,7.22396 72.8281,7.79688 72.8281,8.54688 L72.8281,12 L71.75,12 L71.75,5.4375 L72.8281,5.4375 L72.8281,6.45312 C73.0573,6.05729 73.3542,5.76302 73.7188,5.57031 C74.0833,5.3776 74.526,5.28125 75.0469,5.28125 C75.1198,5.28125 75.2005,5.28646 75.2891,5.29688 C75.3776,5.30729 75.474,5.32292 75.5781,5.34375 L75.5938,6.4375 M80.8906,5.625 L80.8906,6.65625 C80.5885,6.5 80.2734,6.38281 79.9453,6.30469 C79.6172,6.22656 79.276,6.1875 78.9219,6.1875 C78.3906,6.1875 77.9896,6.26823 77.7188,6.42969 C77.4479,6.59115 77.3125,6.83854 77.3125,7.17188 C77.3125,7.42188 77.4089,7.61719 77.6016,7.75781 C77.7943,7.89844 78.1823,8.03125 78.7656,8.15625 L79.125,8.25 C79.8958,8.40625 80.4427,8.63542 80.7656,8.9375 C81.0885,9.23958 81.25,9.65625 81.25,10.1875 C81.25,10.8021 81.0078,11.2865 80.5234,11.6406 C80.0391,11.9948 79.375,12.1719 78.5312,12.1719 C78.1771,12.1719 77.8099,12.138 77.4297,12.0703 C77.0495,12.0026 76.651,11.901 76.2344,11.7656 L76.2344,10.6406 C76.6302,10.849 77.0208,11.0052 77.4062,11.1094 C77.7917,11.2135 78.1771,11.2656 78.5625,11.2656 C79.0625,11.2656 79.4505,11.1797 79.7266,11.0078 C80.0026,10.8359 80.1406,10.5885 80.1406,10.2656 C80.1406,9.97396 80.0417,9.75 79.8438,9.59375 C79.6458,9.4375 79.2135,9.28646 78.5469,9.14062 L78.1719,9.0625 C77.5052,8.91667 77.0234,8.69792 76.7266,8.40625 C76.4297,8.11458 76.2812,7.71875 76.2812,7.21875 C76.2812,6.59375 76.5,6.11458 76.9375,5.78125 C77.375,5.44792 77.9948,5.28125 78.7969,5.28125 C79.1927,5.28125 79.5677,5.3099 79.9219,5.36719 C80.276,5.42448 80.599,5.51042 80.8906,5.625 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1259.11,1587.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1259.11,1587.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1141.5,-980.94 L1344.5,-980.94 L1344.5,-945.94 L1141.5,-945.94 L1141.5,-980.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2318.89,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2318.89,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,2318.89,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.625,8.03125 L10.625,12 L9.54688,12 L9.54688,8.07812 C9.54688,7.45312 9.42448,6.98698 9.17969,6.67969 C8.9349,6.3724 8.57292,6.21875 8.09375,6.21875 C7.51042,6.21875 7.04948,6.40365 6.71094,6.77344 C6.3724,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,2.875 L6.20312,2.875 L6.20312,6.45312 C6.46354,6.05729 6.76823,5.76302 7.11719,5.57031 C7.46615,5.3776 7.86979,5.28125 8.32812,5.28125 C9.07812,5.28125 9.64844,5.51302 10.0391,5.97656 C10.4297,6.4401 10.625,7.125 10.625,8.03125 M15.2969,6.1875 C14.724,6.1875 14.2682,6.41406 13.9297,6.86719 C13.5911,7.32031 13.4219,7.9375 13.4219,8.71875 C13.4219,9.51042 13.5885,10.1302 13.9219,10.5781 C14.2552,11.026 14.7135,11.25 15.2969,11.25 C15.8698,11.25 16.3255,11.0234 16.6641,10.5703 C17.0026,10.1172 17.1719,9.5 17.1719,8.71875 C17.1719,7.94792 17.0026,7.33333 16.6641,6.875 C16.3255,6.41667 15.8698,6.1875 15.2969,6.1875 M15.2969,5.28125 C16.2344,5.28125 16.9714,5.58594 17.5078,6.19531 C18.0443,6.80469 18.3125,7.64583 18.3125,8.71875 C18.3125,9.79167 18.0443,10.6354 17.5078,11.25 C16.9714,11.8646 16.2344,12.1719 15.2969,12.1719 C14.3594,12.1719 13.6224,11.8646 13.0859,11.25 C12.5495,10.6354 12.2812,9.79167 12.2812,8.71875 C12.2812,7.64583 12.5495,6.80469 13.0859,6.19531 C13.6224,5.58594 14.3594,5.28125 15.2969,5.28125 M25.1875,6.70312 C25.4583,6.21354 25.7812,5.85417 26.1562,5.625 C26.5312,5.39583 26.974,5.28125 27.4844,5.28125 C28.1719,5.28125 28.7005,5.52083 29.0703,6 C29.4401,6.47917 29.625,7.15625 29.625,8.03125 L29.625,12 L28.5469,12 L28.5469,8.07812 C28.5469,7.44271 28.4349,6.97396 28.2109,6.67188 C27.987,6.36979 27.6458,6.21875 27.1875,6.21875 C26.625,6.21875 26.1823,6.40365 25.8594,6.77344 C25.5365,7.14323 25.375,7.65104 25.375,8.29688 L25.375,12 L24.2969,12 L24.2969,8.07812 C24.2969,7.44271 24.1849,6.97396 23.9609,6.67188 C23.737,6.36979 23.3906,6.21875 22.9219,6.21875 C22.3698,6.21875 21.9323,6.40365 21.6094,6.77344 C21.2865,7.14323 21.125,7.65104 21.125,8.29688 L21.125,12 L20.0469,12 L20.0469,5.4375 L21.125,5.4375 L21.125,6.45312 C21.375,6.05729 21.6719,5.76302 22.0156,5.57031 C22.3594,5.3776 22.7656,5.28125 23.2344,5.28125 C23.7135,5.28125 24.1198,5.40104 24.4531,5.64062 C24.7865,5.88021 25.0312,6.23438 25.1875,6.70312 M37.3906,8.45312 L37.3906,8.96875 L32.4219,8.96875 C32.474,9.71875 32.7005,10.2865 33.1016,10.6719 C33.5026,11.0573 34.0573,11.25 34.7656,11.25 C35.1823,11.25 35.5859,11.2005 35.9766,11.1016 C36.3672,11.0026 36.7552,10.849 37.1406,10.6406 L37.1406,11.6719 C36.7448,11.8281 36.3438,11.9505 35.9375,12.0391 C35.5312,12.1276 35.1198,12.1719 34.7031,12.1719 C33.6615,12.1719 32.8333,11.8672 32.2188,11.2578 C31.6042,10.6484 31.2969,9.82292 31.2969,8.78125 C31.2969,7.70833 31.5885,6.85677 32.1719,6.22656 C32.7552,5.59635 33.5365,5.28125 34.5156,5.28125 C35.401,5.28125 36.1016,5.5651 36.6172,6.13281 C37.1328,6.70052 37.3906,7.47396 37.3906,8.45312 M36.3125,8.125 C36.3021,7.54167 36.1354,7.07292 35.8125,6.71875 C35.4896,6.36458 35.0625,6.1875 34.5312,6.1875 C33.9271,6.1875 33.4453,6.35938 33.0859,6.70312 C32.7266,7.04688 32.5208,7.52604 32.4688,8.14062 L36.3125,8.125 M42.9531,6.4375 C42.8281,6.375 42.6953,6.32552 42.5547,6.28906 C42.4141,6.2526 42.2552,6.23438 42.0781,6.23438 C41.474,6.23438 41.0078,6.43229 40.6797,6.82812 C40.3516,7.22396 40.1875,7.79688 40.1875,8.54688 L40.1875,12 L39.1094,12 L39.1094,5.4375 L40.1875,5.4375 L40.1875,6.45312 C40.4167,6.05729 40.7135,5.76302 41.0781,5.57031 C41.4427,5.3776 41.8854,5.28125 42.4062,5.28125 C42.4792,5.28125 42.5599,5.28646 42.6484,5.29688 C42.737,5.30729 42.8333,5.32292 42.9375,5.34375 L42.9531,6.4375 M49.0625,14 L49.0625,14.8281 L42.8281,14.8281 L42.8281,14 L49.0625,14 M55.1719,6.70312 C55.4427,6.21354 55.7656,5.85417 56.1406,5.625 C56.5156,5.39583 56.9583,5.28125 57.4688,5.28125 C58.1562,5.28125 58.6849,5.52083 59.0547,6 C59.4245,6.47917 59.6094,7.15625 59.6094,8.03125 L59.6094,12 L58.5312,12 L58.5312,8.07812 C58.5312,7.44271 58.4193,6.97396 58.1953,6.67188 C57.9714,6.36979 57.6302,6.21875 57.1719,6.21875 C56.6094,6.21875 56.1667,6.40365 55.8438,6.77344 C55.5208,7.14323 55.3594,7.65104 55.3594,8.29688 L55.3594,12 L54.2812,12 L54.2812,8.07812 C54.2812,7.44271 54.1693,6.97396 53.9453,6.67188 C53.7214,6.36979 53.375,6.21875 52.9062,6.21875 C52.3542,6.21875 51.9167,6.40365 51.5938,6.77344 C51.2708,7.14323 51.1094,7.65104 51.1094,8.29688 L51.1094,12 L50.0312,12 L50.0312,5.4375 L51.1094,5.4375 L51.1094,6.45312 C51.3594,6.05729 51.6562,5.76302 52,5.57031 C52.3438,5.3776 52.75,5.28125 53.2188,5.28125 C53.6979,5.28125 54.1042,5.40104 54.4375,5.64062 C54.7708,5.88021 55.0156,6.23438 55.1719,6.70312 M64.7344,8.70312 C63.8698,8.70312 63.2682,8.80208 62.9297,9 C62.5911,9.19792 62.4219,9.53646 62.4219,10.0156 C62.4219,10.401 62.5495,10.7057 62.8047,10.9297 C63.0599,11.1536 63.401,11.2656 63.8281,11.2656 C64.4323,11.2656 64.9141,11.0547 65.2734,10.6328 C65.6328,10.2109 65.8125,9.64583 65.8125,8.9375 L65.8125,8.70312 L64.7344,8.70312 M66.8906,8.25 L66.8906,12 L65.8125,12 L65.8125,11 C65.5625,11.3958 65.2552,11.6901 64.8906,11.8828 C64.526,12.0755 64.0781,12.1719 63.5469,12.1719 C62.8698,12.1719 62.3333,11.9818 61.9375,11.6016 C61.5417,11.2214 61.3438,10.7188 61.3438,10.0938 C61.3438,9.35417 61.5911,8.79688 62.0859,8.42188 C62.5807,8.04688 63.3177,7.85938 64.2969,7.85938 L65.8125,7.85938 L65.8125,7.75 C65.8125,7.25 65.6484,6.86458 65.3203,6.59375 C64.9922,6.32292 64.5365,6.1875 63.9531,6.1875 C63.5781,6.1875 63.2109,6.23438 62.8516,6.32812 C62.4922,6.42188 62.151,6.55729 61.8281,6.73438 L61.8281,5.73438 C62.224,5.57812 62.6068,5.46354 62.9766,5.39062 C63.3464,5.31771 63.7083,5.28125 64.0625,5.28125 C65.0104,5.28125 65.7188,5.52604 66.1875,6.01562 C66.6562,6.50521 66.8906,7.25 66.8906,8.25 M70.1406,11.0156 L70.1406,14.5 L69.0625,14.5 L69.0625,5.4375 L70.1406,5.4375 L70.1406,6.4375 C70.3698,6.04167 70.6562,5.75 71,5.5625 C71.3438,5.375 71.7552,5.28125 72.2344,5.28125 C73.0365,5.28125 73.6875,5.59635 74.1875,6.22656 C74.6875,6.85677 74.9375,7.6875 74.9375,8.71875 C74.9375,9.75 74.6875,10.5833 74.1875,11.2188 C73.6875,11.8542 73.0365,12.1719 72.2344,12.1719 C71.7552,12.1719 71.3438,12.0755 71,11.8828 C70.6562,11.6901 70.3698,11.401 70.1406,11.0156 M73.8125,8.71875 C73.8125,7.92708 73.6484,7.30729 73.3203,6.85938 C72.9922,6.41146 72.5469,6.1875 71.9844,6.1875 C71.4115,6.1875 70.9609,6.41146 70.6328,6.85938 C70.3047,7.30729 70.1406,7.92708 70.1406,8.71875 C70.1406,9.51042 70.3047,10.1328 70.6328,10.5859 C70.9609,11.0391 71.4115,11.2656 71.9844,11.2656 C72.5469,11.2656 72.9922,11.0391 73.3203,10.5859 C73.6484,10.1328 73.8125,9.51042 73.8125,8.71875 M77.75,11.0156 L77.75,14.5 L76.6719,14.5 L76.6719,5.4375 L77.75,5.4375 L77.75,6.4375 C77.9792,6.04167 78.2656,5.75 78.6094,5.5625 C78.9531,5.375 79.3646,5.28125 79.8438,5.28125 C80.6458,5.28125 81.2969,5.59635 81.7969,6.22656 C82.2969,6.85677 82.5469,7.6875 82.5469,8.71875 C82.5469,9.75 82.2969,10.5833 81.7969,11.2188 C81.2969,11.8542 80.6458,12.1719 79.8438,12.1719 C79.3646,12.1719 78.9531,12.0755 78.6094,11.8828 C78.2656,11.6901 77.9792,11.401 77.75,11.0156 M81.4219,8.71875 C81.4219,7.92708 81.2578,7.30729 80.9297,6.85938 C80.6016,6.41146 80.1562,6.1875 79.5938,6.1875 C79.0208,6.1875 78.5703,6.41146 78.2422,6.85938 C77.9141,7.30729 77.75,7.92708 77.75,8.71875 C77.75,9.51042 77.9141,10.1328 78.2422,10.5859 C78.5703,11.0391 79.0208,11.2656 79.5938,11.2656 C80.1562,11.2656 80.6016,11.0391 80.9297,10.5859 C81.2578,10.1328 81.4219,9.51042 81.4219,8.71875 M84.3125,5.4375 L85.3906,5.4375 L85.3906,12 L84.3125,12 L84.3125,5.4375 M84.3125,2.875 L85.3906,2.875 L85.3906,4.25 L84.3125,4.25 L84.3125,2.875 M93.1094,8.03125 L93.1094,12 L92.0312,12 L92.0312,8.07812 C92.0312,7.45312 91.9089,6.98698 91.6641,6.67969 C91.4193,6.3724 91.0573,6.21875 90.5781,6.21875 C89.9948,6.21875 89.5339,6.40365 89.1953,6.77344 C88.8568,7.14323 88.6875,7.65104 88.6875,8.29688 L88.6875,12 L87.6094,12 L87.6094,5.4375 L88.6875,5.4375 L88.6875,6.45312 C88.9479,6.05729 89.2526,5.76302 89.6016,5.57031 C89.9505,5.3776 90.3542,5.28125 90.8125,5.28125 C91.5625,5.28125 92.1328,5.51302 92.5234,5.97656 C92.9141,6.4401 93.1094,7.125 93.1094,8.03125 M99.5625,8.64062 C99.5625,7.85938 99.401,7.25521 99.0781,6.82812 C98.7552,6.40104 98.3021,6.1875 97.7188,6.1875 C97.1458,6.1875 96.6979,6.40104 96.375,6.82812 C96.0521,7.25521 95.8906,7.85938 95.8906,8.64062 C95.8906,9.42188 96.0521,10.026 96.375,10.4531 C96.6979,10.8802 97.1458,11.0938 97.7188,11.0938 C98.3021,11.0938 98.7552,10.8802 99.0781,10.4531 C99.401,10.026 99.5625,9.42188 99.5625,8.64062 M100.641,11.1875 C100.641,12.3021 100.393,13.1328 99.8984,13.6797 C99.4036,14.2266 98.6406,14.5 97.6094,14.5 C97.2344,14.5 96.8776,14.4714 96.5391,14.4141 C96.2005,14.3568 95.875,14.2708 95.5625,14.1562 L95.5625,13.1094 C95.875,13.276 96.1875,13.401 96.5,13.4844 C96.8125,13.5677 97.125,13.6094 97.4375,13.6094 C98.1458,13.6094 98.6771,13.4245 99.0312,13.0547 C99.3854,12.6849 99.5625,12.125 99.5625,11.375 L99.5625,10.8438 C99.3333,11.2292 99.0469,11.5182 98.7031,11.7109 C98.3594,11.9036 97.9427,12 97.4531,12 C96.651,12 96.0026,11.6927 95.5078,11.0781 C95.013,10.4635 94.7656,9.65104 94.7656,8.64062 C94.7656,7.63021 95.013,6.81771 95.5078,6.20312 C96.0026,5.58854 96.651,5.28125 97.4531,5.28125 C97.9427,5.28125 98.3594,5.3776 98.7031,5.57031 C99.0469,5.76302 99.3333,6.05208 99.5625,6.4375 L99.5625,5.4375 L100.641,5.4375 L100.641,11.1875 M104.766,3.25 L105.766,3.25 L102.719,13.1094 L101.719,13.1094 L104.766,3.25 M111.062,5.625 L111.062,6.65625 C110.76,6.5 110.445,6.38281 110.117,6.30469 C109.789,6.22656 109.448,6.1875 109.094,6.1875 C108.562,6.1875 108.161,6.26823 107.891,6.42969 C107.62,6.59115 107.484,6.83854 107.484,7.17188 C107.484,7.42188 107.581,7.61719 107.773,7.75781 C107.966,7.89844 108.354,8.03125 108.938,8.15625 L109.297,8.25 C110.068,8.40625 110.615,8.63542 110.938,8.9375 C111.26,9.23958 111.422,9.65625 111.422,10.1875 C111.422,10.8021 111.18,11.2865 110.695,11.6406 C110.211,11.9948 109.547,12.1719 108.703,12.1719 C108.349,12.1719 107.982,12.138 107.602,12.0703 C107.221,12.0026 106.823,11.901 106.406,11.7656 L106.406,10.6406 C106.802,10.849 107.193,11.0052 107.578,11.1094 C107.964,11.2135 108.349,11.2656 108.734,11.2656 C109.234,11.2656 109.622,11.1797 109.898,11.0078 C110.174,10.8359 110.312,10.5885 110.312,10.2656 C110.312,9.97396 110.214,9.75 110.016,9.59375 C109.818,9.4375 109.385,9.28646 108.719,9.14062 L108.344,9.0625 C107.677,8.91667 107.195,8.69792 106.898,8.40625 C106.602,8.11458 106.453,7.71875 106.453,7.21875 C106.453,6.59375 106.672,6.11458 107.109,5.78125 C107.547,5.44792 108.167,5.28125 108.969,5.28125 C109.365,5.28125 109.74,5.3099 110.094,5.36719 C110.448,5.42448 110.771,5.51042 111.062,5.625 M113.125,2.875 L114.203,2.875 L114.203,12 L113.125,12 L113.125,2.875 M119.438,8.70312 C118.573,8.70312 117.971,8.80208 117.633,9 C117.294,9.19792 117.125,9.53646 117.125,10.0156 C117.125,10.401 117.253,10.7057 117.508,10.9297 C117.763,11.1536 118.104,11.2656 118.531,11.2656 C119.135,11.2656 119.617,11.0547 119.977,10.6328 C120.336,10.2109 120.516,9.64583 120.516,8.9375 L120.516,8.70312 L119.438,8.70312 M121.594,8.25 L121.594,12 L120.516,12 L120.516,11 C120.266,11.3958 119.958,11.6901 119.594,11.8828 C119.229,12.0755 118.781,12.1719 118.25,12.1719 C117.573,12.1719 117.036,11.9818 116.641,11.6016 C116.245,11.2214 116.047,10.7188 116.047,10.0938 C116.047,9.35417 116.294,8.79688 116.789,8.42188 C117.284,8.04688 118.021,7.85938 119,7.85938 L120.516,7.85938 L120.516,7.75 C120.516,7.25 120.352,6.86458 120.023,6.59375 C119.695,6.32292 119.24,6.1875 118.656,6.1875 C118.281,6.1875 117.914,6.23438 117.555,6.32812 C117.195,6.42188 116.854,6.55729 116.531,6.73438 L116.531,5.73438 C116.927,5.57812 117.31,5.46354 117.68,5.39062 C118.049,5.31771 118.411,5.28125 118.766,5.28125 C119.714,5.28125 120.422,5.52604 120.891,6.01562 C121.359,6.50521 121.594,7.25 121.594,8.25 M128.906,6.70312 C129.177,6.21354 129.5,5.85417 129.875,5.625 C130.25,5.39583 130.693,5.28125 131.203,5.28125 C131.891,5.28125 132.419,5.52083 132.789,6 C133.159,6.47917 133.344,7.15625 133.344,8.03125 L133.344,12 L132.266,12 L132.266,8.07812 C132.266,7.44271 132.154,6.97396 131.93,6.67188 C131.706,6.36979 131.365,6.21875 130.906,6.21875 C130.344,6.21875 129.901,6.40365 129.578,6.77344 C129.255,7.14323 129.094,7.65104 129.094,8.29688 L129.094,12 L128.016,12 L128.016,8.07812 C128.016,7.44271 127.904,6.97396 127.68,6.67188 C127.456,6.36979 127.109,6.21875 126.641,6.21875 C126.089,6.21875 125.651,6.40365 125.328,6.77344 C125.005,7.14323 124.844,7.65104 124.844,8.29688 L124.844,12 L123.766,12 L123.766,5.4375 L124.844,5.4375 L124.844,6.45312 C125.094,6.05729 125.391,5.76302 125.734,5.57031 C126.078,5.3776 126.484,5.28125 126.953,5.28125 C127.432,5.28125 127.839,5.40104 128.172,5.64062 C128.505,5.88021 128.75,6.23438 128.906,6.70312 M140.484,14 L140.484,14.8281 L134.25,14.8281 L134.25,14 L140.484,14 M146.594,6.70312 C146.865,6.21354 147.188,5.85417 147.562,5.625 C147.938,5.39583 148.38,5.28125 148.891,5.28125 C149.578,5.28125 150.107,5.52083 150.477,6 C150.846,6.47917 151.031,7.15625 151.031,8.03125 L151.031,12 L149.953,12 L149.953,8.07812 C149.953,7.44271 149.841,6.97396 149.617,6.67188 C149.393,6.36979 149.052,6.21875 148.594,6.21875 C148.031,6.21875 147.589,6.40365 147.266,6.77344 C146.943,7.14323 146.781,7.65104 146.781,8.29688 L146.781,12 L145.703,12 L145.703,8.07812 C145.703,7.44271 145.591,6.97396 145.367,6.67188 C145.143,6.36979 144.797,6.21875 144.328,6.21875 C143.776,6.21875 143.339,6.40365 143.016,6.77344 C142.693,7.14323 142.531,7.65104 142.531,8.29688 L142.531,12 L141.453,12 L141.453,5.4375 L142.531,5.4375 L142.531,6.45312 C142.781,6.05729 143.078,5.76302 143.422,5.57031 C143.766,5.3776 144.172,5.28125 144.641,5.28125 C145.12,5.28125 145.526,5.40104 145.859,5.64062 C146.193,5.88021 146.438,6.23438 146.594,6.70312 M156.156,8.70312 C155.292,8.70312 154.69,8.80208 154.352,9 C154.013,9.19792 153.844,9.53646 153.844,10.0156 C153.844,10.401 153.971,10.7057 154.227,10.9297 C154.482,11.1536 154.823,11.2656 155.25,11.2656 C155.854,11.2656 156.336,11.0547 156.695,10.6328 C157.055,10.2109 157.234,9.64583 157.234,8.9375 L157.234,8.70312 L156.156,8.70312 M158.312,8.25 L158.312,12 L157.234,12 L157.234,11 C156.984,11.3958 156.677,11.6901 156.312,11.8828 C155.948,12.0755 155.5,12.1719 154.969,12.1719 C154.292,12.1719 153.755,11.9818 153.359,11.6016 C152.964,11.2214 152.766,10.7188 152.766,10.0938 C152.766,9.35417 153.013,8.79688 153.508,8.42188 C154.003,8.04688 154.74,7.85938 155.719,7.85938 L157.234,7.85938 L157.234,7.75 C157.234,7.25 157.07,6.86458 156.742,6.59375 C156.414,6.32292 155.958,6.1875 155.375,6.1875 C155,6.1875 154.633,6.23438 154.273,6.32812 C153.914,6.42188 153.573,6.55729 153.25,6.73438 L153.25,5.73438 C153.646,5.57812 154.029,5.46354 154.398,5.39062 C154.768,5.31771 155.13,5.28125 155.484,5.28125 C156.432,5.28125 157.141,5.52604 157.609,6.01562 C158.078,6.50521 158.312,7.25 158.312,8.25 M161.562,11.0156 L161.562,14.5 L160.484,14.5 L160.484,5.4375 L161.562,5.4375 L161.562,6.4375 C161.792,6.04167 162.078,5.75 162.422,5.5625 C162.766,5.375 163.177,5.28125 163.656,5.28125 C164.458,5.28125 165.109,5.59635 165.609,6.22656 C166.109,6.85677 166.359,7.6875 166.359,8.71875 C166.359,9.75 166.109,10.5833 165.609,11.2188 C165.109,11.8542 164.458,12.1719 163.656,12.1719 C163.177,12.1719 162.766,12.0755 162.422,11.8828 C162.078,11.6901 161.792,11.401 161.562,11.0156 M165.234,8.71875 C165.234,7.92708 165.07,7.30729 164.742,6.85938 C164.414,6.41146 163.969,6.1875 163.406,6.1875 C162.833,6.1875 162.383,6.41146 162.055,6.85938 C161.727,7.30729 161.562,7.92708 161.562,8.71875 C161.562,9.51042 161.727,10.1328 162.055,10.5859 C162.383,11.0391 162.833,11.2656 163.406,11.2656 C163.969,11.2656 164.414,11.0391 164.742,10.5859 C165.07,10.1328 165.234,9.51042 165.234,8.71875 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2318.89,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2318.89,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M531,-343.44 L811,-343.44 L811,-157.44 L531,-157.44 L531,-343.44"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1233.77,1821.84)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1233.77,1821.84)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1233.77,1821.84)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M6.59375,8.03125 L6.59375,12 L5.51562,12 L5.51562,8.07812 C5.51562,7.45312 5.39323,6.98698 5.14844,6.67969 C4.90365,6.3724 4.54167,6.21875 4.0625,6.21875 C3.47917,6.21875 3.01823,6.40365 2.67969,6.77344 C2.34115,7.14323 2.17188,7.65104 2.17188,8.29688 L2.17188,12 L1.09375,12 L1.09375,2.875 L2.17188,2.875 L2.17188,6.45312 C2.43229,6.05729 2.73698,5.76302 3.08594,5.57031 C3.4349,5.3776 3.83854,5.28125 4.29688,5.28125 C5.04688,5.28125 5.61719,5.51302 6.00781,5.97656 C6.39844,6.4401 6.59375,7.125 6.59375,8.03125 M11.2656,6.1875 C10.6927,6.1875 10.237,6.41406 9.89844,6.86719 C9.5599,7.32031 9.39062,7.9375 9.39062,8.71875 C9.39062,9.51042 9.55729,10.1302 9.89062,10.5781 C10.224,11.026 10.6823,11.25 11.2656,11.25 C11.8385,11.25 12.2943,11.0234 12.6328,10.5703 C12.9714,10.1172 13.1406,9.5 13.1406,8.71875 C13.1406,7.94792 12.9714,7.33333 12.6328,6.875 C12.2943,6.41667 11.8385,6.1875 11.2656,6.1875 M11.2656,5.28125 C12.2031,5.28125 12.9401,5.58594 13.4766,6.19531 C14.013,6.80469 14.2812,7.64583 14.2812,8.71875 C14.2812,9.79167 14.013,10.6354 13.4766,11.25 C12.9401,11.8646 12.2031,12.1719 11.2656,12.1719 C10.3281,12.1719 9.59115,11.8646 9.05469,11.25 C8.51823,10.6354 8.25,9.79167 8.25,8.71875 C8.25,7.64583 8.51823,6.80469 9.05469,6.19531 C9.59115,5.58594 10.3281,5.28125 11.2656,5.28125 M21.1562,6.70312 C21.4271,6.21354 21.75,5.85417 22.125,5.625 C22.5,5.39583 22.9427,5.28125 23.4531,5.28125 C24.1406,5.28125 24.6693,5.52083 25.0391,6 C25.4089,6.47917 25.5938,7.15625 25.5938,8.03125 L25.5938,12 L24.5156,12 L24.5156,8.07812 C24.5156,7.44271 24.4036,6.97396 24.1797,6.67188 C23.9557,6.36979 23.6146,6.21875 23.1562,6.21875 C22.5938,6.21875 22.151,6.40365 21.8281,6.77344 C21.5052,7.14323 21.3438,7.65104 21.3438,8.29688 L21.3438,12 L20.2656,12 L20.2656,8.07812 C20.2656,7.44271 20.1536,6.97396 19.9297,6.67188 C19.7057,6.36979 19.3594,6.21875 18.8906,6.21875 C18.3385,6.21875 17.901,6.40365 17.5781,6.77344 C17.2552,7.14323 17.0938,7.65104 17.0938,8.29688 L17.0938,12 L16.0156,12 L16.0156,5.4375 L17.0938,5.4375 L17.0938,6.45312 C17.3438,6.05729 17.6406,5.76302 17.9844,5.57031 C18.3281,5.3776 18.7344,5.28125 19.2031,5.28125 C19.6823,5.28125 20.0885,5.40104 20.4219,5.64062 C20.7552,5.88021 21,6.23438 21.1562,6.70312 M33.3594,8.45312 L33.3594,8.96875 L28.3906,8.96875 C28.4427,9.71875 28.6693,10.2865 29.0703,10.6719 C29.4714,11.0573 30.026,11.25 30.7344,11.25 C31.151,11.25 31.5547,11.2005 31.9453,11.1016 C32.3359,11.0026 32.724,10.849 33.1094,10.6406 L33.1094,11.6719 C32.7135,11.8281 32.3125,11.9505 31.9062,12.0391 C31.5,12.1276 31.0885,12.1719 30.6719,12.1719 C29.6302,12.1719 28.8021,11.8672 28.1875,11.2578 C27.5729,10.6484 27.2656,9.82292 27.2656,8.78125 C27.2656,7.70833 27.5573,6.85677 28.1406,6.22656 C28.724,5.59635 29.5052,5.28125 30.4844,5.28125 C31.3698,5.28125 32.0703,5.5651 32.5859,6.13281 C33.1016,6.70052 33.3594,7.47396 33.3594,8.45312 M32.2812,8.125 C32.2708,7.54167 32.1042,7.07292 31.7812,6.71875 C31.4583,6.36458 31.0312,6.1875 30.5,6.1875 C29.8958,6.1875 29.4141,6.35938 29.0547,6.70312 C28.6953,7.04688 28.4896,7.52604 28.4375,8.14062 L32.2812,8.125 M38.9219,6.4375 C38.7969,6.375 38.6641,6.32552 38.5234,6.28906 C38.3828,6.2526 38.224,6.23438 38.0469,6.23438 C37.4427,6.23438 36.9766,6.43229 36.6484,6.82812 C36.3203,7.22396 36.1562,7.79688 36.1562,8.54688 L36.1562,12 L35.0781,12 L35.0781,5.4375 L36.1562,5.4375 L36.1562,6.45312 C36.3854,6.05729 36.6823,5.76302 37.0469,5.57031 C37.4115,5.3776 37.8542,5.28125 38.375,5.28125 C38.4479,5.28125 38.5286,5.28646 38.6172,5.29688 C38.7057,5.30729 38.8021,5.32292 38.9062,5.34375 L38.9219,6.4375 M45.0312,14 L45.0312,14.8281 L38.7969,14.8281 L38.7969,14 L45.0312,14 M51.5,8.03125 L51.5,12 L50.4219,12 L50.4219,8.07812 C50.4219,7.45312 50.2995,6.98698 50.0547,6.67969 C49.8099,6.3724 49.4479,6.21875 48.9688,6.21875 C48.3854,6.21875 47.9245,6.40365 47.5859,6.77344 C47.2474,7.14323 47.0781,7.65104 47.0781,8.29688 L47.0781,12 L46,12 L46,5.4375 L47.0781,5.4375 L47.0781,6.45312 C47.3385,6.05729 47.6432,5.76302 47.9922,5.57031 C48.3411,5.3776 48.7448,5.28125 49.2031,5.28125 C49.9531,5.28125 50.5234,5.51302 50.9141,5.97656 C51.3047,6.4401 51.5,7.125 51.5,8.03125 M56.6094,8.70312 C55.7448,8.70312 55.1432,8.80208 54.8047,9 C54.4661,9.19792 54.2969,9.53646 54.2969,10.0156 C54.2969,10.401 54.4245,10.7057 54.6797,10.9297 C54.9349,11.1536 55.276,11.2656 55.7031,11.2656 C56.3073,11.2656 56.7891,11.0547 57.1484,10.6328 C57.5078,10.2109 57.6875,9.64583 57.6875,8.9375 L57.6875,8.70312 L56.6094,8.70312 M58.7656,8.25 L58.7656,12 L57.6875,12 L57.6875,11 C57.4375,11.3958 57.1302,11.6901 56.7656,11.8828 C56.401,12.0755 55.9531,12.1719 55.4219,12.1719 C54.7448,12.1719 54.2083,11.9818 53.8125,11.6016 C53.4167,11.2214 53.2188,10.7188 53.2188,10.0938 C53.2188,9.35417 53.4661,8.79688 53.9609,8.42188 C54.4557,8.04688 55.1927,7.85938 56.1719,7.85938 L57.6875,7.85938 L57.6875,7.75 C57.6875,7.25 57.5234,6.86458 57.1953,6.59375 C56.8672,6.32292 56.4115,6.1875 55.8281,6.1875 C55.4531,6.1875 55.0859,6.23438 54.7266,6.32812 C54.3672,6.42188 54.026,6.55729 53.7031,6.73438 L53.7031,5.73438 C54.099,5.57812 54.4818,5.46354 54.8516,5.39062 C55.2214,5.31771 55.5833,5.28125 55.9375,5.28125 C56.8854,5.28125 57.5938,5.52604 58.0625,6.01562 C58.5312,6.50521 58.7656,7.25 58.7656,8.25 M60.2031,5.4375 L61.3438,5.4375 L63.3906,10.9375 L65.4531,5.4375 L66.5938,5.4375 L64.125,12 L62.6562,12 L60.2031,5.4375 M68.0625,5.4375 L69.1406,5.4375 L69.1406,12 L68.0625,12 L68.0625,5.4375 M68.0625,2.875 L69.1406,2.875 L69.1406,4.25 L68.0625,4.25 L68.0625,2.875 M75.7188,8.64062 C75.7188,7.85938 75.5573,7.25521 75.2344,6.82812 C74.9115,6.40104 74.4583,6.1875 73.875,6.1875 C73.3021,6.1875 72.8542,6.40104 72.5312,6.82812 C72.2083,7.25521 72.0469,7.85938 72.0469,8.64062 C72.0469,9.42188 72.2083,10.026 72.5312,10.4531 C72.8542,10.8802 73.3021,11.0938 73.875,11.0938 C74.4583,11.0938 74.9115,10.8802 75.2344,10.4531 C75.5573,10.026 75.7188,9.42188 75.7188,8.64062 M76.7969,11.1875 C76.7969,12.3021 76.5495,13.1328 76.0547,13.6797 C75.5599,14.2266 74.7969,14.5 73.7656,14.5 C73.3906,14.5 73.0339,14.4714 72.6953,14.4141 C72.3568,14.3568 72.0312,14.2708 71.7188,14.1562 L71.7188,13.1094 C72.0312,13.276 72.3438,13.401 72.6562,13.4844 C72.9688,13.5677 73.2812,13.6094 73.5938,13.6094 C74.3021,13.6094 74.8333,13.4245 75.1875,13.0547 C75.5417,12.6849 75.7188,12.125 75.7188,11.375 L75.7188,10.8438 C75.4896,11.2292 75.2031,11.5182 74.8594,11.7109 C74.5156,11.9036 74.099,12 73.6094,12 C72.8073,12 72.1589,11.6927 71.6641,11.0781 C71.1693,10.4635 70.9219,9.65104 70.9219,8.64062 C70.9219,7.63021 71.1693,6.81771 71.6641,6.20312 C72.1589,5.58854 72.8073,5.28125 73.6094,5.28125 C74.099,5.28125 74.5156,5.3776 74.8594,5.57031 C75.2031,5.76302 75.4896,6.05208 75.7188,6.4375 L75.7188,5.4375 L76.7969,5.4375 L76.7969,11.1875 M81.9844,8.70312 C81.1198,8.70312 80.5182,8.80208 80.1797,9 C79.8411,9.19792 79.6719,9.53646 79.6719,10.0156 C79.6719,10.401 79.7995,10.7057 80.0547,10.9297 C80.3099,11.1536 80.651,11.2656 81.0781,11.2656 C81.6823,11.2656 82.1641,11.0547 82.5234,10.6328 C82.8828,10.2109 83.0625,9.64583 83.0625,8.9375 L83.0625,8.70312 L81.9844,8.70312 M84.1406,8.25 L84.1406,12 L83.0625,12 L83.0625,11 C82.8125,11.3958 82.5052,11.6901 82.1406,11.8828 C81.776,12.0755 81.3281,12.1719 80.7969,12.1719 C80.1198,12.1719 79.5833,11.9818 79.1875,11.6016 C78.7917,11.2214 78.5938,10.7188 78.5938,10.0938 C78.5938,9.35417 78.8411,8.79688 79.3359,8.42188 C79.8307,8.04688 80.5677,7.85938 81.5469,7.85938 L83.0625,7.85938 L83.0625,7.75 C83.0625,7.25 82.8984,6.86458 82.5703,6.59375 C82.2422,6.32292 81.7865,6.1875 81.2031,6.1875 C80.8281,6.1875 80.4609,6.23438 80.1016,6.32812 C79.7422,6.42188 79.401,6.55729 79.0781,6.73438 L79.0781,5.73438 C79.474,5.57812 79.8568,5.46354 80.2266,5.39062 C80.5964,5.31771 80.9583,5.28125 81.3125,5.28125 C82.2604,5.28125 82.9688,5.52604 83.4375,6.01562 C83.9062,6.50521 84.1406,7.25 84.1406,8.25 M87.4219,3.57812 L87.4219,5.4375 L89.6406,5.4375 L89.6406,6.28125 L87.4219,6.28125 L87.4219,9.84375 C87.4219,10.375 87.4948,10.7161 87.6406,10.8672 C87.7865,11.0182 88.0833,11.0938 88.5312,11.0938 L89.6406,11.0938 L89.6406,12 L88.5312,12 C87.6979,12 87.1224,11.8438 86.8047,11.5312 C86.487,11.2188 86.3281,10.6562 86.3281,9.84375 L86.3281,6.28125 L85.5469,6.28125 L85.5469,5.4375 L86.3281,5.4375 L86.3281,3.57812 L87.4219,3.57812 M91.0469,5.4375 L92.125,5.4375 L92.125,12 L91.0469,12 L91.0469,5.4375 M91.0469,2.875 L92.125,2.875 L92.125,4.25 L91.0469,4.25 L91.0469,2.875 M96.9219,6.1875 C96.349,6.1875 95.8932,6.41406 95.5547,6.86719 C95.2161,7.32031 95.0469,7.9375 95.0469,8.71875 C95.0469,9.51042 95.2135,10.1302 95.5469,10.5781 C95.8802,11.026 96.3385,11.25 96.9219,11.25 C97.4948,11.25 97.9505,11.0234 98.2891,10.5703 C98.6276,10.1172 98.7969,9.5 98.7969,8.71875 C98.7969,7.94792 98.6276,7.33333 98.2891,6.875 C97.9505,6.41667 97.4948,6.1875 96.9219,6.1875 M96.9219,5.28125 C97.8594,5.28125 98.5964,5.58594 99.1328,6.19531 C99.6693,6.80469 99.9375,7.64583 99.9375,8.71875 C99.9375,9.79167 99.6693,10.6354 99.1328,11.25 C98.5964,11.8646 97.8594,12.1719 96.9219,12.1719 C95.9844,12.1719 95.2474,11.8646 94.7109,11.25 C94.1745,10.6354 93.9062,9.79167 93.9062,8.71875 C93.9062,7.64583 94.1745,6.80469 94.7109,6.19531 C95.2474,5.58594 95.9844,5.28125 96.9219,5.28125 M107.172,8.03125 L107.172,12 L106.094,12 L106.094,8.07812 C106.094,7.45312 105.971,6.98698 105.727,6.67969 C105.482,6.3724 105.12,6.21875 104.641,6.21875 C104.057,6.21875 103.596,6.40365 103.258,6.77344 C102.919,7.14323 102.75,7.65104 102.75,8.29688 L102.75,12 L101.672,12 L101.672,5.4375 L102.75,5.4375 L102.75,6.45312 C103.01,6.05729 103.315,5.76302 103.664,5.57031 C104.013,5.3776 104.417,5.28125 104.875,5.28125 C105.625,5.28125 106.195,5.51302 106.586,5.97656 C106.977,6.4401 107.172,7.125 107.172,8.03125 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1233.77,1821.84)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1233.77,1821.84)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M550,-1069.4 L1353,-1069.4 L1353,-937.44 L550,-937.44 L550,-1069.4"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1805.23,369.985)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1805.23,369.985)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1805.23,369.985)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M6.59375,8.03125 L6.59375,12 L5.51562,12 L5.51562,8.07812 C5.51562,7.45312 5.39323,6.98698 5.14844,6.67969 C4.90365,6.3724 4.54167,6.21875 4.0625,6.21875 C3.47917,6.21875 3.01823,6.40365 2.67969,6.77344 C2.34115,7.14323 2.17188,7.65104 2.17188,8.29688 L2.17188,12 L1.09375,12 L1.09375,2.875 L2.17188,2.875 L2.17188,6.45312 C2.43229,6.05729 2.73698,5.76302 3.08594,5.57031 C3.4349,5.3776 3.83854,5.28125 4.29688,5.28125 C5.04688,5.28125 5.61719,5.51302 6.00781,5.97656 C6.39844,6.4401 6.59375,7.125 6.59375,8.03125 M11.2656,6.1875 C10.6927,6.1875 10.237,6.41406 9.89844,6.86719 C9.5599,7.32031 9.39062,7.9375 9.39062,8.71875 C9.39062,9.51042 9.55729,10.1302 9.89062,10.5781 C10.224,11.026 10.6823,11.25 11.2656,11.25 C11.8385,11.25 12.2943,11.0234 12.6328,10.5703 C12.9714,10.1172 13.1406,9.5 13.1406,8.71875 C13.1406,7.94792 12.9714,7.33333 12.6328,6.875 C12.2943,6.41667 11.8385,6.1875 11.2656,6.1875 M11.2656,5.28125 C12.2031,5.28125 12.9401,5.58594 13.4766,6.19531 C14.013,6.80469 14.2812,7.64583 14.2812,8.71875 C14.2812,9.79167 14.013,10.6354 13.4766,11.25 C12.9401,11.8646 12.2031,12.1719 11.2656,12.1719 C10.3281,12.1719 9.59115,11.8646 9.05469,11.25 C8.51823,10.6354 8.25,9.79167 8.25,8.71875 C8.25,7.64583 8.51823,6.80469 9.05469,6.19531 C9.59115,5.58594 10.3281,5.28125 11.2656,5.28125 M21.1562,6.70312 C21.4271,6.21354 21.75,5.85417 22.125,5.625 C22.5,5.39583 22.9427,5.28125 23.4531,5.28125 C24.1406,5.28125 24.6693,5.52083 25.0391,6 C25.4089,6.47917 25.5938,7.15625 25.5938,8.03125 L25.5938,12 L24.5156,12 L24.5156,8.07812 C24.5156,7.44271 24.4036,6.97396 24.1797,6.67188 C23.9557,6.36979 23.6146,6.21875 23.1562,6.21875 C22.5938,6.21875 22.151,6.40365 21.8281,6.77344 C21.5052,7.14323 21.3438,7.65104 21.3438,8.29688 L21.3438,12 L20.2656,12 L20.2656,8.07812 C20.2656,7.44271 20.1536,6.97396 19.9297,6.67188 C19.7057,6.36979 19.3594,6.21875 18.8906,6.21875 C18.3385,6.21875 17.901,6.40365 17.5781,6.77344 C17.2552,7.14323 17.0938,7.65104 17.0938,8.29688 L17.0938,12 L16.0156,12 L16.0156,5.4375 L17.0938,5.4375 L17.0938,6.45312 C17.3438,6.05729 17.6406,5.76302 17.9844,5.57031 C18.3281,5.3776 18.7344,5.28125 19.2031,5.28125 C19.6823,5.28125 20.0885,5.40104 20.4219,5.64062 C20.7552,5.88021 21,6.23438 21.1562,6.70312 M33.3594,8.45312 L33.3594,8.96875 L28.3906,8.96875 C28.4427,9.71875 28.6693,10.2865 29.0703,10.6719 C29.4714,11.0573 30.026,11.25 30.7344,11.25 C31.151,11.25 31.5547,11.2005 31.9453,11.1016 C32.3359,11.0026 32.724,10.849 33.1094,10.6406 L33.1094,11.6719 C32.7135,11.8281 32.3125,11.9505 31.9062,12.0391 C31.5,12.1276 31.0885,12.1719 30.6719,12.1719 C29.6302,12.1719 28.8021,11.8672 28.1875,11.2578 C27.5729,10.6484 27.2656,9.82292 27.2656,8.78125 C27.2656,7.70833 27.5573,6.85677 28.1406,6.22656 C28.724,5.59635 29.5052,5.28125 30.4844,5.28125 C31.3698,5.28125 32.0703,5.5651 32.5859,6.13281 C33.1016,6.70052 33.3594,7.47396 33.3594,8.45312 M32.2812,8.125 C32.2708,7.54167 32.1042,7.07292 31.7812,6.71875 C31.4583,6.36458 31.0312,6.1875 30.5,6.1875 C29.8958,6.1875 29.4141,6.35938 29.0547,6.70312 C28.6953,7.04688 28.4896,7.52604 28.4375,8.14062 L32.2812,8.125 M38.9219,6.4375 C38.7969,6.375 38.6641,6.32552 38.5234,6.28906 C38.3828,6.2526 38.224,6.23438 38.0469,6.23438 C37.4427,6.23438 36.9766,6.43229 36.6484,6.82812 C36.3203,7.22396 36.1562,7.79688 36.1562,8.54688 L36.1562,12 L35.0781,12 L35.0781,5.4375 L36.1562,5.4375 L36.1562,6.45312 C36.3854,6.05729 36.6823,5.76302 37.0469,5.57031 C37.4115,5.3776 37.8542,5.28125 38.375,5.28125 C38.4479,5.28125 38.5286,5.28646 38.6172,5.29688 C38.7057,5.30729 38.8021,5.32292 38.9062,5.34375 L38.9219,6.4375 M45.0312,14 L45.0312,14.8281 L38.7969,14.8281 L38.7969,14 L45.0312,14 M51.1406,6.70312 C51.4115,6.21354 51.7344,5.85417 52.1094,5.625 C52.4844,5.39583 52.9271,5.28125 53.4375,5.28125 C54.125,5.28125 54.6536,5.52083 55.0234,6 C55.3932,6.47917 55.5781,7.15625 55.5781,8.03125 L55.5781,12 L54.5,12 L54.5,8.07812 C54.5,7.44271 54.388,6.97396 54.1641,6.67188 C53.9401,6.36979 53.599,6.21875 53.1406,6.21875 C52.5781,6.21875 52.1354,6.40365 51.8125,6.77344 C51.4896,7.14323 51.3281,7.65104 51.3281,8.29688 L51.3281,12 L50.25,12 L50.25,8.07812 C50.25,7.44271 50.138,6.97396 49.9141,6.67188 C49.6901,6.36979 49.3438,6.21875 48.875,6.21875 C48.3229,6.21875 47.8854,6.40365 47.5625,6.77344 C47.2396,7.14323 47.0781,7.65104 47.0781,8.29688 L47.0781,12 L46,12 L46,5.4375 L47.0781,5.4375 L47.0781,6.45312 C47.3281,6.05729 47.625,5.76302 47.9688,5.57031 C48.3125,5.3776 48.7188,5.28125 49.1875,5.28125 C49.6667,5.28125 50.0729,5.40104 50.4062,5.64062 C50.7396,5.88021 50.9844,6.23438 51.1406,6.70312 M60.7031,8.70312 C59.8385,8.70312 59.237,8.80208 58.8984,9 C58.5599,9.19792 58.3906,9.53646 58.3906,10.0156 C58.3906,10.401 58.5182,10.7057 58.7734,10.9297 C59.0286,11.1536 59.3698,11.2656 59.7969,11.2656 C60.401,11.2656 60.8828,11.0547 61.2422,10.6328 C61.6016,10.2109 61.7812,9.64583 61.7812,8.9375 L61.7812,8.70312 L60.7031,8.70312 M62.8594,8.25 L62.8594,12 L61.7812,12 L61.7812,11 C61.5312,11.3958 61.224,11.6901 60.8594,11.8828 C60.4948,12.0755 60.0469,12.1719 59.5156,12.1719 C58.8385,12.1719 58.3021,11.9818 57.9062,11.6016 C57.5104,11.2214 57.3125,10.7188 57.3125,10.0938 C57.3125,9.35417 57.5599,8.79688 58.0547,8.42188 C58.5495,8.04688 59.2865,7.85938 60.2656,7.85938 L61.7812,7.85938 L61.7812,7.75 C61.7812,7.25 61.6172,6.86458 61.2891,6.59375 C60.9609,6.32292 60.5052,6.1875 59.9219,6.1875 C59.5469,6.1875 59.1797,6.23438 58.8203,6.32812 C58.4609,6.42188 58.1198,6.55729 57.7969,6.73438 L57.7969,5.73438 C58.1927,5.57812 58.5755,5.46354 58.9453,5.39062 C59.3151,5.31771 59.6771,5.28125 60.0312,5.28125 C60.9792,5.28125 61.6875,5.52604 62.1562,6.01562 C62.625,6.50521 62.8594,7.25 62.8594,8.25 M66.1094,11.0156 L66.1094,14.5 L65.0312,14.5 L65.0312,5.4375 L66.1094,5.4375 L66.1094,6.4375 C66.3385,6.04167 66.625,5.75 66.9688,5.5625 C67.3125,5.375 67.724,5.28125 68.2031,5.28125 C69.0052,5.28125 69.6562,5.59635 70.1562,6.22656 C70.6562,6.85677 70.9062,7.6875 70.9062,8.71875 C70.9062,9.75 70.6562,10.5833 70.1562,11.2188 C69.6562,11.8542 69.0052,12.1719 68.2031,12.1719 C67.724,12.1719 67.3125,12.0755 66.9688,11.8828 C66.625,11.6901 66.3385,11.401 66.1094,11.0156 M69.7812,8.71875 C69.7812,7.92708 69.6172,7.30729 69.2891,6.85938 C68.9609,6.41146 68.5156,6.1875 67.9531,6.1875 C67.3802,6.1875 66.9297,6.41146 66.6016,6.85938 C66.2734,7.30729 66.1094,7.92708 66.1094,8.71875 C66.1094,9.51042 66.2734,10.1328 66.6016,10.5859 C66.9297,11.0391 67.3802,11.2656 67.9531,11.2656 C68.5156,11.2656 68.9609,11.0391 69.2891,10.5859 C69.6172,10.1328 69.7812,9.51042 69.7812,8.71875 M73.7188,11.0156 L73.7188,14.5 L72.6406,14.5 L72.6406,5.4375 L73.7188,5.4375 L73.7188,6.4375 C73.9479,6.04167 74.2344,5.75 74.5781,5.5625 C74.9219,5.375 75.3333,5.28125 75.8125,5.28125 C76.6146,5.28125 77.2656,5.59635 77.7656,6.22656 C78.2656,6.85677 78.5156,7.6875 78.5156,8.71875 C78.5156,9.75 78.2656,10.5833 77.7656,11.2188 C77.2656,11.8542 76.6146,12.1719 75.8125,12.1719 C75.3333,12.1719 74.9219,12.0755 74.5781,11.8828 C74.2344,11.6901 73.9479,11.401 73.7188,11.0156 M77.3906,8.71875 C77.3906,7.92708 77.2266,7.30729 76.8984,6.85938 C76.5703,6.41146 76.125,6.1875 75.5625,6.1875 C74.9896,6.1875 74.5391,6.41146 74.2109,6.85938 C73.8828,7.30729 73.7188,7.92708 73.7188,8.71875 C73.7188,9.51042 73.8828,10.1328 74.2109,10.5859 C74.5391,11.0391 74.9896,11.2656 75.5625,11.2656 C76.125,11.2656 76.5703,11.0391 76.8984,10.5859 C77.2266,10.1328 77.3906,9.51042 77.3906,8.71875 M80.2812,5.4375 L81.3594,5.4375 L81.3594,12 L80.2812,12 L80.2812,5.4375 M80.2812,2.875 L81.3594,2.875 L81.3594,4.25 L80.2812,4.25 L80.2812,2.875 M89.0781,8.03125 L89.0781,12 L88,12 L88,8.07812 C88,7.45312 87.8776,6.98698 87.6328,6.67969 C87.388,6.3724 87.026,6.21875 86.5469,6.21875 C85.9635,6.21875 85.5026,6.40365 85.1641,6.77344 C84.8255,7.14323 84.6562,7.65104 84.6562,8.29688 L84.6562,12 L83.5781,12 L83.5781,5.4375 L84.6562,5.4375 L84.6562,6.45312 C84.9167,6.05729 85.2214,5.76302 85.5703,5.57031 C85.9193,5.3776 86.3229,5.28125 86.7812,5.28125 C87.5312,5.28125 88.1016,5.51302 88.4922,5.97656 C88.8828,6.4401 89.0781,7.125 89.0781,8.03125 M95.5312,8.64062 C95.5312,7.85938 95.3698,7.25521 95.0469,6.82812 C94.724,6.40104 94.2708,6.1875 93.6875,6.1875 C93.1146,6.1875 92.6667,6.40104 92.3438,6.82812 C92.0208,7.25521 91.8594,7.85938 91.8594,8.64062 C91.8594,9.42188 92.0208,10.026 92.3438,10.4531 C92.6667,10.8802 93.1146,11.0938 93.6875,11.0938 C94.2708,11.0938 94.724,10.8802 95.0469,10.4531 C95.3698,10.026 95.5312,9.42188 95.5312,8.64062 M96.6094,11.1875 C96.6094,12.3021 96.362,13.1328 95.8672,13.6797 C95.3724,14.2266 94.6094,14.5 93.5781,14.5 C93.2031,14.5 92.8464,14.4714 92.5078,14.4141 C92.1693,14.3568 91.8438,14.2708 91.5312,14.1562 L91.5312,13.1094 C91.8438,13.276 92.1562,13.401 92.4688,13.4844 C92.7812,13.5677 93.0938,13.6094 93.4062,13.6094 C94.1146,13.6094 94.6458,13.4245 95,13.0547 C95.3542,12.6849 95.5312,12.125 95.5312,11.375 L95.5312,10.8438 C95.3021,11.2292 95.0156,11.5182 94.6719,11.7109 C94.3281,11.9036 93.9115,12 93.4219,12 C92.6198,12 91.9714,11.6927 91.4766,11.0781 C90.9818,10.4635 90.7344,9.65104 90.7344,8.64062 C90.7344,7.63021 90.9818,6.81771 91.4766,6.20312 C91.9714,5.58854 92.6198,5.28125 93.4219,5.28125 C93.9115,5.28125 94.3281,5.3776 94.6719,5.57031 C95.0156,5.76302 95.3021,6.05208 95.5312,6.4375 L95.5312,5.4375 L96.6094,5.4375 L96.6094,11.1875"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1805.23,369.985)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1805.23,369.985)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M278.5,-543.94 L331.5,-543.94 L331.5,-508.94 L278.5,-508.94 L278.5,-543.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,595.018,1425.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,595.018,1425.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,595.018,1425.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M6.23438,3.57812 L6.23438,5.4375 L8.45312,5.4375 L8.45312,6.28125 L6.23438,6.28125 L6.23438,9.84375 C6.23438,10.375 6.30729,10.7161 6.45312,10.8672 C6.59896,11.0182 6.89583,11.0938 7.34375,11.0938 L8.45312,11.0938 L8.45312,12 L7.34375,12 C6.51042,12 5.9349,11.8438 5.61719,11.5312 C5.29948,11.2188 5.14062,10.6562 5.14062,9.84375 L5.14062,6.28125 L4.35938,6.28125 L4.35938,5.4375 L5.14062,5.4375 L5.14062,3.57812 L6.23438,3.57812 M13.1875,2.875 L13.1875,3.78125 L12.1562,3.78125 C11.7708,3.78125 11.5026,3.85938 11.3516,4.01562 C11.2005,4.17188 11.125,4.45312 11.125,4.85938 L11.125,5.4375 L12.9062,5.4375 L12.9062,6.28125 L11.125,6.28125 L11.125,12 L10.0469,12 L10.0469,6.28125 L9.01562,6.28125 L9.01562,5.4375 L10.0469,5.4375 L10.0469,4.98438 C10.0469,4.25521 10.2161,3.72135 10.5547,3.38281 C10.8932,3.04427 11.4323,2.875 12.1719,2.875 L13.1875,2.875"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,595.018,1425.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,595.018,1425.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M241.5,-526.44 C241.5,-516.499 187.55,-508.44 121,-508.44 C54.4499,-508.44 0.5004,-516.499 0.5004,-526.44 C0.5004,-536.381 54.4499,-544.44 121,-544.44 C187.55,-544.44 241.5,-536.381 241.5,-526.44 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,107.088,1425.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,107.088,1425.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,107.088,1425.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M8.96875,6.4375 C8.84375,6.375 8.71094,6.32552 8.57031,6.28906 C8.42969,6.2526 8.27083,6.23438 8.09375,6.23438 C7.48958,6.23438 7.02344,6.43229 6.69531,6.82812 C6.36719,7.22396 6.20312,7.79688 6.20312,8.54688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.43229,6.05729 6.72917,5.76302 7.09375,5.57031 C7.45833,5.3776 7.90104,5.28125 8.42188,5.28125 C8.49479,5.28125 8.57552,5.28646 8.66406,5.29688 C8.7526,5.30729 8.84896,5.32292 8.95312,5.34375 L8.96875,6.4375 M12.625,6.1875 C12.0521,6.1875 11.5964,6.41406 11.2578,6.86719 C10.9193,7.32031 10.75,7.9375 10.75,8.71875 C10.75,9.51042 10.9167,10.1302 11.25,10.5781 C11.5833,11.026 12.0417,11.25 12.625,11.25 C13.1979,11.25 13.6536,11.0234 13.9922,10.5703 C14.3307,10.1172 14.5,9.5 14.5,8.71875 C14.5,7.94792 14.3307,7.33333 13.9922,6.875 C13.6536,6.41667 13.1979,6.1875 12.625,6.1875 M12.625,5.28125 C13.5625,5.28125 14.2995,5.58594 14.8359,6.19531 C15.3724,6.80469 15.6406,7.64583 15.6406,8.71875 C15.6406,9.79167 15.3724,10.6354 14.8359,11.25 C14.2995,11.8646 13.5625,12.1719 12.625,12.1719 C11.6875,12.1719 10.9505,11.8646 10.4141,11.25 C9.8776,10.6354 9.60938,9.79167 9.60938,8.71875 C9.60938,7.64583 9.8776,6.80469 10.4141,6.19531 C10.9505,5.58594 11.6875,5.28125 12.625,5.28125 M22.125,8.71875 C22.125,7.92708 21.9609,7.30729 21.6328,6.85938 C21.3047,6.41146 20.8594,6.1875 20.2969,6.1875 C19.724,6.1875 19.2734,6.41146 18.9453,6.85938 C18.6172,7.30729 18.4531,7.92708 18.4531,8.71875 C18.4531,9.51042 18.6172,10.1328 18.9453,10.5859 C19.2734,11.0391 19.724,11.2656 20.2969,11.2656 C20.8594,11.2656 21.3047,11.0391 21.6328,10.5859 C21.9609,10.1328 22.125,9.51042 22.125,8.71875 M18.4531,6.4375 C18.6823,6.04167 18.9688,5.75 19.3125,5.5625 C19.6562,5.375 20.0677,5.28125 20.5469,5.28125 C21.349,5.28125 22,5.59635 22.5,6.22656 C23,6.85677 23.25,7.6875 23.25,8.71875 C23.25,9.75 23,10.5833 22.5,11.2188 C22,11.8542 21.349,12.1719 20.5469,12.1719 C20.0677,12.1719 19.6562,12.0755 19.3125,11.8828 C18.9688,11.6901 18.6823,11.401 18.4531,11.0156 L18.4531,12 L17.375,12 L17.375,2.875 L18.4531,2.875 L18.4531,6.4375 M27.5625,6.1875 C26.9896,6.1875 26.5339,6.41406 26.1953,6.86719 C25.8568,7.32031 25.6875,7.9375 25.6875,8.71875 C25.6875,9.51042 25.8542,10.1302 26.1875,10.5781 C26.5208,11.026 26.9792,11.25 27.5625,11.25 C28.1354,11.25 28.5911,11.0234 28.9297,10.5703 C29.2682,10.1172 29.4375,9.5 29.4375,8.71875 C29.4375,7.94792 29.2682,7.33333 28.9297,6.875 C28.5911,6.41667 28.1354,6.1875 27.5625,6.1875 M27.5625,5.28125 C28.5,5.28125 29.237,5.58594 29.7734,6.19531 C30.3099,6.80469 30.5781,7.64583 30.5781,8.71875 C30.5781,9.79167 30.3099,10.6354 29.7734,11.25 C29.237,11.8646 28.5,12.1719 27.5625,12.1719 C26.625,12.1719 25.888,11.8646 25.3516,11.25 C24.8151,10.6354 24.5469,9.79167 24.5469,8.71875 C24.5469,7.64583 24.8151,6.80469 25.3516,6.19531 C25.888,5.58594 26.625,5.28125 27.5625,5.28125 M33.4219,3.57812 L33.4219,5.4375 L35.6406,5.4375 L35.6406,6.28125 L33.4219,6.28125 L33.4219,9.84375 C33.4219,10.375 33.4948,10.7161 33.6406,10.8672 C33.7865,11.0182 34.0833,11.0938 34.5312,11.0938 L35.6406,11.0938 L35.6406,12 L34.5312,12 C33.6979,12 33.1224,11.8438 32.8047,11.5312 C32.487,11.2188 32.3281,10.6562 32.3281,9.84375 L32.3281,6.28125 L31.5469,6.28125 L31.5469,5.4375 L32.3281,5.4375 L32.3281,3.57812 L33.4219,3.57812 M42.0469,14 L42.0469,14.8281 L35.8125,14.8281 L35.8125,14 L42.0469,14 M47.2344,5.625 L47.2344,6.65625 C46.9323,6.5 46.6172,6.38281 46.2891,6.30469 C45.9609,6.22656 45.6198,6.1875 45.2656,6.1875 C44.7344,6.1875 44.3333,6.26823 44.0625,6.42969 C43.7917,6.59115 43.6562,6.83854 43.6562,7.17188 C43.6562,7.42188 43.7526,7.61719 43.9453,7.75781 C44.138,7.89844 44.526,8.03125 45.1094,8.15625 L45.4688,8.25 C46.2396,8.40625 46.7865,8.63542 47.1094,8.9375 C47.4323,9.23958 47.5938,9.65625 47.5938,10.1875 C47.5938,10.8021 47.3516,11.2865 46.8672,11.6406 C46.3828,11.9948 45.7188,12.1719 44.875,12.1719 C44.5208,12.1719 44.1536,12.138 43.7734,12.0703 C43.3932,12.0026 42.9948,11.901 42.5781,11.7656 L42.5781,10.6406 C42.974,10.849 43.3646,11.0052 43.75,11.1094 C44.1354,11.2135 44.5208,11.2656 44.9062,11.2656 C45.4062,11.2656 45.7943,11.1797 46.0703,11.0078 C46.3464,10.8359 46.4844,10.5885 46.4844,10.2656 C46.4844,9.97396 46.3854,9.75 46.1875,9.59375 C45.9896,9.4375 45.5573,9.28646 44.8906,9.14062 L44.5156,9.0625 C43.849,8.91667 43.3672,8.69792 43.0703,8.40625 C42.7734,8.11458 42.625,7.71875 42.625,7.21875 C42.625,6.59375 42.8438,6.11458 43.2812,5.78125 C43.7188,5.44792 44.3385,5.28125 45.1406,5.28125 C45.5365,5.28125 45.9115,5.3099 46.2656,5.36719 C46.6198,5.42448 46.9427,5.51042 47.2344,5.625 M50.375,3.57812 L50.375,5.4375 L52.5938,5.4375 L52.5938,6.28125 L50.375,6.28125 L50.375,9.84375 C50.375,10.375 50.4479,10.7161 50.5938,10.8672 C50.7396,11.0182 51.0365,11.0938 51.4844,11.0938 L52.5938,11.0938 L52.5938,12 L51.4844,12 C50.651,12 50.0755,11.8438 49.7578,11.5312 C49.4401,11.2188 49.2812,10.6562 49.2812,9.84375 L49.2812,6.28125 L48.5,6.28125 L48.5,5.4375 L49.2812,5.4375 L49.2812,3.57812 L50.375,3.57812 M56.9844,8.70312 C56.1198,8.70312 55.5182,8.80208 55.1797,9 C54.8411,9.19792 54.6719,9.53646 54.6719,10.0156 C54.6719,10.401 54.7995,10.7057 55.0547,10.9297 C55.3099,11.1536 55.651,11.2656 56.0781,11.2656 C56.6823,11.2656 57.1641,11.0547 57.5234,10.6328 C57.8828,10.2109 58.0625,9.64583 58.0625,8.9375 L58.0625,8.70312 L56.9844,8.70312 M59.1406,8.25 L59.1406,12 L58.0625,12 L58.0625,11 C57.8125,11.3958 57.5052,11.6901 57.1406,11.8828 C56.776,12.0755 56.3281,12.1719 55.7969,12.1719 C55.1198,12.1719 54.5833,11.9818 54.1875,11.6016 C53.7917,11.2214 53.5938,10.7188 53.5938,10.0938 C53.5938,9.35417 53.8411,8.79688 54.3359,8.42188 C54.8307,8.04688 55.5677,7.85938 56.5469,7.85938 L58.0625,7.85938 L58.0625,7.75 C58.0625,7.25 57.8984,6.86458 57.5703,6.59375 C57.2422,6.32292 56.7865,6.1875 56.2031,6.1875 C55.8281,6.1875 55.4609,6.23438 55.1016,6.32812 C54.7422,6.42188 54.401,6.55729 54.0781,6.73438 L54.0781,5.73438 C54.474,5.57812 54.8568,5.46354 55.2266,5.39062 C55.5964,5.31771 55.9583,5.28125 56.3125,5.28125 C57.2604,5.28125 57.9688,5.52604 58.4375,6.01562 C58.9062,6.50521 59.1406,7.25 59.1406,8.25 M62.4219,3.57812 L62.4219,5.4375 L64.6406,5.4375 L64.6406,6.28125 L62.4219,6.28125 L62.4219,9.84375 C62.4219,10.375 62.4948,10.7161 62.6406,10.8672 C62.7865,11.0182 63.0833,11.0938 63.5312,11.0938 L64.6406,11.0938 L64.6406,12 L63.5312,12 C62.6979,12 62.1224,11.8438 61.8047,11.5312 C61.487,11.2188 61.3281,10.6562 61.3281,9.84375 L61.3281,6.28125 L60.5469,6.28125 L60.5469,5.4375 L61.3281,5.4375 L61.3281,3.57812 L62.4219,3.57812 M71.6719,8.45312 L71.6719,8.96875 L66.7031,8.96875 C66.7552,9.71875 66.9818,10.2865 67.3828,10.6719 C67.7839,11.0573 68.3385,11.25 69.0469,11.25 C69.4635,11.25 69.8672,11.2005 70.2578,11.1016 C70.6484,11.0026 71.0365,10.849 71.4219,10.6406 L71.4219,11.6719 C71.026,11.8281 70.625,11.9505 70.2188,12.0391 C69.8125,12.1276 69.401,12.1719 68.9844,12.1719 C67.9427,12.1719 67.1146,11.8672 66.5,11.2578 C65.8854,10.6484 65.5781,9.82292 65.5781,8.78125 C65.5781,7.70833 65.8698,6.85677 66.4531,6.22656 C67.0365,5.59635 67.8177,5.28125 68.7969,5.28125 C69.6823,5.28125 70.3828,5.5651 70.8984,6.13281 C71.4141,6.70052 71.6719,7.47396 71.6719,8.45312 M70.5938,8.125 C70.5833,7.54167 70.4167,7.07292 70.0938,6.71875 C69.7708,6.36458 69.3438,6.1875 68.8125,6.1875 C68.2083,6.1875 67.7266,6.35938 67.3672,6.70312 C67.0078,7.04688 66.8021,7.52604 66.75,8.14062 L70.5938,8.125 M78.4219,14 L78.4219,14.8281 L72.1875,14.8281 L72.1875,14 L78.4219,14 M80.4688,11.0156 L80.4688,14.5 L79.3906,14.5 L79.3906,5.4375 L80.4688,5.4375 L80.4688,6.4375 C80.6979,6.04167 80.9844,5.75 81.3281,5.5625 C81.6719,5.375 82.0833,5.28125 82.5625,5.28125 C83.3646,5.28125 84.0156,5.59635 84.5156,6.22656 C85.0156,6.85677 85.2656,7.6875 85.2656,8.71875 C85.2656,9.75 85.0156,10.5833 84.5156,11.2188 C84.0156,11.8542 83.3646,12.1719 82.5625,12.1719 C82.0833,12.1719 81.6719,12.0755 81.3281,11.8828 C80.9844,11.6901 80.6979,11.401 80.4688,11.0156 M84.1406,8.71875 C84.1406,7.92708 83.9766,7.30729 83.6484,6.85938 C83.3203,6.41146 82.875,6.1875 82.3125,6.1875 C81.7396,6.1875 81.2891,6.41146 80.9609,6.85938 C80.6328,7.30729 80.4688,7.92708 80.4688,8.71875 C80.4688,9.51042 80.6328,10.1328 80.9609,10.5859 C81.2891,11.0391 81.7396,11.2656 82.3125,11.2656 C82.875,11.2656 83.3203,11.0391 83.6484,10.5859 C83.9766,10.1328 84.1406,9.51042 84.1406,8.71875 M86.9219,9.40625 L86.9219,5.4375 L88,5.4375 L88,9.375 C88,9.98958 88.1224,10.4531 88.3672,10.7656 C88.612,11.0781 88.974,11.2344 89.4531,11.2344 C90.0365,11.2344 90.4974,11.0495 90.8359,10.6797 C91.1745,10.3099 91.3438,9.80208 91.3438,9.15625 L91.3438,5.4375 L92.4219,5.4375 L92.4219,12 L91.3438,12 L91.3438,10.9844 C91.0833,11.3906 90.7812,11.6901 90.4375,11.8828 C90.0938,12.0755 89.6927,12.1719 89.2344,12.1719 C88.474,12.1719 87.8984,11.9375 87.5078,11.4688 C87.1172,11 86.9219,10.3125 86.9219,9.40625 M99.3438,8.71875 C99.3438,7.92708 99.1797,7.30729 98.8516,6.85938 C98.5234,6.41146 98.0781,6.1875 97.5156,6.1875 C96.9427,6.1875 96.4922,6.41146 96.1641,6.85938 C95.8359,7.30729 95.6719,7.92708 95.6719,8.71875 C95.6719,9.51042 95.8359,10.1328 96.1641,10.5859 C96.4922,11.0391 96.9427,11.2656 97.5156,11.2656 C98.0781,11.2656 98.5234,11.0391 98.8516,10.5859 C99.1797,10.1328 99.3438,9.51042 99.3438,8.71875 M95.6719,6.4375 C95.901,6.04167 96.1875,5.75 96.5312,5.5625 C96.875,5.375 97.2865,5.28125 97.7656,5.28125 C98.5677,5.28125 99.2188,5.59635 99.7188,6.22656 C100.219,6.85677 100.469,7.6875 100.469,8.71875 C100.469,9.75 100.219,10.5833 99.7188,11.2188 C99.2188,11.8542 98.5677,12.1719 97.7656,12.1719 C97.2865,12.1719 96.875,12.0755 96.5312,11.8828 C96.1875,11.6901 95.901,11.401 95.6719,11.0156 L95.6719,12 L94.5938,12 L94.5938,2.875 L95.6719,2.875 L95.6719,6.4375 M102.234,2.875 L103.312,2.875 L103.312,12 L102.234,12 L102.234,2.875 M105.562,5.4375 L106.641,5.4375 L106.641,12 L105.562,12 L105.562,5.4375 M105.562,2.875 L106.641,2.875 L106.641,4.25 L105.562,4.25 L105.562,2.875 M113.078,5.625 L113.078,6.65625 C112.776,6.5 112.461,6.38281 112.133,6.30469 C111.805,6.22656 111.464,6.1875 111.109,6.1875 C110.578,6.1875 110.177,6.26823 109.906,6.42969 C109.635,6.59115 109.5,6.83854 109.5,7.17188 C109.5,7.42188 109.596,7.61719 109.789,7.75781 C109.982,7.89844 110.37,8.03125 110.953,8.15625 L111.312,8.25 C112.083,8.40625 112.63,8.63542 112.953,8.9375 C113.276,9.23958 113.438,9.65625 113.438,10.1875 C113.438,10.8021 113.195,11.2865 112.711,11.6406 C112.227,11.9948 111.562,12.1719 110.719,12.1719 C110.365,12.1719 109.997,12.138 109.617,12.0703 C109.237,12.0026 108.839,11.901 108.422,11.7656 L108.422,10.6406 C108.818,10.849 109.208,11.0052 109.594,11.1094 C109.979,11.2135 110.365,11.2656 110.75,11.2656 C111.25,11.2656 111.638,11.1797 111.914,11.0078 C112.19,10.8359 112.328,10.5885 112.328,10.2656 C112.328,9.97396 112.229,9.75 112.031,9.59375 C111.833,9.4375 111.401,9.28646 110.734,9.14062 L110.359,9.0625 C109.693,8.91667 109.211,8.69792 108.914,8.40625 C108.617,8.11458 108.469,7.71875 108.469,7.21875 C108.469,6.59375 108.688,6.11458 109.125,5.78125 C109.562,5.44792 110.182,5.28125 110.984,5.28125 C111.38,5.28125 111.755,5.3099 112.109,5.36719 C112.464,5.42448 112.786,5.51042 113.078,5.625 M120.609,8.03125 L120.609,12 L119.531,12 L119.531,8.07812 C119.531,7.45312 119.409,6.98698 119.164,6.67969 C118.919,6.3724 118.557,6.21875 118.078,6.21875 C117.495,6.21875 117.034,6.40365 116.695,6.77344 C116.357,7.14323 116.188,7.65104 116.188,8.29688 L116.188,12 L115.109,12 L115.109,2.875 L116.188,2.875 L116.188,6.45312 C116.448,6.05729 116.753,5.76302 117.102,5.57031 C117.451,5.3776 117.854,5.28125 118.312,5.28125 C119.062,5.28125 119.633,5.51302 120.023,5.97656 C120.414,6.4401 120.609,7.125 120.609,8.03125 M128.359,8.45312 L128.359,8.96875 L123.391,8.96875 C123.443,9.71875 123.669,10.2865 124.07,10.6719 C124.471,11.0573 125.026,11.25 125.734,11.25 C126.151,11.25 126.555,11.2005 126.945,11.1016 C127.336,11.0026 127.724,10.849 128.109,10.6406 L128.109,11.6719 C127.714,11.8281 127.312,11.9505 126.906,12.0391 C126.5,12.1276 126.089,12.1719 125.672,12.1719 C124.63,12.1719 123.802,11.8672 123.188,11.2578 C122.573,10.6484 122.266,9.82292 122.266,8.78125 C122.266,7.70833 122.557,6.85677 123.141,6.22656 C123.724,5.59635 124.505,5.28125 125.484,5.28125 C126.37,5.28125 127.07,5.5651 127.586,6.13281 C128.102,6.70052 128.359,7.47396 128.359,8.45312 M127.281,8.125 C127.271,7.54167 127.104,7.07292 126.781,6.71875 C126.458,6.36458 126.031,6.1875 125.5,6.1875 C124.896,6.1875 124.414,6.35938 124.055,6.70312 C123.695,7.04688 123.49,7.52604 123.438,8.14062 L127.281,8.125 M133.922,6.4375 C133.797,6.375 133.664,6.32552 133.523,6.28906 C133.383,6.2526 133.224,6.23438 133.047,6.23438 C132.443,6.23438 131.977,6.43229 131.648,6.82812 C131.32,7.22396 131.156,7.79688 131.156,8.54688 L131.156,12 L130.078,12 L130.078,5.4375 L131.156,5.4375 L131.156,6.45312 C131.385,6.05729 131.682,5.76302 132.047,5.57031 C132.411,5.3776 132.854,5.28125 133.375,5.28125 C133.448,5.28125 133.529,5.28646 133.617,5.29688 C133.706,5.30729 133.802,5.32292 133.906,5.34375 L133.922,6.4375"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,107.088,1425.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,107.088,1425.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1063.5,-963.44 C1063.5,-953.499 1022.53,-945.44 972,-945.44 C921.465,-945.44 880.498,-953.499 880.498,-963.44 C880.498,-973.381 921.465,-981.44 972,-981.44 C1022.53,-981.44 1063.5,-973.381 1063.5,-963.44 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1842.19,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1842.19,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1842.19,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.625,8.03125 L10.625,12 L9.54688,12 L9.54688,8.07812 C9.54688,7.45312 9.42448,6.98698 9.17969,6.67969 C8.9349,6.3724 8.57292,6.21875 8.09375,6.21875 C7.51042,6.21875 7.04948,6.40365 6.71094,6.77344 C6.3724,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,2.875 L6.20312,2.875 L6.20312,6.45312 C6.46354,6.05729 6.76823,5.76302 7.11719,5.57031 C7.46615,5.3776 7.86979,5.28125 8.32812,5.28125 C9.07812,5.28125 9.64844,5.51302 10.0391,5.97656 C10.4297,6.4401 10.625,7.125 10.625,8.03125 M15.2969,6.1875 C14.724,6.1875 14.2682,6.41406 13.9297,6.86719 C13.5911,7.32031 13.4219,7.9375 13.4219,8.71875 C13.4219,9.51042 13.5885,10.1302 13.9219,10.5781 C14.2552,11.026 14.7135,11.25 15.2969,11.25 C15.8698,11.25 16.3255,11.0234 16.6641,10.5703 C17.0026,10.1172 17.1719,9.5 17.1719,8.71875 C17.1719,7.94792 17.0026,7.33333 16.6641,6.875 C16.3255,6.41667 15.8698,6.1875 15.2969,6.1875 M15.2969,5.28125 C16.2344,5.28125 16.9714,5.58594 17.5078,6.19531 C18.0443,6.80469 18.3125,7.64583 18.3125,8.71875 C18.3125,9.79167 18.0443,10.6354 17.5078,11.25 C16.9714,11.8646 16.2344,12.1719 15.2969,12.1719 C14.3594,12.1719 13.6224,11.8646 13.0859,11.25 C12.5495,10.6354 12.2812,9.79167 12.2812,8.71875 C12.2812,7.64583 12.5495,6.80469 13.0859,6.19531 C13.6224,5.58594 14.3594,5.28125 15.2969,5.28125 M25.1875,6.70312 C25.4583,6.21354 25.7812,5.85417 26.1562,5.625 C26.5312,5.39583 26.974,5.28125 27.4844,5.28125 C28.1719,5.28125 28.7005,5.52083 29.0703,6 C29.4401,6.47917 29.625,7.15625 29.625,8.03125 L29.625,12 L28.5469,12 L28.5469,8.07812 C28.5469,7.44271 28.4349,6.97396 28.2109,6.67188 C27.987,6.36979 27.6458,6.21875 27.1875,6.21875 C26.625,6.21875 26.1823,6.40365 25.8594,6.77344 C25.5365,7.14323 25.375,7.65104 25.375,8.29688 L25.375,12 L24.2969,12 L24.2969,8.07812 C24.2969,7.44271 24.1849,6.97396 23.9609,6.67188 C23.737,6.36979 23.3906,6.21875 22.9219,6.21875 C22.3698,6.21875 21.9323,6.40365 21.6094,6.77344 C21.2865,7.14323 21.125,7.65104 21.125,8.29688 L21.125,12 L20.0469,12 L20.0469,5.4375 L21.125,5.4375 L21.125,6.45312 C21.375,6.05729 21.6719,5.76302 22.0156,5.57031 C22.3594,5.3776 22.7656,5.28125 23.2344,5.28125 C23.7135,5.28125 24.1198,5.40104 24.4531,5.64062 C24.7865,5.88021 25.0312,6.23438 25.1875,6.70312 M37.3906,8.45312 L37.3906,8.96875 L32.4219,8.96875 C32.474,9.71875 32.7005,10.2865 33.1016,10.6719 C33.5026,11.0573 34.0573,11.25 34.7656,11.25 C35.1823,11.25 35.5859,11.2005 35.9766,11.1016 C36.3672,11.0026 36.7552,10.849 37.1406,10.6406 L37.1406,11.6719 C36.7448,11.8281 36.3438,11.9505 35.9375,12.0391 C35.5312,12.1276 35.1198,12.1719 34.7031,12.1719 C33.6615,12.1719 32.8333,11.8672 32.2188,11.2578 C31.6042,10.6484 31.2969,9.82292 31.2969,8.78125 C31.2969,7.70833 31.5885,6.85677 32.1719,6.22656 C32.7552,5.59635 33.5365,5.28125 34.5156,5.28125 C35.401,5.28125 36.1016,5.5651 36.6172,6.13281 C37.1328,6.70052 37.3906,7.47396 37.3906,8.45312 M36.3125,8.125 C36.3021,7.54167 36.1354,7.07292 35.8125,6.71875 C35.4896,6.36458 35.0625,6.1875 34.5312,6.1875 C33.9271,6.1875 33.4453,6.35938 33.0859,6.70312 C32.7266,7.04688 32.5208,7.52604 32.4688,8.14062 L36.3125,8.125 M42.9531,6.4375 C42.8281,6.375 42.6953,6.32552 42.5547,6.28906 C42.4141,6.2526 42.2552,6.23438 42.0781,6.23438 C41.474,6.23438 41.0078,6.43229 40.6797,6.82812 C40.3516,7.22396 40.1875,7.79688 40.1875,8.54688 L40.1875,12 L39.1094,12 L39.1094,5.4375 L40.1875,5.4375 L40.1875,6.45312 C40.4167,6.05729 40.7135,5.76302 41.0781,5.57031 C41.4427,5.3776 41.8854,5.28125 42.4062,5.28125 C42.4792,5.28125 42.5599,5.28646 42.6484,5.29688 C42.737,5.30729 42.8333,5.32292 42.9375,5.34375 L42.9531,6.4375 M49.0625,14 L49.0625,14.8281 L42.8281,14.8281 L42.8281,14 L49.0625,14 M55.1719,6.70312 C55.4427,6.21354 55.7656,5.85417 56.1406,5.625 C56.5156,5.39583 56.9583,5.28125 57.4688,5.28125 C58.1562,5.28125 58.6849,5.52083 59.0547,6 C59.4245,6.47917 59.6094,7.15625 59.6094,8.03125 L59.6094,12 L58.5312,12 L58.5312,8.07812 C58.5312,7.44271 58.4193,6.97396 58.1953,6.67188 C57.9714,6.36979 57.6302,6.21875 57.1719,6.21875 C56.6094,6.21875 56.1667,6.40365 55.8438,6.77344 C55.5208,7.14323 55.3594,7.65104 55.3594,8.29688 L55.3594,12 L54.2812,12 L54.2812,8.07812 C54.2812,7.44271 54.1693,6.97396 53.9453,6.67188 C53.7214,6.36979 53.375,6.21875 52.9062,6.21875 C52.3542,6.21875 51.9167,6.40365 51.5938,6.77344 C51.2708,7.14323 51.1094,7.65104 51.1094,8.29688 L51.1094,12 L50.0312,12 L50.0312,5.4375 L51.1094,5.4375 L51.1094,6.45312 C51.3594,6.05729 51.6562,5.76302 52,5.57031 C52.3438,5.3776 52.75,5.28125 53.2188,5.28125 C53.6979,5.28125 54.1042,5.40104 54.4375,5.64062 C54.7708,5.88021 55.0156,6.23438 55.1719,6.70312 M64.7344,8.70312 C63.8698,8.70312 63.2682,8.80208 62.9297,9 C62.5911,9.19792 62.4219,9.53646 62.4219,10.0156 C62.4219,10.401 62.5495,10.7057 62.8047,10.9297 C63.0599,11.1536 63.401,11.2656 63.8281,11.2656 C64.4323,11.2656 64.9141,11.0547 65.2734,10.6328 C65.6328,10.2109 65.8125,9.64583 65.8125,8.9375 L65.8125,8.70312 L64.7344,8.70312 M66.8906,8.25 L66.8906,12 L65.8125,12 L65.8125,11 C65.5625,11.3958 65.2552,11.6901 64.8906,11.8828 C64.526,12.0755 64.0781,12.1719 63.5469,12.1719 C62.8698,12.1719 62.3333,11.9818 61.9375,11.6016 C61.5417,11.2214 61.3438,10.7188 61.3438,10.0938 C61.3438,9.35417 61.5911,8.79688 62.0859,8.42188 C62.5807,8.04688 63.3177,7.85938 64.2969,7.85938 L65.8125,7.85938 L65.8125,7.75 C65.8125,7.25 65.6484,6.86458 65.3203,6.59375 C64.9922,6.32292 64.5365,6.1875 63.9531,6.1875 C63.5781,6.1875 63.2109,6.23438 62.8516,6.32812 C62.4922,6.42188 62.151,6.55729 61.8281,6.73438 L61.8281,5.73438 C62.224,5.57812 62.6068,5.46354 62.9766,5.39062 C63.3464,5.31771 63.7083,5.28125 64.0625,5.28125 C65.0104,5.28125 65.7188,5.52604 66.1875,6.01562 C66.6562,6.50521 66.8906,7.25 66.8906,8.25 M70.1406,11.0156 L70.1406,14.5 L69.0625,14.5 L69.0625,5.4375 L70.1406,5.4375 L70.1406,6.4375 C70.3698,6.04167 70.6562,5.75 71,5.5625 C71.3438,5.375 71.7552,5.28125 72.2344,5.28125 C73.0365,5.28125 73.6875,5.59635 74.1875,6.22656 C74.6875,6.85677 74.9375,7.6875 74.9375,8.71875 C74.9375,9.75 74.6875,10.5833 74.1875,11.2188 C73.6875,11.8542 73.0365,12.1719 72.2344,12.1719 C71.7552,12.1719 71.3438,12.0755 71,11.8828 C70.6562,11.6901 70.3698,11.401 70.1406,11.0156 M73.8125,8.71875 C73.8125,7.92708 73.6484,7.30729 73.3203,6.85938 C72.9922,6.41146 72.5469,6.1875 71.9844,6.1875 C71.4115,6.1875 70.9609,6.41146 70.6328,6.85938 C70.3047,7.30729 70.1406,7.92708 70.1406,8.71875 C70.1406,9.51042 70.3047,10.1328 70.6328,10.5859 C70.9609,11.0391 71.4115,11.2656 71.9844,11.2656 C72.5469,11.2656 72.9922,11.0391 73.3203,10.5859 C73.6484,10.1328 73.8125,9.51042 73.8125,8.71875 M77.75,11.0156 L77.75,14.5 L76.6719,14.5 L76.6719,5.4375 L77.75,5.4375 L77.75,6.4375 C77.9792,6.04167 78.2656,5.75 78.6094,5.5625 C78.9531,5.375 79.3646,5.28125 79.8438,5.28125 C80.6458,5.28125 81.2969,5.59635 81.7969,6.22656 C82.2969,6.85677 82.5469,7.6875 82.5469,8.71875 C82.5469,9.75 82.2969,10.5833 81.7969,11.2188 C81.2969,11.8542 80.6458,12.1719 79.8438,12.1719 C79.3646,12.1719 78.9531,12.0755 78.6094,11.8828 C78.2656,11.6901 77.9792,11.401 77.75,11.0156 M81.4219,8.71875 C81.4219,7.92708 81.2578,7.30729 80.9297,6.85938 C80.6016,6.41146 80.1562,6.1875 79.5938,6.1875 C79.0208,6.1875 78.5703,6.41146 78.2422,6.85938 C77.9141,7.30729 77.75,7.92708 77.75,8.71875 C77.75,9.51042 77.9141,10.1328 78.2422,10.5859 C78.5703,11.0391 79.0208,11.2656 79.5938,11.2656 C80.1562,11.2656 80.6016,11.0391 80.9297,10.5859 C81.2578,10.1328 81.4219,9.51042 81.4219,8.71875 M84.3125,5.4375 L85.3906,5.4375 L85.3906,12 L84.3125,12 L84.3125,5.4375 M84.3125,2.875 L85.3906,2.875 L85.3906,4.25 L84.3125,4.25 L84.3125,2.875 M93.1094,8.03125 L93.1094,12 L92.0312,12 L92.0312,8.07812 C92.0312,7.45312 91.9089,6.98698 91.6641,6.67969 C91.4193,6.3724 91.0573,6.21875 90.5781,6.21875 C89.9948,6.21875 89.5339,6.40365 89.1953,6.77344 C88.8568,7.14323 88.6875,7.65104 88.6875,8.29688 L88.6875,12 L87.6094,12 L87.6094,5.4375 L88.6875,5.4375 L88.6875,6.45312 C88.9479,6.05729 89.2526,5.76302 89.6016,5.57031 C89.9505,5.3776 90.3542,5.28125 90.8125,5.28125 C91.5625,5.28125 92.1328,5.51302 92.5234,5.97656 C92.9141,6.4401 93.1094,7.125 93.1094,8.03125 M99.5625,8.64062 C99.5625,7.85938 99.401,7.25521 99.0781,6.82812 C98.7552,6.40104 98.3021,6.1875 97.7188,6.1875 C97.1458,6.1875 96.6979,6.40104 96.375,6.82812 C96.0521,7.25521 95.8906,7.85938 95.8906,8.64062 C95.8906,9.42188 96.0521,10.026 96.375,10.4531 C96.6979,10.8802 97.1458,11.0938 97.7188,11.0938 C98.3021,11.0938 98.7552,10.8802 99.0781,10.4531 C99.401,10.026 99.5625,9.42188 99.5625,8.64062 M100.641,11.1875 C100.641,12.3021 100.393,13.1328 99.8984,13.6797 C99.4036,14.2266 98.6406,14.5 97.6094,14.5 C97.2344,14.5 96.8776,14.4714 96.5391,14.4141 C96.2005,14.3568 95.875,14.2708 95.5625,14.1562 L95.5625,13.1094 C95.875,13.276 96.1875,13.401 96.5,13.4844 C96.8125,13.5677 97.125,13.6094 97.4375,13.6094 C98.1458,13.6094 98.6771,13.4245 99.0312,13.0547 C99.3854,12.6849 99.5625,12.125 99.5625,11.375 L99.5625,10.8438 C99.3333,11.2292 99.0469,11.5182 98.7031,11.7109 C98.3594,11.9036 97.9427,12 97.4531,12 C96.651,12 96.0026,11.6927 95.5078,11.0781 C95.013,10.4635 94.7656,9.65104 94.7656,8.64062 C94.7656,7.63021 95.013,6.81771 95.5078,6.20312 C96.0026,5.58854 96.651,5.28125 97.4531,5.28125 C97.9427,5.28125 98.3594,5.3776 98.7031,5.57031 C99.0469,5.76302 99.3333,6.05208 99.5625,6.4375 L99.5625,5.4375 L100.641,5.4375 L100.641,11.1875"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1842.19,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1842.19,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M530,-929.44 L1354,-929.44 L1354,-473.44 L530,-473.44 L530,-929.44"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1796.4,649.892)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1796.4,649.892)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1796.4,649.892)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M6.23438,6.70312 C6.50521,6.21354 6.82812,5.85417 7.20312,5.625 C7.57812,5.39583 8.02083,5.28125 8.53125,5.28125 C9.21875,5.28125 9.7474,5.52083 10.1172,6 C10.487,6.47917 10.6719,7.15625 10.6719,8.03125 L10.6719,12 L9.59375,12 L9.59375,8.07812 C9.59375,7.44271 9.48177,6.97396 9.25781,6.67188 C9.03385,6.36979 8.69271,6.21875 8.23438,6.21875 C7.67188,6.21875 7.22917,6.40365 6.90625,6.77344 C6.58333,7.14323 6.42188,7.65104 6.42188,8.29688 L6.42188,12 L5.34375,12 L5.34375,8.07812 C5.34375,7.44271 5.23177,6.97396 5.00781,6.67188 C4.78385,6.36979 4.4375,6.21875 3.96875,6.21875 C3.41667,6.21875 2.97917,6.40365 2.65625,6.77344 C2.33333,7.14323 2.17188,7.65104 2.17188,8.29688 L2.17188,12 L1.09375,12 L1.09375,5.4375 L2.17188,5.4375 L2.17188,6.45312 C2.42188,6.05729 2.71875,5.76302 3.0625,5.57031 C3.40625,5.3776 3.8125,5.28125 4.28125,5.28125 C4.76042,5.28125 5.16667,5.40104 5.5,5.64062 C5.83333,5.88021 6.07812,6.23438 6.23438,6.70312 M15.7969,8.70312 C14.9323,8.70312 14.3307,8.80208 13.9922,9 C13.6536,9.19792 13.4844,9.53646 13.4844,10.0156 C13.4844,10.401 13.612,10.7057 13.8672,10.9297 C14.1224,11.1536 14.4635,11.2656 14.8906,11.2656 C15.4948,11.2656 15.9766,11.0547 16.3359,10.6328 C16.6953,10.2109 16.875,9.64583 16.875,8.9375 L16.875,8.70312 L15.7969,8.70312 M17.9531,8.25 L17.9531,12 L16.875,12 L16.875,11 C16.625,11.3958 16.3177,11.6901 15.9531,11.8828 C15.5885,12.0755 15.1406,12.1719 14.6094,12.1719 C13.9323,12.1719 13.3958,11.9818 13,11.6016 C12.6042,11.2214 12.4062,10.7188 12.4062,10.0938 C12.4062,9.35417 12.6536,8.79688 13.1484,8.42188 C13.6432,8.04688 14.3802,7.85938 15.3594,7.85938 L16.875,7.85938 L16.875,7.75 C16.875,7.25 16.7109,6.86458 16.3828,6.59375 C16.0547,6.32292 15.599,6.1875 15.0156,6.1875 C14.6406,6.1875 14.2734,6.23438 13.9141,6.32812 C13.5547,6.42188 13.2135,6.55729 12.8906,6.73438 L12.8906,5.73438 C13.2865,5.57812 13.6693,5.46354 14.0391,5.39062 C14.4089,5.31771 14.7708,5.28125 15.125,5.28125 C16.0729,5.28125 16.7812,5.52604 17.25,6.01562 C17.7188,6.50521 17.9531,7.25 17.9531,8.25 M21.2031,11.0156 L21.2031,14.5 L20.125,14.5 L20.125,5.4375 L21.2031,5.4375 L21.2031,6.4375 C21.4323,6.04167 21.7188,5.75 22.0625,5.5625 C22.4062,5.375 22.8177,5.28125 23.2969,5.28125 C24.099,5.28125 24.75,5.59635 25.25,6.22656 C25.75,6.85677 26,7.6875 26,8.71875 C26,9.75 25.75,10.5833 25.25,11.2188 C24.75,11.8542 24.099,12.1719 23.2969,12.1719 C22.8177,12.1719 22.4062,12.0755 22.0625,11.8828 C21.7188,11.6901 21.4323,11.401 21.2031,11.0156 M24.875,8.71875 C24.875,7.92708 24.7109,7.30729 24.3828,6.85938 C24.0547,6.41146 23.6094,6.1875 23.0469,6.1875 C22.474,6.1875 22.0234,6.41146 21.6953,6.85938 C21.3672,7.30729 21.2031,7.92708 21.2031,8.71875 C21.2031,9.51042 21.3672,10.1328 21.6953,10.5859 C22.0234,11.0391 22.474,11.2656 23.0469,11.2656 C23.6094,11.2656 24.0547,11.0391 24.3828,10.5859 C24.7109,10.1328 24.875,9.51042 24.875,8.71875 M32.7656,14 L32.7656,14.8281 L26.5312,14.8281 L26.5312,14 L32.7656,14 M38.875,6.70312 C39.1458,6.21354 39.4688,5.85417 39.8438,5.625 C40.2188,5.39583 40.6615,5.28125 41.1719,5.28125 C41.8594,5.28125 42.388,5.52083 42.7578,6 C43.1276,6.47917 43.3125,7.15625 43.3125,8.03125 L43.3125,12 L42.2344,12 L42.2344,8.07812 C42.2344,7.44271 42.1224,6.97396 41.8984,6.67188 C41.6745,6.36979 41.3333,6.21875 40.875,6.21875 C40.3125,6.21875 39.8698,6.40365 39.5469,6.77344 C39.224,7.14323 39.0625,7.65104 39.0625,8.29688 L39.0625,12 L37.9844,12 L37.9844,8.07812 C37.9844,7.44271 37.8724,6.97396 37.6484,6.67188 C37.4245,6.36979 37.0781,6.21875 36.6094,6.21875 C36.0573,6.21875 35.6198,6.40365 35.2969,6.77344 C34.974,7.14323 34.8125,7.65104 34.8125,8.29688 L34.8125,12 L33.7344,12 L33.7344,5.4375 L34.8125,5.4375 L34.8125,6.45312 C35.0625,6.05729 35.3594,5.76302 35.7031,5.57031 C36.0469,5.3776 36.4531,5.28125 36.9219,5.28125 C37.401,5.28125 37.8073,5.40104 38.1406,5.64062 C38.474,5.88021 38.7188,6.23438 38.875,6.70312 M48.4375,8.70312 C47.5729,8.70312 46.9714,8.80208 46.6328,9 C46.2943,9.19792 46.125,9.53646 46.125,10.0156 C46.125,10.401 46.2526,10.7057 46.5078,10.9297 C46.763,11.1536 47.1042,11.2656 47.5312,11.2656 C48.1354,11.2656 48.6172,11.0547 48.9766,10.6328 C49.3359,10.2109 49.5156,9.64583 49.5156,8.9375 L49.5156,8.70312 L48.4375,8.70312 M50.5938,8.25 L50.5938,12 L49.5156,12 L49.5156,11 C49.2656,11.3958 48.9583,11.6901 48.5938,11.8828 C48.2292,12.0755 47.7812,12.1719 47.25,12.1719 C46.5729,12.1719 46.0365,11.9818 45.6406,11.6016 C45.2448,11.2214 45.0469,10.7188 45.0469,10.0938 C45.0469,9.35417 45.2943,8.79688 45.7891,8.42188 C46.2839,8.04688 47.0208,7.85938 48,7.85938 L49.5156,7.85938 L49.5156,7.75 C49.5156,7.25 49.3516,6.86458 49.0234,6.59375 C48.6953,6.32292 48.2396,6.1875 47.6562,6.1875 C47.2812,6.1875 46.9141,6.23438 46.5547,6.32812 C46.1953,6.42188 45.8542,6.55729 45.5312,6.73438 L45.5312,5.73438 C45.9271,5.57812 46.3099,5.46354 46.6797,5.39062 C47.0495,5.31771 47.4115,5.28125 47.7656,5.28125 C48.7135,5.28125 49.4219,5.52604 49.8906,6.01562 C50.3594,6.50521 50.5938,7.25 50.5938,8.25 M58.2656,8.03125 L58.2656,12 L57.1875,12 L57.1875,8.07812 C57.1875,7.45312 57.0651,6.98698 56.8203,6.67969 C56.5755,6.3724 56.2135,6.21875 55.7344,6.21875 C55.151,6.21875 54.6901,6.40365 54.3516,6.77344 C54.013,7.14323 53.8438,7.65104 53.8438,8.29688 L53.8438,12 L52.7656,12 L52.7656,5.4375 L53.8438,5.4375 L53.8438,6.45312 C54.1042,6.05729 54.4089,5.76302 54.7578,5.57031 C55.1068,5.3776 55.5104,5.28125 55.9688,5.28125 C56.7188,5.28125 57.2891,5.51302 57.6797,5.97656 C58.0703,6.4401 58.2656,7.125 58.2656,8.03125 M63.375,8.70312 C62.5104,8.70312 61.9089,8.80208 61.5703,9 C61.2318,9.19792 61.0625,9.53646 61.0625,10.0156 C61.0625,10.401 61.1901,10.7057 61.4453,10.9297 C61.7005,11.1536 62.0417,11.2656 62.4688,11.2656 C63.0729,11.2656 63.5547,11.0547 63.9141,10.6328 C64.2734,10.2109 64.4531,9.64583 64.4531,8.9375 L64.4531,8.70312 L63.375,8.70312 M65.5312,8.25 L65.5312,12 L64.4531,12 L64.4531,11 C64.2031,11.3958 63.8958,11.6901 63.5312,11.8828 C63.1667,12.0755 62.7188,12.1719 62.1875,12.1719 C61.5104,12.1719 60.974,11.9818 60.5781,11.6016 C60.1823,11.2214 59.9844,10.7188 59.9844,10.0938 C59.9844,9.35417 60.2318,8.79688 60.7266,8.42188 C61.2214,8.04688 61.9583,7.85938 62.9375,7.85938 L64.4531,7.85938 L64.4531,7.75 C64.4531,7.25 64.2891,6.86458 63.9609,6.59375 C63.6328,6.32292 63.1771,6.1875 62.5938,6.1875 C62.2188,6.1875 61.8516,6.23438 61.4922,6.32812 C61.1328,6.42188 60.7917,6.55729 60.4688,6.73438 L60.4688,5.73438 C60.8646,5.57812 61.2474,5.46354 61.6172,5.39062 C61.987,5.31771 62.349,5.28125 62.7031,5.28125 C63.651,5.28125 64.3594,5.52604 64.8281,6.01562 C65.2969,6.50521 65.5312,7.25 65.5312,8.25 M72.0625,8.64062 C72.0625,7.85938 71.901,7.25521 71.5781,6.82812 C71.2552,6.40104 70.8021,6.1875 70.2188,6.1875 C69.6458,6.1875 69.1979,6.40104 68.875,6.82812 C68.5521,7.25521 68.3906,7.85938 68.3906,8.64062 C68.3906,9.42188 68.5521,10.026 68.875,10.4531 C69.1979,10.8802 69.6458,11.0938 70.2188,11.0938 C70.8021,11.0938 71.2552,10.8802 71.5781,10.4531 C71.901,10.026 72.0625,9.42188 72.0625,8.64062 M73.1406,11.1875 C73.1406,12.3021 72.8932,13.1328 72.3984,13.6797 C71.9036,14.2266 71.1406,14.5 70.1094,14.5 C69.7344,14.5 69.3776,14.4714 69.0391,14.4141 C68.7005,14.3568 68.375,14.2708 68.0625,14.1562 L68.0625,13.1094 C68.375,13.276 68.6875,13.401 69,13.4844 C69.3125,13.5677 69.625,13.6094 69.9375,13.6094 C70.6458,13.6094 71.1771,13.4245 71.5312,13.0547 C71.8854,12.6849 72.0625,12.125 72.0625,11.375 L72.0625,10.8438 C71.8333,11.2292 71.5469,11.5182 71.2031,11.7109 C70.8594,11.9036 70.4427,12 69.9531,12 C69.151,12 68.5026,11.6927 68.0078,11.0781 C67.513,10.4635 67.2656,9.65104 67.2656,8.64062 C67.2656,7.63021 67.513,6.81771 68.0078,6.20312 C68.5026,5.58854 69.151,5.28125 69.9531,5.28125 C70.4427,5.28125 70.8594,5.3776 71.2031,5.57031 C71.5469,5.76302 71.8333,6.05208 72.0625,6.4375 L72.0625,5.4375 L73.1406,5.4375 L73.1406,11.1875 M80.9688,8.45312 L80.9688,8.96875 L76,8.96875 C76.0521,9.71875 76.2786,10.2865 76.6797,10.6719 C77.0807,11.0573 77.6354,11.25 78.3438,11.25 C78.7604,11.25 79.1641,11.2005 79.5547,11.1016 C79.9453,11.0026 80.3333,10.849 80.7188,10.6406 L80.7188,11.6719 C80.3229,11.8281 79.9219,11.9505 79.5156,12.0391 C79.1094,12.1276 78.6979,12.1719 78.2812,12.1719 C77.2396,12.1719 76.4115,11.8672 75.7969,11.2578 C75.1823,10.6484 74.875,9.82292 74.875,8.78125 C74.875,7.70833 75.1667,6.85677 75.75,6.22656 C76.3333,5.59635 77.1146,5.28125 78.0938,5.28125 C78.9792,5.28125 79.6797,5.5651 80.1953,6.13281 C80.7109,6.70052 80.9688,7.47396 80.9688,8.45312 M79.8906,8.125 C79.8802,7.54167 79.7135,7.07292 79.3906,6.71875 C79.0677,6.36458 78.6406,6.1875 78.1094,6.1875 C77.5052,6.1875 77.0234,6.35938 76.6641,6.70312 C76.3047,7.04688 76.099,7.52604 76.0469,8.14062 L79.8906,8.125 M86.5312,6.4375 C86.4062,6.375 86.2734,6.32552 86.1328,6.28906 C85.9922,6.2526 85.8333,6.23438 85.6562,6.23438 C85.0521,6.23438 84.5859,6.43229 84.2578,6.82812 C83.9297,7.22396 83.7656,7.79688 83.7656,8.54688 L83.7656,12 L82.6875,12 L82.6875,5.4375 L83.7656,5.4375 L83.7656,6.45312 C83.9948,6.05729 84.2917,5.76302 84.6562,5.57031 C85.0208,5.3776 85.4635,5.28125 85.9844,5.28125 C86.0573,5.28125 86.138,5.28646 86.2266,5.29688 C86.3151,5.30729 86.4115,5.32292 86.5156,5.34375 L86.5312,6.4375"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1796.4,649.892)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1796.4,649.892)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1144.5,-877.94 L1341.5,-877.94 L1341.5,-842.94 L1144.5,-842.94 L1144.5,-877.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2324.48,757.887)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2324.48,757.887)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,2324.48,757.887)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M100.812,6.70312 C101.083,6.21354 101.406,5.85417 101.781,5.625 C102.156,5.39583 102.599,5.28125 103.109,5.28125 C103.797,5.28125 104.326,5.52083 104.695,6 C105.065,6.47917 105.25,7.15625 105.25,8.03125 L105.25,12 L104.172,12 L104.172,8.07812 C104.172,7.44271 104.06,6.97396 103.836,6.67188 C103.612,6.36979 103.271,6.21875 102.812,6.21875 C102.25,6.21875 101.807,6.40365 101.484,6.77344 C101.161,7.14323 101,7.65104 101,8.29688 L101,12 L99.9219,12 L99.9219,8.07812 C99.9219,7.44271 99.8099,6.97396 99.5859,6.67188 C99.362,6.36979 99.0156,6.21875 98.5469,6.21875 C97.9948,6.21875 97.5573,6.40365 97.2344,6.77344 C96.9115,7.14323 96.75,7.65104 96.75,8.29688 L96.75,12 L95.6719,12 L95.6719,5.4375 L96.75,5.4375 L96.75,6.45312 C97,6.05729 97.2969,5.76302 97.6406,5.57031 C97.9844,5.3776 98.3906,5.28125 98.8594,5.28125 C99.3385,5.28125 99.7448,5.40104 100.078,5.64062 C100.411,5.88021 100.656,6.23438 100.812,6.70312 M110.375,8.70312 C109.51,8.70312 108.909,8.80208 108.57,9 C108.232,9.19792 108.062,9.53646 108.062,10.0156 C108.062,10.401 108.19,10.7057 108.445,10.9297 C108.701,11.1536 109.042,11.2656 109.469,11.2656 C110.073,11.2656 110.555,11.0547 110.914,10.6328 C111.273,10.2109 111.453,9.64583 111.453,8.9375 L111.453,8.70312 L110.375,8.70312 M112.531,8.25 L112.531,12 L111.453,12 L111.453,11 C111.203,11.3958 110.896,11.6901 110.531,11.8828 C110.167,12.0755 109.719,12.1719 109.188,12.1719 C108.51,12.1719 107.974,11.9818 107.578,11.6016 C107.182,11.2214 106.984,10.7188 106.984,10.0938 C106.984,9.35417 107.232,8.79688 107.727,8.42188 C108.221,8.04688 108.958,7.85938 109.938,7.85938 L111.453,7.85938 L111.453,7.75 C111.453,7.25 111.289,6.86458 110.961,6.59375 C110.633,6.32292 110.177,6.1875 109.594,6.1875 C109.219,6.1875 108.852,6.23438 108.492,6.32812 C108.133,6.42188 107.792,6.55729 107.469,6.73438 L107.469,5.73438 C107.865,5.57812 108.247,5.46354 108.617,5.39062 C108.987,5.31771 109.349,5.28125 109.703,5.28125 C110.651,5.28125 111.359,5.52604 111.828,6.01562 C112.297,6.50521 112.531,7.25 112.531,8.25 M118.922,5.625 L118.922,6.65625 C118.62,6.5 118.305,6.38281 117.977,6.30469 C117.648,6.22656 117.307,6.1875 116.953,6.1875 C116.422,6.1875 116.021,6.26823 115.75,6.42969 C115.479,6.59115 115.344,6.83854 115.344,7.17188 C115.344,7.42188 115.44,7.61719 115.633,7.75781 C115.826,7.89844 116.214,8.03125 116.797,8.15625 L117.156,8.25 C117.927,8.40625 118.474,8.63542 118.797,8.9375 C119.12,9.23958 119.281,9.65625 119.281,10.1875 C119.281,10.8021 119.039,11.2865 118.555,11.6406 C118.07,11.9948 117.406,12.1719 116.562,12.1719 C116.208,12.1719 115.841,12.138 115.461,12.0703 C115.081,12.0026 114.682,11.901 114.266,11.7656 L114.266,10.6406 C114.661,10.849 115.052,11.0052 115.438,11.1094 C115.823,11.2135 116.208,11.2656 116.594,11.2656 C117.094,11.2656 117.482,11.1797 117.758,11.0078 C118.034,10.8359 118.172,10.5885 118.172,10.2656 C118.172,9.97396 118.073,9.75 117.875,9.59375 C117.677,9.4375 117.245,9.28646 116.578,9.14062 L116.203,9.0625 C115.536,8.91667 115.055,8.69792 114.758,8.40625 C114.461,8.11458 114.312,7.71875 114.312,7.21875 C114.312,6.59375 114.531,6.11458 114.969,5.78125 C115.406,5.44792 116.026,5.28125 116.828,5.28125 C117.224,5.28125 117.599,5.3099 117.953,5.36719 C118.307,5.42448 118.63,5.51042 118.922,5.625 M120.953,2.875 L122.031,2.875 L122.031,8.26562 L125.25,5.4375 L126.625,5.4375 L123.141,8.5 L126.781,12 L125.375,12 L122.031,8.79688 L122.031,12 L120.953,12 L120.953,2.875 M132.922,14 L132.922,14.8281 L126.688,14.8281 L126.688,14 L132.922,14 M138.109,5.625 L138.109,6.65625 C137.807,6.5 137.492,6.38281 137.164,6.30469 C136.836,6.22656 136.495,6.1875 136.141,6.1875 C135.609,6.1875 135.208,6.26823 134.938,6.42969 C134.667,6.59115 134.531,6.83854 134.531,7.17188 C134.531,7.42188 134.628,7.61719 134.82,7.75781 C135.013,7.89844 135.401,8.03125 135.984,8.15625 L136.344,8.25 C137.115,8.40625 137.661,8.63542 137.984,8.9375 C138.307,9.23958 138.469,9.65625 138.469,10.1875 C138.469,10.8021 138.227,11.2865 137.742,11.6406 C137.258,11.9948 136.594,12.1719 135.75,12.1719 C135.396,12.1719 135.029,12.138 134.648,12.0703 C134.268,12.0026 133.87,11.901 133.453,11.7656 L133.453,10.6406 C133.849,10.849 134.24,11.0052 134.625,11.1094 C135.01,11.2135 135.396,11.2656 135.781,11.2656 C136.281,11.2656 136.669,11.1797 136.945,11.0078 C137.221,10.8359 137.359,10.5885 137.359,10.2656 C137.359,9.97396 137.26,9.75 137.062,9.59375 C136.865,9.4375 136.432,9.28646 135.766,9.14062 L135.391,9.0625 C134.724,8.91667 134.242,8.69792 133.945,8.40625 C133.648,8.11458 133.5,7.71875 133.5,7.21875 C133.5,6.59375 133.719,6.11458 134.156,5.78125 C134.594,5.44792 135.214,5.28125 136.016,5.28125 C136.411,5.28125 136.786,5.3099 137.141,5.36719 C137.495,5.42448 137.818,5.51042 138.109,5.625 M140.172,2.875 L141.25,2.875 L141.25,12 L140.172,12 L140.172,2.875 M146.484,8.70312 C145.62,8.70312 145.018,8.80208 144.68,9 C144.341,9.19792 144.172,9.53646 144.172,10.0156 C144.172,10.401 144.299,10.7057 144.555,10.9297 C144.81,11.1536 145.151,11.2656 145.578,11.2656 C146.182,11.2656 146.664,11.0547 147.023,10.6328 C147.383,10.2109 147.562,9.64583 147.562,8.9375 L147.562,8.70312 L146.484,8.70312 M148.641,8.25 L148.641,12 L147.562,12 L147.562,11 C147.312,11.3958 147.005,11.6901 146.641,11.8828 C146.276,12.0755 145.828,12.1719 145.297,12.1719 C144.62,12.1719 144.083,11.9818 143.688,11.6016 C143.292,11.2214 143.094,10.7188 143.094,10.0938 C143.094,9.35417 143.341,8.79688 143.836,8.42188 C144.331,8.04688 145.068,7.85938 146.047,7.85938 L147.562,7.85938 L147.562,7.75 C147.562,7.25 147.398,6.86458 147.07,6.59375 C146.742,6.32292 146.286,6.1875 145.703,6.1875 C145.328,6.1875 144.961,6.23438 144.602,6.32812 C144.242,6.42188 143.901,6.55729 143.578,6.73438 L143.578,5.73438 C143.974,5.57812 144.357,5.46354 144.727,5.39062 C145.096,5.31771 145.458,5.28125 145.812,5.28125 C146.76,5.28125 147.469,5.52604 147.938,6.01562 C148.406,6.50521 148.641,7.25 148.641,8.25 M155.953,6.70312 C156.224,6.21354 156.547,5.85417 156.922,5.625 C157.297,5.39583 157.74,5.28125 158.25,5.28125 C158.938,5.28125 159.466,5.52083 159.836,6 C160.206,6.47917 160.391,7.15625 160.391,8.03125 L160.391,12 L159.312,12 L159.312,8.07812 C159.312,7.44271 159.201,6.97396 158.977,6.67188 C158.753,6.36979 158.411,6.21875 157.953,6.21875 C157.391,6.21875 156.948,6.40365 156.625,6.77344 C156.302,7.14323 156.141,7.65104 156.141,8.29688 L156.141,12 L155.062,12 L155.062,8.07812 C155.062,7.44271 154.951,6.97396 154.727,6.67188 C154.503,6.36979 154.156,6.21875 153.688,6.21875 C153.135,6.21875 152.698,6.40365 152.375,6.77344 C152.052,7.14323 151.891,7.65104 151.891,8.29688 L151.891,12 L150.812,12 L150.812,5.4375 L151.891,5.4375 L151.891,6.45312 C152.141,6.05729 152.438,5.76302 152.781,5.57031 C153.125,5.3776 153.531,5.28125 154,5.28125 C154.479,5.28125 154.885,5.40104 155.219,5.64062 C155.552,5.88021 155.797,6.23438 155.953,6.70312 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2324.48,757.887)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2324.48,757.887)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M577.5,-678.94 L764.5,-678.94 L764.5,-643.94 L577.5,-643.94 L577.5,-678.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1189.11,1155.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1189.11,1155.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1189.11,1155.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M95.7031,2.875 L96.7812,2.875 L96.7812,12 L95.7031,12 L95.7031,2.875 M101.578,6.1875 C101.005,6.1875 100.549,6.41406 100.211,6.86719 C99.8724,7.32031 99.7031,7.9375 99.7031,8.71875 C99.7031,9.51042 99.8698,10.1302 100.203,10.5781 C100.536,11.026 100.995,11.25 101.578,11.25 C102.151,11.25 102.607,11.0234 102.945,10.5703 C103.284,10.1172 103.453,9.5 103.453,8.71875 C103.453,7.94792 103.284,7.33333 102.945,6.875 C102.607,6.41667 102.151,6.1875 101.578,6.1875 M101.578,5.28125 C102.516,5.28125 103.253,5.58594 103.789,6.19531 C104.326,6.80469 104.594,7.64583 104.594,8.71875 C104.594,9.79167 104.326,10.6354 103.789,11.25 C103.253,11.8646 102.516,12.1719 101.578,12.1719 C100.641,12.1719 99.9036,11.8646 99.3672,11.25 C98.8307,10.6354 98.5625,9.79167 98.5625,8.71875 C98.5625,7.64583 98.8307,6.80469 99.3672,6.19531 C99.9036,5.58594 100.641,5.28125 101.578,5.28125 M109.344,8.70312 C108.479,8.70312 107.878,8.80208 107.539,9 C107.201,9.19792 107.031,9.53646 107.031,10.0156 C107.031,10.401 107.159,10.7057 107.414,10.9297 C107.669,11.1536 108.01,11.2656 108.438,11.2656 C109.042,11.2656 109.523,11.0547 109.883,10.6328 C110.242,10.2109 110.422,9.64583 110.422,8.9375 L110.422,8.70312 L109.344,8.70312 M111.5,8.25 L111.5,12 L110.422,12 L110.422,11 C110.172,11.3958 109.865,11.6901 109.5,11.8828 C109.135,12.0755 108.688,12.1719 108.156,12.1719 C107.479,12.1719 106.943,11.9818 106.547,11.6016 C106.151,11.2214 105.953,10.7188 105.953,10.0938 C105.953,9.35417 106.201,8.79688 106.695,8.42188 C107.19,8.04688 107.927,7.85938 108.906,7.85938 L110.422,7.85938 L110.422,7.75 C110.422,7.25 110.258,6.86458 109.93,6.59375 C109.602,6.32292 109.146,6.1875 108.562,6.1875 C108.188,6.1875 107.82,6.23438 107.461,6.32812 C107.102,6.42188 106.76,6.55729 106.438,6.73438 L106.438,5.73438 C106.833,5.57812 107.216,5.46354 107.586,5.39062 C107.956,5.31771 108.318,5.28125 108.672,5.28125 C109.62,5.28125 110.328,5.52604 110.797,6.01562 C111.266,6.50521 111.5,7.25 111.5,8.25 M118.031,6.4375 L118.031,2.875 L119.109,2.875 L119.109,12 L118.031,12 L118.031,11.0156 C117.802,11.401 117.516,11.6901 117.172,11.8828 C116.828,12.0755 116.411,12.1719 115.922,12.1719 C115.13,12.1719 114.484,11.8542 113.984,11.2188 C113.484,10.5833 113.234,9.75 113.234,8.71875 C113.234,7.6875 113.484,6.85677 113.984,6.22656 C114.484,5.59635 115.13,5.28125 115.922,5.28125 C116.411,5.28125 116.828,5.375 117.172,5.5625 C117.516,5.75 117.802,6.04167 118.031,6.4375 M114.359,8.71875 C114.359,9.51042 114.521,10.1328 114.844,10.5859 C115.167,11.0391 115.615,11.2656 116.188,11.2656 C116.76,11.2656 117.211,11.0391 117.539,10.5859 C117.867,10.1328 118.031,9.51042 118.031,8.71875 C118.031,7.92708 117.867,7.30729 117.539,6.85938 C117.211,6.41146 116.76,6.1875 116.188,6.1875 C115.615,6.1875 115.167,6.41146 114.844,6.85938 C114.521,7.30729 114.359,7.92708 114.359,8.71875 M126.312,14 L126.312,14.8281 L120.078,14.8281 L120.078,14 L126.312,14 M132.422,6.70312 C132.693,6.21354 133.016,5.85417 133.391,5.625 C133.766,5.39583 134.208,5.28125 134.719,5.28125 C135.406,5.28125 135.935,5.52083 136.305,6 C136.674,6.47917 136.859,7.15625 136.859,8.03125 L136.859,12 L135.781,12 L135.781,8.07812 C135.781,7.44271 135.669,6.97396 135.445,6.67188 C135.221,6.36979 134.88,6.21875 134.422,6.21875 C133.859,6.21875 133.417,6.40365 133.094,6.77344 C132.771,7.14323 132.609,7.65104 132.609,8.29688 L132.609,12 L131.531,12 L131.531,8.07812 C131.531,7.44271 131.419,6.97396 131.195,6.67188 C130.971,6.36979 130.625,6.21875 130.156,6.21875 C129.604,6.21875 129.167,6.40365 128.844,6.77344 C128.521,7.14323 128.359,7.65104 128.359,8.29688 L128.359,12 L127.281,12 L127.281,5.4375 L128.359,5.4375 L128.359,6.45312 C128.609,6.05729 128.906,5.76302 129.25,5.57031 C129.594,5.3776 130,5.28125 130.469,5.28125 C130.948,5.28125 131.354,5.40104 131.688,5.64062 C132.021,5.88021 132.266,6.23438 132.422,6.70312 M141.984,8.70312 C141.12,8.70312 140.518,8.80208 140.18,9 C139.841,9.19792 139.672,9.53646 139.672,10.0156 C139.672,10.401 139.799,10.7057 140.055,10.9297 C140.31,11.1536 140.651,11.2656 141.078,11.2656 C141.682,11.2656 142.164,11.0547 142.523,10.6328 C142.883,10.2109 143.062,9.64583 143.062,8.9375 L143.062,8.70312 L141.984,8.70312 M144.141,8.25 L144.141,12 L143.062,12 L143.062,11 C142.812,11.3958 142.505,11.6901 142.141,11.8828 C141.776,12.0755 141.328,12.1719 140.797,12.1719 C140.12,12.1719 139.583,11.9818 139.188,11.6016 C138.792,11.2214 138.594,10.7188 138.594,10.0938 C138.594,9.35417 138.841,8.79688 139.336,8.42188 C139.831,8.04688 140.568,7.85938 141.547,7.85938 L143.062,7.85938 L143.062,7.75 C143.062,7.25 142.898,6.86458 142.57,6.59375 C142.242,6.32292 141.786,6.1875 141.203,6.1875 C140.828,6.1875 140.461,6.23438 140.102,6.32812 C139.742,6.42188 139.401,6.55729 139.078,6.73438 L139.078,5.73438 C139.474,5.57812 139.857,5.46354 140.227,5.39062 C140.596,5.31771 140.958,5.28125 141.312,5.28125 C142.26,5.28125 142.969,5.52604 143.438,6.01562 C143.906,6.50521 144.141,7.25 144.141,8.25 M147.391,11.0156 L147.391,14.5 L146.312,14.5 L146.312,5.4375 L147.391,5.4375 L147.391,6.4375 C147.62,6.04167 147.906,5.75 148.25,5.5625 C148.594,5.375 149.005,5.28125 149.484,5.28125 C150.286,5.28125 150.938,5.59635 151.438,6.22656 C151.938,6.85677 152.188,7.6875 152.188,8.71875 C152.188,9.75 151.938,10.5833 151.438,11.2188 C150.938,11.8542 150.286,12.1719 149.484,12.1719 C149.005,12.1719 148.594,12.0755 148.25,11.8828 C147.906,11.6901 147.62,11.401 147.391,11.0156 M151.062,8.71875 C151.062,7.92708 150.898,7.30729 150.57,6.85938 C150.242,6.41146 149.797,6.1875 149.234,6.1875 C148.661,6.1875 148.211,6.41146 147.883,6.85938 C147.555,7.30729 147.391,7.92708 147.391,8.71875 C147.391,9.51042 147.555,10.1328 147.883,10.5859 C148.211,11.0391 148.661,11.2656 149.234,11.2656 C149.797,11.2656 150.242,11.0391 150.57,10.5859 C150.898,10.1328 151.062,9.51042 151.062,8.71875 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1189.11,1155.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1189.11,1155.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M540.5,-254.94 L801.5,-254.94 L801.5,-219.94 L540.5,-219.94 L540.5,-254.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1128.52,2003.83)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1128.52,2003.83)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1128.52,2003.83)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.625,8.03125 L10.625,12 L9.54688,12 L9.54688,8.07812 C9.54688,7.45312 9.42448,6.98698 9.17969,6.67969 C8.9349,6.3724 8.57292,6.21875 8.09375,6.21875 C7.51042,6.21875 7.04948,6.40365 6.71094,6.77344 C6.3724,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,2.875 L6.20312,2.875 L6.20312,6.45312 C6.46354,6.05729 6.76823,5.76302 7.11719,5.57031 C7.46615,5.3776 7.86979,5.28125 8.32812,5.28125 C9.07812,5.28125 9.64844,5.51302 10.0391,5.97656 C10.4297,6.4401 10.625,7.125 10.625,8.03125 M15.2969,6.1875 C14.724,6.1875 14.2682,6.41406 13.9297,6.86719 C13.5911,7.32031 13.4219,7.9375 13.4219,8.71875 C13.4219,9.51042 13.5885,10.1302 13.9219,10.5781 C14.2552,11.026 14.7135,11.25 15.2969,11.25 C15.8698,11.25 16.3255,11.0234 16.6641,10.5703 C17.0026,10.1172 17.1719,9.5 17.1719,8.71875 C17.1719,7.94792 17.0026,7.33333 16.6641,6.875 C16.3255,6.41667 15.8698,6.1875 15.2969,6.1875 M15.2969,5.28125 C16.2344,5.28125 16.9714,5.58594 17.5078,6.19531 C18.0443,6.80469 18.3125,7.64583 18.3125,8.71875 C18.3125,9.79167 18.0443,10.6354 17.5078,11.25 C16.9714,11.8646 16.2344,12.1719 15.2969,12.1719 C14.3594,12.1719 13.6224,11.8646 13.0859,11.25 C12.5495,10.6354 12.2812,9.79167 12.2812,8.71875 C12.2812,7.64583 12.5495,6.80469 13.0859,6.19531 C13.6224,5.58594 14.3594,5.28125 15.2969,5.28125 M25.1875,6.70312 C25.4583,6.21354 25.7812,5.85417 26.1562,5.625 C26.5312,5.39583 26.974,5.28125 27.4844,5.28125 C28.1719,5.28125 28.7005,5.52083 29.0703,6 C29.4401,6.47917 29.625,7.15625 29.625,8.03125 L29.625,12 L28.5469,12 L28.5469,8.07812 C28.5469,7.44271 28.4349,6.97396 28.2109,6.67188 C27.987,6.36979 27.6458,6.21875 27.1875,6.21875 C26.625,6.21875 26.1823,6.40365 25.8594,6.77344 C25.5365,7.14323 25.375,7.65104 25.375,8.29688 L25.375,12 L24.2969,12 L24.2969,8.07812 C24.2969,7.44271 24.1849,6.97396 23.9609,6.67188 C23.737,6.36979 23.3906,6.21875 22.9219,6.21875 C22.3698,6.21875 21.9323,6.40365 21.6094,6.77344 C21.2865,7.14323 21.125,7.65104 21.125,8.29688 L21.125,12 L20.0469,12 L20.0469,5.4375 L21.125,5.4375 L21.125,6.45312 C21.375,6.05729 21.6719,5.76302 22.0156,5.57031 C22.3594,5.3776 22.7656,5.28125 23.2344,5.28125 C23.7135,5.28125 24.1198,5.40104 24.4531,5.64062 C24.7865,5.88021 25.0312,6.23438 25.1875,6.70312 M37.3906,8.45312 L37.3906,8.96875 L32.4219,8.96875 C32.474,9.71875 32.7005,10.2865 33.1016,10.6719 C33.5026,11.0573 34.0573,11.25 34.7656,11.25 C35.1823,11.25 35.5859,11.2005 35.9766,11.1016 C36.3672,11.0026 36.7552,10.849 37.1406,10.6406 L37.1406,11.6719 C36.7448,11.8281 36.3438,11.9505 35.9375,12.0391 C35.5312,12.1276 35.1198,12.1719 34.7031,12.1719 C33.6615,12.1719 32.8333,11.8672 32.2188,11.2578 C31.6042,10.6484 31.2969,9.82292 31.2969,8.78125 C31.2969,7.70833 31.5885,6.85677 32.1719,6.22656 C32.7552,5.59635 33.5365,5.28125 34.5156,5.28125 C35.401,5.28125 36.1016,5.5651 36.6172,6.13281 C37.1328,6.70052 37.3906,7.47396 37.3906,8.45312 M36.3125,8.125 C36.3021,7.54167 36.1354,7.07292 35.8125,6.71875 C35.4896,6.36458 35.0625,6.1875 34.5312,6.1875 C33.9271,6.1875 33.4453,6.35938 33.0859,6.70312 C32.7266,7.04688 32.5208,7.52604 32.4688,8.14062 L36.3125,8.125 M42.9531,6.4375 C42.8281,6.375 42.6953,6.32552 42.5547,6.28906 C42.4141,6.2526 42.2552,6.23438 42.0781,6.23438 C41.474,6.23438 41.0078,6.43229 40.6797,6.82812 C40.3516,7.22396 40.1875,7.79688 40.1875,8.54688 L40.1875,12 L39.1094,12 L39.1094,5.4375 L40.1875,5.4375 L40.1875,6.45312 C40.4167,6.05729 40.7135,5.76302 41.0781,5.57031 C41.4427,5.3776 41.8854,5.28125 42.4062,5.28125 C42.4792,5.28125 42.5599,5.28646 42.6484,5.29688 C42.737,5.30729 42.8333,5.32292 42.9375,5.34375 L42.9531,6.4375 M49.0625,14 L49.0625,14.8281 L42.8281,14.8281 L42.8281,14 L49.0625,14 M55.5312,8.03125 L55.5312,12 L54.4531,12 L54.4531,8.07812 C54.4531,7.45312 54.3307,6.98698 54.0859,6.67969 C53.8411,6.3724 53.4792,6.21875 53,6.21875 C52.4167,6.21875 51.9557,6.40365 51.6172,6.77344 C51.2786,7.14323 51.1094,7.65104 51.1094,8.29688 L51.1094,12 L50.0312,12 L50.0312,5.4375 L51.1094,5.4375 L51.1094,6.45312 C51.3698,6.05729 51.6745,5.76302 52.0234,5.57031 C52.3724,5.3776 52.776,5.28125 53.2344,5.28125 C53.9844,5.28125 54.5547,5.51302 54.9453,5.97656 C55.3359,6.4401 55.5312,7.125 55.5312,8.03125 M60.6406,8.70312 C59.776,8.70312 59.1745,8.80208 58.8359,9 C58.4974,9.19792 58.3281,9.53646 58.3281,10.0156 C58.3281,10.401 58.4557,10.7057 58.7109,10.9297 C58.9661,11.1536 59.3073,11.2656 59.7344,11.2656 C60.3385,11.2656 60.8203,11.0547 61.1797,10.6328 C61.5391,10.2109 61.7188,9.64583 61.7188,8.9375 L61.7188,8.70312 L60.6406,8.70312 M62.7969,8.25 L62.7969,12 L61.7188,12 L61.7188,11 C61.4688,11.3958 61.1615,11.6901 60.7969,11.8828 C60.4323,12.0755 59.9844,12.1719 59.4531,12.1719 C58.776,12.1719 58.2396,11.9818 57.8438,11.6016 C57.4479,11.2214 57.25,10.7188 57.25,10.0938 C57.25,9.35417 57.4974,8.79688 57.9922,8.42188 C58.487,8.04688 59.224,7.85938 60.2031,7.85938 L61.7188,7.85938 L61.7188,7.75 C61.7188,7.25 61.5547,6.86458 61.2266,6.59375 C60.8984,6.32292 60.4427,6.1875 59.8594,6.1875 C59.4844,6.1875 59.1172,6.23438 58.7578,6.32812 C58.3984,6.42188 58.0573,6.55729 57.7344,6.73438 L57.7344,5.73438 C58.1302,5.57812 58.513,5.46354 58.8828,5.39062 C59.2526,5.31771 59.6146,5.28125 59.9688,5.28125 C60.9167,5.28125 61.625,5.52604 62.0938,6.01562 C62.5625,6.50521 62.7969,7.25 62.7969,8.25 M64.2344,5.4375 L65.375,5.4375 L67.4219,10.9375 L69.4844,5.4375 L70.625,5.4375 L68.1562,12 L66.6875,12 L64.2344,5.4375 M72.0938,5.4375 L73.1719,5.4375 L73.1719,12 L72.0938,12 L72.0938,5.4375 M72.0938,2.875 L73.1719,2.875 L73.1719,4.25 L72.0938,4.25 L72.0938,2.875 M79.75,8.64062 C79.75,7.85938 79.5885,7.25521 79.2656,6.82812 C78.9427,6.40104 78.4896,6.1875 77.9062,6.1875 C77.3333,6.1875 76.8854,6.40104 76.5625,6.82812 C76.2396,7.25521 76.0781,7.85938 76.0781,8.64062 C76.0781,9.42188 76.2396,10.026 76.5625,10.4531 C76.8854,10.8802 77.3333,11.0938 77.9062,11.0938 C78.4896,11.0938 78.9427,10.8802 79.2656,10.4531 C79.5885,10.026 79.75,9.42188 79.75,8.64062 M80.8281,11.1875 C80.8281,12.3021 80.5807,13.1328 80.0859,13.6797 C79.5911,14.2266 78.8281,14.5 77.7969,14.5 C77.4219,14.5 77.0651,14.4714 76.7266,14.4141 C76.388,14.3568 76.0625,14.2708 75.75,14.1562 L75.75,13.1094 C76.0625,13.276 76.375,13.401 76.6875,13.4844 C77,13.5677 77.3125,13.6094 77.625,13.6094 C78.3333,13.6094 78.8646,13.4245 79.2188,13.0547 C79.5729,12.6849 79.75,12.125 79.75,11.375 L79.75,10.8438 C79.5208,11.2292 79.2344,11.5182 78.8906,11.7109 C78.5469,11.9036 78.1302,12 77.6406,12 C76.8385,12 76.1901,11.6927 75.6953,11.0781 C75.2005,10.4635 74.9531,9.65104 74.9531,8.64062 C74.9531,7.63021 75.2005,6.81771 75.6953,6.20312 C76.1901,5.58854 76.8385,5.28125 77.6406,5.28125 C78.1302,5.28125 78.5469,5.3776 78.8906,5.57031 C79.2344,5.76302 79.5208,6.05208 79.75,6.4375 L79.75,5.4375 L80.8281,5.4375 L80.8281,11.1875 M86.0156,8.70312 C85.151,8.70312 84.5495,8.80208 84.2109,9 C83.8724,9.19792 83.7031,9.53646 83.7031,10.0156 C83.7031,10.401 83.8307,10.7057 84.0859,10.9297 C84.3411,11.1536 84.6823,11.2656 85.1094,11.2656 C85.7135,11.2656 86.1953,11.0547 86.5547,10.6328 C86.9141,10.2109 87.0938,9.64583 87.0938,8.9375 L87.0938,8.70312 L86.0156,8.70312 M88.1719,8.25 L88.1719,12 L87.0938,12 L87.0938,11 C86.8438,11.3958 86.5365,11.6901 86.1719,11.8828 C85.8073,12.0755 85.3594,12.1719 84.8281,12.1719 C84.151,12.1719 83.6146,11.9818 83.2188,11.6016 C82.8229,11.2214 82.625,10.7188 82.625,10.0938 C82.625,9.35417 82.8724,8.79688 83.3672,8.42188 C83.862,8.04688 84.599,7.85938 85.5781,7.85938 L87.0938,7.85938 L87.0938,7.75 C87.0938,7.25 86.9297,6.86458 86.6016,6.59375 C86.2734,6.32292 85.8177,6.1875 85.2344,6.1875 C84.8594,6.1875 84.4922,6.23438 84.1328,6.32812 C83.7734,6.42188 83.4323,6.55729 83.1094,6.73438 L83.1094,5.73438 C83.5052,5.57812 83.888,5.46354 84.2578,5.39062 C84.6276,5.31771 84.9896,5.28125 85.3438,5.28125 C86.2917,5.28125 87,5.52604 87.4688,6.01562 C87.9375,6.50521 88.1719,7.25 88.1719,8.25 M91.4531,3.57812 L91.4531,5.4375 L93.6719,5.4375 L93.6719,6.28125 L91.4531,6.28125 L91.4531,9.84375 C91.4531,10.375 91.526,10.7161 91.6719,10.8672 C91.8177,11.0182 92.1146,11.0938 92.5625,11.0938 L93.6719,11.0938 L93.6719,12 L92.5625,12 C91.7292,12 91.1536,11.8438 90.8359,11.5312 C90.5182,11.2188 90.3594,10.6562 90.3594,9.84375 L90.3594,6.28125 L89.5781,6.28125 L89.5781,5.4375 L90.3594,5.4375 L90.3594,3.57812 L91.4531,3.57812 M95.0781,5.4375 L96.1562,5.4375 L96.1562,12 L95.0781,12 L95.0781,5.4375 M95.0781,2.875 L96.1562,2.875 L96.1562,4.25 L95.0781,4.25 L95.0781,2.875 M100.953,6.1875 C100.38,6.1875 99.9245,6.41406 99.5859,6.86719 C99.2474,7.32031 99.0781,7.9375 99.0781,8.71875 C99.0781,9.51042 99.2448,10.1302 99.5781,10.5781 C99.9115,11.026 100.37,11.25 100.953,11.25 C101.526,11.25 101.982,11.0234 102.32,10.5703 C102.659,10.1172 102.828,9.5 102.828,8.71875 C102.828,7.94792 102.659,7.33333 102.32,6.875 C101.982,6.41667 101.526,6.1875 100.953,6.1875 M100.953,5.28125 C101.891,5.28125 102.628,5.58594 103.164,6.19531 C103.701,6.80469 103.969,7.64583 103.969,8.71875 C103.969,9.79167 103.701,10.6354 103.164,11.25 C102.628,11.8646 101.891,12.1719 100.953,12.1719 C100.016,12.1719 99.2786,11.8646 98.7422,11.25 C98.2057,10.6354 97.9375,9.79167 97.9375,8.71875 C97.9375,7.64583 98.2057,6.80469 98.7422,6.19531 C99.2786,5.58594 100.016,5.28125 100.953,5.28125 M111.203,8.03125 L111.203,12 L110.125,12 L110.125,8.07812 C110.125,7.45312 110.003,6.98698 109.758,6.67969 C109.513,6.3724 109.151,6.21875 108.672,6.21875 C108.089,6.21875 107.628,6.40365 107.289,6.77344 C106.951,7.14323 106.781,7.65104 106.781,8.29688 L106.781,12 L105.703,12 L105.703,5.4375 L106.781,5.4375 L106.781,6.45312 C107.042,6.05729 107.346,5.76302 107.695,5.57031 C108.044,5.3776 108.448,5.28125 108.906,5.28125 C109.656,5.28125 110.227,5.51302 110.617,5.97656 C111.008,6.4401 111.203,7.125 111.203,8.03125 M115.25,3.25 L116.25,3.25 L113.203,13.1094 L112.203,13.1094 L115.25,3.25 M121.547,5.625 L121.547,6.65625 C121.245,6.5 120.93,6.38281 120.602,6.30469 C120.273,6.22656 119.932,6.1875 119.578,6.1875 C119.047,6.1875 118.646,6.26823 118.375,6.42969 C118.104,6.59115 117.969,6.83854 117.969,7.17188 C117.969,7.42188 118.065,7.61719 118.258,7.75781 C118.451,7.89844 118.839,8.03125 119.422,8.15625 L119.781,8.25 C120.552,8.40625 121.099,8.63542 121.422,8.9375 C121.745,9.23958 121.906,9.65625 121.906,10.1875 C121.906,10.8021 121.664,11.2865 121.18,11.6406 C120.695,11.9948 120.031,12.1719 119.188,12.1719 C118.833,12.1719 118.466,12.138 118.086,12.0703 C117.706,12.0026 117.307,11.901 116.891,11.7656 L116.891,10.6406 C117.286,10.849 117.677,11.0052 118.062,11.1094 C118.448,11.2135 118.833,11.2656 119.219,11.2656 C119.719,11.2656 120.107,11.1797 120.383,11.0078 C120.659,10.8359 120.797,10.5885 120.797,10.2656 C120.797,9.97396 120.698,9.75 120.5,9.59375 C120.302,9.4375 119.87,9.28646 119.203,9.14062 L118.828,9.0625 C118.161,8.91667 117.68,8.69792 117.383,8.40625 C117.086,8.11458 116.938,7.71875 116.938,7.21875 C116.938,6.59375 117.156,6.11458 117.594,5.78125 C118.031,5.44792 118.651,5.28125 119.453,5.28125 C119.849,5.28125 120.224,5.3099 120.578,5.36719 C120.932,5.42448 121.255,5.51042 121.547,5.625 M124.688,3.57812 L124.688,5.4375 L126.906,5.4375 L126.906,6.28125 L124.688,6.28125 L124.688,9.84375 C124.688,10.375 124.76,10.7161 124.906,10.8672 C125.052,11.0182 125.349,11.0938 125.797,11.0938 L126.906,11.0938 L126.906,12 L125.797,12 C124.964,12 124.388,11.8438 124.07,11.5312 C123.753,11.2188 123.594,10.6562 123.594,9.84375 L123.594,6.28125 L122.812,6.28125 L122.812,5.4375 L123.594,5.4375 L123.594,3.57812 L124.688,3.57812 M131.297,8.70312 C130.432,8.70312 129.831,8.80208 129.492,9 C129.154,9.19792 128.984,9.53646 128.984,10.0156 C128.984,10.401 129.112,10.7057 129.367,10.9297 C129.622,11.1536 129.964,11.2656 130.391,11.2656 C130.995,11.2656 131.477,11.0547 131.836,10.6328 C132.195,10.2109 132.375,9.64583 132.375,8.9375 L132.375,8.70312 L131.297,8.70312 M133.453,8.25 L133.453,12 L132.375,12 L132.375,11 C132.125,11.3958 131.818,11.6901 131.453,11.8828 C131.089,12.0755 130.641,12.1719 130.109,12.1719 C129.432,12.1719 128.896,11.9818 128.5,11.6016 C128.104,11.2214 127.906,10.7188 127.906,10.0938 C127.906,9.35417 128.154,8.79688 128.648,8.42188 C129.143,8.04688 129.88,7.85938 130.859,7.85938 L132.375,7.85938 L132.375,7.75 C132.375,7.25 132.211,6.86458 131.883,6.59375 C131.555,6.32292 131.099,6.1875 130.516,6.1875 C130.141,6.1875 129.773,6.23438 129.414,6.32812 C129.055,6.42188 128.714,6.55729 128.391,6.73438 L128.391,5.73438 C128.786,5.57812 129.169,5.46354 129.539,5.39062 C129.909,5.31771 130.271,5.28125 130.625,5.28125 C131.573,5.28125 132.281,5.52604 132.75,6.01562 C133.219,6.50521 133.453,7.25 133.453,8.25 M139.469,6.4375 C139.344,6.375 139.211,6.32552 139.07,6.28906 C138.93,6.2526 138.771,6.23438 138.594,6.23438 C137.99,6.23438 137.523,6.43229 137.195,6.82812 C136.867,7.22396 136.703,7.79688 136.703,8.54688 L136.703,12 L135.625,12 L135.625,5.4375 L136.703,5.4375 L136.703,6.45312 C136.932,6.05729 137.229,5.76302 137.594,5.57031 C137.958,5.3776 138.401,5.28125 138.922,5.28125 C138.995,5.28125 139.076,5.28646 139.164,5.29688 C139.253,5.30729 139.349,5.32292 139.453,5.34375 L139.469,6.4375 M141.656,3.57812 L141.656,5.4375 L143.875,5.4375 L143.875,6.28125 L141.656,6.28125 L141.656,9.84375 C141.656,10.375 141.729,10.7161 141.875,10.8672 C142.021,11.0182 142.318,11.0938 142.766,11.0938 L143.875,11.0938 L143.875,12 L142.766,12 C141.932,12 141.357,11.8438 141.039,11.5312 C140.721,11.2188 140.562,10.6562 140.562,9.84375 L140.562,6.28125 L139.781,6.28125 L139.781,5.4375 L140.562,5.4375 L140.562,3.57812 L141.656,3.57812 M150.281,14 L150.281,14.8281 L144.047,14.8281 L144.047,14 L150.281,14 M156.75,8.03125 L156.75,12 L155.672,12 L155.672,8.07812 C155.672,7.45312 155.549,6.98698 155.305,6.67969 C155.06,6.3724 154.698,6.21875 154.219,6.21875 C153.635,6.21875 153.174,6.40365 152.836,6.77344 C152.497,7.14323 152.328,7.65104 152.328,8.29688 L152.328,12 L151.25,12 L151.25,5.4375 L152.328,5.4375 L152.328,6.45312 C152.589,6.05729 152.893,5.76302 153.242,5.57031 C153.591,5.3776 153.995,5.28125 154.453,5.28125 C155.203,5.28125 155.773,5.51302 156.164,5.97656 C156.555,6.4401 156.75,7.125 156.75,8.03125 M161.859,8.70312 C160.995,8.70312 160.393,8.80208 160.055,9 C159.716,9.19792 159.547,9.53646 159.547,10.0156 C159.547,10.401 159.674,10.7057 159.93,10.9297 C160.185,11.1536 160.526,11.2656 160.953,11.2656 C161.557,11.2656 162.039,11.0547 162.398,10.6328 C162.758,10.2109 162.938,9.64583 162.938,8.9375 L162.938,8.70312 L161.859,8.70312 M164.016,8.25 L164.016,12 L162.938,12 L162.938,11 C162.688,11.3958 162.38,11.6901 162.016,11.8828 C161.651,12.0755 161.203,12.1719 160.672,12.1719 C159.995,12.1719 159.458,11.9818 159.062,11.6016 C158.667,11.2214 158.469,10.7188 158.469,10.0938 C158.469,9.35417 158.716,8.79688 159.211,8.42188 C159.706,8.04688 160.443,7.85938 161.422,7.85938 L162.938,7.85938 L162.938,7.75 C162.938,7.25 162.773,6.86458 162.445,6.59375 C162.117,6.32292 161.661,6.1875 161.078,6.1875 C160.703,6.1875 160.336,6.23438 159.977,6.32812 C159.617,6.42188 159.276,6.55729 158.953,6.73438 L158.953,5.73438 C159.349,5.57812 159.732,5.46354 160.102,5.39062 C160.471,5.31771 160.833,5.28125 161.188,5.28125 C162.135,5.28125 162.844,5.52604 163.312,6.01562 C163.781,6.50521 164.016,7.25 164.016,8.25 M165.453,5.4375 L166.594,5.4375 L168.641,10.9375 L170.703,5.4375 L171.844,5.4375 L169.375,12 L167.906,12 L165.453,5.4375 M173.312,5.4375 L174.391,5.4375 L174.391,12 L173.312,12 L173.312,5.4375 M173.312,2.875 L174.391,2.875 L174.391,4.25 L173.312,4.25 L173.312,2.875 M180.969,8.64062 C180.969,7.85938 180.807,7.25521 180.484,6.82812 C180.161,6.40104 179.708,6.1875 179.125,6.1875 C178.552,6.1875 178.104,6.40104 177.781,6.82812 C177.458,7.25521 177.297,7.85938 177.297,8.64062 C177.297,9.42188 177.458,10.026 177.781,10.4531 C178.104,10.8802 178.552,11.0938 179.125,11.0938 C179.708,11.0938 180.161,10.8802 180.484,10.4531 C180.807,10.026 180.969,9.42188 180.969,8.64062 M182.047,11.1875 C182.047,12.3021 181.799,13.1328 181.305,13.6797 C180.81,14.2266 180.047,14.5 179.016,14.5 C178.641,14.5 178.284,14.4714 177.945,14.4141 C177.607,14.3568 177.281,14.2708 176.969,14.1562 L176.969,13.1094 C177.281,13.276 177.594,13.401 177.906,13.4844 C178.219,13.5677 178.531,13.6094 178.844,13.6094 C179.552,13.6094 180.083,13.4245 180.438,13.0547 C180.792,12.6849 180.969,12.125 180.969,11.375 L180.969,10.8438 C180.74,11.2292 180.453,11.5182 180.109,11.7109 C179.766,11.9036 179.349,12 178.859,12 C178.057,12 177.409,11.6927 176.914,11.0781 C176.419,10.4635 176.172,9.65104 176.172,8.64062 C176.172,7.63021 176.419,6.81771 176.914,6.20312 C177.409,5.58854 178.057,5.28125 178.859,5.28125 C179.349,5.28125 179.766,5.3776 180.109,5.57031 C180.453,5.76302 180.74,6.05208 180.969,6.4375 L180.969,5.4375 L182.047,5.4375 L182.047,11.1875 M187.234,8.70312 C186.37,8.70312 185.768,8.80208 185.43,9 C185.091,9.19792 184.922,9.53646 184.922,10.0156 C184.922,10.401 185.049,10.7057 185.305,10.9297 C185.56,11.1536 185.901,11.2656 186.328,11.2656 C186.932,11.2656 187.414,11.0547 187.773,10.6328 C188.133,10.2109 188.312,9.64583 188.312,8.9375 L188.312,8.70312 L187.234,8.70312 M189.391,8.25 L189.391,12 L188.312,12 L188.312,11 C188.062,11.3958 187.755,11.6901 187.391,11.8828 C187.026,12.0755 186.578,12.1719 186.047,12.1719 C185.37,12.1719 184.833,11.9818 184.438,11.6016 C184.042,11.2214 183.844,10.7188 183.844,10.0938 C183.844,9.35417 184.091,8.79688 184.586,8.42188 C185.081,8.04688 185.818,7.85938 186.797,7.85938 L188.312,7.85938 L188.312,7.75 C188.312,7.25 188.148,6.86458 187.82,6.59375 C187.492,6.32292 187.036,6.1875 186.453,6.1875 C186.078,6.1875 185.711,6.23438 185.352,6.32812 C184.992,6.42188 184.651,6.55729 184.328,6.73438 L184.328,5.73438 C184.724,5.57812 185.107,5.46354 185.477,5.39062 C185.846,5.31771 186.208,5.28125 186.562,5.28125 C187.51,5.28125 188.219,5.52604 188.688,6.01562 C189.156,6.50521 189.391,7.25 189.391,8.25 M192.672,3.57812 L192.672,5.4375 L194.891,5.4375 L194.891,6.28125 L192.672,6.28125 L192.672,9.84375 C192.672,10.375 192.745,10.7161 192.891,10.8672 C193.036,11.0182 193.333,11.0938 193.781,11.0938 L194.891,11.0938 L194.891,12 L193.781,12 C192.948,12 192.372,11.8438 192.055,11.5312 C191.737,11.2188 191.578,10.6562 191.578,9.84375 L191.578,6.28125 L190.797,6.28125 L190.797,5.4375 L191.578,5.4375 L191.578,3.57812 L192.672,3.57812 M196.297,5.4375 L197.375,5.4375 L197.375,12 L196.297,12 L196.297,5.4375 M196.297,2.875 L197.375,2.875 L197.375,4.25 L196.297,4.25 L196.297,2.875 M202.172,6.1875 C201.599,6.1875 201.143,6.41406 200.805,6.86719 C200.466,7.32031 200.297,7.9375 200.297,8.71875 C200.297,9.51042 200.464,10.1302 200.797,10.5781 C201.13,11.026 201.589,11.25 202.172,11.25 C202.745,11.25 203.201,11.0234 203.539,10.5703 C203.878,10.1172 204.047,9.5 204.047,8.71875 C204.047,7.94792 203.878,7.33333 203.539,6.875 C203.201,6.41667 202.745,6.1875 202.172,6.1875 M202.172,5.28125 C203.109,5.28125 203.846,5.58594 204.383,6.19531 C204.919,6.80469 205.188,7.64583 205.188,8.71875 C205.188,9.79167 204.919,10.6354 204.383,11.25 C203.846,11.8646 203.109,12.1719 202.172,12.1719 C201.234,12.1719 200.497,11.8646 199.961,11.25 C199.424,10.6354 199.156,9.79167 199.156,8.71875 C199.156,7.64583 199.424,6.80469 199.961,6.19531 C200.497,5.58594 201.234,5.28125 202.172,5.28125 M212.422,8.03125 L212.422,12 L211.344,12 L211.344,8.07812 C211.344,7.45312 211.221,6.98698 210.977,6.67969 C210.732,6.3724 210.37,6.21875 209.891,6.21875 C209.307,6.21875 208.846,6.40365 208.508,6.77344 C208.169,7.14323 208,7.65104 208,8.29688 L208,12 L206.922,12 L206.922,5.4375 L208,5.4375 L208,6.45312 C208.26,6.05729 208.565,5.76302 208.914,5.57031 C209.263,5.3776 209.667,5.28125 210.125,5.28125 C210.875,5.28125 211.445,5.51302 211.836,5.97656 C212.227,6.4401 212.422,7.125 212.422,8.03125 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1128.52,2003.83)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1128.52,2003.83)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M572.5,-624.94 L769.5,-624.94 L769.5,-589.94 L572.5,-589.94 L572.5,-624.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1183.4,1263.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1183.4,1263.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1183.4,1263.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M100.031,6.4375 L100.031,2.875 L101.109,2.875 L101.109,12 L100.031,12 L100.031,11.0156 C99.8021,11.401 99.5156,11.6901 99.1719,11.8828 C98.8281,12.0755 98.4115,12.1719 97.9219,12.1719 C97.1302,12.1719 96.4844,11.8542 95.9844,11.2188 C95.4844,10.5833 95.2344,9.75 95.2344,8.71875 C95.2344,7.6875 95.4844,6.85677 95.9844,6.22656 C96.4844,5.59635 97.1302,5.28125 97.9219,5.28125 C98.4115,5.28125 98.8281,5.375 99.1719,5.5625 C99.5156,5.75 99.8021,6.04167 100.031,6.4375 M96.3594,8.71875 C96.3594,9.51042 96.5208,10.1328 96.8438,10.5859 C97.1667,11.0391 97.6146,11.2656 98.1875,11.2656 C98.7604,11.2656 99.2109,11.0391 99.5391,10.5859 C99.8672,10.1328 100.031,9.51042 100.031,8.71875 C100.031,7.92708 99.8672,7.30729 99.5391,6.85938 C99.2109,6.41146 98.7604,6.1875 98.1875,6.1875 C97.6146,6.1875 97.1667,6.41146 96.8438,6.85938 C96.5208,7.30729 96.3594,7.92708 96.3594,8.71875 M108.938,8.45312 L108.938,8.96875 L103.969,8.96875 C104.021,9.71875 104.247,10.2865 104.648,10.6719 C105.049,11.0573 105.604,11.25 106.312,11.25 C106.729,11.25 107.133,11.2005 107.523,11.1016 C107.914,11.0026 108.302,10.849 108.688,10.6406 L108.688,11.6719 C108.292,11.8281 107.891,11.9505 107.484,12.0391 C107.078,12.1276 106.667,12.1719 106.25,12.1719 C105.208,12.1719 104.38,11.8672 103.766,11.2578 C103.151,10.6484 102.844,9.82292 102.844,8.78125 C102.844,7.70833 103.135,6.85677 103.719,6.22656 C104.302,5.59635 105.083,5.28125 106.062,5.28125 C106.948,5.28125 107.648,5.5651 108.164,6.13281 C108.68,6.70052 108.938,7.47396 108.938,8.45312 M107.859,8.125 C107.849,7.54167 107.682,7.07292 107.359,6.71875 C107.036,6.36458 106.609,6.1875 106.078,6.1875 C105.474,6.1875 104.992,6.35938 104.633,6.70312 C104.273,7.04688 104.068,7.52604 104.016,8.14062 L107.859,8.125 M110.688,2.875 L111.766,2.875 L111.766,12 L110.688,12 L110.688,2.875 M119.641,8.45312 L119.641,8.96875 L114.672,8.96875 C114.724,9.71875 114.951,10.2865 115.352,10.6719 C115.753,11.0573 116.307,11.25 117.016,11.25 C117.432,11.25 117.836,11.2005 118.227,11.1016 C118.617,11.0026 119.005,10.849 119.391,10.6406 L119.391,11.6719 C118.995,11.8281 118.594,11.9505 118.188,12.0391 C117.781,12.1276 117.37,12.1719 116.953,12.1719 C115.911,12.1719 115.083,11.8672 114.469,11.2578 C113.854,10.6484 113.547,9.82292 113.547,8.78125 C113.547,7.70833 113.839,6.85677 114.422,6.22656 C115.005,5.59635 115.786,5.28125 116.766,5.28125 C117.651,5.28125 118.352,5.5651 118.867,6.13281 C119.383,6.70052 119.641,7.47396 119.641,8.45312 M118.562,8.125 C118.552,7.54167 118.385,7.07292 118.062,6.71875 C117.74,6.36458 117.312,6.1875 116.781,6.1875 C116.177,6.1875 115.695,6.35938 115.336,6.70312 C114.977,7.04688 114.771,7.52604 114.719,8.14062 L118.562,8.125 M122.469,3.57812 L122.469,5.4375 L124.688,5.4375 L124.688,6.28125 L122.469,6.28125 L122.469,9.84375 C122.469,10.375 122.542,10.7161 122.688,10.8672 C122.833,11.0182 123.13,11.0938 123.578,11.0938 L124.688,11.0938 L124.688,12 L123.578,12 C122.745,12 122.169,11.8438 121.852,11.5312 C121.534,11.2188 121.375,10.6562 121.375,9.84375 L121.375,6.28125 L120.594,6.28125 L120.594,5.4375 L121.375,5.4375 L121.375,3.57812 L122.469,3.57812 M131.719,8.45312 L131.719,8.96875 L126.75,8.96875 C126.802,9.71875 127.029,10.2865 127.43,10.6719 C127.831,11.0573 128.385,11.25 129.094,11.25 C129.51,11.25 129.914,11.2005 130.305,11.1016 C130.695,11.0026 131.083,10.849 131.469,10.6406 L131.469,11.6719 C131.073,11.8281 130.672,11.9505 130.266,12.0391 C129.859,12.1276 129.448,12.1719 129.031,12.1719 C127.99,12.1719 127.161,11.8672 126.547,11.2578 C125.932,10.6484 125.625,9.82292 125.625,8.78125 C125.625,7.70833 125.917,6.85677 126.5,6.22656 C127.083,5.59635 127.865,5.28125 128.844,5.28125 C129.729,5.28125 130.43,5.5651 130.945,6.13281 C131.461,6.70052 131.719,7.47396 131.719,8.45312 M130.641,8.125 C130.63,7.54167 130.464,7.07292 130.141,6.71875 C129.818,6.36458 129.391,6.1875 128.859,6.1875 C128.255,6.1875 127.773,6.35938 127.414,6.70312 C127.055,7.04688 126.849,7.52604 126.797,8.14062 L130.641,8.125 M138.469,14 L138.469,14.8281 L132.234,14.8281 L132.234,14 L138.469,14 M140.703,4.21875 L140.703,7.51562 L142.188,7.51562 C142.74,7.51562 143.167,7.3724 143.469,7.08594 C143.771,6.79948 143.922,6.39062 143.922,5.85938 C143.922,5.33854 143.771,4.9349 143.469,4.64844 C143.167,4.36198 142.74,4.21875 142.188,4.21875 L140.703,4.21875 M139.516,3.25 L142.188,3.25 C143.177,3.25 143.922,3.47135 144.422,3.91406 C144.922,4.35677 145.172,5.00521 145.172,5.85938 C145.172,6.72396 144.922,7.3776 144.422,7.82031 C143.922,8.26302 143.177,8.48438 142.188,8.48438 L140.703,8.48438 L140.703,12 L139.516,12 L139.516,3.25 M150.312,4.04688 C149.448,4.04688 148.763,4.36719 148.258,5.00781 C147.753,5.64844 147.5,6.52604 147.5,7.64062 C147.5,8.73438 147.753,9.60156 148.258,10.2422 C148.763,10.8828 149.448,11.2031 150.312,11.2031 C151.167,11.2031 151.846,10.8828 152.352,10.2422 C152.857,9.60156 153.109,8.73438 153.109,7.64062 C153.109,6.52604 152.857,5.64844 152.352,5.00781 C151.846,4.36719 151.167,4.04688 150.312,4.04688 M150.312,3.09375 C151.531,3.09375 152.508,3.50521 153.242,4.32812 C153.977,5.15104 154.344,6.25521 154.344,7.64062 C154.344,9.01562 153.977,10.1146 153.242,10.9375 C152.508,11.7604 151.531,12.1719 150.312,12.1719 C149.083,12.1719 148.099,11.7604 147.359,10.9375 C146.62,10.1146 146.25,9.01562 146.25,7.64062 C146.25,6.25521 146.62,5.15104 147.359,4.32812 C148.099,3.50521 149.083,3.09375 150.312,3.09375 M156.188,3.25 L157.375,3.25 L157.375,12 L156.188,12 L156.188,3.25"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1183.4,1263.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1183.4,1263.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M562.499,-980.94 L779.501,-980.94 L779.501,-945.94 L562.499,-945.94 L562.499,-980.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1162.47,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1162.47,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1162.47,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.625,8.03125 L10.625,12 L9.54688,12 L9.54688,8.07812 C9.54688,7.45312 9.42448,6.98698 9.17969,6.67969 C8.9349,6.3724 8.57292,6.21875 8.09375,6.21875 C7.51042,6.21875 7.04948,6.40365 6.71094,6.77344 C6.3724,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,2.875 L6.20312,2.875 L6.20312,6.45312 C6.46354,6.05729 6.76823,5.76302 7.11719,5.57031 C7.46615,5.3776 7.86979,5.28125 8.32812,5.28125 C9.07812,5.28125 9.64844,5.51302 10.0391,5.97656 C10.4297,6.4401 10.625,7.125 10.625,8.03125 M15.2969,6.1875 C14.724,6.1875 14.2682,6.41406 13.9297,6.86719 C13.5911,7.32031 13.4219,7.9375 13.4219,8.71875 C13.4219,9.51042 13.5885,10.1302 13.9219,10.5781 C14.2552,11.026 14.7135,11.25 15.2969,11.25 C15.8698,11.25 16.3255,11.0234 16.6641,10.5703 C17.0026,10.1172 17.1719,9.5 17.1719,8.71875 C17.1719,7.94792 17.0026,7.33333 16.6641,6.875 C16.3255,6.41667 15.8698,6.1875 15.2969,6.1875 M15.2969,5.28125 C16.2344,5.28125 16.9714,5.58594 17.5078,6.19531 C18.0443,6.80469 18.3125,7.64583 18.3125,8.71875 C18.3125,9.79167 18.0443,10.6354 17.5078,11.25 C16.9714,11.8646 16.2344,12.1719 15.2969,12.1719 C14.3594,12.1719 13.6224,11.8646 13.0859,11.25 C12.5495,10.6354 12.2812,9.79167 12.2812,8.71875 C12.2812,7.64583 12.5495,6.80469 13.0859,6.19531 C13.6224,5.58594 14.3594,5.28125 15.2969,5.28125 M25.1875,6.70312 C25.4583,6.21354 25.7812,5.85417 26.1562,5.625 C26.5312,5.39583 26.974,5.28125 27.4844,5.28125 C28.1719,5.28125 28.7005,5.52083 29.0703,6 C29.4401,6.47917 29.625,7.15625 29.625,8.03125 L29.625,12 L28.5469,12 L28.5469,8.07812 C28.5469,7.44271 28.4349,6.97396 28.2109,6.67188 C27.987,6.36979 27.6458,6.21875 27.1875,6.21875 C26.625,6.21875 26.1823,6.40365 25.8594,6.77344 C25.5365,7.14323 25.375,7.65104 25.375,8.29688 L25.375,12 L24.2969,12 L24.2969,8.07812 C24.2969,7.44271 24.1849,6.97396 23.9609,6.67188 C23.737,6.36979 23.3906,6.21875 22.9219,6.21875 C22.3698,6.21875 21.9323,6.40365 21.6094,6.77344 C21.2865,7.14323 21.125,7.65104 21.125,8.29688 L21.125,12 L20.0469,12 L20.0469,5.4375 L21.125,5.4375 L21.125,6.45312 C21.375,6.05729 21.6719,5.76302 22.0156,5.57031 C22.3594,5.3776 22.7656,5.28125 23.2344,5.28125 C23.7135,5.28125 24.1198,5.40104 24.4531,5.64062 C24.7865,5.88021 25.0312,6.23438 25.1875,6.70312 M37.3906,8.45312 L37.3906,8.96875 L32.4219,8.96875 C32.474,9.71875 32.7005,10.2865 33.1016,10.6719 C33.5026,11.0573 34.0573,11.25 34.7656,11.25 C35.1823,11.25 35.5859,11.2005 35.9766,11.1016 C36.3672,11.0026 36.7552,10.849 37.1406,10.6406 L37.1406,11.6719 C36.7448,11.8281 36.3438,11.9505 35.9375,12.0391 C35.5312,12.1276 35.1198,12.1719 34.7031,12.1719 C33.6615,12.1719 32.8333,11.8672 32.2188,11.2578 C31.6042,10.6484 31.2969,9.82292 31.2969,8.78125 C31.2969,7.70833 31.5885,6.85677 32.1719,6.22656 C32.7552,5.59635 33.5365,5.28125 34.5156,5.28125 C35.401,5.28125 36.1016,5.5651 36.6172,6.13281 C37.1328,6.70052 37.3906,7.47396 37.3906,8.45312 M36.3125,8.125 C36.3021,7.54167 36.1354,7.07292 35.8125,6.71875 C35.4896,6.36458 35.0625,6.1875 34.5312,6.1875 C33.9271,6.1875 33.4453,6.35938 33.0859,6.70312 C32.7266,7.04688 32.5208,7.52604 32.4688,8.14062 L36.3125,8.125 M42.9531,6.4375 C42.8281,6.375 42.6953,6.32552 42.5547,6.28906 C42.4141,6.2526 42.2552,6.23438 42.0781,6.23438 C41.474,6.23438 41.0078,6.43229 40.6797,6.82812 C40.3516,7.22396 40.1875,7.79688 40.1875,8.54688 L40.1875,12 L39.1094,12 L39.1094,5.4375 L40.1875,5.4375 L40.1875,6.45312 C40.4167,6.05729 40.7135,5.76302 41.0781,5.57031 C41.4427,5.3776 41.8854,5.28125 42.4062,5.28125 C42.4792,5.28125 42.5599,5.28646 42.6484,5.29688 C42.737,5.30729 42.8333,5.32292 42.9375,5.34375 L42.9531,6.4375 M49.0625,14 L49.0625,14.8281 L42.8281,14.8281 L42.8281,14 L49.0625,14 M55.1719,6.70312 C55.4427,6.21354 55.7656,5.85417 56.1406,5.625 C56.5156,5.39583 56.9583,5.28125 57.4688,5.28125 C58.1562,5.28125 58.6849,5.52083 59.0547,6 C59.4245,6.47917 59.6094,7.15625 59.6094,8.03125 L59.6094,12 L58.5312,12 L58.5312,8.07812 C58.5312,7.44271 58.4193,6.97396 58.1953,6.67188 C57.9714,6.36979 57.6302,6.21875 57.1719,6.21875 C56.6094,6.21875 56.1667,6.40365 55.8438,6.77344 C55.5208,7.14323 55.3594,7.65104 55.3594,8.29688 L55.3594,12 L54.2812,12 L54.2812,8.07812 C54.2812,7.44271 54.1693,6.97396 53.9453,6.67188 C53.7214,6.36979 53.375,6.21875 52.9062,6.21875 C52.3542,6.21875 51.9167,6.40365 51.5938,6.77344 C51.2708,7.14323 51.1094,7.65104 51.1094,8.29688 L51.1094,12 L50.0312,12 L50.0312,5.4375 L51.1094,5.4375 L51.1094,6.45312 C51.3594,6.05729 51.6562,5.76302 52,5.57031 C52.3438,5.3776 52.75,5.28125 53.2188,5.28125 C53.6979,5.28125 54.1042,5.40104 54.4375,5.64062 C54.7708,5.88021 55.0156,6.23438 55.1719,6.70312 M64.7344,8.70312 C63.8698,8.70312 63.2682,8.80208 62.9297,9 C62.5911,9.19792 62.4219,9.53646 62.4219,10.0156 C62.4219,10.401 62.5495,10.7057 62.8047,10.9297 C63.0599,11.1536 63.401,11.2656 63.8281,11.2656 C64.4323,11.2656 64.9141,11.0547 65.2734,10.6328 C65.6328,10.2109 65.8125,9.64583 65.8125,8.9375 L65.8125,8.70312 L64.7344,8.70312 M66.8906,8.25 L66.8906,12 L65.8125,12 L65.8125,11 C65.5625,11.3958 65.2552,11.6901 64.8906,11.8828 C64.526,12.0755 64.0781,12.1719 63.5469,12.1719 C62.8698,12.1719 62.3333,11.9818 61.9375,11.6016 C61.5417,11.2214 61.3438,10.7188 61.3438,10.0938 C61.3438,9.35417 61.5911,8.79688 62.0859,8.42188 C62.5807,8.04688 63.3177,7.85938 64.2969,7.85938 L65.8125,7.85938 L65.8125,7.75 C65.8125,7.25 65.6484,6.86458 65.3203,6.59375 C64.9922,6.32292 64.5365,6.1875 63.9531,6.1875 C63.5781,6.1875 63.2109,6.23438 62.8516,6.32812 C62.4922,6.42188 62.151,6.55729 61.8281,6.73438 L61.8281,5.73438 C62.224,5.57812 62.6068,5.46354 62.9766,5.39062 C63.3464,5.31771 63.7083,5.28125 64.0625,5.28125 C65.0104,5.28125 65.7188,5.52604 66.1875,6.01562 C66.6562,6.50521 66.8906,7.25 66.8906,8.25 M70.1406,11.0156 L70.1406,14.5 L69.0625,14.5 L69.0625,5.4375 L70.1406,5.4375 L70.1406,6.4375 C70.3698,6.04167 70.6562,5.75 71,5.5625 C71.3438,5.375 71.7552,5.28125 72.2344,5.28125 C73.0365,5.28125 73.6875,5.59635 74.1875,6.22656 C74.6875,6.85677 74.9375,7.6875 74.9375,8.71875 C74.9375,9.75 74.6875,10.5833 74.1875,11.2188 C73.6875,11.8542 73.0365,12.1719 72.2344,12.1719 C71.7552,12.1719 71.3438,12.0755 71,11.8828 C70.6562,11.6901 70.3698,11.401 70.1406,11.0156 M73.8125,8.71875 C73.8125,7.92708 73.6484,7.30729 73.3203,6.85938 C72.9922,6.41146 72.5469,6.1875 71.9844,6.1875 C71.4115,6.1875 70.9609,6.41146 70.6328,6.85938 C70.3047,7.30729 70.1406,7.92708 70.1406,8.71875 C70.1406,9.51042 70.3047,10.1328 70.6328,10.5859 C70.9609,11.0391 71.4115,11.2656 71.9844,11.2656 C72.5469,11.2656 72.9922,11.0391 73.3203,10.5859 C73.6484,10.1328 73.8125,9.51042 73.8125,8.71875 M77.75,11.0156 L77.75,14.5 L76.6719,14.5 L76.6719,5.4375 L77.75,5.4375 L77.75,6.4375 C77.9792,6.04167 78.2656,5.75 78.6094,5.5625 C78.9531,5.375 79.3646,5.28125 79.8438,5.28125 C80.6458,5.28125 81.2969,5.59635 81.7969,6.22656 C82.2969,6.85677 82.5469,7.6875 82.5469,8.71875 C82.5469,9.75 82.2969,10.5833 81.7969,11.2188 C81.2969,11.8542 80.6458,12.1719 79.8438,12.1719 C79.3646,12.1719 78.9531,12.0755 78.6094,11.8828 C78.2656,11.6901 77.9792,11.401 77.75,11.0156 M81.4219,8.71875 C81.4219,7.92708 81.2578,7.30729 80.9297,6.85938 C80.6016,6.41146 80.1562,6.1875 79.5938,6.1875 C79.0208,6.1875 78.5703,6.41146 78.2422,6.85938 C77.9141,7.30729 77.75,7.92708 77.75,8.71875 C77.75,9.51042 77.9141,10.1328 78.2422,10.5859 C78.5703,11.0391 79.0208,11.2656 79.5938,11.2656 C80.1562,11.2656 80.6016,11.0391 80.9297,10.5859 C81.2578,10.1328 81.4219,9.51042 81.4219,8.71875 M84.3125,5.4375 L85.3906,5.4375 L85.3906,12 L84.3125,12 L84.3125,5.4375 M84.3125,2.875 L85.3906,2.875 L85.3906,4.25 L84.3125,4.25 L84.3125,2.875 M93.1094,8.03125 L93.1094,12 L92.0312,12 L92.0312,8.07812 C92.0312,7.45312 91.9089,6.98698 91.6641,6.67969 C91.4193,6.3724 91.0573,6.21875 90.5781,6.21875 C89.9948,6.21875 89.5339,6.40365 89.1953,6.77344 C88.8568,7.14323 88.6875,7.65104 88.6875,8.29688 L88.6875,12 L87.6094,12 L87.6094,5.4375 L88.6875,5.4375 L88.6875,6.45312 C88.9479,6.05729 89.2526,5.76302 89.6016,5.57031 C89.9505,5.3776 90.3542,5.28125 90.8125,5.28125 C91.5625,5.28125 92.1328,5.51302 92.5234,5.97656 C92.9141,6.4401 93.1094,7.125 93.1094,8.03125 M99.5625,8.64062 C99.5625,7.85938 99.401,7.25521 99.0781,6.82812 C98.7552,6.40104 98.3021,6.1875 97.7188,6.1875 C97.1458,6.1875 96.6979,6.40104 96.375,6.82812 C96.0521,7.25521 95.8906,7.85938 95.8906,8.64062 C95.8906,9.42188 96.0521,10.026 96.375,10.4531 C96.6979,10.8802 97.1458,11.0938 97.7188,11.0938 C98.3021,11.0938 98.7552,10.8802 99.0781,10.4531 C99.401,10.026 99.5625,9.42188 99.5625,8.64062 M100.641,11.1875 C100.641,12.3021 100.393,13.1328 99.8984,13.6797 C99.4036,14.2266 98.6406,14.5 97.6094,14.5 C97.2344,14.5 96.8776,14.4714 96.5391,14.4141 C96.2005,14.3568 95.875,14.2708 95.5625,14.1562 L95.5625,13.1094 C95.875,13.276 96.1875,13.401 96.5,13.4844 C96.8125,13.5677 97.125,13.6094 97.4375,13.6094 C98.1458,13.6094 98.6771,13.4245 99.0312,13.0547 C99.3854,12.6849 99.5625,12.125 99.5625,11.375 L99.5625,10.8438 C99.3333,11.2292 99.0469,11.5182 98.7031,11.7109 C98.3594,11.9036 97.9427,12 97.4531,12 C96.651,12 96.0026,11.6927 95.5078,11.0781 C95.013,10.4635 94.7656,9.65104 94.7656,8.64062 C94.7656,7.63021 95.013,6.81771 95.5078,6.20312 C96.0026,5.58854 96.651,5.28125 97.4531,5.28125 C97.9427,5.28125 98.3594,5.3776 98.7031,5.57031 C99.0469,5.76302 99.3333,6.05208 99.5625,6.4375 L99.5625,5.4375 L100.641,5.4375 L100.641,11.1875 M104.766,3.25 L105.766,3.25 L102.719,13.1094 L101.719,13.1094 L104.766,3.25 M111.203,6.4375 L111.203,2.875 L112.281,2.875 L112.281,12 L111.203,12 L111.203,11.0156 C110.974,11.401 110.688,11.6901 110.344,11.8828 C110,12.0755 109.583,12.1719 109.094,12.1719 C108.302,12.1719 107.656,11.8542 107.156,11.2188 C106.656,10.5833 106.406,9.75 106.406,8.71875 C106.406,7.6875 106.656,6.85677 107.156,6.22656 C107.656,5.59635 108.302,5.28125 109.094,5.28125 C109.583,5.28125 110,5.375 110.344,5.5625 C110.688,5.75 110.974,6.04167 111.203,6.4375 M107.531,8.71875 C107.531,9.51042 107.693,10.1328 108.016,10.5859 C108.339,11.0391 108.786,11.2656 109.359,11.2656 C109.932,11.2656 110.383,11.0391 110.711,10.5859 C111.039,10.1328 111.203,9.51042 111.203,8.71875 C111.203,7.92708 111.039,7.30729 110.711,6.85938 C110.383,6.41146 109.932,6.1875 109.359,6.1875 C108.786,6.1875 108.339,6.41146 108.016,6.85938 C107.693,7.30729 107.531,7.92708 107.531,8.71875 M117.031,6.1875 C116.458,6.1875 116.003,6.41406 115.664,6.86719 C115.326,7.32031 115.156,7.9375 115.156,8.71875 C115.156,9.51042 115.323,10.1302 115.656,10.5781 C115.99,11.026 116.448,11.25 117.031,11.25 C117.604,11.25 118.06,11.0234 118.398,10.5703 C118.737,10.1172 118.906,9.5 118.906,8.71875 C118.906,7.94792 118.737,7.33333 118.398,6.875 C118.06,6.41667 117.604,6.1875 117.031,6.1875 M117.031,5.28125 C117.969,5.28125 118.706,5.58594 119.242,6.19531 C119.779,6.80469 120.047,7.64583 120.047,8.71875 C120.047,9.79167 119.779,10.6354 119.242,11.25 C118.706,11.8646 117.969,12.1719 117.031,12.1719 C116.094,12.1719 115.357,11.8646 114.82,11.25 C114.284,10.6354 114.016,9.79167 114.016,8.71875 C114.016,7.64583 114.284,6.80469 114.82,6.19531 C115.357,5.58594 116.094,5.28125 117.031,5.28125 M126.812,14 L126.812,14.8281 L120.578,14.8281 L120.578,14 L126.812,14 M132.922,6.70312 C133.193,6.21354 133.516,5.85417 133.891,5.625 C134.266,5.39583 134.708,5.28125 135.219,5.28125 C135.906,5.28125 136.435,5.52083 136.805,6 C137.174,6.47917 137.359,7.15625 137.359,8.03125 L137.359,12 L136.281,12 L136.281,8.07812 C136.281,7.44271 136.169,6.97396 135.945,6.67188 C135.721,6.36979 135.38,6.21875 134.922,6.21875 C134.359,6.21875 133.917,6.40365 133.594,6.77344 C133.271,7.14323 133.109,7.65104 133.109,8.29688 L133.109,12 L132.031,12 L132.031,8.07812 C132.031,7.44271 131.919,6.97396 131.695,6.67188 C131.471,6.36979 131.125,6.21875 130.656,6.21875 C130.104,6.21875 129.667,6.40365 129.344,6.77344 C129.021,7.14323 128.859,7.65104 128.859,8.29688 L128.859,12 L127.781,12 L127.781,5.4375 L128.859,5.4375 L128.859,6.45312 C129.109,6.05729 129.406,5.76302 129.75,5.57031 C130.094,5.3776 130.5,5.28125 130.969,5.28125 C131.448,5.28125 131.854,5.40104 132.188,5.64062 C132.521,5.88021 132.766,6.23438 132.922,6.70312 M142.484,8.70312 C141.62,8.70312 141.018,8.80208 140.68,9 C140.341,9.19792 140.172,9.53646 140.172,10.0156 C140.172,10.401 140.299,10.7057 140.555,10.9297 C140.81,11.1536 141.151,11.2656 141.578,11.2656 C142.182,11.2656 142.664,11.0547 143.023,10.6328 C143.383,10.2109 143.562,9.64583 143.562,8.9375 L143.562,8.70312 L142.484,8.70312 M144.641,8.25 L144.641,12 L143.562,12 L143.562,11 C143.312,11.3958 143.005,11.6901 142.641,11.8828 C142.276,12.0755 141.828,12.1719 141.297,12.1719 C140.62,12.1719 140.083,11.9818 139.688,11.6016 C139.292,11.2214 139.094,10.7188 139.094,10.0938 C139.094,9.35417 139.341,8.79688 139.836,8.42188 C140.331,8.04688 141.068,7.85938 142.047,7.85938 L143.562,7.85938 L143.562,7.75 C143.562,7.25 143.398,6.86458 143.07,6.59375 C142.742,6.32292 142.286,6.1875 141.703,6.1875 C141.328,6.1875 140.961,6.23438 140.602,6.32812 C140.242,6.42188 139.901,6.55729 139.578,6.73438 L139.578,5.73438 C139.974,5.57812 140.357,5.46354 140.727,5.39062 C141.096,5.31771 141.458,5.28125 141.812,5.28125 C142.76,5.28125 143.469,5.52604 143.938,6.01562 C144.406,6.50521 144.641,7.25 144.641,8.25 M147.891,11.0156 L147.891,14.5 L146.812,14.5 L146.812,5.4375 L147.891,5.4375 L147.891,6.4375 C148.12,6.04167 148.406,5.75 148.75,5.5625 C149.094,5.375 149.505,5.28125 149.984,5.28125 C150.786,5.28125 151.438,5.59635 151.938,6.22656 C152.438,6.85677 152.688,7.6875 152.688,8.71875 C152.688,9.75 152.438,10.5833 151.938,11.2188 C151.438,11.8542 150.786,12.1719 149.984,12.1719 C149.505,12.1719 149.094,12.0755 148.75,11.8828 C148.406,11.6901 148.12,11.401 147.891,11.0156 M151.562,8.71875 C151.562,7.92708 151.398,7.30729 151.07,6.85938 C150.742,6.41146 150.297,6.1875 149.734,6.1875 C149.161,6.1875 148.711,6.41146 148.383,6.85938 C148.055,7.30729 147.891,7.92708 147.891,8.71875 C147.891,9.51042 148.055,10.1328 148.383,10.5859 C148.711,11.0391 149.161,11.2656 149.734,11.2656 C150.297,11.2656 150.742,11.0391 151.07,10.5859 C151.398,10.1328 151.562,9.51042 151.562,8.71875 M155.5,11.0156 L155.5,14.5 L154.422,14.5 L154.422,5.4375 L155.5,5.4375 L155.5,6.4375 C155.729,6.04167 156.016,5.75 156.359,5.5625 C156.703,5.375 157.115,5.28125 157.594,5.28125 C158.396,5.28125 159.047,5.59635 159.547,6.22656 C160.047,6.85677 160.297,7.6875 160.297,8.71875 C160.297,9.75 160.047,10.5833 159.547,11.2188 C159.047,11.8542 158.396,12.1719 157.594,12.1719 C157.115,12.1719 156.703,12.0755 156.359,11.8828 C156.016,11.6901 155.729,11.401 155.5,11.0156 M159.172,8.71875 C159.172,7.92708 159.008,7.30729 158.68,6.85938 C158.352,6.41146 157.906,6.1875 157.344,6.1875 C156.771,6.1875 156.32,6.41146 155.992,6.85938 C155.664,7.30729 155.5,7.92708 155.5,8.71875 C155.5,9.51042 155.664,10.1328 155.992,10.5859 C156.32,11.0391 156.771,11.2656 157.344,11.2656 C157.906,11.2656 158.352,11.0391 158.68,10.5859 C159.008,10.1328 159.172,9.51042 159.172,8.71875 M162.062,5.4375 L163.141,5.4375 L163.141,12 L162.062,12 L162.062,5.4375 M162.062,2.875 L163.141,2.875 L163.141,4.25 L162.062,4.25 L162.062,2.875 M170.859,8.03125 L170.859,12 L169.781,12 L169.781,8.07812 C169.781,7.45312 169.659,6.98698 169.414,6.67969 C169.169,6.3724 168.807,6.21875 168.328,6.21875 C167.745,6.21875 167.284,6.40365 166.945,6.77344 C166.607,7.14323 166.438,7.65104 166.438,8.29688 L166.438,12 L165.359,12 L165.359,5.4375 L166.438,5.4375 L166.438,6.45312 C166.698,6.05729 167.003,5.76302 167.352,5.57031 C167.701,5.3776 168.104,5.28125 168.562,5.28125 C169.312,5.28125 169.883,5.51302 170.273,5.97656 C170.664,6.4401 170.859,7.125 170.859,8.03125 M177.312,8.64062 C177.312,7.85938 177.151,7.25521 176.828,6.82812 C176.505,6.40104 176.052,6.1875 175.469,6.1875 C174.896,6.1875 174.448,6.40104 174.125,6.82812 C173.802,7.25521 173.641,7.85938 173.641,8.64062 C173.641,9.42188 173.802,10.026 174.125,10.4531 C174.448,10.8802 174.896,11.0938 175.469,11.0938 C176.052,11.0938 176.505,10.8802 176.828,10.4531 C177.151,10.026 177.312,9.42188 177.312,8.64062 M178.391,11.1875 C178.391,12.3021 178.143,13.1328 177.648,13.6797 C177.154,14.2266 176.391,14.5 175.359,14.5 C174.984,14.5 174.628,14.4714 174.289,14.4141 C173.951,14.3568 173.625,14.2708 173.312,14.1562 L173.312,13.1094 C173.625,13.276 173.938,13.401 174.25,13.4844 C174.562,13.5677 174.875,13.6094 175.188,13.6094 C175.896,13.6094 176.427,13.4245 176.781,13.0547 C177.135,12.6849 177.312,12.125 177.312,11.375 L177.312,10.8438 C177.083,11.2292 176.797,11.5182 176.453,11.7109 C176.109,11.9036 175.693,12 175.203,12 C174.401,12 173.753,11.6927 173.258,11.0781 C172.763,10.4635 172.516,9.65104 172.516,8.64062 C172.516,7.63021 172.763,6.81771 173.258,6.20312 C173.753,5.58854 174.401,5.28125 175.203,5.28125 C175.693,5.28125 176.109,5.3776 176.453,5.57031 C176.797,5.76302 177.083,6.05208 177.312,6.4375 L177.312,5.4375 L178.391,5.4375 L178.391,11.1875"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1162.47,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1162.47,551.897)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M571.499,-732.94 L770.501,-732.94 L770.501,-697.94 L571.499,-697.94 L571.499,-732.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1179.9,1047.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1179.9,1047.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1179.9,1047.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M100.812,6.70312 C101.083,6.21354 101.406,5.85417 101.781,5.625 C102.156,5.39583 102.599,5.28125 103.109,5.28125 C103.797,5.28125 104.326,5.52083 104.695,6 C105.065,6.47917 105.25,7.15625 105.25,8.03125 L105.25,12 L104.172,12 L104.172,8.07812 C104.172,7.44271 104.06,6.97396 103.836,6.67188 C103.612,6.36979 103.271,6.21875 102.812,6.21875 C102.25,6.21875 101.807,6.40365 101.484,6.77344 C101.161,7.14323 101,7.65104 101,8.29688 L101,12 L99.9219,12 L99.9219,8.07812 C99.9219,7.44271 99.8099,6.97396 99.5859,6.67188 C99.362,6.36979 99.0156,6.21875 98.5469,6.21875 C97.9948,6.21875 97.5573,6.40365 97.2344,6.77344 C96.9115,7.14323 96.75,7.65104 96.75,8.29688 L96.75,12 L95.6719,12 L95.6719,5.4375 L96.75,5.4375 L96.75,6.45312 C97,6.05729 97.2969,5.76302 97.6406,5.57031 C97.9844,5.3776 98.3906,5.28125 98.8594,5.28125 C99.3385,5.28125 99.7448,5.40104 100.078,5.64062 C100.411,5.88021 100.656,6.23438 100.812,6.70312 M109.938,6.1875 C109.365,6.1875 108.909,6.41406 108.57,6.86719 C108.232,7.32031 108.062,7.9375 108.062,8.71875 C108.062,9.51042 108.229,10.1302 108.562,10.5781 C108.896,11.026 109.354,11.25 109.938,11.25 C110.51,11.25 110.966,11.0234 111.305,10.5703 C111.643,10.1172 111.812,9.5 111.812,8.71875 C111.812,7.94792 111.643,7.33333 111.305,6.875 C110.966,6.41667 110.51,6.1875 109.938,6.1875 M109.938,5.28125 C110.875,5.28125 111.612,5.58594 112.148,6.19531 C112.685,6.80469 112.953,7.64583 112.953,8.71875 C112.953,9.79167 112.685,10.6354 112.148,11.25 C111.612,11.8646 110.875,12.1719 109.938,12.1719 C109,12.1719 108.263,11.8646 107.727,11.25 C107.19,10.6354 106.922,9.79167 106.922,8.71875 C106.922,7.64583 107.19,6.80469 107.727,6.19531 C108.263,5.58594 109,5.28125 109.938,5.28125 M119.047,6.4375 L119.047,2.875 L120.125,2.875 L120.125,12 L119.047,12 L119.047,11.0156 C118.818,11.401 118.531,11.6901 118.188,11.8828 C117.844,12.0755 117.427,12.1719 116.938,12.1719 C116.146,12.1719 115.5,11.8542 115,11.2188 C114.5,10.5833 114.25,9.75 114.25,8.71875 C114.25,7.6875 114.5,6.85677 115,6.22656 C115.5,5.59635 116.146,5.28125 116.938,5.28125 C117.427,5.28125 117.844,5.375 118.188,5.5625 C118.531,5.75 118.818,6.04167 119.047,6.4375 M115.375,8.71875 C115.375,9.51042 115.536,10.1328 115.859,10.5859 C116.182,11.0391 116.63,11.2656 117.203,11.2656 C117.776,11.2656 118.227,11.0391 118.555,10.5859 C118.883,10.1328 119.047,9.51042 119.047,8.71875 C119.047,7.92708 118.883,7.30729 118.555,6.85938 C118.227,6.41146 117.776,6.1875 117.203,6.1875 C116.63,6.1875 116.182,6.41146 115.859,6.85938 C115.536,7.30729 115.375,7.92708 115.375,8.71875 M122.328,5.4375 L123.406,5.4375 L123.406,12 L122.328,12 L122.328,5.4375 M122.328,2.875 L123.406,2.875 L123.406,4.25 L122.328,4.25 L122.328,2.875 M128.984,2.875 L128.984,3.78125 L127.953,3.78125 C127.568,3.78125 127.299,3.85938 127.148,4.01562 C126.997,4.17188 126.922,4.45312 126.922,4.85938 L126.922,5.4375 L128.703,5.4375 L128.703,6.28125 L126.922,6.28125 L126.922,12 L125.844,12 L125.844,6.28125 L124.812,6.28125 L124.812,5.4375 L125.844,5.4375 L125.844,4.98438 C125.844,4.25521 126.013,3.72135 126.352,3.38281 C126.69,3.04427 127.229,2.875 127.969,2.875 L128.984,2.875 M132.609,12.6094 C132.307,13.3906 132.01,13.901 131.719,14.1406 C131.427,14.3802 131.042,14.5 130.562,14.5 L129.703,14.5 L129.703,13.5938 L130.328,13.5938 C130.63,13.5938 130.862,13.5234 131.023,13.3828 C131.185,13.2422 131.365,12.9115 131.562,12.3906 L131.766,11.8906 L129.109,5.4375 L130.25,5.4375 L132.297,10.5625 L134.359,5.4375 L135.5,5.4375 L132.609,12.6094 M141.969,14 L141.969,14.8281 L135.734,14.8281 L135.734,14 L141.969,14 M144.203,4.21875 L144.203,7.51562 L145.688,7.51562 C146.24,7.51562 146.667,7.3724 146.969,7.08594 C147.271,6.79948 147.422,6.39062 147.422,5.85938 C147.422,5.33854 147.271,4.9349 146.969,4.64844 C146.667,4.36198 146.24,4.21875 145.688,4.21875 L144.203,4.21875 M143.016,3.25 L145.688,3.25 C146.677,3.25 147.422,3.47135 147.922,3.91406 C148.422,4.35677 148.672,5.00521 148.672,5.85938 C148.672,6.72396 148.422,7.3776 147.922,7.82031 C147.422,8.26302 146.677,8.48438 145.688,8.48438 L144.203,8.48438 L144.203,12 L143.016,12 L143.016,3.25 M153.812,4.04688 C152.948,4.04688 152.263,4.36719 151.758,5.00781 C151.253,5.64844 151,6.52604 151,7.64062 C151,8.73438 151.253,9.60156 151.758,10.2422 C152.263,10.8828 152.948,11.2031 153.812,11.2031 C154.667,11.2031 155.346,10.8828 155.852,10.2422 C156.357,9.60156 156.609,8.73438 156.609,7.64062 C156.609,6.52604 156.357,5.64844 155.852,5.00781 C155.346,4.36719 154.667,4.04688 153.812,4.04688 M153.812,3.09375 C155.031,3.09375 156.008,3.50521 156.742,4.32812 C157.477,5.15104 157.844,6.25521 157.844,7.64062 C157.844,9.01562 157.477,10.1146 156.742,10.9375 C156.008,11.7604 155.031,12.1719 153.812,12.1719 C152.583,12.1719 151.599,11.7604 150.859,10.9375 C150.12,10.1146 149.75,9.01562 149.75,7.64062 C149.75,6.25521 150.12,5.15104 150.859,4.32812 C151.599,3.50521 152.583,3.09375 153.812,3.09375 M159.688,3.25 L160.875,3.25 L160.875,12 L159.688,12 L159.688,3.25"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1179.9,1047.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1179.9,1047.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1158.5,-668.94 L1327.5,-668.94 L1327.5,-633.94 L1158.5,-633.94 L1158.5,-668.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2348.43,1175.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2348.43,1175.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,2348.43,1175.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M96.75,11.0156 L96.75,14.5 L95.6719,14.5 L95.6719,5.4375 L96.75,5.4375 L96.75,6.4375 C96.9792,6.04167 97.2656,5.75 97.6094,5.5625 C97.9531,5.375 98.3646,5.28125 98.8438,5.28125 C99.6458,5.28125 100.297,5.59635 100.797,6.22656 C101.297,6.85677 101.547,7.6875 101.547,8.71875 C101.547,9.75 101.297,10.5833 100.797,11.2188 C100.297,11.8542 99.6458,12.1719 98.8438,12.1719 C98.3646,12.1719 97.9531,12.0755 97.6094,11.8828 C97.2656,11.6901 96.9792,11.401 96.75,11.0156 M100.422,8.71875 C100.422,7.92708 100.258,7.30729 99.9297,6.85938 C99.6016,6.41146 99.1562,6.1875 98.5938,6.1875 C98.0208,6.1875 97.5703,6.41146 97.2422,6.85938 C96.9141,7.30729 96.75,7.92708 96.75,8.71875 C96.75,9.51042 96.9141,10.1328 97.2422,10.5859 C97.5703,11.0391 98.0208,11.2656 98.5938,11.2656 C99.1562,11.2656 99.6016,11.0391 99.9297,10.5859 C100.258,10.1328 100.422,9.51042 100.422,8.71875 M105.859,6.1875 C105.286,6.1875 104.831,6.41406 104.492,6.86719 C104.154,7.32031 103.984,7.9375 103.984,8.71875 C103.984,9.51042 104.151,10.1302 104.484,10.5781 C104.818,11.026 105.276,11.25 105.859,11.25 C106.432,11.25 106.888,11.0234 107.227,10.5703 C107.565,10.1172 107.734,9.5 107.734,8.71875 C107.734,7.94792 107.565,7.33333 107.227,6.875 C106.888,6.41667 106.432,6.1875 105.859,6.1875 M105.859,5.28125 C106.797,5.28125 107.534,5.58594 108.07,6.19531 C108.607,6.80469 108.875,7.64583 108.875,8.71875 C108.875,9.79167 108.607,10.6354 108.07,11.25 C107.534,11.8646 106.797,12.1719 105.859,12.1719 C104.922,12.1719 104.185,11.8646 103.648,11.25 C103.112,10.6354 102.844,9.79167 102.844,8.71875 C102.844,7.64583 103.112,6.80469 103.648,6.19531 C104.185,5.58594 104.922,5.28125 105.859,5.28125 M110.641,5.4375 L111.719,5.4375 L111.719,12 L110.641,12 L110.641,5.4375 M110.641,2.875 L111.719,2.875 L111.719,4.25 L110.641,4.25 L110.641,2.875 M118.969,14 L118.969,14.8281 L112.734,14.8281 L112.734,14 L118.969,14 M119.969,2.875 L121.047,2.875 L121.047,12 L119.969,12 L119.969,2.875 M123.297,5.4375 L124.375,5.4375 L124.375,12 L123.297,12 L123.297,5.4375 M123.297,2.875 L124.375,2.875 L124.375,4.25 L123.297,4.25 L123.297,2.875 M130.812,5.625 L130.812,6.65625 C130.51,6.5 130.195,6.38281 129.867,6.30469 C129.539,6.22656 129.198,6.1875 128.844,6.1875 C128.312,6.1875 127.911,6.26823 127.641,6.42969 C127.37,6.59115 127.234,6.83854 127.234,7.17188 C127.234,7.42188 127.331,7.61719 127.523,7.75781 C127.716,7.89844 128.104,8.03125 128.688,8.15625 L129.047,8.25 C129.818,8.40625 130.365,8.63542 130.688,8.9375 C131.01,9.23958 131.172,9.65625 131.172,10.1875 C131.172,10.8021 130.93,11.2865 130.445,11.6406 C129.961,11.9948 129.297,12.1719 128.453,12.1719 C128.099,12.1719 127.732,12.138 127.352,12.0703 C126.971,12.0026 126.573,11.901 126.156,11.7656 L126.156,10.6406 C126.552,10.849 126.943,11.0052 127.328,11.1094 C127.714,11.2135 128.099,11.2656 128.484,11.2656 C128.984,11.2656 129.372,11.1797 129.648,11.0078 C129.924,10.8359 130.062,10.5885 130.062,10.2656 C130.062,9.97396 129.964,9.75 129.766,9.59375 C129.568,9.4375 129.135,9.28646 128.469,9.14062 L128.094,9.0625 C127.427,8.91667 126.945,8.69792 126.648,8.40625 C126.352,8.11458 126.203,7.71875 126.203,7.21875 C126.203,6.59375 126.422,6.11458 126.859,5.78125 C127.297,5.44792 127.917,5.28125 128.719,5.28125 C129.115,5.28125 129.49,5.3099 129.844,5.36719 C130.198,5.42448 130.521,5.51042 130.812,5.625 M133.953,3.57812 L133.953,5.4375 L136.172,5.4375 L136.172,6.28125 L133.953,6.28125 L133.953,9.84375 C133.953,10.375 134.026,10.7161 134.172,10.8672 C134.318,11.0182 134.615,11.0938 135.062,11.0938 L136.172,11.0938 L136.172,12 L135.062,12 C134.229,12 133.654,11.8438 133.336,11.5312 C133.018,11.2188 132.859,10.6562 132.859,9.84375 L132.859,6.28125 L132.078,6.28125 L132.078,5.4375 L132.859,5.4375 L132.859,3.57812 L133.953,3.57812"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2348.43,1175.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2348.43,1175.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M581.5,-840.94 L760.5,-840.94 L760.5,-805.94 L581.5,-805.94 L581.5,-840.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1198.6,831.883)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1198.6,831.883)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1198.6,831.883)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M98.6875,8.70312 C97.8229,8.70312 97.2214,8.80208 96.8828,9 C96.5443,9.19792 96.375,9.53646 96.375,10.0156 C96.375,10.401 96.5026,10.7057 96.7578,10.9297 C97.013,11.1536 97.3542,11.2656 97.7812,11.2656 C98.3854,11.2656 98.8672,11.0547 99.2266,10.6328 C99.5859,10.2109 99.7656,9.64583 99.7656,8.9375 L99.7656,8.70312 L98.6875,8.70312 M100.844,8.25 L100.844,12 L99.7656,12 L99.7656,11 C99.5156,11.3958 99.2083,11.6901 98.8438,11.8828 C98.4792,12.0755 98.0312,12.1719 97.5,12.1719 C96.8229,12.1719 96.2865,11.9818 95.8906,11.6016 C95.4948,11.2214 95.2969,10.7188 95.2969,10.0938 C95.2969,9.35417 95.5443,8.79688 96.0391,8.42188 C96.5339,8.04688 97.2708,7.85938 98.25,7.85938 L99.7656,7.85938 L99.7656,7.75 C99.7656,7.25 99.6016,6.86458 99.2734,6.59375 C98.9453,6.32292 98.4896,6.1875 97.9062,6.1875 C97.5312,6.1875 97.1641,6.23438 96.8047,6.32812 C96.4453,6.42188 96.1042,6.55729 95.7812,6.73438 L95.7812,5.73438 C96.1771,5.57812 96.5599,5.46354 96.9297,5.39062 C97.2995,5.31771 97.6615,5.28125 98.0156,5.28125 C98.9635,5.28125 99.6719,5.52604 100.141,6.01562 C100.609,6.50521 100.844,7.25 100.844,8.25 M107.375,6.4375 L107.375,2.875 L108.453,2.875 L108.453,12 L107.375,12 L107.375,11.0156 C107.146,11.401 106.859,11.6901 106.516,11.8828 C106.172,12.0755 105.755,12.1719 105.266,12.1719 C104.474,12.1719 103.828,11.8542 103.328,11.2188 C102.828,10.5833 102.578,9.75 102.578,8.71875 C102.578,7.6875 102.828,6.85677 103.328,6.22656 C103.828,5.59635 104.474,5.28125 105.266,5.28125 C105.755,5.28125 106.172,5.375 106.516,5.5625 C106.859,5.75 107.146,6.04167 107.375,6.4375 M103.703,8.71875 C103.703,9.51042 103.865,10.1328 104.188,10.5859 C104.51,11.0391 104.958,11.2656 105.531,11.2656 C106.104,11.2656 106.555,11.0391 106.883,10.5859 C107.211,10.1328 107.375,9.51042 107.375,8.71875 C107.375,7.92708 107.211,7.30729 106.883,6.85938 C106.555,6.41146 106.104,6.1875 105.531,6.1875 C104.958,6.1875 104.51,6.41146 104.188,6.85938 C103.865,7.30729 103.703,7.92708 103.703,8.71875 M114.984,6.4375 L114.984,2.875 L116.062,2.875 L116.062,12 L114.984,12 L114.984,11.0156 C114.755,11.401 114.469,11.6901 114.125,11.8828 C113.781,12.0755 113.365,12.1719 112.875,12.1719 C112.083,12.1719 111.438,11.8542 110.938,11.2188 C110.438,10.5833 110.188,9.75 110.188,8.71875 C110.188,7.6875 110.438,6.85677 110.938,6.22656 C111.438,5.59635 112.083,5.28125 112.875,5.28125 C113.365,5.28125 113.781,5.375 114.125,5.5625 C114.469,5.75 114.755,6.04167 114.984,6.4375 M111.312,8.71875 C111.312,9.51042 111.474,10.1328 111.797,10.5859 C112.12,11.0391 112.568,11.2656 113.141,11.2656 C113.714,11.2656 114.164,11.0391 114.492,10.5859 C114.82,10.1328 114.984,9.51042 114.984,8.71875 C114.984,7.92708 114.82,7.30729 114.492,6.85938 C114.164,6.41146 113.714,6.1875 113.141,6.1875 C112.568,6.1875 112.12,6.41146 111.797,6.85938 C111.474,7.30729 111.312,7.92708 111.312,8.71875 M123.266,14 L123.266,14.8281 L117.031,14.8281 L117.031,14 L123.266,14 M125.5,4.21875 L125.5,7.51562 L126.984,7.51562 C127.536,7.51562 127.964,7.3724 128.266,7.08594 C128.568,6.79948 128.719,6.39062 128.719,5.85938 C128.719,5.33854 128.568,4.9349 128.266,4.64844 C127.964,4.36198 127.536,4.21875 126.984,4.21875 L125.5,4.21875 M124.312,3.25 L126.984,3.25 C127.974,3.25 128.719,3.47135 129.219,3.91406 C129.719,4.35677 129.969,5.00521 129.969,5.85938 C129.969,6.72396 129.719,7.3776 129.219,7.82031 C128.719,8.26302 127.974,8.48438 126.984,8.48438 L125.5,8.48438 L125.5,12 L124.312,12 L124.312,3.25 M135.109,4.04688 C134.245,4.04688 133.56,4.36719 133.055,5.00781 C132.549,5.64844 132.297,6.52604 132.297,7.64062 C132.297,8.73438 132.549,9.60156 133.055,10.2422 C133.56,10.8828 134.245,11.2031 135.109,11.2031 C135.964,11.2031 136.643,10.8828 137.148,10.2422 C137.654,9.60156 137.906,8.73438 137.906,7.64062 C137.906,6.52604 137.654,5.64844 137.148,5.00781 C136.643,4.36719 135.964,4.04688 135.109,4.04688 M135.109,3.09375 C136.328,3.09375 137.305,3.50521 138.039,4.32812 C138.773,5.15104 139.141,6.25521 139.141,7.64062 C139.141,9.01562 138.773,10.1146 138.039,10.9375 C137.305,11.7604 136.328,12.1719 135.109,12.1719 C133.88,12.1719 132.896,11.7604 132.156,10.9375 C131.417,10.1146 131.047,9.01562 131.047,7.64062 C131.047,6.25521 131.417,5.15104 132.156,4.32812 C132.896,3.50521 133.88,3.09375 135.109,3.09375 M140.984,3.25 L142.172,3.25 L142.172,12 L140.984,12 L140.984,3.25"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1198.6,831.883)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1198.6,831.883)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M278.5,-116.94 L331.5,-116.94 L331.5,-81.94 L278.5,-81.94 L278.5,-116.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,579.3,2279.81)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,579.3,2279.81)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,579.3,2279.81)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,579.3,2279.81)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,579.3,2279.81)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1103.5,-160.44 C1103.5,-150.499 1044.63,-142.44 972,-142.44 C899.374,-142.44 840.499,-150.499 840.499,-160.44 C840.499,-170.381 899.374,-178.44 972,-178.44 C1044.63,-178.44 1103.5,-170.381 1103.5,-160.44 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1794.8,2157.82)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1794.8,2157.82)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1794.8,2157.82)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.625,8.03125 L10.625,12 L9.54688,12 L9.54688,8.07812 C9.54688,7.45312 9.42448,6.98698 9.17969,6.67969 C8.9349,6.3724 8.57292,6.21875 8.09375,6.21875 C7.51042,6.21875 7.04948,6.40365 6.71094,6.77344 C6.3724,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,2.875 L6.20312,2.875 L6.20312,6.45312 C6.46354,6.05729 6.76823,5.76302 7.11719,5.57031 C7.46615,5.3776 7.86979,5.28125 8.32812,5.28125 C9.07812,5.28125 9.64844,5.51302 10.0391,5.97656 C10.4297,6.4401 10.625,7.125 10.625,8.03125 M15.2969,6.1875 C14.724,6.1875 14.2682,6.41406 13.9297,6.86719 C13.5911,7.32031 13.4219,7.9375 13.4219,8.71875 C13.4219,9.51042 13.5885,10.1302 13.9219,10.5781 C14.2552,11.026 14.7135,11.25 15.2969,11.25 C15.8698,11.25 16.3255,11.0234 16.6641,10.5703 C17.0026,10.1172 17.1719,9.5 17.1719,8.71875 C17.1719,7.94792 17.0026,7.33333 16.6641,6.875 C16.3255,6.41667 15.8698,6.1875 15.2969,6.1875 M15.2969,5.28125 C16.2344,5.28125 16.9714,5.58594 17.5078,6.19531 C18.0443,6.80469 18.3125,7.64583 18.3125,8.71875 C18.3125,9.79167 18.0443,10.6354 17.5078,11.25 C16.9714,11.8646 16.2344,12.1719 15.2969,12.1719 C14.3594,12.1719 13.6224,11.8646 13.0859,11.25 C12.5495,10.6354 12.2812,9.79167 12.2812,8.71875 C12.2812,7.64583 12.5495,6.80469 13.0859,6.19531 C13.6224,5.58594 14.3594,5.28125 15.2969,5.28125 M25.1875,6.70312 C25.4583,6.21354 25.7812,5.85417 26.1562,5.625 C26.5312,5.39583 26.974,5.28125 27.4844,5.28125 C28.1719,5.28125 28.7005,5.52083 29.0703,6 C29.4401,6.47917 29.625,7.15625 29.625,8.03125 L29.625,12 L28.5469,12 L28.5469,8.07812 C28.5469,7.44271 28.4349,6.97396 28.2109,6.67188 C27.987,6.36979 27.6458,6.21875 27.1875,6.21875 C26.625,6.21875 26.1823,6.40365 25.8594,6.77344 C25.5365,7.14323 25.375,7.65104 25.375,8.29688 L25.375,12 L24.2969,12 L24.2969,8.07812 C24.2969,7.44271 24.1849,6.97396 23.9609,6.67188 C23.737,6.36979 23.3906,6.21875 22.9219,6.21875 C22.3698,6.21875 21.9323,6.40365 21.6094,6.77344 C21.2865,7.14323 21.125,7.65104 21.125,8.29688 L21.125,12 L20.0469,12 L20.0469,5.4375 L21.125,5.4375 L21.125,6.45312 C21.375,6.05729 21.6719,5.76302 22.0156,5.57031 C22.3594,5.3776 22.7656,5.28125 23.2344,5.28125 C23.7135,5.28125 24.1198,5.40104 24.4531,5.64062 C24.7865,5.88021 25.0312,6.23438 25.1875,6.70312 M37.3906,8.45312 L37.3906,8.96875 L32.4219,8.96875 C32.474,9.71875 32.7005,10.2865 33.1016,10.6719 C33.5026,11.0573 34.0573,11.25 34.7656,11.25 C35.1823,11.25 35.5859,11.2005 35.9766,11.1016 C36.3672,11.0026 36.7552,10.849 37.1406,10.6406 L37.1406,11.6719 C36.7448,11.8281 36.3438,11.9505 35.9375,12.0391 C35.5312,12.1276 35.1198,12.1719 34.7031,12.1719 C33.6615,12.1719 32.8333,11.8672 32.2188,11.2578 C31.6042,10.6484 31.2969,9.82292 31.2969,8.78125 C31.2969,7.70833 31.5885,6.85677 32.1719,6.22656 C32.7552,5.59635 33.5365,5.28125 34.5156,5.28125 C35.401,5.28125 36.1016,5.5651 36.6172,6.13281 C37.1328,6.70052 37.3906,7.47396 37.3906,8.45312 M36.3125,8.125 C36.3021,7.54167 36.1354,7.07292 35.8125,6.71875 C35.4896,6.36458 35.0625,6.1875 34.5312,6.1875 C33.9271,6.1875 33.4453,6.35938 33.0859,6.70312 C32.7266,7.04688 32.5208,7.52604 32.4688,8.14062 L36.3125,8.125 M42.9531,6.4375 C42.8281,6.375 42.6953,6.32552 42.5547,6.28906 C42.4141,6.2526 42.2552,6.23438 42.0781,6.23438 C41.474,6.23438 41.0078,6.43229 40.6797,6.82812 C40.3516,7.22396 40.1875,7.79688 40.1875,8.54688 L40.1875,12 L39.1094,12 L39.1094,5.4375 L40.1875,5.4375 L40.1875,6.45312 C40.4167,6.05729 40.7135,5.76302 41.0781,5.57031 C41.4427,5.3776 41.8854,5.28125 42.4062,5.28125 C42.4792,5.28125 42.5599,5.28646 42.6484,5.29688 C42.737,5.30729 42.8333,5.32292 42.9375,5.34375 L42.9531,6.4375 M49.0625,14 L49.0625,14.8281 L42.8281,14.8281 L42.8281,14 L49.0625,14 M55.5312,8.03125 L55.5312,12 L54.4531,12 L54.4531,8.07812 C54.4531,7.45312 54.3307,6.98698 54.0859,6.67969 C53.8411,6.3724 53.4792,6.21875 53,6.21875 C52.4167,6.21875 51.9557,6.40365 51.6172,6.77344 C51.2786,7.14323 51.1094,7.65104 51.1094,8.29688 L51.1094,12 L50.0312,12 L50.0312,5.4375 L51.1094,5.4375 L51.1094,6.45312 C51.3698,6.05729 51.6745,5.76302 52.0234,5.57031 C52.3724,5.3776 52.776,5.28125 53.2344,5.28125 C53.9844,5.28125 54.5547,5.51302 54.9453,5.97656 C55.3359,6.4401 55.5312,7.125 55.5312,8.03125 M60.6406,8.70312 C59.776,8.70312 59.1745,8.80208 58.8359,9 C58.4974,9.19792 58.3281,9.53646 58.3281,10.0156 C58.3281,10.401 58.4557,10.7057 58.7109,10.9297 C58.9661,11.1536 59.3073,11.2656 59.7344,11.2656 C60.3385,11.2656 60.8203,11.0547 61.1797,10.6328 C61.5391,10.2109 61.7188,9.64583 61.7188,8.9375 L61.7188,8.70312 L60.6406,8.70312 M62.7969,8.25 L62.7969,12 L61.7188,12 L61.7188,11 C61.4688,11.3958 61.1615,11.6901 60.7969,11.8828 C60.4323,12.0755 59.9844,12.1719 59.4531,12.1719 C58.776,12.1719 58.2396,11.9818 57.8438,11.6016 C57.4479,11.2214 57.25,10.7188 57.25,10.0938 C57.25,9.35417 57.4974,8.79688 57.9922,8.42188 C58.487,8.04688 59.224,7.85938 60.2031,7.85938 L61.7188,7.85938 L61.7188,7.75 C61.7188,7.25 61.5547,6.86458 61.2266,6.59375 C60.8984,6.32292 60.4427,6.1875 59.8594,6.1875 C59.4844,6.1875 59.1172,6.23438 58.7578,6.32812 C58.3984,6.42188 58.0573,6.55729 57.7344,6.73438 L57.7344,5.73438 C58.1302,5.57812 58.513,5.46354 58.8828,5.39062 C59.2526,5.31771 59.6146,5.28125 59.9688,5.28125 C60.9167,5.28125 61.625,5.52604 62.0938,6.01562 C62.5625,6.50521 62.7969,7.25 62.7969,8.25 M64.2344,5.4375 L65.375,5.4375 L67.4219,10.9375 L69.4844,5.4375 L70.625,5.4375 L68.1562,12 L66.6875,12 L64.2344,5.4375 M72.0938,5.4375 L73.1719,5.4375 L73.1719,12 L72.0938,12 L72.0938,5.4375 M72.0938,2.875 L73.1719,2.875 L73.1719,4.25 L72.0938,4.25 L72.0938,2.875 M79.75,8.64062 C79.75,7.85938 79.5885,7.25521 79.2656,6.82812 C78.9427,6.40104 78.4896,6.1875 77.9062,6.1875 C77.3333,6.1875 76.8854,6.40104 76.5625,6.82812 C76.2396,7.25521 76.0781,7.85938 76.0781,8.64062 C76.0781,9.42188 76.2396,10.026 76.5625,10.4531 C76.8854,10.8802 77.3333,11.0938 77.9062,11.0938 C78.4896,11.0938 78.9427,10.8802 79.2656,10.4531 C79.5885,10.026 79.75,9.42188 79.75,8.64062 M80.8281,11.1875 C80.8281,12.3021 80.5807,13.1328 80.0859,13.6797 C79.5911,14.2266 78.8281,14.5 77.7969,14.5 C77.4219,14.5 77.0651,14.4714 76.7266,14.4141 C76.388,14.3568 76.0625,14.2708 75.75,14.1562 L75.75,13.1094 C76.0625,13.276 76.375,13.401 76.6875,13.4844 C77,13.5677 77.3125,13.6094 77.625,13.6094 C78.3333,13.6094 78.8646,13.4245 79.2188,13.0547 C79.5729,12.6849 79.75,12.125 79.75,11.375 L79.75,10.8438 C79.5208,11.2292 79.2344,11.5182 78.8906,11.7109 C78.5469,11.9036 78.1302,12 77.6406,12 C76.8385,12 76.1901,11.6927 75.6953,11.0781 C75.2005,10.4635 74.9531,9.65104 74.9531,8.64062 C74.9531,7.63021 75.2005,6.81771 75.6953,6.20312 C76.1901,5.58854 76.8385,5.28125 77.6406,5.28125 C78.1302,5.28125 78.5469,5.3776 78.8906,5.57031 C79.2344,5.76302 79.5208,6.05208 79.75,6.4375 L79.75,5.4375 L80.8281,5.4375 L80.8281,11.1875 M86.0156,8.70312 C85.151,8.70312 84.5495,8.80208 84.2109,9 C83.8724,9.19792 83.7031,9.53646 83.7031,10.0156 C83.7031,10.401 83.8307,10.7057 84.0859,10.9297 C84.3411,11.1536 84.6823,11.2656 85.1094,11.2656 C85.7135,11.2656 86.1953,11.0547 86.5547,10.6328 C86.9141,10.2109 87.0938,9.64583 87.0938,8.9375 L87.0938,8.70312 L86.0156,8.70312 M88.1719,8.25 L88.1719,12 L87.0938,12 L87.0938,11 C86.8438,11.3958 86.5365,11.6901 86.1719,11.8828 C85.8073,12.0755 85.3594,12.1719 84.8281,12.1719 C84.151,12.1719 83.6146,11.9818 83.2188,11.6016 C82.8229,11.2214 82.625,10.7188 82.625,10.0938 C82.625,9.35417 82.8724,8.79688 83.3672,8.42188 C83.862,8.04688 84.599,7.85938 85.5781,7.85938 L87.0938,7.85938 L87.0938,7.75 C87.0938,7.25 86.9297,6.86458 86.6016,6.59375 C86.2734,6.32292 85.8177,6.1875 85.2344,6.1875 C84.8594,6.1875 84.4922,6.23438 84.1328,6.32812 C83.7734,6.42188 83.4323,6.55729 83.1094,6.73438 L83.1094,5.73438 C83.5052,5.57812 83.888,5.46354 84.2578,5.39062 C84.6276,5.31771 84.9896,5.28125 85.3438,5.28125 C86.2917,5.28125 87,5.52604 87.4688,6.01562 C87.9375,6.50521 88.1719,7.25 88.1719,8.25 M91.4531,3.57812 L91.4531,5.4375 L93.6719,5.4375 L93.6719,6.28125 L91.4531,6.28125 L91.4531,9.84375 C91.4531,10.375 91.526,10.7161 91.6719,10.8672 C91.8177,11.0182 92.1146,11.0938 92.5625,11.0938 L93.6719,11.0938 L93.6719,12 L92.5625,12 C91.7292,12 91.1536,11.8438 90.8359,11.5312 C90.5182,11.2188 90.3594,10.6562 90.3594,9.84375 L90.3594,6.28125 L89.5781,6.28125 L89.5781,5.4375 L90.3594,5.4375 L90.3594,3.57812 L91.4531,3.57812 M95.0781,5.4375 L96.1562,5.4375 L96.1562,12 L95.0781,12 L95.0781,5.4375 M95.0781,2.875 L96.1562,2.875 L96.1562,4.25 L95.0781,4.25 L95.0781,2.875 M100.953,6.1875 C100.38,6.1875 99.9245,6.41406 99.5859,6.86719 C99.2474,7.32031 99.0781,7.9375 99.0781,8.71875 C99.0781,9.51042 99.2448,10.1302 99.5781,10.5781 C99.9115,11.026 100.37,11.25 100.953,11.25 C101.526,11.25 101.982,11.0234 102.32,10.5703 C102.659,10.1172 102.828,9.5 102.828,8.71875 C102.828,7.94792 102.659,7.33333 102.32,6.875 C101.982,6.41667 101.526,6.1875 100.953,6.1875 M100.953,5.28125 C101.891,5.28125 102.628,5.58594 103.164,6.19531 C103.701,6.80469 103.969,7.64583 103.969,8.71875 C103.969,9.79167 103.701,10.6354 103.164,11.25 C102.628,11.8646 101.891,12.1719 100.953,12.1719 C100.016,12.1719 99.2786,11.8646 98.7422,11.25 C98.2057,10.6354 97.9375,9.79167 97.9375,8.71875 C97.9375,7.64583 98.2057,6.80469 98.7422,6.19531 C99.2786,5.58594 100.016,5.28125 100.953,5.28125 M111.203,8.03125 L111.203,12 L110.125,12 L110.125,8.07812 C110.125,7.45312 110.003,6.98698 109.758,6.67969 C109.513,6.3724 109.151,6.21875 108.672,6.21875 C108.089,6.21875 107.628,6.40365 107.289,6.77344 C106.951,7.14323 106.781,7.65104 106.781,8.29688 L106.781,12 L105.703,12 L105.703,5.4375 L106.781,5.4375 L106.781,6.45312 C107.042,6.05729 107.346,5.76302 107.695,5.57031 C108.044,5.3776 108.448,5.28125 108.906,5.28125 C109.656,5.28125 110.227,5.51302 110.617,5.97656 C111.008,6.4401 111.203,7.125 111.203,8.03125 M118.328,14 L118.328,14.8281 L112.094,14.8281 L112.094,14 L118.328,14 M124.797,8.03125 L124.797,12 L123.719,12 L123.719,8.07812 C123.719,7.45312 123.596,6.98698 123.352,6.67969 C123.107,6.3724 122.745,6.21875 122.266,6.21875 C121.682,6.21875 121.221,6.40365 120.883,6.77344 C120.544,7.14323 120.375,7.65104 120.375,8.29688 L120.375,12 L119.297,12 L119.297,5.4375 L120.375,5.4375 L120.375,6.45312 C120.635,6.05729 120.94,5.76302 121.289,5.57031 C121.638,5.3776 122.042,5.28125 122.5,5.28125 C123.25,5.28125 123.82,5.51302 124.211,5.97656 C124.602,6.4401 124.797,7.125 124.797,8.03125 M129.469,6.1875 C128.896,6.1875 128.44,6.41406 128.102,6.86719 C127.763,7.32031 127.594,7.9375 127.594,8.71875 C127.594,9.51042 127.76,10.1302 128.094,10.5781 C128.427,11.026 128.885,11.25 129.469,11.25 C130.042,11.25 130.497,11.0234 130.836,10.5703 C131.174,10.1172 131.344,9.5 131.344,8.71875 C131.344,7.94792 131.174,7.33333 130.836,6.875 C130.497,6.41667 130.042,6.1875 129.469,6.1875 M129.469,5.28125 C130.406,5.28125 131.143,5.58594 131.68,6.19531 C132.216,6.80469 132.484,7.64583 132.484,8.71875 C132.484,9.79167 132.216,10.6354 131.68,11.25 C131.143,11.8646 130.406,12.1719 129.469,12.1719 C128.531,12.1719 127.794,11.8646 127.258,11.25 C126.721,10.6354 126.453,9.79167 126.453,8.71875 C126.453,7.64583 126.721,6.80469 127.258,6.19531 C127.794,5.58594 128.531,5.28125 129.469,5.28125 M138.578,6.4375 L138.578,2.875 L139.656,2.875 L139.656,12 L138.578,12 L138.578,11.0156 C138.349,11.401 138.062,11.6901 137.719,11.8828 C137.375,12.0755 136.958,12.1719 136.469,12.1719 C135.677,12.1719 135.031,11.8542 134.531,11.2188 C134.031,10.5833 133.781,9.75 133.781,8.71875 C133.781,7.6875 134.031,6.85677 134.531,6.22656 C135.031,5.59635 135.677,5.28125 136.469,5.28125 C136.958,5.28125 137.375,5.375 137.719,5.5625 C138.062,5.75 138.349,6.04167 138.578,6.4375 M134.906,8.71875 C134.906,9.51042 135.068,10.1328 135.391,10.5859 C135.714,11.0391 136.161,11.2656 136.734,11.2656 C137.307,11.2656 137.758,11.0391 138.086,10.5859 C138.414,10.1328 138.578,9.51042 138.578,8.71875 C138.578,7.92708 138.414,7.30729 138.086,6.85938 C137.758,6.41146 137.307,6.1875 136.734,6.1875 C136.161,6.1875 135.714,6.41146 135.391,6.85938 C135.068,7.30729 134.906,7.92708 134.906,8.71875 M147.484,8.45312 L147.484,8.96875 L142.516,8.96875 C142.568,9.71875 142.794,10.2865 143.195,10.6719 C143.596,11.0573 144.151,11.25 144.859,11.25 C145.276,11.25 145.68,11.2005 146.07,11.1016 C146.461,11.0026 146.849,10.849 147.234,10.6406 L147.234,11.6719 C146.839,11.8281 146.438,11.9505 146.031,12.0391 C145.625,12.1276 145.214,12.1719 144.797,12.1719 C143.755,12.1719 142.927,11.8672 142.312,11.2578 C141.698,10.6484 141.391,9.82292 141.391,8.78125 C141.391,7.70833 141.682,6.85677 142.266,6.22656 C142.849,5.59635 143.63,5.28125 144.609,5.28125 C145.495,5.28125 146.195,5.5651 146.711,6.13281 C147.227,6.70052 147.484,7.47396 147.484,8.45312 M146.406,8.125 C146.396,7.54167 146.229,7.07292 145.906,6.71875 C145.583,6.36458 145.156,6.1875 144.625,6.1875 C144.021,6.1875 143.539,6.35938 143.18,6.70312 C142.82,7.04688 142.615,7.52604 142.562,8.14062 L146.406,8.125"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1794.8,2157.82)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1794.8,2157.82)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M571.499,-894.94 L770.501,-894.94 L770.501,-859.94 L571.499,-859.94 L571.499,-894.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1176.85,723.888)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1176.85,723.888)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1176.85,723.888)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M99.5156,6.4375 C99.3906,6.375 99.2578,6.32552 99.1172,6.28906 C98.9766,6.2526 98.8177,6.23438 98.6406,6.23438 C98.0365,6.23438 97.5703,6.43229 97.2422,6.82812 C96.9141,7.22396 96.75,7.79688 96.75,8.54688 L96.75,12 L95.6719,12 L95.6719,5.4375 L96.75,5.4375 L96.75,6.45312 C96.9792,6.05729 97.276,5.76302 97.6406,5.57031 C98.0052,5.3776 98.4479,5.28125 98.9688,5.28125 C99.0417,5.28125 99.1224,5.28646 99.2109,5.29688 C99.2995,5.30729 99.3958,5.32292 99.5,5.34375 L99.5156,6.4375 M106.25,8.45312 L106.25,8.96875 L101.281,8.96875 C101.333,9.71875 101.56,10.2865 101.961,10.6719 C102.362,11.0573 102.917,11.25 103.625,11.25 C104.042,11.25 104.445,11.2005 104.836,11.1016 C105.227,11.0026 105.615,10.849 106,10.6406 L106,11.6719 C105.604,11.8281 105.203,11.9505 104.797,12.0391 C104.391,12.1276 103.979,12.1719 103.562,12.1719 C102.521,12.1719 101.693,11.8672 101.078,11.2578 C100.464,10.6484 100.156,9.82292 100.156,8.78125 C100.156,7.70833 100.448,6.85677 101.031,6.22656 C101.615,5.59635 102.396,5.28125 103.375,5.28125 C104.26,5.28125 104.961,5.5651 105.477,6.13281 C105.992,6.70052 106.25,7.47396 106.25,8.45312 M105.172,8.125 C105.161,7.54167 104.995,7.07292 104.672,6.71875 C104.349,6.36458 103.922,6.1875 103.391,6.1875 C102.786,6.1875 102.305,6.35938 101.945,6.70312 C101.586,7.04688 101.38,7.52604 101.328,8.14062 L105.172,8.125 M112.188,5.625 L112.188,6.65625 C111.885,6.5 111.57,6.38281 111.242,6.30469 C110.914,6.22656 110.573,6.1875 110.219,6.1875 C109.688,6.1875 109.286,6.26823 109.016,6.42969 C108.745,6.59115 108.609,6.83854 108.609,7.17188 C108.609,7.42188 108.706,7.61719 108.898,7.75781 C109.091,7.89844 109.479,8.03125 110.062,8.15625 L110.422,8.25 C111.193,8.40625 111.74,8.63542 112.062,8.9375 C112.385,9.23958 112.547,9.65625 112.547,10.1875 C112.547,10.8021 112.305,11.2865 111.82,11.6406 C111.336,11.9948 110.672,12.1719 109.828,12.1719 C109.474,12.1719 109.107,12.138 108.727,12.0703 C108.346,12.0026 107.948,11.901 107.531,11.7656 L107.531,10.6406 C107.927,10.849 108.318,11.0052 108.703,11.1094 C109.089,11.2135 109.474,11.2656 109.859,11.2656 C110.359,11.2656 110.747,11.1797 111.023,11.0078 C111.299,10.8359 111.438,10.5885 111.438,10.2656 C111.438,9.97396 111.339,9.75 111.141,9.59375 C110.943,9.4375 110.51,9.28646 109.844,9.14062 L109.469,9.0625 C108.802,8.91667 108.32,8.69792 108.023,8.40625 C107.727,8.11458 107.578,7.71875 107.578,7.21875 C107.578,6.59375 107.797,6.11458 108.234,5.78125 C108.672,5.44792 109.292,5.28125 110.094,5.28125 C110.49,5.28125 110.865,5.3099 111.219,5.36719 C111.573,5.42448 111.896,5.51042 112.188,5.625 M119.875,8.45312 L119.875,8.96875 L114.906,8.96875 C114.958,9.71875 115.185,10.2865 115.586,10.6719 C115.987,11.0573 116.542,11.25 117.25,11.25 C117.667,11.25 118.07,11.2005 118.461,11.1016 C118.852,11.0026 119.24,10.849 119.625,10.6406 L119.625,11.6719 C119.229,11.8281 118.828,11.9505 118.422,12.0391 C118.016,12.1276 117.604,12.1719 117.188,12.1719 C116.146,12.1719 115.318,11.8672 114.703,11.2578 C114.089,10.6484 113.781,9.82292 113.781,8.78125 C113.781,7.70833 114.073,6.85677 114.656,6.22656 C115.24,5.59635 116.021,5.28125 117,5.28125 C117.885,5.28125 118.586,5.5651 119.102,6.13281 C119.617,6.70052 119.875,7.47396 119.875,8.45312 M118.797,8.125 C118.786,7.54167 118.62,7.07292 118.297,6.71875 C117.974,6.36458 117.547,6.1875 117.016,6.1875 C116.411,6.1875 115.93,6.35938 115.57,6.70312 C115.211,7.04688 115.005,7.52604 114.953,8.14062 L118.797,8.125 M122.703,3.57812 L122.703,5.4375 L124.922,5.4375 L124.922,6.28125 L122.703,6.28125 L122.703,9.84375 C122.703,10.375 122.776,10.7161 122.922,10.8672 C123.068,11.0182 123.365,11.0938 123.812,11.0938 L124.922,11.0938 L124.922,12 L123.812,12 C122.979,12 122.404,11.8438 122.086,11.5312 C121.768,11.2188 121.609,10.6562 121.609,9.84375 L121.609,6.28125 L120.828,6.28125 L120.828,5.4375 L121.609,5.4375 L121.609,3.57812 L122.703,3.57812 M131.328,14 L131.328,14.8281 L125.094,14.8281 L125.094,14 L131.328,14 M137.438,6.70312 C137.708,6.21354 138.031,5.85417 138.406,5.625 C138.781,5.39583 139.224,5.28125 139.734,5.28125 C140.422,5.28125 140.951,5.52083 141.32,6 C141.69,6.47917 141.875,7.15625 141.875,8.03125 L141.875,12 L140.797,12 L140.797,8.07812 C140.797,7.44271 140.685,6.97396 140.461,6.67188 C140.237,6.36979 139.896,6.21875 139.438,6.21875 C138.875,6.21875 138.432,6.40365 138.109,6.77344 C137.786,7.14323 137.625,7.65104 137.625,8.29688 L137.625,12 L136.547,12 L136.547,8.07812 C136.547,7.44271 136.435,6.97396 136.211,6.67188 C135.987,6.36979 135.641,6.21875 135.172,6.21875 C134.62,6.21875 134.182,6.40365 133.859,6.77344 C133.536,7.14323 133.375,7.65104 133.375,8.29688 L133.375,12 L132.297,12 L132.297,5.4375 L133.375,5.4375 L133.375,6.45312 C133.625,6.05729 133.922,5.76302 134.266,5.57031 C134.609,5.3776 135.016,5.28125 135.484,5.28125 C135.964,5.28125 136.37,5.40104 136.703,5.64062 C137.036,5.88021 137.281,6.23438 137.438,6.70312 M147,8.70312 C146.135,8.70312 145.534,8.80208 145.195,9 C144.857,9.19792 144.688,9.53646 144.688,10.0156 C144.688,10.401 144.815,10.7057 145.07,10.9297 C145.326,11.1536 145.667,11.2656 146.094,11.2656 C146.698,11.2656 147.18,11.0547 147.539,10.6328 C147.898,10.2109 148.078,9.64583 148.078,8.9375 L148.078,8.70312 L147,8.70312 M149.156,8.25 L149.156,12 L148.078,12 L148.078,11 C147.828,11.3958 147.521,11.6901 147.156,11.8828 C146.792,12.0755 146.344,12.1719 145.812,12.1719 C145.135,12.1719 144.599,11.9818 144.203,11.6016 C143.807,11.2214 143.609,10.7188 143.609,10.0938 C143.609,9.35417 143.857,8.79688 144.352,8.42188 C144.846,8.04688 145.583,7.85938 146.562,7.85938 L148.078,7.85938 L148.078,7.75 C148.078,7.25 147.914,6.86458 147.586,6.59375 C147.258,6.32292 146.802,6.1875 146.219,6.1875 C145.844,6.1875 145.477,6.23438 145.117,6.32812 C144.758,6.42188 144.417,6.55729 144.094,6.73438 L144.094,5.73438 C144.49,5.57812 144.872,5.46354 145.242,5.39062 C145.612,5.31771 145.974,5.28125 146.328,5.28125 C147.276,5.28125 147.984,5.52604 148.453,6.01562 C148.922,6.50521 149.156,7.25 149.156,8.25 M152.406,11.0156 L152.406,14.5 L151.328,14.5 L151.328,5.4375 L152.406,5.4375 L152.406,6.4375 C152.635,6.04167 152.922,5.75 153.266,5.5625 C153.609,5.375 154.021,5.28125 154.5,5.28125 C155.302,5.28125 155.953,5.59635 156.453,6.22656 C156.953,6.85677 157.203,7.6875 157.203,8.71875 C157.203,9.75 156.953,10.5833 156.453,11.2188 C155.953,11.8542 155.302,12.1719 154.5,12.1719 C154.021,12.1719 153.609,12.0755 153.266,11.8828 C152.922,11.6901 152.635,11.401 152.406,11.0156 M156.078,8.71875 C156.078,7.92708 155.914,7.30729 155.586,6.85938 C155.258,6.41146 154.812,6.1875 154.25,6.1875 C153.677,6.1875 153.227,6.41146 152.898,6.85938 C152.57,7.30729 152.406,7.92708 152.406,8.71875 C152.406,9.51042 152.57,10.1328 152.898,10.5859 C153.227,11.0391 153.677,11.2656 154.25,11.2656 C154.812,11.2656 155.258,11.0391 155.586,10.5859 C155.914,10.1328 156.078,9.51042 156.078,8.71875 M163.156,5.625 L163.156,6.65625 C162.854,6.5 162.539,6.38281 162.211,6.30469 C161.883,6.22656 161.542,6.1875 161.188,6.1875 C160.656,6.1875 160.255,6.26823 159.984,6.42969 C159.714,6.59115 159.578,6.83854 159.578,7.17188 C159.578,7.42188 159.674,7.61719 159.867,7.75781 C160.06,7.89844 160.448,8.03125 161.031,8.15625 L161.391,8.25 C162.161,8.40625 162.708,8.63542 163.031,8.9375 C163.354,9.23958 163.516,9.65625 163.516,10.1875 C163.516,10.8021 163.273,11.2865 162.789,11.6406 C162.305,11.9948 161.641,12.1719 160.797,12.1719 C160.443,12.1719 160.076,12.138 159.695,12.0703 C159.315,12.0026 158.917,11.901 158.5,11.7656 L158.5,10.6406 C158.896,10.849 159.286,11.0052 159.672,11.1094 C160.057,11.2135 160.443,11.2656 160.828,11.2656 C161.328,11.2656 161.716,11.1797 161.992,11.0078 C162.268,10.8359 162.406,10.5885 162.406,10.2656 C162.406,9.97396 162.307,9.75 162.109,9.59375 C161.911,9.4375 161.479,9.28646 160.812,9.14062 L160.438,9.0625 C159.771,8.91667 159.289,8.69792 158.992,8.40625 C158.695,8.11458 158.547,7.71875 158.547,7.21875 C158.547,6.59375 158.766,6.11458 159.203,5.78125 C159.641,5.44792 160.26,5.28125 161.062,5.28125 C161.458,5.28125 161.833,5.3099 162.188,5.36719 C162.542,5.42448 162.865,5.51042 163.156,5.625 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1176.85,723.888)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1176.85,723.888)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M500.499,-553.44 C500.499,-543.499 471.174,-535.44 435,-535.44 C398.826,-535.44 369.501,-543.499 369.501,-553.44 C369.501,-563.381 398.826,-571.44 435,-571.44 C471.174,-571.44 500.499,-563.381 500.499,-553.44 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,801.492,1371.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,801.492,1371.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,801.492,1371.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.625,8.03125 L10.625,12 L9.54688,12 L9.54688,8.07812 C9.54688,7.45312 9.42448,6.98698 9.17969,6.67969 C8.9349,6.3724 8.57292,6.21875 8.09375,6.21875 C7.51042,6.21875 7.04948,6.40365 6.71094,6.77344 C6.3724,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,2.875 L6.20312,2.875 L6.20312,6.45312 C6.46354,6.05729 6.76823,5.76302 7.11719,5.57031 C7.46615,5.3776 7.86979,5.28125 8.32812,5.28125 C9.07812,5.28125 9.64844,5.51302 10.0391,5.97656 C10.4297,6.4401 10.625,7.125 10.625,8.03125 M15.2969,6.1875 C14.724,6.1875 14.2682,6.41406 13.9297,6.86719 C13.5911,7.32031 13.4219,7.9375 13.4219,8.71875 C13.4219,9.51042 13.5885,10.1302 13.9219,10.5781 C14.2552,11.026 14.7135,11.25 15.2969,11.25 C15.8698,11.25 16.3255,11.0234 16.6641,10.5703 C17.0026,10.1172 17.1719,9.5 17.1719,8.71875 C17.1719,7.94792 17.0026,7.33333 16.6641,6.875 C16.3255,6.41667 15.8698,6.1875 15.2969,6.1875 M15.2969,5.28125 C16.2344,5.28125 16.9714,5.58594 17.5078,6.19531 C18.0443,6.80469 18.3125,7.64583 18.3125,8.71875 C18.3125,9.79167 18.0443,10.6354 17.5078,11.25 C16.9714,11.8646 16.2344,12.1719 15.2969,12.1719 C14.3594,12.1719 13.6224,11.8646 13.0859,11.25 C12.5495,10.6354 12.2812,9.79167 12.2812,8.71875 C12.2812,7.64583 12.5495,6.80469 13.0859,6.19531 C13.6224,5.58594 14.3594,5.28125 15.2969,5.28125 M25.1875,6.70312 C25.4583,6.21354 25.7812,5.85417 26.1562,5.625 C26.5312,5.39583 26.974,5.28125 27.4844,5.28125 C28.1719,5.28125 28.7005,5.52083 29.0703,6 C29.4401,6.47917 29.625,7.15625 29.625,8.03125 L29.625,12 L28.5469,12 L28.5469,8.07812 C28.5469,7.44271 28.4349,6.97396 28.2109,6.67188 C27.987,6.36979 27.6458,6.21875 27.1875,6.21875 C26.625,6.21875 26.1823,6.40365 25.8594,6.77344 C25.5365,7.14323 25.375,7.65104 25.375,8.29688 L25.375,12 L24.2969,12 L24.2969,8.07812 C24.2969,7.44271 24.1849,6.97396 23.9609,6.67188 C23.737,6.36979 23.3906,6.21875 22.9219,6.21875 C22.3698,6.21875 21.9323,6.40365 21.6094,6.77344 C21.2865,7.14323 21.125,7.65104 21.125,8.29688 L21.125,12 L20.0469,12 L20.0469,5.4375 L21.125,5.4375 L21.125,6.45312 C21.375,6.05729 21.6719,5.76302 22.0156,5.57031 C22.3594,5.3776 22.7656,5.28125 23.2344,5.28125 C23.7135,5.28125 24.1198,5.40104 24.4531,5.64062 C24.7865,5.88021 25.0312,6.23438 25.1875,6.70312 M37.3906,8.45312 L37.3906,8.96875 L32.4219,8.96875 C32.474,9.71875 32.7005,10.2865 33.1016,10.6719 C33.5026,11.0573 34.0573,11.25 34.7656,11.25 C35.1823,11.25 35.5859,11.2005 35.9766,11.1016 C36.3672,11.0026 36.7552,10.849 37.1406,10.6406 L37.1406,11.6719 C36.7448,11.8281 36.3438,11.9505 35.9375,12.0391 C35.5312,12.1276 35.1198,12.1719 34.7031,12.1719 C33.6615,12.1719 32.8333,11.8672 32.2188,11.2578 C31.6042,10.6484 31.2969,9.82292 31.2969,8.78125 C31.2969,7.70833 31.5885,6.85677 32.1719,6.22656 C32.7552,5.59635 33.5365,5.28125 34.5156,5.28125 C35.401,5.28125 36.1016,5.5651 36.6172,6.13281 C37.1328,6.70052 37.3906,7.47396 37.3906,8.45312 M36.3125,8.125 C36.3021,7.54167 36.1354,7.07292 35.8125,6.71875 C35.4896,6.36458 35.0625,6.1875 34.5312,6.1875 C33.9271,6.1875 33.4453,6.35938 33.0859,6.70312 C32.7266,7.04688 32.5208,7.52604 32.4688,8.14062 L36.3125,8.125 M42.9531,6.4375 C42.8281,6.375 42.6953,6.32552 42.5547,6.28906 C42.4141,6.2526 42.2552,6.23438 42.0781,6.23438 C41.474,6.23438 41.0078,6.43229 40.6797,6.82812 C40.3516,7.22396 40.1875,7.79688 40.1875,8.54688 L40.1875,12 L39.1094,12 L39.1094,5.4375 L40.1875,5.4375 L40.1875,6.45312 C40.4167,6.05729 40.7135,5.76302 41.0781,5.57031 C41.4427,5.3776 41.8854,5.28125 42.4062,5.28125 C42.4792,5.28125 42.5599,5.28646 42.6484,5.29688 C42.737,5.30729 42.8333,5.32292 42.9375,5.34375 L42.9531,6.4375 M49.0625,14 L49.0625,14.8281 L42.8281,14.8281 L42.8281,14 L49.0625,14 M54.3906,8.64062 C54.3906,7.85938 54.2292,7.25521 53.9062,6.82812 C53.5833,6.40104 53.1302,6.1875 52.5469,6.1875 C51.974,6.1875 51.526,6.40104 51.2031,6.82812 C50.8802,7.25521 50.7188,7.85938 50.7188,8.64062 C50.7188,9.42188 50.8802,10.026 51.2031,10.4531 C51.526,10.8802 51.974,11.0938 52.5469,11.0938 C53.1302,11.0938 53.5833,10.8802 53.9062,10.4531 C54.2292,10.026 54.3906,9.42188 54.3906,8.64062 M55.4688,11.1875 C55.4688,12.3021 55.2214,13.1328 54.7266,13.6797 C54.2318,14.2266 53.4688,14.5 52.4375,14.5 C52.0625,14.5 51.7057,14.4714 51.3672,14.4141 C51.0286,14.3568 50.7031,14.2708 50.3906,14.1562 L50.3906,13.1094 C50.7031,13.276 51.0156,13.401 51.3281,13.4844 C51.6406,13.5677 51.9531,13.6094 52.2656,13.6094 C52.974,13.6094 53.5052,13.4245 53.8594,13.0547 C54.2135,12.6849 54.3906,12.125 54.3906,11.375 L54.3906,10.8438 C54.1615,11.2292 53.875,11.5182 53.5312,11.7109 C53.1875,11.9036 52.7708,12 52.2812,12 C51.4792,12 50.8307,11.6927 50.3359,11.0781 C49.8411,10.4635 49.5938,9.65104 49.5938,8.64062 C49.5938,7.63021 49.8411,6.81771 50.3359,6.20312 C50.8307,5.58854 51.4792,5.28125 52.2812,5.28125 C52.7708,5.28125 53.1875,5.3776 53.5312,5.57031 C53.875,5.76302 54.1615,6.05208 54.3906,6.4375 L54.3906,5.4375 L55.4688,5.4375 L55.4688,11.1875 M57.5625,9.40625 L57.5625,5.4375 L58.6406,5.4375 L58.6406,9.375 C58.6406,9.98958 58.763,10.4531 59.0078,10.7656 C59.2526,11.0781 59.6146,11.2344 60.0938,11.2344 C60.6771,11.2344 61.138,11.0495 61.4766,10.6797 C61.8151,10.3099 61.9844,9.80208 61.9844,9.15625 L61.9844,5.4375 L63.0625,5.4375 L63.0625,12 L61.9844,12 L61.9844,10.9844 C61.724,11.3906 61.4219,11.6901 61.0781,11.8828 C60.7344,12.0755 60.3333,12.1719 59.875,12.1719 C59.1146,12.1719 58.5391,11.9375 58.1484,11.4688 C57.7578,11 57.5625,10.3125 57.5625,9.40625 M65.2656,5.4375 L66.3438,5.4375 L66.3438,12 L65.2656,12 L65.2656,5.4375 M65.2656,2.875 L66.3438,2.875 L66.3438,4.25 L65.2656,4.25 L65.2656,2.875"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,801.492,1371.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,801.492,1371.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1141.5,-789.94 L1344.5,-789.94 L1344.5,-754.94 L1141.5,-754.94 L1141.5,-789.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2318.08,933.878)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2318.08,933.878)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,2318.08,933.878)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M95.7031,2.875 L96.7812,2.875 L96.7812,12 L95.7031,12 L95.7031,2.875 M101.578,6.1875 C101.005,6.1875 100.549,6.41406 100.211,6.86719 C99.8724,7.32031 99.7031,7.9375 99.7031,8.71875 C99.7031,9.51042 99.8698,10.1302 100.203,10.5781 C100.536,11.026 100.995,11.25 101.578,11.25 C102.151,11.25 102.607,11.0234 102.945,10.5703 C103.284,10.1172 103.453,9.5 103.453,8.71875 C103.453,7.94792 103.284,7.33333 102.945,6.875 C102.607,6.41667 102.151,6.1875 101.578,6.1875 M101.578,5.28125 C102.516,5.28125 103.253,5.58594 103.789,6.19531 C104.326,6.80469 104.594,7.64583 104.594,8.71875 C104.594,9.79167 104.326,10.6354 103.789,11.25 C103.253,11.8646 102.516,12.1719 101.578,12.1719 C100.641,12.1719 99.9036,11.8646 99.3672,11.25 C98.8307,10.6354 98.5625,9.79167 98.5625,8.71875 C98.5625,7.64583 98.8307,6.80469 99.3672,6.19531 C99.9036,5.58594 100.641,5.28125 101.578,5.28125 M109.344,8.70312 C108.479,8.70312 107.878,8.80208 107.539,9 C107.201,9.19792 107.031,9.53646 107.031,10.0156 C107.031,10.401 107.159,10.7057 107.414,10.9297 C107.669,11.1536 108.01,11.2656 108.438,11.2656 C109.042,11.2656 109.523,11.0547 109.883,10.6328 C110.242,10.2109 110.422,9.64583 110.422,8.9375 L110.422,8.70312 L109.344,8.70312 M111.5,8.25 L111.5,12 L110.422,12 L110.422,11 C110.172,11.3958 109.865,11.6901 109.5,11.8828 C109.135,12.0755 108.688,12.1719 108.156,12.1719 C107.479,12.1719 106.943,11.9818 106.547,11.6016 C106.151,11.2214 105.953,10.7188 105.953,10.0938 C105.953,9.35417 106.201,8.79688 106.695,8.42188 C107.19,8.04688 107.927,7.85938 108.906,7.85938 L110.422,7.85938 L110.422,7.75 C110.422,7.25 110.258,6.86458 109.93,6.59375 C109.602,6.32292 109.146,6.1875 108.562,6.1875 C108.188,6.1875 107.82,6.23438 107.461,6.32812 C107.102,6.42188 106.76,6.55729 106.438,6.73438 L106.438,5.73438 C106.833,5.57812 107.216,5.46354 107.586,5.39062 C107.956,5.31771 108.318,5.28125 108.672,5.28125 C109.62,5.28125 110.328,5.52604 110.797,6.01562 C111.266,6.50521 111.5,7.25 111.5,8.25 M118.031,6.4375 L118.031,2.875 L119.109,2.875 L119.109,12 L118.031,12 L118.031,11.0156 C117.802,11.401 117.516,11.6901 117.172,11.8828 C116.828,12.0755 116.411,12.1719 115.922,12.1719 C115.13,12.1719 114.484,11.8542 113.984,11.2188 C113.484,10.5833 113.234,9.75 113.234,8.71875 C113.234,7.6875 113.484,6.85677 113.984,6.22656 C114.484,5.59635 115.13,5.28125 115.922,5.28125 C116.411,5.28125 116.828,5.375 117.172,5.5625 C117.516,5.75 117.802,6.04167 118.031,6.4375 M114.359,8.71875 C114.359,9.51042 114.521,10.1328 114.844,10.5859 C115.167,11.0391 115.615,11.2656 116.188,11.2656 C116.76,11.2656 117.211,11.0391 117.539,10.5859 C117.867,10.1328 118.031,9.51042 118.031,8.71875 C118.031,7.92708 117.867,7.30729 117.539,6.85938 C117.211,6.41146 116.76,6.1875 116.188,6.1875 C115.615,6.1875 115.167,6.41146 114.844,6.85938 C114.521,7.30729 114.359,7.92708 114.359,8.71875 M126.938,8.45312 L126.938,8.96875 L121.969,8.96875 C122.021,9.71875 122.247,10.2865 122.648,10.6719 C123.049,11.0573 123.604,11.25 124.312,11.25 C124.729,11.25 125.133,11.2005 125.523,11.1016 C125.914,11.0026 126.302,10.849 126.688,10.6406 L126.688,11.6719 C126.292,11.8281 125.891,11.9505 125.484,12.0391 C125.078,12.1276 124.667,12.1719 124.25,12.1719 C123.208,12.1719 122.38,11.8672 121.766,11.2578 C121.151,10.6484 120.844,9.82292 120.844,8.78125 C120.844,7.70833 121.135,6.85677 121.719,6.22656 C122.302,5.59635 123.083,5.28125 124.062,5.28125 C124.948,5.28125 125.648,5.5651 126.164,6.13281 C126.68,6.70052 126.938,7.47396 126.938,8.45312 M125.859,8.125 C125.849,7.54167 125.682,7.07292 125.359,6.71875 C125.036,6.36458 124.609,6.1875 124.078,6.1875 C123.474,6.1875 122.992,6.35938 122.633,6.70312 C122.273,7.04688 122.068,7.52604 122.016,8.14062 L125.859,8.125 M133.016,6.4375 L133.016,2.875 L134.094,2.875 L134.094,12 L133.016,12 L133.016,11.0156 C132.786,11.401 132.5,11.6901 132.156,11.8828 C131.812,12.0755 131.396,12.1719 130.906,12.1719 C130.115,12.1719 129.469,11.8542 128.969,11.2188 C128.469,10.5833 128.219,9.75 128.219,8.71875 C128.219,7.6875 128.469,6.85677 128.969,6.22656 C129.469,5.59635 130.115,5.28125 130.906,5.28125 C131.396,5.28125 131.812,5.375 132.156,5.5625 C132.5,5.75 132.786,6.04167 133.016,6.4375 M129.344,8.71875 C129.344,9.51042 129.505,10.1328 129.828,10.5859 C130.151,11.0391 130.599,11.2656 131.172,11.2656 C131.745,11.2656 132.195,11.0391 132.523,10.5859 C132.852,10.1328 133.016,9.51042 133.016,8.71875 C133.016,7.92708 132.852,7.30729 132.523,6.85938 C132.195,6.41146 131.745,6.1875 131.172,6.1875 C130.599,6.1875 130.151,6.41146 129.828,6.85938 C129.505,7.30729 129.344,7.92708 129.344,8.71875 M141.297,14 L141.297,14.8281 L135.062,14.8281 L135.062,14 L141.297,14 M147.406,6.70312 C147.677,6.21354 148,5.85417 148.375,5.625 C148.75,5.39583 149.193,5.28125 149.703,5.28125 C150.391,5.28125 150.919,5.52083 151.289,6 C151.659,6.47917 151.844,7.15625 151.844,8.03125 L151.844,12 L150.766,12 L150.766,8.07812 C150.766,7.44271 150.654,6.97396 150.43,6.67188 C150.206,6.36979 149.865,6.21875 149.406,6.21875 C148.844,6.21875 148.401,6.40365 148.078,6.77344 C147.755,7.14323 147.594,7.65104 147.594,8.29688 L147.594,12 L146.516,12 L146.516,8.07812 C146.516,7.44271 146.404,6.97396 146.18,6.67188 C145.956,6.36979 145.609,6.21875 145.141,6.21875 C144.589,6.21875 144.151,6.40365 143.828,6.77344 C143.505,7.14323 143.344,7.65104 143.344,8.29688 L143.344,12 L142.266,12 L142.266,5.4375 L143.344,5.4375 L143.344,6.45312 C143.594,6.05729 143.891,5.76302 144.234,5.57031 C144.578,5.3776 144.984,5.28125 145.453,5.28125 C145.932,5.28125 146.339,5.40104 146.672,5.64062 C147.005,5.88021 147.25,6.23438 147.406,6.70312 M156.969,8.70312 C156.104,8.70312 155.503,8.80208 155.164,9 C154.826,9.19792 154.656,9.53646 154.656,10.0156 C154.656,10.401 154.784,10.7057 155.039,10.9297 C155.294,11.1536 155.635,11.2656 156.062,11.2656 C156.667,11.2656 157.148,11.0547 157.508,10.6328 C157.867,10.2109 158.047,9.64583 158.047,8.9375 L158.047,8.70312 L156.969,8.70312 M159.125,8.25 L159.125,12 L158.047,12 L158.047,11 C157.797,11.3958 157.49,11.6901 157.125,11.8828 C156.76,12.0755 156.312,12.1719 155.781,12.1719 C155.104,12.1719 154.568,11.9818 154.172,11.6016 C153.776,11.2214 153.578,10.7188 153.578,10.0938 C153.578,9.35417 153.826,8.79688 154.32,8.42188 C154.815,8.04688 155.552,7.85938 156.531,7.85938 L158.047,7.85938 L158.047,7.75 C158.047,7.25 157.883,6.86458 157.555,6.59375 C157.227,6.32292 156.771,6.1875 156.188,6.1875 C155.812,6.1875 155.445,6.23438 155.086,6.32812 C154.727,6.42188 154.385,6.55729 154.062,6.73438 L154.062,5.73438 C154.458,5.57812 154.841,5.46354 155.211,5.39062 C155.581,5.31771 155.943,5.28125 156.297,5.28125 C157.245,5.28125 157.953,5.52604 158.422,6.01562 C158.891,6.50521 159.125,7.25 159.125,8.25 M162.375,11.0156 L162.375,14.5 L161.297,14.5 L161.297,5.4375 L162.375,5.4375 L162.375,6.4375 C162.604,6.04167 162.891,5.75 163.234,5.5625 C163.578,5.375 163.99,5.28125 164.469,5.28125 C165.271,5.28125 165.922,5.59635 166.422,6.22656 C166.922,6.85677 167.172,7.6875 167.172,8.71875 C167.172,9.75 166.922,10.5833 166.422,11.2188 C165.922,11.8542 165.271,12.1719 164.469,12.1719 C163.99,12.1719 163.578,12.0755 163.234,11.8828 C162.891,11.6901 162.604,11.401 162.375,11.0156 M166.047,8.71875 C166.047,7.92708 165.883,7.30729 165.555,6.85938 C165.227,6.41146 164.781,6.1875 164.219,6.1875 C163.646,6.1875 163.195,6.41146 162.867,6.85938 C162.539,7.30729 162.375,7.92708 162.375,8.71875 C162.375,9.51042 162.539,10.1328 162.867,10.5859 C163.195,11.0391 163.646,11.2656 164.219,11.2656 C164.781,11.2656 165.227,11.0391 165.555,10.5859 C165.883,10.1328 166.047,9.51042 166.047,8.71875 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2318.08,933.878)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,2318.08,933.878)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M580.499,-308.94 L761.501,-308.94 L761.501,-273.94 L580.499,-273.94 L580.499,-308.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1198.46,1895.83)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1198.46,1895.83)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1198.46,1895.83)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.625,8.03125 L10.625,12 L9.54688,12 L9.54688,8.07812 C9.54688,7.45312 9.42448,6.98698 9.17969,6.67969 C8.9349,6.3724 8.57292,6.21875 8.09375,6.21875 C7.51042,6.21875 7.04948,6.40365 6.71094,6.77344 C6.3724,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,2.875 L6.20312,2.875 L6.20312,6.45312 C6.46354,6.05729 6.76823,5.76302 7.11719,5.57031 C7.46615,5.3776 7.86979,5.28125 8.32812,5.28125 C9.07812,5.28125 9.64844,5.51302 10.0391,5.97656 C10.4297,6.4401 10.625,7.125 10.625,8.03125 M15.2969,6.1875 C14.724,6.1875 14.2682,6.41406 13.9297,6.86719 C13.5911,7.32031 13.4219,7.9375 13.4219,8.71875 C13.4219,9.51042 13.5885,10.1302 13.9219,10.5781 C14.2552,11.026 14.7135,11.25 15.2969,11.25 C15.8698,11.25 16.3255,11.0234 16.6641,10.5703 C17.0026,10.1172 17.1719,9.5 17.1719,8.71875 C17.1719,7.94792 17.0026,7.33333 16.6641,6.875 C16.3255,6.41667 15.8698,6.1875 15.2969,6.1875 M15.2969,5.28125 C16.2344,5.28125 16.9714,5.58594 17.5078,6.19531 C18.0443,6.80469 18.3125,7.64583 18.3125,8.71875 C18.3125,9.79167 18.0443,10.6354 17.5078,11.25 C16.9714,11.8646 16.2344,12.1719 15.2969,12.1719 C14.3594,12.1719 13.6224,11.8646 13.0859,11.25 C12.5495,10.6354 12.2812,9.79167 12.2812,8.71875 C12.2812,7.64583 12.5495,6.80469 13.0859,6.19531 C13.6224,5.58594 14.3594,5.28125 15.2969,5.28125 M25.1875,6.70312 C25.4583,6.21354 25.7812,5.85417 26.1562,5.625 C26.5312,5.39583 26.974,5.28125 27.4844,5.28125 C28.1719,5.28125 28.7005,5.52083 29.0703,6 C29.4401,6.47917 29.625,7.15625 29.625,8.03125 L29.625,12 L28.5469,12 L28.5469,8.07812 C28.5469,7.44271 28.4349,6.97396 28.2109,6.67188 C27.987,6.36979 27.6458,6.21875 27.1875,6.21875 C26.625,6.21875 26.1823,6.40365 25.8594,6.77344 C25.5365,7.14323 25.375,7.65104 25.375,8.29688 L25.375,12 L24.2969,12 L24.2969,8.07812 C24.2969,7.44271 24.1849,6.97396 23.9609,6.67188 C23.737,6.36979 23.3906,6.21875 22.9219,6.21875 C22.3698,6.21875 21.9323,6.40365 21.6094,6.77344 C21.2865,7.14323 21.125,7.65104 21.125,8.29688 L21.125,12 L20.0469,12 L20.0469,5.4375 L21.125,5.4375 L21.125,6.45312 C21.375,6.05729 21.6719,5.76302 22.0156,5.57031 C22.3594,5.3776 22.7656,5.28125 23.2344,5.28125 C23.7135,5.28125 24.1198,5.40104 24.4531,5.64062 C24.7865,5.88021 25.0312,6.23438 25.1875,6.70312 M37.3906,8.45312 L37.3906,8.96875 L32.4219,8.96875 C32.474,9.71875 32.7005,10.2865 33.1016,10.6719 C33.5026,11.0573 34.0573,11.25 34.7656,11.25 C35.1823,11.25 35.5859,11.2005 35.9766,11.1016 C36.3672,11.0026 36.7552,10.849 37.1406,10.6406 L37.1406,11.6719 C36.7448,11.8281 36.3438,11.9505 35.9375,12.0391 C35.5312,12.1276 35.1198,12.1719 34.7031,12.1719 C33.6615,12.1719 32.8333,11.8672 32.2188,11.2578 C31.6042,10.6484 31.2969,9.82292 31.2969,8.78125 C31.2969,7.70833 31.5885,6.85677 32.1719,6.22656 C32.7552,5.59635 33.5365,5.28125 34.5156,5.28125 C35.401,5.28125 36.1016,5.5651 36.6172,6.13281 C37.1328,6.70052 37.3906,7.47396 37.3906,8.45312 M36.3125,8.125 C36.3021,7.54167 36.1354,7.07292 35.8125,6.71875 C35.4896,6.36458 35.0625,6.1875 34.5312,6.1875 C33.9271,6.1875 33.4453,6.35938 33.0859,6.70312 C32.7266,7.04688 32.5208,7.52604 32.4688,8.14062 L36.3125,8.125 M42.9531,6.4375 C42.8281,6.375 42.6953,6.32552 42.5547,6.28906 C42.4141,6.2526 42.2552,6.23438 42.0781,6.23438 C41.474,6.23438 41.0078,6.43229 40.6797,6.82812 C40.3516,7.22396 40.1875,7.79688 40.1875,8.54688 L40.1875,12 L39.1094,12 L39.1094,5.4375 L40.1875,5.4375 L40.1875,6.45312 C40.4167,6.05729 40.7135,5.76302 41.0781,5.57031 C41.4427,5.3776 41.8854,5.28125 42.4062,5.28125 C42.4792,5.28125 42.5599,5.28646 42.6484,5.29688 C42.737,5.30729 42.8333,5.32292 42.9375,5.34375 L42.9531,6.4375 M49.0625,14 L49.0625,14.8281 L42.8281,14.8281 L42.8281,14 L49.0625,14 M55.5312,8.03125 L55.5312,12 L54.4531,12 L54.4531,8.07812 C54.4531,7.45312 54.3307,6.98698 54.0859,6.67969 C53.8411,6.3724 53.4792,6.21875 53,6.21875 C52.4167,6.21875 51.9557,6.40365 51.6172,6.77344 C51.2786,7.14323 51.1094,7.65104 51.1094,8.29688 L51.1094,12 L50.0312,12 L50.0312,5.4375 L51.1094,5.4375 L51.1094,6.45312 C51.3698,6.05729 51.6745,5.76302 52.0234,5.57031 C52.3724,5.3776 52.776,5.28125 53.2344,5.28125 C53.9844,5.28125 54.5547,5.51302 54.9453,5.97656 C55.3359,6.4401 55.5312,7.125 55.5312,8.03125 M60.6406,8.70312 C59.776,8.70312 59.1745,8.80208 58.8359,9 C58.4974,9.19792 58.3281,9.53646 58.3281,10.0156 C58.3281,10.401 58.4557,10.7057 58.7109,10.9297 C58.9661,11.1536 59.3073,11.2656 59.7344,11.2656 C60.3385,11.2656 60.8203,11.0547 61.1797,10.6328 C61.5391,10.2109 61.7188,9.64583 61.7188,8.9375 L61.7188,8.70312 L60.6406,8.70312 M62.7969,8.25 L62.7969,12 L61.7188,12 L61.7188,11 C61.4688,11.3958 61.1615,11.6901 60.7969,11.8828 C60.4323,12.0755 59.9844,12.1719 59.4531,12.1719 C58.776,12.1719 58.2396,11.9818 57.8438,11.6016 C57.4479,11.2214 57.25,10.7188 57.25,10.0938 C57.25,9.35417 57.4974,8.79688 57.9922,8.42188 C58.487,8.04688 59.224,7.85938 60.2031,7.85938 L61.7188,7.85938 L61.7188,7.75 C61.7188,7.25 61.5547,6.86458 61.2266,6.59375 C60.8984,6.32292 60.4427,6.1875 59.8594,6.1875 C59.4844,6.1875 59.1172,6.23438 58.7578,6.32812 C58.3984,6.42188 58.0573,6.55729 57.7344,6.73438 L57.7344,5.73438 C58.1302,5.57812 58.513,5.46354 58.8828,5.39062 C59.2526,5.31771 59.6146,5.28125 59.9688,5.28125 C60.9167,5.28125 61.625,5.52604 62.0938,6.01562 C62.5625,6.50521 62.7969,7.25 62.7969,8.25 M64.2344,5.4375 L65.375,5.4375 L67.4219,10.9375 L69.4844,5.4375 L70.625,5.4375 L68.1562,12 L66.6875,12 L64.2344,5.4375 M72.0938,5.4375 L73.1719,5.4375 L73.1719,12 L72.0938,12 L72.0938,5.4375 M72.0938,2.875 L73.1719,2.875 L73.1719,4.25 L72.0938,4.25 L72.0938,2.875 M79.75,8.64062 C79.75,7.85938 79.5885,7.25521 79.2656,6.82812 C78.9427,6.40104 78.4896,6.1875 77.9062,6.1875 C77.3333,6.1875 76.8854,6.40104 76.5625,6.82812 C76.2396,7.25521 76.0781,7.85938 76.0781,8.64062 C76.0781,9.42188 76.2396,10.026 76.5625,10.4531 C76.8854,10.8802 77.3333,11.0938 77.9062,11.0938 C78.4896,11.0938 78.9427,10.8802 79.2656,10.4531 C79.5885,10.026 79.75,9.42188 79.75,8.64062 M80.8281,11.1875 C80.8281,12.3021 80.5807,13.1328 80.0859,13.6797 C79.5911,14.2266 78.8281,14.5 77.7969,14.5 C77.4219,14.5 77.0651,14.4714 76.7266,14.4141 C76.388,14.3568 76.0625,14.2708 75.75,14.1562 L75.75,13.1094 C76.0625,13.276 76.375,13.401 76.6875,13.4844 C77,13.5677 77.3125,13.6094 77.625,13.6094 C78.3333,13.6094 78.8646,13.4245 79.2188,13.0547 C79.5729,12.6849 79.75,12.125 79.75,11.375 L79.75,10.8438 C79.5208,11.2292 79.2344,11.5182 78.8906,11.7109 C78.5469,11.9036 78.1302,12 77.6406,12 C76.8385,12 76.1901,11.6927 75.6953,11.0781 C75.2005,10.4635 74.9531,9.65104 74.9531,8.64062 C74.9531,7.63021 75.2005,6.81771 75.6953,6.20312 C76.1901,5.58854 76.8385,5.28125 77.6406,5.28125 C78.1302,5.28125 78.5469,5.3776 78.8906,5.57031 C79.2344,5.76302 79.5208,6.05208 79.75,6.4375 L79.75,5.4375 L80.8281,5.4375 L80.8281,11.1875 M86.0156,8.70312 C85.151,8.70312 84.5495,8.80208 84.2109,9 C83.8724,9.19792 83.7031,9.53646 83.7031,10.0156 C83.7031,10.401 83.8307,10.7057 84.0859,10.9297 C84.3411,11.1536 84.6823,11.2656 85.1094,11.2656 C85.7135,11.2656 86.1953,11.0547 86.5547,10.6328 C86.9141,10.2109 87.0938,9.64583 87.0938,8.9375 L87.0938,8.70312 L86.0156,8.70312 M88.1719,8.25 L88.1719,12 L87.0938,12 L87.0938,11 C86.8438,11.3958 86.5365,11.6901 86.1719,11.8828 C85.8073,12.0755 85.3594,12.1719 84.8281,12.1719 C84.151,12.1719 83.6146,11.9818 83.2188,11.6016 C82.8229,11.2214 82.625,10.7188 82.625,10.0938 C82.625,9.35417 82.8724,8.79688 83.3672,8.42188 C83.862,8.04688 84.599,7.85938 85.5781,7.85938 L87.0938,7.85938 L87.0938,7.75 C87.0938,7.25 86.9297,6.86458 86.6016,6.59375 C86.2734,6.32292 85.8177,6.1875 85.2344,6.1875 C84.8594,6.1875 84.4922,6.23438 84.1328,6.32812 C83.7734,6.42188 83.4323,6.55729 83.1094,6.73438 L83.1094,5.73438 C83.5052,5.57812 83.888,5.46354 84.2578,5.39062 C84.6276,5.31771 84.9896,5.28125 85.3438,5.28125 C86.2917,5.28125 87,5.52604 87.4688,6.01562 C87.9375,6.50521 88.1719,7.25 88.1719,8.25 M91.4531,3.57812 L91.4531,5.4375 L93.6719,5.4375 L93.6719,6.28125 L91.4531,6.28125 L91.4531,9.84375 C91.4531,10.375 91.526,10.7161 91.6719,10.8672 C91.8177,11.0182 92.1146,11.0938 92.5625,11.0938 L93.6719,11.0938 L93.6719,12 L92.5625,12 C91.7292,12 91.1536,11.8438 90.8359,11.5312 C90.5182,11.2188 90.3594,10.6562 90.3594,9.84375 L90.3594,6.28125 L89.5781,6.28125 L89.5781,5.4375 L90.3594,5.4375 L90.3594,3.57812 L91.4531,3.57812 M95.0781,5.4375 L96.1562,5.4375 L96.1562,12 L95.0781,12 L95.0781,5.4375 M95.0781,2.875 L96.1562,2.875 L96.1562,4.25 L95.0781,4.25 L95.0781,2.875 M100.953,6.1875 C100.38,6.1875 99.9245,6.41406 99.5859,6.86719 C99.2474,7.32031 99.0781,7.9375 99.0781,8.71875 C99.0781,9.51042 99.2448,10.1302 99.5781,10.5781 C99.9115,11.026 100.37,11.25 100.953,11.25 C101.526,11.25 101.982,11.0234 102.32,10.5703 C102.659,10.1172 102.828,9.5 102.828,8.71875 C102.828,7.94792 102.659,7.33333 102.32,6.875 C101.982,6.41667 101.526,6.1875 100.953,6.1875 M100.953,5.28125 C101.891,5.28125 102.628,5.58594 103.164,6.19531 C103.701,6.80469 103.969,7.64583 103.969,8.71875 C103.969,9.79167 103.701,10.6354 103.164,11.25 C102.628,11.8646 101.891,12.1719 100.953,12.1719 C100.016,12.1719 99.2786,11.8646 98.7422,11.25 C98.2057,10.6354 97.9375,9.79167 97.9375,8.71875 C97.9375,7.64583 98.2057,6.80469 98.7422,6.19531 C99.2786,5.58594 100.016,5.28125 100.953,5.28125 M111.203,8.03125 L111.203,12 L110.125,12 L110.125,8.07812 C110.125,7.45312 110.003,6.98698 109.758,6.67969 C109.513,6.3724 109.151,6.21875 108.672,6.21875 C108.089,6.21875 107.628,6.40365 107.289,6.77344 C106.951,7.14323 106.781,7.65104 106.781,8.29688 L106.781,12 L105.703,12 L105.703,5.4375 L106.781,5.4375 L106.781,6.45312 C107.042,6.05729 107.346,5.76302 107.695,5.57031 C108.044,5.3776 108.448,5.28125 108.906,5.28125 C109.656,5.28125 110.227,5.51302 110.617,5.97656 C111.008,6.4401 111.203,7.125 111.203,8.03125 M115.25,3.25 L116.25,3.25 L113.203,13.1094 L112.203,13.1094 L115.25,3.25 M118.406,11.0156 L118.406,14.5 L117.328,14.5 L117.328,5.4375 L118.406,5.4375 L118.406,6.4375 C118.635,6.04167 118.922,5.75 119.266,5.5625 C119.609,5.375 120.021,5.28125 120.5,5.28125 C121.302,5.28125 121.953,5.59635 122.453,6.22656 C122.953,6.85677 123.203,7.6875 123.203,8.71875 C123.203,9.75 122.953,10.5833 122.453,11.2188 C121.953,11.8542 121.302,12.1719 120.5,12.1719 C120.021,12.1719 119.609,12.0755 119.266,11.8828 C118.922,11.6901 118.635,11.401 118.406,11.0156 M122.078,8.71875 C122.078,7.92708 121.914,7.30729 121.586,6.85938 C121.258,6.41146 120.812,6.1875 120.25,6.1875 C119.677,6.1875 119.227,6.41146 118.898,6.85938 C118.57,7.30729 118.406,7.92708 118.406,8.71875 C118.406,9.51042 118.57,10.1328 118.898,10.5859 C119.227,11.0391 119.677,11.2656 120.25,11.2656 C120.812,11.2656 121.258,11.0391 121.586,10.5859 C121.914,10.1328 122.078,9.51042 122.078,8.71875 M127.953,8.70312 C127.089,8.70312 126.487,8.80208 126.148,9 C125.81,9.19792 125.641,9.53646 125.641,10.0156 C125.641,10.401 125.768,10.7057 126.023,10.9297 C126.279,11.1536 126.62,11.2656 127.047,11.2656 C127.651,11.2656 128.133,11.0547 128.492,10.6328 C128.852,10.2109 129.031,9.64583 129.031,8.9375 L129.031,8.70312 L127.953,8.70312 M130.109,8.25 L130.109,12 L129.031,12 L129.031,11 C128.781,11.3958 128.474,11.6901 128.109,11.8828 C127.745,12.0755 127.297,12.1719 126.766,12.1719 C126.089,12.1719 125.552,11.9818 125.156,11.6016 C124.76,11.2214 124.562,10.7188 124.562,10.0938 C124.562,9.35417 124.81,8.79688 125.305,8.42188 C125.799,8.04688 126.536,7.85938 127.516,7.85938 L129.031,7.85938 L129.031,7.75 C129.031,7.25 128.867,6.86458 128.539,6.59375 C128.211,6.32292 127.755,6.1875 127.172,6.1875 C126.797,6.1875 126.43,6.23438 126.07,6.32812 C125.711,6.42188 125.37,6.55729 125.047,6.73438 L125.047,5.73438 C125.443,5.57812 125.826,5.46354 126.195,5.39062 C126.565,5.31771 126.927,5.28125 127.281,5.28125 C128.229,5.28125 128.938,5.52604 129.406,6.01562 C129.875,6.50521 130.109,7.25 130.109,8.25 M133.391,3.57812 L133.391,5.4375 L135.609,5.4375 L135.609,6.28125 L133.391,6.28125 L133.391,9.84375 C133.391,10.375 133.464,10.7161 133.609,10.8672 C133.755,11.0182 134.052,11.0938 134.5,11.0938 L135.609,11.0938 L135.609,12 L134.5,12 C133.667,12 133.091,11.8438 132.773,11.5312 C132.456,11.2188 132.297,10.6562 132.297,9.84375 L132.297,6.28125 L131.516,6.28125 L131.516,5.4375 L132.297,5.4375 L132.297,3.57812 L133.391,3.57812 M142.484,8.03125 L142.484,12 L141.406,12 L141.406,8.07812 C141.406,7.45312 141.284,6.98698 141.039,6.67969 C140.794,6.3724 140.432,6.21875 139.953,6.21875 C139.37,6.21875 138.909,6.40365 138.57,6.77344 C138.232,7.14323 138.062,7.65104 138.062,8.29688 L138.062,12 L136.984,12 L136.984,2.875 L138.062,2.875 L138.062,6.45312 C138.323,6.05729 138.628,5.76302 138.977,5.57031 C139.326,5.3776 139.729,5.28125 140.188,5.28125 C140.938,5.28125 141.508,5.51302 141.898,5.97656 C142.289,6.4401 142.484,7.125 142.484,8.03125 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1198.46,1895.83)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1198.46,1895.83)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M538.502,-516.94 L803.498,-516.94 L803.498,-481.94 L538.502,-481.94 L538.502,-516.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1120.38,1479.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1120.38,1479.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1120.38,1479.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M96.7812,3.57812 L96.7812,5.4375 L99,5.4375 L99,6.28125 L96.7812,6.28125 L96.7812,9.84375 C96.7812,10.375 96.8542,10.7161 97,10.8672 C97.1458,11.0182 97.4427,11.0938 97.8906,11.0938 L99,11.0938 L99,12 L97.8906,12 C97.0573,12 96.4818,11.8438 96.1641,11.5312 C95.8464,11.2188 95.6875,10.6562 95.6875,9.84375 L95.6875,6.28125 L94.9062,6.28125 L94.9062,5.4375 L95.6875,5.4375 L95.6875,3.57812 L96.7812,3.57812 M102.953,6.1875 C102.38,6.1875 101.924,6.41406 101.586,6.86719 C101.247,7.32031 101.078,7.9375 101.078,8.71875 C101.078,9.51042 101.245,10.1302 101.578,10.5781 C101.911,11.026 102.37,11.25 102.953,11.25 C103.526,11.25 103.982,11.0234 104.32,10.5703 C104.659,10.1172 104.828,9.5 104.828,8.71875 C104.828,7.94792 104.659,7.33333 104.32,6.875 C103.982,6.41667 103.526,6.1875 102.953,6.1875 M102.953,5.28125 C103.891,5.28125 104.628,5.58594 105.164,6.19531 C105.701,6.80469 105.969,7.64583 105.969,8.71875 C105.969,9.79167 105.701,10.6354 105.164,11.25 C104.628,11.8646 103.891,12.1719 102.953,12.1719 C102.016,12.1719 101.279,11.8646 100.742,11.25 C100.206,10.6354 99.9375,9.79167 99.9375,8.71875 C99.9375,7.64583 100.206,6.80469 100.742,6.19531 C101.279,5.58594 102.016,5.28125 102.953,5.28125 M112.062,8.64062 C112.062,7.85938 111.901,7.25521 111.578,6.82812 C111.255,6.40104 110.802,6.1875 110.219,6.1875 C109.646,6.1875 109.198,6.40104 108.875,6.82812 C108.552,7.25521 108.391,7.85938 108.391,8.64062 C108.391,9.42188 108.552,10.026 108.875,10.4531 C109.198,10.8802 109.646,11.0938 110.219,11.0938 C110.802,11.0938 111.255,10.8802 111.578,10.4531 C111.901,10.026 112.062,9.42188 112.062,8.64062 M113.141,11.1875 C113.141,12.3021 112.893,13.1328 112.398,13.6797 C111.904,14.2266 111.141,14.5 110.109,14.5 C109.734,14.5 109.378,14.4714 109.039,14.4141 C108.701,14.3568 108.375,14.2708 108.062,14.1562 L108.062,13.1094 C108.375,13.276 108.688,13.401 109,13.4844 C109.312,13.5677 109.625,13.6094 109.938,13.6094 C110.646,13.6094 111.177,13.4245 111.531,13.0547 C111.885,12.6849 112.062,12.125 112.062,11.375 L112.062,10.8438 C111.833,11.2292 111.547,11.5182 111.203,11.7109 C110.859,11.9036 110.443,12 109.953,12 C109.151,12 108.503,11.6927 108.008,11.0781 C107.513,10.4635 107.266,9.65104 107.266,8.64062 C107.266,7.63021 107.513,6.81771 108.008,6.20312 C108.503,5.58854 109.151,5.28125 109.953,5.28125 C110.443,5.28125 110.859,5.3776 111.203,5.57031 C111.547,5.76302 111.833,6.05208 112.062,6.4375 L112.062,5.4375 L113.141,5.4375 L113.141,11.1875 M119.672,8.64062 C119.672,7.85938 119.51,7.25521 119.188,6.82812 C118.865,6.40104 118.411,6.1875 117.828,6.1875 C117.255,6.1875 116.807,6.40104 116.484,6.82812 C116.161,7.25521 116,7.85938 116,8.64062 C116,9.42188 116.161,10.026 116.484,10.4531 C116.807,10.8802 117.255,11.0938 117.828,11.0938 C118.411,11.0938 118.865,10.8802 119.188,10.4531 C119.51,10.026 119.672,9.42188 119.672,8.64062 M120.75,11.1875 C120.75,12.3021 120.503,13.1328 120.008,13.6797 C119.513,14.2266 118.75,14.5 117.719,14.5 C117.344,14.5 116.987,14.4714 116.648,14.4141 C116.31,14.3568 115.984,14.2708 115.672,14.1562 L115.672,13.1094 C115.984,13.276 116.297,13.401 116.609,13.4844 C116.922,13.5677 117.234,13.6094 117.547,13.6094 C118.255,13.6094 118.786,13.4245 119.141,13.0547 C119.495,12.6849 119.672,12.125 119.672,11.375 L119.672,10.8438 C119.443,11.2292 119.156,11.5182 118.812,11.7109 C118.469,11.9036 118.052,12 117.562,12 C116.76,12 116.112,11.6927 115.617,11.0781 C115.122,10.4635 114.875,9.65104 114.875,8.64062 C114.875,7.63021 115.122,6.81771 115.617,6.20312 C116.112,5.58854 116.76,5.28125 117.562,5.28125 C118.052,5.28125 118.469,5.3776 118.812,5.57031 C119.156,5.76302 119.443,6.05208 119.672,6.4375 L119.672,5.4375 L120.75,5.4375 L120.75,11.1875 M122.953,2.875 L124.031,2.875 L124.031,12 L122.953,12 L122.953,2.875 M131.906,8.45312 L131.906,8.96875 L126.938,8.96875 C126.99,9.71875 127.216,10.2865 127.617,10.6719 C128.018,11.0573 128.573,11.25 129.281,11.25 C129.698,11.25 130.102,11.2005 130.492,11.1016 C130.883,11.0026 131.271,10.849 131.656,10.6406 L131.656,11.6719 C131.26,11.8281 130.859,11.9505 130.453,12.0391 C130.047,12.1276 129.635,12.1719 129.219,12.1719 C128.177,12.1719 127.349,11.8672 126.734,11.2578 C126.12,10.6484 125.812,9.82292 125.812,8.78125 C125.812,7.70833 126.104,6.85677 126.688,6.22656 C127.271,5.59635 128.052,5.28125 129.031,5.28125 C129.917,5.28125 130.617,5.5651 131.133,6.13281 C131.648,6.70052 131.906,7.47396 131.906,8.45312 M130.828,8.125 C130.818,7.54167 130.651,7.07292 130.328,6.71875 C130.005,6.36458 129.578,6.1875 129.047,6.1875 C128.443,6.1875 127.961,6.35938 127.602,6.70312 C127.242,7.04688 127.036,7.52604 126.984,8.14062 L130.828,8.125 M138.656,14 L138.656,14.8281 L132.422,14.8281 L132.422,14 L138.656,14 M144.766,6.70312 C145.036,6.21354 145.359,5.85417 145.734,5.625 C146.109,5.39583 146.552,5.28125 147.062,5.28125 C147.75,5.28125 148.279,5.52083 148.648,6 C149.018,6.47917 149.203,7.15625 149.203,8.03125 L149.203,12 L148.125,12 L148.125,8.07812 C148.125,7.44271 148.013,6.97396 147.789,6.67188 C147.565,6.36979 147.224,6.21875 146.766,6.21875 C146.203,6.21875 145.76,6.40365 145.438,6.77344 C145.115,7.14323 144.953,7.65104 144.953,8.29688 L144.953,12 L143.875,12 L143.875,8.07812 C143.875,7.44271 143.763,6.97396 143.539,6.67188 C143.315,6.36979 142.969,6.21875 142.5,6.21875 C141.948,6.21875 141.51,6.40365 141.188,6.77344 C140.865,7.14323 140.703,7.65104 140.703,8.29688 L140.703,12 L139.625,12 L139.625,5.4375 L140.703,5.4375 L140.703,6.45312 C140.953,6.05729 141.25,5.76302 141.594,5.57031 C141.938,5.3776 142.344,5.28125 142.812,5.28125 C143.292,5.28125 143.698,5.40104 144.031,5.64062 C144.365,5.88021 144.609,6.23438 144.766,6.70312 M154.328,8.70312 C153.464,8.70312 152.862,8.80208 152.523,9 C152.185,9.19792 152.016,9.53646 152.016,10.0156 C152.016,10.401 152.143,10.7057 152.398,10.9297 C152.654,11.1536 152.995,11.2656 153.422,11.2656 C154.026,11.2656 154.508,11.0547 154.867,10.6328 C155.227,10.2109 155.406,9.64583 155.406,8.9375 L155.406,8.70312 L154.328,8.70312 M156.484,8.25 L156.484,12 L155.406,12 L155.406,11 C155.156,11.3958 154.849,11.6901 154.484,11.8828 C154.12,12.0755 153.672,12.1719 153.141,12.1719 C152.464,12.1719 151.927,11.9818 151.531,11.6016 C151.135,11.2214 150.938,10.7188 150.938,10.0938 C150.938,9.35417 151.185,8.79688 151.68,8.42188 C152.174,8.04688 152.911,7.85938 153.891,7.85938 L155.406,7.85938 L155.406,7.75 C155.406,7.25 155.242,6.86458 154.914,6.59375 C154.586,6.32292 154.13,6.1875 153.547,6.1875 C153.172,6.1875 152.805,6.23438 152.445,6.32812 C152.086,6.42188 151.745,6.55729 151.422,6.73438 L151.422,5.73438 C151.818,5.57812 152.201,5.46354 152.57,5.39062 C152.94,5.31771 153.302,5.28125 153.656,5.28125 C154.604,5.28125 155.312,5.52604 155.781,6.01562 C156.25,6.50521 156.484,7.25 156.484,8.25 M159.734,11.0156 L159.734,14.5 L158.656,14.5 L158.656,5.4375 L159.734,5.4375 L159.734,6.4375 C159.964,6.04167 160.25,5.75 160.594,5.5625 C160.938,5.375 161.349,5.28125 161.828,5.28125 C162.63,5.28125 163.281,5.59635 163.781,6.22656 C164.281,6.85677 164.531,7.6875 164.531,8.71875 C164.531,9.75 164.281,10.5833 163.781,11.2188 C163.281,11.8542 162.63,12.1719 161.828,12.1719 C161.349,12.1719 160.938,12.0755 160.594,11.8828 C160.25,11.6901 159.964,11.401 159.734,11.0156 M163.406,8.71875 C163.406,7.92708 163.242,7.30729 162.914,6.85938 C162.586,6.41146 162.141,6.1875 161.578,6.1875 C161.005,6.1875 160.555,6.41146 160.227,6.85938 C159.898,7.30729 159.734,7.92708 159.734,8.71875 C159.734,9.51042 159.898,10.1328 160.227,10.5859 C160.555,11.0391 161.005,11.2656 161.578,11.2656 C162.141,11.2656 162.586,11.0391 162.914,10.5859 C163.242,10.1328 163.406,9.51042 163.406,8.71875 M171.297,14 L171.297,14.8281 L165.062,14.8281 L165.062,14 L171.297,14 M171.531,5.4375 L172.672,5.4375 L174.719,10.9375 L176.781,5.4375 L177.922,5.4375 L175.453,12 L173.984,12 L171.531,5.4375 M179.391,5.4375 L180.469,5.4375 L180.469,12 L179.391,12 L179.391,5.4375 M179.391,2.875 L180.469,2.875 L180.469,4.25 L179.391,4.25 L179.391,2.875 M186.906,5.625 L186.906,6.65625 C186.604,6.5 186.289,6.38281 185.961,6.30469 C185.633,6.22656 185.292,6.1875 184.938,6.1875 C184.406,6.1875 184.005,6.26823 183.734,6.42969 C183.464,6.59115 183.328,6.83854 183.328,7.17188 C183.328,7.42188 183.424,7.61719 183.617,7.75781 C183.81,7.89844 184.198,8.03125 184.781,8.15625 L185.141,8.25 C185.911,8.40625 186.458,8.63542 186.781,8.9375 C187.104,9.23958 187.266,9.65625 187.266,10.1875 C187.266,10.8021 187.023,11.2865 186.539,11.6406 C186.055,11.9948 185.391,12.1719 184.547,12.1719 C184.193,12.1719 183.826,12.138 183.445,12.0703 C183.065,12.0026 182.667,11.901 182.25,11.7656 L182.25,10.6406 C182.646,10.849 183.036,11.0052 183.422,11.1094 C183.807,11.2135 184.193,11.2656 184.578,11.2656 C185.078,11.2656 185.466,11.1797 185.742,11.0078 C186.018,10.8359 186.156,10.5885 186.156,10.2656 C186.156,9.97396 186.057,9.75 185.859,9.59375 C185.661,9.4375 185.229,9.28646 184.562,9.14062 L184.188,9.0625 C183.521,8.91667 183.039,8.69792 182.742,8.40625 C182.445,8.11458 182.297,7.71875 182.297,7.21875 C182.297,6.59375 182.516,6.11458 182.953,5.78125 C183.391,5.44792 184.01,5.28125 184.812,5.28125 C185.208,5.28125 185.583,5.3099 185.938,5.36719 C186.292,5.42448 186.615,5.51042 186.906,5.625 M188.969,5.4375 L190.047,5.4375 L190.047,12 L188.969,12 L188.969,5.4375 M188.969,2.875 L190.047,2.875 L190.047,4.25 L188.969,4.25 L188.969,2.875 M197.016,8.71875 C197.016,7.92708 196.852,7.30729 196.523,6.85938 C196.195,6.41146 195.75,6.1875 195.188,6.1875 C194.615,6.1875 194.164,6.41146 193.836,6.85938 C193.508,7.30729 193.344,7.92708 193.344,8.71875 C193.344,9.51042 193.508,10.1328 193.836,10.5859 C194.164,11.0391 194.615,11.2656 195.188,11.2656 C195.75,11.2656 196.195,11.0391 196.523,10.5859 C196.852,10.1328 197.016,9.51042 197.016,8.71875 M193.344,6.4375 C193.573,6.04167 193.859,5.75 194.203,5.5625 C194.547,5.375 194.958,5.28125 195.438,5.28125 C196.24,5.28125 196.891,5.59635 197.391,6.22656 C197.891,6.85677 198.141,7.6875 198.141,8.71875 C198.141,9.75 197.891,10.5833 197.391,11.2188 C196.891,11.8542 196.24,12.1719 195.438,12.1719 C194.958,12.1719 194.547,12.0755 194.203,11.8828 C193.859,11.6901 193.573,11.401 193.344,11.0156 L193.344,12 L192.266,12 L192.266,2.875 L193.344,2.875 L193.344,6.4375 M199.906,5.4375 L200.984,5.4375 L200.984,12 L199.906,12 L199.906,5.4375 M199.906,2.875 L200.984,2.875 L200.984,4.25 L199.906,4.25 L199.906,2.875 M203.234,2.875 L204.312,2.875 L204.312,12 L203.234,12 L203.234,2.875 M206.562,5.4375 L207.641,5.4375 L207.641,12 L206.562,12 L206.562,5.4375 M206.562,2.875 L207.641,2.875 L207.641,4.25 L206.562,4.25 L206.562,2.875 M210.969,3.57812 L210.969,5.4375 L213.188,5.4375 L213.188,6.28125 L210.969,6.28125 L210.969,9.84375 C210.969,10.375 211.042,10.7161 211.188,10.8672 C211.333,11.0182 211.63,11.0938 212.078,11.0938 L213.188,11.0938 L213.188,12 L212.078,12 C211.245,12 210.669,11.8438 210.352,11.5312 C210.034,11.2188 209.875,10.6562 209.875,9.84375 L209.875,6.28125 L209.094,6.28125 L209.094,5.4375 L209.875,5.4375 L209.875,3.57812 L210.969,3.57812 M217.328,12.6094 C217.026,13.3906 216.729,13.901 216.438,14.1406 C216.146,14.3802 215.76,14.5 215.281,14.5 L214.422,14.5 L214.422,13.5938 L215.047,13.5938 C215.349,13.5938 215.581,13.5234 215.742,13.3828 C215.904,13.2422 216.083,12.9115 216.281,12.3906 L216.484,11.8906 L213.828,5.4375 L214.969,5.4375 L217.016,10.5625 L219.078,5.4375 L220.219,5.4375 L217.328,12.6094"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1120.38,1479.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1120.38,1479.85)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M569.501,-570.94 L772.499,-570.94 L772.499,-535.94 L569.501,-535.94 L569.501,-570.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1173.46,1371.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1173.46,1371.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1173.46,1371.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375 M93.5938,3.25 L94.5938,3.25 L91.5469,13.1094 L90.5469,13.1094 L93.5938,3.25 M100.812,6.70312 C101.083,6.21354 101.406,5.85417 101.781,5.625 C102.156,5.39583 102.599,5.28125 103.109,5.28125 C103.797,5.28125 104.326,5.52083 104.695,6 C105.065,6.47917 105.25,7.15625 105.25,8.03125 L105.25,12 L104.172,12 L104.172,8.07812 C104.172,7.44271 104.06,6.97396 103.836,6.67188 C103.612,6.36979 103.271,6.21875 102.812,6.21875 C102.25,6.21875 101.807,6.40365 101.484,6.77344 C101.161,7.14323 101,7.65104 101,8.29688 L101,12 L99.9219,12 L99.9219,8.07812 C99.9219,7.44271 99.8099,6.97396 99.5859,6.67188 C99.362,6.36979 99.0156,6.21875 98.5469,6.21875 C97.9948,6.21875 97.5573,6.40365 97.2344,6.77344 C96.9115,7.14323 96.75,7.65104 96.75,8.29688 L96.75,12 L95.6719,12 L95.6719,5.4375 L96.75,5.4375 L96.75,6.45312 C97,6.05729 97.2969,5.76302 97.6406,5.57031 C97.9844,5.3776 98.3906,5.28125 98.8594,5.28125 C99.3385,5.28125 99.7448,5.40104 100.078,5.64062 C100.411,5.88021 100.656,6.23438 100.812,6.70312 M109.938,6.1875 C109.365,6.1875 108.909,6.41406 108.57,6.86719 C108.232,7.32031 108.062,7.9375 108.062,8.71875 C108.062,9.51042 108.229,10.1302 108.562,10.5781 C108.896,11.026 109.354,11.25 109.938,11.25 C110.51,11.25 110.966,11.0234 111.305,10.5703 C111.643,10.1172 111.812,9.5 111.812,8.71875 C111.812,7.94792 111.643,7.33333 111.305,6.875 C110.966,6.41667 110.51,6.1875 109.938,6.1875 M109.938,5.28125 C110.875,5.28125 111.612,5.58594 112.148,6.19531 C112.685,6.80469 112.953,7.64583 112.953,8.71875 C112.953,9.79167 112.685,10.6354 112.148,11.25 C111.612,11.8646 110.875,12.1719 109.938,12.1719 C109,12.1719 108.263,11.8646 107.727,11.25 C107.19,10.6354 106.922,9.79167 106.922,8.71875 C106.922,7.64583 107.19,6.80469 107.727,6.19531 C108.263,5.58594 109,5.28125 109.938,5.28125 M119.047,6.4375 L119.047,2.875 L120.125,2.875 L120.125,12 L119.047,12 L119.047,11.0156 C118.818,11.401 118.531,11.6901 118.188,11.8828 C117.844,12.0755 117.427,12.1719 116.938,12.1719 C116.146,12.1719 115.5,11.8542 115,11.2188 C114.5,10.5833 114.25,9.75 114.25,8.71875 C114.25,7.6875 114.5,6.85677 115,6.22656 C115.5,5.59635 116.146,5.28125 116.938,5.28125 C117.427,5.28125 117.844,5.375 118.188,5.5625 C118.531,5.75 118.818,6.04167 119.047,6.4375 M115.375,8.71875 C115.375,9.51042 115.536,10.1328 115.859,10.5859 C116.182,11.0391 116.63,11.2656 117.203,11.2656 C117.776,11.2656 118.227,11.0391 118.555,10.5859 C118.883,10.1328 119.047,9.51042 119.047,8.71875 C119.047,7.92708 118.883,7.30729 118.555,6.85938 C118.227,6.41146 117.776,6.1875 117.203,6.1875 C116.63,6.1875 116.182,6.41146 115.859,6.85938 C115.536,7.30729 115.375,7.92708 115.375,8.71875 M122.328,5.4375 L123.406,5.4375 L123.406,12 L122.328,12 L122.328,5.4375 M122.328,2.875 L123.406,2.875 L123.406,4.25 L122.328,4.25 L122.328,2.875 M128.984,2.875 L128.984,3.78125 L127.953,3.78125 C127.568,3.78125 127.299,3.85938 127.148,4.01562 C126.997,4.17188 126.922,4.45312 126.922,4.85938 L126.922,5.4375 L128.703,5.4375 L128.703,6.28125 L126.922,6.28125 L126.922,12 L125.844,12 L125.844,6.28125 L124.812,6.28125 L124.812,5.4375 L125.844,5.4375 L125.844,4.98438 C125.844,4.25521 126.013,3.72135 126.352,3.38281 C126.69,3.04427 127.229,2.875 127.969,2.875 L128.984,2.875 M132.609,12.6094 C132.307,13.3906 132.01,13.901 131.719,14.1406 C131.427,14.3802 131.042,14.5 130.562,14.5 L129.703,14.5 L129.703,13.5938 L130.328,13.5938 C130.63,13.5938 130.862,13.5234 131.023,13.3828 C131.185,13.2422 131.365,12.9115 131.562,12.3906 L131.766,11.8906 L129.109,5.4375 L130.25,5.4375 L132.297,10.5625 L134.359,5.4375 L135.5,5.4375 L132.609,12.6094 M141.969,14 L141.969,14.8281 L135.734,14.8281 L135.734,14 L141.969,14 M148.078,6.70312 C148.349,6.21354 148.672,5.85417 149.047,5.625 C149.422,5.39583 149.865,5.28125 150.375,5.28125 C151.062,5.28125 151.591,5.52083 151.961,6 C152.331,6.47917 152.516,7.15625 152.516,8.03125 L152.516,12 L151.438,12 L151.438,8.07812 C151.438,7.44271 151.326,6.97396 151.102,6.67188 C150.878,6.36979 150.536,6.21875 150.078,6.21875 C149.516,6.21875 149.073,6.40365 148.75,6.77344 C148.427,7.14323 148.266,7.65104 148.266,8.29688 L148.266,12 L147.188,12 L147.188,8.07812 C147.188,7.44271 147.076,6.97396 146.852,6.67188 C146.628,6.36979 146.281,6.21875 145.812,6.21875 C145.26,6.21875 144.823,6.40365 144.5,6.77344 C144.177,7.14323 144.016,7.65104 144.016,8.29688 L144.016,12 L142.938,12 L142.938,5.4375 L144.016,5.4375 L144.016,6.45312 C144.266,6.05729 144.562,5.76302 144.906,5.57031 C145.25,5.3776 145.656,5.28125 146.125,5.28125 C146.604,5.28125 147.01,5.40104 147.344,5.64062 C147.677,5.88021 147.922,6.23438 148.078,6.70312 M157.641,8.70312 C156.776,8.70312 156.174,8.80208 155.836,9 C155.497,9.19792 155.328,9.53646 155.328,10.0156 C155.328,10.401 155.456,10.7057 155.711,10.9297 C155.966,11.1536 156.307,11.2656 156.734,11.2656 C157.339,11.2656 157.82,11.0547 158.18,10.6328 C158.539,10.2109 158.719,9.64583 158.719,8.9375 L158.719,8.70312 L157.641,8.70312 M159.797,8.25 L159.797,12 L158.719,12 L158.719,11 C158.469,11.3958 158.161,11.6901 157.797,11.8828 C157.432,12.0755 156.984,12.1719 156.453,12.1719 C155.776,12.1719 155.24,11.9818 154.844,11.6016 C154.448,11.2214 154.25,10.7188 154.25,10.0938 C154.25,9.35417 154.497,8.79688 154.992,8.42188 C155.487,8.04688 156.224,7.85938 157.203,7.85938 L158.719,7.85938 L158.719,7.75 C158.719,7.25 158.555,6.86458 158.227,6.59375 C157.898,6.32292 157.443,6.1875 156.859,6.1875 C156.484,6.1875 156.117,6.23438 155.758,6.32812 C155.398,6.42188 155.057,6.55729 154.734,6.73438 L154.734,5.73438 C155.13,5.57812 155.513,5.46354 155.883,5.39062 C156.253,5.31771 156.615,5.28125 156.969,5.28125 C157.917,5.28125 158.625,5.52604 159.094,6.01562 C159.562,6.50521 159.797,7.25 159.797,8.25 M163.047,11.0156 L163.047,14.5 L161.969,14.5 L161.969,5.4375 L163.047,5.4375 L163.047,6.4375 C163.276,6.04167 163.562,5.75 163.906,5.5625 C164.25,5.375 164.661,5.28125 165.141,5.28125 C165.943,5.28125 166.594,5.59635 167.094,6.22656 C167.594,6.85677 167.844,7.6875 167.844,8.71875 C167.844,9.75 167.594,10.5833 167.094,11.2188 C166.594,11.8542 165.943,12.1719 165.141,12.1719 C164.661,12.1719 164.25,12.0755 163.906,11.8828 C163.562,11.6901 163.276,11.401 163.047,11.0156 M166.719,8.71875 C166.719,7.92708 166.555,7.30729 166.227,6.85938 C165.898,6.41146 165.453,6.1875 164.891,6.1875 C164.318,6.1875 163.867,6.41146 163.539,6.85938 C163.211,7.30729 163.047,7.92708 163.047,8.71875 C163.047,9.51042 163.211,10.1328 163.539,10.5859 C163.867,11.0391 164.318,11.2656 164.891,11.2656 C165.453,11.2656 165.898,11.0391 166.227,10.5859 C166.555,10.1328 166.719,9.51042 166.719,8.71875 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1173.46,1371.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1173.46,1371.86)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1055.5,-678.44 C1055.5,-668.499 1018.12,-660.44 972,-660.44 C925.885,-660.44 888.501,-668.499 888.501,-678.44 C888.501,-688.381 925.885,-696.44 972,-696.44 C1018.12,-696.44 1055.5,-688.381 1055.5,-678.44 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1852.36,1121.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1852.36,1121.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,1852.36,1121.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="non-scaling-stroke" fill-rule="nonzero" d="M3.04688,3.25 L4.04688,3.25 L1,13.1094 L0,13.1094 L3.04688,3.25 M10.2656,6.70312 C10.5365,6.21354 10.8594,5.85417 11.2344,5.625 C11.6094,5.39583 12.0521,5.28125 12.5625,5.28125 C13.25,5.28125 13.7786,5.52083 14.1484,6 C14.5182,6.47917 14.7031,7.15625 14.7031,8.03125 L14.7031,12 L13.625,12 L13.625,8.07812 C13.625,7.44271 13.513,6.97396 13.2891,6.67188 C13.0651,6.36979 12.724,6.21875 12.2656,6.21875 C11.7031,6.21875 11.2604,6.40365 10.9375,6.77344 C10.6146,7.14323 10.4531,7.65104 10.4531,8.29688 L10.4531,12 L9.375,12 L9.375,8.07812 C9.375,7.44271 9.26302,6.97396 9.03906,6.67188 C8.8151,6.36979 8.46875,6.21875 8,6.21875 C7.44792,6.21875 7.01042,6.40365 6.6875,6.77344 C6.36458,7.14323 6.20312,7.65104 6.20312,8.29688 L6.20312,12 L5.125,12 L5.125,5.4375 L6.20312,5.4375 L6.20312,6.45312 C6.45312,6.05729 6.75,5.76302 7.09375,5.57031 C7.4375,5.3776 7.84375,5.28125 8.3125,5.28125 C8.79167,5.28125 9.19792,5.40104 9.53125,5.64062 C9.86458,5.88021 10.1094,6.23438 10.2656,6.70312 M19.8281,8.70312 C18.9635,8.70312 18.362,8.80208 18.0234,9 C17.6849,9.19792 17.5156,9.53646 17.5156,10.0156 C17.5156,10.401 17.6432,10.7057 17.8984,10.9297 C18.1536,11.1536 18.4948,11.2656 18.9219,11.2656 C19.526,11.2656 20.0078,11.0547 20.3672,10.6328 C20.7266,10.2109 20.9062,9.64583 20.9062,8.9375 L20.9062,8.70312 L19.8281,8.70312 M21.9844,8.25 L21.9844,12 L20.9062,12 L20.9062,11 C20.6562,11.3958 20.349,11.6901 19.9844,11.8828 C19.6198,12.0755 19.1719,12.1719 18.6406,12.1719 C17.9635,12.1719 17.4271,11.9818 17.0312,11.6016 C16.6354,11.2214 16.4375,10.7188 16.4375,10.0938 C16.4375,9.35417 16.6849,8.79688 17.1797,8.42188 C17.6745,8.04688 18.4115,7.85938 19.3906,7.85938 L20.9062,7.85938 L20.9062,7.75 C20.9062,7.25 20.7422,6.86458 20.4141,6.59375 C20.0859,6.32292 19.6302,6.1875 19.0469,6.1875 C18.6719,6.1875 18.3047,6.23438 17.9453,6.32812 C17.5859,6.42188 17.2448,6.55729 16.9219,6.73438 L16.9219,5.73438 C17.3177,5.57812 17.7005,5.46354 18.0703,5.39062 C18.4401,5.31771 18.8021,5.28125 19.1562,5.28125 C20.1042,5.28125 20.8125,5.52604 21.2812,6.01562 C21.75,6.50521 21.9844,7.25 21.9844,8.25 M25.2344,11.0156 L25.2344,14.5 L24.1562,14.5 L24.1562,5.4375 L25.2344,5.4375 L25.2344,6.4375 C25.4635,6.04167 25.75,5.75 26.0938,5.5625 C26.4375,5.375 26.849,5.28125 27.3281,5.28125 C28.1302,5.28125 28.7812,5.59635 29.2812,6.22656 C29.7812,6.85677 30.0312,7.6875 30.0312,8.71875 C30.0312,9.75 29.7812,10.5833 29.2812,11.2188 C28.7812,11.8542 28.1302,12.1719 27.3281,12.1719 C26.849,12.1719 26.4375,12.0755 26.0938,11.8828 C25.75,11.6901 25.4635,11.401 25.2344,11.0156 M28.9062,8.71875 C28.9062,7.92708 28.7422,7.30729 28.4141,6.85938 C28.0859,6.41146 27.6406,6.1875 27.0781,6.1875 C26.5052,6.1875 26.0547,6.41146 25.7266,6.85938 C25.3984,7.30729 25.2344,7.92708 25.2344,8.71875 C25.2344,9.51042 25.3984,10.1328 25.7266,10.5859 C26.0547,11.0391 26.5052,11.2656 27.0781,11.2656 C27.6406,11.2656 28.0859,11.0391 28.4141,10.5859 C28.7422,10.1328 28.9062,9.51042 28.9062,8.71875 M36.7969,14 L36.7969,14.8281 L30.5625,14.8281 L30.5625,14 L36.7969,14 M42.9062,6.70312 C43.1771,6.21354 43.5,5.85417 43.875,5.625 C44.25,5.39583 44.6927,5.28125 45.2031,5.28125 C45.8906,5.28125 46.4193,5.52083 46.7891,6 C47.1589,6.47917 47.3438,7.15625 47.3438,8.03125 L47.3438,12 L46.2656,12 L46.2656,8.07812 C46.2656,7.44271 46.1536,6.97396 45.9297,6.67188 C45.7057,6.36979 45.3646,6.21875 44.9062,6.21875 C44.3438,6.21875 43.901,6.40365 43.5781,6.77344 C43.2552,7.14323 43.0938,7.65104 43.0938,8.29688 L43.0938,12 L42.0156,12 L42.0156,8.07812 C42.0156,7.44271 41.9036,6.97396 41.6797,6.67188 C41.4557,6.36979 41.1094,6.21875 40.6406,6.21875 C40.0885,6.21875 39.651,6.40365 39.3281,6.77344 C39.0052,7.14323 38.8438,7.65104 38.8438,8.29688 L38.8438,12 L37.7656,12 L37.7656,5.4375 L38.8438,5.4375 L38.8438,6.45312 C39.0938,6.05729 39.3906,5.76302 39.7344,5.57031 C40.0781,5.3776 40.4844,5.28125 40.9531,5.28125 C41.4323,5.28125 41.8385,5.40104 42.1719,5.64062 C42.5052,5.88021 42.75,6.23438 42.9062,6.70312 M52.4688,8.70312 C51.6042,8.70312 51.0026,8.80208 50.6641,9 C50.3255,9.19792 50.1562,9.53646 50.1562,10.0156 C50.1562,10.401 50.2839,10.7057 50.5391,10.9297 C50.7943,11.1536 51.1354,11.2656 51.5625,11.2656 C52.1667,11.2656 52.6484,11.0547 53.0078,10.6328 C53.3672,10.2109 53.5469,9.64583 53.5469,8.9375 L53.5469,8.70312 L52.4688,8.70312 M54.625,8.25 L54.625,12 L53.5469,12 L53.5469,11 C53.2969,11.3958 52.9896,11.6901 52.625,11.8828 C52.2604,12.0755 51.8125,12.1719 51.2812,12.1719 C50.6042,12.1719 50.0677,11.9818 49.6719,11.6016 C49.276,11.2214 49.0781,10.7188 49.0781,10.0938 C49.0781,9.35417 49.3255,8.79688 49.8203,8.42188 C50.3151,8.04688 51.0521,7.85938 52.0312,7.85938 L53.5469,7.85938 L53.5469,7.75 C53.5469,7.25 53.3828,6.86458 53.0547,6.59375 C52.7266,6.32292 52.2708,6.1875 51.6875,6.1875 C51.3125,6.1875 50.9453,6.23438 50.5859,6.32812 C50.2266,6.42188 49.8854,6.55729 49.5625,6.73438 L49.5625,5.73438 C49.9583,5.57812 50.3411,5.46354 50.7109,5.39062 C51.0807,5.31771 51.4427,5.28125 51.7969,5.28125 C52.7448,5.28125 53.4531,5.52604 53.9219,6.01562 C54.3906,6.50521 54.625,7.25 54.625,8.25 M62.2969,8.03125 L62.2969,12 L61.2188,12 L61.2188,8.07812 C61.2188,7.45312 61.0964,6.98698 60.8516,6.67969 C60.6068,6.3724 60.2448,6.21875 59.7656,6.21875 C59.1823,6.21875 58.7214,6.40365 58.3828,6.77344 C58.0443,7.14323 57.875,7.65104 57.875,8.29688 L57.875,12 L56.7969,12 L56.7969,5.4375 L57.875,5.4375 L57.875,6.45312 C58.1354,6.05729 58.4401,5.76302 58.7891,5.57031 C59.138,5.3776 59.5417,5.28125 60,5.28125 C60.75,5.28125 61.3203,5.51302 61.7109,5.97656 C62.1016,6.4401 62.2969,7.125 62.2969,8.03125 M67.4062,8.70312 C66.5417,8.70312 65.9401,8.80208 65.6016,9 C65.263,9.19792 65.0938,9.53646 65.0938,10.0156 C65.0938,10.401 65.2214,10.7057 65.4766,10.9297 C65.7318,11.1536 66.0729,11.2656 66.5,11.2656 C67.1042,11.2656 67.5859,11.0547 67.9453,10.6328 C68.3047,10.2109 68.4844,9.64583 68.4844,8.9375 L68.4844,8.70312 L67.4062,8.70312 M69.5625,8.25 L69.5625,12 L68.4844,12 L68.4844,11 C68.2344,11.3958 67.9271,11.6901 67.5625,11.8828 C67.1979,12.0755 66.75,12.1719 66.2188,12.1719 C65.5417,12.1719 65.0052,11.9818 64.6094,11.6016 C64.2135,11.2214 64.0156,10.7188 64.0156,10.0938 C64.0156,9.35417 64.263,8.79688 64.7578,8.42188 C65.2526,8.04688 65.9896,7.85938 66.9688,7.85938 L68.4844,7.85938 L68.4844,7.75 C68.4844,7.25 68.3203,6.86458 67.9922,6.59375 C67.6641,6.32292 67.2083,6.1875 66.625,6.1875 C66.25,6.1875 65.8828,6.23438 65.5234,6.32812 C65.1641,6.42188 64.8229,6.55729 64.5,6.73438 L64.5,5.73438 C64.8958,5.57812 65.2786,5.46354 65.6484,5.39062 C66.0182,5.31771 66.3802,5.28125 66.7344,5.28125 C67.6823,5.28125 68.3906,5.52604 68.8594,6.01562 C69.3281,6.50521 69.5625,7.25 69.5625,8.25 M76.0938,8.64062 C76.0938,7.85938 75.9323,7.25521 75.6094,6.82812 C75.2865,6.40104 74.8333,6.1875 74.25,6.1875 C73.6771,6.1875 73.2292,6.40104 72.9062,6.82812 C72.5833,7.25521 72.4219,7.85938 72.4219,8.64062 C72.4219,9.42188 72.5833,10.026 72.9062,10.4531 C73.2292,10.8802 73.6771,11.0938 74.25,11.0938 C74.8333,11.0938 75.2865,10.8802 75.6094,10.4531 C75.9323,10.026 76.0938,9.42188 76.0938,8.64062 M77.1719,11.1875 C77.1719,12.3021 76.9245,13.1328 76.4297,13.6797 C75.9349,14.2266 75.1719,14.5 74.1406,14.5 C73.7656,14.5 73.4089,14.4714 73.0703,14.4141 C72.7318,14.3568 72.4062,14.2708 72.0938,14.1562 L72.0938,13.1094 C72.4062,13.276 72.7188,13.401 73.0312,13.4844 C73.3438,13.5677 73.6562,13.6094 73.9688,13.6094 C74.6771,13.6094 75.2083,13.4245 75.5625,13.0547 C75.9167,12.6849 76.0938,12.125 76.0938,11.375 L76.0938,10.8438 C75.8646,11.2292 75.5781,11.5182 75.2344,11.7109 C74.8906,11.9036 74.474,12 73.9844,12 C73.1823,12 72.5339,11.6927 72.0391,11.0781 C71.5443,10.4635 71.2969,9.65104 71.2969,8.64062 C71.2969,7.63021 71.5443,6.81771 72.0391,6.20312 C72.5339,5.58854 73.1823,5.28125 73.9844,5.28125 C74.474,5.28125 74.8906,5.3776 75.2344,5.57031 C75.5781,5.76302 75.8646,6.05208 76.0938,6.4375 L76.0938,5.4375 L77.1719,5.4375 L77.1719,11.1875 M85,8.45312 L85,8.96875 L80.0312,8.96875 C80.0833,9.71875 80.3099,10.2865 80.7109,10.6719 C81.112,11.0573 81.6667,11.25 82.375,11.25 C82.7917,11.25 83.1953,11.2005 83.5859,11.1016 C83.9766,11.0026 84.3646,10.849 84.75,10.6406 L84.75,11.6719 C84.3542,11.8281 83.9531,11.9505 83.5469,12.0391 C83.1406,12.1276 82.7292,12.1719 82.3125,12.1719 C81.2708,12.1719 80.4427,11.8672 79.8281,11.2578 C79.2135,10.6484 78.9062,9.82292 78.9062,8.78125 C78.9062,7.70833 79.1979,6.85677 79.7812,6.22656 C80.3646,5.59635 81.1458,5.28125 82.125,5.28125 C83.0104,5.28125 83.7109,5.5651 84.2266,6.13281 C84.7422,6.70052 85,7.47396 85,8.45312 M83.9219,8.125 C83.9115,7.54167 83.7448,7.07292 83.4219,6.71875 C83.099,6.36458 82.6719,6.1875 82.1406,6.1875 C81.5365,6.1875 81.0547,6.35938 80.6953,6.70312 C80.3359,7.04688 80.1302,7.52604 80.0781,8.14062 L83.9219,8.125 M90.5625,6.4375 C90.4375,6.375 90.3047,6.32552 90.1641,6.28906 C90.0234,6.2526 89.8646,6.23438 89.6875,6.23438 C89.0833,6.23438 88.6172,6.43229 88.2891,6.82812 C87.9609,7.22396 87.7969,7.79688 87.7969,8.54688 L87.7969,12 L86.7188,12 L86.7188,5.4375 L87.7969,5.4375 L87.7969,6.45312 C88.026,6.05729 88.3229,5.76302 88.6875,5.57031 C89.0521,5.3776 89.4948,5.28125 90.0156,5.28125 C90.0885,5.28125 90.1693,5.28646 90.2578,5.29688 C90.3464,5.30729 90.4427,5.32292 90.5469,5.34375 L90.5625,6.4375"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1852.36,1121.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,1852.36,1121.87)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M436.31,-571.46 C440.63,-616.96 458.6,-737.07 530,-796.44 C541.79,-806.24 556.06,-812.9 570.93,-817.34 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M570.93,-817.34 L571.847,-813.896 L580.77,-819.96 L570.013,-820.784 L570.93,-817.34"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M771.86,-219.38 C785.07,-216.6 798.4,-213.6 811,-210.44 C845.33,-201.83 883.14,-190.2 913.5,-180.32 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M913.5,-180.32 L912.401,-176.97 L923.07,-177.18 L914.599,-183.669 L913.5,-180.32"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M994.91,-695.94 C1026.8,-720.1 1086.8,-764.6 1140,-799.44 C1160,-812.51 1182.7,-826.12 1201.8,-837.17 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1201.8,-837.17 L1203.56,-834.125 L1210.5,-842.21 L1200.04,-840.215 L1201.8,-837.17"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M436.34,-571.59 C442.23,-646.47 468.38,-930.33 530,-990.44 C535.52,-995.82 541.76,-1000.3 548.48,-1004 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M548.48,-1004 L550.09,-1000.7 L557.9,-1008.6 L546.87,-1007.3 L548.48,-1004"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M308.43,-508.27 C322.07,-441.86 379.21,-211.63 530,-123.44 C655.93,-49.791 837.54,-105.41 923.45,-139.31 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M923.45,-139.31 L924.784,-135.985 L932.95,-143.12 L922.117,-142.635 L923.45,-139.31"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1219.5,-633.17 C1157.2,-586.1 981.2,-461.41 811,-418.44 C689.91,-387.87 640.85,-360.9 530,-418.44 C486.66,-440.94 458.93,-493.28 445.23,-525.78 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M445.23,-525.78 L448.52,-527.11 L441.43,-535.18 L441.94,-524.45 L445.23,-525.78"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M442.38,-571.71 C455.36,-601.36 485.22,-659.52 530,-688.44 C539.39,-694.51 549.82,-699.27 560.64,-703.01 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M560.64,-703.01 L561.7,-699.654 L570.23,-706.04 L559.58,-706.366 L560.64,-703.01"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M960.07,-981.55 C936.44,-1015.6 879.94,-1088 811,-1115.4 C628.03,-1188.2 515.14,-1246.3 368,-1115.4 C329.78,-1081.5 310.88,-714.89 306.19,-608.95 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M306.19,-608.95 L302.606,-609.108 L305.74,-598.71 L309.774,-608.793 L306.19,-608.95"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M761.28,-812.12 C778.21,-808.31 795.46,-803.22 811,-796.44 C863.77,-773.41 915.86,-730.57 945.93,-703.33 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M945.93,-703.33 L943.515,-700.702 L953.44,-696.43 L948.345,-705.959 L945.93,-703.33"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M721.26,-895.51 C754.67,-907.17 799.65,-922.2 840,-933.44 C858.89,-938.7 879.5,-943.72 898.69,-948.1 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M898.69,-948.1 L899.471,-944.639 L908.58,-950.33 L897.91,-951.562 L898.69,-948.1"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M773.68,-560.57 C787.26,-565 800.19,-571.37 811,-580.44 C838.69,-603.69 812.02,-633.55 840,-656.44 C850.92,-665.38 864.1,-671.31 877.84,-675.17 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M877.84,-675.17 L878.697,-671.642 L887.92,-677.62 L876.983,-678.698 L877.84,-675.17"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M615.98,-455.84 C589,-459.6 556.65,-465.69 530,-478.44 C504.51,-490.64 480.7,-511.72 463.3,-528.57 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M463.3,-528.57 L465.89,-531.209 L455.76,-535.97 L460.71,-525.931 L463.3,-528.57"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M450.26,-571 C467.61,-589.79 497.76,-618.96 530,-634.44 C541.55,-639.98 554.14,-644.39 566.9,-647.89 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M566.9,-647.89 L567.779,-644.471 L576.67,-650.4 L566.021,-651.309 L566.9,-647.89"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M771.65,-999.38 C811.33,-992.27 856.22,-984.21 893.43,-977.53 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M893.43,-977.53 L892.786,-973.928 L903.72,-975.69 L894.074,-981.131 L893.43,-977.53"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M310.18,-117.52 C330.21,-187.49 402.77,-440.87 427.03,-525.61 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M427.03,-525.61 L430.425,-524.637 L429.81,-535.31 L423.635,-526.583 L427.03,-525.61"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M766.84,-753.44 C781.74,-750.24 796.86,-746.57 811,-742.44 C851.16,-730.7 895.22,-712.82 927.07,-698.94 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M927.07,-698.94 L925.611,-695.622 L936.55,-694.77 L928.53,-702.258 L927.07,-698.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M888.91,-681.28 C870.4,-677.79 852.57,-670.44 840,-656.44 C765.2,-573.13 888.22,-234.52 811,-153.44 C685.91,-22.1 436.02,-66.691 341.95,-89.502 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M341.95,-89.502 L342.812,-92.967 L332.05,-91.966 L341.088,-86.037 L341.95,-89.502"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M479.25,-539.99 C495.17,-535.39 513.32,-530.4 530,-526.44 C540.02,-524.06 550.47,-521.75 560.96,-519.54 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M560.96,-519.54 L560.232,-516.023 L571.01,-517.46 L561.688,-523.057 L560.96,-519.54"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M800.13,-517.59 C803.98,-520.22 807.63,-523.16 811,-526.44 C853.46,-567.69 797.02,-615.73 840,-656.44 C850.62,-666.5 864,-672.94 878.15,-676.94 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M878.15,-676.94 L878.986,-673.479 L888.04,-679.33 L877.313,-680.402 L878.15,-676.94"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M771.61,-866.02 C785.34,-862.2 798.86,-857.14 811,-850.44 C875.64,-814.75 929.18,-743.86 955.13,-705.17 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M955.13,-705.17 L952.102,-703.175 L960.83,-696.52 L958.158,-707.165 L955.13,-705.17"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1064.5,-963.44 C1085.8,-963.44 1108.6,-963.44 1130.6,-963.44 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1130.6,-963.44 L1130.6,-959.905 L1140.7,-963.44 L1130.6,-966.975 L1130.6,-963.44"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M579.68,-290.45 C561.51,-294.2 543.8,-301.18 530,-313.44 C495.49,-344.09 518.25,-370.24 502,-413.44 C486.81,-453.82 464.41,-498.46 449.76,-526.23 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M449.76,-526.23 L452.942,-527.921 L444.93,-535.32 L446.578,-524.539 L449.76,-526.23"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M324.61,-562.19 C327.22,-559.37 329.77,-556.41 332,-553.44 C426.13,-428.11 440.85,-388.77 502,-244.44 C518.51,-205.48 495.96,-178.58 530,-153.44 C582.58,-114.6 760.92,-130.55 874.35,-145.57 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M874.35,-145.57 L874.826,-142.038 L884.44,-146.93 L873.874,-149.102 L874.35,-145.57"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M329.77,-508.38 C410.19,-452.09 667.09,-291 811,-418.44 C890.78,-489.09 766.32,-579.46 840,-656.44 C850.38,-667.28 863.92,-674.05 878.37,-678.12 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M878.37,-678.12 L879.21,-674.578 L888.49,-680.52 L877.53,-681.662 L878.37,-678.12"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M501.68,-553.44 C519.32,-553.44 538.87,-553.44 558.22,-553.44 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M558.22,-553.44 L558.22,-549.905 L568.32,-553.44 L558.22,-556.975 L558.22,-553.44"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M479.25,-566.89 C495.17,-571.49 513.32,-576.48 530,-580.44 C540.3,-582.89 551.07,-585.26 561.87,-587.53 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M561.87,-587.53 L562.587,-584.062 L571.78,-589.58 L561.153,-590.998 L561.87,-587.53"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M242.19,-526.44 C251.26,-526.44 259.9,-526.44 267.72,-526.44 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M267.72,-526.44 L267.72,-522.902 L277.83,-526.44 L267.72,-529.979 L267.72,-526.44"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M445.47,-535.5 C460.22,-509.46 487.01,-459.28 502,-413.44 C522.94,-349.4 482.44,-312.17 530,-264.44 C530.81,-263.62 531.64,-262.83 532.49,-262.05 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M532.49,-262.05 L530.232,-259.243 L540.51,-255.6 L534.748,-264.857 L532.49,-262.05"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M326.22,-544.65 C328.47,-547.39 330.48,-550.34 332,-553.44 C388.34,-668.5 322.46,-719.69 368,-839.44 C413.22,-958.36 417.43,-1016.2 530,-1075.4 C640.51,-1133.6 691.83,-1112.8 811,-1075.4 C865.28,-1058.4 917.28,-1015.9 946.86,-988.43 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M946.86,-988.43 L944.421,-985.847 L954.24,-981.46 L949.299,-991.013 L946.86,-988.43"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M944.87,-980.81 C871.23,-1025.5 664.17,-1135 530,-1044.4 C334.97,-912.8 461.8,-749.69 332,-553.44 C331.74,-553.05 331.48,-552.67 331.21,-552.28 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M331.21,-552.28 L328.473,-554.474 L324.94,-544.46 L333.947,-550.086 L331.21,-552.28"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1213.9,-878.57 C1186.5,-894.98 1143.8,-918.77 1104,-933.44 C1087.1,-939.69 1068.4,-944.89 1050.6,-949.1 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1050.6,-949.1 L1051.38,-952.53 L1040.8,-951.34 L1049.82,-945.67 L1050.6,-949.1"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1160.6,-945.34 C1153.3,-942.01 1146.3,-938.09 1140,-933.44 C1057.5,-872.51 1003.7,-757.97 982.38,-705.7 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M982.38,-705.7 L979.125,-706.999 L978.67,-696.4 L985.635,-704.402 L982.38,-705.7"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M950.33,-178.37 C920.75,-201.87 865.19,-242.67 811,-264.44 C798.62,-269.42 785.24,-273.49 771.84,-276.83 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M771.84,-276.83 L772.645,-280.243 L762.09,-279.13 L771.035,-273.417 L771.84,-276.83"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1198.1,-790.55 C1177.9,-800.59 1155.4,-814.86 1140,-833.44 C1109.9,-869.85 1139.4,-902.14 1104,-933.44 C1093.7,-942.59 1081.1,-949.12 1067.9,-953.75 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1067.9,-953.75 L1068.96,-957.145 L1058.2,-956.79 L1066.84,-950.355 L1067.9,-953.75"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M438.33,-571.7 C449.39,-630.29 486.65,-812.02 530,-850.44 C538.96,-858.38 549.53,-864.3 560.78,-868.66 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M560.78,-868.66 L561.938,-865.303 L570.37,-871.97 L559.621,-872.016 L560.78,-868.66"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M770.28,-620.69 C784.27,-624.24 798.23,-628.74 811,-634.44 C825.77,-641.03 825.14,-650.03 840,-656.44 C853.74,-662.36 868.92,-666.7 883.94,-669.87 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M883.94,-669.87 L884.612,-666.426 L893.78,-671.79 L883.268,-673.314 L883.94,-669.87"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1016.4,-693.86 C1061.3,-709.42 1130.9,-733.57 1181.2,-751 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1181.2,-751 L1182.35,-747.71 L1190.6,-754.28 L1180.05,-754.29 L1181.2,-751"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M765,-666.75 C801.74,-668.82 843.73,-671.2 880.25,-673.26 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M880.25,-673.26 L880.45,-669.711 L890.39,-673.83 L880.05,-676.809 L880.25,-673.26"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M332.25,-532.1 C343.88,-534.51 357.96,-537.44 371.93,-540.34 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M371.93,-540.34 L372.665,-536.802 L382.04,-542.44 L371.195,-543.879 L371.93,-540.34"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M332.25,-574.78 C343.88,-572.37 357.96,-569.44 371.93,-566.54 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M371.93,-566.54 L371.195,-563.001 L382.04,-564.44 L372.665,-570.078 L371.93,-566.54"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M780.09,-963.44 C809.14,-963.44 840.42,-963.44 869.12,-963.44 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M869.12,-963.44 L869.12,-959.926 L879.16,-963.44 L869.12,-966.954 L869.12,-963.44"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M320.57,-81.222 C332.23,-69.078 349.32,-54.155 368,-47.44 C553.29,19.15 623.26,11.87 811,-47.44 C865.4,-64.626 917.37,-107.51 946.91,-135.23 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M946.91,-135.23 L949.374,-132.65 L954.28,-142.27 L944.446,-137.809 L946.91,-135.23"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M771.65,-703.07 C809.76,-698.38 852.69,-693.11 889,-688.64 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M889,-688.64 L888.569,-685.119 L899.06,-687.41 L889.431,-692.161 L889,-688.64"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1048.2,-670.85 C1079,-667.78 1114.9,-664.21 1147.4,-660.97 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M1147.4,-660.97 L1147.05,-657.47 L1157.4,-659.97 L1147.75,-664.47 L1147.4,-660.97"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M801.27,-173.49 C816.25,-172.34 831.49,-171.18 846.41,-170.04 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M846.41,-170.04 L846.134,-166.449 L856.67,-169.25 L846.686,-173.631 L846.41,-170.04"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M445.77,-535.6 C460.9,-509.68 488.13,-459.63 502,-413.44 C515.1,-369.83 498.65,-243.47 530,-210.44 C530.94,-209.45 531.91,-208.49 532.89,-207.56 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M532.89,-207.56 L530.583,-204.757 L540.9,-200.97 L535.197,-210.363 L532.89,-207.56"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M444.9,-535.37 C460.73,-513.28 493.66,-477.83 530,-460.44 C553.43,-449.23 581.25,-443.17 605.96,-440.55 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M605.96,-440.55 L605.645,-437.043 L615.98,-439.65 L606.275,-444.057 L605.96,-440.55"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M438.55,-571.69 C447.01,-609.96 472.13,-698.71 530,-742.44 C540.54,-750.4 552.75,-756.23 565.5,-760.45 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M565.5,-760.45 L566.529,-757.006 L575.34,-763.39 L564.471,-763.894 L565.5,-760.45"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M437.02,-571.72 C444.99,-640.4 476.42,-881.73 530,-933.44 C536.68,-939.89 544.38,-945.09 552.67,-949.29 "/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="#000000" fill-opacity="1" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+<path vector-effect="none" fill-rule="evenodd" d="M552.67,-949.29 L554.126,-946.07 L561.87,-953.45 L551.214,-952.51 L552.67,-949.29"/>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1.9999,0,0,1.9999,-0.000799962,2493.68)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+
+<g fill="none" stroke="#000000" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(1,0,0,1,0,0)"
+font-family="Sans Serif" font-size="9" font-weight="400" font-style="normal" 
+>
+</g>
+</g>
+</svg>
diff --git a/homer_map_manager/mainpage.dox b/homer_map_manager/mainpage.dox
new file mode 100644
index 0000000000000000000000000000000000000000..24ea33a355d069ba9d7ef379c660001dbf49618b
--- /dev/null
+++ b/homer_map_manager/mainpage.dox
@@ -0,0 +1,14 @@
+/**
+\mainpage
+\htmlinclude manifest.html
+
+\b map_manager 
+
+<!-- 
+Provide an overview of your package.
+-->
+
+-->
+
+
+*/
diff --git a/homer_map_manager/manifest.xml b/homer_map_manager/manifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..158629c12b25564a37e96520a0bed7f298a5baa7
--- /dev/null
+++ b/homer_map_manager/manifest.xml
@@ -0,0 +1,22 @@
+<package>
+  <description brief="map_manager">
+
+     map_manager
+
+  </description>
+  <author>Malte Knauf</author>
+  <license>BSD</license>
+  <review status="unreviewed" notes=""/>
+  <url>http://ros.org/wiki/map_manager</url>
+
+  <depend package="roscpp"/>
+  <depend package="roslib"/>
+  <depend package="tf"/>
+
+  <depend package="robbie_architecture"/>
+  <depend package="BaseLib"/>
+  <depend package="map_messages"/>
+
+</package>
+
+
diff --git a/homer_map_manager/package.xml b/homer_map_manager/package.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cde8463f89acfa83a5a6b9ccb7af1e923d053ecc
--- /dev/null
+++ b/homer_map_manager/package.xml
@@ -0,0 +1,41 @@
+<package>
+  <name>homer_map_manager</name>
+  <version>1.0.11</version>
+  <description>
+     map_manager
+  </description>
+  <maintainer email="vseib@uni-koblenz.de">Viktor Seib</maintainer>
+  <maintainer email="raphael@uni-koblenz.de">Raphael Memmesheimer</maintainer>
+  <maintainer email="niyawe@uni-koblenz.de">Niklas Yann Wettengel</maintainer>
+  <maintainer email="heuer@uni-koblenz.de">Gregor Heuer</maintainer>
+  <author email="mknauf@uni-koblenz.de">Malte Knauf</author>
+  <license>GPLv3</license>
+
+  <buildtool_depend>catkin</buildtool_depend>
+
+  <build_depend>roscpp</build_depend>
+  <build_depend>roslib</build_depend>
+  <build_depend>tf</build_depend>
+  <build_depend>homer_mapnav_msgs</build_depend>
+  <build_depend>homer_nav_libs</build_depend>
+  <build_depend>cmake_modules</build_depend>
+  <build_depend>eigen</build_depend>
+  <build_depend>sdl</build_depend>
+  <build_depend>sdl-image</build_depend>
+  <build_depend>yaml-cpp</build_depend>
+  <build_depend>std_srvs</build_depend>
+  
+  <run_depend>roscpp</run_depend>
+  <run_depend>roslib</run_depend>
+  <run_depend>tf</run_depend>
+  <run_depend>homer_mapnav_msgs</run_depend>
+  <run_depend>homer_nav_libs</run_depend>
+  <run_depend>eigen</run_depend>
+  <run_depend>sdl</run_depend>
+  <run_depend>sdl-image</run_depend>
+  <run_depend>yaml-cpp</run_depend>
+  <run_depend>std_srvs</run_depend>
+
+</package>
+
+
diff --git a/homer_map_manager/readme.pdf b/homer_map_manager/readme.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..ea8cf379f902f8ac6758c678b5add93a4533a506
Binary files /dev/null and b/homer_map_manager/readme.pdf differ
diff --git a/homer_map_manager/src/Managers/CMakeLists.txt b/homer_map_manager/src/Managers/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5fbd5a471ce310d95b574625d6c7b3f49b65442b
--- /dev/null
+++ b/homer_map_manager/src/Managers/CMakeLists.txt
@@ -0,0 +1,5 @@
+set(Managers_SRC MapManager.cpp MaskingManager.cpp PoiManager.cpp RoiManager.cpp)
+
+add_library(Managers ${Managers_SRC})
+target_link_libraries(Managers image_io)
+add_dependencies(Managers homer_mapnav_msgs_gencpp)
diff --git a/homer_map_manager/src/Managers/MapManager.cpp b/homer_map_manager/src/Managers/MapManager.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d3777c86fedac12de507e84e5caf6ffee9430e30
--- /dev/null
+++ b/homer_map_manager/src/Managers/MapManager.cpp
@@ -0,0 +1,155 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "MapManager.h"
+
+#include <nav_msgs/OccupancyGrid.h>
+#include <homer_mapnav_msgs/ModifyMap.h>
+#include <homer_mapnav_msgs/MapLayers.h>
+#include <tools/tools.h>
+
+
+MapManager::MapManager(ros::NodeHandle* nh)
+{
+    m_MapPublisher = nh->advertise<nav_msgs::OccupancyGrid>("/map", 1);
+
+    //enable all map layers
+    m_MapVisibility[homer_mapnav_msgs::MapLayers::SLAM_LAYER] = true;
+    m_MapVisibility[homer_mapnav_msgs::MapLayers::KINECT_LAYER] = true;
+    m_MapVisibility[homer_mapnav_msgs::MapLayers::SICK_LAYER] = true;
+    m_MapVisibility[homer_mapnav_msgs::MapLayers::MASKING_LAYER] = true;
+
+    m_Height = -1;
+    m_Width = -1;
+    m_Resolution = -1;
+}
+
+MapManager::~MapManager()
+{
+}
+
+void MapManager::updateMapLayer(int type, nav_msgs::OccupancyGrid::ConstPtr layer)
+{
+    m_MapLayers[type] = layer;
+    //if slam map update map sizes
+    if(type == homer_mapnav_msgs::MapLayers::SLAM_LAYER)
+    {
+        m_Height = layer->info.height;
+        m_Width = layer->info.width;
+        m_Resolution = layer->info.resolution;
+        m_Origin = layer->info.origin;
+        sendMergedMap();
+    }
+}
+
+void MapManager::clearMapLayers()
+{
+    m_MapLayers.clear();
+}
+
+void MapManager::toggleMapVisibility(int type, bool state)
+{
+    ROS_INFO_STREAM("MapManager: " << type << ": " << state);
+    m_MapVisibility[type] = state;
+}
+
+nav_msgs::OccupancyGrid::ConstPtr MapManager::getMapLayer(int type)
+{
+    if(m_MapLayers.find(type) == m_MapLayers.end())
+        return nav_msgs::OccupancyGrid::ConstPtr();
+    return m_MapLayers[type];
+}
+
+/**
+ * Sends the SLAM map (OccupancyGrid) and (if available and enabled) other merged map layers to the gui node
+ *
+ */
+void MapManager::sendMergedMap()
+{
+    if ( m_MapLayers.find(homer_mapnav_msgs::MapLayers::SLAM_LAYER) == m_MapLayers.end() )
+    {
+      ROS_ERROR_STREAM( "SLAM map is missing!" );
+      return;
+    }
+
+    nav_msgs::OccupancyGrid mergedMap( *(m_MapLayers[homer_mapnav_msgs::MapLayers::SLAM_LAYER]) );
+
+    //apply kinect map if enabled
+    if ( m_MapLayers.find(homer_mapnav_msgs::MapLayers::KINECT_LAYER) != m_MapLayers.end()
+         && m_MapVisibility[homer_mapnav_msgs::MapLayers::KINECT_LAYER])
+    {
+        nav_msgs::OccupancyGridConstPtr &kinectMap = m_MapLayers[homer_mapnav_msgs::MapLayers::KINECT_LAYER];
+
+	  for ( int y = 0; y < kinectMap->info.height; y++ )
+	  {
+		for ( int x = 0; x < kinectMap->info.width; x++ )
+		{
+		  	int i = x + y * kinectMap->info.width;
+
+	
+			//if cell is occupied by kinect obstacle merge cell with merged map
+			if(kinectMap->data[i] == homer_mapnav_msgs::ModifyMap::BLOCKED)
+			{
+
+				Eigen::Vector2i point(x,y);
+				geometry_msgs::Point tmp = map_tools::fromMapCoords( point ,kinectMap->info.origin, kinectMap->info.resolution);
+				point = map_tools::toMapCoords(tmp , mergedMap.info.origin, mergedMap.info.resolution);
+				int k = point.y() * mergedMap.info.width + point.x();
+				mergedMap.data[k] = homer_mapnav_msgs::ModifyMap::KINECT;
+			}
+		}  
+	  }
+	}
+
+    //apply SICK map if enabled
+    if(m_MapLayers.find(homer_mapnav_msgs::MapLayers::SICK_LAYER) != m_MapLayers.end()
+            && m_MapVisibility[homer_mapnav_msgs::MapLayers::SICK_LAYER])
+    {
+        nav_msgs::OccupancyGridConstPtr &sickMap = m_MapLayers[homer_mapnav_msgs::MapLayers::SICK_LAYER];
+        if ( ( sickMap->info.width == mergedMap.info.width )
+          && ( sickMap->info.height == mergedMap.info.height ) )
+        {
+
+            for ( int i=0; i<mergedMap.data.size(); i++ )
+            {
+                //if cell is occupied by kinect obstacle merge cell with merged map
+                if(sickMap->data[i] == homer_mapnav_msgs::ModifyMap::BLOCKED)
+                {
+                    mergedMap.data[i] = homer_mapnav_msgs::ModifyMap::BLOCKED;
+                }
+            }
+        }
+        else
+        {
+            ROS_ERROR_STREAM( "Size mismatch between SLAM map and SICK map!" );
+        }
+    }
+
+    //apply masking map if enabled
+    if ( m_MapLayers.find(homer_mapnav_msgs::MapLayers::MASKING_LAYER) != m_MapLayers.end()
+         && m_MapVisibility[homer_mapnav_msgs::MapLayers::MASKING_LAYER])
+    {
+        nav_msgs::OccupancyGridConstPtr &maskingMap = m_MapLayers[homer_mapnav_msgs::MapLayers::MASKING_LAYER];
+        if ( ( maskingMap->info.width == mergedMap.info.width )
+          && ( maskingMap->info.height == mergedMap.info.height ) )
+        {
+            for ( int i=0; i<mergedMap.data.size(); i++ )
+            {
+                //if cell should be masked apply masking on merged map
+                if(maskingMap->data[i] != homer_mapnav_msgs::ModifyMap::NOT_MASKED)
+                {
+                    mergedMap.data[i] = maskingMap->data[i];
+                }
+            }
+        }
+        else
+        {
+            ROS_ERROR_STREAM( "Size mismatch between SLAM map (" << mergedMap.info.width << "x" << mergedMap.info.height << ") and masking map (" << maskingMap->info.width << "x" << maskingMap->info.height << ")!" );
+        }
+    }
+    m_MapPublisher.publish(mergedMap);
+    ROS_DEBUG_STREAM("Publishing map");
+}
diff --git a/homer_map_manager/src/Managers/MapManager.h b/homer_map_manager/src/Managers/MapManager.h
new file mode 100644
index 0000000000000000000000000000000000000000..b91c457f7750dcd44beb8cb13ab698d215bacdb6
--- /dev/null
+++ b/homer_map_manager/src/Managers/MapManager.h
@@ -0,0 +1,86 @@
+#ifndef MAPMANAGER_H
+#define MAPMANAGER_H
+
+#include <string>
+#include <map>
+#include <list>
+
+#include "nav_msgs/OccupancyGrid.h"
+#include "geometry_msgs/Pose.h"
+
+#include "ros/ros.h"
+
+/** @class MapManager
+  * @author Malte Knauf, David Gossow (RX), Susanne Maur
+  * @brief This class holds all current map layers, updates them and publishes them in one merged map.
+  */
+class MapManager
+{
+  public:
+
+    /**
+     * @brief Constructor
+     * @param nh node handle
+     */
+    MapManager(ros::NodeHandle* nh);
+
+    /**
+     * @brief getMapLayer search for map layer of given type and return it
+     * @param type type of map layer to search for
+     * @return map layer
+     */
+    nav_msgs::OccupancyGrid::ConstPtr getMapLayer(int type);
+
+    /**
+     * @brief updateMapLayer replaces map layer of given type
+     * @param type type of map layer
+     * @param layer new map layer
+     */
+    void updateMapLayer(int type, nav_msgs::OccupancyGrid::ConstPtr layer);
+
+    /**
+     * @brief toggleMapVisibility toggles visibility of each map layer
+     * @param type type of map layer to toggle
+     * @param state visible or not
+     */
+    void toggleMapVisibility(int type, bool state );
+
+    /**
+     * @brief clearMapLayers Clear all map layers
+     */
+    void clearMapLayers();
+
+    /** getters */
+    double getHeight() { return m_Height; }
+    double getWidth() { return m_Width; }
+    double getResolution() { return m_Resolution; }
+    geometry_msgs::Pose getOrigin() { return m_Origin; }
+
+    /** destructor */
+    virtual ~MapManager();
+
+  private:
+
+    /** merges all map layers and publishes the merged map */
+    void sendMergedMap();
+
+    /**
+     * The map data of each available map layer ist stored in this map
+     */
+    std::map<int, nav_msgs::OccupancyGrid::ConstPtr > m_MapLayers;
+
+    /**
+     * This map stores which map layers are enabled and which are disabled
+     */
+    std::map<int, bool> m_MapVisibility;
+
+    //sizes of the last slam map
+    double m_Height;
+    double m_Width;
+    double m_Resolution;
+    geometry_msgs::Pose m_Origin;
+
+    /** map publisher */
+    ros::Publisher m_MapPublisher;
+};
+#endif
diff --git a/homer_map_manager/src/Managers/MaskingManager.cpp b/homer_map_manager/src/Managers/MaskingManager.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3c943387898e8a12c07e1996ed5f0f27697a58e8
--- /dev/null
+++ b/homer_map_manager/src/Managers/MaskingManager.cpp
@@ -0,0 +1,187 @@
+#include "MaskingManager.h"
+
+#include "ros/ros.h"
+
+#include <homer_mapnav_msgs/ModifyMap.h>
+
+#include <sstream>
+
+using namespace std;
+
+MaskingManager::MaskingManager(int mapSize, float resolution)
+{
+    m_CellSize = resolution;
+    m_Width = mapSize / m_CellSize + 1;
+    m_Height = mapSize / m_CellSize + 1;
+    ROS_INFO_STREAM( "Creating " << m_Width << " x " << m_Height << " map." );
+    m_MaskingMap.info.resolution = m_CellSize;
+    m_MaskingMap.info.height = m_Height;
+    m_MaskingMap.info.width = m_Width;
+    m_MaskingMap.data.resize(m_Width * m_Height);
+    std::fill( m_MaskingMap.data.begin(), m_MaskingMap.data.end(), homer_mapnav_msgs::ModifyMap::NOT_MASKED );
+
+    m_SlamMap.info.resolution = m_CellSize;
+    m_SlamMap.info.height = m_Height;
+    m_SlamMap.info.width = m_Width;
+    m_SlamMap.data.resize(m_Width * m_Height);
+    std::fill( m_SlamMap.data.begin(), m_SlamMap.data.end(), homer_mapnav_msgs::ModifyMap::NOT_MASKED );
+}
+
+MaskingManager::~MaskingManager()
+{}
+
+nav_msgs::OccupancyGrid::ConstPtr MaskingManager::modifyMap(homer_mapnav_msgs::ModifyMap::ConstPtr msg)
+{
+    //reset SLAM mask map before each masking
+    std::fill( m_SlamMap.data.begin(), m_SlamMap.data.end(), homer_mapnav_msgs::ModifyMap::NOT_MASKED );
+    drawPolygon(msg->region, msg->maskAction, msg->mapLayer);
+
+    nav_msgs::OccupancyGrid::ConstPtr ret;
+    if(msg->mapLayer == 0)
+    {
+        ret = boost::make_shared<const::nav_msgs::OccupancyGrid>(m_SlamMap);
+    }
+    else
+    {
+        ret = boost::make_shared<const::nav_msgs::OccupancyGrid>(m_MaskingMap);
+    }
+    return ret;
+}
+
+nav_msgs::OccupancyGrid::ConstPtr MaskingManager::resetMap()
+{
+    std::fill( m_MaskingMap.data.begin(), m_MaskingMap.data.end(), homer_mapnav_msgs::ModifyMap::NOT_MASKED );
+    nav_msgs::OccupancyGrid::ConstPtr ret = boost::make_shared<const::nav_msgs::OccupancyGrid>(m_MaskingMap);
+    return ret;
+}
+
+void MaskingManager::replaceMap(nav_msgs::OccupancyGrid map)
+{
+    if(map.data.size() != 0)
+        m_MaskingMap = map;
+    else
+        std::fill( m_MaskingMap.data.begin(), m_MaskingMap.data.end(), homer_mapnav_msgs::ModifyMap::NOT_MASKED );
+}
+
+void MaskingManager::drawPolygon ( vector< geometry_msgs::Point > vertices , int value , int mapLayer)
+{
+  if ( vertices.size() == 0 )
+  {
+    ROS_INFO_STREAM( "No vertices given!" );
+    return;
+  }
+    //make temp. map
+    std::vector<int> data(m_Width * m_Height);
+    for ( int i = 0; i < data.size(); i++ )
+    {
+        data[i] = 0;
+    }
+
+  //draw the lines surrounding the polygon
+  for ( unsigned int i = 0; i < vertices.size(); i++ )
+  {
+    int i2 = ( i+1 ) % vertices.size();
+    drawLine ( data, vertices[i].x, vertices[i].y, vertices[i2].x, vertices[i2].y,  1);
+  }
+  //calculate a point in the middle of the polygon
+  float midX = 0;
+  float midY = 0;
+  for ( unsigned int i = 0; i < vertices.size(); i++ )
+  {
+      midX += vertices[i].x;
+      midY += vertices[i].y;
+  }
+  midX /= vertices.size();
+  midY /= vertices.size();
+  //fill polygon
+  fillPolygon ( data, (int)midX, (int)midY, 1 );
+
+    //copy polygon to masking map or slam map (according to parameter mapLayer)
+    for ( int i = 0; i < data.size(); i++ )
+    {
+        if ( data[i] != 0 )
+        {
+            switch(mapLayer)
+            {
+            case 0:         //SLAM map
+                m_SlamMap.data[i] = value;
+                break;
+            case 1:         //Kinect Map. apply masking to masking map
+            case 2:         //masking map
+                m_MaskingMap.data[i] = value;
+                break;
+            }
+        }
+    }
+}
+
+void MaskingManager::drawLine ( std::vector<int> &data, int startX, int startY, int endX, int endY, int value )
+{
+  //bresenham algorithm
+  int x, y, t, dist, xerr, yerr, dx, dy, incx, incy;
+  // compute distances
+  dx = endX - startX;
+  dy = endY - startY;
+
+  // compute increment
+  if ( dx < 0 )
+  {
+    incx = -1;
+    dx = -dx;
+  }
+  else
+  {
+    incx = dx ? 1 : 0;
+  }
+
+  if ( dy < 0 )
+  {
+    incy = -1;
+    dy = -dy;
+  }
+  else
+  {
+    incy = dy ? 1 : 0;
+  }
+
+  // which distance is greater?
+  dist = ( dx > dy ) ? dx : dy;
+  // initializing
+  x = startX;
+  y = startY;
+  xerr = dx;
+  yerr = dy;
+
+  // compute cells
+  for ( t = 0; t < dist; t++ )
+  {
+    data[x + m_Width * y] = value;
+
+    xerr += dx;
+    yerr += dy;
+    if ( xerr > dist )
+    {
+      xerr -= dist;
+      x += incx;
+    }
+    if ( yerr > dist )
+    {
+      yerr -= dist;
+      y += incy;
+    }
+  }
+}
+
+
+void MaskingManager::fillPolygon ( std::vector<int> &data, int x, int y, int value )
+{
+  int index = x + m_Width * y;
+  if ( value != data[index] )
+  {
+    data[index] = value;
+    fillPolygon ( data, x + 1, y, value );
+    fillPolygon ( data, x - 1, y, value );
+    fillPolygon ( data, x, y + 1, value );
+    fillPolygon ( data, x, y - 1, value );
+  }
+}
diff --git a/homer_map_manager/src/Managers/MaskingManager.h b/homer_map_manager/src/Managers/MaskingManager.h
new file mode 100644
index 0000000000000000000000000000000000000000..5f6e402c3b6852caef761a06fd5428bd234b6487
--- /dev/null
+++ b/homer_map_manager/src/Managers/MaskingManager.h
@@ -0,0 +1,51 @@
+#ifndef MaskingManager_H
+#define MaskingManager_H
+
+#include <ros/ros.h>
+
+#include "nav_msgs/OccupancyGrid.h"
+#include "homer_mapnav_msgs/ModifyMap.h"
+
+/**
+ * @class  MaskingManager
+ * @brief  Manages a map that can overwrite values in the SLAM map or store it in a separate layer
+ * @author Malte Knauf, David Gossow
+ */
+class MaskingManager
+{
+  public:
+
+    /** @brief The constructor. */
+    MaskingManager(int mapSize, float resolution);
+
+    /** @brief The destructor. */
+    virtual ~MaskingManager();
+
+    /** modifies either the masking layer or the slam layer (accordingly to the given map layer in the msg */
+    nav_msgs::OccupancyGrid::ConstPtr modifyMap(homer_mapnav_msgs::ModifyMap::ConstPtr msg);
+
+    /** resets the masking map layer */
+    nav_msgs::OccupancyGrid::ConstPtr resetMap();
+
+    /** replaces the masking map layer */
+    void replaceMap(nav_msgs::OccupancyGrid map);
+
+  private:
+
+    /** stores the masking values in the dedicated masking map */
+    nav_msgs::OccupancyGrid m_MaskingMap;
+    /** stores the masking values that are afterwards sent to the slam map */
+    nav_msgs::OccupancyGrid m_SlamMap;
+
+    /** sizes of the masking map layer */
+    int m_Width, m_Height;
+    float m_CellSize;
+
+    /** tools to draw masking polygons */
+    void drawPolygon ( std::vector< geometry_msgs::Point > vertices, int value, int mapLayer );
+    void drawLine ( std::vector<int> &data, int startX, int startY, int endX, int endY, int value );
+    void fillPolygon ( std::vector<int> &data, int x, int y, int value );
+};
+
+#endif
+
diff --git a/homer_map_manager/src/Managers/PoiManager.cpp b/homer_map_manager/src/Managers/PoiManager.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e605b02223e998a5f3b6d096d76e9defc5f83a8e
--- /dev/null
+++ b/homer_map_manager/src/Managers/PoiManager.cpp
@@ -0,0 +1,133 @@
+#include "PoiManager.h"
+
+#include <sstream>
+
+#include "homer_mapnav_msgs/PointsOfInterest.h"
+
+#include <ros/ros.h>
+
+using namespace std;
+
+
+PoiManager::PoiManager(ros::NodeHandle *nh)
+{
+    m_POIsPublisher = nh->advertise<homer_mapnav_msgs::PointsOfInterest>("/map_manager/poi_list", 1);
+}
+
+PoiManager::PoiManager ( std::vector<homer_mapnav_msgs::PointOfInterest> pois )
+{
+  //copy POIs
+  m_Pois = pois;
+}
+
+std::vector<homer_mapnav_msgs::PointOfInterest> PoiManager::getList()
+{
+  return m_Pois;
+}
+
+bool PoiManager::addPointOfInterest (const homer_mapnav_msgs::PointOfInterest::ConstPtr &poi )
+{
+    //make sure there's no POI with the same name
+
+    if ( poiExists ( poi->name ) )
+    {
+      ostringstream stream;
+      stream << "Poi with name " << poi->name << " already exists! Doing nothing.";
+      ROS_WARN_STREAM ( stream.str() );
+      return false;
+    }
+
+    //copy poi & assigning new id
+    homer_mapnav_msgs::PointOfInterest new_poi= *poi;
+
+    ROS_INFO_STREAM ("Adding POI '" << new_poi.name << "'.");
+
+    //insert into list
+    m_Pois.push_back ( new_poi );
+
+    broadcastPoiList();
+    return true;
+}
+
+bool PoiManager::modifyPointOfInterest (const homer_mapnav_msgs::ModifyPOI::ConstPtr &poi )
+{
+  std::string name = poi->old_name;
+
+  std::vector<homer_mapnav_msgs::PointOfInterest>::iterator it;
+
+  for ( it=m_Pois.begin() ; it != m_Pois.end(); it++ )
+  {
+    if ( it->name == name )
+    {
+      *it=poi->poi;
+      broadcastPoiList();
+      return true;
+    }
+  }
+
+  ROS_ERROR_STREAM ( "Cannot modify: POI does not exist!" );
+
+  return false;
+}
+
+void PoiManager::replacePOIList(std::vector<homer_mapnav_msgs::PointOfInterest> poilist)
+{
+    m_Pois = poilist;
+    broadcastPoiList();
+}
+
+bool PoiManager::poiExists ( std::string name )
+{
+  std::vector<homer_mapnav_msgs::PointOfInterest>::iterator it;
+
+  for ( it=m_Pois.begin() ; it != m_Pois.end(); it++ )
+  {
+    if ( it->name == name )
+    {
+      return true;
+    }
+  }
+
+  return false;
+}
+
+bool PoiManager::deletePointOfInterest (std::string name )
+{
+  std::vector< homer_mapnav_msgs::PointOfInterest >::iterator it;
+
+  for ( it=m_Pois.begin() ; it != m_Pois.end(); it++ )
+  {
+    if ( it->name == name )
+    {
+      ROS_INFO_STREAM ("Erasing POI " << name << ".");
+
+      it = m_Pois.erase ( it );
+      broadcastPoiList();
+      return true;
+    }
+  }
+
+  ROS_ERROR_STREAM ("POI " << name << " does not exist.");
+
+  return false;
+}
+
+void PoiManager::broadcastPoiList() {
+  ostringstream stream;
+
+  //print the current list
+  std::vector< homer_mapnav_msgs::PointOfInterest >::iterator it;
+  stream << "Contents of POI list:\n";
+  homer_mapnav_msgs::PointsOfInterest poiMsg;
+  for ( it = m_Pois.begin(); it != m_Pois.end(); it++ ) {
+    stream << "    POI " << it->name << "', " << it->type
+           << ", (" << it->pose.position.x << "," << it->pose.position.y << "), '" << it->remarks << "'\n";
+  }
+  poiMsg.pois = m_Pois;
+  ros::Rate poll_rate(10);
+  while(m_POIsPublisher.getNumSubscribers() == 0)
+      poll_rate.sleep();
+  m_POIsPublisher.publish(poiMsg);
+  ROS_DEBUG_STREAM( stream.str() );
+}
+
diff --git a/homer_map_manager/src/Managers/PoiManager.h b/homer_map_manager/src/Managers/PoiManager.h
new file mode 100644
index 0000000000000000000000000000000000000000..fe925ddb2e35f13766358a065758f28346cee03f
--- /dev/null
+++ b/homer_map_manager/src/Managers/PoiManager.h
@@ -0,0 +1,89 @@
+#ifndef POI_MANAGER_H
+#define POI_MANAGER_H
+
+#include <list>
+
+#include <homer_mapnav_msgs/PointOfInterest.h>
+#include <homer_mapnav_msgs/ModifyPOI.h>
+
+#include <ros/ros.h>
+
+/** @class PoiManager
+ * @author Malte Knauf, David Gossow
+ * @brief This class manages the List of points of interest (POIs)
+  *
+  * This class keeps a list of all POIs within the current map. It provides the usual functions
+  * to edit the list.
+  */
+class PoiManager {
+
+  public:
+
+    /** The constructor of the class. */
+    PoiManager(ros::NodeHandle* nh);
+
+    /** constructor initializing the poi list */
+    PoiManager( std::vector< homer_mapnav_msgs::PointOfInterest > pois );
+
+    /** Does nothing. */
+    ~PoiManager() {}
+
+    /** Adds a new POI to the list if no POI with the same name exists
+      * @param poi pointer to the PointOfInterest message with the POI to be added
+      * @return true if successful, false otherwise
+      */
+    bool addPointOfInterest( const homer_mapnav_msgs::PointOfInterest::ConstPtr& poi );
+
+    /** Replaces a POI with a new one
+      * @param poi pointer with the PointOfInterest to be inserted
+      *            the POI with the same ID as the new one is first deleted
+      * @return true if the old POI was found and could be deleted
+      *         false otherwise
+      */
+    bool modifyPointOfInterest( const homer_mapnav_msgs::ModifyPOI::ConstPtr& poi );
+
+    /** Deletes a POI with a certain name from the list
+      * @param name Name of the POI to be deleted
+      * @return true if the POI was found and could be deleted
+      *         false otherwise
+      */
+    bool deletePointOfInterest( std::string name );
+
+    /**
+     * @brief place the current poi list
+     * @param poilist new poi list
+     */
+    void replacePOIList(std::vector<homer_mapnav_msgs::PointOfInterest> poilist);
+
+
+    /** Returns current POI list
+      * @return the POI list
+      */
+    std::vector< homer_mapnav_msgs::PointOfInterest > getList();
+
+  private:
+
+    /** Looks for POI with name in the list
+      * @param name Name of the POI
+      */
+    bool poiExists( std::string name );
+
+    /**
+     * @brief Publishes a PointsOfInterest Message with current POIs
+
+     */
+    void broadcastPoiList();
+
+    /** The copy constructor of the class.
+      * It's kept private, because it will never be used.
+      */
+    PoiManager( const PoiManager& instance );
+
+    /** Holds the POI vector */
+    std::vector< homer_mapnav_msgs::PointOfInterest > m_Pois;
+
+    /** publisher that publishes the current poi list */
+    ros::Publisher m_POIsPublisher;
+
+};
+#endif
diff --git a/homer_map_manager/src/Managers/RoiManager.cpp b/homer_map_manager/src/Managers/RoiManager.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8e7327b50a8f3c0e71fa246bb4012483fa66bef2
--- /dev/null
+++ b/homer_map_manager/src/Managers/RoiManager.cpp
@@ -0,0 +1,160 @@
+#include <sstream>
+
+#include "homer_mapnav_msgs/RegionsOfInterest.h"
+
+#include "RoiManager.h"
+
+RoiManager::RoiManager(ros::NodeHandle *nh)
+{
+    m_ROIsPublisher = nh->advertise<homer_mapnav_msgs::RegionsOfInterest>("/map_manager/roi_list", 1);
+}
+
+RoiManager::RoiManager (std::vector<homer_mapnav_msgs::RegionOfInterest> rois )
+{
+  //copy POIs
+  m_Rois = rois;
+}
+
+std::vector<homer_mapnav_msgs::RegionOfInterest> RoiManager::getList()
+{
+  return m_Rois;
+}
+
+bool RoiManager::addRegionOfInterest (const homer_mapnav_msgs::RegionOfInterest::ConstPtr &roi ) // TODO
+{
+    if ( roiExists ( roi->id ) )
+    {
+      std::ostringstream stream;
+      stream << "Roi with ID " << roi->id << " (name: " << roi->name << ") already exists! Doing nothing.";
+      ROS_WARN_STREAM ( stream.str() );
+      return false;
+    }
+
+    //copy roi & assigning new id
+    homer_mapnav_msgs::RegionOfInterest new_roi= *roi;
+
+    ROS_INFO_STREAM ("Adding ROI '" << new_roi.name << "' with ID " << roi->id << ".");
+
+    //insert into list
+    m_Rois.push_back ( new_roi );
+
+    broadcastRoiList();
+    return true;
+}
+
+
+bool RoiManager::modifyRegionOfInterest (const homer_mapnav_msgs::RegionOfInterest::ConstPtr &roi )
+{
+  std::vector<homer_mapnav_msgs::RegionOfInterest>::iterator it;
+
+  for ( it=m_Rois.begin() ; it != m_Rois.end(); it++ )
+  {
+    if ( it->id == roi->id )
+    {
+      *it=*roi;
+      broadcastRoiList();
+      return true;
+    }
+  }
+
+  ROS_ERROR_STREAM ( "Cannot modify: ROI does not exist!" );
+
+  return false;
+}
+
+
+void RoiManager::replaceROIList(std::vector<homer_mapnav_msgs::RegionOfInterest> roilist)
+{
+    m_Rois = roilist;
+    broadcastRoiList();
+}
+
+bool RoiManager::roiExists ( int id )
+{
+  std::vector<homer_mapnav_msgs::RegionOfInterest>::iterator it;
+
+  for ( it=m_Rois.begin() ; it != m_Rois.end(); it++ )
+  {
+    if ( it->id == id )
+    {
+      return true;
+    }
+  }
+
+  return false;
+}
+
+
+bool RoiManager::deleteRegionOfInterest (std::string name )
+{
+  std::vector< homer_mapnav_msgs::RegionOfInterest >::iterator it;
+
+  bool modified = false;
+  for ( it=m_Rois.begin() ; it != m_Rois.end(); it++ )
+  {
+    if ( it->name == name )
+    {
+      if(!modified)
+      {
+          ROS_INFO_STREAM ("Erasing all ROIs with name " << name << ".");
+          modified = true;
+      }
+
+      it = m_Rois.erase ( it );
+    }
+  }
+
+  if(modified)
+  {
+      broadcastRoiList();
+      return true;
+  }
+
+  ROS_ERROR_STREAM ("ROI " << name << " does not exist.");
+
+  return false;
+}
+
+
+bool RoiManager::deleteRegionOfInterest (int id )
+{
+  std::vector< homer_mapnav_msgs::RegionOfInterest >::iterator it;
+
+  for ( it=m_Rois.begin() ; it != m_Rois.end(); it++ )
+  {
+    if ( it->id == id )
+    {
+          ROS_INFO_STREAM ("Erasing ROI with ID " << id << ".");
+          it = m_Rois.erase ( it );
+          broadcastRoiList();
+          return true;
+    }
+  }
+
+  ROS_ERROR_STREAM ("ROI with ID " << id << " does not exist.");
+
+  return false;
+}
+
+// TODO
+void RoiManager::broadcastRoiList()
+{
+  std::ostringstream stream;
+
+  //print the current list
+  std::vector< homer_mapnav_msgs::RegionOfInterest >::iterator it;
+  stream << "Contents of POI list:\n";
+  homer_mapnav_msgs::RegionsOfInterest roiMsg;
+  for ( it = m_Rois.begin(); it != m_Rois.end(); it++ ) {
+   // TODO
+   // stream << "    ROI " << it->name << "', " << it->type
+   //        << ", (" << it->pose.position.x << "," << it->pose.position.y << "), '" << it->remarks << "'\n";
+  }
+  roiMsg.rois = m_Rois;
+  ros::Rate poll_rate(10);
+  while(m_ROIsPublisher.getNumSubscribers() == 0)
+      poll_rate.sleep();
+  m_ROIsPublisher.publish(roiMsg);
+  ROS_DEBUG_STREAM( stream.str() );
+}
+
diff --git a/homer_map_manager/src/Managers/RoiManager.h b/homer_map_manager/src/Managers/RoiManager.h
new file mode 100644
index 0000000000000000000000000000000000000000..2e31d0331e826ae5f72d0f29787bbff24dc74003
--- /dev/null
+++ b/homer_map_manager/src/Managers/RoiManager.h
@@ -0,0 +1,94 @@
+#ifndef ROI_MANAGER_H
+#define ROI_MANAGER_H
+
+#include <ros/ros.h>
+#include <homer_mapnav_msgs/RegionOfInterest.h>
+
+
+/**
+ * @class RoiManager (Roi = Region of interest)
+ * @author Viktor Seib (R23)
+ * @brief This class manages the List of regions of interest (ROIs)
+  *
+  * This class keeps a list of all ROIs within the current map. It provides the usual functions
+  * to edit the list.
+  */
+class RoiManager
+{
+
+  public:
+
+    /** The constructor of the class. */
+    RoiManager(ros::NodeHandle* nh);
+
+    /** constructor initializing the roi list */
+    RoiManager( std::vector< homer_mapnav_msgs::RegionOfInterest > rois );
+
+    /** Does nothing. */
+    ~RoiManager() {}
+
+    /** Adds a new ROI to the list, in contrast to POIs, several ROIs with the same name are allowed
+      * @param roi RegionOfInterest message with the ROI to be added
+      * @return true if successful, false otherwise
+      */
+    bool addRegionOfInterest( const homer_mapnav_msgs::RegionOfInterest::ConstPtr& roi );
+
+    /** Replaces a ROI with a new one
+      * @param roi RegionOfInterest to be inserted
+      *            the ROI with the same ID as the new one is first deleted
+      * @return true if the old ROI was found and could be deleted
+      *         false otherwise
+      */
+    bool modifyRegionOfInterest( const homer_mapnav_msgs::RegionOfInterest::ConstPtr& roi );
+
+    /** Deletes all ROIs with a certain name from the list
+      * @param name Name of the ROIs to be deleted
+      * @return true if the ROI was found and could be deleted
+      *         false otherwise
+      */
+    bool deleteRegionOfInterest( std::string name );
+
+    /** Deltes ROI with the given id
+     * @param id ID of ROI to be deleted
+     * @return true if the ROI was found and could be deleted
+     *         false otherwise
+     */
+    bool deleteRegionOfInterest( int id );
+
+    /**
+     * @brief place the current roi list
+     * @param roilist new roi list
+     */
+    void replaceROIList(std::vector<homer_mapnav_msgs::RegionOfInterest> roilist);
+
+
+    /** Returns current ROI list
+      * @return the ROI list
+      */
+    std::vector< homer_mapnav_msgs::RegionOfInterest > getList();
+
+  private:
+
+    /** Looks for ROI with name in the list
+      * @param id ID of the ROI
+      */
+    bool roiExists(int id );
+
+    /**
+     * @brief Publishes a RegionsOfInterest Message with current ROIs
+
+     */
+    void broadcastRoiList();
+
+    /** The copy constructor of the class.
+      * It's kept private, because it will never be used.
+      */
+    RoiManager( const RoiManager& instance );
+
+    /** Holds the ROI vector */
+    std::vector< homer_mapnav_msgs::RegionOfInterest > m_Rois;
+
+    /** publisher that publishes the current roi list */
+    ros::Publisher m_ROIsPublisher;
+};
+#endif
diff --git a/homer_map_manager/src/MapIO/CMakeLists.txt b/homer_map_manager/src/MapIO/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bb3933f1f42f3bc1c74187dff39a4a5d171be5e9
--- /dev/null
+++ b/homer_map_manager/src/MapIO/CMakeLists.txt
@@ -0,0 +1,3 @@
+add_library(image_io image_loader.cpp map_saver.cpp map_loader.cpp)
+target_link_libraries(image_io SDL SDL_image yaml-cpp)
+add_dependencies(image_io homer_mapnav_msgs_gencpp)
diff --git a/homer_map_manager/src/MapIO/image_loader.cpp b/homer_map_manager/src/MapIO/image_loader.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c1f1bf78f4216d724122345a0ece34d93214d51c
--- /dev/null
+++ b/homer_map_manager/src/MapIO/image_loader.cpp
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2008, Willow Garage, Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the Willow Garage, Inc. nor the names of its
+ *       contributors may be used to endorse or promote products derived from
+ *       this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This file contains helper functions for loading images as maps.
+ * 
+ * Author: Brian Gerkey
+ */
+
+#include <cstring>
+#include <stdexcept>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+// We use SDL_image to load the image from disk
+#include <SDL/SDL_image.h>
+
+#include "image_loader.h"
+#include <tf/tf.h>
+
+// compute linear index for given map coords
+#define MAP_IDX(sx, i, j) ((sx) * (j) + (i))
+
+namespace map_server
+{
+
+void
+loadMapFromFile(nav_msgs::OccupancyGrid* map,
+                const char* fname, double res, bool negate,
+                double occ_th, double free_th, double* origin)
+{
+  SDL_Surface* img;
+
+  unsigned char* pixels;
+  unsigned char* p;
+  int rowstride, n_channels;
+  unsigned int i,j;
+  int k;
+  double occ;
+  int color_sum;
+  double color_avg;
+
+  // Load the image using SDL.  If we get NULL back, the image load failed.
+  if(!(img = IMG_Load(fname)))
+  {
+    std::string errmsg = std::string("failed to open image file \"") + 
+            std::string(fname) + std::string("\"");
+    throw std::runtime_error(errmsg);
+  }
+
+  // Copy the image data into the map structure
+  map->info.width = img->w;
+  map->info.height = img->h;
+  map->info.resolution = res;
+  map->info.origin.position.x = *(origin);
+  map->info.origin.position.y = *(origin+1);
+  map->info.origin.position.z = 0.0;
+  tf::Quaternion q;
+  q.setRPY(0,0, *(origin+2));
+  map->info.origin.orientation.x = q.x();
+  map->info.origin.orientation.y = q.y();
+  map->info.origin.orientation.z = q.z();
+  map->info.origin.orientation.w = q.w();
+
+  // Allocate space to hold the data
+  map->data.resize(map->info.width * map->info.height);
+
+  // Get values that we'll need to iterate through the pixels
+  rowstride = img->pitch;
+  n_channels = img->format->BytesPerPixel;
+
+  // Copy pixel data into the map structure
+  pixels = (unsigned char*)(img->pixels);
+  for(j = 0; j < map->info.height; j++)
+  {
+    for (i = 0; i < map->info.width; i++)
+    {
+      // Compute mean of RGB for this pixel
+      p = pixels + j*rowstride + i*n_channels;
+      color_sum = 0;
+      for(k=0;k<n_channels;k++)
+        color_sum += *(p + (k));
+      color_avg = color_sum / (double)n_channels;
+
+      // If negate is true, we consider blacker pixels free, and whiter
+      // pixels free.  Otherwise, it's vice versa.
+      if(negate)
+        occ = color_avg / 255.0;
+      else
+        occ = (255 - color_avg) / 255.0;
+      
+      // Apply thresholds to RGB means to determine occupancy values for
+      // map.  Note that we invert the graphics-ordering of the pixels to
+      // produce a map with cell (0,0) in the lower-left corner.
+      if(occ > occ_th)
+        map->data[MAP_IDX(map->info.width,i,map->info.height - j - 1)] = 99;
+      else if(occ < free_th)
+        map->data[MAP_IDX(map->info.width,i,map->info.height - j - 1)] = 0;
+      else
+        map->data[MAP_IDX(map->info.width,i,map->info.height - j - 1)] = -1;
+    }
+  }
+
+  SDL_FreeSurface(img);
+}
+
+}
diff --git a/homer_map_manager/src/MapIO/image_loader.h b/homer_map_manager/src/MapIO/image_loader.h
new file mode 100644
index 0000000000000000000000000000000000000000..beda184a226c50b68af4c14c644cae864b420111
--- /dev/null
+++ b/homer_map_manager/src/MapIO/image_loader.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2008, Willow Garage, Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the Willow Garage, Inc. nor the names of its
+ *       contributors may be used to endorse or promote products derived from
+ *       this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef MAP_SERVER_MAP_SERVER_H
+#define MAP_SERVER_MAP_SERVER_H
+
+/*
+ * Author: Brian Gerkey
+ */
+
+#include "nav_msgs/GetMap.h"
+
+namespace map_server
+{
+
+/** Read the image from file and fill out the resp object, for later 
+ * use when our services are requested. 
+ *
+ * @param resp The map wil be written into here
+ * @param fname The image file to read from
+ * @param res The resolution of the map (gets stored in resp)
+ * @param negate If true, then whiter pixels are occupied, and blacker
+ *               pixels are free
+ * @param occ_th Threshold above which pixels are occupied
+ * @param free_th Threshold below which pixels are free
+ * @param origin Triple specifying 2-D pose of lower-left corner of image
+ *
+ * @throws std::runtime_error If the image file can't be loaded
+ * */
+void loadMapFromFile(nav_msgs::OccupancyGrid* map,
+                     const char* fname, double res, bool negate,
+                     double occ_th, double free_th, double* origin);
+}
+
+#endif
diff --git a/homer_map_manager/src/MapIO/map_loader.cpp b/homer_map_manager/src/MapIO/map_loader.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..87919e2e9df93fc0d3a1727e0dfdb576d7d9a6d6
--- /dev/null
+++ b/homer_map_manager/src/MapIO/map_loader.cpp
@@ -0,0 +1,209 @@
+/*
+ * Copyright (c) 2008, Willow Garage, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the Willow Garage, Inc. nor the names of its
+ *       contributors may be used to endorse or promote products derived from
+ *       this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Author: Brian Gerkey */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libgen.h>
+#include <fstream>
+
+#include "ros/ros.h"
+#include "ros/console.h"
+#include "image_loader.h"
+#include "nav_msgs/MapMetaData.h"
+#include "yaml-cpp/yaml.h"
+#include "tf/transform_datatypes.h"
+
+#include "map_loader.h"
+
+/** Trivial constructor */
+MapServer::MapServer(const std::string fname)
+{
+	std::string slammapfname = "";
+	std::string maskingmapfname = "";
+	double origin[3];
+	int negate;
+	double res, occ_th, free_th;
+	std::string frame_id;
+	frame_id = "map";
+	//mapfname = fname + ".pgm";
+	//std::ifstream fin((fname + ".yaml").c_str());
+	std::ifstream fin(fname.c_str());
+	if (fin.fail()) {
+		ROS_ERROR("Map_server could not open %s.", fname.c_str());
+		exit(-1);
+	}
+
+	YAML::Node doc = YAML::LoadFile(fname);
+
+	try { 
+		res = doc["resolution"].as<double>();
+	} catch (YAML::InvalidScalar) { 
+		ROS_ERROR("The map does not contain a resolution tag or it is invalid.");
+		exit(-1);
+	}
+	try { 
+		negate = doc["negate"].as<int>(); 
+	} catch (YAML::InvalidScalar) { 
+		ROS_ERROR("The map does not contain a negate tag or it is invalid.");
+		exit(-1);
+	}
+	try { 
+		occ_th = doc["occupied_thresh"].as<double>(); 
+	} catch (YAML::InvalidScalar) { 
+		ROS_ERROR("The map does not contain an occupied_thresh tag or it is invalid.");
+		exit(-1);
+	}
+	try { 
+		free_th = doc["free_thresh"].as<double>(); 
+	} catch (YAML::InvalidScalar) { 
+		ROS_ERROR("The map does not contain a free_thresh tag or it is invalid.");
+		exit(-1);
+	}
+	try { 
+		origin[0] = doc["origin"][0].as<double>(); 
+		origin[1] = doc["origin"][1].as<double>(); 
+		origin[2] = doc["origin"][2].as<double>(); 
+	} catch (YAML::InvalidScalar) { 
+		ROS_ERROR("The map does not contain an origin tag or it is invalid.");
+		exit(-1);
+	}
+	try {
+		slammapfname = doc["image"].as<std::string>();
+		// TODO: make this path-handling more robust
+		if(slammapfname.size() == 0)
+		{
+			ROS_ERROR("The image tag cannot be an empty string.");
+			exit(-1);
+		}
+		if(slammapfname[0] != '/')
+		{
+			// dirname can modify what you pass it
+			char* fname_copy = strdup(fname.c_str());
+			slammapfname = std::string(dirname(fname_copy)) + '/' + slammapfname;
+			free(fname_copy);
+		}
+	} catch (YAML::InvalidScalar) { 
+		ROS_ERROR("The map does not contain an image tag or it is invalid.");
+		exit(-1);
+	}
+	//get masking map image path if available
+	if(doc["mask_image"])
+	{
+		maskingmapfname = doc["mask_image"].as<std::string>();
+		// TODO: make this path-handling more robust
+		if(maskingmapfname.size() == 0)
+		{
+			ROS_ERROR("The image tag cannot be an empty string.");
+			exit(-1);
+		}
+		if(maskingmapfname[0] != '/')
+		{
+			//              // dirname can modify what you pass it
+			char* fname_copy = strdup(fname.c_str());
+			maskingmapfname = std::string(dirname(fname_copy)) + '/' + maskingmapfname;
+			free(fname_copy);
+		}
+	}
+
+	//get POIs if existent
+	if(doc["pois"])
+	{
+		ROS_INFO_STREAM("Found "  << doc["pois"].size() << " pois");
+		for(size_t i = 0; i < doc["pois"].size(); ++i)
+		{
+			std::string name;
+			int type;
+			float posX;
+			float posY;
+			float theta;
+			std::string remarks;
+			name = doc["pois"][i]["name"].as<std::string>() ;
+			type = doc["pois"][i]["type"].as<int>() ;
+			posX = doc["pois"][i]["x"].as<double>() ;
+			posY = doc["pois"][i]["y"].as<double>() ;
+			theta =	doc["pois"][i]["theta"].as<double>() ;
+			remarks = doc["pois"][i]["remarks"].as<std::string>("-") ;
+
+			homer_mapnav_msgs::PointOfInterest poi;
+			poi.name = name;
+			poi.type = type;
+			poi.pose.position.x = posX;
+			poi.pose.position.y = posY;
+			poi.pose.position.z = 0.0;
+			poi.pose.orientation = tf::createQuaternionMsgFromYaw(theta);
+			poi.remarks = remarks;
+
+			poiList.push_back(poi);
+		}
+	}
+
+	ROS_INFO("Loading SLAM map from image \"%s\"", slammapfname.c_str());
+	map_server::loadMapFromFile(&m_SLAMMap,slammapfname.c_str(),res,negate,occ_th,free_th, origin);
+	m_SLAMMap.info.map_load_time = ros::Time::now();
+	m_SLAMMap.header.frame_id = frame_id;
+	m_SLAMMap.header.stamp = ros::Time::now();
+	ROS_INFO("Read a %d X %d SLAM map @ %.3lf m/cell",
+			m_SLAMMap.info.width,
+			m_SLAMMap.info.height,
+			m_SLAMMap.info.resolution);
+
+	if(maskingmapfname != "")
+	{
+		ROS_INFO("Loading masking map from image \"%s\"", maskingmapfname.c_str());
+		map_server::loadMapFromFile(&m_MaskingMap,maskingmapfname.c_str(),res,negate,occ_th,free_th, origin);
+		m_MaskingMap.info.map_load_time = ros::Time::now();
+		m_MaskingMap.header.frame_id = frame_id;
+		m_MaskingMap.header.stamp = ros::Time::now();
+		ROS_INFO("Read a %d X %d masking map @ %.3lf m/cell",
+				m_MaskingMap.info.width,
+				m_MaskingMap.info.height,
+				m_MaskingMap.info.resolution);
+	}
+
+}
+
+nav_msgs::OccupancyGrid MapServer::getSLAMMap()
+{
+	return m_SLAMMap;
+}
+
+nav_msgs::OccupancyGrid MapServer::getMaskingMap()
+{
+	return m_MaskingMap;
+}
+
+std::vector<homer_mapnav_msgs::PointOfInterest> MapServer::getPois()
+{
+	return poiList;
+}
+
+
diff --git a/homer_map_manager/src/MapIO/map_loader.h b/homer_map_manager/src/MapIO/map_loader.h
new file mode 100644
index 0000000000000000000000000000000000000000..46ea31fa99bb4f5020a1699274f6ff3317909676
--- /dev/null
+++ b/homer_map_manager/src/MapIO/map_loader.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2008, Willow Garage, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the Willow Garage, Inc. nor the names of its
+ *       contributors may be used to endorse or promote products derived from
+ *       this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Author: Brian Gerkey */
+
+#define USAGE "\nUSAGE: map_server <map.yaml>\n" \
+              "  map.yaml: map description file\n" \
+              "DEPRECATED USAGE: map_server <map> <resolution>\n" \
+              "  map: image file to load\n"\
+              "  resolution: map resolution [meters/pixel]"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libgen.h>
+#include <fstream>
+
+#include "ros/ros.h"
+#include "ros/console.h"
+#include "image_loader.h"
+#include "nav_msgs/OccupancyGrid.h"
+#include "yaml-cpp/yaml.h"
+
+#include <homer_mapnav_msgs/PointOfInterest.h>
+
+class MapServer
+{
+  public:
+    /** Trivial constructor */
+    MapServer(const std::string fname);
+
+    nav_msgs::OccupancyGrid getSLAMMap();
+
+    nav_msgs::OccupancyGrid getMaskingMap();
+
+    std::vector<homer_mapnav_msgs::PointOfInterest> getPois();
+
+  
+  private:
+
+    /** The map data is cached here
+     */
+    nav_msgs::GetMap::Response map_resp_;
+    nav_msgs::OccupancyGrid m_SLAMMap;
+    nav_msgs::OccupancyGrid m_MaskingMap;
+
+
+    std::vector<homer_mapnav_msgs::PointOfInterest> poiList;
+
+};
diff --git a/homer_map_manager/src/MapIO/map_saver.cpp b/homer_map_manager/src/MapIO/map_saver.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..993a732bbdc952ce37f912cbe1aee0c468720c53
--- /dev/null
+++ b/homer_map_manager/src/MapIO/map_saver.cpp
@@ -0,0 +1,140 @@
+/*
+ * map_saver
+ * Copyright (c) 2008, Willow Garage, Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the <ORGANIZATION> nor the names of its
+ *       contributors may be used to endorse or promote products derived from
+ *       this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "map_saver.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <tf/tf.h>
+
+using namespace std;
+ 
+
+    MapGenerator::MapGenerator(const std::string mapname)
+    {
+        m_Mapname = mapname;
+    }
+
+    void MapGenerator::saveMapLayer(const nav_msgs::OccupancyGridConstPtr &map, std::string fileName)
+    {
+        ROS_INFO("Writing map occupancy data to %s", fileName.c_str());
+        FILE* out = fopen(fileName.c_str(), "w");
+        if (!out)
+        {
+          ROS_ERROR("Couldn't save map file to %s", fileName.c_str());
+          return;
+        }
+
+        fprintf(out, "P5\n# CREATOR: map_saver.cpp %.3f m/pix\n%d %d\n255\n",
+                map->info.resolution, map->info.width, map->info.height);
+        for(unsigned int y = 0; y < map->info.height; y++) {
+          for(unsigned int x = 0; x < map->info.width; x++) {
+            unsigned int i = x + (map->info.height - y - 1) * map->info.width;
+            if (map->data[i] == -1) {
+                fputc(205, out);
+            } else if (map->data[i] < 20) { //occ [0,0.2)
+                fputc(254, out);
+            } else if (map->data[i] > 65) { //occ (0.65,1]
+                fputc(000, out);
+            } else { //occ [0.2,0.65]
+                fputc(205, out);
+            }
+          }
+        }
+        fclose(out);
+    }
+
+    void MapGenerator::save(const nav_msgs::OccupancyGridConstPtr& SLAMMap,
+                            const nav_msgs::OccupancyGridConstPtr& maskingMap,
+                            std::vector<homer_mapnav_msgs::PointOfInterest> poiList)
+    {
+      uint a = m_Mapname.rfind('/');
+      std::string filename = m_Mapname.substr(a+1, m_Mapname.size()-1);
+      int status;
+      status = mkdir(m_Mapname.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
+      std::string SLAMMapdatafile = filename + "_SLAM.pgm";
+      std::string maskingMapdatafile = "";
+      saveMapLayer(SLAMMap, m_Mapname + "/" + SLAMMapdatafile);
+      if(maskingMap != NULL)
+      {
+        maskingMapdatafile = filename + "_mask.pgm";
+        saveMapLayer(maskingMap, m_Mapname + "/" + maskingMapdatafile);
+      }
+      std::string mapmetadatafile = m_Mapname + "/" + filename + ".yaml";
+      ROS_INFO("Writing map metadata to %s", mapmetadatafile.c_str());
+      FILE* yaml = fopen(mapmetadatafile.c_str(), "w");
+
+
+      /*
+resolution: 0.100000
+origin: [0.000000, 0.000000, 0.000000]
+#
+negate: 0
+occupied_thresh: 0.65
+free_thresh: 0.196
+
+       */
+
+      geometry_msgs::Quaternion orientation = SLAMMap->info.origin.orientation;
+      //btMatrix3x3 mat(btQuaternion(orientation.x, orientation.y, orientation.z, orientation.w));
+      tf::Quaternion quat_tf;
+      tf::quaternionMsgToTF(orientation, quat_tf);
+      double yaw = tf::getYaw(quat_tf);
+      //mat.getEulerYPR(yaw, pitch, roll);
+
+      stringstream pois;
+      if(!poiList.empty())
+      {
+        pois << "pois:\n";
+        std::vector< homer_mapnav_msgs::PointOfInterest >::iterator it;
+        for ( it = poiList.begin(); it != poiList.end(); it++ ) {
+            pois << " - name: " << it->name << "\n";
+            pois << "   type: " << it->type << "\n";
+            pois << "   x: " << it->pose.position.x << "\n";
+            pois << "   y: " << it->pose.position.y << "\n";
+            pois << "   theta: " << tf::getYaw(it->pose.orientation) << "\n";
+            pois << "   remarks: " << it->remarks << "\n";
+        }
+      }
+      string poiStr = pois.str();
+
+      string maskImage = "";
+      if(maskingMapdatafile != "")
+        maskImage = "\nmask_image: ";
+      fprintf(yaml, "image: %s%s%s\nresolution: %f\norigin: [%f, %f, %f]\nnegate: 0\noccupied_thresh: 0.65\nfree_thresh: 0.195\n\n%s",
+              SLAMMapdatafile.c_str(), maskImage.c_str(), maskingMapdatafile.c_str(), SLAMMap->info.resolution, SLAMMap->info.origin.position.x, SLAMMap->info.origin.position.y, yaw, poiStr.c_str());
+      fclose(yaml);
+
+      ROS_INFO("Done\n");
+    }
+
+
+
diff --git a/homer_map_manager/src/MapIO/map_saver.h b/homer_map_manager/src/MapIO/map_saver.h
new file mode 100644
index 0000000000000000000000000000000000000000..d6740fd9446a9dcf9b3633df8d138c5199726979
--- /dev/null
+++ b/homer_map_manager/src/MapIO/map_saver.h
@@ -0,0 +1,63 @@
+/*
+ * map_saver
+ * Copyright (c) 2008, Willow Garage, Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the <ORGANIZATION> nor the names of its
+ *       contributors may be used to endorse or promote products derived from
+ *       this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <cstdio>
+#include "ros/ros.h"
+#include "ros/console.h"
+#include "nav_msgs/GetMap.h"
+//#include "LinearMath/btMatrix3x3.h"
+#include "geometry_msgs/Quaternion.h"
+
+#include <homer_mapnav_msgs/PointOfInterest.h>
+
+using namespace std;
+ 
+/**
+ * @brief Map generation node.
+ */
+class MapGenerator 
+{
+
+  public:
+    MapGenerator(const std::string mapname);
+
+    void save(const nav_msgs::OccupancyGridConstPtr& SLAMMap,
+              const nav_msgs::OccupancyGridConstPtr& maskingMap,
+              std::vector<homer_mapnav_msgs::PointOfInterest> poiList);
+
+  private:
+    std::string m_Mapname;
+
+    void saveMapLayer(const nav_msgs::OccupancyGridConstPtr& map, std::string fileName);
+
+};
+
+
+
diff --git a/homer_map_manager/src/Workers/PointOfInterest/CMakeLists.txt b/homer_map_manager/src/Workers/PointOfInterest/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..20de7bca5f3d6a9251c54d3730e064fafb807409
--- /dev/null
+++ b/homer_map_manager/src/Workers/PointOfInterest/CMakeLists.txt
@@ -0,0 +1,5 @@
+set(PointOfInterest_SRC
+  PoiManager.cpp
+)
+
+add_library(MapManagerPointOfInterest ${PointOfInterest_SRC})
diff --git a/homer_map_manager/src/Workers/PointOfInterest/PointOfInterest.h b/homer_map_manager/src/Workers/PointOfInterest/PointOfInterest.h
new file mode 100644
index 0000000000000000000000000000000000000000..b61578e82891451d8333d9a12f8396b5067920d1
--- /dev/null
+++ b/homer_map_manager/src/Workers/PointOfInterest/PointOfInterest.h
@@ -0,0 +1,186 @@
+#ifndef POINTOFINTEREST_H
+#define POINTOFINTEREST_H
+
+#include <string>
+#include <map>
+
+#include "Workers/Math/Pose.h"
+//#include "Architecture/Serializer/ExtendedOutStream.h"
+//#include "Architecture/Serializer/ExtendedInStream.h"
+
+using namespace std;
+
+typedef std::map< std::string, std::string > StringMapT;
+typedef std::map< std::string, float > FloatMapT;
+typedef std::map< std::string, int > IntMapT;
+
+/**
+ * @class PointOfInterest
+ *
+ * @author Robert Hoffmann (RX), David Gossow (RX), Simon Graeser (RX),
+ *         Nicolai Wojke (R14)
+ *
+ * @brief This class represents a point of interest (POI)
+ *
+ * This class represents a point of interest (POI). It is derived from
+ * Point2D and thus inherits its methods x(), y(), and theta() to query
+ * the world position and orientation.
+ */
+
+class PointOfInterest: public Pose
+{
+
+  public:
+
+    enum PoiType {  DEFAULT           =100,
+                    VICTIM            =200,
+                    OBJECT            =300,
+                    GRIPPABLE_OBJECT  =400,
+                    PERSON            =600,
+                    ROOMBA            =700,
+                    HAZARD_MATERIAL   =800,
+                    START_POSITION    =900,
+                    START_ORIENTATION =1000
+               };
+
+    PointOfInterest( );
+
+    /**
+      * @brief The constructor
+      *
+      * Creates a point of interest with orientation 0.0.
+      *
+      * @param id unique identification number
+      * @param name name of the poi
+      * @param type type of the poi (victim, etc.)
+      * @param posX,posY position within the map
+      * @param remarks additional information associated with the poi
+      */
+    PointOfInterest ( int id, string name, PoiType type, float posX, float posY, string remarks,
+                      StringMapT stringMap=StringMapT(), FloatMapT floatMap=FloatMapT() ,
+                      IntMapT intMap=IntMapT() )
+        : Pose ( posX, posY, 0.0f )
+    {
+      init ( id, name, type , remarks, stringMap, floatMap, intMap );
+    }
+
+    /** @brief The constructor
+      * @param id unique identification number
+      * @param name name of the poi
+      * @param type type of the poi (victim, etc.)
+      * @param posX,posY position within the map
+      * @param theta orientation of the poi
+      * @param remarks additional information associated with the poi
+      */
+    PointOfInterest ( int id, string name, PoiType type, float posX, float posY, float theta, string remarks,
+                      StringMapT stringMap=StringMapT(), FloatMapT floatMap=FloatMapT(), IntMapT intMap=IntMapT() )
+        : Pose ( posX, posY, theta )
+    {
+      init ( id, name, type , remarks, stringMap, floatMap, intMap );
+    }
+
+    /** @brief Alternative constructor omitting the id parameter */
+    PointOfInterest ( string name, PoiType type, float posX, float posY , string remarks )
+        : Pose ( posX, posY, 0.0f )
+    {
+      init ( -1, name, type , remarks, StringMapT(), FloatMapT(), IntMapT() );
+    }
+
+    /** @brief Alternative constructor omitting the id parameter */
+    PointOfInterest ( string name, PoiType type, float posX, float posY , float theta, string remarks )
+        : Pose ( posX, posY, theta )
+    {
+      init ( -1, name, type , remarks, StringMapT(), FloatMapT(), IntMapT() );
+    }
+
+    /** @brief Copy constructor, assigns a new id */
+    PointOfInterest ( int id, const PointOfInterest* poi );
+
+    /** @brief The standard destructor */
+    virtual ~PointOfInterest() {}
+
+    /** @brief Tests whether this PointOfInterest has the specified name or not, ignoring case.
+      * @param name The name to test as a string.
+      * @return true if the given name matches the PointOfInterest's name (not case-sensitive), false if not.
+      */
+    bool hasName ( string name ) const;
+
+    /** @brief Tests whether this PointOfInterest has the specified string in its name or not, ignoring case.
+     * @param part The string to test.
+     * @return true if the given string is contained in the PointOfInterest's name (not case-sensitive), false if not.
+     */
+    bool hasInName ( string part ) const;
+
+    // SETTER FUNCTIONS /////////////////////////////
+
+    /** @param remarks Changes the contents of remarks attribute. */
+    void setRemarks ( string remarks ) { m_Remarks = remarks; }
+
+    void setName ( string name ) { m_Name = name; }
+
+    /** @brief Add a new String to the StringMap */
+    void addString ( string key, string data ) { m_StringMap.insert ( pair< string, string > ( key, data ) ); }
+
+    /** @brief Add a new Float to the FloatMap */
+    void addFloat ( string key, float data ) { m_FloatMap.insert ( pair< string, float > ( key, data ) ); }
+
+    /** @brief Add a new Int to the IntMap */
+    void addInt ( string key, int data ) { m_IntMap.insert ( pair< string, int > ( key, data ) ); }
+
+    // GETTER FUNCTIONS //////////////////////
+
+    /** @return id attribute */
+    int getId() const { return m_Id; }
+
+    /** @return name attribute */
+    string getName() const { return m_Name; }
+
+    /** @return type attribute */
+    PoiType getType() const { return m_Type; }
+
+    /** @return remarks attribute */
+    string getRemarks() const { return m_Remarks; }
+
+    /** Get the string to the matching string */
+    string getString ( string key ) const { return m_StringMap.find ( key )->second; }
+
+    /** Get the float to the matching string */
+    float getFloat ( string key ) const { return m_FloatMap.find ( key )->second; }
+
+    /** Get the Int to the matching string */
+    int getInt ( string key ) const { return m_IntMap.find ( key )->second; }
+
+    /** Get the string map */
+    map<string, string> getStringMap() const { return m_StringMap; }
+
+    /** Get the float map */
+    map<string, float> getFloatMap() const { return m_FloatMap; }
+
+    /** Get the int map */
+    map<string, int> getIntMap() const { return m_IntMap; }
+
+
+    // (DE)SERIALIZATION ///////////////////////////////////
+    //TODO
+    //    void storer ( ExtendedOutStream& ) const ;
+//    PointOfInterest ( ExtendedInStream& );
+
+    /** @brief print description */
+    void printOn ( ostream& strm ) const;
+
+  private:
+
+    void init ( int id, string name, PoiType type, string remarks, StringMapT stringMap, FloatMapT floatMap, IntMapT intMap );
+
+    int m_Id;
+    string m_Name;
+    PoiType m_Type;
+    string m_Remarks;
+
+    StringMapT m_StringMap;
+    IntMapT m_IntMap;
+    FloatMapT m_FloatMap;
+
+};
+
+#endif
diff --git a/homer_map_manager/src/main.cpp b/homer_map_manager/src/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8657ac2601953df6e140e8405dbf8b61b9515c65
--- /dev/null
+++ b/homer_map_manager/src/main.cpp
@@ -0,0 +1,28 @@
+#include <ros/ros.h>
+
+#include "map_manager_node.h"
+
+int main(int argc, char** argv)
+{
+    ros::init(argc, argv, "map_manager");
+    ros::NodeHandle nh;
+
+    MapManagerNode node(&nh);
+
+    ros::Rate loop_rate(5);
+	while (ros::ok())
+	{
+		try	
+		{
+			ros::spinOnce();
+			loop_rate.sleep();
+		}
+        catch (exception &e)
+		{
+			std::cout<<"Exception in main loop"<<e.what()<<std::endl;
+		}
+	}
+
+
+    return 0;
+}
diff --git a/homer_map_manager/src/map_manager_node.cpp b/homer_map_manager/src/map_manager_node.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..079e4c46383782649f8b3056a41fdba2dfc1c67b
--- /dev/null
+++ b/homer_map_manager/src/map_manager_node.cpp
@@ -0,0 +1,296 @@
+#include "map_manager_node.h"
+
+#include "MapIO/map_saver.h"
+#include "MapIO/map_loader.h"
+#include "tools/loadRosConfig.h"
+#include "tools/tools.h"
+
+
+MapManagerNode::MapManagerNode(ros::NodeHandle *nh)
+{
+    m_LastLaserTime = ros::Time(0);
+    m_Nodehandle = nh;
+
+    int mapSize;
+    float resolution;
+    loadConfigValue("/homer_mapping/size", mapSize);
+    loadConfigValue("/homer_mapping/resolution", resolution);
+    m_MapManager = new MapManager(m_Nodehandle);
+    m_POIManager = new PoiManager(m_Nodehandle);
+    m_MaskingManager = new MaskingManager(mapSize, resolution);
+
+    //subscriptions of MapManagerModule
+    m_OctomapSubscriber = m_Nodehandle->subscribe("/projected_map", 1, &MapManagerNode::callbackOctomapMap, this);
+    m_SLAMMapSubscriber = m_Nodehandle->subscribe("/homer_mapping/slam_map", 1, &MapManagerNode::callbackSLAMMap, this);
+    m_SaveMapSubscriber = m_Nodehandle->subscribe("/map_manager/save_map", 1, &MapManagerNode::callbackSaveMap, this);
+    m_LoadMapSubscriber = m_Nodehandle->subscribe("/map_manager/load_map", 1, &MapManagerNode::callbackLoadMap, this);
+    m_MapVisibilitySubscriber = m_Nodehandle->subscribe("/map_manager/toggle_map_visibility", 1, &MapManagerNode::callbackMapVisibility, this);
+    m_LaserScanSubscriber = m_Nodehandle->subscribe("/scan", 1, &MapManagerNode::callbackLaserScan, this);
+
+    //subscriptions of PoiManager
+    m_AddPOISubscriber = m_Nodehandle->subscribe("/map_manager/add_POI", 20, &MapManagerNode::callbackAddPOI, this);
+    m_ModifyPOISubscriber = m_Nodehandle->subscribe("/map_manager/modify_POI", 100, &MapManagerNode::callbackModifyPOI, this);
+    m_DeletePOISubscriber = m_Nodehandle->subscribe("/map_manager/delete_POI", 100, &MapManagerNode::callbackDeletePOI, this);
+
+    //subscriptions of RoiManager
+    m_AddROISubscriber = m_Nodehandle->subscribe("/map_manager/add_ROI", 20, &MapManagerNode::callbackAddROI, this);
+    m_ModifyROISubscriber = m_Nodehandle->subscribe("/map_manager/modify_ROI", 100, &MapManagerNode::callbackModifyROI, this);
+    m_DeleteROIByNameSubscriber = m_Nodehandle->subscribe("/map_manager/delete_ROI_by_name", 100, &MapManagerNode::callbackDeleteROIbyName, this);
+    m_DeleteROIByIDSubscriber = m_Nodehandle->subscribe("/map_manager/delete_ROI_by_id", 100, &MapManagerNode::callbackDeleteROIbyID, this);
+
+    //subscribtions of MaskingMapModule
+    m_ModifyMapSubscriber = m_Nodehandle->subscribe("/map_manager/modify_map", 1, &MapManagerNode::callbackModifyMap, this);
+    m_ResetMapsSubscriber = m_Nodehandle->subscribe("/map_manager/reset_maps", 1, &MapManagerNode::callbackResetMaps, this);
+
+    //loaded map publisher
+    m_LoadedMapPublisher = nh->advertise<nav_msgs::OccupancyGrid>("/map_manager/loaded_map", 1);
+
+    //mask slam publisher
+    m_MaskSlamMapPublisher = nh->advertise<nav_msgs::OccupancyGrid>("/map_manager/mask_slam", 1);
+
+    m_GetPOIsService = nh->advertiseService("/map_manager/get_pois", &MapManagerNode::getPOIsService, this);
+    m_GetROIsService = nh->advertiseService("/map_manager/get_rois", &MapManagerNode::getROIsService, this);
+
+	// Services for Map Handling
+    m_SaveMapService 			= nh->advertiseService("/map_manager/save_map", &MapManagerNode::saveMapService, this);
+    m_ResetMapService 			= nh->advertiseService("/map_manager/reset_map", &MapManagerNode::resetMapService, this);
+    m_LoadMapService 			= nh->advertiseService("/map_manager/load_map", &MapManagerNode::loadMapService, this);
+
+    //load map file from config if present
+    std::string mapfile;
+    loadConfigValue("/map_manager/default_mapfile", mapfile);
+    if(mapfile != "")
+    {
+		std_msgs::String::Ptr mapfileMsg(new std_msgs::String);
+        mapfileMsg->data= mapfile;
+        callbackLoadMap ( mapfileMsg );
+    }
+}
+
+MapManagerNode::~MapManagerNode()
+{
+    if(m_MapManager) delete m_MapManager;
+    if(m_POIManager) delete m_POIManager;
+    if(m_MaskingManager) delete m_MaskingManager;
+}
+
+
+
+void MapManagerNode::callbackSLAMMap(const nav_msgs::OccupancyGrid::ConstPtr &msg)
+{
+    m_MapManager->updateMapLayer(homer_mapnav_msgs::MapLayers::SLAM_LAYER, msg);
+}
+
+void MapManagerNode::callbackOctomapMap( const nav_msgs::OccupancyGrid::ConstPtr& msg)
+{
+	m_MapManager->updateMapLayer(homer_mapnav_msgs::MapLayers::KINECT_LAYER, msg);
+} 
+
+void MapManagerNode::callbackSaveMap(const std_msgs::String::ConstPtr &msg)
+{
+    MapGenerator map_saver(msg->data);
+    nav_msgs::OccupancyGrid::ConstPtr SLAMMap = m_MapManager->getMapLayer(homer_mapnav_msgs::MapLayers::SLAM_LAYER);
+    nav_msgs::OccupancyGrid::ConstPtr maskingMap = m_MapManager->getMapLayer(homer_mapnav_msgs::MapLayers::MASKING_LAYER);
+    map_saver.save(SLAMMap, maskingMap, m_POIManager->getList());
+    //Todo save m_highSensitiveMap
+}
+
+void MapManagerNode::callbackLoadMap(const std_msgs::String::ConstPtr &msg)
+{
+    m_MapManager->clearMapLayers();
+    ROS_INFO_STREAM( "Loading map from file " << msg->data);
+    MapServer map_loader(msg->data);
+    ros::Rate poll_rate(10);
+    while(m_LoadedMapPublisher.getNumSubscribers() == 0)
+        poll_rate.sleep();
+    m_LoadedMapPublisher.publish(map_loader.getSLAMMap());
+    nav_msgs::OccupancyGrid::ConstPtr maskingMap = boost::make_shared<nav_msgs::OccupancyGrid>(map_loader.getMaskingMap());
+    m_MaskingManager->replaceMap(map_loader.getMaskingMap());
+    if(maskingMap->data.size() != 0)
+        m_MapManager->updateMapLayer(homer_mapnav_msgs::MapLayers::MASKING_LAYER, maskingMap);
+    m_POIManager->replacePOIList(map_loader.getPois());
+}
+
+void MapManagerNode::callbackAddPOI(const homer_mapnav_msgs::PointOfInterest::ConstPtr &msg)
+{
+    m_POIManager->addPointOfInterest(msg);
+}
+
+void MapManagerNode::callbackModifyPOI(const homer_mapnav_msgs::ModifyPOI::ConstPtr &msg)
+{
+    m_POIManager->modifyPointOfInterest(msg);
+}
+
+void MapManagerNode::callbackDeletePOI(const homer_mapnav_msgs::DeletePointOfInterest::ConstPtr &msg)
+{
+    m_POIManager->deletePointOfInterest(msg->name);
+}
+
+
+void MapManagerNode::callbackAddROI(const homer_mapnav_msgs::RegionOfInterest::ConstPtr &msg)
+{
+    m_ROIManager->addRegionOfInterest(msg);
+}
+
+void MapManagerNode::callbackModifyROI(const homer_mapnav_msgs::RegionOfInterest::ConstPtr &msg)
+{
+    m_ROIManager->modifyRegionOfInterest(msg);
+}
+
+void MapManagerNode::callbackDeleteROIbyName(const std_msgs::String::ConstPtr &msg)
+{
+    m_ROIManager->deleteRegionOfInterest(msg->data);
+}
+
+void MapManagerNode::callbackDeleteROIbyID(const std_msgs::Int32::ConstPtr &msg)
+{
+    m_ROIManager->deleteRegionOfInterest(msg->data);
+}
+
+
+void MapManagerNode::callbackMapVisibility(const homer_mapnav_msgs::MapLayers::ConstPtr &msg)
+{
+    m_MapManager->toggleMapVisibility(msg->layer, msg->state);
+}
+
+void MapManagerNode::callbackModifyMap(const homer_mapnav_msgs::ModifyMap::ConstPtr &msg)
+{
+    nav_msgs::OccupancyGrid::ConstPtr maskingMap = m_MaskingManager->modifyMap(msg);
+    if(msg->mapLayer == homer_mapnav_msgs::MapLayers::SLAM_LAYER || msg->maskAction == homer_mapnav_msgs::ModifyMap::HIGH_SENSITIV)
+    {
+        m_MaskSlamMapPublisher.publish(maskingMap);
+        m_highSensitiveMap = maskingMap;
+    }
+    else
+    {
+        m_MapManager->updateMapLayer(homer_mapnav_msgs::MapLayers::MASKING_LAYER, maskingMap);
+    }
+}
+
+void MapManagerNode::callbackResetMaps(const std_msgs::Empty::ConstPtr &msg)
+{
+    nav_msgs::OccupancyGrid::ConstPtr maskingMap = m_MaskingManager->resetMap();
+    m_MapManager->updateMapLayer(homer_mapnav_msgs::MapLayers::MASKING_LAYER, maskingMap);
+}
+
+void MapManagerNode::callbackLaserScan(const sensor_msgs::LaserScan::ConstPtr &msg)
+{
+	int i;
+	int k;
+	std::vector<geometry_msgs::Point> laserPoints;
+	nav_msgs::OccupancyGrid::Ptr laserMap(new nav_msgs::OccupancyGrid);
+	Eigen::Vector2i map_point;
+	try
+	{	
+		ros::Time currentScanTime = ros::Time::now();
+		if((currentScanTime - m_LastLaserTime) < ros::Duration(0.5)) return;
+
+        if(m_MapManager->getHeight() == -1) return;
+        laserMap->info.height = m_MapManager->getHeight();
+        laserMap->info.width = m_MapManager->getWidth();
+        laserMap->info.resolution = m_MapManager->getResolution();
+        laserMap->info.origin = m_MapManager->getOrigin();
+		laserMap->data.resize(laserMap->info.width * laserMap->info.height, homer_mapnav_msgs::ModifyMap::NOT_MASKED );
+		laserPoints =  map_tools::laser_ranges_to_points(msg->ranges, msg->angle_min, msg->angle_increment, msg->range_min, msg->range_max, m_TransformListener, msg->header.frame_id, "/map");
+		for(i = 0; i < laserPoints.size(); i++)
+		{
+			map_point = map_tools::toMapCoords(laserPoints.at(i), laserMap->info.origin, laserMap->info.resolution);
+			k = map_point.y() * laserMap->info.width + map_point.x();
+			if(k < 0)
+			{
+				return;
+			}
+			else if (k > laserMap->data.size())
+			{
+				continue;
+			}
+			else
+			{
+				laserMap->data.at(k) = homer_mapnav_msgs::ModifyMap::BLOCKED;
+			}
+		}
+        m_MapManager->updateMapLayer(homer_mapnav_msgs::MapLayers::SICK_LAYER, laserMap);
+	}
+	catch (exception &e)
+	{
+		ROS_ERROR_STREAM("An error occured: \""<<e.what() << "\"; i: "<<i<<", laserPoints.size(): "<<laserPoints.size()<<", k:"<<k<<", lasermap.data.lenght: 	"<<laserMap->data.size()) ;
+	}
+}
+
+
+bool MapManagerNode::getPOIsService(homer_mapnav_msgs::GetPointsOfInterest::Request& req,
+                                    homer_mapnav_msgs::GetPointsOfInterest::Response& res)
+{
+    res.poi_list.pois = m_POIManager->getList();
+    return true;
+}
+
+bool MapManagerNode::getROIsService(homer_mapnav_msgs::GetRegionsOfInterest::Request& req,
+                                    homer_mapnav_msgs::GetRegionsOfInterest::Response& res)
+{
+    res.roi_list.rois = m_ROIManager->getList();
+    return true;
+}
+
+
+bool MapManagerNode::saveMapService(homer_mapnav_msgs::SaveMap::Request& req,
+					homer_mapnav_msgs::SaveMap::Response& res)
+{
+	//ROS_INFO_STREAM("Saving map "<<req->folder);
+    MapGenerator map_saver(std::string(req.folder.data));
+    nav_msgs::OccupancyGrid::ConstPtr SLAMMap = m_MapManager->getMapLayer(homer_mapnav_msgs::MapLayers::SLAM_LAYER);
+    nav_msgs::OccupancyGrid::ConstPtr maskingMap = m_MapManager->getMapLayer(homer_mapnav_msgs::MapLayers::MASKING_LAYER);
+    map_saver.save(SLAMMap, maskingMap, m_POIManager->getList() );
+}
+
+bool MapManagerNode::loadMapService(homer_mapnav_msgs::LoadMap::Request& req,
+					homer_mapnav_msgs::LoadMap::Response& res)
+{
+
+    //load map file from config if present
+    std::string mapfile = std::string(req.filename.data);
+    if(mapfile != "")
+    {
+		ROS_INFO_STREAM("Loading map with filename: "<<mapfile);
+		std_msgs::String::Ptr mapfileMsg(new std_msgs::String);
+        mapfileMsg->data= mapfile;
+        callbackLoadMap ( mapfileMsg );
+    }
+	else
+	{
+		ROS_ERROR_STREAM("Map filename is empty. Could not load map");
+	}
+}
+
+bool MapManagerNode::resetMapService(std_srvs::Empty::Request& req,
+					std_srvs::Empty::Response& res)
+{
+	ROS_INFO_STREAM("Resetting current map");
+    nav_msgs::OccupancyGrid::ConstPtr maskingMap = m_MaskingManager->resetMap();
+    m_MapManager->updateMapLayer(homer_mapnav_msgs::MapLayers::MASKING_LAYER, maskingMap);
+}
+
+int main(int argc, char** argv)
+{
+    ros::init(argc, argv, "map_manager");
+    ros::NodeHandle nh;
+
+    MapManagerNode node(&nh);
+
+    ros::Rate loop_rate(5);
+    while (ros::ok())
+    {
+        try
+        {
+            ros::spinOnce();
+            loop_rate.sleep();
+        }
+        catch (exception &e)
+        {
+            std::cout<<"Exception in main loop"<<e.what()<<std::endl;
+        }
+    }
+
+
+    return 0;
+}
diff --git a/homer_map_manager/src/map_manager_node.h b/homer_map_manager/src/map_manager_node.h
new file mode 100644
index 0000000000000000000000000000000000000000..6d361cc98bd698c8a9a09dd60bc661eb32bc909b
--- /dev/null
+++ b/homer_map_manager/src/map_manager_node.h
@@ -0,0 +1,153 @@
+#ifndef MAP_MANAGER_NODE_H
+#define MAP_MANAGER_NODE_H
+
+#include <ros/ros.h>
+#include <tf/transform_listener.h>
+
+#include "Managers/MapManager.h"
+#include "Managers/PoiManager.h"
+#include "Managers/RoiManager.h"
+#include "Managers/MaskingManager.h"
+
+#include "std_msgs/String.h"
+#include "std_msgs/Int32.h"
+#include "nav_msgs/OccupancyGrid.h"
+#include "homer_mapnav_msgs/MapLayers.h"
+#include "homer_mapnav_msgs/ModifyMap.h"
+#include "std_msgs/Empty.h"
+#include "homer_mapnav_msgs/GetPointsOfInterest.h"
+#include "homer_mapnav_msgs/GetRegionsOfInterest.h"
+#include "homer_mapnav_msgs/ModifyPOI.h"
+#include "homer_mapnav_msgs/DeletePointOfInterest.h"
+#include "sensor_msgs/LaserScan.h"
+
+#include "homer_mapnav_msgs/SaveMap.h"
+#include "homer_mapnav_msgs/LoadMap.h"
+#include "std_srvs/Empty.h"
+
+/** @class MapManagerNode
+  * @author Malte Knauf, Viktor Seib
+  * @brief This class handles incoming and outgoing messages and redirects them to the according modules
+  */
+class MapManagerNode
+{
+public:
+    MapManagerNode(ros::NodeHandle* nh);
+    ~MapManagerNode();
+
+private:
+
+    /** callback functions */
+
+    /** callbacks of MapManagerModule */
+    void callbackSLAMMap( const nav_msgs::OccupancyGrid::ConstPtr& msg );
+    void callbackSaveMap( const std_msgs::String::ConstPtr& msg );
+    void callbackLoadMap( const std_msgs::String::ConstPtr& msg );
+    void callbackMapVisibility( const homer_mapnav_msgs::MapLayers::ConstPtr& msg );
+    void callbackResetMaps( const std_msgs::Empty::ConstPtr& msg );
+
+    /** laser scan callback */
+    void callbackLaserScan( const sensor_msgs::LaserScan::ConstPtr& msg );
+
+    /** callbacks of PointOfInterestManagerModule */
+    void callbackAddPOI( const homer_mapnav_msgs::PointOfInterest::ConstPtr& msg );
+    void callbackModifyPOI( const homer_mapnav_msgs::ModifyPOI::ConstPtr& msg );
+    void callbackDeletePOI( const homer_mapnav_msgs::DeletePointOfInterest::ConstPtr& msg );
+
+
+    /** callbacks of RegionOfInterestManagerModule */
+    void callbackAddROI( const homer_mapnav_msgs::RegionOfInterest::ConstPtr& msg );
+    void callbackModifyROI( const homer_mapnav_msgs::RegionOfInterest::ConstPtr& msg );
+    void callbackDeleteROIbyName( const std_msgs::String::ConstPtr& msg );
+    void callbackDeleteROIbyID( const std_msgs::Int32::ConstPtr& msg );
+    
+    void callbackOctomapMap( const nav_msgs::OccupancyGrid::ConstPtr& msg);
+
+    /** callback of MaskingMapModule */
+    void callbackModifyMap( const homer_mapnav_msgs::ModifyMap::ConstPtr& msg );
+
+    /** service of PointOfInterestModule to get a list with all Points Of Interest */
+    bool getPOIsService(homer_mapnav_msgs::GetPointsOfInterest::Request& req,
+                        homer_mapnav_msgs::GetPointsOfInterest::Response& res);
+
+    /** service of RegionOfInterestModule to get a list with all Regions Of Interest */
+    bool getROIsService(homer_mapnav_msgs::GetRegionsOfInterest::Request& req,
+                        homer_mapnav_msgs::GetRegionsOfInterest::Response& res);
+
+	/** Service for saving a map**/
+    bool saveMapService(homer_mapnav_msgs::SaveMap::Request& req,
+						homer_mapnav_msgs::SaveMap::Response& res);
+
+	/** Service for loading a map**/
+    bool loadMapService(homer_mapnav_msgs::LoadMap::Request& req,
+						homer_mapnav_msgs::LoadMap::Response& res);
+
+	/** Service resetting the current map**/
+    bool resetMapService(std_srvs::Empty::Request& req,
+						std_srvs::Empty::Response& res);
+
+    /** modules that are included in this node */
+    MapManager* m_MapManager;
+    PoiManager* m_POIManager;
+    RoiManager* m_ROIManager;
+    MaskingManager* m_MaskingManager;
+
+    //ros specific members
+    ros::NodeHandle* m_Nodehandle;
+
+    //subscriptions of MapManagerModule here
+    ros::Subscriber m_SLAMMapSubscriber;
+    ros::Subscriber m_SaveMapSubscriber;
+    ros::Subscriber m_LoadMapSubscriber;
+    ros::Subscriber m_MapVisibilitySubscriber;
+    ros::Subscriber m_LaserScanSubscriber;
+
+    //subscriptions of PointOfInterestManagerModule
+    ros::Subscriber m_AddPOISubscriber;
+    ros::Subscriber m_ModifyPOISubscriber;
+    ros::Subscriber m_DeletePOISubscriber;
+
+    //subscriptions of RegionOfInterestManagerModule
+    ros::Subscriber m_AddROISubscriber;
+    ros::Subscriber m_ModifyROISubscriber;
+    ros::Subscriber m_DeleteROIByIDSubscriber;
+    ros::Subscriber m_DeleteROIByNameSubscriber;
+
+    //subscriptions of MaskingMapModule
+    ros::Subscriber m_ModifyMapSubscriber;
+    ros::Subscriber m_ResetMapsSubscriber;
+
+    /** publisher for loaded maps */
+    ros::Publisher m_LoadedMapPublisher;
+
+    /** publisher to mask slam map */
+    ros::Publisher m_MaskSlamMapPublisher;
+
+    /** service of PointOfInterstModule */
+    ros::ServiceServer m_GetPOIsService;
+
+    /** service of RegionOfInterstModule */
+    ros::ServiceServer m_GetROIsService;
+
+	/** Service for saving the current Map to a file **/
+	ros::ServiceServer m_SaveMapService;
+	/** Resetting the current map**/
+	ros::ServiceServer m_ResetMapService;
+	/** Service for loading a previously saved map **/
+	ros::ServiceServer m_LoadMapService;
+
+    tf::TransformListener m_TransformListener;
+
+    /** timestamp of last incoming laser scan message */
+    ros::Time m_LastLaserTime;
+    
+    
+    ros::Subscriber m_OctomapSubscriber;
+    
+    nav_msgs::OccupancyGrid::ConstPtr m_highSensitiveMap;
+
+
+
+};
+
+#endif // MAP_MANAGER_NODE_H
diff --git a/CHANGELOG.rst b/homer_mapnav_msgs/CHANGELOG.rst
similarity index 100%
rename from CHANGELOG.rst
rename to homer_mapnav_msgs/CHANGELOG.rst
diff --git a/CMakeLists.txt b/homer_mapnav_msgs/CMakeLists.txt
similarity index 100%
rename from CMakeLists.txt
rename to homer_mapnav_msgs/CMakeLists.txt
diff --git a/homer_mapnav_msgs/README.md b/homer_mapnav_msgs/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..47aeac049f53cbd30cc4bf36fe2986840d229471
--- /dev/null
+++ b/homer_mapnav_msgs/README.md
@@ -0,0 +1,244 @@
+# map_messages
+
+
+## Introduction 
+
+Dieses Package enthält alle benutzerdefinierten Messages, die neben den in ROS enthaltenen Messages für das Mapping und die Navigation verwendet werden. Das Package enthält keine Node oder Librabries.
+
+## Messages 
+
+
+### PointOfInterest
+
+
+Die PointOfInterest-Message enthält alle Informationen, um einen POI zu erstellen, zu verschicken und zu speichern.
+
+~~~~~~ {.cpp}
+PointOfInterest.msg
+
+
+
+int32 DEFAULT=100
+int32 VICTIM=200
+int32 OBJECT=300
+int32 GRIPPABLE_OBJECT=400
+int32 PERSON=600
+int32 ROOMBA=700
+int32 HAZARD_MATERIAL=800
+int32 START_POSITION=900
+int32 START_ORIENTATION=1000
+
+int32 type
+string name
+string remarks
+
+geometry_msgs/Pose pose
+~~~~~~
+
+* `type` bezeichnet den Typ des POIs. Es kann eine der in dieser Message vorhandenen Konstanten verwendet werden. 
+* `name` bezeichnet den Namen des POIs. Dieser Name muss einzigartig sein, da die POIs über ihren Namen unterschieden werden.
+* `remarks`: Hier können Anmerkungen reingeschrieben werden. Diese werden in der GUI angezeigt.
+* `pose` bezeichnet die Position und Orientierung des POIS im /map-Frame.
+
+
+### ModifyPOI
+
+
+ModifyPOI ist dafür zuständig, einen vorhandenen POI zu verändern.
+
+~~~~~~ {.cpp}
+ModifyPOI.msg
+
+PointOfInterest poi
+string old_name
+~~~~~~
+
+* `poi` beinhaltet den POI, durch den der alte ersetzt werden soll.
+* `old_name` bezeichnet den Namen des POIs, der verändert werden soll.
+
+
+### TargetUnreachable
+
+
+
+TargetUnreachable wird von der Navigation versendet, sobald kein Pfad mehr zu einem Ziel geplant werden kann.
+
+
+~~~~~~ {.cpp}
+TargetUnreachable.msg
+
+int8 UNKNOWN=0
+int8 TILT_OCCURED=10
+int8 GRAVE_TILT_OCCURED=15
+int8 STALL_OCCURED=20
+int8 LASER_OBSTACLE=30
+
+int8 reason
+~~~~~~
+
+* `reason` kann einen von den in dieser Message definierten Konstanten annehmen und beschreibt den Grund des Fehlers.
+
+
+### SaveMap
+
+SaveMap wird versendet, wenn eine Karte gespeichert oder geladen werden soll und beinhaltet den Dateipfad zum Kartenordner.
+
+
+~~~~~~ {.cpp}
+SaveMap.msg
+
+string filename
+~~~~~~
+
+* `filename` bezeichnet den Dateipfad zum Kartenordner.
+
+
+### PointsOfInterest
+
+
+PointsOfInterest wird verwendet, um alle aktuellen POIs zu versenden.
+
+
+~~~~~~ {.cpp}
+PointsOfInterest.msg
+
+PointOfInterest[] pois
+~~~~~~
+
+* `pois` beinhaltet einen Vektor mit allen aktuellen POIs.
+
+
+### StartNavigation
+
+
+StartNavigation ist eine von zwei Methoden, um eine Navigation zu starten. Hier wird Der POI mitgegeben, zu dem der Roboter navigieren soll.
+
+
+~~~~~~ {.cpp}
+StartNavigation.msg
+
+geometry_msgs/Pose goal
+float32 distance_to_target
+bool skip_final_turn
+bool fast_planning
+~~~~~~
+
+* `goal` beinhaltet den Ziel-POI
+* `distance_to_target`: Hier kann angegeben werden, ab welcher Distanz zum Ziel die Navigation als erfolgreich abgeschlossen wird. 
+* `skip_final_turn`: Hier kann eingestellt werden, ob der Roboter sich am Ziel-POI in Richtund der POI-Orientierung ausrichten soll oder nicht.
+* `fast_planning`: Mit dieser Option kann ein experimentelles "Schnelles Planen" eingeschaltet werden. Es werden nur Pfade geplant, die sich in einer Boundingbox zwischen Roboter und Zielposition befinden.
+
+
+### MapLayers
+
+MapLayers definiert die vorhanden Kartenebenen als Konstanten und kann zudem verwendet werden, um einzelne Ebenen ein- oder auszuschalten.
+
+
+~~~~~~ {.cpp}
+MapLayers.msg
+
+int32 SLAM_LAYER=0
+int32 MASKING_LAYER=1
+int32 KINECT_LAYER=2
+int32 SICK_LAYER=3
+
+int32 layer
+bool state
+~~~~~~
+
+* `layer` enthält die Kartenebenen-ID und kann einen Wert dern in dieser Message definierten Konstanten annehmen.
+* `state` besagt, ob die ausgewählte Kartenebene aktiviert sein soll.
+
+
+
+
+### NavigateToPOI
+
+
+NavigateToPOI ist die zweite Art eine Navigation zu starten. Anstatt das gesamte POI-Objekt mitzugeben, wird nur der Name eines bereits im map_manger vorhandenen POIs mitgegeben, der daraufhin von der Navigation nachgeschlagen wird.
+
+~~~~~~ {.cpp}
+NavigateToPOI.msg
+
+string poi_name
+float32 distance_to_target
+bool skip_final_turn
+~~~~~~
+
+* `poi_name` beschreibt den Namen des POIS, zu dem navigiert werden soll.
+* `distance_to_target` siehe StartNavigation
+* `skip_final_turn` siehe StartNavigation
+
+
+### ModifyMap
+
+
+Mit dieser Message können Bereiche in einzelnen Kartenebenen verändert werden.
+
+
+~~~~~~ {.cpp}
+ModifyMap.msg
+
+int32 FREE = 0         
+int32 BLOCKED = 100    
+int32 OBSTACLE = 99     
+int32 NOT_MASKED = -1 
+
+geometry_msgs/Point[] region
+int32 maskAction
+int32 mapLayer 
+~~~~~~
+
+* `region` beschreibt die Eckpunkte des Polygons, das maskiert werden soll.
+* `maskAction` kann einen Wert der in dieser Message definierten Konstanten annehmen. OBSTACLE  wird in der Karte rot dargestellt. Mit NOT_MASKED können bereits maskierte Bereiche wieder gelöscht werden.
+* `mapLayer` enthält die ID der zu verändernden Kartenebene. Die IDs sind in der Message MapLayers definiert.
+
+
+
+### DeletePointOfInterest
+
+Löscht einen vorhandenen POI.
+
+
+~~~~~~ {.cpp}
+DeletePointOfInterest.msg
+
+string name
+~~~~~~
+
+* `name` beschreibt den Namen des zu löschenden POIs.
+
+
+### DoMapping
+
+
+
+Mit dieser Message kann das Mapping ein- oder ausgeschaltet werden.
+
+~~~~~~ {.cpp}
+DoMapping.msg
+
+bool state
+~~~~~~
+
+* `state` beinhaltet den Zustand des Mappings (true = an, false = off).
+
+
+## Services 
+
+### GetPointsOfInterest
+
+
+Ãœber diesen Service kann die aktuelle Liste der POIs angefordert werden.
+
+
+~~~~~~ {.cpp}
+GetPointsOfInterest.srv
+
+---
+PointsOfInterest poi_list
+~~~~~~
+
+* `poi_list` beinhaltet einen Vektor mit allen aktuellen POIs.
+
+
diff --git a/mainpage.dox b/homer_mapnav_msgs/mainpage.dox
similarity index 100%
rename from mainpage.dox
rename to homer_mapnav_msgs/mainpage.dox
diff --git a/manifest.xml b/homer_mapnav_msgs/manifest.xml
similarity index 100%
rename from manifest.xml
rename to homer_mapnav_msgs/manifest.xml
diff --git a/msg/DeletePointOfInterest.msg b/homer_mapnav_msgs/msg/DeletePointOfInterest.msg
similarity index 100%
rename from msg/DeletePointOfInterest.msg
rename to homer_mapnav_msgs/msg/DeletePointOfInterest.msg
diff --git a/msg/DoMapping.msg b/homer_mapnav_msgs/msg/DoMapping.msg
similarity index 100%
rename from msg/DoMapping.msg
rename to homer_mapnav_msgs/msg/DoMapping.msg
diff --git a/msg/MapLayers.msg b/homer_mapnav_msgs/msg/MapLayers.msg
similarity index 100%
rename from msg/MapLayers.msg
rename to homer_mapnav_msgs/msg/MapLayers.msg
diff --git a/msg/ModifyMap.msg b/homer_mapnav_msgs/msg/ModifyMap.msg
similarity index 100%
rename from msg/ModifyMap.msg
rename to homer_mapnav_msgs/msg/ModifyMap.msg
diff --git a/msg/ModifyPOI.msg b/homer_mapnav_msgs/msg/ModifyPOI.msg
similarity index 100%
rename from msg/ModifyPOI.msg
rename to homer_mapnav_msgs/msg/ModifyPOI.msg
diff --git a/msg/NavigateToPOI.msg b/homer_mapnav_msgs/msg/NavigateToPOI.msg
similarity index 100%
rename from msg/NavigateToPOI.msg
rename to homer_mapnav_msgs/msg/NavigateToPOI.msg
diff --git a/msg/PointOfInterest.msg b/homer_mapnav_msgs/msg/PointOfInterest.msg
similarity index 100%
rename from msg/PointOfInterest.msg
rename to homer_mapnav_msgs/msg/PointOfInterest.msg
diff --git a/msg/PointsOfInterest.msg b/homer_mapnav_msgs/msg/PointsOfInterest.msg
similarity index 100%
rename from msg/PointsOfInterest.msg
rename to homer_mapnav_msgs/msg/PointsOfInterest.msg
diff --git a/msg/RegionOfInterest.msg b/homer_mapnav_msgs/msg/RegionOfInterest.msg
similarity index 100%
rename from msg/RegionOfInterest.msg
rename to homer_mapnav_msgs/msg/RegionOfInterest.msg
diff --git a/msg/RegionsOfInterest.msg b/homer_mapnav_msgs/msg/RegionsOfInterest.msg
similarity index 100%
rename from msg/RegionsOfInterest.msg
rename to homer_mapnav_msgs/msg/RegionsOfInterest.msg
diff --git a/msg/StartNavigation.msg b/homer_mapnav_msgs/msg/StartNavigation.msg
similarity index 100%
rename from msg/StartNavigation.msg
rename to homer_mapnav_msgs/msg/StartNavigation.msg
diff --git a/msg/StopNavigation.msg b/homer_mapnav_msgs/msg/StopNavigation.msg
similarity index 100%
rename from msg/StopNavigation.msg
rename to homer_mapnav_msgs/msg/StopNavigation.msg
diff --git a/msg/TargetUnreachable.msg b/homer_mapnav_msgs/msg/TargetUnreachable.msg
similarity index 100%
rename from msg/TargetUnreachable.msg
rename to homer_mapnav_msgs/msg/TargetUnreachable.msg
diff --git a/package.xml b/homer_mapnav_msgs/package.xml
similarity index 100%
rename from package.xml
rename to homer_mapnav_msgs/package.xml
diff --git a/readme.pdf b/homer_mapnav_msgs/readme.pdf
similarity index 100%
rename from readme.pdf
rename to homer_mapnav_msgs/readme.pdf
diff --git a/srv/GetPointsOfInterest.srv b/homer_mapnav_msgs/srv/GetPointsOfInterest.srv
similarity index 100%
rename from srv/GetPointsOfInterest.srv
rename to homer_mapnav_msgs/srv/GetPointsOfInterest.srv
diff --git a/srv/GetRegionsOfInterest.srv b/homer_mapnav_msgs/srv/GetRegionsOfInterest.srv
similarity index 100%
rename from srv/GetRegionsOfInterest.srv
rename to homer_mapnav_msgs/srv/GetRegionsOfInterest.srv
diff --git a/srv/LoadMap.srv b/homer_mapnav_msgs/srv/LoadMap.srv
similarity index 100%
rename from srv/LoadMap.srv
rename to homer_mapnav_msgs/srv/LoadMap.srv
diff --git a/srv/SaveMap.srv b/homer_mapnav_msgs/srv/SaveMap.srv
similarity index 100%
rename from srv/SaveMap.srv
rename to homer_mapnav_msgs/srv/SaveMap.srv
diff --git a/homer_mapping/CHANGELOG.rst b/homer_mapping/CHANGELOG.rst
new file mode 100644
index 0000000000000000000000000000000000000000..59caf0fd42ce1b060cd3c677ab1acf5781c22a33
--- /dev/null
+++ b/homer_mapping/CHANGELOG.rst
@@ -0,0 +1,54 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package homer_mapping
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+1.0.11 (2015-12-02)
+-------------------
+* added std_srvs dependency
+* fixed libraries
+* Contributors: Niklas Yann Wettengel
+
+1.0.10 (2015-12-02)
+-------------------
+
+1.0.9 (2015-12-01)
+------------------
+
+1.0.8 (2015-11-30)
+------------------
+* added qt4 build dependency
+* Contributors: Niklas Yann Wettengel
+
+1.0.7 (2015-11-28)
+------------------
+* updated changelog
+* updated catkin_depends
+* Contributors: Niklas Yann Wettengel
+
+* updated catkin_depends
+* Contributors: Niklas Yann Wettengel
+
+1.0.6 (2015-11-27)
+------------------
+* removed env HOMER_DIR from CMakeLists.txt
+* Contributors: Niklas Yann Wettengel
+
+1.0.5 (2015-11-24)
+------------------
+
+1.0.4 (2015-11-20)
+------------------
+
+1.0.3 (2015-11-20)
+------------------
+
+1.0.2 (2015-11-20)
+------------------
+* added cmake_modules as build dependency in package.xml
+* added Maintainers
+* Contributors: Niklas Yann Wettengel
+
+1.0.1 (2015-09-08)
+------------------
+* init
+* Contributors: Raphael Memmesheimer
diff --git a/homer_mapping/CMakeLists.txt b/homer_mapping/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b0b71008b5ff459f6c1738ac7f61cd67acf7eb5f
--- /dev/null
+++ b/homer_mapping/CMakeLists.txt
@@ -0,0 +1,48 @@
+cmake_minimum_required(VERSION 2.8.3)
+project(homer_mapping)
+
+find_package(
+	catkin REQUIRED COMPONENTS
+		roscpp
+		homer_mapnav_msgs
+		sensor_msgs
+		nav_msgs
+		homer_nav_libs
+		tf
+		roslib
+)
+
+catkin_package(
+	CATKIN_DEPENDS
+		roscpp
+		homer_mapnav_msgs
+		sensor_msgs
+		nav_msgs
+		homer_nav_libs
+		tf
+		roslib
+)
+
+set(CMAKE_BUILD_TYPE Release)
+
+
+include_directories(
+	${catkin_INCLUDE_DIRS}
+)
+
+add_subdirectory(${PROJECT_SOURCE_DIR}/src/OccupancyMap)
+add_subdirectory(${PROJECT_SOURCE_DIR}/src/ParticleFilter)
+
+add_executable(homer_mapping src/slam_node.cpp)
+
+target_link_libraries(
+	homer_mapping
+		${catkin_LIBRARIES}
+		ParticleFilter
+		OccupancyMap
+)
+
+add_dependencies(
+	homer_mapping
+		${catkin_EXPORTED_TARGETS}
+)
diff --git a/homer_mapping/README.md b/homer_mapping/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e27819068b37da060d45b8ed38f5c626a1085fd7
--- /dev/null
+++ b/homer_mapping/README.md
@@ -0,0 +1,67 @@
+# homer_mapping
+
+## Introduction 
+
+Das Package homer_mapping besteht aus einer gleichnamigen Node. Diese ist für die Lokalisierung und Kartierung des Roboters mit Hilfe der Odometrie des Roboters und eines Laserscanners zuständig.
+Das SLAM-Problem wird durch den Partikelfilter-Algorithmus gelöst.
+Die Node erwartet kontiniuierlich Odometrie-Werte und Laserdaten und verschickt in konstanten Abständen korrigierte Poseschätzungen über das Topic /pose und tf-Transformation /map -> /base_link.
+Zudem kann der Roboter sich auf einer vorher geladenen Karte lokalisieren, sowie eine aktuell erstellte Karte abgespeichert werden.
+Es besteht die Option, die Kartierung ein- oder auszuschalten. Beim Laden einer Karte wird die Kartierung automatisch ausgeschaltet.
+
+## Topics 
+
+
+
+
+
+
+#### Publisher 
+* `/pose (geometry_msgs/PoseStamped)`: Die aktuell ermittelte Pose relativ zu Karte (im Frame /map) des Roboters aus dem Partikelfilter.
+* `/homer_mapping/slam_map (nav_msgs/OccupancyGrid)`: Das aktuelle Karte des Roboters.
+
+
+
+#### Subscriber
+
+* `/odom (nav_msgs/Odometry)`: Die aktuellen Odometrie-Werte vom Roboter. Diese werden für die Partikelfilter benötigt.
+  `/scan (sensor_msgs/LaserScan)`: Die aktuelle Lasermessung, die vom Partikelfilter benötigt wird.
+* `/homer_mapping/userdef_pose (geometry_msgs/Pose)`: Mit diesem Topic kann die die aktuell vom Partikelfilter berechnete Pose auf eine benutzerdefinierte gesetzt werden. Der Partikelfilter arbeitet nun mit dieser weiter.
+* `/homer_mapping/do_mapping (map_messages/DoMapping)`: Mit diesem Topic kann die Kartierung ein- oder ausgeschaltet werden.
+* `/map_manager/reset_maps (std_msgs/Empty)`: Hiermit kann die aktuelle Karte zurückgesetzt werden.
+* `/map_manager/loaded_map (nav_msgs/OccupancyGrid)`: Mit diesem Topic kann die aktuelle Karte durch eine andere (geladene) Karte ausgetauscht werden.
+* `/map_manager/mask_slam (nav_msgs/OccupancyGrid)`: Im OccupancyGrid dieses Topics stehen Informationen, welche Teile der aktuellen Karte durch andere Werte (frei oder belegt) ersetzt werden sollen.
+
+## Launch Files 
+
+* `homer_mapping.launch`: Dieses Launchfile lädt die Parameterdatei `homer_mapping.yaml` und startet die Node homer_mapping sowie die Node map_manager im gleichnamigen Package.
+* `homer_mapping_rviz.launch`:`Dieses Launchfile hat die gleiche Funktionalität wie das obige, wobei es zusätzlich rviz startet.
+
+## Parameter 
+
+
+### homer_mapping.yaml
+
+
+
+* `/homer_mapping/size:` Size beschreibt die Größe einer Seite der Karte in Metern. Die Karte ist quadratisch
+* `/homer_mapping/resolution:` Resolution ist die Länge einer (quadratischen) Zelle der Karte in Metern
+* `/homer_mapping/backside_checking:` Wenn auf "true" gesetzt, wird verhindet, dass Vorder- und Rückseite einer dickeren Wand auf die gematcht werden.
+* `/homer_mapping/obstacle_borders:` Wenn auf "true" gesetzt, wird um eingetragene Hindernisse ein kleiner Rand unbekanntes Gebiet gelassen.
+* `/homer_mapping/measure_sampling_step:` Minimale Distanz in Metern, die zwischen zwei aufeinanderfolgenden Messpunkten im Laserscan vorhanden sein muss, um sie für die Poseberechnung zu verwenden
+* `/homer_mapping/laser_scanner/free_reading_distance:` Minimale Distanz in Metern, die als hindernissfrei angenommen wird, wenn der aktuelle Messpunkt fehlerhaft ist
+* `/particlefilter/error_values/rotation_error_rotating:` Rotationsfehler in Prozent, der beim Rotieren des Roboters auftritt
+* `/particlefilter/error_values/rotation_error_translating:` Rotationsfehler in Grad, der beim Fahren von einem Meter auftritt
+* `/particlefilter/error_values/translation_error_translating:` Translationsfehler in Prozent, der beim Geradeausfahren auftritt
+* `/particlefilter/error_values/translation_error_rotating:` Translationsfehler in Metern, der beim Rotieren von einem Grad auftritt
+* `/particlefilter/error_values/move_jitter_while_turning:` Streuung der neu berechneten Pose in Meter pro Grad Drehung
+* `/particlefilter/hyper_slamfilter/particlefilter_num:` Anzahl der Partikelfilter im Hyperpartikelfilter (ist standardmäßig auf 1 gesetzt)
+* `/particlefilter/particle_num:` Anzahl der Partikel in jedem Partikelfilter
+* `/particlefilter/max_rotation_per_second:` Maximale Rotation in Radiant pro Sekunde, die der Roboter sich drehen darf, ohne dass das Mapping ausgesetzt wird
+* `/particlefilter/wait_time:` Minimale Zeit, die zwischen zwei Mapping-Schritten verstrichen sein muss
+* `/particlefilter/update_min_move_angle:` Minimale Rotation in Grad, die durchgeführt werden muss, damit ein Partikelfilterschritt ausgeführt wird...
+* `/particlefilter/update_min_move_dist:` ...oder minimale Distanz in Metern, die der Roboter geradeaus fährt...
+* `/particlefilter/max_update_interval:` ...oder minimale Wartezeit, in der der Roboter still steht.
+* `/selflocalization/scatter_var_xy:` Streuung der Partikel in x/y-Richtung in Metern beim Setzen einer benutzerdefinierten Pose
+* `/selflocalization/scatter_var_theta:` Streuung der Ausrichtung der Partikel in Radiant beim Setzen einer benutzerdefinierten Pose
+
+
diff --git a/homer_mapping/config/homer_mapping.yaml b/homer_mapping/config/homer_mapping.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1f4abdc68782d54fe156cb060198f59bb0047137
--- /dev/null
+++ b/homer_mapping/config/homer_mapping.yaml
@@ -0,0 +1,30 @@
+/homer_mapping/size: 35 #size of one edge of the map in m. map is quadratic
+/homer_mapping/resolution: 0.05 #meter per cell
+
+#map config values
+/homer_mapping/backside_checking: false #Enable checking to avoid matching front- and backside of obstacles, e.g. walls. Useful when creating high resolution maps
+/homer_mapping/obstacle_borders: true #Leaves a small border around obstacles unchanged when inserting a laser scan. Improves stability of generated map
+/homer_mapping/measure_sampling_step: 0.15 #Minimum distance in m between two samples for probability calculation
+
+/homer_mapping/laser_scanner/free_reading_distance: 0.8 # Minimum distance in m to be classified as free in case of errorneous measurement
+
+/particlefilter/error_values/rotation_error_rotating: 5.0 #percent
+/particlefilter/error_values/rotation_error_translating: 0.0 #degrees per meter
+/particlefilter/error_values/translation_error_translating: 5.0 #percent
+/particlefilter/error_values/translation_error_rotating: 0.0 #m per degree
+/particlefilter/error_values/move_jitter_while_turning: 0.05 #30.0 #m per degree
+
+
+/particlefilter/hyper_slamfilter/particlefilter_num: 1
+
+/particlefilter/particle_num: 1000
+/particlefilter/max_rotation_per_second: 1.0 #maximal rotation in radiants if mapping is performed. if rotation is bigger, mapping is interrupted
+/particlefilter/wait_time: 0.08 #minimum time to wait between two slam steps in seconds
+
+#the map is only updated when the robot has turned a minimal angle, has moved a minimal distance or a maximal time has passed
+/particlefilter/update_min_move_angle: 5 # degrees
+/particlefilter/update_min_move_dist: 0.1 #m
+/particlefilter/max_update_interval: 2 #seconds
+
+/selflocalization/scatter_var_xy: 0.05 #m
+/selflocalization/scatter_var_theta: 0.2 #radiants
diff --git a/homer_mapping/config/homer_mapping_followme.yaml b/homer_mapping/config/homer_mapping_followme.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..13792fb81a934e38ca4c48b2bb47120477bd4fe3
--- /dev/null
+++ b/homer_mapping/config/homer_mapping_followme.yaml
@@ -0,0 +1,8 @@
+/homer_mapping/size: 35 #size of one edge of the map in m. map is quadratic
+/homer_mapping/resolution: 0.1 #meter per cell
+
+/particlefilter/error_values/rotation_error_rotating: 0.05 #percent
+/particlefilter/error_values/rotation_error_translating: 5.0 #degrees per meter
+/particlefilter/error_values/translation_error_translating: 8.0 #percent
+/particlefilter/error_values/translation_error_rotating: 0.005 #m per degree
+/particlefilter/error_values/move_jitter_while_turning: 0.05 #30.0 #m per degree
diff --git a/homer_mapping/launch/homer_mapping.launch b/homer_mapping/launch/homer_mapping.launch
new file mode 100644
index 0000000000000000000000000000000000000000..e9e5c5d81dc2f029448bf5413a0e63a78d197d17
--- /dev/null
+++ b/homer_mapping/launch/homer_mapping.launch
@@ -0,0 +1,5 @@
+<launch>
+ <rosparam command="load" file="$(find homer_mapping)/config/homer_mapping.yaml"/>
+ <node name="homer_mapping" pkg="homer_mapping" type="homer_mapping" output="screen"/>
+ <node name="map_manager" pkg="map_manager" type="map_manager" output="screen"/>
+</launch>
diff --git a/homer_mapping/launch/homer_mapping_followme.launch b/homer_mapping/launch/homer_mapping_followme.launch
new file mode 100644
index 0000000000000000000000000000000000000000..bdc7208d75daa504e552e8fbc7ef7e14621d998a
--- /dev/null
+++ b/homer_mapping/launch/homer_mapping_followme.launch
@@ -0,0 +1,5 @@
+<launch>
+ <rosparam command="load" file="$(find homer_mapping)/config/homer_mapping_followme.yaml"/>
+ <node name="homer_mapping" pkg="homer_mapping" type="homer_mapping" output="screen"/>
+ <node name="map_manager" pkg="map_manager" type="map_manager" output="screen"/>
+</launch>
diff --git a/homer_mapping/launch/homer_mapping_ros.launch b/homer_mapping/launch/homer_mapping_ros.launch
new file mode 100644
index 0000000000000000000000000000000000000000..e9e5c5d81dc2f029448bf5413a0e63a78d197d17
--- /dev/null
+++ b/homer_mapping/launch/homer_mapping_ros.launch
@@ -0,0 +1,5 @@
+<launch>
+ <rosparam command="load" file="$(find homer_mapping)/config/homer_mapping.yaml"/>
+ <node name="homer_mapping" pkg="homer_mapping" type="homer_mapping" output="screen"/>
+ <node name="map_manager" pkg="map_manager" type="map_manager" output="screen"/>
+</launch>
diff --git a/homer_mapping/launch/homer_mapping_rviz.launch b/homer_mapping/launch/homer_mapping_rviz.launch
new file mode 100644
index 0000000000000000000000000000000000000000..8ac72e946980fa7a835942c4a6b6c9367893f2b3
--- /dev/null
+++ b/homer_mapping/launch/homer_mapping_rviz.launch
@@ -0,0 +1,6 @@
+<launch>
+ <param name="use_sim_time" type="bool" value="true"/>
+ <node name="tf_static_publisher" pkg="homer_mapping" type="static_publisher"/>
+ <node name="homer_mapping" pkg="homer_mapping" type="homer_mapping" output="screen"/>
+ <node name="rviz" pkg="rviz" type="rviz"/>
+</launch>
diff --git a/homer_mapping/mainpage.dox b/homer_mapping/mainpage.dox
new file mode 100644
index 0000000000000000000000000000000000000000..054b63cfe4f5a61597be9ebd14e7358d2a7ffdd9
--- /dev/null
+++ b/homer_mapping/mainpage.dox
@@ -0,0 +1,26 @@
+/**
+\mainpage
+\htmlinclude manifest.html
+
+\b homer_mapping is ... 
+
+<!-- 
+Provide an overview of your package.
+-->
+
+
+\section codeapi Code API
+
+<!--
+Provide links to specific auto-generated API documentation within your
+package that is of particular interest to a reader. Doxygen will
+document pretty much every part of your code, so do your best here to
+point the reader to the actual API.
+
+If your codebase is fairly large or has different sets of APIs, you
+should use the doxygen 'group' tag to keep these APIs together. For
+example, the roscpp documentation has 'libros' group.
+-->
+
+
+*/
diff --git a/homer_mapping/manifest.xml b/homer_mapping/manifest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2c9977b60f6c46c0bcbca4e6eb2d36bc17167dd9
--- /dev/null
+++ b/homer_mapping/manifest.xml
@@ -0,0 +1,23 @@
+<package>
+  <description brief="homer_mapping">
+
+     homer_mapping
+
+  </description>
+  <author>Malte</author>
+  <license>BSD</license>
+  <review status="unreviewed" notes=""/>
+  <url>http://ros.org/wiki/homer_mapping</url>
+  <depend package="std_msgs"/>
+  <depend package="roscpp"/>
+  <depend package="sensor_msgs"/>
+  <depend package="nav_msgs"/>
+  <depend package="tf"/>
+  <depend package="roslib"/>  
+
+  <depend package="robbie_architecture"/>
+  <depend package="BaseLib"/>
+  <depend package="map_messages"/>
+</package>
+
+
diff --git a/homer_mapping/package.xml b/homer_mapping/package.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8b06810c975bf14c9ec4ab3360146d8aecab9950
--- /dev/null
+++ b/homer_mapping/package.xml
@@ -0,0 +1,43 @@
+<package>
+	<name>homer_mapping</name>
+	<version>1.0.11</version>
+	<description>
+
+		homer_mapping
+
+	</description>
+	<maintainer email="vseib@uni-koblenz.de">Viktor Seib</maintainer>
+	<maintainer email="raphael@uni-koblenz.de">Raphael Memmesheimer</maintainer>
+	<maintainer email="niyawe@uni-koblenz.de">Niklas Yann Wettengel</maintainer>
+	<maintainer email="heuer@uni-koblenz.de">Gregor Heuer</maintainer>
+	<author email="mknauf@uni-koblenz.de">Malte Knauf</author>
+
+	<license>GPLv3</license>
+	<buildtool_depend>catkin</buildtool_depend>
+
+	<build_depend>roscpp</build_depend>
+	<build_depend>sensor_msgs</build_depend>
+	<build_depend>nav_msgs</build_depend>
+	<build_depend>tf</build_depend>
+	<build_depend>roslib</build_depend>
+	<build_depend>homer_nav_libs</build_depend>
+	<build_depend>cmake_modules</build_depend>
+	<build_depend>homer_mapnav_msgs</build_depend>
+	<build_depend>libqt4</build_depend>
+	<build_depend>libqt4-dev</build_depend>
+	<build_depend>libqtgui4</build_depend>
+
+
+	<run_depend>std_msgs</run_depend>
+	<run_depend>roscpp</run_depend>
+	<run_depend>sensor_msgs</run_depend>
+	<run_depend>nav_msgs</run_depend>
+	<run_depend>tf</run_depend>
+	<run_depend>roslib</run_depend>  
+	<run_depend>homer_nav_libs</run_depend>
+	<run_depend>libqt4</run_depend>
+	<run_depend>libqt4-dev</run_depend>
+	<run_depend>libqtgui4</run_depend>
+
+	<run_depend>homer_mapnav_msgs</run_depend>
+</package>
diff --git a/homer_mapping/readme.pdf b/homer_mapping/readme.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..07f93c8ff0f8b7c478d0e93269eb5df0febdd4ad
Binary files /dev/null and b/homer_mapping/readme.pdf differ
diff --git a/homer_mapping/src/CMakeLists.txt b/homer_mapping/src/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e5e17710f279e7e2c9be4e2a0ce235ad7a070efd
--- /dev/null
+++ b/homer_mapping/src/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_subdirectory(Workers)
+add_subdirectory(Modules)
diff --git a/homer_mapping/src/OccupancyMap/CMakeLists.txt b/homer_mapping/src/OccupancyMap/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9aaff58227bf4b4280d53d45fcc8631a5ce435d8
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/CMakeLists.txt
@@ -0,0 +1,31 @@
+# QT related
+find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
+find_package(tf REQUIRED)
+include(${QT_USE_FILE})
+add_definitions(${QT_DEFINITIONS})
+
+set(
+	OccupancyMap_SRC
+		OccupancyMap.cpp
+)
+
+include_directories(
+	${QT_INCLUDE_DIR}
+)
+
+add_library(
+	OccupancyMap
+		${OccupancyMap_SRC}
+)
+
+target_link_libraries(
+	OccupancyMap
+		${QT_LIBRARIES}
+		${tf_LIBRARIES}
+)
+
+add_dependencies(
+	OccupancyMap
+		or_msgs_gencpp
+		homer_mapnav_msgs_gencpp
+)
diff --git a/homer_mapping/src/OccupancyMap/Math/Box2D.h b/homer_mapping/src/OccupancyMap/Math/Box2D.h
new file mode 100644
index 0000000000000000000000000000000000000000..5979b68a773e1ed642cdee35247aadb5e712661a
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Box2D.h
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ *  Box2D.h
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: Box2D.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef Box2D_H
+#define Box2D_H
+
+#include "Point2D.h"
+#include <vector>
+
+/**
+ * @class  Box2D
+ * @author David Gossow (RX)
+ * @brief  Represents a box given by the upper-left and lower-right corner
+ */
+template<class T=float>
+class Box2D
+{
+
+  public:
+
+    /** @brief Creates a box given by top-left (minX,minY) and lower-right (maxX,maxY) coordinates */
+    Box2D(T minX=0, T minY=0, T maxX=0, T maxY=0);
+
+    /** @brief The destructor */
+    ~Box2D() {};
+
+    inline void setMinX(T value) { m_MinX=value; }
+    inline void setMaxX(T value) { m_MaxX=value; }
+    inline void setMinY(T value) { m_MinY=value; }
+    inline void setMaxY(T value) { m_MaxY=value; }
+
+    inline T minX() const { return m_MinX; }
+    inline T maxX() const { return m_MaxX; }
+    inline T minY() const { return m_MinY; }
+    inline T maxY() const { return m_MaxY; }
+
+    inline T width() const { return m_MaxX-m_MinX; }
+    inline T height() const { return m_MaxY-m_MinY; }
+
+    std::vector< Point2D > vertices();
+
+    /** @brief Clip the box to fit into clipArea */
+    void clip( Box2D<T> clipArea );
+
+    /** @return true if the given point is inside the box */
+    bool contains( T x, T y );
+
+    /** @brief enlarge the box by 'size' units in all directions */
+    void expand( T size );
+
+    /** @brief shrink the box by 'size' units in all directions */
+    void shrink( T size );
+
+    /** @brief expand the box so that it contains the given point */
+    void enclose( Point2D point );
+    void enclose( T x, T y );
+
+    template<class OtherT>
+    void enclose( Box2D<OtherT> box );
+
+    Point2D centerPoint()
+    {
+        Point2D center;
+        center.setX(m_MinX + ( (m_MaxX - m_MinX) / 2 ) );
+        center.setY(m_MinY + ( (m_MaxY - m_MinY) / 2 ) );
+        return center;
+    }
+
+    /** @brief area covered by the box */
+    T area();
+
+    Box2D<T>& operator/= ( T div ) { m_MinX/=div; m_MinY/=div; m_MaxX/=div; m_MaxY/=div; return *this; }
+    Box2D<T>& operator*= ( T div ) { m_MinX*=div; m_MinY*=div; m_MaxX*=div; m_MaxY*=div; return *this; }
+
+  private:
+
+    T m_MinX;
+    T m_MaxX;
+    T m_MinY;
+    T m_MaxY;
+
+};
+
+template<class T>
+Box2D<T>::Box2D(T minX, T minY, T maxX, T maxY)
+{
+  m_MinX=minX;
+  m_MinY=minY;
+  m_MaxX=maxX;
+  m_MaxY=maxY;
+}
+
+template<class T>
+void Box2D<T>::clip( Box2D<T> clipArea )
+{
+  if (m_MinX < clipArea.minX()) { m_MinX=clipArea.minX(); }
+  if (m_MinY < clipArea.minY()) { m_MinY=clipArea.minY(); }
+  if (m_MaxX > clipArea.maxX()) { m_MaxX=clipArea.maxX(); }
+  if (m_MaxY > clipArea.maxY()) { m_MaxY=clipArea.maxY(); }
+}
+
+template<class T>
+bool Box2D<T>::contains( T x, T y )
+{
+  return ( (x>=m_MinX) && (x<=m_MaxX) && (y>=m_MinY) && (y<=m_MaxY) );
+}
+
+template<class T>
+    void Box2D<T>::expand( T size )
+{
+  m_MinX-=size;
+  m_MaxX+=size;
+  m_MinY-=size;
+  m_MaxY+=size;
+}
+
+template<class T>
+void Box2D<T>::shrink( T size )
+{
+  m_MinX+=size;
+  m_MaxX-=size;
+  m_MinY+=size;
+  m_MaxY-=size;
+}
+
+template<class T>
+T Box2D<T>::area()
+{
+  T width = m_MaxX - m_MinX;
+  T height = m_MaxY - m_MinY;
+
+  T capacity = width * height;
+
+  return (T) capacity;
+}
+
+template<class T>
+void Box2D<T>::enclose( Point2D point )
+{
+  if ( m_MinX > point.x() ) { m_MinX=point.x(); }
+  if ( m_MinY > point.y() ) { m_MinY=point.y(); }
+  if ( m_MaxX < point.x() ) { m_MaxX=point.x(); }
+  if ( m_MaxY < point.y() ) { m_MaxY=point.y(); }
+}
+
+template<class T>
+void Box2D<T>::enclose( T x, T y )
+{
+  if ( m_MinX > x ) { m_MinX=x; }
+  if ( m_MinY > y ) { m_MinY=y; }
+  if ( m_MaxX < x ) { m_MaxX=x; }
+  if ( m_MaxY < y ) { m_MaxY=y; }
+}
+
+template<class T>
+template<class OtherT>
+void Box2D<T>::enclose( Box2D<OtherT> box )
+{
+  enclose( box.minX(), box.minY() );
+  enclose( box.maxX(), box.maxY() );
+}
+
+
+template<class T>
+std::vector< Point2D > Box2D<T>::vertices()
+{
+  std::vector<Point2D> myVertices(5);
+  myVertices[0]=Point2D( m_MinX-0.5, m_MinY-0.5 );
+  myVertices[1]=Point2D( m_MinX-0.5, m_MaxY+0.5 );
+  myVertices[2]=Point2D( m_MaxX+0.5, m_MaxY+0.5 );
+  myVertices[3]=Point2D( m_MaxX+0.5, m_MinY-0.5 );
+  myVertices[4]=myVertices[0];
+  return myVertices;
+}
+
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/CMakeLists.txt b/homer_mapping/src/OccupancyMap/Math/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ff84de22b45fbd64c1e12672a645772a91defb15
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/CMakeLists.txt
@@ -0,0 +1,17 @@
+set(Math_SRC
+  Line2D.cpp
+  Polygon2D.cpp
+  misc.cpp
+  Transformation2D.cpp
+  mat3.cpp
+  Circle2D.cpp
+  Pose.cpp
+  Obb2D.cpp
+  Matrix.cpp
+  Math.cpp
+  Point2D.cpp
+  Vector3D.cpp
+  Homography.cpp
+)
+
+add_library(Math ${Math_SRC})
diff --git a/homer_mapping/src/OccupancyMap/Math/Circle2D.cpp b/homer_mapping/src/OccupancyMap/Math/Circle2D.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..edaadf42edfd6a6a32f8be40268616427cfb1779
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Circle2D.cpp
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ *  Circle2D.cpp
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *******************************************************************************/
+
+#include "Circle2D.h"
+#include "vec2.h"
+
+#include <math.h>
+
+#define THIS Circle2D
+
+using namespace std;
+
+THIS::THIS() {
+  m_Radius=0.0;
+}
+
+THIS::THIS(double x, double y, double radius) {
+  m_Center=Point2D(x,y);
+  m_Radius=radius;
+}
+
+THIS::THIS( Point2D center, double radius) {
+  m_Center=center;
+  m_Radius=radius;
+}
+
+THIS::~THIS() {
+}
+
+double THIS::x() const{
+  return m_Center.x();
+}
+
+double THIS::y() const{
+  return m_Center.y();
+}
+
+double THIS::radius() const
+{
+  return m_Radius;
+}
+
+Point2D THIS::center() const
+{
+  return m_Center;
+}
+
+void THIS::setX(double x) {
+  m_Center.setX(x);
+}
+
+void THIS::setY(double y) {
+  m_Center.setY(y);
+}
+
+void THIS::setCenter( Point2D center )
+{
+  m_Center=center;
+}
+
+void THIS::setRadius( double radius )
+{
+  m_Radius=radius;
+}
+
+
+vector<Point2D> THIS::vertices( int steps )
+{
+  vector<Point2D> myVertices;
+  myVertices.reserve( steps+1 );
+  for( float alpha=0.0; alpha<M_PI*2; alpha+=M_PI*2/float(steps) ) {
+    myVertices.push_back( m_Center + CVec2( sin(alpha)*m_Radius, cos(alpha)*m_Radius ) );
+  }
+  myVertices.push_back( m_Center + CVec2( sin(M_PI*2)*m_Radius, cos(M_PI*2)*m_Radius ) );
+  return myVertices;
+}
+
+
+#undef THIS
diff --git a/homer_mapping/src/OccupancyMap/Math/Circle2D.h b/homer_mapping/src/OccupancyMap/Math/Circle2D.h
new file mode 100644
index 0000000000000000000000000000000000000000..68f280e5c064a671995d1c4b058978c7985ae720
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Circle2D.h
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ *  Circle2D.h
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id :$
+ *******************************************************************************/
+
+#ifndef Circle2D_H
+#define Circle2D_H
+
+#include "Point2D.h"
+#include <vector>
+
+/**
+ * @class Circle2D
+ * @author David Gossow
+ */
+class Circle2D {
+
+  public:
+
+    Circle2D();
+
+    /** Creates a new 2D Circle given by center and radius */
+    Circle2D( double x, double y, double radius );
+    Circle2D( Point2D center, double radius );
+
+    /**
+     * Destructor, does nothing.
+     */
+    ~Circle2D();
+
+    double x() const;
+    double y() const;
+    double radius() const;
+    Point2D center() const;
+
+    void setX(double x);
+    void setY(double y);
+    void setCenter( Point2D center );
+    void setRadius( double radius );
+
+    std::vector<Point2D> vertices( int steps=40 );
+
+  protected:
+
+    Point2D m_Center;
+    double m_Radius;
+};
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/Homography.cpp b/homer_mapping/src/OccupancyMap/Math/Homography.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8a2a719e140205326ccae658d52b5ac11a22caf6
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Homography.cpp
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ *  Homography.cpp
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *******************************************************************************/
+
+#include "Homography.h"
+
+#include <math.h>
+#include <string.h>
+#include <sstream>
+
+#define THIS Homography
+
+THIS::THIS ( double homMat[9] )
+{
+  memcpy( m_HomMat, homMat, 9*sizeof(double) );
+}
+
+THIS::THIS ( const THIS& other )
+{
+  memcpy( m_HomMat, other.m_HomMat, 9*sizeof(double) );
+}
+
+THIS& THIS::operator=( const Homography& other )
+{
+  memcpy( m_HomMat, other.m_HomMat, 9*sizeof(double) );
+  return *this;
+}
+
+Point2D THIS::transform ( Point2D point2 )
+{
+  if ( !point2.isValid() )
+  {
+    return point2;
+  }
+  else
+  {
+    double x = point2.x();
+    double y = point2.y();
+    double Z = 1. / ( m_HomMat[6] * x + m_HomMat[7] * y + m_HomMat[8] );
+    double X = ( m_HomMat[0] * x + m_HomMat[1] * y + m_HomMat[2] ) * Z;
+    double Y = ( m_HomMat[3] * x + m_HomMat[4] * y + m_HomMat[5] ) * Z;
+    return Point2D( X, Y );
+  }
+}
+
+void THIS::transform ( std::vector<Point2D>& points2, std::vector<Point2D> &projPoints )
+{
+  projPoints.reserve( points2.size() );
+
+  // Translate src_corners to dst_corners using homography
+  for ( unsigned i = 0; i < points2.size(); i++ )
+  {
+    if ( !points2[i].isValid() )
+    {
+      projPoints.push_back( points2[i] );
+    }
+    else
+    {
+      double x = points2[i].x();
+      double y = points2[i].y();
+      double Z = 1. / ( m_HomMat[6] * x + m_HomMat[7] * y + m_HomMat[8] );
+      double X = ( m_HomMat[0] * x + m_HomMat[1] * y + m_HomMat[2] ) * Z;
+      double Y = ( m_HomMat[3] * x + m_HomMat[4] * y + m_HomMat[5] ) * Z;
+      projPoints.push_back( Point2D( X, Y ) );
+    }
+  }
+}
+
+bool THIS::checkValidity ( std::vector<Point2D>& points2 )
+{
+  // Translate src_corners to dst_corners using homography
+  for ( unsigned i = 0; i < points2.size(); i++ )
+  {
+    if ( !points2[i].isValid() )
+    {
+      continue;
+    }
+    else
+    {
+      double x = points2[i].x();
+      double y = points2[i].y();
+      double Z = 1. / ( m_HomMat[6] * x + m_HomMat[7] * y + m_HomMat[8] );
+      if ( Z < 0 )
+      {
+        return false;
+      }
+    }
+  }
+  return true;
+}
+
+std::string THIS::toString()
+{
+  std::ostringstream s;
+  for ( int j=0; j< 3; j++ )
+  {
+    for ( int i=0; i< 3; i++ )
+    {
+      s << m_HomMat[i+3*j] << " ";
+    }
+    s << std::endl;
+  }
+  return s.str();
+}
+
+#undef THIS
diff --git a/homer_mapping/src/OccupancyMap/Math/Homography.h b/homer_mapping/src/OccupancyMap/Math/Homography.h
new file mode 100644
index 0000000000000000000000000000000000000000..c8829e92d13ff50cc6cebe2871797ab0ea7bc428
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Homography.h
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ *  CvHomography.h
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *******************************************************************************/
+
+#ifndef Homography_H
+#define Homography_H
+
+#include "Point2D.h"
+#include <vector>
+
+/**
+ * @class  Homography
+ * @brief  Represents a homography
+ * @author David Gossow
+ */
+class Homography
+{
+  public:
+
+    Homography( ) {}
+
+    Homography( double homMat[9] );
+
+    Homography( const Homography& other );
+
+    Homography& operator=( const Homography& other );
+
+    /** Transform point2 using the homography */
+    Point2D transform ( Point2D point2 );
+
+    /** Transform keyPoints2 using the homography and store them in projPoints
+     * @return if one of the resulting points has z<0, that means it would lie behind the camera, return false
+     */
+    void transform ( std::vector<Point2D>& points2, std::vector<Point2D> &projPoints );
+
+    /// @return true if all the given points lie in front of the camera (z>0)
+    bool checkValidity ( std::vector<Point2D>& points2 );
+
+    std::string toString();
+
+ // private: // FIXME made public to create ROS message
+
+    double m_HomMat[9];
+};
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/Line2D.cpp b/homer_mapping/src/OccupancyMap/Math/Line2D.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f5807c313dab246c435fcdba12af6eab300c550f
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Line2D.cpp
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ *  Line2D.cpp
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Information on Code Review state:
+ *  Author: SM; DevelTest: Date; Reviewer: Initials; Review: Date; State: NOK
+ *
+ *  Additional information:
+ *  $Id: Line2D.cpp 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#include <iostream>
+#include <sstream>
+
+#include "Line2D.h"
+#include "vec2.h"
+
+#define THIS Line2D
+
+float THIS::gradient() const
+{
+  float gradient = 10000000.0;
+  if ( m_Vec[0] != 0.0 )
+  {
+    gradient = m_Vec[1]/m_Vec[0];
+  }
+  return gradient;
+}
+
+std::vector< Point2D > THIS::vertices ( unsigned substeps )
+{
+  unsigned steps = substeps+2;
+  std::vector<Point2D> myVertices ( steps );
+  for ( unsigned i=0; i<steps; i++ )
+  {
+    float t= float ( i ) / float ( steps-1 );
+    myVertices[i] = m_Start + t*m_Vec;
+  }
+  return myVertices;
+}
+
+Point2D THIS::getClosestPoint ( Point2D point ) const
+{
+  float t = ( point-m_Start ) * m_Vec;
+  t /= m_Vec * m_Vec;
+  if ( t > 1.0 )
+  {
+    t = 1.0;
+  }
+  else if ( t < 0.0 )
+  {
+    t = 0.0;
+  }
+  Point2D pointOnLine = m_Start + ( t * m_Vec );
+  return pointOnLine;
+}
+
+Point2D THIS::getIntersectionPoint ( Line2D line ) const
+{
+  Point2D intersecPoint;
+  double det1 = m_Vec.x() * ( -line.vec().y() ) - ( -line.vec().x() ) * m_Vec.y();
+  // lines are not parallel
+  if ( det1 != 0 )
+  {
+    CVec2 startToStart = line.start() -m_Start;
+    // calculate intersection
+    double lambda = ( startToStart.x() * ( -line.vec().y() ) - ( -line.vec().x() ) * startToStart.y() ) / det1;
+    intersecPoint = m_Start + lambda* m_Vec;
+  }
+
+  return intersecPoint;
+}
+
+float THIS::getIntersectionPointParameter ( Line2D line ) const
+{
+  double lambda = 0.0;
+  double det1 = m_Vec.x() * ( -line.vec().y() ) - ( -line.vec().x() ) * m_Vec.y();
+  // lines are not parallel
+  if ( det1 != 0 )
+  {
+    CVec2 startToStart = line.start() -m_Start;
+    // calculate intersection
+    lambda = ( startToStart.x() * ( -line.vec().y() ) - ( -line.vec().x() ) * startToStart.y() ) / det1;
+  }
+
+  return lambda;
+}
+
+std::string THIS::toString() const
+{
+  std::ostringstream str;
+//   str << "Startpoint: " << m_Start.x() << " " << m_Start.y() << " Endpoint: " << end().x() << " " << end().y() <<
+//   " Vector: " << m_Vec.x() << " " << m_Vec.y() << " ";
+  str << m_Start.x() << " " << m_Start.y() << std::endl << end().x() << " " << end().y() << std::endl;
+  return str.str();
+}
+
diff --git a/homer_mapping/src/OccupancyMap/Math/Line2D.h b/homer_mapping/src/OccupancyMap/Math/Line2D.h
new file mode 100644
index 0000000000000000000000000000000000000000..e8c210bb6433e979708ae73cab36e218a53550e1
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Line2D.h
@@ -0,0 +1,223 @@
+/*******************************************************************************
+ *  Line2D.h
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Information on Code Review state:
+ *  Author: SM; DevelTest: Date; Reviewer: Initials; Review: Date; State: NOK
+ *
+ *  Additional information:
+ *  $Id: Line2D.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef LINE2D_H
+#define LINE2D_H
+
+#include "vec2.h"
+#include "mat2.h"
+#include "Point2D.h"
+#include <vector>
+
+/**
+ * @class Line2D
+ *
+ * @author Susanne Maur
+ *
+ */
+class Line2D
+{
+
+  public:
+
+    /**
+     * Creates a new line.
+     * @param start Start point of the line.
+     * @param end End point of the line.
+     */
+    inline Line2D ( Point2D start, Point2D end )
+    {
+      m_Start = start;
+      m_Vec = end-m_Start;
+    }
+
+
+    /**
+      * Creates a new line.
+      * @param start Start point of the line.
+      * @param vec The vector from start to end point of the line.
+      */
+    inline Line2D ( Point2D start,  CVec2 vec )
+    {
+      m_Start = start;
+      m_Vec = vec;
+    }
+
+    /**
+     * Destructor does nothing.
+     */
+    inline ~Line2D() {}
+
+    /**
+     * Sets the start point of the line to a new value.
+     * @param start Start point of the line.
+     */
+    inline void setStart ( const Point2D start )
+    {
+      Point2D end = m_Start + m_Vec;
+      m_Start = start;
+      m_Vec = end-m_Start;
+    }
+
+    /**
+     * Sets the end point of the line to a new value.
+     * @param end End point of the line.
+     */
+
+    inline void setEnd ( const Point2D end )
+    {
+      m_Vec = end - m_Start;
+    }
+
+    /**
+     * Returns the start point of the line.
+     * @return Start point of the line.
+     */
+    inline Point2D start() const
+    {
+      return m_Start;
+    }
+
+    /**
+     * Returns the end point of the line.
+     * @return End point of the line.
+     */
+    inline Point2D end() const
+    {
+      return m_Start + m_Vec;
+    }
+
+    /**
+     * Returns a vector from the start to the end of the line.
+     * @return Vector to the end point of the line.
+     */
+    inline CVec2 vec() const
+    {
+      return m_Vec;
+    }
+
+    inline bool operator== ( const Line2D& line ) const
+    {
+      return ( m_Start == line.start() && end() == line.end() );
+    }
+
+    /**
+     * Returns the gradient of the line.
+     * @return Gradient of the line.
+     */
+    float gradient() const ;
+
+    /**
+    * Returns the length of the line.
+    * @return Length of the line.
+     */
+    inline float length() const {
+      return m_Vec.magnitude();
+    }
+
+    /**
+     * Returns the minimum  euclidean distance of the given point to the line.
+     * @param point Point of which the distance to the line will be calculated.
+     * @return Distance of point to line.
+     */
+    inline float distance ( Point2D point ) const
+    {
+      Point2D pointOnLine = getRootPoint ( point );
+      return ( point - pointOnLine ).magnitude();
+    }
+
+    /**
+     * Rotates the line round the origin.
+     * @param angle The angle of rotation in radiants.
+     */
+    inline void rotate ( float angle )
+    {
+      CMat2 rotMat = CMat2 ( angle );
+      m_Start = rotMat * m_Start;
+      m_Vec = rotMat * m_Vec;
+    }
+
+    /**
+     * Returns the point of the line with the minimal distance to a given point.
+     * This algorithm may return a point which lies on the extension of the line and not on itself.
+     * See also: getClosestPoint.
+     * @param point Point to which the distance is calculated.
+     * @return Root point of the line.
+     */
+    inline Point2D getRootPoint ( Point2D point ) const
+    {
+      float t = ( point-m_Start ) * m_Vec;
+      t /= m_Vec * m_Vec;
+      Point2D pointOnLine = m_Start + ( t * m_Vec );
+      return pointOnLine;
+    }
+
+    /**
+     * Returns the normal of the line.
+     * @return Normal of the line.
+     */
+    inline CVec2 getNormal() const {
+      return m_Vec.getNormal()/m_Vec.magnitude();
+    }
+
+    /**
+    * Returns the point of the line with the minimal distance to a given point.
+    * This algorithm returns always a point which lies on the line.
+    * Therefor it is not always the root point.
+    * See also: getRootPoint.
+    * @param point Point to which the distance is calculated.
+    * @return Root point of the line.
+     */
+    Point2D getClosestPoint ( Point2D point ) const;
+
+    /**
+    * Returns the intersection point of this line with a second line.
+    * The intersection point is element of this line.
+    * @param line The line with which the intersection is calculated.
+    * @return Intersection point.
+     */
+    Point2D getIntersectionPoint ( Line2D line ) const;
+
+    /**
+     * Returns the parameter t which identifies the intersection point of this line with a second line.
+     * The intersection point is element of this line.
+     * @param line The line with which the intersection is calculated.
+     * @return Parameter t which identifies the intersection point on the line.
+     */
+    float getIntersectionPointParameter ( Line2D line ) const;
+
+    /**
+     * @return Vertices, e.g. for use in a VectorObject
+     * @param  substeps number of linear interpolation steps between start and end
+     */
+    std::vector< Point2D > vertices ( unsigned substeps=0 );
+
+    /**
+     * @overwrite
+     */
+    std::string toString() const;
+
+  private:
+
+    /**
+     * Start point of the line.
+     */
+    Point2D m_Start;
+
+    /**
+     * Vector from the start to the end of the line.
+     */
+    CVec2 m_Vec;
+};
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/Math.cpp b/homer_mapping/src/OccupancyMap/Math/Math.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3f31c5bfe5df6679d34372082b3a8b8ed7e60696
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Math.cpp
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ *  Math.cpp
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: $ 
+ *******************************************************************************/
+
+#include <limits.h>
+#include "Math.h"
+#include <math.h>
+
+#include "vec2.h"
+
+#define THIS Math
+
+THIS::THIS()
+{
+}
+
+THIS::~THIS()
+{
+}
+
+float THIS::meanAngle( const std::vector<float>& angles )
+{
+  //calculate vectors from angles
+  CVec2 vectorSum(0,0);
+  for ( unsigned i=0; i<angles.size(); i++ )
+  {
+    vectorSum = vectorSum + CVec2( cos( angles[i] ), sin ( angles[i] ) );
+  }
+  //return vectorSum.getAngle( CVec2(1,0) );
+  if ( vectorSum.magnitude() == 0 ) { return 0; }
+  return atan2( vectorSum.y(), vectorSum.x() );
+}
+
+
+float THIS::meanAngleWeighted( const std::vector< WeightedValue >& weightedAngles )
+{
+  //calculate vectors from angles
+  CVec2 vectorSum(0,0);
+  for ( unsigned i=0; i<weightedAngles.size(); i++ )
+  {
+    vectorSum = vectorSum + weightedAngles[i].weight * CVec2( cos( weightedAngles[i].value ), sin ( weightedAngles[i].value ) );
+  }
+  //return vectorSum.getAngle( CVec2(1,0) );
+  if ( vectorSum.magnitude() == 0 ) { return 0; }
+  return atan2( vectorSum.y(), vectorSum.x() );
+}
+
+
+float THIS::angleVariance( float meanAngle, const std::vector<float>& angles )
+{
+  float quadSum=0;
+  for( unsigned i=0; i < angles.size(); i++ )
+  {
+    float turnAngle=minTurnAngle( angles[i], meanAngle );
+    quadSum += turnAngle*turnAngle;
+  }
+  return quadSum / float ( angles.size() );
+}
+
+
+float THIS::minTurnAngle( float angle1, float angle2 )
+{
+/*  CVec2 vector1( cos( angle1 ), sin ( angle1 ) );
+  CVec2 vector2( cos( angle2 ), sin ( angle2 ) );
+  return vector1.getAngle( vector2 );
+  */
+  angle1 *= 180.0/M_PI;
+  angle2 *= 180.0/M_PI;
+  //if(angle1 < 0) angle1 += M_PI * 2;
+  //if(angle2 < 0) angle2 += M_PI * 2;
+  int diff= angle2 - angle1;
+  diff = (diff + 180) % 360 - 180;
+
+  //float sign=1;
+  //if ( diff < 0 ) { sign=-1; }
+  //minimal turn angle:
+  //if the absolute difference is above 180°, calculate the difference in other direction
+  //if ( fabs(diff) > M_PI ) {
+  //  diff = 2*M_PI - fabs(diff);
+  //  diff *= sign;
+  //}
+
+  float ret = static_cast<double>(diff) * M_PI/180.0;
+  return ret;
+}
+
+Point2D THIS::center( std::vector<Point2D>& points )
+{
+  double numPoints = double( points.size() );
+  double sumX=0, sumY=0;
+  for( unsigned i=0; i < points.size(); i++ )
+  {
+    sumX += points[i].x();
+    sumY += points[i].y();
+  }
+  return Point2D( sumX / numPoints, sumY / numPoints );
+}
+
+
+double THIS::randomGauss(float variance)
+{
+  if (variance < 0) {
+    variance = -variance;
+  }
+  double x1, x2, w, y1;
+  do {
+    x1 = 2.0 * random01() - 1.0;
+    x2 = 2.0 * random01() - 1.0;
+    w = x1 * x1 + x2 * x2;
+  } while ( w >= 1.0 );
+
+  w = sqrt((-2.0 * log(w)) / w);
+  y1 = x1 * w;
+  // now y1 is uniformly distributed
+  return sqrt(variance) * y1;
+}
+
+double THIS::random01(unsigned long init)
+{
+  static unsigned long n;
+  if (init > 0) {
+    n = init;
+  }
+  n = 1664525 * n + 1013904223;
+  // create double from unsigned long
+  return (double)(n/2) / (double)LONG_MAX;
+}
+
+#undef THIS
diff --git a/homer_mapping/src/OccupancyMap/Math/Math.h b/homer_mapping/src/OccupancyMap/Math/Math.h
new file mode 100644
index 0000000000000000000000000000000000000000..bf00135a1a53a24343e7ec20e5f0bc7e13599b4d
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Math.h
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ *  Math.h
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: $
+ *******************************************************************************/
+
+#ifndef Math_H
+#define Math_H
+
+#include <vector>
+#include "Point2D.h"
+
+/**
+ * @class  Math
+ * @brief  Generic math and statistics functions
+ * @author David Gossow (RX)
+ */
+class Math
+{
+  public:
+
+    struct WeightedValue
+    {
+      float value;
+      float weight;
+    };
+
+    static const double Pi = 3.14159265358979323846;
+
+    /** @return mean value */
+    template<class ContainerT>
+    static double mean ( const ContainerT& values );
+
+    /** @return variance of given values */
+    template<class ContainerT>
+    static double variance ( const ContainerT& values );
+
+    /** @return mean angle of given values
+     *  @note   there are always two possible choices for the mean angle. This function returns the one with the smallest deviation
+     *  @note   Works for angles in [-Pi..Pi], negative angles are treated
+     */
+    static float meanAngle ( const std::vector<float>& angles );
+
+    static float meanAngleWeighted ( const std::vector< WeightedValue >& weightedAngles );
+
+    /** @return variance for given mean */
+    static float angleVariance ( float meanAngle, const std::vector<float>& angles );
+
+    /** @return minimal angle needed to turn from angle 1 to angle 2 [-Pi..Pi] */
+    static float minTurnAngle ( float angle1, float angle2 );
+
+    static Point2D center ( std::vector<Point2D>& points );
+
+    static float deg2Rad ( float deg ) { return deg / 180.0*Pi; }
+
+    static float rad2Deg ( float rad ) { return rad / Pi*180.0; }
+
+    static double randomGauss ( float variance = 1.0 );
+
+    static double random01 ( unsigned long init = 0 );
+
+    /** @return ratio between one dimension seen under old viewangle and dimension under new viewangle*/
+    static double angleToPercent ( double newAngle, double oldAngle ) { return tan ( ( Pi / 180.0 ) * newAngle / 2 ) / tan ( ( Pi / 180.0 ) * oldAngle / 2 ); };
+
+    /** @return angle under which the ratio between dimension seen under old viewangle and new viewangle equals percent*/
+    static double percentToAngle ( double percent, double angle ) { return 2* atan ( tan ( ( Pi / 180.0 ) * angle / 2 ) * percent ) * ( 180 / Pi ); };
+
+    /** @return horizontal view angle corresponding to diagonal view angle and aspect ratio (e.g. 4.0/3.0)*/
+    static double horizontalViewAngle ( double diagonalAngle, double aspectRatio ) { return verticalViewAngle ( diagonalAngle, 1.0 / aspectRatio ); };
+
+    /** @return vertical view angle corresponding to diagonal view angle and aspect ratio (e.g. 4.0/3.0)*/
+    static double verticalViewAngle ( double diagonalAngle, double aspectRatio )
+    {
+      return percentToAngle ( 1.0 / sqrt ( pow ( aspectRatio, 2 ) + 1.0 ), diagonalAngle );
+    };
+
+    template<class ValueT>
+    static inline ValueT min ( ValueT a, ValueT b ) { return a < b ? a : b; }
+
+    template<class ValueT>
+    static inline ValueT max ( ValueT a, ValueT b ) { return a > b ? a : b; }
+
+  private:
+
+    /** @brief The constructor */
+    Math();
+
+    /** @brief The destructor */
+    ~Math();
+
+};
+
+template<class ContainerT>
+double Math::mean ( const ContainerT& values )
+{
+  typename ContainerT::const_iterator it;
+  it = values.begin();
+  double sum = 0;
+  while ( it != values.end() )
+  {
+    sum += *it;
+    it++;
+  }
+  return sum / double ( values.size() );
+}
+
+
+template<class ContainerT>
+double Math::variance ( const ContainerT& values )
+{
+  double mean = mean ( values );
+  typename ContainerT::const_iterator it;
+  it = values.begin();
+  double sum = 0;
+  while ( it != values.end() )
+  {
+    double diff = *it - mean;
+    sum += diff * diff;
+    it++;
+  }
+  return sum / double ( values.size() );
+}
+
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/Matrix.cpp b/homer_mapping/src/OccupancyMap/Math/Matrix.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..abe383651eac95095d9fad2804407cb190c4d829
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Matrix.cpp
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ *  Matrix.cpp
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: $ 
+ *******************************************************************************/
+
+#include "Matrix.h"
+
+#define THIS Matrix
+
+THIS THIS::transpose() {
+    Matrix newMatrix(m_Columns, m_Lines);
+    for (unsigned i = 0; i < m_Lines*m_Columns; i++) {
+        newMatrix.setValue(i/m_Columns, i%m_Lines, m_Values[i/m_Lines * i%m_Columns]);
+    }
+    return newMatrix;
+}
+
+#undef THIS
diff --git a/homer_mapping/src/OccupancyMap/Math/Matrix.h b/homer_mapping/src/OccupancyMap/Math/Matrix.h
new file mode 100644
index 0000000000000000000000000000000000000000..89f5f39a51528a72b1db798895048b0d60789729
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Matrix.h
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ *  Matrix.h
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: $
+ *******************************************************************************/
+
+#ifndef MATRIX_H
+#define MATRIX_H
+
+#include "mat2.h"
+#include "mat3.h"
+
+/**
+ * @class  Matrix
+ * @brief  This class describes a Matrix
+ * @author Michael Dahl
+ */
+class Matrix
+{
+  public:
+
+    /** @brief The constructor */
+    Matrix(unsigned lines, unsigned columns){
+        m_Lines = lines;
+        m_Columns = columns;
+        m_Values = new double[lines*columns];
+        for (unsigned i = 0; i< lines*columns; i++) {
+            m_Values[i] = 0;
+        }
+    }
+
+    Matrix(const CMat2 matrix2) {
+        m_Lines = 2;
+        m_Columns = 2;
+        m_Values = new double[4];
+        for(unsigned i = 0; i < m_Lines * m_Columns; i++) {
+            m_Values[i] = matrix2.valueAt(i);
+        }
+    }
+
+    Matrix(const CMat3 matrix3) {
+        m_Lines = 3;
+        m_Columns = 3;
+        m_Values = new double[9];
+        for(unsigned i = 0; i < m_Lines * m_Columns; i++) {
+            m_Values[i] = matrix3.valueAt(i);
+        }
+    }
+
+    /** @brief The destructor */
+    ~Matrix() {
+        delete[] m_Values;
+    }
+
+    inline double getValue(int line, int column) const{
+        return m_Values[line*m_Columns  + column];
+    }
+
+    inline void setValue(int line, int column, double value) {
+        m_Values[line*m_Columns + column] = value;
+    }
+
+    Matrix transpose();
+
+    Matrix operator *(double scalar){
+        Matrix returnMatrix(m_Lines, m_Columns);
+        for (unsigned i = 0; i < m_Lines * m_Columns; i++) {
+            returnMatrix.setValue(i/m_Lines, i%m_Lines, this->getValue(i/m_Lines, i%m_Lines) * scalar);
+        }
+        return returnMatrix;
+    }
+
+    Matrix operator /(double scalar){
+        Matrix returnMatrix(m_Lines, m_Columns);
+        for (unsigned i = 0; i < m_Lines * m_Columns; i++) {
+            returnMatrix.setValue(i/m_Lines, i%m_Lines, this->getValue(i/m_Lines, i%m_Lines) / scalar);
+        }
+        return returnMatrix;
+    }
+
+    Matrix operator *(const Matrix rhs){
+        Matrix returnMatrix(m_Lines, m_Columns);
+        for (unsigned i = 0; i < m_Lines * m_Columns; i++) {
+            returnMatrix.setValue(i/m_Lines, i%m_Lines, this->getValue(i/m_Lines, i%m_Lines) * rhs.getValue(i%m_Lines, i/m_Lines));
+        }
+        return returnMatrix;
+    }
+
+    Matrix operator +(const Matrix rhs){
+        Matrix returnMatrix(m_Lines, m_Columns);
+        for (unsigned i = 0; i < m_Lines * m_Columns; i++) {
+            returnMatrix.setValue(i/m_Lines, i%m_Lines, this->getValue(i/m_Lines, i%m_Lines) + rhs.getValue(i/m_Lines, i%m_Lines));
+        }
+        return returnMatrix;
+    }
+
+    Matrix operator -(const Matrix rhs){
+        Matrix returnMatrix(m_Lines, m_Columns);
+        for (unsigned i = 0; i < m_Lines * m_Columns; i++) {
+            returnMatrix.setValue(i/m_Lines, i%m_Lines, this->getValue(i/m_Lines, i%m_Lines) - rhs.getValue(i/m_Lines, i%m_Lines));
+        }
+        return returnMatrix;
+    }
+
+  private:
+
+  unsigned int m_Lines;
+  unsigned int m_Columns;
+  double* m_Values;
+};
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/Obb2D.cpp b/homer_mapping/src/OccupancyMap/Math/Obb2D.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..9d4a2ae82f83c1b7934698ca6c2f4a3c910b27e0
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Obb2D.cpp
@@ -0,0 +1,149 @@
+#include <stdlib.h>
+
+
+#include "Obb2D.h"
+#include <iostream>
+
+//----------------------------------------------------------------------------------------------------------
+OBB2D::OBB2D()
+{
+}
+//----------------------------------------------------------------------------------------------------------
+OBB2D::~OBB2D()
+{
+}
+//----------------------------------------------------------------------------------------------------------
+std::pair<CVec2,CVec2> OBB2D::computeAABB() const
+{
+	CVec2 mins(999999,999999);
+	CVec2 maxs(-999999,-999999);
+	for (int i=0;i<4;i++)
+	{
+		if (mPoints[i][0]<mins[0]) mins[0]=mPoints[i][0];
+		if (mPoints[i][1]<mins[1]) mins[1]=mPoints[i][1];
+		if (mPoints[i][0]>maxs[0]) maxs[0]=mPoints[i][0];
+		if (mPoints[i][1]>maxs[1]) maxs[1]=mPoints[i][1];
+	}
+	return std::make_pair(mins,maxs);
+}
+//----------------------------------------------------------------------------------------------------------
+// Polygon an Kante (clipStart, clipEnd) clippen, Originalpunkte werden ueberschrieben
+int clipEdge(const CVec2* points, int numPoints, const CVec2& clipStart, const CVec2& clipEnd, CVec2* dest)
+{
+	int result=0;
+
+	// Normale zeigt nach aussen
+	CVec2 n(clipEnd[1] - clipStart[1],
+		       clipStart[0] - clipEnd[0]);
+
+	//n=n*(-1);
+
+	float d0=clipStart*n;
+
+	int i=numPoints-1;
+	for (int iNext=0;iNext<numPoints;iNext++)
+	{
+		const CVec2& a=points[i];
+		const CVec2& b=points[iNext];
+
+		float adotn=a*n;
+		float bdotn=b*n;
+		float da=adotn-d0;
+		float db=bdotn-d0;
+
+		if (da<=0)
+		{
+			if (db<=0)
+			{
+				// beide innerhalb
+				//outputPoints.push_back(b);
+				dest[result++]=b;
+			}
+			else
+			{
+				// a drinnen, b draussen => schnittpunkt
+				float t=-da/(bdotn-adotn);
+				//outputPoints.push_back(a+t*(b-a));
+				dest[result++]=a+t*(b-a);
+			}
+		}
+		else
+		{
+			if (db<=0)
+			{
+				// a draussen, b drinnen => schnittpunkt
+				float t=-da/(bdotn-adotn);
+				//outputPoints.push_back(a+t*(b-a));
+				//outputPoints.push_back(b);
+				dest[result++]=a+t*(b-a);
+				dest[result++]=b;
+			}
+			else
+			{
+				// beide ausserhalb
+			}
+		}
+
+		i=iNext;
+	}
+
+	return result;
+}
+//----------------------------------------------------------------------------------------------------------
+float OBB2D::computeClippedArea(const OBB2D& clipPoly)
+{
+	CVec2* tmp1=(CVec2*)alloca(20*sizeof(CVec2));
+	CVec2* tmp2=(CVec2*)alloca(20*sizeof(CVec2));
+
+	int res=0;
+
+	res=clipEdge(mPoints,4,clipPoly[3],clipPoly[0],tmp1);
+	res=clipEdge(tmp1,res,clipPoly[0],clipPoly[1],tmp2);
+	res=clipEdge(tmp2,res,clipPoly[1],clipPoly[2],tmp1);
+	res=clipEdge(tmp1,res,clipPoly[2],clipPoly[3],tmp2);
+
+	/*
+	static int maxres=0;
+	if (res>=maxres)
+	{
+		std::cout << "res: " << res << std::endl;
+		maxres=res;
+	}*/
+
+
+	float area=0;
+	for (int i=0;i<res;i++)
+	{
+		area+=(tmp2[i][1]+tmp2[(i+1)%res][1])*(tmp2[i][0]-tmp2[(i+1)%res][0]);
+	}
+	area=0.5f*fabs(area);
+	return area;
+}
+//----------------------------------------------------------------------------------------------------------
+/*float Polygon2D::computeArea() const
+{
+#if 0
+	float area=0;
+	CVec2 last=mPoints[1];
+	for (int i=2;i<mPoints.size();i++)
+	{
+		CVec2 a=last-mPoints[0];
+		CVec2 b=mPoints[i]-mPoints[0];
+		area+=0.5f*fabs(a.x*b.y-a.y*b[0]);
+
+		last=mPoints[i];
+	}
+	return area;
+#else
+	float area2=0;
+	for (int i=0;i<mPoints.size();i++)
+	{
+		area2+=(mPoints[i][1]+mPoints[(i+1)%mPoints.size()][1])*(mPoints[i][0]-mPoints[(i+1)%mPoints.size()][0]);//mPoints[i].x*mPoints[i+1].y-mPoints[i+1].x*mPoints[i][1];
+	}
+	area2=0.5f*fabs(area2);
+	//std::cout << "area: " << area << " " << area2 << std::endl;
+	return area2;
+#endif
+}*/
+//----------------------------------------------------------------------------------------------------------
+
diff --git a/homer_mapping/src/OccupancyMap/Math/Obb2D.h b/homer_mapping/src/OccupancyMap/Math/Obb2D.h
new file mode 100755
index 0000000000000000000000000000000000000000..ec7313abfd2193f3aedf751dcca668f8626519cd
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Obb2D.h
@@ -0,0 +1,33 @@
+#ifndef _OBB2D_H
+#define _OBB_H
+
+#include "vec2.h"
+#include <vector>
+
+/**
+ * Obolete. Used by Robbie 9 for line clipping.
+ * Bad documentation. For questions ask F. Neuhaus.
+ */
+
+class OBB2D 
+{
+  public:
+
+	OBB2D();
+	~OBB2D();
+	
+	CVec2& operator[](int i) { return mPoints[i]; };
+	const CVec2& operator[](int i) const { return mPoints[i]; };
+	
+	float computeClippedArea(const OBB2D& clipPoly);
+	
+	std::pair<CVec2,CVec2> computeAABB() const;
+
+
+  private:
+
+	CVec2 mPoints[4];
+};
+
+#endif
+
diff --git a/homer_mapping/src/OccupancyMap/Math/Pixel.h b/homer_mapping/src/OccupancyMap/Math/Pixel.h
new file mode 100644
index 0000000000000000000000000000000000000000..026fd3a6909cadc954b3148f15b6a73d4c632c18
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Pixel.h
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ *  Pixel.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Pixel.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef PIXEL_H
+#define PIXEL_H
+
+#include "Point2D.h"
+#include <vector>
+
+/** @class Pixel
+  * @brief Stores discrete pixel coordinates
+  * @author Stephan Wirth, David Gossow (RX)
+  */
+class Pixel {
+
+  public:
+
+    inline Pixel( int x = 0, int y = 0) { m_X = x; m_Y = y; };
+    inline ~Pixel() {};
+
+    inline int x() const { return m_X; }
+    inline int y() const { return m_Y; }
+
+    inline void setX( int x ) { m_X = x; }
+    inline void setY( int y ) { m_Y = y; }
+
+    inline bool operator ==( Pixel& rhs ) { return ( m_X == rhs.m_X ) && ( m_Y == rhs.m_Y ); }
+    inline bool operator !=( Pixel& rhs ) { return ( m_X != rhs.m_X ) || ( m_Y != rhs.m_Y ); }
+    inline Pixel operator *( float rhs ) { return Pixel( m_X * rhs, m_Y * rhs ); }
+    inline Pixel operator /( float rhs ) { return Pixel( m_X / rhs, m_Y / rhs ); }
+
+    inline Point2D toPoint2D() { return Point2D( m_X, m_Y ); }
+    
+    inline std::vector<Point2D> vertices()
+    {
+      std::vector<Point2D> result(5);
+      result[0]=Point2D( m_X-0.5, m_Y-0.5 );
+      result[1]=Point2D( m_X+0.5, m_Y-0.5 );
+      result[2]=Point2D( m_X+0.5, m_Y+0.5 );
+      result[3]=Point2D( m_X-0.5, m_Y+0.5 );
+      result[4]=result[0];
+      return result;
+    }
+
+  private:
+
+    int m_X;
+    int m_Y;
+
+};
+
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/Point2D.cpp b/homer_mapping/src/OccupancyMap/Math/Point2D.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c8ae09b7ab40761665dc5694db808f370b1768c3
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Point2D.cpp
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ *  Point2D.cpp
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: $ 
+ *******************************************************************************/
+
+#include "Point2D.h"
+
+#define THIS Point2D 
+
+float THIS::getPolarAngle () const
+{
+  float angle = atan ( m_Y /m_X );
+  if ( m_X < 0 )
+  {
+    angle = - ( M_PI - angle );
+  }
+  while ( angle >= M_PI )
+  {
+    angle -= 2*M_PI;
+  }
+  while ( angle < -M_PI )
+  {
+    angle += 2*M_PI;
+  }
+  return angle;
+}
+
+#undef THIS
diff --git a/homer_mapping/src/OccupancyMap/Math/Point2D.h b/homer_mapping/src/OccupancyMap/Math/Point2D.h
new file mode 100644
index 0000000000000000000000000000000000000000..94810ef901253ad677b4a59a823232f14589da1c
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Point2D.h
@@ -0,0 +1,312 @@
+/*******************************************************************************
+ *  Point2D.h
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Point2D.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#include <iostream>
+#include <sstream>
+
+#include "vec2.h"
+#include <float.h>
+
+#ifndef POINT2D_H
+#define POINT2D_H
+
+/**
+ * @class Point2D
+ *
+ * @author Susanne Maur
+ *
+ */
+class Point2D
+{
+
+  public:
+
+    /**
+     * Creates a new point in 2D with x- and y-coordinat set to zero.
+     */
+    inline Point2D()
+    {
+      m_X = 0.0;
+      m_Y = 0.0;
+    }
+
+    /**
+    * Creates a new point in 2D.
+    * @param x x-coordinate of the point.
+    * @param y y-coordinate of the point.
+     */
+    inline Point2D ( double x, double y )
+    {
+      m_X = x;
+      m_Y = y;
+    }
+
+
+
+    /**
+     * Copy construcor
+     */
+    inline Point2D (const Point2D& p){
+      m_X = p.x();
+      m_Y = p.y();
+    }
+    
+    /**
+    * Creates a new point in 2D.
+    * @param v Vector form origin to the point.
+     */
+    inline Point2D ( const CVec2& v )
+    {
+      m_X = v[0];
+      m_Y = v[1];
+    }
+
+    /**
+    * Destructor, does nothing.
+     */
+    inline ~Point2D()
+    {
+    }
+
+    /**
+    * Returns the x-coordinate of the point.
+    * @return the x-coordinate of the point.
+     */
+    inline double x() const
+    {
+      return m_X;
+    }
+
+    /**
+    * Returns the y-coordinate of the point.
+    * @return the y-coordinate of the point.
+     */
+    inline double y() const
+    {
+      return m_Y;
+    }
+
+    /**
+    * Sets the x- and y-coordinate of the point to new values.
+    * @param x the new value of the x coordinate.
+    * @param y the new value of the x coordinate.
+     */
+    inline void set ( double x, double y )
+    {
+      m_X = x;
+      m_Y = y;
+    }
+
+    /**
+    * Sets the x-coordinate of the point to a new value.
+    * @param x the new value of the x coordinate.
+     */
+    inline void setX ( double x )
+    {
+      m_X = x;
+    }
+
+    /**
+    * Sets the y-coordinate of the point to a new value.
+    * @param y the new value of the x coordinate.
+     */
+    inline void setY ( double y )
+    {
+      m_Y = y;
+    }
+
+    /**
+     * Overloaded operators.
+     */
+
+    inline Point2D& operator= ( const Point2D& p) {
+      m_X = p.x();
+      m_Y = p.y(); 
+      return *this;
+    }
+
+    inline Point2D operator+ ( const CVec2& v ) const
+    {
+      return Point2D ( m_X + v[0], m_Y + v[1] );
+    }
+
+    inline Point2D operator+ ( const Point2D& p ) const
+    {
+      return Point2D ( m_X + p.x(), m_Y + p.y() );
+    }
+
+    inline CVec2 operator- ( const Point2D& p ) const
+    {
+      return CVec2 ( m_X - p.x(), m_Y - p.y() );
+    }
+
+    inline Point2D operator- ( const CVec2& v ) const
+    {
+      return Point2D ( m_X - v[0], m_Y - v[1] );
+    }
+
+    inline Point2D operator* ( double scalar ) const
+    {
+      return Point2D ( m_X * scalar, m_Y * scalar );
+    }
+
+    inline Point2D operator/ ( double scalar ) const
+    {
+      return Point2D ( m_X / scalar, m_Y / scalar );
+    }
+
+    inline Point2D& operator+= ( const CVec2& v )
+    {
+      m_X += v[0];
+      m_Y += v[1];
+      return ( *this );
+    }
+
+    inline Point2D& operator-= ( const CVec2& v )
+    {
+      m_X -= v[0];
+      m_Y -= v[1];
+      return ( *this );
+    }
+
+    inline Point2D& operator*= ( double scalar )
+    {
+      m_X *= scalar;
+      m_Y *= scalar;
+      return ( *this );
+    }
+
+    inline Point2D& operator/= ( double scalar )
+    {
+      m_X /= scalar;
+      m_Y /= scalar;
+      return ( *this );
+    }
+
+    inline double operator [] ( unsigned int i ) const
+    {
+      return ( ( double* ) this ) [i];
+    }
+
+    inline double& operator [] ( unsigned int i )
+    {
+      return ( ( double* ) this ) [i];
+    }
+
+    inline bool operator== ( const Point2D& point ) const
+    {
+      return ( fabs(m_X - point.x()) < 0.001 && fabs(m_Y - point.y()) < 0.001 );
+    }
+
+    inline bool operator!= ( const Point2D& point ) const
+    {
+      return !((*this)== point);
+    }
+
+    /**
+    * Returns the distance to a given point.
+    * @param point The point to calculate the distance to.
+    * @return the distance between point the two points.
+     */
+    inline double distance ( const Point2D& point ) const
+    {
+      return sqrt ( ( m_X-point.x() ) * ( m_X-point.x() ) + ( m_Y-point.y() ) * ( m_Y-point.y() ) );
+    }
+
+    /**
+    * Returns the distance to origin.
+    * @return the distance between point the two points.
+     */
+    inline double distance ( ) const
+    {
+      return sqrt ( m_X * m_X + m_Y * m_Y );
+    }
+
+    /**
+    * Checks whether two points are equal.
+    * @param p The point to check equality.
+    * @return true if points are equal, false otherwise.
+     */
+    inline bool equal ( const Point2D& point ) const
+    {
+      if ( ( *this - point ).magnitude() < 0.0001 )
+      {
+        return true;
+      }
+      else
+      {
+        return false;
+      }
+    }
+
+    /**
+    * Returns the vector which represents the point in 2D.
+    * @return vector which represents the point in 2D.
+     */
+    inline CVec2 toVector() const
+    {
+      return CVec2 ( m_X, m_Y );
+    }
+
+        /**
+     * Returns the angle of the corresponding polar coordinates.
+     * @return polar angle.
+         */
+    float getPolarAngle () const;
+
+    /**
+    * Rotate by angle (in radiants) around center.
+    * @param center Center of rotation
+    * @param angle Angle in radiants
+     */
+    inline void rotate ( const Point2D& center, float angle )
+    {
+      double x0=m_X-center.m_X;
+      double y0=m_Y-center.m_Y;
+      double xRot =  x0*cos ( angle ) - y0*sin ( angle );
+      double yRot =  x0*sin ( angle ) + y0*cos ( angle );
+      m_X = xRot+center.m_X;
+      m_Y = yRot+center.m_Y;
+    }
+
+    /**
+     * Rotate by angle (in radiants) around (0,0).
+     * @param angle Angle in radiants
+     */
+    inline void rotate ( float angle )
+    {
+      double xRot =  m_X*cos ( angle ) - m_Y*sin ( angle );
+      double yRot =  m_X*sin ( angle ) + m_Y*cos ( angle );
+      m_X = xRot;
+      m_Y = yRot;
+    }
+
+    /**
+    * Returns the string representation of the point.
+    * @return string representation of the point.
+     */
+    inline std::string toString() const
+    {
+      std::ostringstream str;
+      str << m_X << " " << m_Y;
+      return str.str();
+    }
+
+    /** @return "invalid" Point (used as end marker in vector drawings) **/
+    static Point2D invalidPoint() { return Point2D( DBL_MAX, DBL_MAX  ); }
+
+    bool isValid() { return ( ( m_X != DBL_MAX ) || ( m_Y != DBL_MAX ) ); }
+
+  protected:
+
+    double m_X;
+    double m_Y;
+};
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/Polygon2D.cpp b/homer_mapping/src/OccupancyMap/Math/Polygon2D.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0c5d5e52fa65722335789d736bc3f163dcdff6ce
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Polygon2D.cpp
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ *  Polygon2D.cpp
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: Polygon2D.cpp 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#include <stdlib.h>
+#include "Polygon2D.h"
+#include "Point2D.h"
+#include "Line2D.h"
+
+
+#define THIS Polygon2D
+
+using namespace std;
+
+vector<Line2D> THIS::getLines() const
+{
+  vector<Line2D> lines;
+  vector<Point2D>::const_iterator pointIt = m_Points.begin() +1;
+  while ( pointIt != m_Points.end() )
+  {
+    lines.push_back ( Line2D ( * ( pointIt-1 ), *pointIt ) );
+    pointIt++;
+  }
+  lines.push_back ( Line2D ( * ( m_Points.end()-1 ), *m_Points.begin() ) );
+
+  return lines;
+}
+
+void THIS::clipLines ( std::vector<Line2D>& linesToClip ) const
+{
+  // for each line to clip
+  vector<Line2D>::iterator linesIt = linesToClip.begin();
+  while ( linesIt != linesToClip.end() )
+  {
+    if ( !clipLine ( *linesIt ) )
+    {
+      // line lies completely outside of the polygon
+      linesToClip.erase ( linesIt );
+      continue;
+    }
+    linesIt++;
+  }
+}
+
+bool THIS::clipLine ( Line2D& lineToClip ) const
+{
+  vector<Line2D> polygonLines = getLines();
+  CVec2 v = lineToClip.vec();
+
+  float tIn = 0.0;
+  float tOut = 1.0;
+
+  // for each line of the polygon
+  vector<Line2D>::const_iterator polygonIt = polygonLines.begin();
+  while ( polygonIt != polygonLines.end() )
+  {
+    CVec2 n = ( *polygonIt ).getNormal();
+//     cout << "polLine "<< ( *polygonIt ).toString() << endl;
+//     cout << "n "<< n.toString() << endl;
+
+    CVec2 w0 = lineToClip.start()- ( *polygonIt ).start();
+    CVec2 w1 = lineToClip.end()- ( *polygonIt ).start();
+
+//     cout << "w0 " <<w0.toString() << endl;
+//     cout << "w1 " <<w1.toString() << endl;
+
+    float c0 = w0.dot ( n );
+    float c1 = w1.dot ( n );
+
+    // test if line lies completely inside
+    if ( c0 < 0 && c1 < 0 )
+    {
+      // do nothing;
+      polygonIt++;
+      continue;
+    }
+    // test if line lies completely outside
+    else if ( c0 >= 0 && c1 >= 0 )
+    {
+/*      cout << "return 1" << endl;*/
+      return false;
+    }
+    // clip lines
+    else
+    {
+      float denominator = v.dot ( n );
+
+      if ( denominator == 0 )
+      {
+        // impossible to happen
+        polygonIt++;
+        continue;
+      }
+
+      float t = -c0/denominator;
+
+      // test for "in" or "out" point
+      if ( denominator < 0 && t > tIn )
+      {
+        // intersection point is an "in point"
+        tIn = t;
+      }
+      else if ( denominator > 0 && t < tOut )
+      {
+        // intersection point is an "out point"
+        tOut = t;
+      }
+    }
+    polygonIt++;
+  }
+
+  if ( tIn > tOut ) {
+/*    cout << "return 2" << endl;*/
+    return false;
+  }
+
+  lineToClip.setEnd ( lineToClip.start() + tOut * v );
+  lineToClip.setStart ( lineToClip.start() + tIn * v );
+
+//   cout << "return true" << endl;
+
+  return true;
+}
+
+#undef THIS
diff --git a/homer_mapping/src/OccupancyMap/Math/Polygon2D.h b/homer_mapping/src/OccupancyMap/Math/Polygon2D.h
new file mode 100644
index 0000000000000000000000000000000000000000..16f5ca6e8b3686ae40f293740fc92d2f74641e06
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Polygon2D.h
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ *  Polygon2D.h
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Polygon2D.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef POLYGON2D_H
+#define POLYGON2D_H
+
+#include <vector>
+
+class Polygon2D;
+class Point2D;
+class Line2D;
+
+/**
+ * @class Polygon2D
+ *
+ * @author Susanne Maur
+ *
+ */
+class Polygon2D
+{
+  public:
+    
+    inline Polygon2D() {}
+
+    /**
+     * Creates a new polygon
+     * The points must be given counterclockwise.
+     */
+    inline Polygon2D ( std::vector<Point2D>& points )
+    {
+      m_Points = points;
+    }
+    
+    inline ~Polygon2D() {}
+
+    inline std::vector<Point2D> getPoints() const{
+      return m_Points;
+    }
+
+    /**
+     * Returns the line representation of the polygon.
+     * @return line representation of the polygon.
+     */
+    std::vector<Line2D> getLines() const;
+
+    /**
+     * Clips lines to this polygon. Not tested!!!
+     * Implementation of Cyrus-Beck.
+     * The polygon must be difined counterclockwise.
+     * @param linesToClip The lines to clip.
+     */
+    void clipLines ( std::vector<Line2D>& linesToClip ) const;
+
+    /**
+     * Clips a line to this polygon.
+     * Implementation of Cyrus-Beck.
+     * The polygon must be difined counterclockwise.
+     * @param lineToClip The lines to clip.
+     * @return True if it was possible to clip the line, false if the line lies completely outside.
+     */
+    bool clipLine ( Line2D& lineToClip ) const;
+
+  private:
+    
+    std::vector<Point2D> m_Points;
+
+};
+
+#endif
+
diff --git a/homer_mapping/src/OccupancyMap/Math/Pose.cpp b/homer_mapping/src/OccupancyMap/Math/Pose.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6011f280d10b9061a2aa90c0df3f1cc54d9f98b2
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Pose.cpp
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ *  Pose.cpp
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  $Id: Pose.cpp 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#include <cmath>
+
+#include "Pose.h"
+#include "Transformation2D.h"
+
+using namespace std;
+
+
+#define THIS Pose
+
+THIS::THIS(float x, float y, float theta) : Point2D(x, y) {
+  m_Theta = theta;
+}
+
+THIS::THIS() {
+  m_Theta = 0.0;
+}
+
+THIS::~THIS() {
+}
+
+float THIS::theta() const {
+  return m_Theta;
+}
+
+void THIS::setTheta(float theta) {
+  m_Theta = theta;
+}
+
+Pose THIS::operator+ ( const Transformation2D& transformation ) const {
+  float x, y, theta;
+  x = m_X + transformation.x();
+  y = m_Y + transformation.y();
+  theta = m_Theta + transformation.theta();
+  while (theta >= M_PI) theta -= 2*M_PI;
+  while (theta < -M_PI) theta += 2*M_PI;
+
+	return Pose(x, y, theta);
+}
+
+Pose THIS::operator- ( const Transformation2D& transformation ) const {
+  float x, y, theta;
+  x = m_X - transformation.x();
+  y = m_Y - transformation.y();
+  theta = m_Theta - transformation.theta();
+  while (theta >= M_PI) theta -= 2*M_PI;
+  while (theta < -M_PI) theta += 2*M_PI;
+
+	return Pose(x, y, theta);
+}
+
+Transformation2D THIS::operator- ( const Pose& pose ) const {
+  float x, y, theta;
+  x = m_X - pose.x();
+  y = m_Y - pose.y();
+
+  float s1, s2;
+  if (m_Theta > pose.theta()) {
+    s1 = -( 2 * M_PI - m_Theta + pose.theta());
+    s2 = m_Theta - pose.theta();
+  } else {
+    s1 = 2 * M_PI - pose.theta() + m_Theta;
+    s2 = -(pose.theta() - m_Theta);
+  }
+  if (fabs(s1) > fabs(s2)) {
+    theta = s2;
+  } else {
+    theta = s1;
+  }
+  while (theta >= M_PI) theta -= 2*M_PI;
+  while (theta < -M_PI) theta += 2*M_PI;
+
+	return Transformation2D(x, y, theta);
+}
+
+Pose THIS::interpolate(const Pose& referencePose, float t) const {
+
+  float newX = m_X + t * (referencePose.x() - m_X);
+  float newY = m_Y + t * (referencePose.y() - m_Y);
+
+  // Calculate mean angle by adding the vem_Thetaors in unit circle
+  float x1 = cosf(m_Theta);
+  float y1 = sinf(m_Theta);
+  float x2 = cosf(referencePose.theta());
+  float y2 = sinf(referencePose.theta());
+  float newTheta = atan2 (y1*(1-t)+y2*t, x1*(1-t)+x2*t);
+
+  return Pose(newX, newY, newTheta);
+}
+
+//THIS::THIS( ExtendedInStream& extStrm )
+//{
+//  char version;
+//  extStrm >> version;
+//  extStrm >> m_X;
+//  extStrm >> m_Y;
+//  extStrm >> m_Theta;
+//}
+
+//void THIS::storer( ExtendedOutStream& extStrm ) const
+//{
+//  char version=10;
+//  extStrm << version;
+//  extStrm << m_X;
+//  extStrm << m_Y;
+//  extStrm << m_Theta;
+//}
+
diff --git a/homer_mapping/src/OccupancyMap/Math/Pose.h b/homer_mapping/src/OccupancyMap/Math/Pose.h
new file mode 100644
index 0000000000000000000000000000000000000000..d0f6574c5856b9de9413be634dd7b251365242e7
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Pose.h
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ *  Pose.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Pose.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef POSE_H
+#define POSE_H
+
+#include "Point2D.h"
+//#include "Architecture/Serializer/ExtendedOutStream.h" // TODO kann wahrscheinlich weg
+//#include "Architecture/Serializer/ExtendedInStream.h"
+
+class Transformation2D;
+
+/**
+ * @class Pose
+ *
+ * @author Stephan Wirth, Susanne Maur (RX), David Gossow (RX)
+ * @brief Class to describe and hold a pose of the robot (x, y)-Position + Orientation
+ *        in world-coordinates
+ */
+class Pose : public Point2D {
+
+public:
+
+    /**
+     * Constructor which initializes the members with the given values.
+     * @param x x-position
+     * @param y y-position
+     * @param theta orientation in radiants
+     */
+    Pose(float x, float y, float theta);
+
+    /**
+     * Default constructor, initializes members to 0.
+     */
+    Pose();
+
+    /**
+    * The destructor is empty.
+    */
+    ~Pose();
+
+    float theta() const;
+
+    void setTheta(float theta);
+
+    Pose operator+ ( const Transformation2D& transformation ) const;
+    Pose operator- ( const Transformation2D& transformation ) const;
+    Transformation2D operator- ( const Pose& pose ) const;
+
+    /**
+     * Interpolates between two poses and returns a pose which correlates with
+     * current pose +  t * (reference pose - current pose)
+     * @param referencePose The second pose to interpolate between.
+     * @param t The factor of interpolation.
+     * @return Interpolated pose
+     */
+    Pose interpolate(const Pose& referencePose, float t) const;
+
+//    Pose( ExtendedInStream& extStrm );
+
+//    void storer( ExtendedOutStream& extStrm ) const;
+
+protected:
+
+    float m_Theta;
+};
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/Transformation2D.cpp b/homer_mapping/src/OccupancyMap/Math/Transformation2D.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..693c7a396f40a7e5c16be4d35d952c4afdfac4ed
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Transformation2D.cpp
@@ -0,0 +1,308 @@
+/*******************************************************************************
+ *  Transformation2D.cpp
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Transformation2D.cpp 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#include "Transformation2D.h"
+
+#include <cmath>
+#include <vector>
+#include <iostream>
+#include <sstream>
+#include "vec2.h" // TODO das sieht nach baselib aus ggf. durch baselib ersetzen
+#include "mat2.h" // TODO das sieht nach baselib aus ggf. durch baselib ersetzen
+#include "Point2D.h"
+#include "Line2D.h"
+
+#define THIS Transformation2D
+#define BASE CVec2
+
+THIS::Transformation2D() : BASE()
+{
+  m_Theta = 0.0;
+}
+
+THIS::Transformation2D ( double x, double y, double theta ) : BASE ( x,y )
+{
+  m_Theta = theta;
+}
+
+THIS::Transformation2D ( const CVec2& vec, double theta ) : BASE ( vec )
+{
+  m_Theta = theta;
+}
+
+THIS::~Transformation2D()
+{
+}
+
+void THIS::set ( double x, double y, double theta )
+{
+  m_X = x;
+  m_Y = y;
+  m_Theta = theta;
+}
+
+double THIS::theta() const
+{
+  return m_Theta;
+}
+
+Transformation2D THIS::operator+ ( Transformation2D t ) const
+{
+  double theta = m_Theta + t.theta();
+  // TODO comment only for scan matching test
+//   while ( theta >= M_PI ) theta -= 2*M_PI;
+//   while ( theta < -M_PI ) theta += 2*M_PI;
+  return Transformation2D ( m_X + t.x(), m_Y + t.y(), theta );
+}
+
+Transformation2D& THIS::operator+= ( Transformation2D t )
+{
+  m_X += t.x();
+  m_Y += t.y();
+  m_Theta += t.theta();
+  // TODO comment only for scan matching test
+//   while ( m_Theta >= M_PI ) m_Theta -= 2*M_PI;
+//   while ( m_Theta < -M_PI ) m_Theta += 2*M_PI;
+  return ( *this );
+}
+
+Transformation2D THIS::operator- ( Transformation2D t ) const
+{
+  float s1, s2, theta;
+  if ( m_Theta > t.theta() )
+  {
+    s1 = - ( 2 * M_PI - m_Theta + t.theta() );
+    s2 = m_Theta - t.theta();
+  }
+  else
+  {
+    s1 = 2 * M_PI - t.theta() + m_Theta;
+    s2 = - ( t.theta() - m_Theta );
+  }
+  if ( fabs ( s1 ) > fabs ( s2 ) )
+  {
+    theta = s2;
+  }
+  else
+  {
+    theta = s1;
+  }
+  while ( theta >= M_PI ) theta -= 2*M_PI;
+  while ( theta < -M_PI ) theta += 2*M_PI;
+//   double theta = m_Theta - t.theta();
+//   while ( theta >= M_PI ) theta -= 2*M_PI;
+//   while ( theta < -M_PI ) theta += 2*M_PI;
+  return Transformation2D ( m_X - t.x(), m_Y - t.y(), theta );
+}
+
+Transformation2D& THIS::operator-= ( Transformation2D t )
+{
+  m_X -= t.x();
+  m_Y -= t.y();
+
+  float s1, s2, theta;
+  if ( m_Theta > t.theta() )
+  {
+    s1 = - ( 2 * M_PI - m_Theta + t.theta() );
+    s2 = m_Theta - t.theta();
+  }
+  else
+  {
+    s1 = 2 * M_PI - t.theta() + m_Theta;
+    s2 = - ( t.theta() - m_Theta );
+  }
+  if ( fabs ( s1 ) > fabs ( s2 ) )
+  {
+    theta = s2;
+  }
+  else
+  {
+    theta = s1;
+  }
+  while ( theta >= M_PI ) theta -= 2*M_PI;
+  while ( theta < -M_PI ) theta += 2*M_PI;
+  m_Theta = theta;
+
+  return ( *this );
+
+//   m_X -= t.x();
+//   m_Y -= t.y();
+//   m_Theta -= t.theta();
+//   while ( m_Theta >= M_PI ) m_Theta -= 2*M_PI;
+//   while ( m_Theta < -M_PI ) m_Theta += 2*M_PI;
+//   return ( *this );
+}
+
+Transformation2D THIS::operator* ( float factor ) const
+{
+
+  double theta = m_Theta * factor;
+  while ( theta >= M_PI ) theta -= 2*M_PI;
+  while ( theta < -M_PI ) theta += 2*M_PI;
+  return Transformation2D ( m_X * factor, m_Y * factor, theta );
+}
+
+Transformation2D& THIS::operator*= ( float factor )
+{
+  m_X *= factor;
+  m_Y *= factor;
+  m_Theta *= factor;
+  while ( m_Theta >= M_PI ) m_Theta -= 2*M_PI;
+  while ( m_Theta < -M_PI ) m_Theta += 2*M_PI;
+  return ( *this );
+}
+
+
+Transformation2D THIS::operator/ ( float factor ) const
+{
+  double theta = m_Theta / factor;
+  return Transformation2D ( m_X / factor, m_Y / factor, theta );
+}
+
+Transformation2D& THIS::operator/= ( float factor )
+{
+  m_X /= factor;
+  m_Y /= factor;
+  m_Theta /= factor;
+  return ( *this );
+}
+
+bool THIS::operator== ( Transformation2D t ) const
+{
+  if ( t.x() == m_X && t.y() == m_Y && t.theta() == m_Theta )
+  {
+    return true;
+  }
+  else
+  {
+    return false;
+  }
+}
+
+bool THIS::operator!= ( Transformation2D t ) const
+{
+  return ! ( ( *this ) ==t );
+}
+
+bool THIS::operator<= ( Transformation2D t ) const
+{
+  return ( this->magnitude() <= t.magnitude() ) && ( m_Theta <= t.theta() );
+}
+
+bool THIS::operator>= ( Transformation2D t ) const
+{
+  return ( this->magnitude() >= t.magnitude() ) && ( m_Theta >= t.theta() );
+}
+
+bool THIS::operator< ( Transformation2D t ) const
+{
+  return ( m_X < t.x() ) || ( m_Y < t.y() ) || ( ( m_Theta < t.theta() ) && ( *this <= t ) );
+}
+
+bool THIS::operator> ( Transformation2D t ) const
+{
+  return ( m_X > t.x() ) || ( m_Y > t.y() ) || ( ( m_Theta > t.theta() ) && ( *this >= t ) );
+}
+
+Transformation2D THIS::abs() const
+{
+  return Transformation2D ( std::abs ( m_X ), std::abs ( m_Y ), std::abs ( m_Theta ) );
+}
+
+Transformation2D THIS::inverse() const
+{
+  return ( *this ) * ( -1.0 );
+}
+
+Point2D THIS::transform ( const Point2D& point ) const
+{
+  CMat2 rotMat = CMat2 ( m_Theta );
+  CVec2 transVec = CVec2 ( m_X, m_Y );
+  Point2D transformedPoint = rotMat * ( point );
+  transformedPoint += transVec;
+  return transformedPoint;
+}
+
+std::vector<Point2D> THIS::transform ( const std::vector<Point2D>& points ) const
+{
+  CMat2 rotMat = CMat2 ( m_Theta );
+  CVec2 transVec = CVec2 ( m_X, m_Y );
+  std::vector<Point2D> transformedPoints;
+  std::vector<Point2D>::const_iterator iter = points.begin();
+  while ( iter != points.end() )
+  {
+    Point2D currPoint = rotMat * ( *iter );
+    currPoint += transVec;
+    transformedPoints.push_back ( currPoint );
+    iter++;
+  }
+  return transformedPoints;
+}
+
+// // Reihenfolge rotation/translation vertauscht !!!
+// Point2D THIS::transform ( Point2D point ) const
+// {
+//   CMat2 rotMat = CMat2 ( m_Theta );
+//   CVec2 transVec = CVec2 ( m_X, m_Y );
+//   Point2D transformedPoint = point+transVec;
+//   transformedPoint = rotMat * point;
+//   return transformedPoint;
+// }
+//
+// // Reihenfolge rotation/translation vertauscht !!!
+// std::vector<Point2D> THIS::transform ( std::vector<Point2D> points ) const
+// {
+//   CMat2 rotMat = CMat2 ( m_Theta );
+//   CVec2 transVec = CVec2 ( m_X, m_Y );
+//   std::vector<Point2D> transformedPoints;
+//   std::vector<Point2D>::const_iterator iter = points.begin();
+//   while ( iter != points.end() )
+//   {
+//     Point2D currPoint = ( *iter )+ transVec;
+//     currPoint = rotMat * currPoint;
+//     transformedPoints.push_back ( currPoint );
+//     iter++;
+//   }
+//   return transformedPoints;
+// }
+
+Line2D THIS::transform ( const Line2D& line ) const
+{
+  CMat2 rotMat = CMat2 ( m_Theta );
+  CVec2 transVec = CVec2 ( m_X, m_Y );
+  Line2D transformedLine = Line2D ( rotMat * line.start() + transVec, rotMat * line.end() + transVec );
+  return transformedLine;
+}
+
+std::vector<Line2D> THIS::transform ( const std::vector<Line2D>& lines ) const
+{
+  //CMat2 rotMat = CMat2 ( m_Theta );
+  //CVec2 transVec = CVec2 ( m_X, m_Y );
+  std::vector<Line2D> transformedLines;
+  std::vector<Line2D>::const_iterator iter = lines.begin();
+  while ( iter != lines.end() )
+  {
+    transformedLines.push_back ( transform(*iter) );
+    iter++;
+  }
+  return transformedLines;
+}
+
+std::string THIS::toString() const
+{
+  std::ostringstream str;
+  str << "deltaX: " << m_X << ", deltaY: " << m_Y << ", deltaTheta: " << m_Theta;
+  return str.str();
+}
+
+
+
+#undef THIS
+#undef BASE
+
diff --git a/homer_mapping/src/OccupancyMap/Math/Transformation2D.h b/homer_mapping/src/OccupancyMap/Math/Transformation2D.h
new file mode 100644
index 0000000000000000000000000000000000000000..59a54d827c71bb08384861b0e78cf1d20cf60c98
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Transformation2D.h
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ *  Transformation2D.h
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Transformation2D.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef TRANSFORMATION2D_H
+#define TRANSFORMATION2D_H
+
+#include <cmath>
+#include <vector>
+//#include "Workers/Math/Vec.h"
+#include "Point2D.h"
+#include "Line2D.h"
+
+
+/**
+ * @class Transformation2D
+ *
+ * @author Susanne Maur
+ *
+ * @brief Class to describe a transformation of poses in 2D.
+ * This inplies a translation in x and y direction each and a rotation.
+ */
+class Transformation2D : public CVec2
+{
+
+  public:
+
+    /**
+     * Constructor that initializes the members.
+     * @param x translation in x direction in m
+     * @param y translation in y direction in m
+     * @param theta rotation in radiants
+     */
+    Transformation2D ( double x, double y, double theta );
+
+    /**
+     * Constructor that initializes the members.
+     * @param vec a vector which represents the translation in x and y direction
+     * @param theta rotation in radiants
+     */
+    Transformation2D ( const CVec2& vec, double theta );
+
+    /**
+     * Default constructor sets all members to 0.0.
+     */
+    Transformation2D();
+
+    /**
+     * Default destructor.
+     */
+    ~Transformation2D();
+
+    /**
+     * Sets the values of transformation.
+     * @param x translation in x direction in mm
+     * @param y translation in y direction in mm
+     * @param theta rotation in radiants
+     */
+    void set ( double x, double y, double theta );
+
+    /**
+     * Returns the rotation in radiants.
+     * @return rotation in radiants
+     */
+    double theta() const;
+
+    /**
+     * Adds two transformations.
+     */
+    Transformation2D operator+ ( Transformation2D t ) const;
+    Transformation2D& operator+= ( Transformation2D t );
+
+    /**
+     * Subtracts two transformations.
+     */
+    Transformation2D operator- ( Transformation2D t ) const;
+    Transformation2D& operator-= ( Transformation2D t );
+
+    /**
+     * Scales a transformation by a factor
+     */
+    Transformation2D operator* ( float factor ) const;
+    Transformation2D& operator*= ( float factor );
+
+    /**
+     * Scales a transformation by a factor
+     */
+    Transformation2D operator/ ( float factor ) const;
+    Transformation2D& operator/= ( float factor );
+
+    /**
+     * Test equality of transformations.
+     */
+    bool operator== ( Transformation2D t ) const;
+    bool operator!= ( Transformation2D t ) const;
+
+    /**
+     * Compare transformations.
+     * (attention: algebraic signs are taken into account, if necessary use fabs())
+     */
+    bool operator<= ( Transformation2D t ) const;
+    bool operator>= ( Transformation2D t ) const;
+    bool operator< ( Transformation2D t ) const;
+    bool operator> ( Transformation2D t ) const;
+
+    /**
+     * Applies abs() on every attribute.
+     */
+    Transformation2D abs() const;
+
+    /**
+     * Inverts the transformation, scales every attribute with -1.
+     */
+    Transformation2D inverse() const;
+
+    /**
+     * Transformes points by first rotation, then translating.
+     */
+    Point2D transform ( const Point2D& point ) const;
+    std::vector<Point2D> transform ( const std::vector<Point2D>& points ) const;
+
+    /**
+     * Transformes lines by first rotation, then translating.
+     */
+    Line2D transform ( const Line2D& line ) const;
+    std::vector<Line2D> transform ( const std::vector<Line2D>& lines ) const;
+
+    /**
+     * Returns the string representation of the transformation.
+     * @return string representation of the transformation.
+     */
+    std::string toString() const;
+
+  private:
+    double m_Theta;
+};
+
+#endif
+
diff --git a/homer_mapping/src/OccupancyMap/Math/Vector3D.cpp b/homer_mapping/src/OccupancyMap/Math/Vector3D.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..495846a703c6bf8fc640e62f5bd2d0ad0d247772
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Vector3D.cpp
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ *  Vector3D.cpp
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: $
+ *******************************************************************************/
+
+#include "Vector3D.h"
+
+#define THIS Vector3D
+
+using namespace std;
+
+std::string THIS::toString( int precision, std::string name )
+{
+  std::ostringstream s;
+
+  s.precision( precision );
+  s.setf(ios::fixed,ios::floatfield);
+
+  for ( unsigned row=0; row<3; row++ )
+  {
+    if ( name != "" )
+    {
+      if ( row==1 )
+      {
+        s << name << " = ";
+      }
+      else
+      {
+        s.width( name.length()+3 );
+        s << "";
+      }
+    }
+
+    s << "( ";
+    s.width( precision+4 );
+    switch ( row )
+    {
+      case 0:
+        s << m_X << " ";
+        break;
+      case 1:
+        s << m_Y << " ";
+        break;
+      case 2:
+        s << m_Z << " ";
+        break;
+    }
+    s << ")" << endl;
+  }
+  return s.str();
+}
+
+#undef THIS
diff --git a/homer_mapping/src/OccupancyMap/Math/Vector3D.h b/homer_mapping/src/OccupancyMap/Math/Vector3D.h
new file mode 100644
index 0000000000000000000000000000000000000000..ae656232cce5ebfb8dfd160cf94e7b492651d500
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/Vector3D.h
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ *  Vector3D.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus
+ *******************************************************************************/
+
+#ifndef VEC3_H
+#define VEC3_H
+
+#include <math.h>
+#include <assert.h>
+#include <string>
+#include "vec2.h"
+
+class Vector3D
+{
+  public:
+
+    Vector3D();
+    Vector3D ( float x, float y, float z );
+    Vector3D ( const CVec2& v, float z);
+
+    Vector3D ( const Vector3D& v2 );
+
+    Vector3D operator+ ( const Vector3D& vVector ) const;
+    Vector3D& operator+= ( const Vector3D& vVector );
+    Vector3D operator+() const;
+
+    Vector3D operator- ( const Vector3D& vVector ) const;
+    Vector3D& operator-= ( const Vector3D& vVector );
+    Vector3D operator-() const;
+
+    // Dot
+    float operator* ( const Vector3D& vVector ) const;
+
+    // Cross
+    Vector3D operator^ ( const Vector3D& vVector2 ) const;
+
+    // Scalar Mult
+    Vector3D operator* ( const float num ) const;
+    Vector3D& operator*= ( const float num );
+    Vector3D operator/ ( float num ) const;
+    Vector3D& operator/= ( const float num );
+
+    bool operator < ( const Vector3D& vVec ) const;
+    bool operator > ( const Vector3D& vVec ) const;
+    bool operator== ( const Vector3D& v1 ) const;
+
+    float operator [] ( const unsigned int i ) const;
+    float& operator [] ( const unsigned int i );
+
+    void set ( float fx, float fy, float fz );
+
+    float x() const {
+      return m_X;
+    }
+
+    float y() const {
+      return m_Y;
+    }
+
+    float z() const {
+      return m_Z;
+    }
+
+    void lerp ( const Vector3D& v1, const Vector3D& v2, float f );
+
+    float magnitude() const;
+
+    std::string toString( int precision=3, std::string name="" );
+
+  private:
+    float m_X, m_Y, m_Z;
+};
+
+#include "vec3_inl.h"
+
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/mat2.h b/homer_mapping/src/OccupancyMap/Math/mat2.h
new file mode 100644
index 0000000000000000000000000000000000000000..254e8dc68fd581091914fd501fe18892cac7bc2f
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/mat2.h
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ *  mat2.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus
+ *******************************************************************************/
+
+#ifndef MAT2_H
+#define MAT2_H
+
+#include <math.h>
+#include "Point2D.h"
+#include "vec2.h"
+
+class CMat2
+{
+	public:
+		CMat2();
+		CMat2(float rot);
+		~CMat2();
+
+		CMat2 operator *(const CMat2 &mat) const;
+
+		CVec2 operator *(const CVec2& v) const;
+
+		Point2D operator *(const Point2D& p) const;
+        
+        float& operator [] (unsigned int position) {
+            return fMatrix[position];
+        }
+        
+        CMat2 operator +(const CMat2 rhs) const {
+            CMat2 newMatrix;
+            for (unsigned int i = 0; i < 4; i++) {
+                newMatrix[i] = valueAt(i) + rhs.valueAt(i);
+            }
+            return newMatrix;
+        }
+        
+        CMat2 operator -(const CMat2 rhs) const {
+            CMat2 newMatrix;
+            for (unsigned int i = 0; i < 4; i++) {
+                newMatrix[i] = valueAt(i) - rhs.valueAt(i);
+            }
+            return newMatrix;
+        }
+        
+        float valueAt(unsigned int position) const{
+            return fMatrix[position];
+        }
+        
+		union
+		{
+			float fMatrix[4];
+			float m[2][2];
+			struct
+			{
+				float xx, xy;
+				float yx, yy;
+			};
+		};
+
+		void transpose();
+		void loadIdentity();
+
+		void makeRotation(float fA);
+
+		bool invert();
+};
+
+
+
+#include "mat2_inl.h"
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/mat2_inl.h b/homer_mapping/src/OccupancyMap/Math/mat2_inl.h
new file mode 100644
index 0000000000000000000000000000000000000000..e3f77e161151e98c7df7f06b43db1d40fd9c4753
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/mat2_inl.h
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ *  mat2_inl.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus
+ *******************************************************************************/
+
+#include <assert.h>
+
+inline CMat2::CMat2(){
+    for (unsigned int i = 0; i < 4; i++) {
+        fMatrix[i] = 0;
+    }
+}
+
+inline CMat2::~CMat2()
+{}
+
+inline CMat2::CMat2(float rot)
+{
+	makeRotation(rot);
+}
+
+inline CMat2 CMat2::operator * ( const CMat2 & mat ) const
+{
+    CMat2 retValue;
+    for (unsigned int line = 0; line < 2; line++) {
+        for (unsigned int column = 0; column < 2; column++) {
+            retValue[line*2 + column] = valueAt(line*2 + column) + mat.valueAt(column*2 + line);
+        }
+    }
+    return retValue;
+}
+
+inline CVec2 CMat2::operator * ( const CVec2& v ) const
+{
+	return CVec2(xx*v[0] + xy*v[1],yx*v[0] + yy*v[1]);
+}
+
+inline Point2D CMat2::operator * ( const Point2D& p ) const
+{
+	return Point2D(xx*p.x() + xy*p.y(), yx*p.x() + yy*p.y());
+}
+
+inline void CMat2::transpose()
+{
+	float t=xy;
+	xy=yx;
+	yx=t;
+}
+
+inline void CMat2::loadIdentity()
+{
+	xx=1.0f; xy=0.0f;
+	yx=0.0f; yy=1.0f;
+}
+
+inline void CMat2::makeRotation ( float fA )
+{
+	xx=yy=cosf(fA);
+	yx=sinf(fA);
+	xy=-yx;
+}
+
+inline bool CMat2::invert()
+{
+	CMat2 tmp;
+	float det = fMatrix[0]*fMatrix[3] - fMatrix[1]*fMatrix[2];
+
+	if(fabs(det) < 0.001f)	return false;
+
+	det = 1.0 / det;
+	tmp.fMatrix[0] = fMatrix[3]*det;
+	tmp.fMatrix[1] = -fMatrix[1]*det;
+	tmp.fMatrix[2] = -fMatrix[2]*det;
+	tmp.fMatrix[3] = fMatrix[0]*det;
+
+	(*this)=tmp;
+	return true;
+}
+
+
+
+
diff --git a/homer_mapping/src/OccupancyMap/Math/mat3.cpp b/homer_mapping/src/OccupancyMap/Math/mat3.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..306877e83b14cbce9a21908a9f812c9b1bb14175
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/mat3.cpp
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ *  mat3.h
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus, Susanne Maur
+ *******************************************************************************/
+
+#include "mat3.h"
+#include "math.h"
+
+#define THIS CMat3
+
+//----------------------------------------------------------------------------------------------------------
+THIS::~CMat3()
+{
+}
+//----------------------------------------------------------------------------------------------------------
+void THIS::transpose()
+{
+	float temp;
+
+	temp=fMatrix[1];
+	fMatrix[1]=fMatrix[3];
+	fMatrix[3]=temp;
+
+	temp=fMatrix[2];
+	fMatrix[2]=fMatrix[6];
+	fMatrix[6]=temp;
+
+	temp=fMatrix[5];
+	fMatrix[5]=fMatrix[7];
+
+	fMatrix[7]=temp;
+}
+
+//----------------------------------------------------------------------------------------------------------
+
+void THIS::reverse() 
+{
+  CMat3 temp;
+
+  temp[0]=fMatrix[4]*fMatrix[8] - fMatrix[5]*fMatrix[7]; 
+  temp[1]=fMatrix[2]*fMatrix[7] - fMatrix[1]*fMatrix[8];    
+  temp[2]=fMatrix[1]*fMatrix[5] - fMatrix[2]*fMatrix[4];
+  temp[3]=fMatrix[5]*fMatrix[6] - fMatrix[3]*fMatrix[8]; 
+  temp[4]=fMatrix[0]*fMatrix[8] - fMatrix[2]*fMatrix[6];    
+  temp[5]=fMatrix[2]*fMatrix[3] - fMatrix[0]*fMatrix[5];
+  temp[6]=fMatrix[3]*fMatrix[7] - fMatrix[4]*fMatrix[6]; 
+  temp[7]=fMatrix[1]*fMatrix[6] - fMatrix[0]*fMatrix[7];    
+  temp[8]=fMatrix[0]*fMatrix[4] - fMatrix[1]*fMatrix[3];
+
+  *this = (temp) * (1.0/determinant());
+}
+
+//----------------------------------------------------------------------------------------------------------
+void THIS::loadIdentity()
+{
+	fMatrix[0]=1.0f; fMatrix[1]=0;    fMatrix[2]=0;
+	fMatrix[3]=0;    fMatrix[4]=1.0f; fMatrix[5]=0;
+	fMatrix[6]=0;    fMatrix[7]=0;    fMatrix[8]=1.0f;
+}
+//----------------------------------------------------------------------------------------------------------
+void THIS::makeRotationX(float fA)
+{
+	// 1  0  0  0
+	// 0  c -s  0
+	// 0  s  c  0
+	// 0  0  0  1
+	float c=cosf(fA);
+	float s=sinf(fA);
+	fMatrix[0]=1; fMatrix[1]=0; fMatrix[2]=0; 
+	fMatrix[3]=0; fMatrix[4]=c; fMatrix[5]=s; 
+	fMatrix[6]=0; fMatrix[7]=-s; fMatrix[8]=c;
+
+}
+//----------------------------------------------------------------------------------------------------------
+void THIS::makeRotationY(float fA)
+{
+	// c  0  s  0
+	// 0  1  0  0
+	//-s  0  c  0
+	// 0  0  0  1
+	float c=cosf(fA);
+	float s=sinf(fA);
+	fMatrix[0]=c; fMatrix[1]=0; fMatrix[2]=-s; 
+	fMatrix[3]=0; fMatrix[4]=1; fMatrix[5]=0; 
+	fMatrix[6]=s; fMatrix[7]=0; fMatrix[8]=c; 
+}
+//----------------------------------------------------------------------------------------------------------
+void THIS::makeRotationZ(float fA)
+{
+	// c -s  0  0
+	// s  c  0  0
+	// 0  0  1  0
+	// 0  0  0  1
+
+	float c=cosf(fA);
+	float s=sinf(fA);
+	fMatrix[0]=c; fMatrix[1]=s; fMatrix[2]=0; 
+	fMatrix[3]=-s; fMatrix[4]=c; fMatrix[5]=0; 
+	fMatrix[6]=0; fMatrix[7]=0; fMatrix[8]=1; 
+}
+//----------------------------------------------------------------------------------------------------------
+void THIS::makeScale(const Vector3D& vScale)
+{
+	fMatrix[0]=vScale[0]; fMatrix[1]=0; fMatrix[2]=0; 
+	fMatrix[3]=0; fMatrix[4]=vScale[1]; fMatrix[5]=0; 
+	fMatrix[6]=0; fMatrix[7]=0; fMatrix[8]=vScale[2]; 
+}
+//----------------------------------------------------------------------------------------------------------
+CMat3 THIS::operator*(const CMat3& mat) const
+{
+	CMat3 r;
+	float* r0=(float*)&r.fMatrix;
+	float* m2=(float*)&fMatrix;
+	float* m1=(float*)&mat.fMatrix;
+
+	r0[0]=m1[0]*m2[0]+ m1[1]*m2[3]+ m1[2]*m2[6];
+	r0[1]=m1[0]*m2[1]+ m1[1]*m2[4]+ m1[2]*m2[7];
+	r0[2]=m1[0]*m2[2]+ m1[1]*m2[5]+ m1[2]*m2[8];
+	
+	r0[3]=m1[3]*m2[0]+ m1[4]*m2[3]+ m1[5]*m2[6];
+	r0[4]=m1[3]*m2[1]+ m1[4]*m2[4]+ m1[5]*m2[7];
+	r0[5]=m1[3]*m2[2]+ m1[4]*m2[5]+ m1[5]*m2[8];
+	
+	r0[6]=m1[6]*m2[0]+ m1[7]*m2[3]+ m1[8]*m2[6];
+	r0[7]=m1[6]*m2[1]+ m1[7]*m2[4]+ m1[8]*m2[7];
+	r0[8]=m1[6]*m2[2]+ m1[7]*m2[5]+ m1[8]*m2[8];
+	
+
+	return r;
+}
+//----------------------------------------------------------------------------------------------------------
+CMat3 THIS::operator *(float f) const {
+  CMat3 newMatrix;
+  for (unsigned i = 0; i < 9; i++) {
+      newMatrix[i] = fMatrix[i] * f;
+  }
+  return newMatrix;
+}
+//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+CMat3& THIS::operator *=(float f) {
+  for (unsigned i = 0; i < 9; i++) {
+      fMatrix[i] *= f;
+  }
+  return *this;
+}
+//----------------------------------------------------------------------------------------------------------
+Vector3D THIS::operator *(const Vector3D& v) const {
+  Vector3D temp;
+  temp[0]=fMatrix[0]*v[0]+fMatrix[1]*v[1]+fMatrix[2]*v[2];
+  temp[1]=fMatrix[3]*v[0]+fMatrix[4]*v[1]+fMatrix[5]*v[2];
+  temp[2]=fMatrix[6]*v[0]+fMatrix[7]*v[1]+fMatrix[8]*v[2];
+  return temp;
+}
+//----------------------------------------------------------------------------------------------------------
+CMat3 THIS::operator +(const CMat3& mat) {
+  CMat3 newMatrix;
+  for (unsigned i = 0; i < 9; i++) {
+      newMatrix[i] = mat.valueAt(i) + valueAt(i);
+  }
+  return newMatrix;
+}
+
+//----------------------------------------------------------------------------------------------------------
+std::string THIS::toString() const
+{
+  std::ostringstream st;
+  for (int i=0;i<3;i++)
+  {
+    for (int j=0;j<3;j++)
+    {
+      st<<m[j][i]<<" ";
+    }
+    st<<"\n";
+  }
+  return st.str();
+}
+//----------------------------------------------------------------------------------------------------------
+float THIS::determinant() const {
+  return fMatrix[0]*fMatrix[4]*fMatrix[8] + fMatrix[1]*fMatrix[5]*fMatrix[6 ] + fMatrix[2]*fMatrix[3]*fMatrix[7]
+      - fMatrix[2]*fMatrix[4]*fMatrix[6] - fMatrix[1]*fMatrix[3]*fMatrix[8] - fMatrix[0]*fMatrix[5]*fMatrix[7];
+}
+//----------------------------------------------------------------------------------------------------------
+
+#undef THIS
diff --git a/homer_mapping/src/OccupancyMap/Math/mat3.h b/homer_mapping/src/OccupancyMap/Math/mat3.h
new file mode 100755
index 0000000000000000000000000000000000000000..629b9e7d6f46dd8f8d7c1794846f7062c99c678e
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/mat3.h
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ *  mat3.h
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus, Susanne Maur
+ *******************************************************************************/
+#ifndef MAT3_H
+#define MAT3_H
+
+#include <iostream>
+#include <sstream>
+#include <assert.h>
+#include "Vector3D.h"
+
+class CMat3 {
+  public:
+	  CMat3();
+    CMat3( float xx, float xy, float xz, float yx, float yy, float yz, float zx, float zy, float zz );
+	  ~CMat3();
+  
+    /** overwritten operator**/
+	  CMat3 operator *(const CMat3 &mat) const;  
+    CMat3 operator *(float f) const;  
+    CMat3& operator *=(float f);  
+    Vector3D operator *(const Vector3D& v) const;      
+    float& operator [](const unsigned value);    
+    CMat3 operator +(const CMat3& mat1);
+    
+    /** @return value at position **/
+    float valueAt(unsigned i) const;
+   
+    /** set value at position **/
+    void setValue(unsigned line, unsigned column, float value);
+  
+    /** @return determinant of matrix **/
+    float determinant() const;
+      
+    /** transpose matrix **/
+	  void transpose();
+    /** reverse matrix **/
+    void reverse();
+
+    /** create identity matrix **/
+	  void loadIdentity();
+  
+    /** create rotation matrix **/
+	  void makeRotationX(float fA);
+	  void makeRotationY(float fA);
+	  void makeRotationZ(float fA);
+
+    /** create scale matrix **/
+	  void makeScale(const Vector3D& vScale);
+	  //void BuildRPY(float fRoll, float fPitch, float fYaw);
+      
+	  std::string toString() const;
+
+  private:
+	  union
+	  {
+		  float fMatrix[9];
+		  float m[3][3];
+		  struct
+		  {
+			  float xx, xy, xz;
+			  float yx, yy, yz;
+			  float zx, zy, zz;
+		  };
+	  };
+};
+
+#include "mat3.inl"
+
+#endif
+
diff --git a/homer_mapping/src/OccupancyMap/Math/mat3.inl b/homer_mapping/src/OccupancyMap/Math/mat3.inl
new file mode 100755
index 0000000000000000000000000000000000000000..ae2e6c5fd6adf6de4941053fc6cd9f5457b08092
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/mat3.inl
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ *  mat3.h
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus, Susanne Maur
+ *******************************************************************************/
+
+#define THIS CMat3
+
+//----------------------------------------------------------------------------------------------------------
+inline THIS::CMat3()
+{
+	for(int i=0;i<9;i++) fMatrix[i]=0.0f;
+}
+//----------------------------------------------------------------------------------------------------------
+inline THIS::CMat3( float xx, float xy, float xz, float yx, float yy, float yz, float zx, float zy, float zz )
+{
+  fMatrix[0] = xx;
+  fMatrix[1] = xy;
+  fMatrix[2] = xz;
+  fMatrix[3] = yx;
+  fMatrix[4] = yy;
+  fMatrix[5] = yz;
+  fMatrix[6] = zx;
+  fMatrix[7] = zy;
+  fMatrix[8] = zz;
+}
+//----------------------------------------------------------------------------------------------------------
+inline float& THIS::operator [](const unsigned value) {
+  return fMatrix[value];
+}
+//----------------------------------------------------------------------------------------------------------
+inline float THIS::valueAt(unsigned i) const {
+  return fMatrix[i];
+}
+//----------------------------------------------------------------------------------------------------------
+inline void THIS::setValue(unsigned line, unsigned column, float value) {
+  m[line][column] = value;
+}
+//----------------------------------------------------------------------------------------------------------
+
+#undef THIS
diff --git a/homer_mapping/src/OccupancyMap/Math/misc.cpp b/homer_mapping/src/OccupancyMap/Math/misc.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1f4facd6e65d02c5fceb39d8f0abfd60bfca18bf
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/misc.cpp
@@ -0,0 +1,390 @@
+/*******************************************************************************
+ *  misc.cpp
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus
+ *******************************************************************************/
+
+#include "vec2.h"
+#include "misc.h"
+#include <iostream>
+#include "math.h"
+#include <assert.h>
+#include "Obb2D.h"
+
+/**
+*	m - center of the circle
+*	r - radius of the circle
+*	x - starting point of the ray
+*	t - ray
+*	f - param - return value
+*/
+bool intersectRayCircle(const CVec2& m, float r, const CVec2& x, const CVec2& t, float& f)
+{
+	//|x-m|=r
+	//|x+r*t-m|=r
+	//(x+r*t-m)^2=r^2
+	//((x-m)+r*t)^2=r^2
+	//(x-m)^2+2*(x-m)*r*t+r^2*t^2=r^2
+	
+	//r^2*t^2+r*2*(x-m)*t+(x-m)^2-r^2
+	
+	
+	float invtSqr=1.0f/t.sqr();
+	float p = 2.0f*((x-m)*t)*invtSqr;
+	float q = ((m-x).sqr() - r*r)*invtSqr;	
+	float diskr = p*p*0.25f - q;
+	
+	if (diskr < 0)
+	{
+		return false;
+	}
+
+	diskr=sqrtf(diskr);
+	f = -0.5f*p - diskr;
+	
+	if (f<0)
+	{
+		f = -0.5f*p + diskr;
+		if (f>0)
+		{
+			return true;
+		}
+		else
+		{
+			return false;
+		}
+	}
+/*	
+	if (f<0)
+	{
+		std::cout << "smaller"  << f << std::endl;
+		if (t*(m-x)>0)
+		{
+			f=0.001;
+			return true;
+		}
+		else
+			return false;
+	}
+	*/
+	return true;
+
+}
+
+
+bool intersectRayLineSegment(const CVec2& a, const CVec2& b, const CVec2& x, const CVec2& t, float&f)
+{
+	CVec2 n=(b-a).getNormal();
+	
+	float denom=t*n;
+		
+	if (fabs(denom)<0.000001f)
+		return false;
+		
+	f=(n*a-n*x)/denom;
+	
+	if (f<0)
+	{
+		return false;
+	}
+		
+	CVec2 pt=x+t*f;
+	if ((a-pt)*(b-pt)<0)
+		return true;	
+	return false;
+}
+
+float shortestDistanceToLineSegment(const CVec2& a, const CVec2& b, const CVec2& x)
+{
+	CVec2 dir=b-a;
+	
+	if ( (dir*dir) < 0.00001 )
+	{
+		float m1=(x-a).magnitude();
+		float m2=(x-b).magnitude();
+		if (m1<m2) return m1;
+		else return m2;
+	}
+		
+	float r=(dir*x-dir*a)/(dir*dir);
+	if (r<=0.0f)
+		return (x-a).magnitude();
+	if (r>=1.0f)
+		return (x-b).magnitude();
+	
+	return (a+r*dir-x).magnitude();
+	
+}
+
+bool intersectRayCapsule(const CVec2& x, const CVec2& t, const CVec2& a, const CVec2& b, float radius, float& f)
+{
+	f=99999999;
+	float r;
+	bool hadInt=false;
+	if (intersectRayCircle(a,radius,x,t,r))
+	{
+		if (r<f)
+			f=r;
+		hadInt=true;
+	}
+	if (intersectRayCircle(b,radius,x,t,r))
+	{
+		if (r<f)
+			f=r;
+		hadInt=true;
+	}
+	CVec2 n=normalize(b-a).getNormal();
+	if (intersectRayLineSegment(a+radius*n,b+radius*n,x,t,r))
+	{
+		if (r<f)
+			f=r;
+		hadInt=true;
+	}
+	if (intersectRayLineSegment(a-radius*n,b-radius*n,x,t,r))
+	{
+		if (r<f)
+			f=r;
+		hadInt=true;
+	}
+	return hadInt;
+}
+
+// c - punkt wo arc startet
+// p - zentrum des arcs
+// r0 - arc radius
+// hd - heading
+// m1 - kreiszentrum
+// r1 - kreisradius
+// angle - output
+bool intersectPathCircle(const CVec2& c, const CVec2& p, float r0, const CVec2& hd, const CVec2& m1, float r1, float& angle)
+{
+	CVec2 vec=p-m1;
+	float s=vec.sqr();
+	if (s>sqr(fabs(r0)+r1))	
+		return false;
+	
+	if (s<sqr(fabs(r0)-r1))
+		return false;
+	
+	float d=sqrtf(s);
+	
+	float b=(r0*r0-r1*r1+s)/(2*d);
+	
+	CVec2 mid=p-vec*(b/d);
+	
+	float h=sqrtf(r0*r0-b*b);
+	//std::cout << " h :  " << h << std::endl;
+	
+	CVec2 n=(vec*(h/d)).getNormal();
+	
+	
+	//CVec2 pm=p-m1;
+	
+	CVec2 p1=(mid+n-p);
+	CVec2 p2=(mid-n-p);
+	
+	CVec2 pc=normalize(c-p);
+	
+	float angle0=acosf(normalize(p1)*pc);
+	float angle1=acosf(normalize(p2)*pc);
+	
+	//std::cout << "angle0: " << angle0 << std::endl;
+	
+	if ((p1*hd)<0) angle0=2*M_PI-angle0;
+	if ((p2*hd)<0) angle1=2*M_PI-angle1;
+	
+	if (angle0<angle1) angle=angle0;
+	else angle=angle1;
+	
+	//angle=angle0;
+	
+	return true;
+	
+
+}
+
+bool intersectPathLine(const CVec2& c, const CVec2& p, float r0, const CVec2& hd, const CVec2& p1, const CVec2& p2, float& angle)
+{
+	CVec2 vec=p2-p1;
+
+	
+	/*
+	float invtSqr=1.0f/t.sqr();
+	float p = 2.0f*((x-m)*t)*invtSqr;
+	float q = ((m-x).sqr() - r*r)*invtSqr;	
+	float diskr = p*p*0.25f - q;
+	*/
+	
+	if (((p1-p).sqr()<r0*r0)&&((p2-p).sqr()<r0*r0))
+		return false;
+	
+	
+	float invtSqr=1.0f/vec.sqr();
+	float pa = 2.0f*((p1-p)*vec)*invtSqr;
+	float qi = ((p-p1).sqr() - r0*r0)*invtSqr;	
+	float diskr = pa*pa*0.25f - qi;
+	
+	if (diskr < 0)
+	{
+		return false;
+	}
+	
+	float sqrtfdiskr=sqrtf(diskr);
+
+	float f1 = -0.5f*pa - sqrtfdiskr;
+	float f2 = -0.5f*pa + sqrtfdiskr;
+	
+	if (f1>1) return false;
+	if (f2<0) return false;
+	
+	//std::cout << "f1: " << f1 << " f2: " << f2 << std::endl;
+	
+	CVec2 int1=p1+f1*vec;
+	CVec2 int2=p1+f2*vec;
+	
+	//assert((int2-int1).magnitude()<(p1-p2).magnitude());
+	
+	CVec2 pc=normalize(c-p);
+	
+	float angle0=acosf(normalize(int1-p)*pc);
+	float angle1=acosf(normalize(int2-p)*pc);
+	
+	
+	if ((int1-p)*hd<0)
+	{
+		angle0=2*M_PI-angle0;
+	}
+	if ((int2-p)*hd<0)
+	{
+		angle1=2*M_PI-angle1;
+	}
+	
+	
+	if (angle0<angle1) angle=angle0;
+	else angle=angle1;
+	
+	if (f1<0) angle=angle1;
+	if (f2>1) angle=angle0;
+
+	
+	
+	return true;
+	
+}
+
+// c - punkt wo arc startet
+// p - arc zentrum
+// r0 - radius des arcs
+// hd - heading
+// a - linienanfang
+// b - linienende
+// radius - linienradius
+// r [out] - wie weit ging der arc?
+
+bool intersectPathCapsule(const CVec2& c, const CVec2& p, float r0, const CVec2& hd, const CVec2& a, const CVec2& b, float radius, float& f)
+{
+	f=99999999;
+	float r;
+	bool hadInt=false;
+	if (intersectPathCircle(c,p,r0,hd,a,radius,r))
+	{
+		if (r<f)
+			f=r;
+		hadInt=true;
+	}
+	if (intersectPathCircle(c,p,r0,hd,b,radius,r))
+	{
+		if (r<f)
+			f=r;
+		hadInt=true;
+	}
+	CVec2 n=normalize(b-a).getNormal();
+	if (intersectPathLine(c,p,r0,hd,a+radius*n,b+radius*n,r))
+	{
+		if (r<f)
+			f=r;
+		hadInt=true;
+	}
+	if (intersectPathLine(c,p,r0,hd,a-radius*n,b-radius*n,r))
+	{
+		if (r<f)
+			f=r;
+		hadInt=true;
+	}
+	return hadInt;
+}
+
+
+bool isInAABB(const std::pair<CVec2,CVec2>& aabb, const CVec2& p)
+{
+	const CVec2& mins=aabb.first;
+	const CVec2& maxs=aabb.second;
+	if ((p[0]>mins[0]) &&(p[1]>mins[1])&&(p[0]<maxs[0]) &&(p[1]<maxs[1]))
+		return true;
+	return false;
+}
+
+bool testAABBOverlap(const std::pair<CVec2,CVec2>& a, const std::pair<CVec2,CVec2>& b)
+{
+	const CVec2& vMins=b.first;
+	const CVec2& vMaxs=b.second;
+	CVec2 B=(vMins+vMaxs)*0.5f;
+	CVec2 A=(a.first+a.second)*0.5f;
+	CVec2 E=a.second-A;
+	CVec2 bE=vMaxs-B;
+
+	const CVec2 T = B - A;//vector from A to B
+	return fabs(T[0])  <= (E[0] + bE[0]) 
+			&&
+			fabs(T[1]) <= (E[1] + bE[1]);
+
+}
+
+float computeOBBIntersection(const CVec2& a, const CVec2& b, const CVec2& c, const CVec2& d, float size)
+{
+	OBB2D g;
+	CVec2 dab=normalize(b-a)*size;
+	CVec2 nab=dab.getNormal();
+	g[0]=a+nab-dab;
+	g[1]=a-nab-dab;
+	g[2]=b-nab+dab;
+	g[3]=b+nab+dab;
+	
+	
+	OBB2D h;
+	CVec2 dcd=normalize(d-c)*size;
+	CVec2 ncd=dcd.getNormal();
+	h[0]=c+ncd-dcd;
+	h[1]=c-ncd-dcd;
+	h[2]=d-ncd+dcd;
+	h[3]=d+ncd+dcd;
+	
+	std::pair<CVec2,CVec2> aabb=g.computeAABB();
+	std::pair<CVec2,CVec2> aabb2=h.computeAABB();
+	
+	//static int all=0;
+	//all++;
+	
+	
+	if (!testAABBOverlap(aabb,aabb2))
+	{
+		return 0;
+	}
+	
+	//h.clip(g);
+	/*
+	static int clips=0;
+	clips++;
+	if (clips%10000==0)
+		std::cout<<"clips: " << clips << " rate: " << float(clips)/float(all) << std::endl;
+	*/
+	return h.computeClippedArea(g)/(2*size*((a-b).magnitude()+2*size));
+	
+}
+
+
+
+
diff --git a/homer_mapping/src/OccupancyMap/Math/misc.h b/homer_mapping/src/OccupancyMap/Math/misc.h
new file mode 100644
index 0000000000000000000000000000000000000000..5175e3cd490488a5562afa42cba815244474fd57
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/misc.h
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ *  misc.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus
+ *******************************************************************************/
+
+#ifndef MISC_H
+#define MISC_H
+
+template<class T>
+T sqr(T f)
+{
+	return f*f;
+}
+
+bool intersectRayCircle(const CVec2& m, float r, const CVec2& x, const CVec2& t, float& f);
+bool intersectRayLineSegment(const CVec2& a, const CVec2& b, const CVec2& x, const CVec2& t, float&f);
+float shortestDistanceToLineSegment(const CVec2& a, const CVec2& b, const CVec2& x);
+bool intersectRayCapsule(const CVec2& x, const CVec2& t, const CVec2& a, const CVec2& b, float radius, float& f);
+
+bool intersectPathCircle(const CVec2& c, const CVec2& p, float r0, const CVec2& hd, const CVec2& m1, float r1, float& angle);
+bool intersectPathLine(const CVec2& c, const CVec2& p, float r0, const CVec2& hd, const CVec2& p1, const CVec2& p2, float& angle);
+
+bool intersectPathCapsule(const CVec2& c, const CVec2& p, float r0, const CVec2& hd, const CVec2& a, const CVec2& b, float radius, float& f);
+
+float computeOBBIntersection(const CVec2& a, const CVec2& b, const CVec2& c, const CVec2& d, float size);
+
+#endif
+
diff --git a/homer_mapping/src/OccupancyMap/Math/vec2.h b/homer_mapping/src/OccupancyMap/Math/vec2.h
new file mode 100644
index 0000000000000000000000000000000000000000..39a72c8eb60c6b6bf836dc7d7be932c376e25fd0
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/vec2.h
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ *  vec2.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus, Susanne Maur
+ *******************************************************************************/
+
+#include <iostream>
+#include <sstream>
+
+#ifndef VEC2_H
+#define VEC2_H
+
+#include <math.h>
+
+class CVec2
+{
+  public:
+
+    inline CVec2()
+    {
+      m_X = 0; m_Y = 0;
+    }
+
+    inline CVec2 ( double x, double y )
+    {
+      m_X=x; m_Y=y;
+    }
+
+    inline CVec2 ( const CVec2& vec )
+    {
+      m_X=vec.x(); m_Y=vec.y();
+    }
+
+    inline CVec2 operator+ ( const CVec2& vVector ) const
+    {
+      return CVec2 ( vVector[0] + m_X, vVector[1] + m_Y );
+    };
+
+    inline CVec2 operator- ( const CVec2& vVector ) const
+    {
+      return CVec2 ( m_X - vVector[0], m_Y - vVector[1] );
+    };
+    
+    inline CVec2 operator- ( ) const
+    {
+        return CVec2 ( - m_X, - m_Y );
+    };
+
+    inline CVec2 operator* ( double num ) const
+    {
+      return CVec2 ( m_X * num, m_Y * num );
+    };
+
+    inline double operator* ( const CVec2& vVector ) const
+    {
+      return m_X*vVector[0]+m_Y*vVector[1];
+    }
+
+    inline CVec2 operator/ ( double num ) const
+    {
+      return CVec2 ( m_X / num, m_Y / num );
+    }
+
+    inline void set ( double fx, double fy )
+    {
+      m_X=fx; m_Y=fy;
+    }
+
+    inline double x() const
+    {
+      return m_X;
+    }
+
+    inline double y() const
+    {
+      return m_Y;
+    }
+
+    inline double magnitude() const
+    {
+      double sumOfSquares = m_X*m_X + m_Y*m_Y;
+      return sqrt ( sumOfSquares );
+    }
+
+    inline double operator [] ( unsigned int i ) const
+    {
+      return ( ( double* ) this ) [i];
+    }
+
+    inline double& operator [] ( unsigned int i )
+    {
+      return ( ( double* ) this ) [i];
+    }
+
+    inline CVec2& operator/= ( double num )
+    {
+      double inv=1.0f/num;
+      m_X*=inv;
+      m_Y*=inv;
+      return ( *this );
+    }
+
+    inline CVec2& operator*= ( double num )
+    {
+      m_X*=num;
+      m_Y*=num;
+      return ( *this );
+    }
+
+    inline CVec2& normalize()
+    {
+      return ( *this/=magnitude() );
+    }
+
+    inline CVec2& makePerp()
+    {
+      double xn=m_X;
+      m_X=-m_Y;
+      m_Y=xn;
+      return *this;
+    }
+
+    inline CVec2 getNormal() const
+    {
+      return CVec2 ( m_Y, -m_X ); //?
+    }
+
+    inline CVec2 getNormalized() const
+    {
+      return ( *this ) /magnitude();
+    }
+
+    inline double sqr() const
+    {
+      return ( *this ) * ( *this );
+    }
+
+    inline double dot ( const CVec2& vec ) const
+    {
+      return ( m_X*vec[0] ) + ( m_Y*vec[1] );
+    }
+
+    inline double getAngle ( const CVec2& vec ) const
+    {
+      return acos ( dot ( vec ) / ( magnitude() *vec.magnitude() ) );
+    }
+
+    /// @param angle Rotation angle in radiants
+    inline CVec2 rotate ( float angle ) const
+    {
+      double xRot =  m_X*cos ( angle ) - m_Y*sin ( angle );
+      double yRot =  m_X*sin ( angle ) + m_Y*cos ( angle );
+      return CVec2 ( xRot, yRot );
+    }
+
+    inline bool equal ( CVec2 vec ) const
+    {
+      return ( m_X==vec.x() && m_Y==vec.y() );
+    }
+
+    /**
+     * Returns the string representation of the vector.
+     * @return string representation of the point.
+     */
+    inline std::string toString() const
+    {
+      std::ostringstream str;
+      str << m_X << " " << m_Y;
+      return str.str();
+    }
+
+  protected:
+    double m_X, m_Y;
+};
+
+inline CVec2 operator* ( double f, const CVec2& v )
+{
+  return v*f;
+}
+
+inline CVec2 normalize ( const CVec2& v )
+{
+  return v/v.magnitude();
+}
+
+#endif
diff --git a/homer_mapping/src/OccupancyMap/Math/vec3_inl.h b/homer_mapping/src/OccupancyMap/Math/vec3_inl.h
new file mode 100644
index 0000000000000000000000000000000000000000..533eabbb26e04cf4efa6ea60a890c529bf309476
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/Math/vec3_inl.h
@@ -0,0 +1,179 @@
+/*******************************************************************************
+ *  vec3_inl.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus
+ *******************************************************************************/
+
+#define THIS Vector3D
+
+#include <sstream>
+
+//----------------------------------------------------------------------------------------------------------
+inline THIS::THIS()
+{}
+//----------------------------------------------------------------------------------------------------------
+inline THIS::THIS ( float x, float y, float z )
+{
+  m_X = x; m_Y = y; m_Z = z;
+};
+//----------------------------------------------------------------------------------------------------------
+inline THIS::THIS ( const Vector3D& v2 )
+{
+  m_X=v2[0];
+  m_Y=v2[1];
+  m_Z=v2[2];
+};
+//----------------------------------------------------------------------------------------------------------
+inline THIS::THIS ( const CVec2& v, float z)
+{
+  m_X=v[0];
+  m_Y=v[1];
+  m_Z=z;
+}
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D THIS::operator+ ( const Vector3D& vVector ) const
+{
+  return Vector3D ( vVector[0] + m_X, vVector[1] + m_Y, vVector[2] + m_Z );
+};
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D THIS::operator-() const
+{
+  return Vector3D ( -m_X,-m_Y,-m_Z );
+};
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D THIS::operator+() const
+{
+  return Vector3D ( m_X,m_Y,m_Z );
+};
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D THIS::operator- ( const Vector3D& vVector ) const
+{
+  return Vector3D ( m_X-vVector[0],m_Y-vVector[1],m_Z-vVector[2] );
+};
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D THIS::operator* ( const float num ) const
+{
+  return Vector3D ( m_X * num, m_Y * num, m_Z * num );
+};
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D& THIS::operator*= ( const float num )
+{
+  m_X*=num; m_Y*=num; m_Z*=num;
+  return *this;
+}
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D& THIS::operator/= ( const float num )
+{
+  m_X/=num; m_Y/=num; m_Z/=num;
+  return *this;
+}
+//----------------------------------------------------------------------------------------------------------
+inline float THIS::operator* ( const Vector3D& vVector ) const
+{
+  return vVector[0]*m_X+vVector[1]*m_Y+vVector[2]*m_Z;
+};
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D& THIS::operator+= ( const Vector3D& vVector )
+{
+  m_X+=vVector[0];
+  m_Y+=vVector[1];
+  m_Z+=vVector[2];
+  return *this;
+}
+//----------------------------------------------------------------------------------------------------------
+inline bool THIS::operator < ( const Vector3D& vVec ) const
+{
+  if ( m_X<vVec[0] ) return true;
+  if ( m_X>vVec[0] ) return false;
+  if ( m_Y<vVec[1] ) return true;
+  if ( m_Y>vVec[1] ) return false;
+  return ( m_Z<vVec[2] );
+}
+//----------------------------------------------------------------------------------------------------------
+inline bool THIS::operator > ( const Vector3D& vVec ) const
+{
+  if ( m_X<vVec[0] ) return false;
+  if ( m_X>vVec[0] ) return true;
+  if ( m_Y<vVec[1] ) return false;
+  if ( m_Y>vVec[1] ) return true;
+  return ( m_Z>vVec[2] );
+}
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D& THIS::operator-= ( const Vector3D& vVector )
+{
+  m_X-=vVector[0];
+  m_Y-=vVector[1];
+  m_Z-=vVector[2];
+  return *this;
+}
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D THIS::operator^ ( const Vector3D& vVector2 ) const
+{
+  Vector3D vNormal;
+
+  // Calculate the cross product with the non communitive equation
+  vNormal[0] = ( ( m_Y * vVector2[2] ) - ( m_Z * vVector2[1] ) );
+  vNormal[1] = ( ( m_Z * vVector2[0] ) - ( m_X * vVector2[2] ) );
+  vNormal[2] = ( ( m_X * vVector2[1] ) - ( m_Y * vVector2[0] ) );
+
+  // Return the cross product
+  return vNormal;
+};
+//----------------------------------------------------------------------------------------------------------
+inline bool THIS::operator== ( const Vector3D& v1 ) const
+{
+  // this is evil!
+  assert ( 0 );
+
+  static const float EPS=1.0f/100.0f;
+  if ( fabs ( v1[0]-m_X ) >EPS ) return false;
+  if ( fabs ( v1[1]-m_Y ) >EPS ) return false;
+  if ( fabs ( v1[2]-m_Z ) >EPS ) return false;
+
+  return true;
+};
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D THIS::operator/ ( float num ) const
+{
+  return Vector3D ( m_X / num, m_Y / num, m_Z / num );
+};
+//----------------------------------------------------------------------------------------------------------
+inline float THIS::operator [] ( const unsigned int i ) const
+{
+  return ( ( float* ) this ) [i];
+}
+//----------------------------------------------------------------------------------------------------------
+inline float& THIS::operator [] ( const unsigned int i )
+{
+  return ( ( float* ) this ) [i];
+}
+//----------------------------------------------------------------------------------------------------------
+inline void THIS::set ( float fx, float fy, float fz )
+{
+  m_X=fx; m_Y=fy; m_Z=fz;
+}
+//----------------------------------------------------------------------------------------------------------
+inline void THIS::lerp ( const Vector3D& v1, const Vector3D& v2,float f )
+{
+  ( *this ) =v1* ( 1-f ) +v2*f;
+}
+//----------------------------------------------------------------------------------------------------------
+inline float THIS::magnitude() const
+{
+  return sqrtf ( m_X*m_X+m_Y*m_Y+m_Z*m_Z );
+}
+//----------------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------------------------------------
+//----------------------------------------------------------------------------------------------------------
+inline Vector3D operator* ( const float n,const Vector3D& v )
+{
+  return Vector3D ( v[0]*n,v[1]*n,v[2]*n );
+};
+//----------------------------------------------------------------------------------------------------------
+
+
+#undef THIS
+
diff --git a/homer_mapping/src/OccupancyMap/OccupancyMap.cpp b/homer_mapping/src/OccupancyMap/OccupancyMap.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..811d4f31bc18c44d1eb5a3a21754424b23ed8db8
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/OccupancyMap.cpp
@@ -0,0 +1,931 @@
+#include "OccupancyMap.h"
+
+#include "Math/Math.h"
+
+#include <cmath>
+#include <vector>
+#include <fstream>
+#include <sstream>
+#include <QImage>
+
+#include <Eigen/Geometry>
+
+#include <ros/ros.h>
+#include <tf/transform_listener.h>
+
+#include "homer_mapnav_msgs/ModifyMap.h"
+#include "tools/loadRosConfig.h"
+#include "tools/tools.h"
+
+//uncomment this to get extended information on the tracer
+//#define TRACER_OUTPUT
+
+using namespace std;
+
+const float UNKNOWN_LIKELIHOOD = 0.3;
+
+// Flags of current changes //
+const char NO_CHANGE = 0;
+const char OCCUPIED = 1;
+const char FREE = 2;
+//the safety border around occupied pixels which is left unchanged
+const char SAFETY_BORDER = 3;
+///////////////////////////////
+
+//assumed laser measure count for loaded maps
+const int LOADED_MEASURECOUNT = 10;
+
+
+OccupancyMap::OccupancyMap()
+{
+  initMembers();
+}
+
+OccupancyMap::OccupancyMap(float *&occupancyProbability, geometry_msgs::Pose origin, float resolution, int pixelSize, Box2D<int> exploredRegion)
+{
+    initMembers();
+
+
+    m_Origin = origin;
+    m_Resolution = resolution;
+    m_PixelSize = pixelSize;
+    m_ByteSize = pixelSize * pixelSize;
+    m_ExploredRegion = exploredRegion;
+    m_ChangedRegion = exploredRegion;
+
+    if ( m_OccupancyProbability )
+    {
+      delete[] m_OccupancyProbability;
+    }
+    m_OccupancyProbability = occupancyProbability;
+    for(unsigned i = 0; i < m_ByteSize; i++)
+    {
+        if(m_OccupancyProbability[i] != 0.5)
+        {
+            m_MeasurementCount[i] = LOADED_MEASURECOUNT;
+            m_OccupancyCount[i] = m_OccupancyProbability[i] * (float)LOADED_MEASURECOUNT;
+        }
+    }
+}
+
+
+OccupancyMap::OccupancyMap ( const OccupancyMap& occupancyMap )
+{
+  m_OccupancyProbability = 0;
+  m_MeasurementCount = 0;
+  m_OccupancyCount = 0;
+  m_CurrentChanges = 0;
+  m_InaccessibleCount = 0;
+  m_HighSensitive = 0;
+  m_LaserMaxRange = 0;
+  m_LaserMinRange = 0;
+
+  *this = occupancyMap;
+}
+
+OccupancyMap::~OccupancyMap()
+{
+  cleanUp();
+}
+
+void OccupancyMap::initMembers()
+{
+  float mapSize;
+  loadConfigValue("/homer_mapping/size", mapSize);
+  loadConfigValue("/homer_mapping/resolution", m_Resolution);
+
+  //add one safety pixel
+  m_PixelSize = mapSize / m_Resolution + 1;
+  m_ByteSize = m_PixelSize * m_PixelSize;
+
+  m_Origin.position.x = -m_PixelSize*m_Resolution/2;
+  m_Origin.position.y = -m_PixelSize*m_Resolution/2;
+  m_Origin.orientation.w = 1.0;
+  m_Origin.orientation.x = 0.0;
+  m_Origin.orientation.y = 0.0;
+  m_Origin.orientation.z = 0.0;
+
+  loadConfigValue("/homer_mapping/backside_checking", m_BacksideChecking);
+  loadConfigValue("/homer_mapping/obstacle_borders", m_ObstacleBorders);
+  loadConfigValue("/homer_mapping/measure_sampling_step", m_MeasureSamplingStep);
+  loadConfigValue("/homer_mapping/laser_scanner/free_reading_distance", m_FreeReadingDistance);
+
+  m_OccupancyProbability = new float[m_ByteSize];
+  m_MeasurementCount = new unsigned short[m_ByteSize];
+  m_OccupancyCount = new unsigned short[m_ByteSize];
+  m_CurrentChanges = new unsigned char[m_ByteSize];
+  m_InaccessibleCount = new unsigned char[m_ByteSize];
+  m_HighSensitive = new unsigned short[m_ByteSize];
+  for ( unsigned i=0; i<m_ByteSize; i++ )
+  {
+    m_OccupancyProbability[i]=UNKNOWN_LIKELIHOOD;
+    m_OccupancyCount[i]=0;
+    m_MeasurementCount[i]=0;
+    m_CurrentChanges[i]=NO_CHANGE;
+    m_InaccessibleCount[i]=0;
+    m_HighSensitive[i] = 0;
+  }
+
+  m_ExploredRegion=Box2D<int> ( m_PixelSize/2.1, m_PixelSize/2.1, m_PixelSize/1.9, m_PixelSize/1.9 );
+  maximizeChangedRegion();
+}
+
+
+OccupancyMap& OccupancyMap::operator= ( const OccupancyMap & occupancyMap )
+{
+  // free allocated memory
+  cleanUp();
+
+  m_Resolution = occupancyMap.m_Resolution;
+  m_ExploredRegion =  occupancyMap.m_ExploredRegion;
+  m_PixelSize = occupancyMap.m_PixelSize;
+  m_ByteSize = occupancyMap.m_ByteSize;
+
+  loadConfigValue("/homer_mapping/backside_checking", m_BacksideChecking);
+
+  // re-allocate all arrays
+  m_OccupancyProbability = new float[m_ByteSize];
+  m_MeasurementCount = new unsigned short[m_ByteSize];
+  m_OccupancyCount = new unsigned short[m_ByteSize];
+  m_CurrentChanges = new unsigned char[m_ByteSize];
+  m_InaccessibleCount = new unsigned char[m_ByteSize];
+  m_HighSensitive = new unsigned short[m_ByteSize];
+
+  // copy array data
+  memcpy ( m_OccupancyProbability, occupancyMap.m_OccupancyProbability, m_ByteSize * sizeof ( *m_OccupancyProbability ) );
+  memcpy ( m_MeasurementCount, occupancyMap.m_MeasurementCount, m_ByteSize * sizeof ( *m_MeasurementCount ) );
+  memcpy ( m_OccupancyCount, occupancyMap.m_OccupancyCount, m_ByteSize * sizeof ( *m_OccupancyCount ) );
+  memcpy ( m_CurrentChanges, occupancyMap.m_CurrentChanges, m_ByteSize * sizeof ( *m_CurrentChanges ) );
+  memcpy ( m_InaccessibleCount, occupancyMap.m_InaccessibleCount, m_ByteSize * sizeof ( *m_InaccessibleCount ) );
+  memcpy ( m_HighSensitive, occupancyMap.m_HighSensitive, m_ByteSize * sizeof ( *m_HighSensitive) );
+
+
+  return *this;
+}
+
+int OccupancyMap::width() const
+{
+  return m_PixelSize;
+}
+
+int OccupancyMap::height() const
+{
+  return m_PixelSize;
+}
+
+float OccupancyMap::getOccupancyProbability ( Eigen::Vector2i p )
+{
+  unsigned offset = m_PixelSize * p.y() + p.x();
+  if ( offset > unsigned ( m_ByteSize ) )
+  {
+    return UNKNOWN_LIKELIHOOD;
+  }
+  return m_OccupancyProbability[ offset ];
+}
+
+void OccupancyMap::resetHighSensitive()
+{
+	ROS_INFO_STREAM("High sensitive Areas reseted");
+	m_reset_high = true;
+}
+
+void OccupancyMap::computeOccupancyProbabilities()
+{
+  for ( int y = m_ChangedRegion.minY(); y <= m_ChangedRegion.maxY(); y++ )
+  {
+    int yOffset = m_PixelSize * y;
+    for ( int x = m_ChangedRegion.minX(); x <= m_ChangedRegion.maxX(); x++ )
+    {
+      int i = x + yOffset;
+      if ( m_MeasurementCount[i] > 0 )
+      {
+        m_OccupancyProbability[i] = m_OccupancyCount[i] / static_cast<float>  	( m_MeasurementCount[i] );
+		if (m_HighSensitive[i] == 1)
+		{
+		  if(m_reset_high == true)
+		  {
+		  	m_OccupancyCount[i] = 0;
+		  	m_OccupancyProbability[i] = 0;
+		  }
+		  if(m_MeasurementCount[i] > 20 )
+		  {
+		  	m_MeasurementCount[i] = 10; 	
+		  	m_OccupancyCount[i] = 10 * m_OccupancyProbability[i];
+		  }
+		  if(m_OccupancyProbability[i] > 0.3)
+		  {
+		    m_OccupancyProbability[i] =  1 ; 
+		  }
+		}      
+      }
+      else
+      {
+        m_OccupancyProbability[i] = UNKNOWN_LIKELIHOOD;
+      }
+    }
+  }
+  if(m_reset_high  == true)
+  {
+  	m_reset_high = false;
+  }
+}
+
+void OccupancyMap::insertLaserData ( sensor_msgs::LaserScanConstPtr laserData )
+{
+  markRobotPositionFree();
+
+  m_LaserMaxRange = laserData->range_max;
+  m_LaserMinRange = laserData->range_min;
+  tf::StampedTransform laserTransform;
+  try
+  {
+    m_tfListener.lookupTransform("/base_link", laserData->header.frame_id, ros::Time(0), laserTransform);
+  }
+  catch (tf::TransformException ex) {
+      ROS_ERROR_STREAM(ex.what());
+  }
+
+  m_LaserPos.x = laserTransform.getOrigin().getX();
+  m_LaserPos.y = laserTransform.getOrigin().getY();
+
+  std::vector<RangeMeasurement> ranges;
+  ranges.reserve ( laserData->ranges.size() );
+
+  bool errorFound=false;
+  int lastValidIndex=-1;
+  float lastValidRange=m_FreeReadingDistance;
+
+  RangeMeasurement rangeMeasurement;
+  rangeMeasurement.sensorPos = m_LaserPos;
+  for ( unsigned int i = 0; i < laserData->ranges.size(); i++ )
+  {
+    if ( ( laserData->ranges[i] >= m_LaserMinRange ) && ( laserData->ranges[i] <= m_LaserMaxRange ) )
+    {
+      //if we're at the end of an errorneous segment, interpolate
+      //between last valid point and current point
+      if ( errorFound )
+      {
+        //smaller of the two ranges belonging to end points
+        float range = Math::min ( lastValidRange, laserData->ranges[i] );
+        range -= m_Resolution * 2;
+
+        if ( range < m_FreeReadingDistance )
+        {
+          range = m_FreeReadingDistance;
+        }
+        else
+          if ( range > m_LaserMaxRange*0.8 )
+          {
+            range = m_LaserMaxRange*0.8;
+          }
+
+        //choose smaller range
+        for ( unsigned j=lastValidIndex+1; j<i; j++ )
+        {
+          rangeMeasurement.endPos =  map_tools::laser_range_to_point(range, j, laserData->angle_min, laserData->angle_increment, m_tfListener, laserData->header.frame_id, "/base_link");// laserConf->nativeLaserToRobot ( j, range ); //TODO use tf
+          rangeMeasurement.free = true;
+          ranges.push_back ( rangeMeasurement );
+        }
+      }
+      rangeMeasurement.endPos = map_tools::laser_range_to_point(laserData->ranges[i], i, laserData->angle_min, laserData->angle_increment, m_tfListener, laserData->header.frame_id, "/base_link");
+      rangeMeasurement.free = false;
+      ranges.push_back ( rangeMeasurement );
+
+      errorFound=false;
+      lastValidIndex=i;
+      lastValidRange=laserData->ranges[i];
+    }
+    else
+    {
+      errorFound=true;
+    }
+  }
+
+  if ( errorFound )
+  {
+    for ( unsigned j=lastValidIndex+1; j<laserData->ranges.size(); j++ )
+    {
+      rangeMeasurement.endPos = map_tools::laser_range_to_point(m_FreeReadingDistance, j, laserData->angle_min, laserData->angle_increment, m_tfListener, laserData->header.frame_id, "/base_link"); //
+
+      rangeMeasurement.free = true;
+      ranges.push_back ( rangeMeasurement );
+    }
+  }
+
+  insertRanges ( ranges );
+}
+
+
+void OccupancyMap::insertRanges ( vector<RangeMeasurement> ranges )
+{
+  clearChanges();
+
+  Eigen::Vector2i lastEndPixel;
+
+
+  //paint safety borders
+  if ( m_ObstacleBorders )
+  {
+    for ( unsigned i=0; i<ranges.size(); i++ )
+    {
+      geometry_msgs::Point endPosWorld = map_tools::transformPoint(ranges[i].endPos, m_tfListener, "/base_link", "/map");
+      Eigen::Vector2i endPixel = map_tools::toMapCoords(endPosWorld, m_Origin, m_Resolution);
+
+      for ( int y=endPixel.y()-1; y <= endPixel.y() +1; y++ )
+      {
+        for ( int x=endPixel.x()-1; x <= endPixel.x() +1; x++ )
+        {
+          unsigned offset=x+m_PixelSize*y;
+          if ( offset < unsigned ( m_ByteSize ) )
+          {
+            m_CurrentChanges[ offset ] = SAFETY_BORDER;
+          }
+        }
+      }
+    }
+  }
+  //paint safety ranges
+  for ( unsigned i=0; i<ranges.size(); i++ )
+  {
+      geometry_msgs::Point startPosWorld = map_tools::transformPoint(ranges[i].endPos, m_tfListener, "/base_link", "/map");
+      Eigen::Vector2i startPixel = map_tools::toMapCoords(startPosWorld, m_Origin, m_Resolution);
+    geometry_msgs::Point endPos;
+    endPos.x = ranges[i].endPos.x * 4;
+    endPos.y = ranges[i].endPos.y * 4;
+
+    geometry_msgs::Point endPosWorld = map_tools::transformPoint(endPos, m_tfListener, "/base_link", "/map");
+    Eigen::Vector2i endPixel = map_tools::toMapCoords(endPosWorld, m_Origin, m_Resolution);
+
+
+    if(endPixel.x() < 0) endPixel.x() = 0;
+    if(endPixel.y() < 0) endPixel.y() = 0;
+    if(endPixel.x() >= m_PixelSize) endPixel.x() = m_PixelSize - 1;
+    if(endPixel.y() >= m_PixelSize) endPixel.y() = m_PixelSize - 1;
+
+    drawLine ( m_CurrentChanges, startPixel, endPixel, SAFETY_BORDER );
+  }
+
+  //paint end pixels
+  for ( unsigned i=0; i<ranges.size(); i++ )
+  {
+    if ( !ranges[i].free )
+    {
+      geometry_msgs::Point endPosWorld = map_tools::transformPoint(ranges[i].endPos, m_tfListener, "/base_link", "/map");
+      Eigen::Vector2i endPixel = map_tools::toMapCoords(endPosWorld, m_Origin, m_Resolution);
+
+      if ( endPixel != lastEndPixel )
+      {
+        unsigned offset = endPixel.x() + m_PixelSize * endPixel.y();
+        if ( offset < m_ByteSize )
+        {
+          m_CurrentChanges[ offset ] = ::OCCUPIED;
+        }
+      }
+      lastEndPixel=endPixel;
+      }
+  }
+
+  //paint free ranges
+  for ( unsigned i=0; i<ranges.size(); i++ )
+  {
+      geometry_msgs::Point sensorPosWorld = map_tools::transformPoint(ranges[i].sensorPos, m_tfListener, "/base_link", "/map");
+      geometry_msgs::Point endPosWorld = map_tools::transformPoint(ranges[i].endPos, m_tfListener, "/base_link", "/map");
+      Eigen::Vector2i sensorPixel = map_tools::toMapCoords(sensorPosWorld, m_Origin, m_Resolution);
+    Eigen::Vector2i endPixel = map_tools::toMapCoords(endPosWorld, m_Origin, m_Resolution);
+
+    m_ChangedRegion.enclose ( sensorPixel.x(), sensorPixel.y() );
+    m_ChangedRegion.enclose ( endPixel.x(), endPixel.y() );
+
+    if ( endPixel != lastEndPixel )
+    {
+        drawLine ( m_CurrentChanges, sensorPixel, endPixel, ::FREE );
+    }
+
+    lastEndPixel=endPixel;
+  }
+
+  m_ChangedRegion.clip ( Box2D<int> ( 0,0,m_PixelSize-1,m_PixelSize-1 ) );
+  m_ExploredRegion.enclose ( m_ChangedRegion );
+  applyChanges();
+  computeOccupancyProbabilities();
+}
+
+double OccupancyMap::contrastFromProbability ( int8_t prob )
+{
+  // range from 0..126 (=127 values) and 128..255 (=128 values)
+  double diff = ( ( double ) prob - UNKNOWN );
+  double contrast;
+  if ( prob <= UNKNOWN )
+  {
+    contrast = ( diff / UNKNOWN ); // 0..1
+  }
+  else
+  {
+    contrast = ( diff / ( UNKNOWN+1 ) );  // 0..1
+  }
+  return ( contrast * contrast );
+}
+
+double OccupancyMap::evaluateByContrast()
+{
+  double contrastSum = 0.0;
+  unsigned int contrastCnt = 0;
+
+  for ( int y = m_ExploredRegion.minY(); y <= m_ExploredRegion.maxY(); y++ )
+  {
+    for ( int x = m_ExploredRegion.minX(); x <= m_ExploredRegion.maxX(); x++ )
+    {
+      int i = x + y * m_PixelSize;
+      if ( m_MeasurementCount [i] > 1 )
+      {
+        int prob = m_OccupancyProbability[i] * 100;
+        if ( prob != NOT_SEEN_YET ) // ignore not yet seen cells
+        {
+          contrastSum += contrastFromProbability ( prob );
+          contrastCnt++;
+        }
+      }
+    }
+  }
+  if ( ( contrastCnt ) > 0 )
+  {
+    return ( ( contrastSum / contrastCnt ) * 100 );
+  }
+  return ( 0 );
+}
+
+
+
+vector<MeasurePoint> OccupancyMap::getMeasurePoints (sensor_msgs::LaserScanConstPtr laserData)
+{
+  vector<MeasurePoint> result;
+  result.reserve ( laserData->ranges.size() );
+
+  double minDist = m_MeasureSamplingStep;
+
+  m_LaserMaxRange = laserData->range_max;
+  m_LaserMinRange = laserData->range_min;
+
+  Point2D lastHitPos;
+  Point2D lastUsedHitPos;
+
+  //extract points for measuring
+  for ( unsigned int i=0; i < laserData->ranges.size(); i++ )
+  {
+    if ( laserData->ranges[i] <= m_LaserMaxRange && laserData->ranges[i] >= m_LaserMinRange )
+    {
+        geometry_msgs::Point hitPosMsg = map_tools::laser_range_to_point(laserData->ranges[i], i, laserData->angle_min, laserData->angle_increment, m_tfListener, laserData->header.frame_id, "/base_link"); //laserConf->nativeLaserToRobot ( i, laserData[i] ); //tf
+        Point2D hitPos(hitPosMsg.x, hitPosMsg.y);
+
+      if ( hitPos.distance ( lastUsedHitPos ) >= minDist )
+      {
+        MeasurePoint p;
+        //preserve borders of segments
+        if ( ( i!=0 ) &&
+                ( lastUsedHitPos.distance ( lastHitPos ) > m_Resolution*0.5 ) &&
+                ( hitPos.distance ( lastHitPos ) >= minDist*1.5 ) )
+        {
+          p.hitPos = lastHitPos;
+          p.borderType = RightBorder;
+          result.push_back ( p );
+          p.hitPos = hitPos;
+          p.borderType = LeftBorder;
+          result.push_back ( p );
+          lastUsedHitPos = hitPos;
+        }
+        else
+        {
+          //save current point
+          p.hitPos = hitPos;
+          p.borderType = NoBorder;
+          result.push_back ( p );
+          lastUsedHitPos = hitPos;
+        }
+      }
+      lastHitPos = hitPos;
+    }
+  }
+
+  //the first and last one are border pixels
+  if ( result.size() > 0 )
+  {
+    result[0].borderType = LeftBorder;
+    result[result.size()-1].borderType = RightBorder;
+  }
+
+  //calculate front check points
+  for ( unsigned i=0; i < result.size(); i++ )
+  {
+    CVec2 diff;
+
+    switch ( result[i].borderType )
+    {
+      case NoBorder:
+        diff = result[i-1].hitPos - result[i+1].hitPos;
+        break;
+      case LeftBorder:
+        diff = result[i].hitPos - result[i+1].hitPos;
+        break;
+      case RightBorder:
+        diff = result[i-1].hitPos - result[i].hitPos;
+        break;
+    }
+
+    CVec2 normal = diff.rotate ( Math::Pi * 0.5 );
+    normal.normalize();
+    normal *= m_Resolution * sqrt ( 2.0 ) * 10.0;
+
+    result[i].frontPos = result[i].hitPos + normal;
+  }
+
+  return result;
+}
+
+
+float OccupancyMap::computeScore ( Pose robotPose, std::vector<MeasurePoint> measurePoints )
+{
+  // This is a very simple implementation, using only the end point of the beam.
+  // For every beam the end cell is computed and tested if the cell is occupied.
+  unsigned lastOffset=0;
+  unsigned hitOffset=0;
+  unsigned frontOffset=0;
+  float fittingFactor = 0.0;
+
+  float sinTheta = sin ( robotPose.theta() );
+  float cosTheta = cos ( robotPose.theta() );
+
+  for ( unsigned int i = 0; i < measurePoints.size(); i++ )
+  {
+    //fast variant:
+    float x = cosTheta * measurePoints[i].hitPos.x() - sinTheta * measurePoints[i].hitPos.y() + robotPose.x();
+    float y = sinTheta * measurePoints[i].hitPos.x() + cosTheta * measurePoints[i].hitPos.y() + robotPose.y();
+    geometry_msgs::Point hitPos;
+    hitPos.x = x;
+    hitPos.y = y;
+
+    Eigen::Vector2i hitPixel = map_tools::toMapCoords(hitPos, m_Origin, m_Resolution);
+    hitOffset = hitPixel.x() + m_PixelSize*hitPixel.y();
+
+    //avoid multiple measuring of same pixel or unknown pixel
+    if ( ( hitOffset == lastOffset ) || ( hitOffset >= unsigned ( m_ByteSize ) ) || ( m_MeasurementCount[hitOffset] == 0 ) )
+    {
+      continue;
+    }
+
+    if ( m_BacksideChecking )
+    {
+      //avoid matching of back and front pixels of obstacles
+      x = cosTheta * measurePoints[i].frontPos.x() - sinTheta * measurePoints[i].frontPos.y() + robotPose.x();
+      y = sinTheta * measurePoints[i].frontPos.x() + cosTheta * measurePoints[i].frontPos.y() + robotPose.y();
+      geometry_msgs::Point frontPos;
+      frontPos.x = x;
+      frontPos.y = y;
+
+      Eigen::Vector2i frontPixel = map_tools::toMapCoords(frontPos, m_Origin, m_Resolution);
+      frontOffset = frontPixel.x() + m_PixelSize*frontPixel.y();
+
+      if ( ( frontOffset >= unsigned ( m_ByteSize ) ) || ( m_MeasurementCount[frontOffset] == 0 ) )
+      {
+        continue;
+      }
+    }
+
+    lastOffset=hitOffset;
+    //fittingFactor += m_SmoothOccupancyProbability[ offset ];
+    fittingFactor += m_OccupancyProbability[ hitOffset ];
+  }
+  return fittingFactor;
+}
+
+
+template<class DataT>
+void OccupancyMap::drawLine ( DataT* data, Eigen::Vector2i& startPixel, Eigen::Vector2i& endPixel, char value )
+{
+
+  //bresenham algorithm
+  int xstart = startPixel.x();
+  int ystart = startPixel.y();
+  int xend = endPixel.x();
+  int yend = endPixel.y();
+
+  int x, y, t, dist, xerr, yerr, dx, dy, incx, incy;
+  // compute distances
+  dx = xend - xstart;
+  dy = yend - ystart;
+
+  // compute increment
+  if ( dx < 0 )
+  {
+    incx = -1;
+    dx = -dx;
+  }
+  else
+  {
+    incx = dx ? 1 : 0;
+  }
+
+  if ( dy < 0 )
+  {
+    incy = -1;
+    dy = -dy;
+  }
+  else
+  {
+    incy = dy ? 1 : 0;
+  }
+
+  // which distance is greater?
+  dist = ( dx > dy ) ? dx : dy;
+  // initializing
+  x = xstart;
+  y = ystart;
+  xerr = dx;
+  yerr = dy;
+
+  // compute cells
+  for ( t = 0; t < dist; t++ )
+  {
+    int index = x + m_PixelSize * y;
+    // set flag to free if no flag is set
+    // (do not overwrite occupied cells)
+    if(index < 0) continue;
+    if ( data[index] == NO_CHANGE )
+    {
+      data[index] = value;
+    }
+/*    if ( data[index] == OCCUPIED || data[index] == SAFETY_BORDER )
+    {
+      return;
+    }*/
+    xerr += dx;
+    yerr += dy;
+    if ( xerr > dist )
+    {
+      xerr -= dist;
+      x += incx;
+    }
+    if ( yerr > dist )
+    {
+      yerr -= dist;
+      y += incy;
+    }
+  }
+}
+
+
+void OccupancyMap::applyChanges()
+{
+  for ( int y = m_ChangedRegion.minY(); y <= m_ChangedRegion.maxY(); y++ )
+  {
+    int yOffset = m_PixelSize * y;
+    for ( int x = m_ChangedRegion.minX(); x <= m_ChangedRegion.maxX(); x++ )
+    {
+      int i = x + yOffset;
+      if ( ( m_CurrentChanges[i] == ::FREE || m_CurrentChanges[i] == ::OCCUPIED ) && m_MeasurementCount[i] < SHRT_MAX )
+      {
+        m_MeasurementCount[i]++;
+      }
+      if ( m_CurrentChanges[i] == ::OCCUPIED && m_OccupancyCount[i] < USHRT_MAX )
+      {
+        m_OccupancyCount[i]++;
+      }
+    }
+  }
+}
+
+void OccupancyMap::clearChanges()
+{
+  m_ChangedRegion.expand ( 2 );
+  m_ChangedRegion.clip ( Box2D<int> ( 0,0,m_PixelSize-1,m_PixelSize-1 ) );
+  for ( int y = m_ChangedRegion.minY(); y <= m_ChangedRegion.maxY(); y++ )
+  {
+    int yOffset = m_PixelSize * y;
+    for ( int x = m_ChangedRegion.minX(); x <= m_ChangedRegion.maxX(); x++ )
+    {
+      int i = x + yOffset;
+      m_CurrentChanges[i] = NO_CHANGE;
+    }
+  }
+  m_ChangedRegion=Box2D<int> ( m_PixelSize - 1, m_PixelSize - 1, 0, 0 );
+}
+
+void OccupancyMap::incrementMeasurementCount ( Eigen::Vector2i p )
+{
+  unsigned index = p.x() + m_PixelSize * p.y();
+  if ( index < m_ByteSize )
+  {
+    if ( m_CurrentChanges[index] == NO_CHANGE && m_MeasurementCount[index] < USHRT_MAX )
+    {
+      m_CurrentChanges[index] = ::FREE;
+      m_MeasurementCount[index]++;
+    }
+  }
+  else
+  {
+    ROS_ERROR( "Index out of bounds: x = %d, y = %d", p.x(), p.y() );
+  }
+}
+
+void OccupancyMap::incrementOccupancyCount ( Eigen::Vector2i p )
+{
+  int index = p.x() + m_PixelSize * p.y();
+  if ( ( m_CurrentChanges[index] == NO_CHANGE || m_CurrentChanges[index] == ::FREE ) && m_MeasurementCount[index] < USHRT_MAX )
+  {
+    m_CurrentChanges[index] = ::OCCUPIED;
+    m_OccupancyCount[index]++;
+  }
+}
+
+void OccupancyMap::scaleDownCounts ( int maxCount )
+{
+  clearChanges();
+  if ( maxCount <= 0 )
+  {
+    ROS_WARN("WARNING: argument maxCount is choosen to small, resetting map.");
+    memset ( m_MeasurementCount, 0, m_ByteSize );
+    memset ( m_OccupancyCount, 0, m_ByteSize );
+    memset ( m_InaccessibleCount, 0, m_ByteSize );
+  }
+  else
+  {
+    for ( unsigned i = 0; i < m_ByteSize; i++ )
+    {
+      int scalingFactor = m_MeasurementCount[i] / maxCount;
+      if ( scalingFactor != 0 )
+      {
+        m_MeasurementCount[i] /= scalingFactor;
+        m_OccupancyCount[i] /= scalingFactor;
+        m_InaccessibleCount[i] /= scalingFactor;
+      }
+      if ( m_InaccessibleCount[i] > maxCount )
+      {
+        m_InaccessibleCount[i] = maxCount;
+      }
+    }
+  }
+  maximizeChangedRegion();
+  applyChanges();
+  computeOccupancyProbabilities();
+}
+
+
+void OccupancyMap::markRobotPositionFree()
+{
+  geometry_msgs::Point point;
+  point.x = 0;
+  point.y = 0;
+  point.z = 0;
+  geometry_msgs::Point endPosWorld = map_tools::transformPoint(point, m_tfListener, "/base_link", "/map");
+  Eigen::Vector2i robotPixel = map_tools::toMapCoords(endPosWorld, m_Origin, m_Resolution);
+
+  int width = 0.3 / m_Resolution;
+  for ( int i = robotPixel.y() - width; i <= robotPixel.y() + width; i++ )
+  {
+    for ( int j = robotPixel.x() - width; j <= robotPixel.x() + width; j++ )
+    {
+      incrementMeasurementCount ( Eigen::Vector2i ( i, j ) );
+    }
+  }
+  Box2D<int> robotBox ( robotPixel.x()-width, robotPixel.y()-width, robotPixel.x() +width, robotPixel.y() +width );
+  m_ChangedRegion.enclose ( robotBox );
+  m_ExploredRegion.enclose ( robotBox );
+}
+
+
+QImage OccupancyMap::getProbabilityQImage ( int trancparencyThreshold, bool showInaccessible ) const
+{
+  QImage retImage ( m_PixelSize, m_PixelSize, QImage::Format_RGB32 );
+  for ( int y = 0; y < m_PixelSize; y++ )
+  {
+    for ( int x = 0; x < m_PixelSize; x++ )
+    {
+      int index = x + y * m_PixelSize;
+      int value = UNKNOWN;
+      if ( m_MeasurementCount[index] > 0 )
+      {
+        value = static_cast<int> ( ( 1.0 - m_OccupancyProbability[index] ) * 255 );
+        if ( m_MeasurementCount[index] < trancparencyThreshold )
+        {
+          value = static_cast<int> ( ( 0.75 + 0.025 * m_MeasurementCount[index] ) * ( 1.0 - m_OccupancyProbability[index] ) * 255 );
+        }
+      }
+      if ( showInaccessible && m_InaccessibleCount[index] >= 2 )
+      {
+        value = 0;
+      }
+      retImage.setPixel ( x, y, qRgb ( value, value, value ) );
+    }
+  }
+  return retImage;
+}
+
+void OccupancyMap::getOccupancyProbabilityImage ( vector<int8_t>& data, int& width, int& height, float& resolution )
+{
+  width = m_PixelSize;
+  height = m_PixelSize;
+  resolution = m_Resolution;
+  data.resize(m_PixelSize * m_PixelSize);
+  std::fill(data.begin(), data.end(), (int8_t)NOT_SEEN_YET); //note: linker error without strange cast from int8_t to int8_t
+  for ( int y = m_ExploredRegion.minY(); y <= m_ExploredRegion.maxY(); y++ )
+  {
+    int yOffset = m_PixelSize * y;
+    for ( int x = m_ExploredRegion.minX(); x <= m_ExploredRegion.maxX(); x++ )
+    {
+      int i = x + yOffset;
+      if ( m_MeasurementCount[i] < 1 )
+      {
+        continue;
+      }
+      // set inaccessible points to black
+      if ( m_InaccessibleCount[i] >= 2 )
+      {
+        data[i] = 99;
+        continue;
+      }
+      if(m_OccupancyProbability[i] == UNKNOWN_LIKELIHOOD)
+      {
+          data[i] = NOT_SEEN_YET;
+      }
+      else
+      {
+        data[i] = (int)(m_OccupancyProbability[i] * 99); //TODO maybe - 2 (or *0.99 or smth)
+      }
+    }
+  }
+}
+
+void OccupancyMap::maximizeChangedRegion()
+{
+  m_ChangedRegion=m_ExploredRegion;
+}
+
+void OccupancyMap::applyMasking(const nav_msgs::OccupancyGrid::ConstPtr &msg)
+{
+    if(msg->data.size() != m_ByteSize)
+    {
+        ROS_ERROR_STREAM("Size Mismatch between SLAM map (" << m_ByteSize << ") and masking map (" << msg->data.size() << ")");
+        return;
+    }
+    for(size_t y = 0; y < msg->info.height; y++)
+    {
+        int yOffset = msg->info.width * y;
+        for(size_t x = 0; x < msg->info.width; x++)
+        {
+            int i = yOffset + x;
+
+            switch(msg->data[i])
+            {
+            case homer_mapnav_msgs::ModifyMap::BLOCKED:
+            case homer_mapnav_msgs::ModifyMap::OBSTACLE:
+                //increase measure count of cells which were not yet visible to be able to modify unknown areas
+                if(m_MeasurementCount[i] == 0)
+                    m_MeasurementCount[i] = 10;
+
+                m_OccupancyCount[i] = m_MeasurementCount[i];
+                m_OccupancyProbability[i] = 1.0;
+                m_ExploredRegion.enclose(x, y);
+                break;
+            case homer_mapnav_msgs::ModifyMap::FREE:
+                //see comment above
+                if(m_MeasurementCount[i] == 0)
+                    m_MeasurementCount[i] = 10;
+
+                m_OccupancyCount[i] = 0;
+                m_OccupancyProbability[i] = 0.0;
+                m_ExploredRegion.enclose(x, y);
+                break;
+            case homer_mapnav_msgs::ModifyMap::HIGH_SENSITIV:
+            	m_HighSensitive[i] = 1;
+                break;
+            }
+        }
+    }
+}
+
+void OccupancyMap::cleanUp()
+{
+  if ( m_OccupancyProbability )
+  {
+    delete[] m_OccupancyProbability;
+  }
+  if ( m_MeasurementCount )
+  {
+    delete[] m_MeasurementCount;
+  }
+  if ( m_OccupancyCount )
+  {
+    delete[] m_OccupancyCount;
+  }
+  if ( m_CurrentChanges )
+  {
+    delete[] m_CurrentChanges;
+  }
+  if ( m_InaccessibleCount )
+  {
+    delete[] m_InaccessibleCount;
+  }
+  if ( m_HighSensitive ) 
+  {
+    delete[] m_HighSensitive;
+  }
+}
diff --git a/homer_mapping/src/OccupancyMap/OccupancyMap.h b/homer_mapping/src/OccupancyMap/OccupancyMap.h
new file mode 100644
index 0000000000000000000000000000000000000000..718b2dab1ebb42ea22a949aef0aa4f3e2c4e3002
--- /dev/null
+++ b/homer_mapping/src/OccupancyMap/OccupancyMap.h
@@ -0,0 +1,379 @@
+#ifndef OCCUPANCYMAP_H
+#define OCCUPANCYMAP_H
+
+#include <vector>
+#include <list>
+#include <string>
+#include <iostream>
+
+#include <Eigen/Geometry>
+
+#include "Math/Pose.h"
+#include "Math/Point2D.h"
+#include "Math/Box2D.h"
+
+#include "nav_msgs/OccupancyGrid.h"
+#include <tf/transform_listener.h>
+
+#include <sensor_msgs/LaserScan.h>
+
+class QImage;
+
+using namespace std;
+
+/**
+ * Structure to store the start and end point of each laser range in the current scan
+ * @param sensorPos position of the laser in the current scan (in base_link frame)
+ * @param endPos position of the end point of the laser frame in the current scan (in base_link frame)
+ * @param free indicates if the laser range hit an obstacle (false) or not (true)
+ */
+struct RangeMeasurement
+{
+  geometry_msgs::Point sensorPos;
+  geometry_msgs::Point endPos;
+  bool free;
+};
+
+/**
+ * Used in struct MeasurePoint to specify if a measurement point is at the border of a scan segment
+ */
+enum BorderType
+{
+  NoBorder,
+  LeftBorder,
+  RightBorder
+};
+
+/**
+ * Structure to store a measurement point for computeLaserScanProbability()
+ * @param hitPos Position of measured obstacle (robot coordinates)
+ * @param frontPos Position to check for NOT_KNOWN terrain
+ *                   This is needed to assure that front- and backside of obstacles can be distinguished
+ * @param border specifies if the measurement point is at the border of a scan segment
+ */
+struct MeasurePoint
+{
+  Point2D hitPos;
+  Point2D frontPos;
+  BorderType borderType;
+};
+
+/**
+ * @class OccupancyMap
+ *
+ * @author Malte Knauf, Stephan Wirth, Susanne Maur (RX), David Gossow (RX), Susanne Thierfelder (R16)
+ *
+ * @brief This class holds and manages an occupancy map.
+ *
+ * An occupancy map is a map where free space and occupied space are marked. This map stores values
+ * for free and occupied space in an (2D-)unsigned char array. This array can be seen as a graylevel image.
+ * The darker a cell, the higher the probability that this cell is occupied by an obstacle.
+ * The size of the map and the size of one cell can be defined in the setup file with the values
+ * MAP_SIZE and MAP_CELL_SIZE. The origin of the coordinate system of the map is the center of the array.
+ * The x-axis is heading front, the y-axis points to the left (like the robot's coordinate system).
+ * The mapping data has to be inserted via the method insertLaserData().
+ */
+class OccupancyMap {
+
+  public:
+    static const int8_t INACCESSIBLE = 100;
+    static const int8_t OBSTACLE = 99;
+    static const int8_t OCCUPIED = 98;
+    static const int8_t UNKNOWN = 50;
+    static const int8_t NOT_SEEN_YET = -1;
+    static const int8_t FREE = 0;
+
+    /**
+     * The default constructor calls initMembers().
+     */
+    OccupancyMap();
+
+    /**
+     * Constructor for a loaded map.
+     */
+    OccupancyMap(float*& occupancyProbability, geometry_msgs::Pose origin, float resolution, int pixelSize, Box2D<int> exploredRegion);
+
+    /**
+     * Copy constructor, copies all members inclusive the arrays that lie behind the pointers.
+     * @param occupancyMap Source for copying
+     */
+    OccupancyMap(const OccupancyMap& occupancyMap);
+
+    /**
+     * Method to init all members with default values from the configuration file. All arrays are initialized.
+     */
+    void initMembers();
+
+    /**
+     * Assignment operator, copies all members (deep copy!)
+     * @param source Source to copy from
+     * @return Reference to copied OccupancyMap
+     */
+    OccupancyMap& operator=(const OccupancyMap& source);
+
+    /**
+     * Deletes all dynamically allocated memory.
+     */
+    ~OccupancyMap();
+
+    /*
+    /**
+     * @return The resolution of the map in m.
+     */
+//    int resolution() const;
+
+    geometry_msgs::Pose origin() const;
+
+    /**
+     * @return Width of the map.
+     */
+    int width() const;
+
+    /**
+     * @return Height of the map.
+     */
+    int height() const;
+    
+    /**
+     * This method is used to reset all HighSensitive areas
+     */
+    void resetHighSensitive();
+
+    /**
+     * @return Probability of pixel p being occupied.
+     */
+    float getOccupancyProbability(Eigen::Vector2i p);
+
+    /**
+     * @brief This function inserts the data of a laserscan into the map.
+     *
+     * With the given data, start and end cells of a laser beam are computed and given to the
+     * method markLineFree().
+     * If the measurement is smaller than VALID_MAX_RANGE, markOccupied() is called for the endpoint.
+     * @param laserData The laser data msg.
+     */
+    void insertLaserData( sensor_msgs::LaserScanConstPtr laserData );
+
+    void insertRanges( vector<RangeMeasurement> ranges );
+
+    /**
+     * @brief gives a list specially processed coordinates to be used for computeLaserScanProbability
+     */
+    std::vector<MeasurePoint> getMeasurePoints( sensor_msgs::LaserScanConstPtr laserData );
+
+    /**
+     * This method computes a score that describes how good the given hypothesis matches with the map
+     * @param robotPose The pose of the robot
+     * @return The "fitting factor". The higher the factor, the better the fitting.
+     *         This factor is NOT normalized, it is a positive float between 0 and FLOAT_MAX
+     */
+    float computeScore( Pose robotPose, std::vector<MeasurePoint> measurePoints );
+
+    /**
+     * @return QImage of size m_PixelSize, m_PixelSize with values of m_OccupancyProbability scaled to 0-254
+     */
+    QImage getProbabilityQImage(int trancparencyThreshold, bool showInaccessible) const;
+
+    //puma2::ColorImageRGB8* getUpdateImage( bool withMap=true ); TODO
+
+    /**
+     * Returns an "image" of the obstacles e.g. seen in the 3D scans
+     * @returns image with dark red dots in areas where the obstacles were seen
+     */
+    //puma2::ColorImageRGB8* getObstacleImage ( ); TODO
+
+    /**
+     * Returns an "image" of occupancy probability image.
+     * @param[out] data vector containing occupancy probabilities. 0 = free, 100 = occupied, -1 = NOT_KNOWN
+     * @param[out] width Width of data array
+     * @param[out] height Height of data array
+     * @param[out] resolution Resolution of the map (m_Resolution)
+     */
+    void getOccupancyProbabilityImage(vector<int8_t> &data, int& width, int& height, float &resolution);
+
+    /**
+     * This method marks free the position of the robot (according to its dimensions).
+     */
+    void markRobotPositionFree();
+
+    /**
+     * @brief Computes the contrast of a single pixel.
+     * @param prob probability value (100=occupied, 50=NOT_KNOWN, 0=free) of a pixel.
+     * @return Contrast value from 0 (no contrast) to 1 (max. contrast) of this pixel
+     */
+    double contrastFromProbability (int8_t prob);
+
+    /**
+     * @brief This method computes the sharpness of the occupancy grid
+     * @return Contrast value from 0 (no contrast) to 1 (max. contrast) of the map
+     */
+    double evaluateByContrast();
+
+    /// GETTERS
+
+    Box2D<int> getExploredRegion() { return m_ExploredRegion; }
+    Box2D<int> getChangedRegion() { return m_ChangedRegion; }
+
+    /**
+     * Sets cells of this map to free or occupied according to maskMap
+     */
+     void applyMasking(const nav_msgs::OccupancyGrid::ConstPtr &msg);
+
+
+  protected:
+
+    /**
+     * This method increments m_MeasurementCount for pixel p.
+     * @param p Pixel that has been measured.
+     */
+    void incrementMeasurementCount(Eigen::Vector2i p);
+
+    /**
+     * This method increments the occupancy count int m_OccupancyCount for pixel p.
+     * @param p Occupied pixel.
+     */
+    void incrementOccupancyCount(Eigen::Vector2i p);
+
+    /**
+     * This method increments m_MeasurementCount and if neccessary m_OccupancyCount for all pixels.
+     */
+    void applyChanges();
+
+    void clearChanges();
+
+    /**
+     * This method scales the counts of all pixels down to the given value.
+     * @param maxCount Maximum value to which all counts are set.
+     */
+    void scaleDownCounts(int maxCount);
+
+   /**
+     * This function paints a line from a start pixel to an end pixel.
+     * The computation is made with the Bresenham algorithm.
+     * @param data array on which the line shall be painted
+     * @param startPixel starting coordinates of the beam
+     * @param endPixel ending coordinates of the beam
+     * @param value The value with which the lines are marked.
+     */
+    template<class DataT>
+    void drawLine(DataT* data, Eigen::Vector2i& startPixel, Eigen::Vector2i& endPixel, char value);
+
+    /**
+     * This method computes the values for m_OccupancyProbabilities from m_MeasurementCount and m_OccupancyCount.
+     */
+    void computeOccupancyProbabilities();
+
+    /**
+     * This method sets all values of m_CurrentChanges to NO_CHANGE.
+     */
+    void clearCurrentChanges();
+
+    /**
+     * This method resets all values of m_MinChangeX, m_MaxChangeX, m_MinChangeY and m_MaxChangeY.
+     * This means that no current changes are assumed.
+     */
+    void resetChangedRegion();
+
+    /**
+     * This method updates the values of m_MinChangeX, m_MaxChangeX, m_MinChangeY and m_MaxChangeY to current changes.
+     * The area around the current robot pose will be included to the changed region.
+     * @param robotPose The current pose of the robot.
+     */
+    void updateChangedRegion(Pose robotPose);
+
+    /**
+     * This method sets all values of m_MinChangeX, m_MaxChangeX, m_MinChangeY and m_MaxChangeY
+      * to initial values so that the complete map will be processed.
+     */
+    void maximizeChangedRegion();
+
+    /**
+     * This method resets all values of m_ExploredX, m_MaxExploredX, m_MinExploredY and m_MaxExploredY.
+     */
+    void resetExploredRegion();
+
+    /**
+     * Deletes all allocated members.
+     */
+     void cleanUp();
+
+    /**
+     * Stores the size of one map pixel in m.
+     */
+    float m_Resolution;
+
+    /**
+     * Stores the origin of the map
+     */
+    geometry_msgs::Pose m_Origin;
+    /**
+     * Stores the width of the map in cell numbers.
+     */
+    int m_PixelSize;
+
+    /**
+     * Stores the size of the map arrays, i.e. m_PixelSize * m_PixelSize
+     * for faster computation.
+     */
+    unsigned m_ByteSize;
+
+    /**
+     * Array to store occupancy probability values.
+     * Values between 0 and 1.
+     */
+    float* m_OccupancyProbability;
+
+    // Counts how often a pixel is hit by a measurement.
+    unsigned short* m_MeasurementCount;
+
+    // Counts how often a pixel is hit by a measurement that says the pixel is occupied.
+    unsigned short* m_OccupancyCount;
+
+    // Counts how often a cell is marked as inaccessible via markInaccessible()
+    unsigned char* m_InaccessibleCount;
+
+    // Used for setting flags for cells, that have been modified during the current update.
+    unsigned char* m_CurrentChanges;
+    
+    // Used for high Sensitive areas
+    unsigned short* m_HighSensitive;
+
+    /**
+     * Store values from config files.
+     */
+    // maximum valid range of one laser measurement
+    float m_LaserMaxRange;
+    //minimum valid range of one laser measurement
+    float m_LaserMinRange;
+    //minimum range classified as free in case of errorneous laser measurement
+    float m_FreeReadingDistance;
+    //enables checking to avoid matching front- and backside of an obstacle, e.g. wall
+    bool m_BacksideChecking;
+    //leaves a small border around obstacles unchanged when inserting a laser scan
+    bool m_ObstacleBorders;
+    //minimum distance in m between two samples for probability calculation
+    float m_MeasureSamplingStep;
+    
+    //bool to reset high_sensitive Areas on the next iteration
+    bool m_reset_high;
+
+    //position of the laser scaner in base_link frame
+    geometry_msgs::Point m_LaserPos;
+
+    /**
+     * Defines a bounding box around the changes in the current map.
+     */
+    Box2D<int> m_ChangedRegion;
+
+    /**
+     * Defines a bounding box around the area in the map, which is already explored.
+     */
+    Box2D<int> m_ExploredRegion;
+
+    /**
+     * ros transform listener
+     */
+    tf::TransformListener m_tfListener;
+
+};
+#endif
diff --git a/homer_mapping/src/ParticleFilter/CMakeLists.txt b/homer_mapping/src/ParticleFilter/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b144c3d030dbf1e8061528266dbfb4a1aa582fc0
--- /dev/null
+++ b/homer_mapping/src/ParticleFilter/CMakeLists.txt
@@ -0,0 +1,18 @@
+set(
+	ParticleFilter_SRC
+		HyperSlamFilter.cpp
+		SlamParticle.cpp
+		SlamFilter.cpp
+		Particle.cpp
+)
+
+add_library(
+	ParticleFilter
+		${ParticleFilter_SRC}
+)
+
+target_link_libraries(
+	ParticleFilter
+		OccupancyMap
+		${homer_nav_libs_LIBRARIES}
+)
diff --git a/homer_mapping/src/ParticleFilter/HyperSlamFilter.cpp b/homer_mapping/src/ParticleFilter/HyperSlamFilter.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..cd005dbd3b597b41e5b8594d7b938f5abe1219e8
--- /dev/null
+++ b/homer_mapping/src/ParticleFilter/HyperSlamFilter.cpp
@@ -0,0 +1,191 @@
+#include "HyperSlamFilter.h"
+
+#include <vector>
+#include <cmath>
+#include <fstream>
+#include <sstream>
+#include <stdlib.h>
+
+#include "ros/ros.h"
+
+using namespace std;
+
+HyperSlamFilter::HyperSlamFilter (int particleFilterNum, int particleNum )
+{
+  m_ParticleFilterNum = particleFilterNum;
+        if ( m_ParticleFilterNum < 1 )
+        {
+                m_ParticleFilterNum = 1;
+        }
+  ROS_DEBUG( "Using %d Hyper Particles.", particleFilterNum);
+
+  m_ParticleNum = particleNum;
+
+        m_DoMapping = true;
+
+  m_DeletionThreshold = 0.98;
+
+  for ( unsigned i=0; i < m_ParticleFilterNum; i++ )
+  {
+    ostringstream stream;
+    stream << "SlamFilter " << i;
+    SlamFilter *slamFilter = new SlamFilter ( particleNum );
+    m_SlamFilters.push_back ( slamFilter );
+  }
+
+  m_BestSlamFilter = m_SlamFilters[0];
+}
+
+HyperSlamFilter::~HyperSlamFilter()
+{
+  for (unsigned i = 0; i < m_ParticleFilterNum; i++)
+  {
+    if( m_SlamFilters[i] )
+    {
+      delete m_SlamFilters[i];
+      m_SlamFilters[i] = 0;
+    }
+  }
+
+}
+
+void HyperSlamFilter::setRotationErrorRotating ( float percent )
+{
+   for ( unsigned i=0; i < m_SlamFilters.size(); i++ )
+   {
+     m_SlamFilters[i]->setRotationErrorRotating(percent / 100.0);
+   }
+}
+
+void HyperSlamFilter::setRotationErrorTranslating ( float degreePerMeter )
+{
+  for ( unsigned int i=0; i < m_SlamFilters.size(); i++ )
+  {
+    m_SlamFilters[i]->setRotationErrorTranslating(degreePerMeter / 180.0 * M_PI);
+  }
+}
+
+void HyperSlamFilter::setTranslationErrorTranslating ( float percent )
+{
+  for ( unsigned int i=0; i < m_SlamFilters.size(); i++ )
+  {
+    m_SlamFilters[i]->setTranslationErrorTranslating(percent / 100.0);
+  }
+}
+
+void HyperSlamFilter::setTranslationErrorRotating ( float mPerDegree )
+{
+  for ( unsigned int i=0; i < m_SlamFilters.size(); i++ )
+  {
+    m_SlamFilters[i]->setTranslationErrorRotating( mPerDegree / 180.0 * M_PI );
+  }
+}
+
+void HyperSlamFilter::setMoveJitterWhileTurning ( float mPerDegree )
+{
+  for ( unsigned int i=0; i < m_SlamFilters.size(); i++ )
+  {
+    m_SlamFilters[i]->setMoveJitterWhileTurning( mPerDegree / 180.0 * M_PI );
+  }
+}
+
+void HyperSlamFilter::setScanMatchingClusterSize ( float minClusterSize )
+{
+  for ( unsigned int i=0; i < m_SlamFilters.size(); i++ )
+  {
+    m_SlamFilters[i]->setScanMatchingClusterSize( minClusterSize );
+  }
+}
+
+void HyperSlamFilter::resetHigh()
+{
+  for ( unsigned int i=0; i < m_SlamFilters.size(); i++ )
+  {
+    m_SlamFilters[i]->resetHigh();
+  }
+}
+
+void HyperSlamFilter::setMapping ( bool doMapping )
+{
+        m_DoMapping = doMapping;
+}
+
+void HyperSlamFilter:: setOccupancyMap ( OccupancyMap* occupancyMap )
+{
+  for ( unsigned int i=0; i < m_SlamFilters.size(); i++ )
+  {
+    m_SlamFilters[i]->setOccupancyMap( occupancyMap );
+  }
+}
+
+void HyperSlamFilter::setRobotPose ( Pose pose, double scatterVarXY, double scatterVarTheta )
+{
+  for ( unsigned int i=0; i < m_SlamFilters.size(); i++ )
+  {
+    m_SlamFilters[i]->setRobotPose(pose, scatterVarXY, scatterVarTheta);
+  }
+}
+
+void HyperSlamFilter::filter ( Pose currentPose, sensor_msgs::LaserScanConstPtr laserData, ros::Time measurementTime, ros::Duration &filterDuration)
+{
+  //call filter methods of all particle filters
+  for ( unsigned int i=0; i < m_SlamFilters.size(); i++ )
+  {
+    bool randOnOff = (rand() % 100) < 80;
+    //if mapping is on, switch on with 80% probability to introduce some randomness in different particle filters
+    m_SlamFilters[i]->setMapping( m_DoMapping && randOnOff );
+    m_SlamFilters[i]->filter(currentPose, laserData, measurementTime, filterDuration);
+  }
+
+  //determine which map has the best/worst contrast
+  double bestContrast = 0.0;
+  static unsigned int bestFilter = 0;
+  double worstContrast = 100.0;
+  static unsigned int worstFilter = 0;
+
+  for ( unsigned int i=0; i < m_SlamFilters.size(); i++ )
+  {
+    double contrast = m_SlamFilters[i]->evaluateByContrast();
+                {
+                        if( contrast > bestContrast )
+                        {
+                                bestContrast = contrast;
+                                bestFilter = i;
+                        }
+                        if ( contrast < worstContrast )
+                        {
+                                worstContrast = contrast;
+                                worstFilter = i;
+                        }
+                }
+  }
+
+  // set best filter
+        SlamFilter* lastBestFilter = m_BestSlamFilter;
+  m_BestSlamFilter = m_SlamFilters[bestFilter];
+
+  if ( m_BestSlamFilter != lastBestFilter )
+  {
+    ROS_INFO( "Switched to best filter %d (bestContrast: %f) -- the worst filter is %d (worstContrast: %f)", bestFilter, bestContrast, worstFilter, worstContrast); //TODO
+  }
+
+  if ( bestFilter != worstFilter )
+  {
+    if ( worstContrast < ( bestContrast * m_DeletionThreshold ) )
+    {
+      // replace the worst filter by the one with the best contrast
+      delete m_SlamFilters[worstFilter];
+      m_SlamFilters[worstFilter] = new SlamFilter ( * m_SlamFilters [bestFilter] );
+    }
+  }
+}
+
+SlamFilter* HyperSlamFilter::getBestSlamFilter()
+{
+  return m_BestSlamFilter;
+}
+
+void HyperSlamFilter::setDeletionThreshold(double deletionThreshold)
+{
+  m_DeletionThreshold = deletionThreshold;
+}
diff --git a/homer_mapping/src/ParticleFilter/HyperSlamFilter.h b/homer_mapping/src/ParticleFilter/HyperSlamFilter.h
new file mode 100755
index 0000000000000000000000000000000000000000..d02c2b6d23274eb95e2b21f0818585cd650227ca
--- /dev/null
+++ b/homer_mapping/src/ParticleFilter/HyperSlamFilter.h
@@ -0,0 +1,163 @@
+#ifndef HYPERSLAMFILTER_H
+#define HYPERSLAMFILTER_H
+
+#include <vector>
+#include "ParticleFilter.h"
+#include "SlamParticle.h"
+#include "SlamFilter.h"
+#include "Math/Pose.h"
+#include "../OccupancyMap/OccupancyMap.h"
+
+#include "sensor_msgs/LaserScan.h"
+
+class OccupancyMap;
+
+/**
+ * @class HyperSlamFilter
+ *
+ * @author Malte Knauf, Stephan Wirth, Susanne Maur
+ *
+ * @brief This class is used to determine the robot's most likely pose with given map and given laser data.
+ *
+ * A particle filter is a descrete method to describe and compute with a probability distribution.
+ * This particle filter uses an occupancy map to determine the probability of robot states.
+ * The robot states are stored in a particle together with their weight @see SlamParticle.
+ *
+ * @see SlamParticle
+ * @see ParticleFilter
+ * @see OccupancyMap
+ */
+class HyperSlamFilter {
+
+  public:
+
+   /**
+     * This constructor initializes the random number generator and sets the member variables to the given values.
+     * @param particleNum Number of particleFilters to use.
+     */
+    HyperSlamFilter(int particleFilterNum, int particleNum);
+
+    /**
+     * The destructor releases the OccupancyMap and the particles.
+     */
+    ~HyperSlamFilter();
+
+    /**
+     * This method runs the filter routine.
+     * The given odometry measurement is used as movement hypothesis, the laserData-vector is used
+     * as measurement and is used to weight the particles.
+     * @param currentPoseOdometry Odometry data of time t.
+     * @param laserData msg containing the laser measurement.
+     * @param measurementTime Time stamp of the measurement.
+     * @param filterDurationTime Returns the time in ms that the filtering needed
+     */
+    void filter(Pose currentPoseOdometry, sensor_msgs::LaserScanConstPtr laserData, ros::Time measurementTime,
+                ros::Duration  &filterDuration);
+
+    /**
+     * Computes and sets the new value for m_Alpha1.
+     * @param percent Rotation error while rotating (see class constructor for details)
+     */
+    void setRotationErrorRotating(float percent);
+
+    /**
+     * Computes and sets the new value for m_Alpha2.
+     * @param degreesPerMeter Rotation error while translating (see class constructor for details)
+     */
+    void setRotationErrorTranslating(float degreesPerMeter);
+
+    /**
+     * Computes and sets the new value for m_Alpha3.
+     * @param percent Translation error while translating (see class constructor for details)
+     */
+    void setTranslationErrorTranslating(float percent);
+
+    /**
+     * Computes and sets the new value for m_Alpha4.
+     * @param  mPerDegree Translation error while rotating (see class constructor for details)
+     */
+    void setTranslationErrorRotating(float mPerDegree);
+
+    /**
+     * Computes and sets the new value for m_Alpha5.
+     * @param  mPerDegree Move jitter while turning (see class constructor for details)
+     */
+    void setMoveJitterWhileTurning(float mPerDegree);
+
+    /**
+     * Sets a new minimal size of a cluster of scan points which is considered in scan matching.
+     * @param  clusterSize Minimal size of a cluster in mm of scan points which is considered in scan matching.
+     */
+    void setScanMatchingClusterSize(float clusterSize);
+
+    /**
+     * Sets whether the map is updated or just used for self-localization.
+     * @param doMapping True if robot shall do mapping, false otherwise.
+     */
+    void setMapping(bool doMapping);
+
+    /**
+     * Deletes the current occupancy map and copies a new one into the system.
+     * @param occupancyMap The occupancy map to load into the system (copies are being made)
+     */
+    void setOccupancyMap(OccupancyMap* occupancyMap);
+
+    /**
+     * Sets the robot pose in the current occupancy map.
+     * @param Robot pose.
+     * @param scatterVariance if not equal to 0 the poses are equally scattered around the pose
+     */
+    void setRobotPose(Pose pose, double scatterVarXY=0.0, double scatterVarTheta=0.0);
+
+    /**
+     *Returns the best SlamFilter
+     */
+    SlamFilter* getBestSlamFilter();
+    
+    void resetHigh();
+
+    /**
+     * Factor (default 0.98) of the contrast of the best particle.
+     * If the contrast of the worst particle is below this threshold
+     * it will be replaced by the best particle
+     * @param deletionThreshold see above
+     */
+    void setDeletionThreshold(double deletionThreshold);
+
+    /**
+     * applies masking to map of slam filter set in GUI
+     * @param msg masking message received from GUI
+     */
+    void applyMasking(const nav_msgs::OccupancyGrid::ConstPtr &msg)
+    {
+        for(unsigned i = 0; i < m_ParticleFilterNum; ++i)
+        {
+            m_SlamFilters[i]->applyMasking(msg);
+        }
+    }
+
+  private:
+
+    /** Used SlamFilters */
+    std::vector <SlamFilter*> m_SlamFilters;
+
+    /** Number of SlamFilters */
+    unsigned m_ParticleFilterNum;
+
+    /** Number of Particles of SlamFilter */
+    unsigned m_ParticleNum;
+
+    /** */
+    double m_DeletionThreshold;
+
+    /** Best SLAM Filter */
+    SlamFilter* m_BestSlamFilter;
+
+    /** Worst SlamFilter */
+    SlamFilter* m_WorstSlamFilter;
+
+    bool m_DoMapping;
+
+};
+#endif
+
diff --git a/homer_mapping/src/ParticleFilter/Particle.cpp b/homer_mapping/src/ParticleFilter/Particle.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bce3b5b1a07ed91f6003bf463bf0d2915aef85f9
--- /dev/null
+++ b/homer_mapping/src/ParticleFilter/Particle.cpp
@@ -0,0 +1,10 @@
+#include "Particle.h"
+
+Particle::Particle(float weight, int id) {
+  m_Weight = weight;
+  m_Id = id;
+}
+
+Particle::~Particle() {
+}
+
diff --git a/homer_mapping/src/ParticleFilter/Particle.h b/homer_mapping/src/ParticleFilter/Particle.h
new file mode 100644
index 0000000000000000000000000000000000000000..bd96aa857da906c16c47914e38c7bbe000178e2b
--- /dev/null
+++ b/homer_mapping/src/ParticleFilter/Particle.h
@@ -0,0 +1,64 @@
+#ifndef PARTICLE_H
+#define PARTICLE_H  
+
+#include <iostream>
+#include <fstream>
+
+/** 
+ * @class Particle
+ *
+ * @author Malte Knauf, Stephan Wirth
+ *
+ * @brief This class is an implementation of a "particle".
+ *
+ * A particle as it is used in particle filters is a set of one state and one importance factor (=weight).
+ * A set of Particles is a discrete representation of a probability distribution.
+ * 
+ * @see ParticleFilter
+ */
+class Particle {
+    
+  public:
+    /**
+     * This constructor assigns the given weight to the member m_Weight.
+     * @param weight The weight of the particle.
+     */
+    Particle(float weight = 0.0, int id = 0);
+
+    /**
+     * The destructor does nothing so far.
+     */
+    virtual ~Particle();
+
+    /**
+     * This method returns the importance factor of the particle.
+     * @return The importance factor (=weight) of the particle.
+     */
+    inline float getWeight() const { return m_Weight; }
+
+    /**
+     * Method to set the weight of the particle.
+     * @param newWeight New weight for the particle.
+     */
+    inline void setWeight(float newWeight) { m_Weight=newWeight; }
+
+    /**
+     * @return id of the particle that is stored in m_Id
+     */
+    inline int getId() { return m_Id; }
+
+  private:
+    /**
+     * Stores the importance factor (=weight) of the particle. This should be a value between 0 and 1.
+     */
+    float m_Weight;
+
+    /**
+     * Stores the id of the particle (for testing purpose)
+     */
+    int m_Id;
+
+};
+
+#endif
+
diff --git a/homer_mapping/src/ParticleFilter/ParticleFilter.h b/homer_mapping/src/ParticleFilter/ParticleFilter.h
new file mode 100644
index 0000000000000000000000000000000000000000..fa6a7f996c7afa158b0d45be40d01f679aed3f11
--- /dev/null
+++ b/homer_mapping/src/ParticleFilter/ParticleFilter.h
@@ -0,0 +1,310 @@
+#ifndef PARTICLEFILTER_H
+#define PARTICLEFILTER_H
+
+#include <iostream>
+#include <cmath>
+#include <limits.h>
+
+#include <ros/ros.h>
+
+class Particle;
+
+const float MIN_EFFECTIVE_PARTICLE_WEIGHT = 0.2;
+
+/**
+ * @class ParticleFilter
+ *
+ * @author Malte Knauf, Stephan Wirth
+ *
+ * @brief This class is a template class for a particle filter.
+ *
+ * A particle filter is a descrete method to describe and compute with a probability distribution.
+ * This template class implements the basic methods for a particle filter: sort() and resample().
+ * Use this class do derivate your custom particle filter from it. Use a self-defined subclass of
+ * Particle as ParticleType.
+ *
+ * @see Particle
+ */
+template <class ParticleType>
+class ParticleFilter {
+
+  public:
+    /**
+     * The constructor initializes the random number generator and allocates the memory for the particle lists.
+     * The lists will have particleNum elements.
+     * @param particleNum Number of particles for the filter.
+     */
+    ParticleFilter<ParticleType>(int particleNum);
+
+    /**
+     * The destructor releases the particle lists.
+     */
+    virtual ~ParticleFilter();
+
+    /**
+     * @return Number of particles used in this filter
+     */
+    int getParticleNum();
+
+    /**
+     * @return The number of effective particles (according to "Improving Grid-based SLAM with Rao-Blackwellized Particle
+     * Filters by Adaptive Proposals and Selective Resampling (2005)" by Giorgio Grisetti, Cyrill Stachniss, Wolfram Burgard
+     */
+    int getEffectiveParticleNum() const;
+    int getEffectiveParticleNum2() const;
+
+    /**
+     * @return Pointer to the particle that has the highest weight.
+     */
+    ParticleType* getBestParticle() const;
+
+
+  protected:
+
+    /**
+     * This method generates a random variable in the interval [0,1].
+     * @param init The initial value for the static random base number. When running the constructor of this
+     * class, this method is run once with the C-function time() as parameter to initialize it.
+     * Then you should use it without parameter.
+     * @return Random value between 0 and 1
+     */
+    double random01(unsigned long init = 0) const;
+
+    /**
+     * This method sorts the particles in m_CurrentList from leftIndex to rightIndex according to their weight.
+     * The particle with the highest weight is at position 0 after calling this function. The algorithm used here is
+     * known as quicksort and works recursively.
+     * @param leftIndex Left index of area to sort
+     * @param rightIndex Right index of area to sort
+     */
+    void sort(int leftIndex, int rightIndex);
+
+    /**
+     * This method normalizes the weights of the particles. After calling this function, the sum of the weights of
+     * all particles in m_CurrentList equals 1.0.
+     * In this function the sum of all weights of the particles of m_CurrentList is computed and each weight of each
+     * particle is devided through this sum.
+     */
+    void normalize();
+
+    /**
+     * This method selects a new set of particles out of an old set according to their weight
+     * (importance resampling). The particles from the list m_CurrentList points to are used as source,
+     * m_LastList points to the destination list. The pointers m_CurrentList and m_LastList are switched.
+     * The higher the weight of a particle, the more particles are drawn (copied) from this particle.
+     * The weight remains untouched, because measure() will be called afterwards.
+     * This method only works on a sorted m_CurrentList, therefore sort() is called first.
+     */
+    void resample();
+
+    /**
+     * This method drifts the particles (second step of a filter process).
+     * Has to be implemented in sub-classes (pure virtual function).
+     */
+    virtual void drift() = 0;
+
+    /**
+     * This method has to be implemented in sub-classes. It is used to determine the weight of each particle.
+     */
+    virtual void measure() = 0;
+
+    /**
+     * These two pointers point to m_ParticleListOne and to m_ParticleListTwo.
+     * The particles are drawn from m_LastList to m_CurrentList to avoid new and delete commands.
+     * In each run, the pointers are switched in resample().
+     */
+    ParticleType** m_CurrentList;
+    ParticleType** m_LastList;
+
+    /**
+     * Stores the number of particles.
+     */
+    int m_ParticleNum;
+
+    /**
+     * Stores the number of effective particles.
+     */
+    int m_EffectiveParticleNum;
+};
+
+template <class ParticleType>
+ParticleFilter<ParticleType>::ParticleFilter(int particleNum) {
+  // initialize particle lists
+  m_CurrentList = new ParticleType*[particleNum];
+  m_LastList = new ParticleType*[particleNum];
+
+  // initialize random number generator
+  random01(time(0));
+
+  m_ParticleNum = particleNum;
+}
+
+
+template <class ParticleType>
+ParticleFilter<ParticleType>::~ParticleFilter() {
+  if (m_CurrentList) {
+    delete[] m_CurrentList;
+    m_CurrentList = 0;
+  }
+  if (m_LastList) {
+    delete[] m_LastList;
+    m_LastList = 0;
+  }
+}
+
+template <class ParticleType>
+int ParticleFilter<ParticleType>::getParticleNum() {
+  return m_ParticleNum;
+}
+
+template <class ParticleType>
+double ParticleFilter<ParticleType>::random01(unsigned long init) const {
+  static unsigned long n;
+  if (init > 0) {
+    n = init;
+  }
+  n = 1664525 * n + 1013904223;
+  // create double from unsigned long
+  return (double)(n/2) / (double)LONG_MAX;
+}
+
+
+template <class ParticleType>
+void ParticleFilter<ParticleType>::sort(int indexLeft, int indexRight) {
+
+  // SOMETHING LEFT TO SORT?
+  if (indexLeft >= indexRight) {
+    // ready!
+    return;
+  }
+
+  // CREATE PARTITION
+  int le = indexLeft;
+  int ri = indexRight;
+  int first = le;
+  int pivot = ri--;
+  while(le <= ri) {
+    // skip from left
+    while(m_CurrentList[le]->getWeight() > m_CurrentList[pivot]->getWeight()) {
+      le++;
+    }
+    // skip from right
+    while((ri >= first) && (m_CurrentList[ri]->getWeight() <= m_CurrentList[pivot]->getWeight())) {
+      ri--;
+    }
+    // now we have two elements to swap
+    if(le < ri) {
+      // swap
+      ParticleType* temp = m_CurrentList[le];
+      m_CurrentList[le] = m_CurrentList[ri];
+      m_CurrentList[ri] = temp;
+      le++;
+    }
+  }
+
+  if(le != pivot) {
+    // swap
+    ParticleType* temp = m_CurrentList[le];
+    m_CurrentList[le] = m_CurrentList[pivot];
+    m_CurrentList[pivot] = temp;
+  }
+
+  // sort left side
+  sort(indexLeft, le - 1);
+  // sort right side
+  sort(le + 1, indexRight);
+
+}
+
+template <class ParticleType>
+void ParticleFilter<ParticleType>::normalize() {
+
+  float weightSum = 0.0;
+  for (int i = 0; i < m_ParticleNum; i++) {
+    weightSum += m_CurrentList[i]->getWeight();
+  }
+  // only normalize if weightSum is big enough to divide
+  if (weightSum > 0.000001) {
+    for (int i = 0; i < m_ParticleNum; i++) {
+      float newWeight = m_CurrentList[i]->getWeight() / weightSum;
+      m_CurrentList[i]->setWeight(newWeight);
+    }
+  } else {
+      ROS_WARN_STREAM( "Particle weights VERY small: " << weightSum << ". Got "<< m_ParticleNum << " particles.");
+  }
+}
+
+template <class ParticleType>
+void ParticleFilter<ParticleType>::resample() 
+{
+    // swap pointers
+    ParticleType** help = m_LastList;
+    m_LastList = m_CurrentList;
+    m_CurrentList = help;
+    // now we copy from m_LastList to m_CurrentList
+
+    int drawIndex = 0;
+    // index of the particle where we are drawing to
+    int targetIndex = 0;
+
+    int numToDraw = 0;
+    do {
+      numToDraw = static_cast<int>(round((m_ParticleNum * m_LastList[drawIndex]->getWeight()) + 0.5));
+      for (int i = 0; i < numToDraw; i++) {
+        *m_CurrentList[targetIndex++] = *m_LastList[drawIndex];
+        // don't draw too much
+        if (targetIndex >= m_ParticleNum) {
+          break;
+        }
+      }
+      drawIndex++;
+    } while (numToDraw > 0 && targetIndex < m_ParticleNum);
+
+    // fill the rest of the particle list
+    for (int i = targetIndex; i < m_ParticleNum; i++) {
+      float particlePos = random01();
+      float weightSum = 0.0;
+      drawIndex = 0;
+      weightSum += m_LastList[drawIndex]->getWeight();
+      while (weightSum < particlePos) {
+        weightSum += m_LastList[++drawIndex]->getWeight();
+      }
+      *m_CurrentList[i] = *m_LastList[drawIndex];
+    }
+}
+
+
+template <class ParticleType>
+int ParticleFilter<ParticleType>::getEffectiveParticleNum() const {
+  // does not work with normalized particle weights
+  // does not work with our weights at all (algorithm of Grisetti)
+  float squareSum = 0;
+  for (int i = 0; i < m_ParticleNum; i++) {
+    float weight = m_CurrentList[i]->getWeight();
+    squareSum += weight * weight;
+  }
+  return static_cast<int>(1.0f / squareSum);
+}
+
+
+template <class ParticleType>
+int ParticleFilter<ParticleType>::getEffectiveParticleNum2() const {
+    // does not work with normalized particle weights
+  int effectiveParticleNum = 0;
+  for (int i = 0; i < m_ParticleNum; i++) {
+    if (m_CurrentList[i]->getWeight() > MIN_EFFECTIVE_PARTICLE_WEIGHT) {
+      effectiveParticleNum ++;
+    }
+  }
+  return effectiveParticleNum;
+}
+
+
+template <class ParticleType>
+ParticleType* ParticleFilter<ParticleType>::getBestParticle() const {
+  return m_CurrentList[0];
+}
+
+
+#endif
+
diff --git a/homer_mapping/src/ParticleFilter/SlamFilter.cpp b/homer_mapping/src/ParticleFilter/SlamFilter.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2ebdbd16beb072f34101f9d82564c96c875e9667
--- /dev/null
+++ b/homer_mapping/src/ParticleFilter/SlamFilter.cpp
@@ -0,0 +1,653 @@
+#include "SlamFilter.h"
+
+#include "Math/Transformation2D.h"
+#include "Math/Math.h"
+
+#include "tools/loadRosConfig.h"
+
+#include "tf/transform_broadcaster.h"
+
+#include <vector>
+#include <cmath>
+#include <fstream>
+#include <sstream>
+
+#include "ros/ros.h"
+
+// minimum move for translation in m
+const float MIN_MOVE_DISTANCE2 = 0.02 * 0.02;
+// minimum turn in radiants
+const float MIN_TURN_DISTANCE2 = 0.1 * 0.1;
+
+const float M_2PI = 2 * M_PI;
+
+SlamFilter::SlamFilter ( int particleNum ) : ParticleFilter<SlamParticle> ( particleNum )
+{
+
+  m_OccupancyMap = new OccupancyMap();
+  // generate initial particles
+  for ( int i = 0; i < m_ParticleNum; i++ )
+  {
+    m_CurrentList[i] = new SlamParticle();
+    m_LastList[i] = new SlamParticle();
+  }
+
+  float rotationErrorRotating = 0.0;
+  loadConfigValue("/particlefilter/error_values/rotation_error_rotating", rotationErrorRotating);
+  float rotationErrorTranslating = 0.0;
+  loadConfigValue("/particlefilter/error_values/rotation_error_translating", rotationErrorTranslating);
+  float translationErrorTranslating = 0.0;
+  loadConfigValue("/particlefilter/error_values/translation_error_translating", translationErrorTranslating);
+  float translationErrorRotating = 0.0;
+  loadConfigValue("/particlefilter/error_values/translation_error_translating", translationErrorRotating);
+  float moveJitterWhileTurning = 0.0;
+  loadConfigValue("/particlefilter/error_values/move_jitter_while_turning", moveJitterWhileTurning);
+  loadConfigValue("/particlefilter/max_rotation_per_second", m_MaxRotationPerSecond);
+
+  int updateMinMoveAngleDegrees;
+  loadConfigValue("/particlefilter/update_min_move_angle", updateMinMoveAngleDegrees);
+  m_UpdateMinMoveAngle = Math::deg2Rad(updateMinMoveAngleDegrees);
+  loadConfigValue("/particlefilter/update_min_move_dist", m_UpdateMinMoveDistance);
+  double maxUpdateInterval;
+  loadConfigValue("/particlefilter/max_update_interval", maxUpdateInterval);
+  m_MaxUpdateInterval = ros::Duration(maxUpdateInterval);
+
+  setRotationErrorRotating ( rotationErrorRotating );
+  setRotationErrorTranslating ( rotationErrorTranslating );
+  setTranslationErrorTranslating ( translationErrorTranslating );
+  setTranslationErrorRotating ( translationErrorRotating );
+  setMoveJitterWhileTurning ( moveJitterWhileTurning );
+
+  m_FirstRun = true;
+  m_DoMapping = true;
+
+  m_EffectiveParticleNum = m_ParticleNum;
+
+  m_LastUpdateTime = ros::Time(0);
+}
+
+SlamFilter::SlamFilter ( SlamFilter& slamFilter ) : ParticleFilter<SlamParticle> ( slamFilter.m_ParticleNum )
+{
+  m_OccupancyMap = new OccupancyMap ( * ( slamFilter.m_OccupancyMap ) );
+  // generate initial particles
+  for ( int i = 0; i < m_ParticleNum; i++ )
+  {
+    if ( slamFilter.m_CurrentList[i] == 0 )
+    {
+      m_CurrentList[i]=0;
+    }
+    else
+    {
+      m_CurrentList[i] = new SlamParticle ( * ( slamFilter.m_CurrentList[i] ) );
+    }
+    if ( slamFilter.m_LastList[i] == 0 )
+    {
+      m_LastList[i]=0;
+    }
+    else
+    {
+      m_LastList[i] = new SlamParticle ( * ( slamFilter.m_LastList[i] ) );
+    }
+  }
+
+  float rotationErrorRotating = 0.0;
+  loadConfigValue("/particlefilter/error_values/rotation_error_rotating", rotationErrorRotating);
+  float rotationErrorTranslating = 0.0;
+  loadConfigValue("/particlefilter/error_values/rotation_error_translating", rotationErrorTranslating);
+  float translationErrorTranslating = 0.0;
+  loadConfigValue("/particlefilter/error_values/translation_error_translating", translationErrorTranslating);
+  float translationErrorRotating = 0.0;
+  loadConfigValue("/particlefilter/error_values/translation_error_translating", translationErrorRotating);
+  float moveJitterWhileTurning = 0.0;
+  loadConfigValue("/particlefilter/error_values/move_jitter_while_turning", moveJitterWhileTurning);
+  loadConfigValue("/particlefilter/max_rotation_per_second", m_MaxRotationPerSecond);
+
+  int updateMinMoveAngleDegrees;
+  loadConfigValue("/particlefilter/update_min_move_angle", updateMinMoveAngleDegrees);
+  m_UpdateMinMoveAngle = Math::deg2Rad(updateMinMoveAngleDegrees);
+  loadConfigValue("/particlefilter/update_min_move_dist", m_UpdateMinMoveDistance);
+  double maxUpdateInterval;
+  loadConfigValue("/particlefilter/max_update_interval", maxUpdateInterval);
+  m_MaxUpdateInterval = ros::Duration(maxUpdateInterval);
+
+  setRotationErrorRotating ( rotationErrorRotating );
+  setRotationErrorTranslating ( rotationErrorTranslating );
+  setTranslationErrorTranslating ( translationErrorTranslating );
+  setTranslationErrorRotating ( translationErrorRotating );
+  setMoveJitterWhileTurning ( moveJitterWhileTurning );
+
+  m_FirstRun = slamFilter.m_FirstRun;
+  m_DoMapping = slamFilter.m_DoMapping;
+
+  m_EffectiveParticleNum = slamFilter.m_EffectiveParticleNum;
+
+  m_LastUpdateTime = slamFilter.m_LastUpdateTime;
+
+  m_ReferencePoseOdometry = slamFilter.m_ReferencePoseOdometry;
+  m_ReferenceMeasurementTime = slamFilter.m_ReferenceMeasurementTime;
+}
+
+
+SlamFilter::~SlamFilter()
+{
+  if ( m_OccupancyMap )
+  {
+    delete m_OccupancyMap;
+  }
+  for ( int i = 0; i < m_ParticleNum; i++ )
+  {
+    if ( m_CurrentList[i] )
+    {
+      delete m_CurrentList[i];
+      m_CurrentList[i] = 0;
+    }
+    if ( m_LastList[i] )
+    {
+      delete m_LastList[i];
+      m_LastList[i] = 0;
+    }
+  }
+}
+
+
+void SlamFilter::setRotationErrorRotating ( float percent )
+{
+  m_Alpha1 = percent / 100.0;
+}
+
+void SlamFilter::resetHigh()
+{
+  m_OccupancyMap->resetHighSensitive();
+}
+
+void SlamFilter::setRotationErrorTranslating ( float degreePerMeter )
+{
+  m_Alpha2 = degreePerMeter / 180.0 * M_PI;
+}
+
+void SlamFilter::setTranslationErrorTranslating ( float percent )
+{
+  m_Alpha3 = percent / 100.0;
+}
+
+void SlamFilter::setTranslationErrorRotating ( float mPerDegree )
+{
+  m_Alpha4 = mPerDegree / 180.0 * M_PI;
+}
+
+void SlamFilter::setMoveJitterWhileTurning ( float mPerDegree )
+{
+  m_Alpha5 = mPerDegree / 180.0 * M_PI;
+}
+
+void SlamFilter::setScanMatchingClusterSize ( float minClusterSize )
+{
+  minClusterSize = minClusterSize;
+}
+
+void SlamFilter::setMapping ( bool doMapping )
+{
+  m_DoMapping = doMapping;
+}
+
+void SlamFilter:: setOccupancyMap ( OccupancyMap* occupancyMap )
+{
+    //delete old
+  if ( m_OccupancyMap )
+  {
+    delete m_OccupancyMap;
+  }
+        //copy
+  m_OccupancyMap = occupancyMap;
+}
+
+
+vector<Pose>* SlamFilter::getParticlePoses() const
+{
+  vector<Pose>* particlePoses = new vector<Pose>();
+  for ( int i = 0; i < m_ParticleNum; i++ )
+  {
+    float robotX, robotY, robotTheta;
+    SlamParticle* particle = m_CurrentList[i];
+    particle->getRobotPose ( robotX, robotY, robotTheta );
+    particlePoses->push_back ( Pose ( robotX, robotY, robotTheta ) );
+  }
+  return particlePoses;
+}
+
+vector<SlamParticle*>* SlamFilter::getParticles() const
+{
+  vector<SlamParticle*>* particles = new vector<SlamParticle*>();
+  for ( int i = 0; i < m_ParticleNum; i++ )
+  {
+
+    SlamParticle* particle = m_CurrentList[i];
+    particles->push_back ( particle );
+  }
+  return particles;
+}
+
+void SlamFilter::setRobotPose ( Pose pose, double scatterVarXY, double scatterVarTheta )
+{
+  // set first particle to exact position
+  m_CurrentList[0]->setRobotPose ( pose.x(), pose.y(), pose.theta() );
+  m_LastList[0]->setRobotPose ( pose.x(), pose.y(), pose.theta() );
+  // scatter remaining particles
+  for ( int i = 1; i < m_ParticleNum; ++i )
+  {
+    const double scatterX = randomGauss() * scatterVarXY;
+    const double scatterY = randomGauss() * scatterVarXY;
+    const double scatterTheta = randomGauss() * scatterVarTheta;
+
+    m_CurrentList[i]->setRobotPose ( pose.x()+scatterX, pose.y()+scatterY, pose.theta()+scatterTheta );
+    m_LastList[i]->setRobotPose ( pose.x()+scatterX, pose.y()+scatterY, pose.theta()+scatterTheta );
+  }
+}
+
+vector<float> SlamFilter::getParticleWeights() const
+{
+  vector<float> particleWeights ( m_ParticleNum );
+  for ( int i = 0; i < m_ParticleNum; i++ )
+  {
+    particleWeights[i] = m_CurrentList[i]->getWeight();
+  }
+  return particleWeights;
+}
+
+double SlamFilter::randomGauss ( float variance ) const
+{
+  if ( variance < 0 )
+  {
+    variance = -variance;
+  }
+  double x1, x2, w, y1;
+  do
+  {
+    x1 = 2.0 * random01() - 1.0;
+    x2 = 2.0 * random01() - 1.0;
+    w = x1 * x1 + x2 * x2;
+  }
+  while ( w >= 1.0 );
+
+  w = sqrt ( ( -2.0 * log ( w ) ) / w );
+  y1 = x1 * w;
+  // now y1 is uniformly distributed
+  return sqrt ( variance ) * y1;
+}
+
+vector<float> SlamFilter::filterOutliers (sensor_msgs::LaserScanConstPtr rawData, float maxDiff )
+{
+  if ( rawData->ranges.size() < 2 )
+  {
+    return rawData->ranges;
+  }
+  vector<float> filteredData = rawData->ranges;
+  for ( unsigned int i = 1; i < filteredData.size() - 1; i++ )
+  {
+    if ( abs ( ( float ) ( rawData->ranges[i-1] - rawData->ranges[i]*2 + rawData->ranges[i+1] ) ) > maxDiff*2 )
+    {
+      filteredData[i] = 0;
+    }
+  }
+  if ( fabs ( rawData->ranges[0] - rawData->ranges[1] ) > maxDiff )
+  {
+    filteredData[0] = 0;
+  }
+  if ( fabs ( rawData->ranges[ rawData->ranges.size()-1 ] - rawData->ranges[ rawData->ranges.size()-2 ] ) > maxDiff )
+  {
+    filteredData[ rawData->ranges.size()-1 ] = 0;
+  }
+
+  return filteredData;
+}
+
+void SlamFilter::filter (Pose currentPose, sensor_msgs::LaserScanConstPtr laserData, ros::Time measurementTime, ros::Duration &FilterDuration)
+{
+  // if first run, initialize data
+  if ( m_FirstRun )
+  {
+    m_FirstRun = false;
+    // only do mapping, save first pose as reference
+    if ( m_DoMapping )
+    {
+      m_OccupancyMap->insertLaserData ( laserData );
+    }
+    m_CurrentLaserData = m_CurrentLaserData = boost::make_shared<sensor_msgs::LaserScan>(*laserData); //copy const ptr to be able to change values; //test
+    m_ReferencePoseOdometry = currentPose;
+    m_ReferenceMeasurementTime = measurementTime;
+
+    measure();
+    ROS_INFO_STREAM("first run!");
+    normalize();
+    sort ( 0, m_ParticleNum - 1 );
+
+    return;
+  }
+
+  //m_CurrentLaserConfig = laserConf;
+  m_CurrentPoseOdometry = currentPose;
+  m_CurrentLaserData = boost::make_shared<sensor_msgs::LaserScan>(*laserData); //copy const ptr to be able to change values
+  m_CurrentLaserData->ranges = filterOutliers ( laserData, 0.3 );
+
+  Transformation2D trans = m_CurrentPoseOdometry - m_ReferencePoseOdometry;
+
+  // do not resample if move to small
+  if ( sqr ( trans.x() ) + sqr ( trans.y() ) < MIN_MOVE_DISTANCE2 && sqr ( trans.theta() ) < MIN_TURN_DISTANCE2 )
+  {
+    ROS_DEBUG_STREAM( "Move too small, will not resample." );
+    if ( m_EffectiveParticleNum < m_ParticleNum / 5 )
+    {
+      resample();
+      ROS_INFO_STREAM( "Particles too scattered, resampling." );
+    }
+  }
+  else
+  {
+    resample();
+  }
+
+  // filter steps
+  drift();
+  measure();
+  normalize();
+
+  sort ( 0, m_ParticleNum - 1 );
+
+  // mapping step
+  trans = m_CurrentPoseOdometry - m_ReferencePoseOdometry;
+  double elapsedSeconds = ( measurementTime - m_ReferenceMeasurementTime ).toSec();
+  double thetaPerSecond;
+  if(elapsedSeconds == 0.0)
+      thetaPerSecond = trans.theta();
+  else
+      thetaPerSecond = trans.theta() / elapsedSeconds;
+
+  Pose likeliestPose = getLikeliestPose();
+  Transformation2D transSinceLastUpdate = likeliestPose - m_LastUpdatePose;
+
+  ostringstream stream;
+  stream.precision ( 2 );
+  stream << "Transformation since last update: angle=" << Math::rad2Deg ( transSinceLastUpdate.theta() ) << " dist=" << transSinceLastUpdate.magnitude() << "m" << endl;
+
+  bool update = ( fabs ( transSinceLastUpdate.theta() ) > m_UpdateMinMoveAngle  ) ||
+                ( transSinceLastUpdate.magnitude() > m_UpdateMinMoveDistance ) ||
+                ( ( measurementTime - m_LastUpdateTime ) > m_MaxUpdateInterval );
+
+  if ( m_DoMapping && update )
+  {
+    stream << "Updating map.";
+    m_LastUpdatePose = likeliestPose;
+    m_LastUpdateTime = measurementTime;
+    if ( thetaPerSecond < m_MaxRotationPerSecond )
+    {
+      updateMap();
+    }
+    else
+    {
+      ROS_INFO_STREAM( "No mapping performed, rotation angle too big." );
+    }
+  }
+  else
+  {
+    stream << "No map update performed.";
+  }
+  ROS_DEBUG_STREAM( stream.str() );
+  // safe last used pose and laserdata as reference
+  m_ReferencePoseOdometry = m_CurrentPoseOdometry;
+  m_ReferenceMeasurementTime = measurementTime;
+}
+
+/**
+ *  For the probabilistic motion model of the robot we use the following three parameters:
+ *  - When the robot starts, the initial orientation may have errors (a few degrees). (m_InitialOrientationError)
+ *  - The distance of the robot movement may be wrong (a percentage of the moved distance). (m_TranslationError)
+ *  - The orientation of the robot when the motion was finished may be wrong (a percentage of the rotation) (m_RotationError).
+ *  [cf. "An Efficient FastSLAM Algorithm for Generating Maps of Large-Scale Cyclic Environments
+ *   from Raw Laser Range Measurements", Dirk Haenelt et. al.]
+ *  We use Gaussian-Distributions to estimate the error.
+ *  The expected value of the errors are zero.
+ */
+
+void SlamFilter::drift()
+{
+
+  float rx = m_ReferencePoseOdometry.x();
+  float ry = m_ReferencePoseOdometry.y();
+  float rt = m_ReferencePoseOdometry.theta();
+  float cx = m_CurrentPoseOdometry.x();
+  float cy = m_CurrentPoseOdometry.y();
+  float ct = m_CurrentPoseOdometry.theta();
+
+  Transformation2D odoTrans = m_CurrentPoseOdometry - m_ReferencePoseOdometry;
+
+  // find out if driving forward or backward
+  bool backwardMove = false;
+  float scalar = odoTrans.x() * cosf ( rt ) + odoTrans.y() * sinf ( rt );
+  if ( scalar <= 0 )
+  {
+    backwardMove = true;
+  }
+  float distance = sqrt ( sqr ( odoTrans.x() ) + sqr ( odoTrans.y() ) );
+  float deltaRot1, deltaTrans, deltaRot2;
+  if ( distance < sqrt ( MIN_MOVE_DISTANCE2 ) )
+  {
+    deltaRot1 = odoTrans.theta();
+    deltaTrans = 0.0;
+    deltaRot2 = 0.0;
+  }
+  else if ( backwardMove )
+  {
+    deltaRot1 = atan2 ( ry - cy, rx - cx ) - rt;
+    deltaTrans = - distance;
+    deltaRot2 = ct - rt - deltaRot1;
+  }
+  else
+  {
+    deltaRot1 = atan2 ( odoTrans.y(), odoTrans.x() ) - rt;
+    deltaTrans = distance;
+    deltaRot2 = ct - rt - deltaRot1;
+  }
+
+  while ( deltaRot1 >= M_PI ) deltaRot1 -= M_2PI;
+  while ( deltaRot1 < -M_PI ) deltaRot1 += M_2PI;
+  while ( deltaRot2 >= M_PI ) deltaRot2 -= M_2PI;
+  while ( deltaRot2 < -M_PI ) deltaRot2 += M_2PI;
+
+  // always leave one particle with pure displacement
+  SlamParticle* particle = m_CurrentList[0];
+  // get stored pose
+  float robotX, robotY, robotTheta;
+  particle->getRobotPose ( robotX, robotY, robotTheta );
+  Pose pose ( robotX, robotY, robotTheta );
+  // move pose
+  float posX = pose.x() + deltaTrans * cos ( pose.theta() + deltaRot1 );
+  float posY = pose.y() + deltaTrans * sin ( pose.theta() + deltaRot1 );
+  float theta  = pose.theta() + deltaRot1 + deltaRot2;
+  while ( theta > M_PI ) theta -= M_2PI;
+  while ( theta <= -M_PI ) theta += M_2PI;
+  // save new pose
+  particle->setRobotPose ( posX, posY, theta );
+  for ( int i = 1; i < m_ParticleNum; i++ )
+  {
+    SlamParticle* particle = m_CurrentList[i];
+    // get stored pose
+    float robotX, robotY, robotTheta;
+    particle->getRobotPose ( robotX, robotY, robotTheta );
+    Pose pose ( robotX, robotY, robotTheta );
+    // move pose
+    float estDeltaRot1 = deltaRot1 - randomGauss ( m_Alpha1 * fabs ( deltaRot1 ) + m_Alpha2 * deltaTrans );
+    float estDeltaTrans = deltaTrans - randomGauss ( m_Alpha3 * deltaTrans + m_Alpha4 * ( fabs ( deltaRot1 ) + fabs ( deltaRot2 ) ) );
+    float estDeltaRot2 = deltaRot2 - randomGauss ( m_Alpha1 * fabs ( deltaRot2 ) + m_Alpha2 * deltaTrans );
+
+    float posX = pose.x() + estDeltaTrans * cos ( pose.theta() + estDeltaRot1 ) + randomGauss ( m_Alpha5 * fabs ( estDeltaRot1 + estDeltaRot2 ) );
+    float posY = pose.y() + estDeltaTrans * sin ( pose.theta() + estDeltaRot1 ) + randomGauss ( m_Alpha5 * fabs ( estDeltaRot1 + estDeltaRot2 ) );
+    float theta  = pose.theta() + estDeltaRot1 + estDeltaRot2;
+
+    // save new pose
+    while ( theta > M_PI ) theta -= M_2PI;
+    while ( theta <= -M_PI ) theta += M_2PI;
+
+    particle->setRobotPose ( posX, posY, theta );
+  }
+}
+
+
+void SlamFilter::measure()
+{
+  if ( m_OccupancyMap )
+  {
+    m_MeasurePoints = m_OccupancyMap->getMeasurePoints ( m_CurrentLaserData );
+
+    for ( int i = 0; i < m_ParticleNum; i++ )
+    {
+      SlamParticle* particle = m_CurrentList[i];
+      if ( !particle )
+      {
+        ROS_ERROR_STREAM("ERROR: Particle is NULL-pointer!");
+      }
+      else
+      {
+        // calculate weights
+        float robotX, robotY, robotTheta;
+        particle->getRobotPose ( robotX, robotY, robotTheta );
+        Pose pose ( robotX, robotY, robotTheta );
+        float weight = m_OccupancyMap->computeScore ( pose, m_MeasurePoints );
+        particle->setWeight ( weight );
+      }
+    }
+  }
+  m_EffectiveParticleNum = getEffectiveParticleNum2();
+
+}
+
+void SlamFilter::updateMap()
+{
+  getLikeliestPose(); //call to trigger tf broadcast
+  m_OccupancyMap->insertLaserData ( m_CurrentLaserData );
+}
+
+void SlamFilter::printParticles() const
+{
+  cout << endl << "### PARTICLE LIST ###" << endl;
+  cout << right << fixed;
+  cout.width ( 5 );
+  for ( int i = 0; i < m_ParticleNum; i++ )
+  {
+    SlamParticle* p_particle = m_CurrentList[i];
+    if ( p_particle )
+    {
+      float robotX, robotY, robotTheta;
+      p_particle->getRobotPose ( robotX, robotY, robotTheta );
+      cout << "Particle " << i << ": (" << robotX << "," << robotY << "," << robotTheta * 180.0 / M_PI << "), weight:\t" << p_particle->getWeight() << endl;
+    }
+  }
+  cout << "### END OF LIST ###" << endl;
+}
+
+
+void SlamFilter::reduceParticleNumber ( int newParticleNum )
+{
+  if ( newParticleNum < m_ParticleNum )
+  {
+
+    SlamParticle** newCurrentList = new SlamParticle*[newParticleNum];
+    SlamParticle** newLastList = new SlamParticle*[newParticleNum];
+
+    for ( int i = 0; i < newParticleNum; i++ )
+    {
+      newCurrentList[i] = m_CurrentList[i];
+      newLastList[i] = m_LastList[i];
+    }
+
+    for ( int i = newParticleNum + 1; i < m_ParticleNum; i++ )
+    {
+      delete m_CurrentList[i];
+      delete m_LastList[i];
+    }
+    delete[] m_CurrentList;
+    delete[] m_LastList;
+
+    m_CurrentList = newCurrentList;
+    m_LastList = newLastList;
+
+    m_ParticleNum = newParticleNum;
+    normalize();
+  }
+}
+
+Pose SlamFilter::getLikeliestPose() const
+{
+  float percentage = 3;
+  int numParticles = static_cast<int> ( percentage / 100 * m_ParticleNum );
+  if ( 0 == numParticles ) numParticles = 1;
+  float sumX = 0, sumY = 0, sumDirX = 0, sumDirY = 0;
+  for ( int i = 0; i < numParticles; i++ )
+  {
+    float robotX, robotY, robotTheta;
+    SlamParticle* particle = m_CurrentList[i];
+    particle->getRobotPose ( robotX, robotY, robotTheta );
+    sumX += robotX;
+    sumY += robotY;
+    // calculate sum of vectors in unit circle
+    sumDirX += cos ( robotTheta );
+    sumDirY += sin ( robotTheta );
+  }
+  float meanTheta = atan2 ( sumDirY, sumDirX );
+  //broadcast transform map -> base_link
+  tf::Transform transform(tf::createQuaternionFromYaw(meanTheta),
+                          tf::Vector3(sumX / numParticles, sumY / numParticles, 0.0));
+  tf::TransformBroadcaster tfBroadcaster;
+  tfBroadcaster.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "map", "base_link"));
+  return Pose ( sumX / numParticles, sumY / numParticles, meanTheta );
+}
+
+OccupancyMap* SlamFilter::getLikeliestMap() const
+{
+  return m_OccupancyMap;
+}
+
+void SlamFilter::getPoseVariances ( int particleNum, float& poseVarianceX, float& poseVarianceY )
+{
+
+  // the particles of m_CurrentList are sorted by their weights
+  if ( particleNum > m_ParticleNum || particleNum <= 0 )
+  {
+    particleNum = m_ParticleNum;
+  }
+  // calculate average pose
+  float averagePoseX = 0;
+  float averagePoseY = 0;
+  float robotX = 0.0;
+  float robotY = 0.0;
+  float robotTheta = 0.0;
+  for ( int i = 0; i < particleNum; i++ )
+  {
+    m_CurrentList[i]->getRobotPose ( robotX, robotY, robotTheta );
+    averagePoseX += robotX;
+    averagePoseY += robotY;
+  }
+  averagePoseX /= particleNum;
+  averagePoseY /= particleNum;
+
+  // calculate standard deviation of pose
+  poseVarianceX = 0.0;
+  poseVarianceY = 0.0;
+  for ( int i = 0; i < particleNum; i++ )
+  {
+    m_CurrentList[i]->getRobotPose ( robotX, robotY, robotTheta );
+    poseVarianceX += ( averagePoseX - robotX ) * ( averagePoseX - robotX );
+    poseVarianceY += ( averagePoseY - robotY ) * ( averagePoseY - robotY );
+  }
+  poseVarianceX /= particleNum;
+  poseVarianceY /= particleNum;
+}
+
+double SlamFilter::evaluateByContrast()
+{
+  return m_OccupancyMap->evaluateByContrast();
+}
+
+void SlamFilter::applyMasking(const nav_msgs::OccupancyGrid::ConstPtr &msg)
+{
+    m_OccupancyMap->applyMasking(msg);
+}
diff --git a/homer_mapping/src/ParticleFilter/SlamFilter.h b/homer_mapping/src/ParticleFilter/SlamFilter.h
new file mode 100644
index 0000000000000000000000000000000000000000..f8d969016b630fdb59a4eeaaa4f5c42861e92e27
--- /dev/null
+++ b/homer_mapping/src/ParticleFilter/SlamFilter.h
@@ -0,0 +1,314 @@
+#ifndef SLAMFILTER_H
+#define SLAMFILTER_H
+
+#include <vector>
+#include "ParticleFilter.h"
+#include "SlamParticle.h"
+#include "Math/Pose.h"
+#include "../OccupancyMap/OccupancyMap.h"
+
+#include "sensor_msgs/LaserScan.h"
+
+class OccupancyMap;
+
+/**
+ * @class SlamFilter
+ *
+ * @author Malte Knauf, Stephan Wirth, Susanne Maur
+ *
+ * @brief This class is used to determine the robot's most likely pose with given map and given laser data.
+ *
+ * A particle filter is a descrete method to describe and compute with a probability distribution.
+ * This particle filter uses an occupancy map to determine the probability of robot states.
+ * The robot states are stored in a particle together with their weight @see SlamParticle.
+ *
+ * @see SlamParticle
+ * @see ParticleFilter
+ * @see OccupancyMap
+ */
+class SlamFilter : public ParticleFilter<SlamParticle> {
+
+  public:
+
+   /**
+     * This constructor initializes the random number generator and sets the member variables to the given values.
+     * @param particleNum Number of particles to use.
+     */
+    SlamFilter(int particleNum);
+
+    /// @brief copy constructor
+    SlamFilter( SlamFilter& slamFilter );
+
+    /**
+     * The destructor releases the OccupancyMap and the particles.
+     */
+    ~SlamFilter();
+
+    /**
+     * This method runs the filter routine.
+     * The given odometry measurement is used as movement hypothesis, the laserData-vector is used
+     * as measurement and is used to weight the particles.
+     * @param currentPoseOdometry Odometry data of time t.
+     * @param laserData msg containing the laser measurement.
+     * @param measurementTime Time stamp of the measurement.
+     * @param filterDurationTime Returns the time that the filtering needed
+     */
+    void filter(Pose currentPoseOdometry, sensor_msgs::LaserScanConstPtr laserData, ros::Time measurementTime,
+                ros::Duration  &filterDuration);
+
+    /**
+     * @return The Pose of the most important particle (particle with highest weight).
+     */
+    Pose getLikeliestPose() const;
+
+    /**
+     * This method can be used to retrieve the most likely map that is stored by the particle filter.
+     * @return Pointer to the most likely occupancy map.
+     */
+    OccupancyMap* getLikeliestMap() const;
+
+    /**
+     * This function prints out the list of particles to stdout via cout.
+     */
+    void printParticles() const;
+    
+    void resetHigh();
+
+    /**
+     * Computes and sets the new value for m_Alpha1.
+     * @param percent Rotation error while rotating (see class constructor for details)
+     */
+    void setRotationErrorRotating(float percent);
+
+    /**
+     * Computes and sets the new value for m_Alpha2.
+     * @param degreesPerMeter Rotation error while translating (see class constructor for details)
+     */
+    void setRotationErrorTranslating(float degreesPerMeter);
+
+    /**
+     * Computes and sets the new value for m_Alpha3.
+     * @param percent Translation error while translating (see class constructor for details)
+     */
+    void setTranslationErrorTranslating(float percent);
+
+    /**
+     * Computes and sets the new value for m_Alpha4.
+     * @param  mPerDegree Translation error while rotating (see class constructor for details)
+     */
+    void setTranslationErrorRotating(float mPerDegree);
+
+    /**
+     * Computes and sets the new value for m_Alpha5.
+     * @param  mPerDegree Move jitter while turning (see class constructor for details)
+     */
+    void setMoveJitterWhileTurning(float mPerDegree);
+
+    /**
+     * Sets a new minimal size of a cluster of scan points which is considered in scan matching.
+     * @param  clusterSize Minimal size of a cluster in mm of scan points which is considered in scan matching.
+     */
+    void setScanMatchingClusterSize(float clusterSize);
+
+    /**
+     * Sets whether the map is updated or just used for self-localization.
+     * @param doMapping True if robot shall do mapping, false otherwise.
+     */
+    void setMapping(bool doMapping);
+
+    /**
+     * Deletes the current occupancy map and copies a new one into the system.
+     * @param occupancyMap The occupancy map to load into the system (is being copied)
+     */
+    void setOccupancyMap(OccupancyMap* occupancyMap);
+
+    /**
+     * Sets the robot pose in the current occupancy map.
+     * @param Robot pose.
+     * @param scatterVariance if not equal to 0 the poses are equally scattered around the pose
+     */
+    void setRobotPose(Pose pose, double scatterVarXY=0.0, double scatterVarTheta=0.0);
+
+    /**
+     * @return Vector of current particle poses. The vector is sorted according to the weights of the
+     * particles. The pose of the particle with the highest value is the first element of the vector.
+     */
+    std::vector<Pose>* getParticlePoses() const;
+
+    /**
+    * @return vector of all particles
+    */
+    std::vector<SlamParticle*>* getParticles() const;
+
+    /**
+     * @return Vector of current particle weights. The vector is sorted by weight, highest weight first.
+     */
+    std::vector<float> getParticleWeights() const;
+
+    /**
+     * Calculates and returns the variance of the current likeliest particle poses.
+     * The orientation of the particle is neglected.
+     * @param The number of treated particles.
+     * @param[out] poseVarianceX The variance of particle poses in x direction.
+     * @param[out] poseVarianceY The variance of particle poses in y direction.
+     */
+    void getPoseVariances(int particleNum, float& poseVarianceX, float& poseVarianceY);
+
+    /**
+     * This method reduces the number of particles used in this SlamFilter to the given value.
+     * @param newParticleNumber The new number of particles
+     */
+    void reduceParticleNumber(int newParticleNumber);
+
+    /**
+     * This method returns the contrast of the occupancy grid
+     * @return Contrast value from 0 (no contrast) to 1 (max. contrast) of the map
+     */
+    double evaluateByContrast();
+
+    /**
+     * This method passes a masking map to to the underlying occupancy map
+     */
+    void applyMasking(const nav_msgs::OccupancyGrid::ConstPtr &msg);
+
+
+  private:
+
+    /**
+     * This method filter outliers in the given laser scan
+     * @param rawData the laser scan to check
+     * @param maxDiff maximal difference between two adjacent ranges
+     * @return filtered scan without outliers
+     */
+    vector<float> filterOutliers(sensor_msgs::LaserScanConstPtr rawData, float maxDiff );
+
+    /**
+     * This method generates Gauss-distributed random variables with the given variance. The computation
+     * method is the Polar Method that is described in the book "A First Course on Probability" by Sheldon Ross.
+     * @param variance The variance for the Gauss-distribution that is used to generate the random variable.
+     * @return A random variable that is N(0, variance) distributed.
+     */
+    double randomGauss(float variance = 1.0) const;
+
+    /**
+     * This method drifts the particles according to the last two odometry readings (time t-1 and time t).
+     */
+    void drift();
+
+    /**
+     * This method weightens each particle according to the given laser measurement in m_LaserData.
+     */
+    void measure();
+
+    /**
+     * This method updates the map by inserting the current laser measurement at the pose of the likeliest particle.
+     */
+    void updateMap();
+
+    /**
+     * For weightening the particles, the filter needs a map.
+     * This variable holds a pointer to a map.
+     * @see OccupancyMap
+     */
+    OccupancyMap* m_OccupancyMap;
+
+    /**
+     * threshold values for when the map will be updated.
+     * The map is only updated when the robot has turned a minimal angle (m_UpdateMinMoveAngle in radiants),
+     * has moved a minimal distance (m_UpdateMinMoveDistance in m) or a maximal time has passed (m_MaxUpdateInterval)
+     */
+    float m_UpdateMinMoveAngle;
+    float m_UpdateMinMoveDistance;
+    ros::Duration m_MaxUpdateInterval;
+
+    /**
+     * This variable holds the rotation error that the robot makes while it is rotating.
+     * Has to be given in percent. Example: robot makes errors of 3 degrees while making a 60 degrees
+     * move -> error is 5% -> rotationErrorRotating = 5)
+     */
+    float m_Alpha1;
+
+    /**
+     * This variable holds the rotation error that the robot makes while it is translating
+     * (moving forward or backwards). Has to be given in degrees per meter.
+     */
+    float m_Alpha2;
+
+    /**
+     * This variable holds the translation error that the robot makes while it is translating.
+     * Has to be given in percent.
+     */
+    float m_Alpha3;
+
+    /**
+     * This variable holds the translation error that the robot makes while it is rotating.
+     * This error only carries weight, if a translation es performed at the same time.
+     * See also m_Alpha5.
+     * Has to be given in milimeters per degree. Example: Robot makes a turn of 10 degrees and moves its
+     * center unintentional 15 mm. -> translationErrorRotating = 15.0 / 10.0 = 1.5
+     */
+    float m_Alpha4;
+
+    /**
+     * This variable holds a move jitter that is considered if the robot is turning.
+     * Has to be given in milimeters per degree.
+     */
+    float m_Alpha5;
+
+    /**
+     * The maximal rotation if mapping is performed. If the rotation is bigger, mapping is interrupted.
+     * This value may depend on the computing power, because it is influenced by the size of time intervals of mapping.
+     */
+    float m_MaxRotationPerSecond;
+
+    /**
+     * Last laser data.
+     */
+    sensor_msgs::LaserScanPtr m_CurrentLaserData;
+
+    /**
+     * Last two odometry measurements.
+     */
+    Pose m_ReferencePoseOdometry;
+    Pose m_CurrentPoseOdometry;
+
+    /**
+     * Time stamp of the last sensor measurement.
+     */
+    ros::Time m_ReferenceMeasurementTime;
+
+    /**
+     * True if it is the first run of SlamFilter, false otherwise.
+     */
+    bool m_FirstRun;
+
+    /**
+     * This variabe is true, if the SlamFilter is used for mapping and updates the map,
+     * false if it is just used for self-localization.
+     */
+    bool m_DoMapping;
+
+    /** Points used in last measure() step */
+    vector<MeasurePoint> m_MeasurePoints;
+
+    /// Pose of robot during last map update
+    Pose m_LastUpdatePose;
+
+    /**
+     *  Time stamp of the last particle filter step
+     */
+    ros::Time m_LastUpdateTime;
+
+    /**
+     * Calculates the square of given input f
+     * @param f input
+     * @return square of input
+     */
+    template<class T>
+    T sqr(T f)
+    {
+        return f * f;
+    }
+};
+#endif
+
diff --git a/homer_mapping/src/ParticleFilter/SlamParticle.cpp b/homer_mapping/src/ParticleFilter/SlamParticle.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7b501f0ca5b60cf12875a2e045e93d0a93d98ad2
--- /dev/null
+++ b/homer_mapping/src/ParticleFilter/SlamParticle.cpp
@@ -0,0 +1,30 @@
+#include "SlamParticle.h"
+
+SlamParticle::SlamParticle(float weight, float robotX, float robotY, float robotTheta) : Particle(weight) {
+  m_RobotPositionX = robotX;
+  m_RobotPositionY = robotY;
+  m_RobotOrientation = robotTheta;
+}
+
+SlamParticle::SlamParticle( SlamParticle& slamParticle )
+{
+  m_RobotPositionX = slamParticle.m_RobotPositionX;
+  m_RobotPositionY = slamParticle.m_RobotPositionY;
+  m_RobotOrientation = slamParticle.m_RobotOrientation;
+}
+
+SlamParticle::~SlamParticle() {
+}
+
+void SlamParticle::setRobotPose(float robotX, float robotY, float robotTheta) {
+  m_RobotPositionX = robotX;
+  m_RobotPositionY = robotY;
+  m_RobotOrientation = robotTheta;
+}
+
+void SlamParticle::getRobotPose(float& robotX, float& robotY, float& robotTheta) {
+  robotX = m_RobotPositionX;
+  robotY = m_RobotPositionY;
+  robotTheta = m_RobotOrientation;
+}
+
diff --git a/homer_mapping/src/ParticleFilter/SlamParticle.h b/homer_mapping/src/ParticleFilter/SlamParticle.h
new file mode 100644
index 0000000000000000000000000000000000000000..71da4a81ec7ff45f77d88b8b9518481b5f51163c
--- /dev/null
+++ b/homer_mapping/src/ParticleFilter/SlamParticle.h
@@ -0,0 +1,72 @@
+#ifndef SLAMPARTICLE_H
+#define SLAMPARTICLE_H
+
+#include <iostream>
+#include <fstream>
+
+#include "Particle.h"
+
+/**
+ * @class SlamParticle
+ *
+ * @author Malte Knauf, Stephan Wirth
+ *
+ * @brief This class defines a particle for the SlamFilter.
+ *
+ * This particle contains a weight (inherited from base class) and a Pose (position + orientation).
+ * The Pose describes a possible position and orientation of the robot.
+ *
+ * @see SlamFilter
+ * @see Particle
+ */
+class SlamParticle : public Particle
+{
+
+  public:
+    /**
+     * This constructor assigns the given weight to the member m_Weight.
+     * @param weight The weight of the particle.
+     * @param robotX X-Position of the robot (world coordinates in m).
+     * @param robotY Y-Position of the robot (world coordinates in m).
+     * @param robotTheta Orientation of the robot (radiants).
+     */
+    SlamParticle ( float weight = 1.0, float robotX = 0.0, float robotY = 0.0, float robotTheta = 0.0 );
+
+    ///@brief copy contructor
+    SlamParticle ( SlamParticle& slamParticle );
+
+    /**
+     * The destructor does nothing so far.
+     */
+    ~SlamParticle();
+
+    /**
+     * Sets the three members m_RobotPositionX, m_RobotPositionY, m_RobotOrientation.
+     * @param robotX X-Position of the robot (world coordinates in m).
+     * @param robotY Y-Position of the robot (world coordinates in m).
+     * @param robotTheta Orientation of the robot (radiants).
+     */
+    void setRobotPose ( float robotX, float robotY, float robotTheta );
+
+    /**
+     * Returns the content of the three members m_RobotPositionX, m_RobotPositionY, m_RobotOrientation.
+     * @param[out] robotX X-Position of the robot (world coordinates in m).
+     * @param[out] robotY Y-Position of the robot (world coordinates in m).
+     * @param[out] robotTheta Orientation of the robot (radiants).
+     */
+    void getRobotPose ( float& robotX, float& robotY, float& robotTheta );
+
+
+  private:
+
+    /**
+     * These members store the pose of the robot.
+     */
+    float m_RobotPositionX;
+    float m_RobotPositionY;
+    float m_RobotOrientation;
+
+};
+
+#endif
+
diff --git a/homer_mapping/src/slam_node.cpp b/homer_mapping/src/slam_node.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6d196437e43972df84d799c1474ad54f1190c974
--- /dev/null
+++ b/homer_mapping/src/slam_node.cpp
@@ -0,0 +1,318 @@
+#include <sstream>
+#include <vector>
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <cmath>
+#include <stdlib.h>
+
+#include "slam_node.h"
+
+//receive:
+#include "sensor_msgs/LaserScan.h"
+#include "nav_msgs/Odometry.h"
+#include "nav_msgs/OccupancyGrid.h"
+#include "tf/tf.h"
+
+#include "tools/loadRosConfig.h"
+
+#include "ParticleFilter/SlamFilter.h"
+#include "ParticleFilter/HyperSlamFilter.h"
+#include "Math/Box2D.h"
+#include "OccupancyMap/OccupancyMap.h"
+
+SlamNode::SlamNode(ros::NodeHandle* nh)
+  : m_HyperSlamFilter( 0 )
+{
+    init();
+
+    // subscribe to topics
+    m_LaserScanSubscriber = nh->subscribe("/scan", 1, &SlamNode::callbackLaserScan, this);
+    m_OdometrySubscriber = nh->subscribe<nav_msgs::Odometry>("/odom", 1, &SlamNode::callbackOdometry, this);
+    m_UserDefPoseSubscriber = nh->subscribe<geometry_msgs::Pose>("/homer_mapping/userdef_pose", 1, &SlamNode::callbackUserDefPose, this);
+    m_DoMappingSubscriber = nh->subscribe<std_msgs::Bool>("/homer_mapping/do_mapping", 1, &SlamNode::callbackDoMapping, this);
+    m_ResetMapSubscriber = nh->subscribe<std_msgs::Empty>("/map_manager/reset_maps", 1, &SlamNode::callbackResetMap, this);
+    m_LoadMapSubscriber = nh->subscribe<nav_msgs::OccupancyGrid>("/map_manager/loaded_map", 1, &SlamNode::callbackLoadedMap, this);
+    m_MaskingSubscriber = nh->subscribe<nav_msgs::OccupancyGrid>("/map_manager/mask_slam", 1, &SlamNode::callbackMasking, this);
+    m_ResetHighSubscriber = nh->subscribe<std_msgs::Empty>("/map_manager/reset_high", 1, &SlamNode::callbackResetHigh, this);
+
+	m_InitialPoseSubscriber = nh->subscribe<geometry_msgs::PoseWithCovarianceStamped>("/initialpose", 1, &SlamNode::callbackInitialPose, this);
+
+    // advertise topics
+    m_PoseStampedPublisher = nh->advertise<geometry_msgs::PoseStamped>("/pose", 1);
+    m_SLAMMapPublisher = nh->advertise<nav_msgs::OccupancyGrid>("/homer_mapping/slam_map", 1);
+}
+
+void SlamNode::init()
+{
+    double waitTime;
+    loadConfigValue("/particlefilter/wait_time", waitTime);
+    m_WaitDuration = ros::Duration(waitTime);
+    loadConfigValue("/selflocalization/scatter_var_xy", m_ScatterVarXY);
+    loadConfigValue("/selflocalization/scatter_var_theta", m_ScatterVarTheta);
+
+    m_DoMapping = true;
+
+    int particleNum;
+    loadConfigValue("/particlefilter/particle_num", particleNum);
+    int particleFilterNum;
+    loadConfigValue("/particlefilter/hyper_slamfilter/particlefilter_num", particleFilterNum);
+    m_HyperSlamFilter = new HyperSlamFilter ( particleFilterNum, particleNum );
+
+    m_ReferenceOdometryTime = ros::Time(0);
+    m_LaserDataTime = ros::Time(0);;
+
+    m_LastLaserMessageId = 0;
+    m_LastMapSendTime = ros::Time(0);
+    m_LastPositionSendTime = ros::Time(0);
+    m_LastMappingTime = ros::Time(0);
+}
+
+SlamNode::~SlamNode()
+{
+  delete m_HyperSlamFilter;
+}
+
+void SlamNode::processMeasurements ( ros::Time odoTime, Pose currentOdometryPose )
+{
+  // laserscan in between current odometry reading and m_ReferenceOdometry
+  // -> calculate pose of robot during laser scan
+  ros::Duration d1 = m_LaserDataTime - m_ReferenceOdometryTime;
+  ros::Duration d2 = odoTime - m_ReferenceOdometryTime;
+
+  float timeFactor;
+  if(d1.toSec()==0.0)
+      timeFactor = 0.0f;
+  else if(d2.toSec()==0.0)
+      timeFactor = 1.0f;
+  else
+      timeFactor = d1.toSec() / d2.toSec();
+  ros::Duration duration = ros::Duration(0);
+
+  Pose interpolatedPose = m_ReferenceOdometryPose.interpolate ( currentOdometryPose, timeFactor );
+  m_HyperSlamFilter->filter( interpolatedPose, m_LastLaserData, m_LaserDataTime, duration);
+}
+
+void SlamNode::resetMaps()
+{
+  ROS_INFO( "Resetting maps.." );
+
+  delete m_HyperSlamFilter;
+  m_HyperSlamFilter = 0;
+  init();
+
+  sendMapDataMessage();
+  sendPositionDataMessage();
+}
+
+void SlamNode::callbackResetHigh(const std_msgs::Empty::ConstPtr& msg)
+{
+	m_HyperSlamFilter->resetHigh();
+
+}
+
+
+void SlamNode::sendPositionDataMessage()
+{
+  Pose pose = m_HyperSlamFilter->getBestSlamFilter()->getLikeliestPose();
+
+  geometry_msgs::PoseStamped poseMsg;
+  //header
+  poseMsg.header.stamp = ros::Time::now();
+  poseMsg.header.frame_id = "map";
+
+  //position and orientation
+  poseMsg.pose.position.x = pose.x();
+  poseMsg.pose.position.y = pose.y();
+  poseMsg.pose.position.z = 0.0;
+  tf::Quaternion quatTF = tf::createQuaternionFromYaw(pose.theta());
+  geometry_msgs::Quaternion quatMsg;
+  tf::quaternionTFToMsg(quatTF, quatMsg); //conversion from tf::Quaternion to geometry_msgs::Quaternion
+  poseMsg.pose.orientation = quatMsg;
+  m_PoseStampedPublisher.publish(poseMsg);
+
+  //broadcast transform map -> base_link
+  tf::Transform transform(quatTF,
+                          tf::Vector3(pose.x(), pose.y(), 0.0));
+  m_tfBroadcaster.sendTransform(tf::StampedTransform(transform, poseMsg.header.stamp, "map", "base_link"));
+  m_LastLaserMessageId = 0;
+}
+
+void SlamNode::sendMapDataMessage()
+{
+  std::vector<int8_t> mapData;
+  int width, height;
+  float resolution;
+
+  OccupancyMap* occMap = m_HyperSlamFilter->getBestSlamFilter()->getLikeliestMap();
+  occMap->getOccupancyProbabilityImage (mapData, width, height, resolution);
+
+  if ( width != height )
+  {
+    ROS_ERROR_STREAM("ERROR: Map is not quadratic! can not send map!");
+  }
+  else
+  {
+    nav_msgs::OccupancyGrid mapMsg;
+    std_msgs::Header header;
+    header.stamp = ros::Time::now();
+    header.frame_id = "map";
+    mapMsg.header = header;
+    nav_msgs::MapMetaData mapMetaData;
+    mapMetaData.width = width;
+    mapMetaData.height = height;
+    mapMetaData.resolution = resolution;
+    mapMetaData.origin.position.x = -height*resolution/2;
+    mapMetaData.origin.position.y = -width*resolution/2;
+    mapMetaData.origin.orientation.w = 1.0;
+    mapMetaData.origin.orientation.x = 0.0;
+    mapMetaData.origin.orientation.y = 0.0;
+    mapMetaData.origin.orientation.z = 0.0;
+    mapMsg.info = mapMetaData;
+    mapMsg.data = mapData;
+
+    m_SLAMMapPublisher.publish(mapMsg);
+  }
+}
+
+void SlamNode::callbackUserDefPose( const geometry_msgs::Pose::ConstPtr& msg )
+{
+    Pose userdef_pose(msg->position.x, msg->position.y, tf::getYaw(msg->orientation));
+    m_HyperSlamFilter->setRobotPose( userdef_pose, m_ScatterVarXY, m_ScatterVarTheta );
+}
+
+void SlamNode::callbackLaserScan(const sensor_msgs::LaserScan::ConstPtr& msg)
+{
+    m_LaserDataTime = ros::Time::now();//msg->header.stamp; TODO use msg stamp
+    m_LastLaserData = msg;
+}
+
+void SlamNode::callbackOdometry( const nav_msgs::Odometry::ConstPtr& msg) {
+    ros::Time currentOdometryTime = ros::Time::now();//msg->header.stamp; TODO use msg stamp once cu2wd node publishes time in odometry msg
+
+    float odoX = msg->pose.pose.position.x;
+    float odoY = msg->pose.pose.position.y;
+    geometry_msgs::Quaternion quat = msg->pose.pose.orientation;
+    float odoTheta = tf::getYaw(quat);
+
+    Pose currentOdometryPose ( odoX, odoY, odoTheta );
+
+    // check if we have a laserscan in between two odometry readings (or at the same time)
+    bool mappingPossible = ( currentOdometryTime - m_LastMappingTime > m_WaitDuration ) &&
+        ( !m_ReferenceOdometryTime.isZero()) &&
+        ( m_LaserDataTime >= m_ReferenceOdometryTime ) &&
+        ( currentOdometryTime >= m_LaserDataTime );
+
+    if ( mappingPossible )
+    {
+      ros::Time startTime = ros::Time::now();
+      processMeasurements ( currentOdometryTime, currentOdometryPose );
+      ros::Time finishTime = ros::Time::now();
+
+      // send map max. every 500 ms
+      if ( (finishTime - m_LastMapSendTime).toSec() > 0.5 )
+      {
+        sendMapDataMessage();
+        m_LastMapSendTime = finishTime;
+      }
+      sendPositionDataMessage();
+      m_LastPositionSendTime=finishTime;
+      m_LastMappingTime=currentOdometryTime;
+
+      ROS_DEBUG_STREAM( "Pos. data delay: " << (finishTime - startTime).toSec() << "s" );
+      ROS_DEBUG_STREAM("Map send Interval: " << ( finishTime - m_LastPositionSendTime ).toSec() << "s" );
+    }
+    m_ReferenceOdometryPose = currentOdometryPose;
+    m_ReferenceOdometryTime = currentOdometryTime;
+}
+
+void SlamNode::callbackDoMapping(const std_msgs::Bool::ConstPtr &msg)
+{
+    m_DoMapping = msg->data;
+    m_HyperSlamFilter->setMapping ( m_DoMapping );
+    ROS_INFO_STREAM( "Do mapping is set to " << ( m_DoMapping ) );
+}
+
+void SlamNode::callbackResetMap(const std_msgs::Empty::ConstPtr &msg)
+{
+    resetMaps();
+}
+
+void SlamNode::callbackLoadedMap(const nav_msgs::OccupancyGrid::ConstPtr &msg)
+{
+    float res = msg->info.resolution;
+    int height = msg->info.height; // cell size
+    int width = msg->info.width; //cell size
+    if(height!=width) {
+        ROS_ERROR("Height != width in loaded map");
+        return;
+    }
+
+    //convert map vector from ros format to robbie probability array
+    float* map = new float[msg->data.size()];
+     //generate exploredRegion
+     int minX = INT_MIN;
+     int minY = INT_MIN;
+     int maxX = INT_MAX;
+     int maxY = INT_MAX;
+     for(size_t y = 0; y < msg->info.height; y++)
+     {
+         int yOffset = msg->info.width * y;
+         for(size_t x = 0; x < msg->info.width; x++)
+         {
+             int i = yOffset + x;
+             if(msg->data[i] == -1 )
+                 map[i] = 0.5;
+             else
+                 map[i] = msg->data[i]/100.0;
+
+             if(map[i]!=0.5) {
+                 if(minX==INT_MIN || minX > (int)x)
+                     minX = (int)x;
+                 if(minY==INT_MIN || minY > (int)y)
+                     minY = (int)y;
+                 if(maxX==INT_MAX || maxX < (int)x)
+                     maxX = (int)x;
+                 if(maxY==INT_MAX || maxY < (int)y)
+                     maxY = (int)y;
+             }
+         }
+     }
+     Box2D<int> exploredRegion = Box2D<int> ( minX, minY, maxX, maxY );
+     OccupancyMap* occMap = new OccupancyMap(map, msg->info.origin, res, width, exploredRegion);
+     m_HyperSlamFilter->setOccupancyMap( occMap );
+     m_HyperSlamFilter->setMapping( false ); //is this already done by gui message?
+     ROS_INFO_STREAM( "Replacing occupancy map" );
+}
+
+
+void SlamNode::callbackInitialPose(const geometry_msgs::PoseWithCovarianceStamped::ConstPtr& msg)
+{
+    Pose userdef_pose(msg->pose.pose.position.x, msg->pose.pose.position.y, tf::getYaw(msg->pose.pose.orientation));
+    m_HyperSlamFilter->setRobotPose( userdef_pose, m_ScatterVarXY, m_ScatterVarTheta );
+}
+
+void SlamNode::callbackMasking(const nav_msgs::OccupancyGrid::ConstPtr &msg)
+{
+    m_HyperSlamFilter->applyMasking(msg);
+}
+
+/**
+ * @brief main function
+ */
+int main(int argc, char** argv)
+{
+    ros::init(argc, argv, "homer_mapping");
+    ros::NodeHandle nh;
+
+    SlamNode slamNode(&nh);
+
+    ros::Rate loop_rate(12);
+    while (ros::ok())
+    {
+        ros::spinOnce();
+        loop_rate.sleep();
+    }
+    return 0;
+}
+
diff --git a/homer_mapping/src/slam_node.h b/homer_mapping/src/slam_node.h
new file mode 100644
index 0000000000000000000000000000000000000000..803c5c4ba77f4765eb3bd4b9d163d77310572ce1
--- /dev/null
+++ b/homer_mapping/src/slam_node.h
@@ -0,0 +1,186 @@
+#ifndef SLAM_NODE_H
+#define SLAM_NODE_H
+
+#include <vector>
+#include <map>
+
+#include "Math/Pose.h"
+
+#include "tf/transform_broadcaster.h"
+
+#include "sensor_msgs/LaserScan.h"
+#include "nav_msgs/Odometry.h"
+#include "nav_msgs/OccupancyGrid.h"
+#include "geometry_msgs/Pose.h"
+#include "std_msgs/Empty.h"
+#include "std_msgs/Bool.h"
+#include "geometry_msgs/PoseWithCovarianceStamped.h"
+
+
+
+
+class OccupancyMap;
+class SlamFilter;
+class HyperSlamFilter;
+
+/**
+ * @class SlamNode
+ *
+ * @author Malte Knauf, Stephan Wirth, Susanne Maur (RX), David Gossow (RX),
+ *         Christian Fuchs (R12), Nicolai Wojke (R14), Susanne Thierfelder (R16)
+ *
+ *
+ * @brief The Simultaneous localization and mapping module
+ *
+ * This module receives odometry and laser data and computes the
+ * robot's position and a map out of this data. Then it sends a
+ * geometry_msgs/PoseStamped and nav_msgs/OccupancyGrid message.
+ */
+class SlamNode
+{
+
+public:
+
+    /**
+     * The constructor adds the message types and prepares the module for receiving them.
+     */
+    SlamNode(ros::NodeHandle *nh);
+
+    /**
+     * This method initializes the member variables.
+     */
+    virtual void init();
+
+    /**
+     * The destructor deletes the filter thread instance.
+     */
+    virtual ~SlamNode();
+
+private:
+
+    /**
+     * Callback methods for all incoming messages
+     */
+    void callbackLaserScan( const sensor_msgs::LaserScan::ConstPtr& msg );
+    void callbackOdometry( const nav_msgs::Odometry::ConstPtr& msg );
+    void callbackUserDefPose( const geometry_msgs::Pose::ConstPtr& msg );
+    void callbackDoMapping( const std_msgs::Bool::ConstPtr& msg );
+    void callbackResetMap( const std_msgs::Empty::ConstPtr& msg );
+    void callbackLoadedMap( const nav_msgs::OccupancyGrid::ConstPtr& msg );
+    void callbackMasking( const nav_msgs::OccupancyGrid::ConstPtr& msg );
+    void callbackResetHigh(const std_msgs::Empty::ConstPtr& msg);
+	void callbackInitialPose(const geometry_msgs::PoseWithCovarianceStamped::ConstPtr& msg);
+    /**
+     * This function resets the current maps to the initial state.
+     */
+    void resetMaps();
+
+    /**
+     * This function processes the current odometry data in combination with the
+     * last send odometry and laser informations to pass on corresponding data
+     * to the filter threads.
+     *
+     * @param odoTime timestamp of this odometry data
+     * @param currentOdometryPose the current odometry measurements of the robot
+     */
+    void processMeasurements(ros::Time odoTime, Pose currentOdometryPose);
+
+    /**
+     * This method retrieves the current map of the slam filter and sends a map
+     * data message containing the map.
+     */
+    void sendMapDataMessage();
+
+    /**
+     * This method gets the current position from the filter thread and sends it
+     * in a position data message.
+     */
+    void sendPositionDataMessage();
+
+    /**
+     * This variable stores the identification number of a GetPositionDataM.
+     * It is needed for a correct response message.
+     */
+    unsigned int m_LastLaserMessageId;
+
+    /**
+     * This variables stores the last odometry measurement as reference that is used
+     * to compute the pose of the robot during a specific laserscan.
+     */
+    Pose m_ReferenceOdometryPose;
+
+    /**
+     * This variable stores the time of the last odometry measurement as reference
+     * which is used to compute the pose of the robot during a specific laserscan.
+     */
+    ros::Time m_ReferenceOdometryTime;
+
+    /**
+     * This variable stores the time the last map message was sent to be able to
+     * compute the time for the next map send.
+     */
+    ros::Time m_LastMapSendTime;
+    ros::Time m_LastPositionSendTime;
+
+    /**
+     * This variable stores the last laser measurement.
+     */
+    sensor_msgs::LaserScanConstPtr m_LastLaserData;
+
+    /**
+     * This variable stores the time of last laser measurement.
+     */
+    ros::Time m_LaserDataTime;
+
+    /**
+     * time stamp of last particle filter step
+     */
+    ros::Time m_LastMappingTime;
+
+
+    /**
+     * This variable stores a pointer to the hyper slam filter
+     */
+    HyperSlamFilter* m_HyperSlamFilter;
+
+    /**
+     * Scatter variances in self localization.
+     */
+    double m_ScatterVarXY;
+    double m_ScatterVarTheta;
+
+    /**
+     * This variabe is true, if the slam algorithm is used for mapping and
+     * keeps updating the map, false otherwise.
+     */
+    bool m_DoMapping;
+
+    /**
+     * duration to wait between two particle filter steps
+     */
+    ros::Duration m_WaitDuration;
+
+    /**
+     * Broadcasts the transform map -> base_link
+     */
+    tf::TransformBroadcaster m_tfBroadcaster;
+
+    /**
+     * subscribers and publishers
+     */
+    ros::Subscriber m_LaserScanSubscriber;
+    ros::Subscriber m_OdometrySubscriber;
+    ros::Subscriber m_UserDefPoseSubscriber;
+    ros::Subscriber m_DoMappingSubscriber;
+    ros::Subscriber m_ResetMapSubscriber;
+    ros::Subscriber m_LoadMapSubscriber;
+    ros::Subscriber m_MaskingSubscriber;
+    ros::Subscriber m_ResetHighSubscriber;
+	ros::Subscriber m_InitialPoseSubscriber;
+
+    ros::Publisher m_PoseStampedPublisher;
+    ros::Publisher m_SLAMMapPublisher;
+
+};
+
+#endif
diff --git a/homer_nav_libs/CHANGELOG.rst b/homer_nav_libs/CHANGELOG.rst
new file mode 100644
index 0000000000000000000000000000000000000000..d1e43a0c4dd98f715d4b3bbb84211819315890d4
--- /dev/null
+++ b/homer_nav_libs/CHANGELOG.rst
@@ -0,0 +1,60 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package homer_nav_libs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+1.0.11 (2015-12-02)
+-------------------
+
+1.0.10 (2015-12-02)
+-------------------
+* fixed install()
+* Contributors: Niklas Yann Wettengel
+
+1.0.9 (2015-12-01)
+------------------
+* install header files
+* Contributors: Niklas Yann Wettengel
+
+1.0.8 (2015-11-30)
+------------------
+
+1.0.7 (2015-11-28)
+------------------
+* added install()
+* updated changelog
+* Contributors: Niklas Yann Wettengel
+
+1.0.6 (2015-11-27)
+------------------
+* added export tags
+* added eigen as run_depend
+* removed env HOMER_DIR from CMakeLists.txt
+* Contributors: Niklas Yann Wettengel
+
+1.0.5 (2015-11-24)
+------------------
+* added missing files
+* Contributors: Niklas Yann Wettengel
+
+1.0.4 (2015-11-20)
+------------------
+* changed build dependency from libeigen3-dev to eigen
+* Contributors: Niklas Yann Wettengel
+
+1.0.3 (2015-11-20)
+------------------
+* added libeigen3-dev build dependency
+* Contributors: Niklas Yann Wettengel
+
+1.0.2 (2015-11-20)
+------------------
+* added cmake_modules as build dependency in package.xml
+* added Maintainers
+* removed components
+* Raphael as maintainer added
+* Contributors: Niklas Yann Wettengel, Raphael Memmesheimer
+
+1.0.1 (2015-09-08)
+------------------
+* init
+* Contributors: Raphael Memmesheimer
diff --git a/homer_nav_libs/CMakeLists.txt b/homer_nav_libs/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6f3968cd6ec28f1de5378df829445d24f027e218
--- /dev/null
+++ b/homer_nav_libs/CMakeLists.txt
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 2.8.3)
+project(homer_nav_libs)
+
+find_package(catkin REQUIRED 
+  roscpp
+  geometry_msgs
+  tf
+  cmake_modules
+)
+
+find_package(Eigen REQUIRED)
+
+catkin_package(
+	INCLUDE_DIRS src
+	LIBRARIES Explorer SpeedControl MappingMath
+	CATKIN_DEPENDS  roscpp geometry_msgs tf
+	DEPENDS Eigen)
+
+
+include_directories(
+  src
+  ${catkin_INCLUDE_DIRS}
+  ${Eigen_INCLUDE_DIRS}
+)
+
+add_subdirectory(src/Explorer)
+add_subdirectory(src/SpeedControl)
+add_subdirectory(src/Math)
+
+install(DIRECTORY src/ DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION})
diff --git a/homer_nav_libs/README.md b/homer_nav_libs/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..4c31e40eedeadeec620fe3756cad0ab1c5849b4c
--- /dev/null
+++ b/homer_nav_libs/README.md
@@ -0,0 +1,13 @@
+# nav_libs
+
+## Known Issues / Todo's 
+
+Im Package nav_libs ist eine Kopie der Robbie-Bibliothek Math, umbenannt in MappingMath, die nur von homer_mapping benutzt werden soll, solange es keine vernünftige Alternative für die Pose gibt.
+
+## Introduction 
+
+Das Package nav_libs enthält einige Bibliotheken, die vom Package homer_mapping und nav_libs verwendet werden. Außerdem enthält es im Ordner tools die Header-Datei tools.h, die Funktionen zum Transformieren in verschiedene Koordinatenframes enthält. All diese Funktionen befinden sich im namespace "map_tools".
+
+* Die Bibliothek `Explorer` wird von homer_mapping und homer_navigation verwendet und enthält die Pfadplanungsalgorithmen A-Stern sowie die dafür benötigte Datenstruktur der GridMap.
+* Die Bibliothek `SpeedControl` wird von homer_navigation verwendet und  ist dafür zuständig abhängig von den aktuellen Laserdaten die höchstzulässige Geschwindigkeit zu berechnen.
+* Die Bibliothek `MappingMath` wird von homer_mapping verwendet und enthält die Datenstruktur Pose, in der die aktuelle Roboterposition innerhalb der Node gespeichert wird.
diff --git a/homer_nav_libs/package.xml b/homer_nav_libs/package.xml
new file mode 100644
index 0000000000000000000000000000000000000000..401147727e23cd8974b31992936a60c678d37e69
--- /dev/null
+++ b/homer_nav_libs/package.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<package>
+	<name>homer_nav_libs</name>
+	<version>1.0.11</version>
+	<description>The nav_libs package</description>
+
+	<maintainer email="vseib@uni-koblenz.de">Viktor Seib</maintainer>
+	<maintainer email="niyawe@uni-koblenz.de">Niklas Yann Wettengel</maintainer>
+	<maintainer email="heuer@uni-koblenz.de">Gregor Heuer</maintainer>
+	<maintainer email="raphael@uni-koblenz.de">Raphael Memmesheimer</maintainer>
+	<author email="mknauf@uni-koblenz.de">Malte Knauf</author>
+	<license>GPLv3</license>
+
+	<buildtool_depend>catkin</buildtool_depend>
+	<build_depend>geometry_msgs</build_depend>
+	<build_depend>roscpp</build_depend>
+	<build_depend>tf</build_depend>
+	<build_depend>cmake_modules</build_depend>
+	<build_depend>eigen</build_depend>
+
+	<run_depend>roscpp</run_depend>
+	<run_depend>geometry_msgs</run_depend>
+	<run_depend>tf</run_depend>
+	<run_depend>eigen</run_depend>
+
+	<export>
+		<cpp cflags="-I${prefix}/src" lflags="-Wl,-rpath,${prefix}/lib -L${prefix}/lib -lExplorer"/>
+		<cpp cflags="-I${prefix}/src" lflags="-Wl,-rpath,${prefix}/lib -L${prefix}/lib -lMappingMath"/>
+		<cpp cflags="-I${prefix}/src" lflags="-Wl,-rpath,${prefix}/lib -L${prefix}/lib -lSpeedControl"/>
+	</export>
+
+</package>
diff --git a/homer_nav_libs/readme.pdf b/homer_nav_libs/readme.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..98fc92ccae14a8a818948ce4c73a8926f6ad2028
Binary files /dev/null and b/homer_nav_libs/readme.pdf differ
diff --git a/homer_nav_libs/src/Explorer/CMakeLists.txt b/homer_nav_libs/src/Explorer/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0a223eb657f1c15884b9c8afc22a9b7adddf230a
--- /dev/null
+++ b/homer_nav_libs/src/Explorer/CMakeLists.txt
@@ -0,0 +1,7 @@
+set(Explorer_SRC
+  Explorer.cpp
+)
+
+add_library(Explorer ${Explorer_SRC})
+
+install(TARGETS Explorer DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
diff --git a/homer_nav_libs/src/Explorer/Explorer.cpp b/homer_nav_libs/src/Explorer/Explorer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..65a447f22fb939e3c50e64d47488905374e52ad9
--- /dev/null
+++ b/homer_nav_libs/src/Explorer/Explorer.cpp
@@ -0,0 +1,1426 @@
+#include <cmath>
+#include <iostream>
+#include <queue>
+#include <sstream>
+
+#include "tools/tools.h"
+
+#include "Explorer.h"
+
+using namespace std;
+using namespace ExplorerConstants;
+
+Explorer::Explorer ( double minAllowedObstacleDistance, double maxAllowedObstacleDistance,
+             double minSafeObstacleDistance, double maxSafeObstacleDistance,
+             double safePathWeight, double frontierSafenessFactor, int unknownThreshold )
+{
+  ExplorerConstants::UNKNOWN = unknownThreshold;
+
+  m_MinAllowedObstacleDistance = minAllowedObstacleDistance;
+  m_MaxAllowedObstacleDistance = maxAllowedObstacleDistance;
+
+  m_MinSafeObstacleDistance = minSafeObstacleDistance;
+  m_MaxSafeObstacleDistance = maxSafeObstacleDistance;
+
+  m_SafePathWeight = safePathWeight;
+  m_FrontierSafenessFactor = frontierSafenessFactor;
+
+  m_OccupancyMap = 0;
+  m_ObstacleTransform = 0;
+  m_CostTransform = 0;
+  m_TargetMap = 0;
+  m_DrivingDistanceTransform = 0;
+  m_TargetDistanceTransform = 0;
+  m_PathTransform = 0;
+  m_ExplorationTransform = 0;
+  m_DesiredDistance = 0;
+}
+
+Explorer::~Explorer()
+{
+  releaseMaps();
+  releaseMap( m_OccupancyMap );
+}
+
+void Explorer::releaseMaps()
+{
+  releaseMap( m_TargetMap );
+  releaseMap( m_ObstacleTransform );
+  releaseMap( m_CostTransform );
+  releaseMap( m_DrivingDistanceTransform );
+  releaseMap( m_TargetDistanceTransform );
+  releaseMap( m_PathTransform );
+  releaseMap( m_ExplorationTransform );
+}
+
+// SETTERS ////////////////////////////////////////////////////////////////////////////////////////////////
+
+void Explorer::setUnknownThreshold(int unknownTresh)
+{
+    ExplorerConstants::UNKNOWN = unknownTresh;
+}
+
+void Explorer::setAllowedObstacleDistance ( double min, double max )
+{
+  m_MinAllowedObstacleDistance = min;
+  m_MaxAllowedObstacleDistance = max;
+  releaseMaps();
+}
+
+void Explorer::setSafeObstacleDistance ( double min, double max )
+{
+  m_MinSafeObstacleDistance = min;
+  m_MaxSafeObstacleDistance = max;
+  releaseMaps();
+}
+
+void Explorer::setSafePathWeight ( double weight )
+{
+  m_SafePathWeight = weight;
+  releaseMaps();
+}
+
+void Explorer::setFrontierSafenessFactor( double frontierSafenessFactor )
+{
+  m_FrontierSafenessFactor = frontierSafenessFactor;
+  releaseMaps();
+}
+
+void Explorer::setOccupancyMap ( int width, int height, geometry_msgs::Pose origin, int8_t* data )
+{
+  if ( !data ) {
+    ROS_ERROR( "Received 0-pointer." );
+    return;
+  }
+  releaseMaps();
+  releaseMap( m_OccupancyMap );
+  //m_OccupancyMap = new GridMap<unsigned char> ( width, height, data, exploredRegion );
+  m_OccupancyMap = new GridMap<int8_t> ( width, height, data );
+  m_Origin = origin;
+}
+
+
+void Explorer::updateObstacles(int width, int height, geometry_msgs::Pose origin, int8_t* mapData)
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return;
+  }
+  if ( (width != m_OccupancyMap->width()) || (height != m_OccupancyMap->height()) ) {
+    ROS_ERROR_STREAM( "Wrong map size!" );
+    return;
+  }
+  for ( unsigned i=0; i<m_OccupancyMap->width()*m_OccupancyMap->height(); i++ )
+  {
+    int8_t* myMapData=m_OccupancyMap->getDirectAccess(0,0);
+    if ( myMapData[i] != UNKNOWN )
+    {
+      myMapData[i]=mapData[i];
+    }
+  }
+  releaseMaps();
+}
+
+void Explorer::resetExploration()
+{
+  m_DesiredDistance = 0;
+}
+
+void Explorer::setStart ( Eigen::Vector2i start )
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR_STREAM( "Occupancy map is missing." );
+    return;
+  }
+  if (( start.x() <= 1 ) || ( start.y() <= 1 ) || ( start.x() >= m_OccupancyMap->width()-1 ) || ( start.y() >= m_OccupancyMap->height()-1 ) )
+  {
+    ROS_ERROR_STREAM( "Invalid position!" );
+    return;
+  }
+  computeWalkableMaps();
+
+  if ( !isWalkable( start.x(), start.y() ) )
+  {
+    Eigen::Vector2i correctedStart=getNearestWalkablePoint( start );
+    if ( !isWalkable( correctedStart.x(), correctedStart.y() ) )
+    {
+      ROS_ERROR_STREAM( "No walkable position was found on the map!" );
+    } else
+    {
+        ROS_INFO_STREAM("Start position " << start.x() << "," << start.y() <<  " was corrected to " << correctedStart.x() << "," << correctedStart.y());
+    }
+    m_Start = correctedStart;
+    return;
+  }
+  m_Start = start;
+}
+
+
+Eigen::Vector2i Explorer::getNearestAccessibleTarget(Eigen::Vector2i target )
+{
+    // TODO VS
+    ros::Time start = ros::Time::now();
+
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return target;
+  }
+  if ( ( target.x() <= 1 ) || ( target.y() <= 1 ) || ( target.x() >= m_OccupancyMap->width()-1 ) || ( target.y() >= m_OccupancyMap->height()-1 ) )
+  {
+    ROS_ERROR( "Invalid position!" );
+    return target;
+  }
+
+  ROS_ERROR_STREAM("starting: computeApproachableMaps at " << (ros::Time::now() - start));// TODO VS
+  computeApproachableMaps();
+  ROS_ERROR_STREAM("finished: computeApproachableMaps at " << (ros::Time::now() - start));// TODO VS
+  Eigen::Vector2i correctTarget=target;
+
+  if ( !isApproachable( target.x(), target.y() ) )
+  {
+      ROS_INFO_STREAM("target cell in drivingdistancetransform: " << m_DrivingDistanceTransform->getValue ( target.x(), target.y() ));
+      ROS_INFO_STREAM("target " << target << " is not approachable. Correcting target...");
+    ROS_ERROR_STREAM("starting iteration over obstacle transform at " << (ros::Time::now() - start));// TODO VS
+    int minSqrDist=INT_MAX;
+    computeWalkableMaps();
+    for ( int x = 0; x < m_ObstacleTransform->height(); x++ )
+    {
+      for ( int y = 0; y < m_ObstacleTransform->width(); y++ )
+      {
+        if ( isApproachable ( x,y ) && isWalkable( x , y) )
+        {
+          int xDiff = target.x() - x;
+          int yDiff = target.y() - y;
+          int sqrDist = xDiff*xDiff + yDiff*yDiff;
+          if ( sqrDist < minSqrDist )
+          {
+            correctTarget.x() = x;
+            correctTarget.y() = y;
+            minSqrDist = sqrDist;
+          }
+        }
+      }
+    }
+    ROS_ERROR_STREAM("finished iteration over obstacle transform at " << (ros::Time::now() - start));// TODO VS
+  }
+  ROS_DEBUG_STREAM("Target position " << target.x() << "," << target.y() << " was corrected to " << correctTarget.x() << "," << correctTarget.y());
+
+  return correctTarget;
+}
+
+
+Eigen::Vector2i Explorer::getNearestWalkablePoint( Eigen::Vector2i target )
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return target;
+  }
+  if (( target.x() <= 1 ) || ( target.y() <= 1 ) || ( target.x() >= m_OccupancyMap->width()-1 ) || ( target.y() >= m_OccupancyMap->height()-1 ) )
+  {
+    ROS_ERROR( "Invalid position!" );
+    return target;
+  }
+
+  computeWalkableMaps();
+  Eigen::Vector2i correctTarget=target;
+
+
+  if ( !isWalkable( target.x(), target.y() ) )
+  {
+    int minSqrDist=INT_MAX;
+    for ( int x = 0; x < m_ObstacleTransform->height(); x++ )
+    {
+      for ( int y = 0; y < m_ObstacleTransform->width(); y++ )
+      {
+        if ( isWalkable ( x,y ) )
+        {
+          int xDiff = target.x() - x;
+          int yDiff = target.y() - y;
+          int sqrDist = xDiff*xDiff + yDiff*yDiff;
+          if ( sqrDist < minSqrDist )
+          {
+            correctTarget.x() = x;
+            correctTarget.y() = y;
+            minSqrDist = sqrDist;
+          }
+        }
+      }
+    }
+  }
+  ROS_DEBUG_STREAM("Position " << target.x() << "," << target.y() << " was corrected to " << correctTarget.x() << "," << correctTarget.y());
+
+  return correctTarget;
+}
+
+
+void Explorer::setTarget (Eigen::Vector2i target )
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return;
+  }
+  if ( ( target.x() <= 1 ) || ( target.y() <= 1 ) || ( target.x() >= m_OccupancyMap->width()-1 ) || ( target.y() >= m_OccupancyMap->height()-1 ) )
+  {
+    ROS_ERROR( "Invalid position!" );
+    return;
+  }
+  computeApproachableMaps();
+  if ( !isApproachable ( target.x(), target.y() ) )
+  {
+    ROS_WARN( "Target position is not approachable. Path computation will possibly fail." );
+  }
+  m_Target = target;
+  m_DesiredDistance = 0;
+}
+
+
+void Explorer::setTarget (Eigen::Vector2i target, int desiredDistance )
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return;
+  }
+  
+  if ( desiredDistance < 1 )
+  {
+    setTarget( target );
+    return;
+  }
+  
+  if ( target.x() + desiredDistance <= 1 || target.x() - desiredDistance >= m_OccupancyMap->width()-1 ||
+       target.y() + desiredDistance <= 1 || target.y() - desiredDistance >= m_OccupancyMap->height()-1 )
+  {
+    ROS_ERROR( "Invalid position" );
+    return;
+  }
+  computeApproachableMaps();
+  // TODO: check if region is approachable
+  m_Target = target;
+  m_DesiredDistance = desiredDistance;
+}
+
+
+// GETTERS ////////////////////////////////////////////////////////////////////////////////////////////////
+
+Eigen::Vector2i Explorer::getStart() const
+{
+  return m_Start;
+}
+
+Eigen::Vector2i Explorer::getTarget() const
+{
+  return m_Target;
+}
+
+GridMap<int8_t>* Explorer::getOccupancyMap()
+{
+  return m_OccupancyMap;
+}
+
+GridMap<double>* Explorer::getObstacleTransform()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return 0;
+  }
+  computeObstacleTransform();
+  return m_ObstacleTransform;
+}
+
+GridMap<double>* Explorer::getCostTransform()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return 0;
+  }
+  computeCostTransform();
+  return m_CostTransform;
+}
+
+GridMap<bool>* Explorer::getTargetMap()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return 0;
+  }
+
+  computeTargetMap();
+  return m_TargetMap;
+}
+
+GridMap<double>* Explorer::getDrivingDistanceTransform()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return 0;
+  }
+  computeDrivingDistanceTransform();
+  return m_DrivingDistanceTransform;
+}
+
+GridMap<double>* Explorer::getTargetDistanceTransform()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return 0;
+  }
+  computeTargetDistanceTransform();
+  return m_TargetDistanceTransform;
+}
+
+GridMap<double>* Explorer::getPathTransform()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return 0;
+  }
+  computePathTransform();
+  return m_PathTransform;
+}
+
+GridMap<double>* Explorer::getExplorationTransform()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return 0;
+  }
+  computeExplorationTransform();
+  return m_ExplorationTransform;
+}
+
+
+
+// MAP GENERATION ////////////////////////////////////////////////////////////////////////////////////////////////7
+
+
+void Explorer::computeApproachableMaps()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return;
+  }
+  computeDrivingDistanceTransform();
+}
+
+
+void Explorer::computeWalkableMaps()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return;
+  }
+  computeObstacleTransform();
+}
+
+
+void Explorer::computeDrivingDistanceTransform()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return;
+  }
+
+  if ( m_DrivingDistanceTransform ) { return; }
+
+  ROS_DEBUG( "Computing drivingDistanceTransform..."  );
+  resetMap( m_DrivingDistanceTransform );
+  distanceFloodFill ( m_DrivingDistanceTransform, m_Start );
+}
+
+
+void Explorer::computeTargetDistanceTransform()
+{
+  if ( !m_OccupancyMap )
+  {
+    ROS_ERROR( "Occupancy map is missing." );
+    return;
+  }
+
+  if ( m_TargetDistanceTransform ) { return; }
+
+  ROS_DEBUG( "Computing targetDistanceTransform..."  );
+  resetMap( m_TargetDistanceTransform );
+  distanceFloodFill ( m_TargetDistanceTransform, m_Target );
+}
+
+
+void Explorer::computeRegionMap()
+{
+  if ( !m_OccupancyMap) {
+    ROS_ERROR( "Occupancy map is missing." );
+    return;
+  }
+  
+  resetMap( m_TargetMap );
+  ROS_DEBUG( "Computing target region map..."  );
+  
+  m_TargetMap->fill( false );
+  const int desiredDistanceSquared = m_DesiredDistance * m_DesiredDistance;
+  int height = m_OccupancyMap->height();
+  int width = m_OccupancyMap->width();
+  
+  // draw a circle onto the ExplorationMap
+  const int firstX = m_Target.x() - m_DesiredDistance <= 1 ? 2 : m_Target.x() - m_DesiredDistance;
+  const int firstY = m_Target.y() - m_DesiredDistance <= 1 ? 2 : m_Target.y() - m_DesiredDistance;
+  const int lastX  = m_Target.x() + m_DesiredDistance >= width-1  ? width-2  : m_Target.x() + m_DesiredDistance;
+  const int lastY  = m_Target.y() + m_DesiredDistance >= height-1 ? height-2 : m_Target.y() + m_DesiredDistance;
+  
+  for ( int y = firstY; y <= lastY; ++y )
+  {
+    for ( int x = firstX; x <= lastX; ++x ) 
+    {
+      const int dx = x - m_Target.x();
+      const int dy = y - m_Target.y();
+      
+      if ( dx*dx + dy*dy <= desiredDistanceSquared )
+      {
+        m_TargetMap->setValue( x, y, true );
+      }
+    }
+  }
+}
+
+void Explorer::computeFrontierMap()
+{
+  if ( !m_OccupancyMap) {
+    ROS_ERROR( "Occupancy map is missing." );
+    return;
+  }
+
+  // if ( m_FrontierMap ) { return; }
+
+  resetMap( m_TargetMap );
+  
+  ROS_DEBUG( "Computing frontier map..."  );
+  m_TargetMap->fill ( 0 );
+  // extract borders
+  for ( int y = 1; y < m_OccupancyMap->height() - 1; y++ )
+  {
+    for ( int x = 1; x < m_OccupancyMap->width() - 1; x++ )
+    {
+      int value = m_OccupancyMap->getValue ( x, y );
+      int value_u = m_OccupancyMap->getValue ( x, y - 1 );
+      int value_d = m_OccupancyMap->getValue ( x, y + 1 );
+      int value_l = m_OccupancyMap->getValue ( x - 1, y );
+      int value_r = m_OccupancyMap->getValue ( x + 1, y );
+      bool isFree = value < UNKNOWN && value != NOT_SEEN_YET;
+      bool upUnknown = (value_u == UNKNOWN || value_u == NOT_SEEN_YET);
+      bool downUnknown = (value_d == UNKNOWN || value_u == NOT_SEEN_YET);
+      bool leftUnknown = (value_l == UNKNOWN || value_u == NOT_SEEN_YET);
+      bool rightUnknown = (value_r == UNKNOWN || value_u == NOT_SEEN_YET);
+      bool hasUnknownNeighbour = upUnknown || downUnknown || leftUnknown || rightUnknown;
+      bool isSafe = m_ObstacleTransform->getValue ( x, y ) > m_FrontierSafenessFactor * m_MinAllowedObstacleDistance;
+      if ( isFree && hasUnknownNeighbour && isSafe )
+      {
+        m_TargetMap->setValue ( x, y, 1 );
+      }
+      else
+      {
+        m_TargetMap->setValue ( x, y, 0 );
+      }
+    }
+  }
+}
+
+void Explorer::computeTargetMap()
+{
+  if ( m_DesiredDistance < 1 )
+  {
+    computeFrontierMap();
+  }
+  else
+  {     
+    computeRegionMap();
+  }
+}
+
+void Explorer::computeObstacleTransform()
+{
+  if ( !m_OccupancyMap) {
+    ROS_ERROR( "Missing occupancy map. Aborting." );
+    return;
+  }
+
+  if ( m_ObstacleTransform ) { return; }
+
+  resetMap( m_ObstacleTransform );
+
+  ROS_DEBUG( "Computing obstacle transform..."  );
+  for ( int x = 0; x < m_ObstacleTransform->width(); x++ )
+  {
+    for ( int y = 0; y < m_ObstacleTransform->height(); y++ )
+    {
+      if ( m_OccupancyMap->getValue ( x, y ) > UNKNOWN ||
+           m_OccupancyMap->getValue(x, y) == NOT_SEEN_YET)
+      {
+        m_ObstacleTransform->setValue ( x, y, 0 );
+      }
+      else
+      {
+        m_ObstacleTransform->setValue ( x, y, OBSTACLE );
+      }
+    }
+  }
+
+  int width = m_ObstacleTransform->width();
+  int height = m_ObstacleTransform->height();
+  double* f = new double[width > height ? width : height];
+
+  // transform along columns
+  for ( int x = 0; x < width; x++ )
+  {
+    for ( int y = 0; y < height; y++ )
+    {
+      // copy column
+      f[y] = m_ObstacleTransform->getValue ( x, y );
+    }
+    // 1-D transform of column
+    double* d = distanceTransform1D ( f, height );
+    // copy transformed 1-D to output image
+    for ( int y = 0; y < height; y++ )
+    {
+      m_ObstacleTransform->setValue ( x, y, d[y] );
+    }
+    delete [] d;
+  }
+
+  // transform along rows
+  for ( int y = 0; y < height; y++ )
+  {
+    for ( int x = 0; x < width; x++ )
+    {
+      f[x] = m_ObstacleTransform->getValue ( x, y );
+    }
+    double* d = distanceTransform1D ( f, width );
+    for ( int x = 0; x < width; x++ )
+    {
+      m_ObstacleTransform->setValue ( x, y, d[x] );
+    }
+    delete [] d;
+  }
+  delete f;
+
+  // take square roots
+  for ( int y = 0; y < m_ObstacleTransform->height(); y++ )
+  {
+    for ( int x = 0; x < m_ObstacleTransform->width(); x++ )
+    {
+      if ( isWalkable( x,y ) )
+      {
+        float value = sqrt ( m_ObstacleTransform->getValue ( x, y ) );
+        m_ObstacleTransform->setValue ( x, y, value );
+      }
+    }
+  }
+}
+
+
+void Explorer::computeCostTransform()
+{
+  if ( !m_OccupancyMap) {
+    ROS_ERROR( "Missing occupancy map. Aborting." );
+    return;
+  }
+
+  if ( m_CostTransform ) { return; }
+
+  computeObstacleTransform();
+  computeApproachableMaps();
+
+  resetMap( m_CostTransform );
+  m_CostTransform->fill( ExplorerConstants::MAX_COST );
+
+  for ( unsigned y=0; y<m_CostTransform->height(); y++)
+  {
+    for ( unsigned x=0; x<m_CostTransform->width(); x++)
+    {
+      if ( !isApproachable( x, y ) ) {
+        continue;
+      }
+      double dist = m_ObstacleTransform->getValue(x, y);
+      double cost = 0;
+      if ( dist < m_MinSafeObstacleDistance ) {
+        cost = m_MinSafeObstacleDistance - dist;
+      }
+      if ( dist > m_MaxSafeObstacleDistance ) {
+        cost = dist - m_MaxSafeObstacleDistance;
+      }
+      m_CostTransform->setValue( x, y, cost * cost );
+    }
+  }
+}
+
+
+void Explorer::computePathTransform()
+{
+  if ( !m_OccupancyMap) {
+    ROS_ERROR( "Missing occupancy map. Aborting." );
+    return;
+  }
+
+  if ( m_PathTransform ) { return; }
+
+  computeObstacleTransform();
+  computeCostTransform();
+
+  resetMap( m_PathTransform );
+
+  ROS_DEBUG( "Computing path transform..."  );
+  GridMap<double>* map = m_PathTransform;
+  int width = map->width();
+  int height = map->height();
+  double maxDistance = MAX_DISTANCE;
+  map->fill ( maxDistance );
+
+  int fromX = m_Target.x();
+  int fromY = m_Target.y();
+  map->setValue ( fromX, fromY, 0 );
+
+  queue<int> xQueue;
+  queue<int> yQueue;
+  xQueue.push ( fromX + 1 );
+  yQueue.push ( fromY );
+  xQueue.push ( fromX - 1 );
+  yQueue.push ( fromY );
+  xQueue.push ( fromX );
+  yQueue.push ( fromY - 1 );
+  xQueue.push ( fromX );
+  yQueue.push ( fromY + 1 );
+  int xVal, yVal;
+  while ( !xQueue.empty() )
+  {
+    xVal = xQueue.front();
+    yVal = yQueue.front();
+    xQueue.pop();
+    yQueue.pop();
+    if ( xVal > 0 && xVal < width - 1 && yVal > 0 && yVal < height - 1 && isWalkable( xVal, yVal ) )
+    {
+      float value = map->getValue ( xVal, yVal );
+      float value_u = map->getValue ( xVal, yVal - 1 ) + 1;
+      float value_d = map->getValue ( xVal, yVal + 1 ) + 1;
+      float value_l = map->getValue ( xVal - 1, yVal ) + 1;
+      float value_r = map->getValue ( xVal + 1, yVal ) + 1;
+
+      float value_ur = map->getValue ( xVal + 1, yVal - 1 ) + 1.4142;
+      float value_ul = map->getValue ( xVal - 1, yVal - 1 ) + 1.4142;
+      float value_ll = map->getValue ( xVal - 1, yVal + 1 ) + 1.4142;
+      float value_lr = map->getValue ( xVal + 1, yVal + 1 ) + 1.4142;
+
+      float min1 = value_u < value_d ? value_u : value_d;
+      float min2 = value_l < value_r ? value_l : value_r;
+      float min3 = value_ur < value_ul ? value_ur : value_ul;
+      float min4 = value_ll < value_lr ? value_ll : value_lr;
+      float min12 = min1 < min2 ? min1 : min2;
+      float min34 = min3 < min4 ? min3 : min4;
+      float min = min12 < min34 ? min12 : min34;
+      float newVal = min + m_SafePathWeight * m_CostTransform->getValue( xVal, yVal );
+      if ( value > newVal )
+      {
+        map->setValue ( xVal, yVal, newVal );
+        if ( map->getValue ( xVal, yVal + 1 ) > newVal + 1 )
+        {
+          xQueue.push ( xVal );
+          yQueue.push ( yVal + 1 );
+        }
+        if ( map->getValue ( xVal, yVal - 1 ) > newVal + 1 )
+        {
+          xQueue.push ( xVal );
+          yQueue.push ( yVal - 1 );
+        }
+        if ( map->getValue ( xVal + 1, yVal ) > newVal + 1 )
+        {
+          xQueue.push ( xVal + 1 );
+          yQueue.push ( yVal );
+        }
+        if ( map->getValue ( xVal - 1, yVal ) > newVal + 1 )
+        {
+          xQueue.push ( xVal - 1 );
+          yQueue.push ( yVal );
+        }
+        if ( map->getValue ( xVal + 1, yVal - 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal + 1 );
+          yQueue.push ( yVal - 1 );
+        }
+        if ( map->getValue ( xVal - 1, yVal - 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal - 1 );
+          yQueue.push ( yVal - 1 );
+        }
+        if ( map->getValue ( xVal + 1, yVal + 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal + 1 );
+          yQueue.push ( yVal + 1 );
+        }
+        if ( map->getValue ( xVal - 1, yVal + 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal - 1 );
+          yQueue.push ( yVal + 1 );
+        }
+      }
+    }
+  }
+}
+
+
+void Explorer::computeExplorationTransform()
+{
+  if ( !m_OccupancyMap) {
+    ROS_ERROR( "Missing occupancy map. Aborting." );
+    return;
+  }
+
+  if ( m_ExplorationTransform ) { return; }
+
+  ROS_INFO_STREAM("computeExplorationTransform: before obstacle transform");
+  computeObstacleTransform();
+  ROS_INFO_STREAM("computeExplorationTransform: before cost transform");
+  computeCostTransform();
+  ROS_INFO_STREAM("computeExplorationTransform: before target map");
+  computeTargetMap();
+  ROS_INFO_STREAM("computeExplorationTransform: before walkable maps");
+  computeWalkableMaps();
+  ROS_INFO_STREAM("computeExplorationTransform: before exploration transform");
+  resetMap( m_ExplorationTransform );
+
+  ROS_DEBUG( "Computing exploration transform..."  );
+  GridMap<double>* map = m_ExplorationTransform;
+  int width = map->width();
+  int height = map->height();
+  double maxDistance = MAX_DISTANCE;
+  map->fill ( maxDistance );
+  queue<int> xQueue;
+  queue<int> yQueue;
+  // fill seeds: Mark the frontiers as targets
+  ROS_INFO_STREAM("computeExplorationTransform: before first loop");
+  for ( int y = 0; y < m_TargetMap->height(); y++ )
+  {
+    for ( int x = 0; x < m_TargetMap->width(); x++ )
+    {
+      if ( m_TargetMap->getValue ( x, y ) == 1 )
+      {
+        map->setValue ( x, y, 0 );
+        xQueue.push ( x + 1 );
+        yQueue.push ( y );
+        xQueue.push ( x - 1 );
+        yQueue.push ( y );
+        xQueue.push ( x );
+        yQueue.push ( y - 1 );
+        xQueue.push ( x );
+        yQueue.push ( y + 1 );
+      }
+    }
+  }
+  ROS_INFO_STREAM("computeExplorationTransform: After first looop");
+  // Now go through the coordinates in the queue
+  int xVal, yVal;
+  ROS_INFO_STREAM("computeExplorationTransform: before while loop");
+  while ( !xQueue.empty() )
+  {
+    xVal = xQueue.front();
+    yVal = yQueue.front();
+    xQueue.pop();
+    yQueue.pop();
+    if ( xVal > 0 && xVal < width - 1 && yVal > 0 && yVal < height - 1 && isWalkable ( xVal, yVal ) )
+    {
+      // Get own cost and the cost of the 8 neighbor cells (neighbors plus the cost to go there)
+      float value = map->getValue ( xVal, yVal );
+      float value_u = map->getValue ( xVal, yVal - 1 ) + 1;
+      float value_d = map->getValue ( xVal, yVal + 1 ) + 1;
+      float value_l = map->getValue ( xVal - 1, yVal ) + 1;
+      float value_r = map->getValue ( xVal + 1, yVal ) + 1;
+      float value_ur = map->getValue ( xVal + 1, yVal - 1 ) + 1.4142;
+      float value_ul = map->getValue ( xVal - 1, yVal - 1 ) + 1.4142;
+      float value_ll = map->getValue ( xVal - 1, yVal + 1 ) + 1.4142;
+      float value_lr = map->getValue ( xVal + 1, yVal + 1 ) + 1.4142;
+      float min1 = value_u < value_d ? value_u : value_d;
+      float min2 = value_l < value_r ? value_l : value_r;
+      float min3 = value_ur < value_ul ? value_ur : value_ul;
+      float min4 = value_ll < value_lr ? value_ll : value_lr;
+      float min12 = min1 < min2 ? min1 : min2;
+      float min34 = min3 < min4 ? min3 : min4;
+      float min = min12 < min34 ? min12 : min34;
+      float newVal = min + m_SafePathWeight * m_CostTransform->getValue( xVal, yVal );
+      if ( value > newVal )
+      {
+        // Cost is lower then the currently known cost: Reduce cost here
+        map->setValue ( xVal, yVal, newVal );
+        // Add the neighbours that might profit in the queue
+        if ( map->getValue ( xVal, yVal + 1 ) > newVal + 1 )
+        {
+          xQueue.push ( xVal );
+          yQueue.push ( yVal + 1 );
+        }
+        if ( map->getValue ( xVal, yVal - 1 ) > newVal + 1 )
+        {
+          xQueue.push ( xVal );
+          yQueue.push ( yVal - 1 );
+        }
+        if ( map->getValue ( xVal + 1, yVal ) > newVal + 1 )
+        {
+          xQueue.push ( xVal + 1 );
+          yQueue.push ( yVal );
+        }
+        if ( map->getValue ( xVal - 1, yVal ) > newVal + 1 )
+        {
+          xQueue.push ( xVal - 1 );
+          yQueue.push ( yVal );
+        }
+        if ( map->getValue ( xVal + 1, yVal - 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal + 1 );
+          yQueue.push ( yVal - 1 );
+        }
+        if ( map->getValue ( xVal - 1, yVal - 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal - 1 );
+          yQueue.push ( yVal - 1 );
+        }
+        if ( map->getValue ( xVal + 1, yVal + 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal + 1 );
+          yQueue.push ( yVal + 1 );
+        }
+        if ( map->getValue ( xVal - 1, yVal + 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal - 1 );
+          yQueue.push ( yVal + 1 );
+        }
+      }
+    }
+  }
+  ROS_INFO_STREAM("computeExplorationTransform: after exploration transform");
+}
+
+
+vector<Eigen::Vector2i> Explorer::sampleWaypointsFromPath ( std::vector<Eigen::Vector2i> pathPoints, float threshold )
+{
+  if ( !m_OccupancyMap) {
+    ROS_ERROR( "Missing occupancy map. Aborting." );
+    return pathPoints;
+  }
+  if ( pathPoints.size() < 3 ) {
+    return pathPoints;
+  }
+
+  computeObstacleTransform();
+
+  vector<Eigen::Vector2i> simplifiedPath;
+  simplifiedPath.reserve( pathPoints.size() );
+
+  Eigen::Vector2i lastAddedPoint = pathPoints[0];
+  simplifiedPath.push_back ( lastAddedPoint );
+
+  for ( unsigned int i = 1; i < pathPoints.size() - 1; i++ )
+  {
+    double distanceToNextPoint = map_tools::distance(lastAddedPoint, pathPoints.at(i));
+    double obstacleDistanceLastAddedPoint = m_ObstacleTransform->getValue ( lastAddedPoint.x(), lastAddedPoint.y() );
+    double obstacleDistancePossibleNextPoint = m_ObstacleTransform->getValue ( pathPoints[i].x(), pathPoints[i].y() );
+    if (( distanceToNextPoint >= obstacleDistanceLastAddedPoint*threshold ) ||
+        ( distanceToNextPoint >= obstacleDistancePossibleNextPoint*threshold )  )
+    {
+      simplifiedPath.push_back ( pathPoints[i] );
+      lastAddedPoint = pathPoints[i];
+    }
+  }
+  simplifiedPath.push_back ( pathPoints[pathPoints.size() - 1] );
+  return simplifiedPath;
+}
+
+
+std::vector<Eigen::Vector2i> Explorer::getPath(bool& success)
+{
+  success = false;
+  
+  if ( !m_OccupancyMap) {
+    ROS_ERROR( "Missing occupancy map. Aborting." );
+    return vector<Eigen::Vector2i>();
+  }
+  
+  if ( m_DesiredDistance > 0 ) {
+    // we are actually performing an exploration since the target
+    // is a region.
+      ROS_INFO_STREAM("Desired Distance > 0: Executing getExplorationTransformPath");
+    return getExplorationTransformPath( success );
+  }
+  ROS_INFO_STREAM("Computing Path Transform");
+  computePathTransform();
+  ROS_INFO_STREAM("Finished Path Transform");
+  /*
+  ROS_INFO_STREAM("Explorer: Path Transform: " << m_TargetDistanceTransform->width() << " " << m_TargetDistanceTransform->height());
+  ROS_INFO_STREAM("---------------------");
+  for(int x = 0; x < 10; x++) {
+      std::stringstream str;
+      str << "|";
+      for(int y = 0; y < 10; y++) {
+          str << (double)(m_TargetDistanceTransform->getValue(x, y)) << "|";
+      }
+    ROS_INFO(str.str().c_str());
+  }
+  ROS_INFO_STREAM("---------------------");
+    */
+  vector<Eigen::Vector2i> path;
+
+  int x = m_Start.x();
+  int y = m_Start.y();
+
+  int width = m_OccupancyMap->width();
+  int height = m_OccupancyMap->height();
+
+  //special case: start and end point are equal, return single waypoint
+  if ( map_tools::distance( m_Start, m_Target ) < 2.0 )
+  {
+    success = true;
+    path.push_back ( Eigen::Vector2i( m_Start.x(), m_Start.y() ) );
+    return path;
+  }
+
+  while ( x != m_Target.x() || y != m_Target.y() )
+  {
+    path.push_back ( Eigen::Vector2i( x, y ) );
+    int minPosX = x;
+    int minPosY = y;
+    double min = m_PathTransform->getValue ( x, y );
+
+    if ( ( x <= 1 ) || ( y <= 1 ) || ( x >= width-1 ) || ( y >= height-1 ) )
+    {
+      ROS_ERROR( "Out of map bounds" );
+      return vector<Eigen::Vector2i>();
+    }
+
+    for ( int i = -1; i <= 1; i++ )
+    {
+      for ( int j = -1; j <= 1; j++ )
+      {
+        double pt = m_PathTransform->getValue ( x + i, y + j );
+        if ( pt < min )
+        {
+          min = pt;
+          minPosX = x + i;
+          minPosY = y + j;
+        }
+      }
+    }
+    if ( minPosX == x && minPosY == y )
+    {
+      ROS_WARN( "Target is unreachable!" );
+      return vector<Eigen::Vector2i>();
+    }
+    else
+    {
+      x = minPosX;
+      y = minPosY;
+    }
+  }
+  success = true;
+
+  return path;
+}
+
+vector<Eigen::Vector2i> Explorer::getExplorationTransformPath(bool& success)
+{
+  success = false;
+
+  if ( !m_OccupancyMap) {
+    ROS_ERROR( "Missing occupancy map. Aborting." );
+    return vector<Eigen::Vector2i>();
+  }
+  
+  ROS_INFO_STREAM("Exploration Transform: Before obstacle transform");
+  computeObstacleTransform();
+  ROS_INFO_STREAM("Exploration Transform: Before exploration transform");
+  computeExplorationTransform();
+  ROS_INFO_STREAM("Exploration Transform: after obstacle transform");
+  
+  //check if we are already there
+  if ( m_TargetMap->getValue ( m_Start.x(), m_Start.y() ) )
+  {
+    success = true;
+    vector<Eigen::Vector2i> path;
+    path.push_back ( Eigen::Vector2i ( m_Start.x(), m_Start.y() ) );
+    return path;
+  }
+
+  int width = m_OccupancyMap->width();
+  int height = m_OccupancyMap->height();
+
+  vector<Eigen::Vector2i> path;
+  int x = m_Start.x();
+  int y = m_Start.y();
+
+  if ( m_ObstacleTransform->getValue ( x, y ) < m_MinAllowedObstacleDistance )
+  {
+    // robot got stuck!
+    // find way out using ObstacleTransform...
+    int maxPosX = x;
+    int maxPosY = y;
+
+    if ( ( x <= 1 ) || ( y <= 1 ) || ( x >= width-1 ) || ( y >= height-1 ) )
+    {
+      ROS_ERROR( "Out of map bounds" );
+      return vector<Eigen::Vector2i>();
+    }
+
+    while ( m_ObstacleTransform->getValue ( maxPosX, maxPosY ) < m_MinAllowedObstacleDistance )
+    {
+      double max = m_ObstacleTransform->getValue ( x, y );
+      for ( int i = -1; i <= 1; i++ )
+      {
+        for ( int j = -1; j <= 1; j++ )
+        {
+          double pt = m_ObstacleTransform->getValue ( x + i, y + j );
+          if ( pt > max )
+          {
+            max = pt;
+            maxPosX = x + i;
+            maxPosY = y + j;
+          }
+        }
+      }
+      if ( maxPosX == x && maxPosY == y ) // no ascentFound
+      {
+        break;
+      }
+      else
+      {
+        path.push_back ( Eigen::Vector2i ( maxPosX, maxPosY ) );
+        x = maxPosX;
+        y = maxPosY;
+      }
+    }
+  }
+  // now path is "free"
+  bool descentFound = true;
+  while ( descentFound )
+  {
+    descentFound = false;
+    int minPosX = x;
+    int minPosY = y;
+    double min = m_ExplorationTransform->getValue ( x, y );
+    if ( ( x <= 1 ) || ( y <= 1 ) || ( x >= width-1 ) || ( y >= height-1 ) )
+    {
+      ROS_ERROR( "Out of map bounds" );
+      return vector<Eigen::Vector2i>();
+    }
+
+    for ( int i = -1; i <= 1; i++ )
+    {
+      for ( int j = -1; j <= 1; j++ )
+      {
+        double pt = m_ExplorationTransform->getValue ( x + i, y + j );
+        if ( pt < min )
+        {
+          min = pt;
+          minPosX = x + i;
+          minPosY = y + j;
+        }
+      }
+    }
+    if ( minPosX == x && minPosY == y ) // no descentFound
+    {
+      descentFound = false;
+    }
+    else
+    {
+      descentFound = true;
+      path.push_back ( Eigen::Vector2i ( minPosX, minPosY ) );
+      x = minPosX;
+      y = minPosY;
+    }
+  }
+  success = true;
+
+  ROS_INFO_STREAM("Exploration Transform: End of function");
+  return path;
+
+#if 0  
+  // START P2AT HACK
+  vector< Eigen::Vector2i > newPath;
+  for ( unsigned start=0; start<path.size()-1; ++start )
+  {
+    int maxVal = start+1;
+    for ( unsigned end=start+1; end<path.size(); ++end )
+    {
+      bool ok = true;
+      // draw bresenham line and check wether an object is within maximum allowed distance
+      // THANKS TO WIKIPEDIA 
+      int x, y, t, dx, dy, incx, incy, pdx, pdy, ddx, ddy, es, el, err;
+      /* Entfernung in beiden Dimensionen berechnen */
+      dx = path[end].x() - path[start].x();
+      dy = path[end].y() - path[start].y();
+      /* Vorzeichen des Inkrements bestimmen */
+      incx = (dx > 0) ? 1 : (dx < 0) ? -1 : 0;
+      incy = (dy > 0) ? 1 : (dy < 0) ? -1 : 0;
+      if(dx<0) dx = -dx;
+      if(dy<0) dy = -dy;
+      /* feststellen, welche Entfernung größer ist */
+      if (dx>dy)
+      {
+        /* x ist schnelle Richtung */
+        pdx=incx; pdy=0;    /* pd. ist Parallelschritt */
+        ddx=incx; ddy=incy; /* dd. ist Diagonalschritt */
+        es =dy;   el =dx;   /* Fehlerschritte schnell, langsam */
+      } else
+      {
+        /* y ist schnelle Richtung */
+        pdx=0;    pdy=incy; /* pd. ist Parallelschritt */
+        ddx=incx; ddy=incy; /* dd. ist Diagonalschritt */
+        es =dx;   el =dy;   /* Fehlerschritte schnell, langsam */
+      }
+      /* Initialisierungen vor Schleifenbeginn */
+      x = path[start].x();
+      y = path[start].y();
+      err = el/2;
+      /* Pixel berechnen */
+      for(t=0; t<el; ++t) /* t zaehlt die Pixel, el ist auch Anzahl */
+      {
+        /* Aktualisierung Fehlerterm */
+        err -= es; 
+        if(err<0)
+        {
+          /* Fehlerterm wieder positiv (>=0) machen */
+          err += el;
+          /* Schritt in langsame Richtung, Diagonalschritt */
+          x += ddx;
+          y += ddy;
+        } else
+        {
+          /* Schritt in schnelle Richtung, Parallelschritt */
+          x += pdx;
+          y += pdy;
+        }
+      
+        // --- start: check if obstacle around
+        if ( m_ObstacleTransform->getValue ( x, y ) < m_MinAllowedObstacleDistance )
+        {
+          ok = false;
+          break;
+        }
+        // --- end  : check if obstacle around
+      } // Pixel berechnen
+      
+      if ( ok )
+      {
+        maxVal = end;
+      }
+    } // for: inner
+    newPath.push_back( path[maxVal] );
+    start = maxVal; // incremented by foor loop to max+1
+  } // for: outer
+  // END: P2AT HACK
+
+  success = true;
+  return newPath;
+#endif
+}
+
+
+bool Explorer::getNearestFrontier ( Eigen::Vector2i& nextFrontier )
+{
+  if ( !m_OccupancyMap) {
+    ROS_ERROR( "Missing occupancy map. Aborting." );
+    return false;
+  }
+
+  computeFrontierMap();
+  computeDrivingDistanceTransform();
+
+  bool found = false;
+  int distXPos = -1;
+  int distYPos = -1;
+  double dist = 10000000;
+  for ( int y = 0; y < m_TargetMap->height(); y++ )
+  {
+    for ( int x = 0; x < m_TargetMap->width(); x++ )
+    {
+      if ( m_TargetMap->getValue ( x, y ) == 1 && m_DrivingDistanceTransform->getValue ( x, y ) < 999999 )
+      {
+        if ( m_DrivingDistanceTransform->getValue ( x, y ) < dist )
+        {
+          found = true;
+          dist = m_DrivingDistanceTransform->getValue ( x, y );
+          distXPos = x;
+          distYPos = y;
+        }
+      }
+    }
+  }
+  if ( found )
+  {
+    nextFrontier.x() =  distXPos;
+    nextFrontier.y() =  distYPos;
+    return true;
+  }
+  else
+  {
+    return false;
+  }
+}
+
+
+
+// HELPERS //////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+void Explorer::distanceFloodFill ( GridMap<double>* map, Eigen::Vector2i start )
+{
+  if ( !map ) {
+    ROS_ERROR( "Received 0-pointer!" );
+  }
+
+  computeObstacleTransform();
+
+  int width = map->width();
+  int height = map->height();
+  map->fill ( MAX_DISTANCE );
+
+  int fromX = start.x();
+  int fromY = start.y();
+  map->setValue ( fromX, fromY, 0 );
+
+  queue<int> xQueue;
+  queue<int> yQueue;
+  xQueue.push ( fromX + 1 );
+  yQueue.push ( fromY );
+  xQueue.push ( fromX - 1 );
+  yQueue.push ( fromY );
+  xQueue.push ( fromX );
+  yQueue.push ( fromY - 1 );
+  xQueue.push ( fromX );
+  yQueue.push ( fromY + 1 );
+  int xVal, yVal;
+  while ( !xQueue.empty() )
+  {
+    xVal = xQueue.front();
+    yVal = yQueue.front();
+    xQueue.pop();
+    yQueue.pop();
+    bool isFree = (m_OccupancyMap->getValue ( xVal, yVal ) < UNKNOWN  ||
+                   m_OccupancyMap->getValue ( xVal, yVal ) != NOT_SEEN_YET); // only fill free cells
+    bool isSafe = m_ObstacleTransform->getValue ( xVal, yVal ) > m_MinAllowedObstacleDistance;
+    if ( xVal > 0 && xVal < width - 1 && yVal > 0 && yVal < height - 1 && isFree && isSafe )
+    {
+      float value = map->getValue ( xVal, yVal );
+      float value_u = map->getValue ( xVal, yVal - 1 ) + 1;
+      float value_d = map->getValue ( xVal, yVal + 1 ) + 1;
+      float value_l = map->getValue ( xVal - 1, yVal ) + 1;
+      float value_r = map->getValue ( xVal + 1, yVal ) + 1;
+
+      float value_ur = map->getValue ( xVal + 1, yVal - 1 ) + 1.4142;
+      float value_ul = map->getValue ( xVal - 1, yVal - 1 ) + 1.4142;
+      float value_ll = map->getValue ( xVal - 1, yVal + 1 ) + 1.4142;
+      float value_lr = map->getValue ( xVal + 1, yVal + 1 ) + 1.4142;
+
+      float min1 = value_u < value_d ? value_u : value_d;
+      float min2 = value_l < value_r ? value_l : value_r;
+      float min3 = value_ur < value_ul ? value_ur : value_ul;
+      float min4 = value_ll < value_lr ? value_ll : value_lr;
+      float min12 = min1 < min2 ? min1 : min2;
+      float min34 = min3 < min4 ? min3 : min4;
+      float min = min12 < min34 ? min12 : min34;
+      float newVal = min;
+      if ( value > newVal )
+      {
+        map->setValue ( xVal, yVal, newVal );
+        if ( map->getValue ( xVal, yVal + 1 ) > newVal + 1 )
+        {
+          xQueue.push ( xVal );
+          yQueue.push ( yVal + 1 );
+        }
+        if ( map->getValue ( xVal, yVal - 1 ) > newVal + 1 )
+        {
+          xQueue.push ( xVal );
+          yQueue.push ( yVal - 1 );
+        }
+        if ( map->getValue ( xVal + 1, yVal ) > newVal + 1 )
+        {
+          xQueue.push ( xVal + 1 );
+          yQueue.push ( yVal );
+        }
+        if ( map->getValue ( xVal - 1, yVal ) > newVal + 1 )
+        {
+          xQueue.push ( xVal - 1 );
+          yQueue.push ( yVal );
+        }
+        if ( map->getValue ( xVal + 1, yVal - 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal + 1 );
+          yQueue.push ( yVal - 1 );
+        }
+        if ( map->getValue ( xVal - 1, yVal - 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal - 1 );
+          yQueue.push ( yVal - 1 );
+        }
+        if ( map->getValue ( xVal + 1, yVal + 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal + 1 );
+          yQueue.push ( yVal + 1 );
+        }
+        if ( map->getValue ( xVal - 1, yVal + 1 ) > newVal + 1.4142 )
+        {
+          xQueue.push ( xVal - 1 );
+          yQueue.push ( yVal + 1 );
+        }
+      }
+    }
+  }
+}
+
+
+// Implementation taken from http://www.cs.cmu.edu/~cil/vnew.html
+double* Explorer::distanceTransform1D ( double *f, int n )
+{
+  //int width = m_OccupancyMap->width();
+  //int height = m_OccupancyMap->height();
+  //double maxDistance = height > width ? height : width;
+
+  double *d = new double[n];
+  int *v = new int[n];
+  double *z = new double[n+1];
+  int k = 0;
+  v[0] = 0;
+  z[0] = -INT_MAX;
+  z[1] = INT_MAX;
+  for ( int q = 1; q <= n-1; q++ )
+  {
+    double s  = ( ( f[q]+ ( q*q ) )- ( f[v[k]]+ ( v[k]*v[k] ) ) ) / ( 2*q-2*v[k] );
+    while ( s <= z[k] )
+    {
+      k--;
+      s  = ( ( f[q]+ ( q*q ) )- ( f[v[k]]+ ( v[k]*v[k] ) ) ) / ( 2*q-2*v[k] );
+    }
+    k++;
+    v[k] = q;
+    z[k] = s;
+    z[k+1] = INT_MAX;
+  }
+
+  k = 0;
+  for ( int q = 0; q <= n-1; q++ )
+  {
+    while ( z[k+1] < q )
+      k++;
+    d[q] = ( ( q-v[k] ) * ( q-v[k] ) ) + f[v[k]];
+  }
+
+  delete [] v;
+  delete [] z;
+  return d;
+}
diff --git a/homer_nav_libs/src/Explorer/Explorer.h b/homer_nav_libs/src/Explorer/Explorer.h
new file mode 100644
index 0000000000000000000000000000000000000000..29a51ccf7cda5ae44e03abbe4d9fb33a1dd093f4
--- /dev/null
+++ b/homer_nav_libs/src/Explorer/Explorer.h
@@ -0,0 +1,355 @@
+#ifndef EXPLORER_H
+#define EXPLORER_H
+
+#include <vector>
+#include <geometry_msgs/Pose.h>
+
+#include "GridMap.h"
+#include "tools/tools.h"
+
+namespace ExplorerConstants
+{
+  static int8_t UNKNOWN;
+  static const int8_t NOT_SEEN_YET = -1;
+  static const double MAX_DISTANCE = DBL_MAX;
+  static const double MAX_COST = DBL_MAX;
+  static const int OBSTACLE = INT_MAX;
+}
+
+/**
+ * @class  Explorer
+ * @author Malte Knauf, Stephan Wirth, David Gossow (RX)
+ * @brief  Path planning & exploration class
+ *
+ * Usage:
+ *
+ * - Call setOccupancyMap() to set the base map for path finding.
+ * - Set a start point by calling setStart()
+ *
+ * - For path planning:
+ *   +Choose a target by calling setTarget()
+ *   +To correct a target to the nearest approachable position,
+ *    call getNearestAccessibleTarget
+ *   +Call getPathTransformPath()
+ *
+ *  -For exploration:
+ *   +Call resetExploration()
+ *   +Call getExplorationTransformPath()
+ *   +The calculated target is the last element in the returned path
+ *
+ * - Call sampleWaypointsFromPath() to extract waypoints from a calculated path
+ *
+ * This class uses a couple of "maps" for computation and storing data:
+ *
+ * - m_OccupancyMap stores the occupancy probabilities in double values. A value of 100 means
+ *       totally occupied, 0 totally free.
+ * - m_ObstacleDistanceMap stores in each cell the distance (one unit = one cell) to the nearest obstacle.
+ *       This map is computed by an eucledian distance transformation from m_OccupancyMap.
+ * - m_FrontierMap is a bool map which has 1 in frontier cells and 0 in all others. A frontier
+ *       is defined as a free cell that has one of its four direct neighbours in unknown space and is "safe" for
+ *       the robot (m_ObstacleDistanceMap is used for that).
+ * - m_DrivingDistanceMap is a double map that stores for each cell the distance to m_Start. It is computed
+ *       by a flood-fill (seed-fill) algorithm. The values are therefor only an approximation and not exact.
+ *       m_DrivingDistanceMap is used to search the nearest frontier when requesting an auto target.
+ * - m_TargetMap is a double map that stores for each cell the distance to m_Target. It is computed
+ *       like m_DrivingDistanceMap. This map is used as heuristic for the A*-Pathfinding algorithm.
+ * - m_NavigationMap is used to mark the cells that are touched by the A*-Pathfinding algorithm.
+ *
+ *
+ * The coordinate system and units that are used in this class are based on map cells.
+ * @see GridMap
+ *
+ */
+class Explorer
+{
+
+  public:
+
+    /**
+     * @brief Default constructor.
+     * @param minAllowedObstacleDistance,maxAllowedObstacleDistance Range of allowed distances to next obstacle [Pixels]
+     * @param minSafeObstacleDistance,maxSafeObstacleDistance Range of distances to next obstacle considered as safe [Pixels]
+     * @param safePathWeight Weight for safer path
+     */
+    Explorer ( double minAllowedObstacleDistance, double maxAllowedObstacleDistance,
+               double minSafeObstacleDistance, double maxSafeObstacleDistance,
+               double safePathWeight, double frontierSafenessFactor=1.0, int unknownThreshold=50 );
+
+    /**
+     * @brief Destructor deletes all dynamically allocated memory used by the maps
+     */
+    ~Explorer();
+
+    void setUnknownThreshold(int unknownTresh);
+    void setAllowedObstacleDistance ( double min, double max );
+    void setSafeObstacleDistance ( double min, double max );
+    void setFrontierSafenessFactor ( double frontierSafenessFactor );
+    void setSafePathWeight ( double weight );
+    /**
+     * @brief Copies and sets the occupancy map.
+     * @param width Width of the map
+     * @param height Height of the map
+     * @param origin Real-world pose of the cell (0,0) in the map
+     * @param data GridMap-data (occupancy probabilities: 0 = free, 100 = occupied) of size width * height
+     */
+    void setOccupancyMap ( int width, int height, geometry_msgs::Pose origin, int8_t* mapData);
+
+    /** only update occupied areas in current occupancy map */
+    void updateObstacles ( int width, int height, geometry_msgs::Pose origin, int8_t* mapData );
+
+    /**
+     * @brief Sets the start position for the path finding algorithm.
+     * m_Start is set to the given value.
+     * If startPixel lies outside the map, m_Start remains untouched.
+     * @param startPixel Start position for path finding in pixel (map-) coordinates.
+     */
+    void setStart ( Eigen::Vector2i start );
+
+    /**
+     * @brief Resets the internal state of the exploration mode.
+     * Sets m_DesiredDistance to 0, such that getExplorationTransformPath() triggers
+     * a frontier exploration if there is no prior call of setTarget(point, distance).
+     * Call this method once before every exploration.
+     */
+    void resetExploration();
+
+    /**
+     * Sets the target position for path finding. m_Target is set to the given value.
+     * If endPixel lies outside of the map, m_Target remains untouched.
+     * computeTargetDistanceMap() is called at the end of this method. m
+     * @param targetPixel Target to reach from startPixel
+     */
+    void setTarget ( Eigen::Vector2i targetPixel );
+
+    /**
+     * Sets the target region for path finding. m_ExplorationMap is set to the given region.
+     * If targetPixel lies outside of the map, the exploration map is set empty.
+     * @param targetPixel Center of the target region to reach from startPixel
+     * @param radius Radius of the target region in pixels
+     */
+    void setTarget( Eigen::Vector2i targetPixel, int radius );
+
+    /**
+     * @brief find the nearest position to target that is approachble from the start position
+     */
+    Eigen::Vector2i getNearestAccessibleTarget ( Eigen::Vector2i target );
+
+    /**
+     * @brief find the nearest position to target surpassing the minimum obstacle distance
+     */
+    Eigen::Vector2i getNearestWalkablePoint ( Eigen::Vector2i target );
+
+    /**
+     * @brief Returns the map-coordinates of the nearest frontier to m_Start.
+     * Uses m_DrivingDistanceMap and m_ObstacleDistanceMap. If there is no frontier left,
+     * nextFrontier remains untouched.
+     * @param[out] nextFrontier Nearest frontier in map-coordinates.
+     * @return true if frontier found and stored in nextFrontier, false if no frontier found (nextFrontier
+     *         remains untouched).
+     */
+    bool getNearestFrontier ( Eigen::Vector2i& nextFrontier );
+
+    /**
+     * Computes the path from m_Start to m_Target with path transform.
+     * The result is returned. If the returned vector contains no elements, there is no path.
+     * @return vector with path points
+     */
+    std::vector<Eigen::Vector2i> getPath( bool &success );
+
+    /**
+     * Computes the path from m_Start to the next frontier using exploration transform.
+     * The result is returned. If the returned vector contains no elements, there is no path.
+     * @return vector with path points
+     */
+    std::vector<Eigen::Vector2i> getExplorationTransformPath( bool &success );
+
+    /**
+     * @brief Returns a version of the path that contains less vertices.
+     * @note  The nearer the next obstacle, the more waypoints are created.
+     * @param path List of vertices to be simplified
+     * @param treshold[0..1] a lower threshold results in more waypoints (default:1.0)
+     * @return Vector of (sampled) waypoints.
+     */
+    std::vector<Eigen::Vector2i> sampleWaypointsFromPath ( std::vector<Eigen::Vector2i> path, float threshold=1.0 );
+
+    /**
+     * Getters for the different transforms (see constructor for description)
+     */
+    GridMap<int8_t>* getOccupancyMap();
+    GridMap<double>* getObstacleTransform();
+    GridMap<double>* getCostTransform();
+    GridMap<bool>* getTargetMap();
+    GridMap<double>* getDrivingDistanceTransform();
+    GridMap<double>* getTargetDistanceTransform();
+    GridMap<double>* getPathTransform();
+    GridMap<double>* getExplorationTransform();
+
+    /**
+     * @return Start position
+     */
+    Eigen::Vector2i getStart() const;
+
+    /**
+     * @return Target position
+     */
+    Eigen::Vector2i getTarget() const;
+
+  private:
+
+    /** @brief Delete the given map and set pointer to 0 */
+    template <class T>
+    void releaseMap ( GridMap<T>*& map )
+    {
+      if ( map )
+      {
+        delete map;
+        map=0;
+      }
+    }
+
+    /** @brief Delete and re-create given map */
+    template <class T>
+    void resetMap ( GridMap<T>*& map )
+    {
+      if ( !m_OccupancyMap )
+      {
+        ROS_ERROR ( "Occupancy map is missing." );
+        return;
+      }
+      releaseMap ( map );
+      map = new GridMap<T> ( m_OccupancyMap->width(), m_OccupancyMap->height() );
+    }
+
+    /**
+     * @return true if the robot can stand on the given position without touching an obstacle, false otherwise
+     * @warning Call computeWalkableMaps before
+     */
+    inline bool isWalkable ( int x, int y ) const
+    {
+      return ( ( m_OccupancyMap->getValue ( x, y ) < ExplorerConstants::UNKNOWN ) &&
+               ( m_ObstacleTransform->getValue ( x, y ) > m_MinAllowedObstacleDistance ) );
+    }
+
+    /**
+     * @return true if point is approachable from the current start position, false otherwise.
+     * @warning m_OccupancyMap, m_ObstacleTransform and m_DrivingDistanceTransform have to be present!
+     * @warning Call computeApproachableMaps before
+     */
+    inline bool isApproachable ( int x, int y ) const
+    {
+      return ( m_DrivingDistanceTransform->getValue ( x, y ) < ExplorerConstants::MAX_DISTANCE );
+    }
+
+    /** @brief Releases all memory of the member maps */
+    void releaseMaps();
+
+    /**
+      * @brief Helper function for computeDistanceTransformation.
+      * @param f 1D-Array for distance transformation
+      * @param n Number of elements in f
+      * @return Distance transformation of f
+      */
+    double* distanceTransform1D ( double *f, int n );
+
+    /**
+     * @brief Fills the given map from given start point with distance values to this point.
+     * The filling will only be performed on cells that are marked as free in m_OccupancyMap and
+     * that have an obstacle distance value between m_MinimumObstacleDistance and m_MaximumObstacleDistance.
+     * The map that is passed as argument will be fully overwritten by this function.
+     * @param map GridMap to fill
+     * @param start Start point for the fill algorithm
+     */
+    void distanceFloodFill ( GridMap<double>* map, Eigen::Vector2i start );
+
+    /** @brief Compute map needed for path calculation */
+    void computePathTransform();
+
+    /** @brief Compute map needed for exploration path calculation */
+    void computeExplorationTransform();
+
+    /** @brief Compute the distances to the next obstacle with eucledian distance transform from m_OccupancyMap. */
+    void computeObstacleTransform();
+
+    /** @brief Compute cost function based on obstacle transform */
+    void computeCostTransform();
+
+    /** @brief Compute the frontiers between free and unknown space. Depends on OccupancyMap and ObstacleTransform. */
+    void computeFrontierMap();
+
+    /** @brief Compute the target region (a circle of radius m_DesiredDistance around m_Target). */
+    void computeRegionMap();
+
+    /** @brief Compute the target map, which is either a frontier map or a region map. */
+    void computeTargetMap();
+
+    /** @brief Compute a map of driving distances from the start point */
+    void computeDrivingDistanceTransform();
+
+    /** @brief Compute a map of driving distances to the target point */
+    void computeTargetDistanceTransform();
+
+    /** @brief Compute maps needed for isWalkable */
+    void computeWalkableMaps();
+
+    /** @brief Compute maps needed for isApproachable */
+    void computeApproachableMaps();
+
+    /** @brief Start point for the way search algorithm. */
+    Eigen::Vector2i m_Start;
+
+    /** @brief Target for the way search algorithm */
+    Eigen::Vector2i m_Target;
+
+    /** @brief Desired distance to target in pixels */
+    int m_DesiredDistance;
+
+    /** @brief Occupancy map */
+    GridMap<int8_t>* m_OccupancyMap;
+
+    /** @see computeObstacleTransform */
+    GridMap<double>* m_ObstacleTransform;
+
+    /** @see computeCostTransform */
+    GridMap<double>* m_CostTransform;
+
+    /** @see computeTargetMap */
+    GridMap<bool>* m_TargetMap;
+
+    /** computeDrivingDistanceTransform */
+    GridMap<double>* m_DrivingDistanceTransform;
+
+    /** @see computeTargetDistanceTransform */
+    GridMap<double>* m_TargetDistanceTransform;
+
+    /** @see computePathTransform */
+    GridMap<double>* m_PathTransform;
+
+    /** @see computeExplorationTransform */
+    GridMap<double>* m_ExplorationTransform;
+
+    /** @see constructor */
+    double m_MinAllowedObstacleDistance;
+    double m_MaxAllowedObstacleDistance;
+
+    double m_MinSafeObstacleDistance;
+    double m_MaxSafeObstacleDistance;
+
+    /**
+     * Weight for safer path
+     */
+    double m_SafePathWeight;
+
+    /**
+     * Factor for minObstacleDistance that determines if a frontier pixel is valid
+     */
+    double m_FrontierSafenessFactor;
+
+    /**
+     * Real-world pose of the point (0,0) in the map
+     */
+    geometry_msgs::Pose m_Origin;
+
+};
+
+#endif
+
diff --git a/homer_nav_libs/src/Explorer/GridMap.h b/homer_nav_libs/src/Explorer/GridMap.h
new file mode 100644
index 0000000000000000000000000000000000000000..64b3469eb331afcb9ff24067564fa1ff479ce234
--- /dev/null
+++ b/homer_nav_libs/src/Explorer/GridMap.h
@@ -0,0 +1,575 @@
+#ifndef   GridMap_H
+#define   GridMap_H
+
+#include <float.h>
+#include <iostream>
+#include <sstream>
+
+#include "ros/ros.h"
+
+#include <Eigen/Geometry>
+
+#define GRIDMAP_SAFE_ACCESS
+
+/**
+ * @class  GridMap
+ * @author Malte Knauf, Stephan Wirth, David Gossow (RX)
+ * @brief  GridMap data structure. Implemeted as template class. The template type
+ *         defines the data type of each map cell.
+ */
+
+template<class DataT>
+class GridMap
+{
+
+	public:
+
+		/// Initialize empty map
+		GridMap();
+
+		/**
+		 * @param width Width of the map.
+		 * @param height Height of the map.
+		 * @param data Pointer to map data, must be of size width*height.
+		 * @param copyData if true, the map data will be copied
+		 *                 if false, GridMap takes ownership of the pointer
+         * @param cellSize physical size of each map cell [m]
+		 * @param centerX,centerY center of the map in world coordinates
+		 */
+		GridMap ( int width, int height, DataT* data = 0, bool copyData = true, float cellSize = 1, float centerX = 0, float centerY = 0 );
+
+		/// Copy data from given region
+        GridMap ( int width, int height, DataT* data, Eigen::AlignedBox2i extractRegion );
+
+		/// Copy data from given map
+		GridMap<DataT> ( const GridMap<DataT>& other ) { m_Data=0; *this = other; }
+
+		/// Copy data from given map
+		GridMap<DataT>& operator= ( const GridMap<DataT>& other );
+
+        ~GridMap();
+
+		/// Convert map coordinates to world coordinates
+		void mapToWorld ( int mapX, int mapY, float& worldX, float& worldY );
+
+		/// Convert world coordinates to map coordinates
+		void worldToMap ( float worldX, float worldY, int& mapX, int& mapY );
+
+		/// @brief set value at given position
+		inline void setValue ( int x, int y, DataT val );
+
+		/// @brief replace content with given value
+		void fill ( DataT val );
+		
+		/// @brief Draw a filled polygon into the map (world coords)
+        void drawPolygon ( std::vector<Eigen::Vector2d> vertices, DataT value );
+
+		/// @brief Draw a filled circle into the map (world coords)
+        void drawCircle( Eigen::Vector2d center, float radius, DataT value );
+
+		/// @return Value at the given position.
+		inline DataT getValue ( int x, int y ) const;
+
+		/// @return Pointer to given pixel
+        inline DataT* getDirectAccess ( int x, int y );
+
+		/// @return width in grid cells
+		int width() const { return m_Width; }
+
+		/// @return height in grid cells
+		int height() const { return m_Height; }
+
+  /// @return center of the map in world coordinates
+  Eigen::Vector2d center() const {return Eigen::Vector2d(m_CenterX,m_CenterY);}
+
+		/// @return side length of one cell in mm
+		float cellSize() { return m_CellSize; }
+
+	private:
+
+		void drawLine ( DataT *data, int startX, int startY, int endX, int endY, DataT value );
+		void fillPolygon ( DataT* data, int x, int y, char value );
+
+		int m_Width;
+		int m_Height;
+		int m_DataSize;
+		DataT* m_Data;
+		float m_CellSize;
+		float m_CenterX;
+		float m_CenterY;
+};
+
+
+template<class DataT>
+GridMap<DataT>::GridMap()
+{
+	m_Width = 0;
+	m_Height = 0;
+	m_DataSize = 0;
+	m_Data = 0;
+	m_CellSize = 0;
+	m_CenterX = 0;
+	m_CenterY = 0;
+}
+
+template<class DataT>
+GridMap<DataT>::GridMap ( int width, int height, DataT* data, bool copyData, float cellSize, float centerX, float centerY )
+{
+	m_Width = width;
+	m_Height = height;
+	m_CellSize = cellSize;
+	m_DataSize = width * height;
+	m_CenterX = centerX;
+	m_CenterY = centerY;
+	m_Data = 0;
+
+	if ( data )
+	{
+		if ( copyData )
+		{
+			m_Data = new DataT[m_DataSize];
+
+			for ( int i = 0; i < m_DataSize; i++ )
+			{
+				m_Data[i] = data[i];
+			}
+		}
+		else
+		{
+			m_Data = data;
+		}
+	}
+	else
+	{
+		m_Data = new DataT[m_DataSize];
+
+		for ( int i = 0; i < m_DataSize; i++ )
+		{
+			m_Data[i] = 0;
+		}
+	}
+}
+
+template<class DataT>
+GridMap<DataT>::GridMap (int width, int height, DataT* data, Eigen::AlignedBox2i extractRegion )
+{
+    m_Width = extractRegion.sizes().x();
+    m_Height = extractRegion.sizes().y();
+	m_DataSize = m_Width * m_Height;
+	m_Data = new DataT[m_DataSize];
+	m_CellSize = 1;
+	m_CenterX = 0;
+	m_CenterY = 0;
+
+    for ( int y = extractRegion.min().y(); y <= extractRegion.max().y(); y++ )
+	{
+        int yOffset = m_Width * y;
+
+        for ( int x = extractRegion.min().x(); x <= extractRegion.max().x(); x++ )
+		{
+            int i = x + yOffset;
+			m_Data[i] = data[i];
+		}
+	}
+}
+
+
+template<class DataT>
+inline DataT* GridMap<DataT>::getDirectAccess ( int x, int y )
+{
+#ifdef GRIDMAP_SAFE_ACCESS
+	if ( x >= 0 && x < m_Width && y >= 0 && y < m_Height )
+	{
+        return &m_Data[y * m_Width + x];
+	}
+	else
+	{
+		throw;
+	}
+#else
+    return &m_Data[y * m_Width + x];
+#endif
+}
+
+
+template<class DataT>
+GridMap<DataT>& GridMap<DataT>::operator= ( const GridMap<DataT>& other )
+{
+	delete[] m_Data;
+	m_Width = other.m_Width;
+	m_Height = other.m_Height;
+	m_DataSize = other.m_DataSize;
+	m_Data = new DataT[m_DataSize];
+	memcpy ( m_Data, other.m_Data, sizeof ( DataT ) *m_DataSize );
+	m_CellSize = other.m_CellSize;
+	m_CenterX = other.m_CenterX;
+	m_CenterY = other.m_CenterY;
+  return *this;
+}
+/* TODO
+template<class DataT>
+GridMap<DataT>::GridMap ( ExtendedInStream& strm )
+{
+	short version;
+	strm >> version;
+	strm >> m_Width;
+	strm >> m_Height;
+	strm >> m_CellSize;
+	strm >> m_CenterX;
+	strm >> m_CenterY;
+	m_DataSize = m_Width * m_Height;
+	m_Data = new DataT[m_DataSize];
+	strm.get ( m_Data, m_DataSize );
+}
+*/
+template<class DataT>
+GridMap<DataT>::~GridMap()
+{
+	if ( m_Data )
+	{
+		delete m_Data;
+		m_Data = 0;
+	}
+}
+/*
+template<class DataT>
+void GridMap<DataT>::storer ( ExtendedOutStream& strm ) const
+{
+	strm << short ( 12 );
+	strm << m_Width;
+	strm << m_Height;
+	strm << m_CellSize;
+	strm << m_CenterX;
+	strm << m_CenterY;
+	strm.put ( m_Data, m_DataSize );
+}
+*/
+
+template<class DataT>
+void GridMap<DataT>::mapToWorld ( int mapX, int mapY, float& worldX, float& worldY )
+{
+	worldX = m_CenterX + m_CellSize * ( mapX - m_Width / 2 );
+	worldY = m_CenterY + m_CellSize * ( mapY - m_Height / 2 );
+}
+
+template<class DataT>
+void GridMap<DataT>::worldToMap ( float worldX, float worldY, int& mapX, int& mapY )
+{
+	mapX = float ( m_Width ) / 2.0  - ( ( worldY - m_CenterY ) / m_CellSize + 0.5 );
+	mapY = float ( m_Height ) / 2.0 - ( ( worldX - m_CenterX ) / m_CellSize + 0.5 );
+
+	if ( mapX < 0 || mapX >= m_Width || mapY < 0 || mapY >= m_Height )
+	{
+                //ROS_WARN_STREAM ( "Index out of bounds: " << mapX << "," << mapY ); //TODO
+
+		if ( mapX < 0 )
+		{
+			mapX = 0;
+		}
+
+		if ( mapX >= m_Width )
+		{
+			mapX = m_Width - 1;
+		}
+
+		if ( mapY < 0 )
+		{
+			mapY = 0;
+		}
+
+		if ( mapY >= m_Height )
+		{
+			mapY = m_Height - 1;
+		}
+	}
+}
+
+
+template<class DataT>
+inline void GridMap<DataT>::setValue ( int x, int y, DataT val )
+{
+#ifdef GRIDMAP_SAFE_ACCESS
+	if ( x >= 0 && x < m_Width && y >= 0 && y < m_Height )
+	{
+        m_Data[y * m_Width + x] = val;
+	}
+	else
+	{
+		throw;
+	}
+#else
+    m_Data[y * m_Width + x] = val;
+#endif
+}
+
+template<class DataT>
+inline DataT GridMap<DataT>::getValue ( int x, int y ) const
+{
+#ifdef GRIDMAP_SAFE_ACCESS
+	if ( x >= 0 && x < m_Width && y >= 0 && y < m_Height )
+	{
+        return  m_Data[y * m_Width + x];
+	}
+	else
+	{
+                ROS_ERROR_STREAM( "Accessing map pixels " << x << "," << y << ": out of bounds (0,0," << m_Width-1 << "," << m_Height-1 << ")" ); //TODO
+		throw;
+	}
+#else
+    return  m_Data[y * m_Width + x];
+#endif
+}
+
+template<class DataT>
+void GridMap<DataT>::fill ( DataT val )
+{
+	for ( int i = 0; i < m_DataSize; i++ )
+	{
+		m_Data[i] = val;
+	}
+}
+
+/* TODO do we need image representation?
+template<class DataT>
+puma2::ColorImageRGB8* GridMap<DataT>::getImage ( DataT specialValue, DataT clipRangeLow, DataT clipRangeHigh )
+{
+	puma2::ColorImageRGB8* image = new puma2::ColorImageRGB8 ( m_Width, m_Height );
+	double maxVal = 0.0001;
+	double minVal = 0.0;
+
+	for ( int i = 0; i < m_DataSize; i++ )
+    {
+		if ( ( m_Data[i] < minVal ) && ( m_Data[i] != specialValue ) )
+		{
+			minVal = m_Data[i];
+		}
+
+		if ( ( m_Data[i] > maxVal ) && ( m_Data[i] != specialValue ) )
+		{
+			maxVal = m_Data[i];
+		}
+	}
+
+	std::ostringstream stream;
+
+	stream << " Min: " << minVal << "Max: " << maxVal;
+	stream << " ClipMin: " << double ( clipRangeLow ) << " ClipMax: " << double ( clipRangeHigh );
+        ROS_DEBUG_STREAM ( stream.str() ); //TODO: was TRACE_SYSTEMINFO
+
+	if ( maxVal > clipRangeHigh )
+	{
+		maxVal = clipRangeHigh;
+	}
+
+	if ( minVal < clipRangeLow )
+	{
+		minVal = clipRangeLow;
+	}
+
+	double range = maxVal - minVal;
+
+	puma2::ColorImageRGB8::PixelType* imageData;
+	imageData = image->unsafeRowPointerArray() [0];
+
+	for ( int i = 0; i < m_DataSize; i++ )
+	{
+		DataT currentValue = m_Data[i];
+
+		if ( currentValue == specialValue )
+		{
+			imageData[i][0] = 40;
+			imageData[i][1] = 220;
+			imageData[i][2] = 120;
+			continue;
+		}
+
+		if ( currentValue > clipRangeHigh )
+		{
+			imageData[i][0] = 200;
+			imageData[i][1] = 200;
+			imageData[i][2] = 128;
+			continue;
+		}
+
+		if ( currentValue < clipRangeLow )
+		{
+			imageData[i][0] = 40;
+			imageData[i][1] = 40;
+			imageData[i][2] = 180;
+			continue;
+		}
+
+		double valueDouble  = ( ( double ) ( currentValue - minVal ) ) / range;
+
+		unsigned char value = ( unsigned char ) ( valueDouble * 255 );
+
+		imageData[i][0] = value;
+		imageData[i][1] = value;
+		imageData[i][2] = value;
+	}
+
+	return image;
+}
+*/
+
+
+
+template<class DataT>
+void GridMap<DataT>::drawCircle(Eigen::Vector2d center, float radius, DataT value )
+{
+	int centerMapX,centerMapY;
+	worldToMap( center.x(), center.y(), centerMapX, centerMapY );
+	
+	int radiusCells = radius / m_CellSize;
+	int radiusCells2 = radiusCells*radiusCells;
+	
+    Eigen::AlignedBox2i bBox( Eigen::Vector2i(centerMapX - radiusCells, centerMapY - radiusCells), Eigen::Vector2i(centerMapX + radiusCells, centerMapY + radiusCells) );
+    Eigen::AlignedBox2i bBoxGrid( Eigen::Vector2i(0,0), Eigen::Vector2i(m_Width-1,m_Height-1) );
+    bBox.clamp( bBoxGrid );
+	
+    for ( int y = bBox.min().y(); y <= bBox.max().y(); y++ )
+	{
+        for ( int x = bBox.min().x(); x <= bBox.max().x(); x++ )
+		{
+			int xC = x-centerMapX;
+            int yC = y-centerMapY;
+			if ( xC*xC+yC*yC <= radiusCells2 )
+			{
+				setValue( x, y, value );
+			}
+		}
+	}
+}
+
+
+template<class DataT>
+void GridMap<DataT>::drawPolygon (std::vector<Eigen::Vector2d> vertices, DataT value )
+{
+  if ( vertices.size() == 0 )
+  {
+    ROS_INFO( "No vertices given!" );
+    return;
+  }
+	//make temp. map
+	DataT* data = new DataT[ m_DataSize ];
+	for ( int i = 0; i < m_DataSize; i++ )
+	{
+		data[i] = 0;
+	}
+	
+  //draw the lines surrounding the polygon
+  for ( unsigned int i = 0; i < vertices.size(); i++ )
+  {
+		int i2 = ( i+1 ) % vertices.size();
+		int startX,startY,endX,endY;
+		worldToMap( vertices[i].x(), vertices[i].y(), startX, startY );
+		worldToMap( vertices[i2].x(), vertices[i2].y(), endX, endY );
+    drawLine ( data, startX, startY, endX, endY, 1 );
+  }
+  //claculate a point in the middle of the polygon
+  float midX = 0;
+  float midY = 0;
+  for ( unsigned int i = 0; i < vertices.size(); i++ )
+  {
+    midX += vertices[i].x();
+    midY += vertices[i].y();
+  }
+  midX /= vertices.size();
+  midY /= vertices.size();
+	int midMapX,midMapY;
+	worldToMap( midX, midY, midMapX, midMapY );
+  //fill polygon
+  fillPolygon ( data, midMapX, midMapY, 1 );
+	
+	//copy polygon to map
+	for ( int i = 0; i < m_DataSize; i++ )
+	{
+		if ( data[i] != 0 )
+		{
+			m_Data[i] = value;
+		}
+	}
+	
+	delete[] data;
+}
+
+template<class DataT>
+void GridMap<DataT>::fillPolygon ( DataT* data, int x, int y, char value )
+{
+  int index = x + m_Width * y;
+  if ( value != data[index] )
+  {
+    data[index] = value;
+    fillPolygon ( data, x + 1, y, value );
+    fillPolygon ( data, x - 1, y, value );
+    fillPolygon ( data, x, y + 1, value );
+    fillPolygon ( data, x, y - 1, value );
+  }
+}
+
+
+template<class DataT>
+void GridMap<DataT>::drawLine ( DataT *data, int startX, int startY, int endX, int endY, DataT value )
+{
+  //bresenham algorithm
+  int x, y, t, dist, xerr, yerr, dx, dy, incx, incy;
+  // compute distances
+  dx = endX - startX;
+  dy = endY - startY;
+
+  // compute increment
+  if ( dx < 0 )
+  {
+    incx = -1;
+    dx = -dx;
+  }
+  else
+  {
+    incx = dx ? 1 : 0;
+  }
+
+  if ( dy < 0 )
+  {
+    incy = -1;
+    dy = -dy;
+  }
+  else
+  {
+    incy = dy ? 1 : 0;
+  }
+
+  // which distance is greater?
+  dist = ( dx > dy ) ? dx : dy;
+  // initializing
+  x = startX;
+  y = startY;
+  xerr = dx;
+  yerr = dy;
+
+  // compute cells
+  for ( t = 0; t < dist; t++ )
+  {
+    data[x + m_Width * y] = value;
+		
+    xerr += dx;
+    yerr += dy;
+    if ( xerr > dist )
+    {
+      xerr -= dist;
+      x += incx;
+    }
+    if ( yerr > dist )
+    {
+      yerr -= dist;
+      y += incy;
+    }
+  }
+}
+
+
+
+#endif
+
+#ifdef GRIDMAP_SAFE_ACCESS
+#undef GRIDMAP_SAFE_ACCESS
+#endif
diff --git a/homer_nav_libs/src/Math/Box2D.h b/homer_nav_libs/src/Math/Box2D.h
new file mode 100644
index 0000000000000000000000000000000000000000..5979b68a773e1ed642cdee35247aadb5e712661a
--- /dev/null
+++ b/homer_nav_libs/src/Math/Box2D.h
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ *  Box2D.h
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: Box2D.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef Box2D_H
+#define Box2D_H
+
+#include "Point2D.h"
+#include <vector>
+
+/**
+ * @class  Box2D
+ * @author David Gossow (RX)
+ * @brief  Represents a box given by the upper-left and lower-right corner
+ */
+template<class T=float>
+class Box2D
+{
+
+  public:
+
+    /** @brief Creates a box given by top-left (minX,minY) and lower-right (maxX,maxY) coordinates */
+    Box2D(T minX=0, T minY=0, T maxX=0, T maxY=0);
+
+    /** @brief The destructor */
+    ~Box2D() {};
+
+    inline void setMinX(T value) { m_MinX=value; }
+    inline void setMaxX(T value) { m_MaxX=value; }
+    inline void setMinY(T value) { m_MinY=value; }
+    inline void setMaxY(T value) { m_MaxY=value; }
+
+    inline T minX() const { return m_MinX; }
+    inline T maxX() const { return m_MaxX; }
+    inline T minY() const { return m_MinY; }
+    inline T maxY() const { return m_MaxY; }
+
+    inline T width() const { return m_MaxX-m_MinX; }
+    inline T height() const { return m_MaxY-m_MinY; }
+
+    std::vector< Point2D > vertices();
+
+    /** @brief Clip the box to fit into clipArea */
+    void clip( Box2D<T> clipArea );
+
+    /** @return true if the given point is inside the box */
+    bool contains( T x, T y );
+
+    /** @brief enlarge the box by 'size' units in all directions */
+    void expand( T size );
+
+    /** @brief shrink the box by 'size' units in all directions */
+    void shrink( T size );
+
+    /** @brief expand the box so that it contains the given point */
+    void enclose( Point2D point );
+    void enclose( T x, T y );
+
+    template<class OtherT>
+    void enclose( Box2D<OtherT> box );
+
+    Point2D centerPoint()
+    {
+        Point2D center;
+        center.setX(m_MinX + ( (m_MaxX - m_MinX) / 2 ) );
+        center.setY(m_MinY + ( (m_MaxY - m_MinY) / 2 ) );
+        return center;
+    }
+
+    /** @brief area covered by the box */
+    T area();
+
+    Box2D<T>& operator/= ( T div ) { m_MinX/=div; m_MinY/=div; m_MaxX/=div; m_MaxY/=div; return *this; }
+    Box2D<T>& operator*= ( T div ) { m_MinX*=div; m_MinY*=div; m_MaxX*=div; m_MaxY*=div; return *this; }
+
+  private:
+
+    T m_MinX;
+    T m_MaxX;
+    T m_MinY;
+    T m_MaxY;
+
+};
+
+template<class T>
+Box2D<T>::Box2D(T minX, T minY, T maxX, T maxY)
+{
+  m_MinX=minX;
+  m_MinY=minY;
+  m_MaxX=maxX;
+  m_MaxY=maxY;
+}
+
+template<class T>
+void Box2D<T>::clip( Box2D<T> clipArea )
+{
+  if (m_MinX < clipArea.minX()) { m_MinX=clipArea.minX(); }
+  if (m_MinY < clipArea.minY()) { m_MinY=clipArea.minY(); }
+  if (m_MaxX > clipArea.maxX()) { m_MaxX=clipArea.maxX(); }
+  if (m_MaxY > clipArea.maxY()) { m_MaxY=clipArea.maxY(); }
+}
+
+template<class T>
+bool Box2D<T>::contains( T x, T y )
+{
+  return ( (x>=m_MinX) && (x<=m_MaxX) && (y>=m_MinY) && (y<=m_MaxY) );
+}
+
+template<class T>
+    void Box2D<T>::expand( T size )
+{
+  m_MinX-=size;
+  m_MaxX+=size;
+  m_MinY-=size;
+  m_MaxY+=size;
+}
+
+template<class T>
+void Box2D<T>::shrink( T size )
+{
+  m_MinX+=size;
+  m_MaxX-=size;
+  m_MinY+=size;
+  m_MaxY-=size;
+}
+
+template<class T>
+T Box2D<T>::area()
+{
+  T width = m_MaxX - m_MinX;
+  T height = m_MaxY - m_MinY;
+
+  T capacity = width * height;
+
+  return (T) capacity;
+}
+
+template<class T>
+void Box2D<T>::enclose( Point2D point )
+{
+  if ( m_MinX > point.x() ) { m_MinX=point.x(); }
+  if ( m_MinY > point.y() ) { m_MinY=point.y(); }
+  if ( m_MaxX < point.x() ) { m_MaxX=point.x(); }
+  if ( m_MaxY < point.y() ) { m_MaxY=point.y(); }
+}
+
+template<class T>
+void Box2D<T>::enclose( T x, T y )
+{
+  if ( m_MinX > x ) { m_MinX=x; }
+  if ( m_MinY > y ) { m_MinY=y; }
+  if ( m_MaxX < x ) { m_MaxX=x; }
+  if ( m_MaxY < y ) { m_MaxY=y; }
+}
+
+template<class T>
+template<class OtherT>
+void Box2D<T>::enclose( Box2D<OtherT> box )
+{
+  enclose( box.minX(), box.minY() );
+  enclose( box.maxX(), box.maxY() );
+}
+
+
+template<class T>
+std::vector< Point2D > Box2D<T>::vertices()
+{
+  std::vector<Point2D> myVertices(5);
+  myVertices[0]=Point2D( m_MinX-0.5, m_MinY-0.5 );
+  myVertices[1]=Point2D( m_MinX-0.5, m_MaxY+0.5 );
+  myVertices[2]=Point2D( m_MaxX+0.5, m_MaxY+0.5 );
+  myVertices[3]=Point2D( m_MaxX+0.5, m_MinY-0.5 );
+  myVertices[4]=myVertices[0];
+  return myVertices;
+}
+
+
+#endif
diff --git a/homer_nav_libs/src/Math/CMakeLists.txt b/homer_nav_libs/src/Math/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..050f702ad89046027dedbd08c010a9188a7e77f5
--- /dev/null
+++ b/homer_nav_libs/src/Math/CMakeLists.txt
@@ -0,0 +1,11 @@
+set(Math_SRC
+  Line2D.cpp
+  Transformation2D.cpp
+  Pose.cpp
+  Math.cpp
+  Point2D.cpp
+)
+
+add_library(MappingMath ${Math_SRC})
+
+install(TARGETS MappingMath DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
diff --git a/homer_nav_libs/src/Math/Line2D.cpp b/homer_nav_libs/src/Math/Line2D.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f5807c313dab246c435fcdba12af6eab300c550f
--- /dev/null
+++ b/homer_nav_libs/src/Math/Line2D.cpp
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ *  Line2D.cpp
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Information on Code Review state:
+ *  Author: SM; DevelTest: Date; Reviewer: Initials; Review: Date; State: NOK
+ *
+ *  Additional information:
+ *  $Id: Line2D.cpp 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#include <iostream>
+#include <sstream>
+
+#include "Line2D.h"
+#include "vec2.h"
+
+#define THIS Line2D
+
+float THIS::gradient() const
+{
+  float gradient = 10000000.0;
+  if ( m_Vec[0] != 0.0 )
+  {
+    gradient = m_Vec[1]/m_Vec[0];
+  }
+  return gradient;
+}
+
+std::vector< Point2D > THIS::vertices ( unsigned substeps )
+{
+  unsigned steps = substeps+2;
+  std::vector<Point2D> myVertices ( steps );
+  for ( unsigned i=0; i<steps; i++ )
+  {
+    float t= float ( i ) / float ( steps-1 );
+    myVertices[i] = m_Start + t*m_Vec;
+  }
+  return myVertices;
+}
+
+Point2D THIS::getClosestPoint ( Point2D point ) const
+{
+  float t = ( point-m_Start ) * m_Vec;
+  t /= m_Vec * m_Vec;
+  if ( t > 1.0 )
+  {
+    t = 1.0;
+  }
+  else if ( t < 0.0 )
+  {
+    t = 0.0;
+  }
+  Point2D pointOnLine = m_Start + ( t * m_Vec );
+  return pointOnLine;
+}
+
+Point2D THIS::getIntersectionPoint ( Line2D line ) const
+{
+  Point2D intersecPoint;
+  double det1 = m_Vec.x() * ( -line.vec().y() ) - ( -line.vec().x() ) * m_Vec.y();
+  // lines are not parallel
+  if ( det1 != 0 )
+  {
+    CVec2 startToStart = line.start() -m_Start;
+    // calculate intersection
+    double lambda = ( startToStart.x() * ( -line.vec().y() ) - ( -line.vec().x() ) * startToStart.y() ) / det1;
+    intersecPoint = m_Start + lambda* m_Vec;
+  }
+
+  return intersecPoint;
+}
+
+float THIS::getIntersectionPointParameter ( Line2D line ) const
+{
+  double lambda = 0.0;
+  double det1 = m_Vec.x() * ( -line.vec().y() ) - ( -line.vec().x() ) * m_Vec.y();
+  // lines are not parallel
+  if ( det1 != 0 )
+  {
+    CVec2 startToStart = line.start() -m_Start;
+    // calculate intersection
+    lambda = ( startToStart.x() * ( -line.vec().y() ) - ( -line.vec().x() ) * startToStart.y() ) / det1;
+  }
+
+  return lambda;
+}
+
+std::string THIS::toString() const
+{
+  std::ostringstream str;
+//   str << "Startpoint: " << m_Start.x() << " " << m_Start.y() << " Endpoint: " << end().x() << " " << end().y() <<
+//   " Vector: " << m_Vec.x() << " " << m_Vec.y() << " ";
+  str << m_Start.x() << " " << m_Start.y() << std::endl << end().x() << " " << end().y() << std::endl;
+  return str.str();
+}
+
diff --git a/homer_nav_libs/src/Math/Line2D.h b/homer_nav_libs/src/Math/Line2D.h
new file mode 100644
index 0000000000000000000000000000000000000000..e8c210bb6433e979708ae73cab36e218a53550e1
--- /dev/null
+++ b/homer_nav_libs/src/Math/Line2D.h
@@ -0,0 +1,223 @@
+/*******************************************************************************
+ *  Line2D.h
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Information on Code Review state:
+ *  Author: SM; DevelTest: Date; Reviewer: Initials; Review: Date; State: NOK
+ *
+ *  Additional information:
+ *  $Id: Line2D.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef LINE2D_H
+#define LINE2D_H
+
+#include "vec2.h"
+#include "mat2.h"
+#include "Point2D.h"
+#include <vector>
+
+/**
+ * @class Line2D
+ *
+ * @author Susanne Maur
+ *
+ */
+class Line2D
+{
+
+  public:
+
+    /**
+     * Creates a new line.
+     * @param start Start point of the line.
+     * @param end End point of the line.
+     */
+    inline Line2D ( Point2D start, Point2D end )
+    {
+      m_Start = start;
+      m_Vec = end-m_Start;
+    }
+
+
+    /**
+      * Creates a new line.
+      * @param start Start point of the line.
+      * @param vec The vector from start to end point of the line.
+      */
+    inline Line2D ( Point2D start,  CVec2 vec )
+    {
+      m_Start = start;
+      m_Vec = vec;
+    }
+
+    /**
+     * Destructor does nothing.
+     */
+    inline ~Line2D() {}
+
+    /**
+     * Sets the start point of the line to a new value.
+     * @param start Start point of the line.
+     */
+    inline void setStart ( const Point2D start )
+    {
+      Point2D end = m_Start + m_Vec;
+      m_Start = start;
+      m_Vec = end-m_Start;
+    }
+
+    /**
+     * Sets the end point of the line to a new value.
+     * @param end End point of the line.
+     */
+
+    inline void setEnd ( const Point2D end )
+    {
+      m_Vec = end - m_Start;
+    }
+
+    /**
+     * Returns the start point of the line.
+     * @return Start point of the line.
+     */
+    inline Point2D start() const
+    {
+      return m_Start;
+    }
+
+    /**
+     * Returns the end point of the line.
+     * @return End point of the line.
+     */
+    inline Point2D end() const
+    {
+      return m_Start + m_Vec;
+    }
+
+    /**
+     * Returns a vector from the start to the end of the line.
+     * @return Vector to the end point of the line.
+     */
+    inline CVec2 vec() const
+    {
+      return m_Vec;
+    }
+
+    inline bool operator== ( const Line2D& line ) const
+    {
+      return ( m_Start == line.start() && end() == line.end() );
+    }
+
+    /**
+     * Returns the gradient of the line.
+     * @return Gradient of the line.
+     */
+    float gradient() const ;
+
+    /**
+    * Returns the length of the line.
+    * @return Length of the line.
+     */
+    inline float length() const {
+      return m_Vec.magnitude();
+    }
+
+    /**
+     * Returns the minimum  euclidean distance of the given point to the line.
+     * @param point Point of which the distance to the line will be calculated.
+     * @return Distance of point to line.
+     */
+    inline float distance ( Point2D point ) const
+    {
+      Point2D pointOnLine = getRootPoint ( point );
+      return ( point - pointOnLine ).magnitude();
+    }
+
+    /**
+     * Rotates the line round the origin.
+     * @param angle The angle of rotation in radiants.
+     */
+    inline void rotate ( float angle )
+    {
+      CMat2 rotMat = CMat2 ( angle );
+      m_Start = rotMat * m_Start;
+      m_Vec = rotMat * m_Vec;
+    }
+
+    /**
+     * Returns the point of the line with the minimal distance to a given point.
+     * This algorithm may return a point which lies on the extension of the line and not on itself.
+     * See also: getClosestPoint.
+     * @param point Point to which the distance is calculated.
+     * @return Root point of the line.
+     */
+    inline Point2D getRootPoint ( Point2D point ) const
+    {
+      float t = ( point-m_Start ) * m_Vec;
+      t /= m_Vec * m_Vec;
+      Point2D pointOnLine = m_Start + ( t * m_Vec );
+      return pointOnLine;
+    }
+
+    /**
+     * Returns the normal of the line.
+     * @return Normal of the line.
+     */
+    inline CVec2 getNormal() const {
+      return m_Vec.getNormal()/m_Vec.magnitude();
+    }
+
+    /**
+    * Returns the point of the line with the minimal distance to a given point.
+    * This algorithm returns always a point which lies on the line.
+    * Therefor it is not always the root point.
+    * See also: getRootPoint.
+    * @param point Point to which the distance is calculated.
+    * @return Root point of the line.
+     */
+    Point2D getClosestPoint ( Point2D point ) const;
+
+    /**
+    * Returns the intersection point of this line with a second line.
+    * The intersection point is element of this line.
+    * @param line The line with which the intersection is calculated.
+    * @return Intersection point.
+     */
+    Point2D getIntersectionPoint ( Line2D line ) const;
+
+    /**
+     * Returns the parameter t which identifies the intersection point of this line with a second line.
+     * The intersection point is element of this line.
+     * @param line The line with which the intersection is calculated.
+     * @return Parameter t which identifies the intersection point on the line.
+     */
+    float getIntersectionPointParameter ( Line2D line ) const;
+
+    /**
+     * @return Vertices, e.g. for use in a VectorObject
+     * @param  substeps number of linear interpolation steps between start and end
+     */
+    std::vector< Point2D > vertices ( unsigned substeps=0 );
+
+    /**
+     * @overwrite
+     */
+    std::string toString() const;
+
+  private:
+
+    /**
+     * Start point of the line.
+     */
+    Point2D m_Start;
+
+    /**
+     * Vector from the start to the end of the line.
+     */
+    CVec2 m_Vec;
+};
+
+#endif
diff --git a/homer_nav_libs/src/Math/Math.cpp b/homer_nav_libs/src/Math/Math.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3f31c5bfe5df6679d34372082b3a8b8ed7e60696
--- /dev/null
+++ b/homer_nav_libs/src/Math/Math.cpp
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ *  Math.cpp
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: $ 
+ *******************************************************************************/
+
+#include <limits.h>
+#include "Math.h"
+#include <math.h>
+
+#include "vec2.h"
+
+#define THIS Math
+
+THIS::THIS()
+{
+}
+
+THIS::~THIS()
+{
+}
+
+float THIS::meanAngle( const std::vector<float>& angles )
+{
+  //calculate vectors from angles
+  CVec2 vectorSum(0,0);
+  for ( unsigned i=0; i<angles.size(); i++ )
+  {
+    vectorSum = vectorSum + CVec2( cos( angles[i] ), sin ( angles[i] ) );
+  }
+  //return vectorSum.getAngle( CVec2(1,0) );
+  if ( vectorSum.magnitude() == 0 ) { return 0; }
+  return atan2( vectorSum.y(), vectorSum.x() );
+}
+
+
+float THIS::meanAngleWeighted( const std::vector< WeightedValue >& weightedAngles )
+{
+  //calculate vectors from angles
+  CVec2 vectorSum(0,0);
+  for ( unsigned i=0; i<weightedAngles.size(); i++ )
+  {
+    vectorSum = vectorSum + weightedAngles[i].weight * CVec2( cos( weightedAngles[i].value ), sin ( weightedAngles[i].value ) );
+  }
+  //return vectorSum.getAngle( CVec2(1,0) );
+  if ( vectorSum.magnitude() == 0 ) { return 0; }
+  return atan2( vectorSum.y(), vectorSum.x() );
+}
+
+
+float THIS::angleVariance( float meanAngle, const std::vector<float>& angles )
+{
+  float quadSum=0;
+  for( unsigned i=0; i < angles.size(); i++ )
+  {
+    float turnAngle=minTurnAngle( angles[i], meanAngle );
+    quadSum += turnAngle*turnAngle;
+  }
+  return quadSum / float ( angles.size() );
+}
+
+
+float THIS::minTurnAngle( float angle1, float angle2 )
+{
+/*  CVec2 vector1( cos( angle1 ), sin ( angle1 ) );
+  CVec2 vector2( cos( angle2 ), sin ( angle2 ) );
+  return vector1.getAngle( vector2 );
+  */
+  angle1 *= 180.0/M_PI;
+  angle2 *= 180.0/M_PI;
+  //if(angle1 < 0) angle1 += M_PI * 2;
+  //if(angle2 < 0) angle2 += M_PI * 2;
+  int diff= angle2 - angle1;
+  diff = (diff + 180) % 360 - 180;
+
+  //float sign=1;
+  //if ( diff < 0 ) { sign=-1; }
+  //minimal turn angle:
+  //if the absolute difference is above 180°, calculate the difference in other direction
+  //if ( fabs(diff) > M_PI ) {
+  //  diff = 2*M_PI - fabs(diff);
+  //  diff *= sign;
+  //}
+
+  float ret = static_cast<double>(diff) * M_PI/180.0;
+  return ret;
+}
+
+Point2D THIS::center( std::vector<Point2D>& points )
+{
+  double numPoints = double( points.size() );
+  double sumX=0, sumY=0;
+  for( unsigned i=0; i < points.size(); i++ )
+  {
+    sumX += points[i].x();
+    sumY += points[i].y();
+  }
+  return Point2D( sumX / numPoints, sumY / numPoints );
+}
+
+
+double THIS::randomGauss(float variance)
+{
+  if (variance < 0) {
+    variance = -variance;
+  }
+  double x1, x2, w, y1;
+  do {
+    x1 = 2.0 * random01() - 1.0;
+    x2 = 2.0 * random01() - 1.0;
+    w = x1 * x1 + x2 * x2;
+  } while ( w >= 1.0 );
+
+  w = sqrt((-2.0 * log(w)) / w);
+  y1 = x1 * w;
+  // now y1 is uniformly distributed
+  return sqrt(variance) * y1;
+}
+
+double THIS::random01(unsigned long init)
+{
+  static unsigned long n;
+  if (init > 0) {
+    n = init;
+  }
+  n = 1664525 * n + 1013904223;
+  // create double from unsigned long
+  return (double)(n/2) / (double)LONG_MAX;
+}
+
+#undef THIS
diff --git a/homer_nav_libs/src/Math/Math.h b/homer_nav_libs/src/Math/Math.h
new file mode 100644
index 0000000000000000000000000000000000000000..bf00135a1a53a24343e7ec20e5f0bc7e13599b4d
--- /dev/null
+++ b/homer_nav_libs/src/Math/Math.h
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ *  Math.h
+ *
+ *  (C) 2007 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: $
+ *******************************************************************************/
+
+#ifndef Math_H
+#define Math_H
+
+#include <vector>
+#include "Point2D.h"
+
+/**
+ * @class  Math
+ * @brief  Generic math and statistics functions
+ * @author David Gossow (RX)
+ */
+class Math
+{
+  public:
+
+    struct WeightedValue
+    {
+      float value;
+      float weight;
+    };
+
+    static const double Pi = 3.14159265358979323846;
+
+    /** @return mean value */
+    template<class ContainerT>
+    static double mean ( const ContainerT& values );
+
+    /** @return variance of given values */
+    template<class ContainerT>
+    static double variance ( const ContainerT& values );
+
+    /** @return mean angle of given values
+     *  @note   there are always two possible choices for the mean angle. This function returns the one with the smallest deviation
+     *  @note   Works for angles in [-Pi..Pi], negative angles are treated
+     */
+    static float meanAngle ( const std::vector<float>& angles );
+
+    static float meanAngleWeighted ( const std::vector< WeightedValue >& weightedAngles );
+
+    /** @return variance for given mean */
+    static float angleVariance ( float meanAngle, const std::vector<float>& angles );
+
+    /** @return minimal angle needed to turn from angle 1 to angle 2 [-Pi..Pi] */
+    static float minTurnAngle ( float angle1, float angle2 );
+
+    static Point2D center ( std::vector<Point2D>& points );
+
+    static float deg2Rad ( float deg ) { return deg / 180.0*Pi; }
+
+    static float rad2Deg ( float rad ) { return rad / Pi*180.0; }
+
+    static double randomGauss ( float variance = 1.0 );
+
+    static double random01 ( unsigned long init = 0 );
+
+    /** @return ratio between one dimension seen under old viewangle and dimension under new viewangle*/
+    static double angleToPercent ( double newAngle, double oldAngle ) { return tan ( ( Pi / 180.0 ) * newAngle / 2 ) / tan ( ( Pi / 180.0 ) * oldAngle / 2 ); };
+
+    /** @return angle under which the ratio between dimension seen under old viewangle and new viewangle equals percent*/
+    static double percentToAngle ( double percent, double angle ) { return 2* atan ( tan ( ( Pi / 180.0 ) * angle / 2 ) * percent ) * ( 180 / Pi ); };
+
+    /** @return horizontal view angle corresponding to diagonal view angle and aspect ratio (e.g. 4.0/3.0)*/
+    static double horizontalViewAngle ( double diagonalAngle, double aspectRatio ) { return verticalViewAngle ( diagonalAngle, 1.0 / aspectRatio ); };
+
+    /** @return vertical view angle corresponding to diagonal view angle and aspect ratio (e.g. 4.0/3.0)*/
+    static double verticalViewAngle ( double diagonalAngle, double aspectRatio )
+    {
+      return percentToAngle ( 1.0 / sqrt ( pow ( aspectRatio, 2 ) + 1.0 ), diagonalAngle );
+    };
+
+    template<class ValueT>
+    static inline ValueT min ( ValueT a, ValueT b ) { return a < b ? a : b; }
+
+    template<class ValueT>
+    static inline ValueT max ( ValueT a, ValueT b ) { return a > b ? a : b; }
+
+  private:
+
+    /** @brief The constructor */
+    Math();
+
+    /** @brief The destructor */
+    ~Math();
+
+};
+
+template<class ContainerT>
+double Math::mean ( const ContainerT& values )
+{
+  typename ContainerT::const_iterator it;
+  it = values.begin();
+  double sum = 0;
+  while ( it != values.end() )
+  {
+    sum += *it;
+    it++;
+  }
+  return sum / double ( values.size() );
+}
+
+
+template<class ContainerT>
+double Math::variance ( const ContainerT& values )
+{
+  double mean = mean ( values );
+  typename ContainerT::const_iterator it;
+  it = values.begin();
+  double sum = 0;
+  while ( it != values.end() )
+  {
+    double diff = *it - mean;
+    sum += diff * diff;
+    it++;
+  }
+  return sum / double ( values.size() );
+}
+
+
+#endif
diff --git a/homer_nav_libs/src/Math/Pixel.h b/homer_nav_libs/src/Math/Pixel.h
new file mode 100644
index 0000000000000000000000000000000000000000..026fd3a6909cadc954b3148f15b6a73d4c632c18
--- /dev/null
+++ b/homer_nav_libs/src/Math/Pixel.h
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ *  Pixel.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Pixel.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef PIXEL_H
+#define PIXEL_H
+
+#include "Point2D.h"
+#include <vector>
+
+/** @class Pixel
+  * @brief Stores discrete pixel coordinates
+  * @author Stephan Wirth, David Gossow (RX)
+  */
+class Pixel {
+
+  public:
+
+    inline Pixel( int x = 0, int y = 0) { m_X = x; m_Y = y; };
+    inline ~Pixel() {};
+
+    inline int x() const { return m_X; }
+    inline int y() const { return m_Y; }
+
+    inline void setX( int x ) { m_X = x; }
+    inline void setY( int y ) { m_Y = y; }
+
+    inline bool operator ==( Pixel& rhs ) { return ( m_X == rhs.m_X ) && ( m_Y == rhs.m_Y ); }
+    inline bool operator !=( Pixel& rhs ) { return ( m_X != rhs.m_X ) || ( m_Y != rhs.m_Y ); }
+    inline Pixel operator *( float rhs ) { return Pixel( m_X * rhs, m_Y * rhs ); }
+    inline Pixel operator /( float rhs ) { return Pixel( m_X / rhs, m_Y / rhs ); }
+
+    inline Point2D toPoint2D() { return Point2D( m_X, m_Y ); }
+    
+    inline std::vector<Point2D> vertices()
+    {
+      std::vector<Point2D> result(5);
+      result[0]=Point2D( m_X-0.5, m_Y-0.5 );
+      result[1]=Point2D( m_X+0.5, m_Y-0.5 );
+      result[2]=Point2D( m_X+0.5, m_Y+0.5 );
+      result[3]=Point2D( m_X-0.5, m_Y+0.5 );
+      result[4]=result[0];
+      return result;
+    }
+
+  private:
+
+    int m_X;
+    int m_Y;
+
+};
+
+
+#endif
diff --git a/homer_nav_libs/src/Math/Point2D.cpp b/homer_nav_libs/src/Math/Point2D.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c8ae09b7ab40761665dc5694db808f370b1768c3
--- /dev/null
+++ b/homer_nav_libs/src/Math/Point2D.cpp
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ *  Point2D.cpp
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  Additional information:
+ *  $Id: $ 
+ *******************************************************************************/
+
+#include "Point2D.h"
+
+#define THIS Point2D 
+
+float THIS::getPolarAngle () const
+{
+  float angle = atan ( m_Y /m_X );
+  if ( m_X < 0 )
+  {
+    angle = - ( M_PI - angle );
+  }
+  while ( angle >= M_PI )
+  {
+    angle -= 2*M_PI;
+  }
+  while ( angle < -M_PI )
+  {
+    angle += 2*M_PI;
+  }
+  return angle;
+}
+
+#undef THIS
diff --git a/homer_nav_libs/src/Math/Point2D.h b/homer_nav_libs/src/Math/Point2D.h
new file mode 100644
index 0000000000000000000000000000000000000000..94810ef901253ad677b4a59a823232f14589da1c
--- /dev/null
+++ b/homer_nav_libs/src/Math/Point2D.h
@@ -0,0 +1,312 @@
+/*******************************************************************************
+ *  Point2D.h
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Point2D.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#include <iostream>
+#include <sstream>
+
+#include "vec2.h"
+#include <float.h>
+
+#ifndef POINT2D_H
+#define POINT2D_H
+
+/**
+ * @class Point2D
+ *
+ * @author Susanne Maur
+ *
+ */
+class Point2D
+{
+
+  public:
+
+    /**
+     * Creates a new point in 2D with x- and y-coordinat set to zero.
+     */
+    inline Point2D()
+    {
+      m_X = 0.0;
+      m_Y = 0.0;
+    }
+
+    /**
+    * Creates a new point in 2D.
+    * @param x x-coordinate of the point.
+    * @param y y-coordinate of the point.
+     */
+    inline Point2D ( double x, double y )
+    {
+      m_X = x;
+      m_Y = y;
+    }
+
+
+
+    /**
+     * Copy construcor
+     */
+    inline Point2D (const Point2D& p){
+      m_X = p.x();
+      m_Y = p.y();
+    }
+    
+    /**
+    * Creates a new point in 2D.
+    * @param v Vector form origin to the point.
+     */
+    inline Point2D ( const CVec2& v )
+    {
+      m_X = v[0];
+      m_Y = v[1];
+    }
+
+    /**
+    * Destructor, does nothing.
+     */
+    inline ~Point2D()
+    {
+    }
+
+    /**
+    * Returns the x-coordinate of the point.
+    * @return the x-coordinate of the point.
+     */
+    inline double x() const
+    {
+      return m_X;
+    }
+
+    /**
+    * Returns the y-coordinate of the point.
+    * @return the y-coordinate of the point.
+     */
+    inline double y() const
+    {
+      return m_Y;
+    }
+
+    /**
+    * Sets the x- and y-coordinate of the point to new values.
+    * @param x the new value of the x coordinate.
+    * @param y the new value of the x coordinate.
+     */
+    inline void set ( double x, double y )
+    {
+      m_X = x;
+      m_Y = y;
+    }
+
+    /**
+    * Sets the x-coordinate of the point to a new value.
+    * @param x the new value of the x coordinate.
+     */
+    inline void setX ( double x )
+    {
+      m_X = x;
+    }
+
+    /**
+    * Sets the y-coordinate of the point to a new value.
+    * @param y the new value of the x coordinate.
+     */
+    inline void setY ( double y )
+    {
+      m_Y = y;
+    }
+
+    /**
+     * Overloaded operators.
+     */
+
+    inline Point2D& operator= ( const Point2D& p) {
+      m_X = p.x();
+      m_Y = p.y(); 
+      return *this;
+    }
+
+    inline Point2D operator+ ( const CVec2& v ) const
+    {
+      return Point2D ( m_X + v[0], m_Y + v[1] );
+    }
+
+    inline Point2D operator+ ( const Point2D& p ) const
+    {
+      return Point2D ( m_X + p.x(), m_Y + p.y() );
+    }
+
+    inline CVec2 operator- ( const Point2D& p ) const
+    {
+      return CVec2 ( m_X - p.x(), m_Y - p.y() );
+    }
+
+    inline Point2D operator- ( const CVec2& v ) const
+    {
+      return Point2D ( m_X - v[0], m_Y - v[1] );
+    }
+
+    inline Point2D operator* ( double scalar ) const
+    {
+      return Point2D ( m_X * scalar, m_Y * scalar );
+    }
+
+    inline Point2D operator/ ( double scalar ) const
+    {
+      return Point2D ( m_X / scalar, m_Y / scalar );
+    }
+
+    inline Point2D& operator+= ( const CVec2& v )
+    {
+      m_X += v[0];
+      m_Y += v[1];
+      return ( *this );
+    }
+
+    inline Point2D& operator-= ( const CVec2& v )
+    {
+      m_X -= v[0];
+      m_Y -= v[1];
+      return ( *this );
+    }
+
+    inline Point2D& operator*= ( double scalar )
+    {
+      m_X *= scalar;
+      m_Y *= scalar;
+      return ( *this );
+    }
+
+    inline Point2D& operator/= ( double scalar )
+    {
+      m_X /= scalar;
+      m_Y /= scalar;
+      return ( *this );
+    }
+
+    inline double operator [] ( unsigned int i ) const
+    {
+      return ( ( double* ) this ) [i];
+    }
+
+    inline double& operator [] ( unsigned int i )
+    {
+      return ( ( double* ) this ) [i];
+    }
+
+    inline bool operator== ( const Point2D& point ) const
+    {
+      return ( fabs(m_X - point.x()) < 0.001 && fabs(m_Y - point.y()) < 0.001 );
+    }
+
+    inline bool operator!= ( const Point2D& point ) const
+    {
+      return !((*this)== point);
+    }
+
+    /**
+    * Returns the distance to a given point.
+    * @param point The point to calculate the distance to.
+    * @return the distance between point the two points.
+     */
+    inline double distance ( const Point2D& point ) const
+    {
+      return sqrt ( ( m_X-point.x() ) * ( m_X-point.x() ) + ( m_Y-point.y() ) * ( m_Y-point.y() ) );
+    }
+
+    /**
+    * Returns the distance to origin.
+    * @return the distance between point the two points.
+     */
+    inline double distance ( ) const
+    {
+      return sqrt ( m_X * m_X + m_Y * m_Y );
+    }
+
+    /**
+    * Checks whether two points are equal.
+    * @param p The point to check equality.
+    * @return true if points are equal, false otherwise.
+     */
+    inline bool equal ( const Point2D& point ) const
+    {
+      if ( ( *this - point ).magnitude() < 0.0001 )
+      {
+        return true;
+      }
+      else
+      {
+        return false;
+      }
+    }
+
+    /**
+    * Returns the vector which represents the point in 2D.
+    * @return vector which represents the point in 2D.
+     */
+    inline CVec2 toVector() const
+    {
+      return CVec2 ( m_X, m_Y );
+    }
+
+        /**
+     * Returns the angle of the corresponding polar coordinates.
+     * @return polar angle.
+         */
+    float getPolarAngle () const;
+
+    /**
+    * Rotate by angle (in radiants) around center.
+    * @param center Center of rotation
+    * @param angle Angle in radiants
+     */
+    inline void rotate ( const Point2D& center, float angle )
+    {
+      double x0=m_X-center.m_X;
+      double y0=m_Y-center.m_Y;
+      double xRot =  x0*cos ( angle ) - y0*sin ( angle );
+      double yRot =  x0*sin ( angle ) + y0*cos ( angle );
+      m_X = xRot+center.m_X;
+      m_Y = yRot+center.m_Y;
+    }
+
+    /**
+     * Rotate by angle (in radiants) around (0,0).
+     * @param angle Angle in radiants
+     */
+    inline void rotate ( float angle )
+    {
+      double xRot =  m_X*cos ( angle ) - m_Y*sin ( angle );
+      double yRot =  m_X*sin ( angle ) + m_Y*cos ( angle );
+      m_X = xRot;
+      m_Y = yRot;
+    }
+
+    /**
+    * Returns the string representation of the point.
+    * @return string representation of the point.
+     */
+    inline std::string toString() const
+    {
+      std::ostringstream str;
+      str << m_X << " " << m_Y;
+      return str.str();
+    }
+
+    /** @return "invalid" Point (used as end marker in vector drawings) **/
+    static Point2D invalidPoint() { return Point2D( DBL_MAX, DBL_MAX  ); }
+
+    bool isValid() { return ( ( m_X != DBL_MAX ) || ( m_Y != DBL_MAX ) ); }
+
+  protected:
+
+    double m_X;
+    double m_Y;
+};
+
+#endif
diff --git a/homer_nav_libs/src/Math/Pose.cpp b/homer_nav_libs/src/Math/Pose.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6011f280d10b9061a2aa90c0df3f1cc54d9f98b2
--- /dev/null
+++ b/homer_nav_libs/src/Math/Pose.cpp
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ *  Pose.cpp
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ *  $Id: Pose.cpp 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#include <cmath>
+
+#include "Pose.h"
+#include "Transformation2D.h"
+
+using namespace std;
+
+
+#define THIS Pose
+
+THIS::THIS(float x, float y, float theta) : Point2D(x, y) {
+  m_Theta = theta;
+}
+
+THIS::THIS() {
+  m_Theta = 0.0;
+}
+
+THIS::~THIS() {
+}
+
+float THIS::theta() const {
+  return m_Theta;
+}
+
+void THIS::setTheta(float theta) {
+  m_Theta = theta;
+}
+
+Pose THIS::operator+ ( const Transformation2D& transformation ) const {
+  float x, y, theta;
+  x = m_X + transformation.x();
+  y = m_Y + transformation.y();
+  theta = m_Theta + transformation.theta();
+  while (theta >= M_PI) theta -= 2*M_PI;
+  while (theta < -M_PI) theta += 2*M_PI;
+
+	return Pose(x, y, theta);
+}
+
+Pose THIS::operator- ( const Transformation2D& transformation ) const {
+  float x, y, theta;
+  x = m_X - transformation.x();
+  y = m_Y - transformation.y();
+  theta = m_Theta - transformation.theta();
+  while (theta >= M_PI) theta -= 2*M_PI;
+  while (theta < -M_PI) theta += 2*M_PI;
+
+	return Pose(x, y, theta);
+}
+
+Transformation2D THIS::operator- ( const Pose& pose ) const {
+  float x, y, theta;
+  x = m_X - pose.x();
+  y = m_Y - pose.y();
+
+  float s1, s2;
+  if (m_Theta > pose.theta()) {
+    s1 = -( 2 * M_PI - m_Theta + pose.theta());
+    s2 = m_Theta - pose.theta();
+  } else {
+    s1 = 2 * M_PI - pose.theta() + m_Theta;
+    s2 = -(pose.theta() - m_Theta);
+  }
+  if (fabs(s1) > fabs(s2)) {
+    theta = s2;
+  } else {
+    theta = s1;
+  }
+  while (theta >= M_PI) theta -= 2*M_PI;
+  while (theta < -M_PI) theta += 2*M_PI;
+
+	return Transformation2D(x, y, theta);
+}
+
+Pose THIS::interpolate(const Pose& referencePose, float t) const {
+
+  float newX = m_X + t * (referencePose.x() - m_X);
+  float newY = m_Y + t * (referencePose.y() - m_Y);
+
+  // Calculate mean angle by adding the vem_Thetaors in unit circle
+  float x1 = cosf(m_Theta);
+  float y1 = sinf(m_Theta);
+  float x2 = cosf(referencePose.theta());
+  float y2 = sinf(referencePose.theta());
+  float newTheta = atan2 (y1*(1-t)+y2*t, x1*(1-t)+x2*t);
+
+  return Pose(newX, newY, newTheta);
+}
+
+//THIS::THIS( ExtendedInStream& extStrm )
+//{
+//  char version;
+//  extStrm >> version;
+//  extStrm >> m_X;
+//  extStrm >> m_Y;
+//  extStrm >> m_Theta;
+//}
+
+//void THIS::storer( ExtendedOutStream& extStrm ) const
+//{
+//  char version=10;
+//  extStrm << version;
+//  extStrm << m_X;
+//  extStrm << m_Y;
+//  extStrm << m_Theta;
+//}
+
diff --git a/homer_nav_libs/src/Math/Pose.h b/homer_nav_libs/src/Math/Pose.h
new file mode 100644
index 0000000000000000000000000000000000000000..d0f6574c5856b9de9413be634dd7b251365242e7
--- /dev/null
+++ b/homer_nav_libs/src/Math/Pose.h
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ *  Pose.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Pose.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef POSE_H
+#define POSE_H
+
+#include "Point2D.h"
+//#include "Architecture/Serializer/ExtendedOutStream.h" // TODO kann wahrscheinlich weg
+//#include "Architecture/Serializer/ExtendedInStream.h"
+
+class Transformation2D;
+
+/**
+ * @class Pose
+ *
+ * @author Stephan Wirth, Susanne Maur (RX), David Gossow (RX)
+ * @brief Class to describe and hold a pose of the robot (x, y)-Position + Orientation
+ *        in world-coordinates
+ */
+class Pose : public Point2D {
+
+public:
+
+    /**
+     * Constructor which initializes the members with the given values.
+     * @param x x-position
+     * @param y y-position
+     * @param theta orientation in radiants
+     */
+    Pose(float x, float y, float theta);
+
+    /**
+     * Default constructor, initializes members to 0.
+     */
+    Pose();
+
+    /**
+    * The destructor is empty.
+    */
+    ~Pose();
+
+    float theta() const;
+
+    void setTheta(float theta);
+
+    Pose operator+ ( const Transformation2D& transformation ) const;
+    Pose operator- ( const Transformation2D& transformation ) const;
+    Transformation2D operator- ( const Pose& pose ) const;
+
+    /**
+     * Interpolates between two poses and returns a pose which correlates with
+     * current pose +  t * (reference pose - current pose)
+     * @param referencePose The second pose to interpolate between.
+     * @param t The factor of interpolation.
+     * @return Interpolated pose
+     */
+    Pose interpolate(const Pose& referencePose, float t) const;
+
+//    Pose( ExtendedInStream& extStrm );
+
+//    void storer( ExtendedOutStream& extStrm ) const;
+
+protected:
+
+    float m_Theta;
+};
+
+#endif
diff --git a/homer_nav_libs/src/Math/Transformation2D.cpp b/homer_nav_libs/src/Math/Transformation2D.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..693c7a396f40a7e5c16be4d35d952c4afdfac4ed
--- /dev/null
+++ b/homer_nav_libs/src/Math/Transformation2D.cpp
@@ -0,0 +1,308 @@
+/*******************************************************************************
+ *  Transformation2D.cpp
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Transformation2D.cpp 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#include "Transformation2D.h"
+
+#include <cmath>
+#include <vector>
+#include <iostream>
+#include <sstream>
+#include "vec2.h" // TODO das sieht nach baselib aus ggf. durch baselib ersetzen
+#include "mat2.h" // TODO das sieht nach baselib aus ggf. durch baselib ersetzen
+#include "Point2D.h"
+#include "Line2D.h"
+
+#define THIS Transformation2D
+#define BASE CVec2
+
+THIS::Transformation2D() : BASE()
+{
+  m_Theta = 0.0;
+}
+
+THIS::Transformation2D ( double x, double y, double theta ) : BASE ( x,y )
+{
+  m_Theta = theta;
+}
+
+THIS::Transformation2D ( const CVec2& vec, double theta ) : BASE ( vec )
+{
+  m_Theta = theta;
+}
+
+THIS::~Transformation2D()
+{
+}
+
+void THIS::set ( double x, double y, double theta )
+{
+  m_X = x;
+  m_Y = y;
+  m_Theta = theta;
+}
+
+double THIS::theta() const
+{
+  return m_Theta;
+}
+
+Transformation2D THIS::operator+ ( Transformation2D t ) const
+{
+  double theta = m_Theta + t.theta();
+  // TODO comment only for scan matching test
+//   while ( theta >= M_PI ) theta -= 2*M_PI;
+//   while ( theta < -M_PI ) theta += 2*M_PI;
+  return Transformation2D ( m_X + t.x(), m_Y + t.y(), theta );
+}
+
+Transformation2D& THIS::operator+= ( Transformation2D t )
+{
+  m_X += t.x();
+  m_Y += t.y();
+  m_Theta += t.theta();
+  // TODO comment only for scan matching test
+//   while ( m_Theta >= M_PI ) m_Theta -= 2*M_PI;
+//   while ( m_Theta < -M_PI ) m_Theta += 2*M_PI;
+  return ( *this );
+}
+
+Transformation2D THIS::operator- ( Transformation2D t ) const
+{
+  float s1, s2, theta;
+  if ( m_Theta > t.theta() )
+  {
+    s1 = - ( 2 * M_PI - m_Theta + t.theta() );
+    s2 = m_Theta - t.theta();
+  }
+  else
+  {
+    s1 = 2 * M_PI - t.theta() + m_Theta;
+    s2 = - ( t.theta() - m_Theta );
+  }
+  if ( fabs ( s1 ) > fabs ( s2 ) )
+  {
+    theta = s2;
+  }
+  else
+  {
+    theta = s1;
+  }
+  while ( theta >= M_PI ) theta -= 2*M_PI;
+  while ( theta < -M_PI ) theta += 2*M_PI;
+//   double theta = m_Theta - t.theta();
+//   while ( theta >= M_PI ) theta -= 2*M_PI;
+//   while ( theta < -M_PI ) theta += 2*M_PI;
+  return Transformation2D ( m_X - t.x(), m_Y - t.y(), theta );
+}
+
+Transformation2D& THIS::operator-= ( Transformation2D t )
+{
+  m_X -= t.x();
+  m_Y -= t.y();
+
+  float s1, s2, theta;
+  if ( m_Theta > t.theta() )
+  {
+    s1 = - ( 2 * M_PI - m_Theta + t.theta() );
+    s2 = m_Theta - t.theta();
+  }
+  else
+  {
+    s1 = 2 * M_PI - t.theta() + m_Theta;
+    s2 = - ( t.theta() - m_Theta );
+  }
+  if ( fabs ( s1 ) > fabs ( s2 ) )
+  {
+    theta = s2;
+  }
+  else
+  {
+    theta = s1;
+  }
+  while ( theta >= M_PI ) theta -= 2*M_PI;
+  while ( theta < -M_PI ) theta += 2*M_PI;
+  m_Theta = theta;
+
+  return ( *this );
+
+//   m_X -= t.x();
+//   m_Y -= t.y();
+//   m_Theta -= t.theta();
+//   while ( m_Theta >= M_PI ) m_Theta -= 2*M_PI;
+//   while ( m_Theta < -M_PI ) m_Theta += 2*M_PI;
+//   return ( *this );
+}
+
+Transformation2D THIS::operator* ( float factor ) const
+{
+
+  double theta = m_Theta * factor;
+  while ( theta >= M_PI ) theta -= 2*M_PI;
+  while ( theta < -M_PI ) theta += 2*M_PI;
+  return Transformation2D ( m_X * factor, m_Y * factor, theta );
+}
+
+Transformation2D& THIS::operator*= ( float factor )
+{
+  m_X *= factor;
+  m_Y *= factor;
+  m_Theta *= factor;
+  while ( m_Theta >= M_PI ) m_Theta -= 2*M_PI;
+  while ( m_Theta < -M_PI ) m_Theta += 2*M_PI;
+  return ( *this );
+}
+
+
+Transformation2D THIS::operator/ ( float factor ) const
+{
+  double theta = m_Theta / factor;
+  return Transformation2D ( m_X / factor, m_Y / factor, theta );
+}
+
+Transformation2D& THIS::operator/= ( float factor )
+{
+  m_X /= factor;
+  m_Y /= factor;
+  m_Theta /= factor;
+  return ( *this );
+}
+
+bool THIS::operator== ( Transformation2D t ) const
+{
+  if ( t.x() == m_X && t.y() == m_Y && t.theta() == m_Theta )
+  {
+    return true;
+  }
+  else
+  {
+    return false;
+  }
+}
+
+bool THIS::operator!= ( Transformation2D t ) const
+{
+  return ! ( ( *this ) ==t );
+}
+
+bool THIS::operator<= ( Transformation2D t ) const
+{
+  return ( this->magnitude() <= t.magnitude() ) && ( m_Theta <= t.theta() );
+}
+
+bool THIS::operator>= ( Transformation2D t ) const
+{
+  return ( this->magnitude() >= t.magnitude() ) && ( m_Theta >= t.theta() );
+}
+
+bool THIS::operator< ( Transformation2D t ) const
+{
+  return ( m_X < t.x() ) || ( m_Y < t.y() ) || ( ( m_Theta < t.theta() ) && ( *this <= t ) );
+}
+
+bool THIS::operator> ( Transformation2D t ) const
+{
+  return ( m_X > t.x() ) || ( m_Y > t.y() ) || ( ( m_Theta > t.theta() ) && ( *this >= t ) );
+}
+
+Transformation2D THIS::abs() const
+{
+  return Transformation2D ( std::abs ( m_X ), std::abs ( m_Y ), std::abs ( m_Theta ) );
+}
+
+Transformation2D THIS::inverse() const
+{
+  return ( *this ) * ( -1.0 );
+}
+
+Point2D THIS::transform ( const Point2D& point ) const
+{
+  CMat2 rotMat = CMat2 ( m_Theta );
+  CVec2 transVec = CVec2 ( m_X, m_Y );
+  Point2D transformedPoint = rotMat * ( point );
+  transformedPoint += transVec;
+  return transformedPoint;
+}
+
+std::vector<Point2D> THIS::transform ( const std::vector<Point2D>& points ) const
+{
+  CMat2 rotMat = CMat2 ( m_Theta );
+  CVec2 transVec = CVec2 ( m_X, m_Y );
+  std::vector<Point2D> transformedPoints;
+  std::vector<Point2D>::const_iterator iter = points.begin();
+  while ( iter != points.end() )
+  {
+    Point2D currPoint = rotMat * ( *iter );
+    currPoint += transVec;
+    transformedPoints.push_back ( currPoint );
+    iter++;
+  }
+  return transformedPoints;
+}
+
+// // Reihenfolge rotation/translation vertauscht !!!
+// Point2D THIS::transform ( Point2D point ) const
+// {
+//   CMat2 rotMat = CMat2 ( m_Theta );
+//   CVec2 transVec = CVec2 ( m_X, m_Y );
+//   Point2D transformedPoint = point+transVec;
+//   transformedPoint = rotMat * point;
+//   return transformedPoint;
+// }
+//
+// // Reihenfolge rotation/translation vertauscht !!!
+// std::vector<Point2D> THIS::transform ( std::vector<Point2D> points ) const
+// {
+//   CMat2 rotMat = CMat2 ( m_Theta );
+//   CVec2 transVec = CVec2 ( m_X, m_Y );
+//   std::vector<Point2D> transformedPoints;
+//   std::vector<Point2D>::const_iterator iter = points.begin();
+//   while ( iter != points.end() )
+//   {
+//     Point2D currPoint = ( *iter )+ transVec;
+//     currPoint = rotMat * currPoint;
+//     transformedPoints.push_back ( currPoint );
+//     iter++;
+//   }
+//   return transformedPoints;
+// }
+
+Line2D THIS::transform ( const Line2D& line ) const
+{
+  CMat2 rotMat = CMat2 ( m_Theta );
+  CVec2 transVec = CVec2 ( m_X, m_Y );
+  Line2D transformedLine = Line2D ( rotMat * line.start() + transVec, rotMat * line.end() + transVec );
+  return transformedLine;
+}
+
+std::vector<Line2D> THIS::transform ( const std::vector<Line2D>& lines ) const
+{
+  //CMat2 rotMat = CMat2 ( m_Theta );
+  //CVec2 transVec = CVec2 ( m_X, m_Y );
+  std::vector<Line2D> transformedLines;
+  std::vector<Line2D>::const_iterator iter = lines.begin();
+  while ( iter != lines.end() )
+  {
+    transformedLines.push_back ( transform(*iter) );
+    iter++;
+  }
+  return transformedLines;
+}
+
+std::string THIS::toString() const
+{
+  std::ostringstream str;
+  str << "deltaX: " << m_X << ", deltaY: " << m_Y << ", deltaTheta: " << m_Theta;
+  return str.str();
+}
+
+
+
+#undef THIS
+#undef BASE
+
diff --git a/homer_nav_libs/src/Math/Transformation2D.h b/homer_nav_libs/src/Math/Transformation2D.h
new file mode 100644
index 0000000000000000000000000000000000000000..59a54d827c71bb08384861b0e78cf1d20cf60c98
--- /dev/null
+++ b/homer_nav_libs/src/Math/Transformation2D.h
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ *  Transformation2D.h
+ *
+ *  (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * $Id: Transformation2D.h 44313 2011-04-06 22:46:28Z agas $
+ *******************************************************************************/
+
+#ifndef TRANSFORMATION2D_H
+#define TRANSFORMATION2D_H
+
+#include <cmath>
+#include <vector>
+//#include "Workers/Math/Vec.h"
+#include "Point2D.h"
+#include "Line2D.h"
+
+
+/**
+ * @class Transformation2D
+ *
+ * @author Susanne Maur
+ *
+ * @brief Class to describe a transformation of poses in 2D.
+ * This inplies a translation in x and y direction each and a rotation.
+ */
+class Transformation2D : public CVec2
+{
+
+  public:
+
+    /**
+     * Constructor that initializes the members.
+     * @param x translation in x direction in m
+     * @param y translation in y direction in m
+     * @param theta rotation in radiants
+     */
+    Transformation2D ( double x, double y, double theta );
+
+    /**
+     * Constructor that initializes the members.
+     * @param vec a vector which represents the translation in x and y direction
+     * @param theta rotation in radiants
+     */
+    Transformation2D ( const CVec2& vec, double theta );
+
+    /**
+     * Default constructor sets all members to 0.0.
+     */
+    Transformation2D();
+
+    /**
+     * Default destructor.
+     */
+    ~Transformation2D();
+
+    /**
+     * Sets the values of transformation.
+     * @param x translation in x direction in mm
+     * @param y translation in y direction in mm
+     * @param theta rotation in radiants
+     */
+    void set ( double x, double y, double theta );
+
+    /**
+     * Returns the rotation in radiants.
+     * @return rotation in radiants
+     */
+    double theta() const;
+
+    /**
+     * Adds two transformations.
+     */
+    Transformation2D operator+ ( Transformation2D t ) const;
+    Transformation2D& operator+= ( Transformation2D t );
+
+    /**
+     * Subtracts two transformations.
+     */
+    Transformation2D operator- ( Transformation2D t ) const;
+    Transformation2D& operator-= ( Transformation2D t );
+
+    /**
+     * Scales a transformation by a factor
+     */
+    Transformation2D operator* ( float factor ) const;
+    Transformation2D& operator*= ( float factor );
+
+    /**
+     * Scales a transformation by a factor
+     */
+    Transformation2D operator/ ( float factor ) const;
+    Transformation2D& operator/= ( float factor );
+
+    /**
+     * Test equality of transformations.
+     */
+    bool operator== ( Transformation2D t ) const;
+    bool operator!= ( Transformation2D t ) const;
+
+    /**
+     * Compare transformations.
+     * (attention: algebraic signs are taken into account, if necessary use fabs())
+     */
+    bool operator<= ( Transformation2D t ) const;
+    bool operator>= ( Transformation2D t ) const;
+    bool operator< ( Transformation2D t ) const;
+    bool operator> ( Transformation2D t ) const;
+
+    /**
+     * Applies abs() on every attribute.
+     */
+    Transformation2D abs() const;
+
+    /**
+     * Inverts the transformation, scales every attribute with -1.
+     */
+    Transformation2D inverse() const;
+
+    /**
+     * Transformes points by first rotation, then translating.
+     */
+    Point2D transform ( const Point2D& point ) const;
+    std::vector<Point2D> transform ( const std::vector<Point2D>& points ) const;
+
+    /**
+     * Transformes lines by first rotation, then translating.
+     */
+    Line2D transform ( const Line2D& line ) const;
+    std::vector<Line2D> transform ( const std::vector<Line2D>& lines ) const;
+
+    /**
+     * Returns the string representation of the transformation.
+     * @return string representation of the transformation.
+     */
+    std::string toString() const;
+
+  private:
+    double m_Theta;
+};
+
+#endif
+
diff --git a/homer_nav_libs/src/Math/mat2.h b/homer_nav_libs/src/Math/mat2.h
new file mode 100644
index 0000000000000000000000000000000000000000..254e8dc68fd581091914fd501fe18892cac7bc2f
--- /dev/null
+++ b/homer_nav_libs/src/Math/mat2.h
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ *  mat2.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus
+ *******************************************************************************/
+
+#ifndef MAT2_H
+#define MAT2_H
+
+#include <math.h>
+#include "Point2D.h"
+#include "vec2.h"
+
+class CMat2
+{
+	public:
+		CMat2();
+		CMat2(float rot);
+		~CMat2();
+
+		CMat2 operator *(const CMat2 &mat) const;
+
+		CVec2 operator *(const CVec2& v) const;
+
+		Point2D operator *(const Point2D& p) const;
+        
+        float& operator [] (unsigned int position) {
+            return fMatrix[position];
+        }
+        
+        CMat2 operator +(const CMat2 rhs) const {
+            CMat2 newMatrix;
+            for (unsigned int i = 0; i < 4; i++) {
+                newMatrix[i] = valueAt(i) + rhs.valueAt(i);
+            }
+            return newMatrix;
+        }
+        
+        CMat2 operator -(const CMat2 rhs) const {
+            CMat2 newMatrix;
+            for (unsigned int i = 0; i < 4; i++) {
+                newMatrix[i] = valueAt(i) - rhs.valueAt(i);
+            }
+            return newMatrix;
+        }
+        
+        float valueAt(unsigned int position) const{
+            return fMatrix[position];
+        }
+        
+		union
+		{
+			float fMatrix[4];
+			float m[2][2];
+			struct
+			{
+				float xx, xy;
+				float yx, yy;
+			};
+		};
+
+		void transpose();
+		void loadIdentity();
+
+		void makeRotation(float fA);
+
+		bool invert();
+};
+
+
+
+#include "mat2_inl.h"
+
+#endif
diff --git a/homer_nav_libs/src/Math/mat2_inl.h b/homer_nav_libs/src/Math/mat2_inl.h
new file mode 100644
index 0000000000000000000000000000000000000000..e3f77e161151e98c7df7f06b43db1d40fd9c4753
--- /dev/null
+++ b/homer_nav_libs/src/Math/mat2_inl.h
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ *  mat2_inl.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus
+ *******************************************************************************/
+
+#include <assert.h>
+
+inline CMat2::CMat2(){
+    for (unsigned int i = 0; i < 4; i++) {
+        fMatrix[i] = 0;
+    }
+}
+
+inline CMat2::~CMat2()
+{}
+
+inline CMat2::CMat2(float rot)
+{
+	makeRotation(rot);
+}
+
+inline CMat2 CMat2::operator * ( const CMat2 & mat ) const
+{
+    CMat2 retValue;
+    for (unsigned int line = 0; line < 2; line++) {
+        for (unsigned int column = 0; column < 2; column++) {
+            retValue[line*2 + column] = valueAt(line*2 + column) + mat.valueAt(column*2 + line);
+        }
+    }
+    return retValue;
+}
+
+inline CVec2 CMat2::operator * ( const CVec2& v ) const
+{
+	return CVec2(xx*v[0] + xy*v[1],yx*v[0] + yy*v[1]);
+}
+
+inline Point2D CMat2::operator * ( const Point2D& p ) const
+{
+	return Point2D(xx*p.x() + xy*p.y(), yx*p.x() + yy*p.y());
+}
+
+inline void CMat2::transpose()
+{
+	float t=xy;
+	xy=yx;
+	yx=t;
+}
+
+inline void CMat2::loadIdentity()
+{
+	xx=1.0f; xy=0.0f;
+	yx=0.0f; yy=1.0f;
+}
+
+inline void CMat2::makeRotation ( float fA )
+{
+	xx=yy=cosf(fA);
+	yx=sinf(fA);
+	xy=-yx;
+}
+
+inline bool CMat2::invert()
+{
+	CMat2 tmp;
+	float det = fMatrix[0]*fMatrix[3] - fMatrix[1]*fMatrix[2];
+
+	if(fabs(det) < 0.001f)	return false;
+
+	det = 1.0 / det;
+	tmp.fMatrix[0] = fMatrix[3]*det;
+	tmp.fMatrix[1] = -fMatrix[1]*det;
+	tmp.fMatrix[2] = -fMatrix[2]*det;
+	tmp.fMatrix[3] = fMatrix[0]*det;
+
+	(*this)=tmp;
+	return true;
+}
+
+
+
+
diff --git a/homer_nav_libs/src/Math/vec2.h b/homer_nav_libs/src/Math/vec2.h
new file mode 100644
index 0000000000000000000000000000000000000000..39a72c8eb60c6b6bf836dc7d7be932c376e25fd0
--- /dev/null
+++ b/homer_nav_libs/src/Math/vec2.h
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ *  vec2.h
+ *
+ *  (C) 2006 AG Aktives Sehen <agas@uni-koblenz.de>
+ *           Universitaet Koblenz-Landau
+ *
+ * Author: Frank Neuhaus, Susanne Maur
+ *******************************************************************************/
+
+#include <iostream>
+#include <sstream>
+
+#ifndef VEC2_H
+#define VEC2_H
+
+#include <math.h>
+
+class CVec2
+{
+  public:
+
+    inline CVec2()
+    {
+      m_X = 0; m_Y = 0;
+    }
+
+    inline CVec2 ( double x, double y )
+    {
+      m_X=x; m_Y=y;
+    }
+
+    inline CVec2 ( const CVec2& vec )
+    {
+      m_X=vec.x(); m_Y=vec.y();
+    }
+
+    inline CVec2 operator+ ( const CVec2& vVector ) const
+    {
+      return CVec2 ( vVector[0] + m_X, vVector[1] + m_Y );
+    };
+
+    inline CVec2 operator- ( const CVec2& vVector ) const
+    {
+      return CVec2 ( m_X - vVector[0], m_Y - vVector[1] );
+    };
+    
+    inline CVec2 operator- ( ) const
+    {
+        return CVec2 ( - m_X, - m_Y );
+    };
+
+    inline CVec2 operator* ( double num ) const
+    {
+      return CVec2 ( m_X * num, m_Y * num );
+    };
+
+    inline double operator* ( const CVec2& vVector ) const
+    {
+      return m_X*vVector[0]+m_Y*vVector[1];
+    }
+
+    inline CVec2 operator/ ( double num ) const
+    {
+      return CVec2 ( m_X / num, m_Y / num );
+    }
+
+    inline void set ( double fx, double fy )
+    {
+      m_X=fx; m_Y=fy;
+    }
+
+    inline double x() const
+    {
+      return m_X;
+    }
+
+    inline double y() const
+    {
+      return m_Y;
+    }
+
+    inline double magnitude() const
+    {
+      double sumOfSquares = m_X*m_X + m_Y*m_Y;
+      return sqrt ( sumOfSquares );
+    }
+
+    inline double operator [] ( unsigned int i ) const
+    {
+      return ( ( double* ) this ) [i];
+    }
+
+    inline double& operator [] ( unsigned int i )
+    {
+      return ( ( double* ) this ) [i];
+    }
+
+    inline CVec2& operator/= ( double num )
+    {
+      double inv=1.0f/num;
+      m_X*=inv;
+      m_Y*=inv;
+      return ( *this );
+    }
+
+    inline CVec2& operator*= ( double num )
+    {
+      m_X*=num;
+      m_Y*=num;
+      return ( *this );
+    }
+
+    inline CVec2& normalize()
+    {
+      return ( *this/=magnitude() );
+    }
+
+    inline CVec2& makePerp()
+    {
+      double xn=m_X;
+      m_X=-m_Y;
+      m_Y=xn;
+      return *this;
+    }
+
+    inline CVec2 getNormal() const
+    {
+      return CVec2 ( m_Y, -m_X ); //?
+    }
+
+    inline CVec2 getNormalized() const
+    {
+      return ( *this ) /magnitude();
+    }
+
+    inline double sqr() const
+    {
+      return ( *this ) * ( *this );
+    }
+
+    inline double dot ( const CVec2& vec ) const
+    {
+      return ( m_X*vec[0] ) + ( m_Y*vec[1] );
+    }
+
+    inline double getAngle ( const CVec2& vec ) const
+    {
+      return acos ( dot ( vec ) / ( magnitude() *vec.magnitude() ) );
+    }
+
+    /// @param angle Rotation angle in radiants
+    inline CVec2 rotate ( float angle ) const
+    {
+      double xRot =  m_X*cos ( angle ) - m_Y*sin ( angle );
+      double yRot =  m_X*sin ( angle ) + m_Y*cos ( angle );
+      return CVec2 ( xRot, yRot );
+    }
+
+    inline bool equal ( CVec2 vec ) const
+    {
+      return ( m_X==vec.x() && m_Y==vec.y() );
+    }
+
+    /**
+     * Returns the string representation of the vector.
+     * @return string representation of the point.
+     */
+    inline std::string toString() const
+    {
+      std::ostringstream str;
+      str << m_X << " " << m_Y;
+      return str.str();
+    }
+
+  protected:
+    double m_X, m_Y;
+};
+
+inline CVec2 operator* ( double f, const CVec2& v )
+{
+  return v*f;
+}
+
+inline CVec2 normalize ( const CVec2& v )
+{
+  return v/v.magnitude();
+}
+
+#endif
diff --git a/homer_nav_libs/src/SpeedControl/CMakeLists.txt b/homer_nav_libs/src/SpeedControl/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d0cbcb8f31160f7872f4e6dd0c6c0f1500ae0373
--- /dev/null
+++ b/homer_nav_libs/src/SpeedControl/CMakeLists.txt
@@ -0,0 +1,7 @@
+set(SpeedControl_SRC
+  SpeedControl.cpp
+)
+
+add_library(SpeedControl ${SpeedControl_SRC})
+
+install(TARGETS SpeedControl DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})
diff --git a/homer_nav_libs/src/SpeedControl/SpeedControl.cpp b/homer_nav_libs/src/SpeedControl/SpeedControl.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c33eff33aa4863f6dbdd75ae55ffad525eea0d90
--- /dev/null
+++ b/homer_nav_libs/src/SpeedControl/SpeedControl.cpp
@@ -0,0 +1,177 @@
+#include <cmath>
+#include <iostream>
+
+#include <ros/ros.h>
+#include "SpeedControl.h"
+#include "tools/loadRosConfig.h"
+
+using namespace std;
+
+// Robot dimensions in m
+//       
+//       
+//  /-------------\  <-- MAX_X
+//  |      x      |
+//  |      |      |
+//  |      |      |
+//  | y-----      |
+//  |             |
+//  |    ROBOT    |
+//  |             |
+//  \-------------/  <-- MIN_X
+//  ^             ^
+//  |             |
+//  MAX_Y      MIN_Y
+//
+float ROBOT_MIN_X = -0.45;
+float ROBOT_MAX_X =  0.30;
+float ROBOT_MIN_Y = -0.27;
+float ROBOT_MAX_Y =  0.27;
+
+
+namespace {
+  Eigen::AlignedBox2f InnerDangerZone,
+        OuterDangerZone;
+  float InnerDangerZoneFactor,
+        OuterDangerZoneFactor;
+
+  inline Eigen::AlignedBox2f loadRect(const string& path)
+  {
+    pair<float, float> pX, pY;
+    loadConfigValue(path + "/x_min", pX.first);
+    loadConfigValue(path + "/x_max", pX.second);
+    loadConfigValue(path + "/y_min", pY.first);
+    loadConfigValue(path + "/y_max", pY.second);
+
+    Eigen::Vector2f first(pX.first, pY.first), second(pX.second, pY.second);
+    return Eigen::AlignedBox2f(first, second);
+  }  
+}
+
+void SpeedControl::loadDimensions()
+{
+  InnerDangerZone = loadRect("/homer_navigation/speed_control/inner_danger_zone");
+  InnerDangerZoneFactor;
+  loadConfigValue("/homer_navigation/speed_control/inner_danger_zone/speed_factor", InnerDangerZoneFactor);
+  OuterDangerZone = loadRect("/homer_navigation/speed_control/inner_danger_zone");
+  OuterDangerZoneFactor;
+  loadConfigValue("/homer_navigation/speed_control/outer_danger_zone/speed_factor", OuterDangerZoneFactor);
+  if(!OuterDangerZone.contains(InnerDangerZone))
+    ROS_WARN_STREAM("InnerDangerZone is not contained in OuterDangerZone");
+}
+
+float SpeedControl::getSpeedFactor(const vector<geometry_msgs::Point>& points, float minVal, float maxVal )
+{
+  float minFactor = 1.0;
+  for (unsigned i = 0; i < points.size(); i++)
+  {
+    Eigen::Vector2f point(points[i].x, points[i].y);
+    if(InnerDangerZone.contains(point))
+    {
+      minFactor = InnerDangerZoneFactor;
+      break;
+    }
+    if(OuterDangerZone.contains(point))
+      minFactor = OuterDangerZoneFactor;
+  }
+  minFactor = sqrt(minFactor);
+  float range = maxVal - minVal;
+  minFactor = minVal + range*minFactor;
+  return minFactor;
+}
+
+float SpeedControl::getMaxMoveDistance(vector<geometry_msgs::Point> points)
+{
+  float minDistance = 4; // distance in m to nearest obstacle in front
+  for (unsigned int i = 0; i < points.size(); i++)
+  {
+      if(points[i].y > ROBOT_MIN_Y && points[i].y < ROBOT_MAX_Y && points[i].x > ROBOT_MAX_X)
+      {
+        float distance = sqrt((points[i].x * points[i].x) + (points[i].y * points[i].y));
+        if (distance < minDistance)
+        {
+          minDistance = distance;
+        }
+      }
+  }
+  float maxMoveDist = minDistance - ROBOT_MAX_X;
+  if (maxMoveDist < 0) {
+    maxMoveDist = 0.0;
+  }
+  return maxMoveDist;
+}
+
+float SpeedControl::getMaxMoveDistance(std::vector< Eigen::Vector3d >* kinectData, float minObstacleHeight, float minObstacleFromRobotDistance, float maxObstacleFromRobotDistance)
+{
+  // Check for obstacles in Kinect image: Look for closest point
+
+  float minDistance = 4; // distance to nearest obstacle in front
+
+  for(int i=0;i<kinectData->size();++i)
+  {
+    Eigen::Vector2d p = Eigen::Vector2d(kinectData->at(i).x(), kinectData->at(i).y());
+    if(!std::isnan(p.x()))
+    {
+      // Filter point cloud
+        if(p.x() > minObstacleFromRobotDistance && p.x() < maxObstacleFromRobotDistance && kinectData->at(i).z() > minObstacleHeight)
+      {
+        // Check for collisions outside of robot
+        if(p.y() > ROBOT_MIN_Y && p.y() < ROBOT_MAX_Y && p.x() > ROBOT_MAX_X)
+        {
+          float distance = sqrt((p.x() * p.x()) + (p.y() * p.y()));
+          if (distance < minDistance)
+          {
+            minDistance = distance;
+          }
+        }
+      }
+    }
+  }
+
+  float maxMoveDist = minDistance - ROBOT_MAX_X;
+  if (maxMoveDist < 0) {
+    maxMoveDist = 0.0;
+  }
+  return maxMoveDist;
+}
+
+float SpeedControl::getTurnSpeedFactor( float speedFactor, float turnAngle, float minVal, float maxVal )
+{
+  //turn faster for larger angles
+  float angleDependentFactor = sqrt( fabs(turnAngle) / M_PI );
+  angleDependentFactor = minVal + angleDependentFactor*(maxVal-minVal);
+  return sqrt( speedFactor * angleDependentFactor );
+}
+
+float SpeedControl::getMinTurnAngle(std::vector<geometry_msgs::Point> laserData, float minAngle, float maxAngle, float minDistance, float maxDistance)
+{
+    float turn_factor = 1.0;
+    for (unsigned int i = 0; i < laserData.size(); i++)
+    {
+        if(laserData[i].y > ROBOT_MIN_Y && laserData[i].y < ROBOT_MAX_Y && laserData[i].x > ROBOT_MAX_X)
+        {
+          float distance = sqrt((laserData[i].x * laserData[i].x) + (laserData[i].y * laserData[i].y));
+          if (distance < minDistance + ROBOT_MAX_X)
+          {
+            turn_factor = 0.0;
+          }
+          else if(distance > maxDistance + ROBOT_MAX_X)
+          {
+              turn_factor = 1.0;
+          }
+          else
+          {
+              turn_factor = (distance - minDistance)/maxDistance;
+          }
+        }
+    }
+    float range = maxAngle - minAngle;
+    return minAngle + turn_factor * range;
+}
+
+SpeedControl::SpeedControl() {
+}
+
+SpeedControl::~SpeedControl() {
+}
+
diff --git a/homer_nav_libs/src/SpeedControl/SpeedControl.h b/homer_nav_libs/src/SpeedControl/SpeedControl.h
new file mode 100644
index 0000000000000000000000000000000000000000..7bef0e9a16eb1f433c7ba23e7bd1c1b671253d7b
--- /dev/null
+++ b/homer_nav_libs/src/SpeedControl/SpeedControl.h
@@ -0,0 +1,71 @@
+#ifndef SPEEDCONTROL_H
+#define SPEEDCONTROL_H  
+
+#include <vector>
+#include <Eigen/Geometry>
+#include <geometry_msgs/Point.h>
+
+/** 
+ * @class SpeedControl
+ * @author Malte Knauf, Stephan Wirth
+ * @brief Class for computing a speed factor with respect to a given laser measurement.
+ */
+class SpeedControl {
+    
+  public:
+
+    /**
+     * @brief Loads robot and safety zone dimensions config values
+     */
+    static void loadDimensions();
+
+    /**
+     * Calculates the speed factor for the robot. If a measured obstacle lies in the "danger zone"
+     * that is defined in SpeedControl.cpp, the speed factor will be below maxVal. The nearer the obstacle,
+     * the smaller the speed factor.
+     * @param laserData Laser measurement
+     * @param minVal,maxVal range of return values
+     * @return Speed factor, value between minVal and maxVal. The higher the speed factor, the safer is it to drive fast.
+     */
+    static float getSpeedFactor(const std::vector<geometry_msgs::Point>& points, float minVal=0.2, float maxVal=1.0);
+
+    /**
+     * Calculates the maximum distance the robot can move without touching an obstacle.
+     * @param laserPoints Current laser measurement transformed to (valid) points in map frame
+     * @param laserConf The configuration of the LRF that took the measurement
+     * @return maximum distance (m) the robot can move based on the given laserscan.
+     */
+    static float getMaxMoveDistance(std::vector<geometry_msgs::Point> laserData);
+
+    static float getMaxMoveDistance(std::vector< Eigen::Vector3d >* kinectData, float minObstacleHeight, float minObstacleFromRobotDistance, float maxObstacleFromRobotDistance);
+
+    /// @return if the angle is larger, the turn speed factor will be higher
+    static float getTurnSpeedFactor( float speedFactor, float turnAngle, float minVal, float maxVal );
+
+    /**
+     * Calculates the minimum angle between the robot's orientation and the next waypoint which is necessary
+     * to trigger a rotation instead of a straight line
+     * @brief getMinTurnAngle
+     * @param laserData
+     * @param minAngle
+     * @param maxAngle
+     * @return
+     */
+    static float getMinTurnAngle(std::vector<geometry_msgs::Point> laserData, float minAngle, float maxAngle,
+                                                                              float minDistance, float maxDistance);
+
+  private:
+
+    /** 
+     * Constructor is empty and private because this class will never be instanciated.
+     */
+    SpeedControl();
+    
+    /**
+     * Destructor is empty.
+     */
+    ~SpeedControl();
+
+};
+#endif
+
diff --git a/homer_nav_libs/src/tools/loadRosConfig.h b/homer_nav_libs/src/tools/loadRosConfig.h
new file mode 100644
index 0000000000000000000000000000000000000000..a51a99ed1ddd8c40f5df5a40bee7e23bdff0b88d
--- /dev/null
+++ b/homer_nav_libs/src/tools/loadRosConfig.h
@@ -0,0 +1,46 @@
+
+#ifndef LOAD_ROS_CONFIG_H
+#define LOAD_ROS_CONFIG_H
+
+#include <ros/ros.h>
+#include <string>
+
+template <typename T>
+inline bool loadConfigValue(std::string valueName, T &variable, T default_variable = T() )
+{
+    if(ros::param::has(valueName))
+    {
+      ros::param::get(valueName, variable);
+      ROS_INFO_STREAM(valueName << ": " << variable);
+      return true;
+    }
+    else
+    {
+      ROS_WARN_STREAM("No Parameter: " << valueName << ". Defaulting to "<<default_variable<<".");
+      variable = default_variable;
+      return false;
+    }
+}
+
+template <typename T>
+inline bool loadConfigValue(std::string valueName, std::vector<T> &variable)
+{
+    if(ros::param::has(valueName))
+    {
+		ros::param::get(valueName, variable);
+		ROS_INFO_STREAM(valueName << ":");
+
+		for (int i = 0; i < variable.size(); ++i)
+			ROS_INFO_STREAM("Value "<< i << " :" << variable[i]);
+
+		return true;
+    }
+    else
+    {
+      ROS_WARN_STREAM("No Parameter: " << valueName << ". Defaulting to empty vector.");
+      variable.clear();
+      return false;
+    }
+}
+
+#endif
diff --git a/homer_nav_libs/src/tools/tools.h b/homer_nav_libs/src/tools/tools.h
new file mode 100644
index 0000000000000000000000000000000000000000..e106745044b3c4d36f586c23e3e26ea233331634
--- /dev/null
+++ b/homer_nav_libs/src/tools/tools.h
@@ -0,0 +1,258 @@
+#ifndef TOOLS_H
+#define TOOLS_H
+
+#include <Eigen/Geometry>
+#include <geometry_msgs/Point.h>
+#include <geometry_msgs/Pose.h>
+#include <tf/transform_listener.h>
+#include <ros/ros.h>
+
+/**
+ * @author Malte Knauf (2014)
+ * Convenience functions that are often used in the mapping and navigation process
+ */
+namespace map_tools
+{
+
+    /**
+     * @brief Converts a point p in world frame /map to the respective cell position in the map
+     * @param p Point in world frame
+     * @param origin Origin of the map
+     * @param resolution Resolution of the map
+     * @return Cell position of the point
+     */
+    Eigen::Vector2i toMapCoords(geometry_msgs::Point p, geometry_msgs::Pose origin, float resolution)
+    {
+        int x_idx = (p.x - origin.position.x)/resolution + 0.51;
+        int y_idx = (p.y - origin.position.y)/resolution + 0.51;
+        Eigen::Vector2i ret(x_idx, y_idx);
+        return ret;
+    }
+
+    /**
+     * @brief Converts the cell position of a point to its respective position in the world frame
+     * @param idx Cell position of the point
+     * @param origin Origin of the map
+     * @param resolution Resolution of the map
+     * @return Point in world frame
+     */
+    geometry_msgs::Point fromMapCoords(Eigen::Vector2i idx, geometry_msgs::Pose origin, float resolution)
+    {
+        geometry_msgs::Point ret;
+        ret.x = origin.position.x + (idx.x() - 0.5) * resolution;
+        ret.y = origin.position.y + (idx.y() - 0.5) * resolution;
+        return ret;
+    }
+
+    /**
+     * @brief Converts the QT pixel position of a point to its respective position in the world frame
+     * @param idx Cell position of the point
+     * @param origin Origin of the map
+     * @param resolution Resolution of the map
+     * @return Point in world frame
+     */
+    geometry_msgs::Point qtFromMapCoords(Eigen::Vector2i idx, geometry_msgs::Pose origin, float resolution)
+    {
+        geometry_msgs::Point ret;
+        ret.x = -(origin.position.x + idx.y()) * resolution;
+        ret.y = -(origin.position.y + idx.x()) * resolution;
+        return ret;
+    }
+
+    /**
+     * @brief map_index returns for a given point in the map real-world frame the respective index in the map
+     * @param p Point in the real-world frame (usually the frame /map or /world)
+     * @param origin Pose of the point (0,0) of the map in the real-world frame
+     * @param width Width of the map
+     * @param resolution Resolution in meters/cell of the map
+     * @return index of point in the map
+     */
+    int map_index(geometry_msgs::Point p, geometry_msgs::Pose origin, float width, float resolution)
+    {
+        return (int)(width *
+               ((p.y - origin.position.y)/resolution + 0.51) +
+               ((p.x - origin.position.x)/resolution + 0.51));
+    }
+
+    /**
+     * @brief point_in_map returns true if given point is in the map. False otherwise
+     * @param p Point in the real-world frame (usually the frame /map or /world)
+     * @param origin Pose of the point (0,0) of the map in the real-world frame
+     * @param width Width of the map
+     * @param resolution Resolution in meters/cell of the map
+     * @return true or false
+     */
+    bool point_in_map(geometry_msgs::Point p, geometry_msgs::Pose origin, float width, float resolution)
+    {
+        int x_idx = (p.x - origin.position.x)/resolution + 0.51;
+        int y_idx = (p.y - origin.position.y)/resolution + 0.51;
+        if(x_idx < 0 || y_idx < 0 || x_idx >= width || y_idx >= width) return false;
+        return true;
+    }
+
+    /**
+     * @brief transformPoint wrapper to transform points between coordinate frames
+     * @param point input point in from_frame
+     * @param listener transform listener
+     * @param from_frame input frame
+     * @param to_frame output frame
+     * @return transformed point in to_frame
+     */
+    geometry_msgs::Point transformPoint(geometry_msgs::Point point, tf::TransformListener &listener,
+                                        std::string from_frame, std::string to_frame)
+    {
+        geometry_msgs::PointStamped pin;
+        geometry_msgs::PointStamped pout;
+        pin.header.frame_id = from_frame;
+        pin.point = point;
+        try
+        {
+            listener.transformPoint(to_frame, pin, pout);
+            return pout.point;
+        }
+        catch (tf::TransformException ex){
+              ROS_ERROR("%s",ex.what());
+        }
+    }
+
+    /**
+     * @brief laser_range_to_point converts a single given laser scan range in polar coordinates
+     *          to the respective point in euclidean coordinates in the target frame
+     * @param laser_range range of the laser point to convert
+     * @param index
+     * @param start_angle
+     * @param angle_step
+     * @param listener
+     * @param from_frame
+     * @param to_frame
+     * @return
+     */
+    geometry_msgs::Point laser_range_to_point(float laser_range, int index, float start_angle,
+                                              float angle_step, tf::TransformListener &listener,
+                                              std::string from_frame, std::string to_frame)
+    {
+        float alpha = start_angle + index * angle_step;
+        geometry_msgs::PointStamped pin;
+        geometry_msgs::PointStamped pout;
+        pin.header.frame_id = from_frame;
+        pin.point.x = cos(alpha) * laser_range;
+        pin.point.y = sin(alpha) * laser_range;
+
+        try
+        {
+            listener.transformPoint(to_frame, pin, pout);
+            return pout.point;
+        }
+        catch (tf::TransformException ex){
+              //ROS_ERROR("%s",ex.what());
+        }
+    }
+
+    /**
+     * @brief laser_ranges_to_points converts a given laser scan in polar coordinates
+     *          to the respective points in euclidean coordinates in the target frame
+     * @param laser_data laser data ranges
+     * @param start_angle angle of the first measurement
+     * @param angle_step angle increment between two consecutive laser measurements
+     * @param range_min minimum valid range
+     * @param range_max maximum valid range
+     * @return vector containing the laser measurements in euclidean points
+     */
+    std::vector<geometry_msgs::Point> laser_ranges_to_points(const std::vector<float>& laser_data, float start_angle,
+                                                        float angle_step, float range_min, float range_max,
+                                                        tf::TransformListener &listener,
+                                                        std::string from_frame, std::string to_frame)
+    {
+        std::vector<geometry_msgs::Point> ret;
+        float alpha = start_angle;
+        for (int i = 0; i < laser_data.size(); i++) {
+          if(laser_data[i] < range_min || laser_data[i] > range_max)
+          {
+              alpha += angle_step;
+              continue;
+          }
+          geometry_msgs::Point point;
+          point.x = cos(alpha) * laser_data.at(i);
+          point.y = sin(alpha) * laser_data.at(i);
+
+          geometry_msgs::PointStamped pin;
+          pin.header.frame_id = from_frame;
+          pin.point = point;
+          geometry_msgs::PointStamped pout;
+          try
+          {
+              listener.transformPoint(to_frame, pin, pout);
+              ret.push_back(pout.point);
+          }
+          catch (tf::TransformException ex){
+                //ROS_ERROR("%s",ex.what());
+          }
+
+          alpha += angle_step;
+        }
+        return ret;
+    }
+
+    /**
+     * @brief Calculates the euclidean distance (in cells) between to points in the map
+     * @param a Point a
+     * @param b point b
+     * @return euclidean distance in cells
+     */
+    double distance(const Eigen::Vector2i& a, const Eigen::Vector2i& b)
+    {
+        return sqrt((a.x() - b.x()) * (a.x() - b.x()) + (a.y() - b.y()) * (a.y() - b.y()));
+    }
+
+    /**
+     * @brief Calculates the euclidean distance (in m) between to points in the world
+     * @param a Point a
+     * @param b point b
+     * @return euclidean distance in m
+     */
+    double distance(const geometry_msgs::Point& a, const geometry_msgs::Point& b)
+    {
+        return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
+    }
+
+/**
+ * @brief findValue
+ * @param map Pointer to the map to search
+ * @param width Width of the map
+ * @param height Height of the map
+ * @param center_x \__ Center point of circle to search within
+ * @param center_y /
+ * @param value Value to search for in given map
+ * @param radius Radius of the circle
+ * @return true if the given value could be found within the given radius around (x,y)
+ */
+    bool findValue(const std::vector<int8_t>* map, int width, int height, int center_x, int center_y, unsigned char value, float radius)
+    {
+
+      int start_x = int ( center_x - radius );
+      int start_y = int ( center_y - radius );
+      int end_x = int ( center_x + radius );
+      int end_y = int ( center_y + radius );
+
+      if ( start_x < 0 ) { start_x = 0; }
+      if ( start_y < 0 ) { start_y = 0; }
+      if ( end_x >= int ( width ) ) { end_x = width - 1; }
+      if ( end_y >= int ( height ) ) { end_y = height - 1; }
+
+      float sqr_radius = radius*radius;
+
+      for ( int y = start_y; y <= end_y; y++ )
+        for ( int x = start_x; x <= end_x; x++ )
+        {
+          if ( map->at(x+width*y) > value )
+          {
+            float sqr_dist = float ( x - center_x ) * float ( x - center_x ) + float ( y - center_y ) * float ( y - center_y );
+            if ( sqr_dist <= sqr_radius ) { return true; }
+          }
+        }
+
+      return false;
+    }
+}
+
+#endif // TOOLS_H
diff --git a/homer_navigation/CHANGELOG.rst b/homer_navigation/CHANGELOG.rst
new file mode 100644
index 0000000000000000000000000000000000000000..37ba899bc0adeb6c31640e5b3bdfc4ef92e3aec0
--- /dev/null
+++ b/homer_navigation/CHANGELOG.rst
@@ -0,0 +1,56 @@
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Changelog for package homer_navigation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+1.0.11 (2015-12-02)
+-------------------
+
+1.0.10 (2015-12-02)
+-------------------
+
+1.0.9 (2015-12-01)
+------------------
+
+1.0.8 (2015-11-30)
+------------------
+
+1.0.7 (2015-11-28)
+------------------
+* added install()
+* updated changelog
+* updated catkin_depends
+* Contributors: Niklas Yann Wettengel
+
+* updated catkin_depends
+* Contributors: Niklas Yann Wettengel
+
+1.0.6 (2015-11-27)
+------------------
+* removed env HOMER_DIR from CMakeLists.txt
+* Contributors: Niklas Yann Wettengel
+
+1.0.5 (2015-11-24)
+------------------
+* added missing files
+* Contributors: Niklas Yann Wettengel
+
+1.0.4 (2015-11-20)
+------------------
+* changed build dependency from libeigen3-dev to eigen
+* Contributors: Niklas Yann Wettengel
+
+1.0.3 (2015-11-20)
+------------------
+* added libeigen3-dev build dependency
+* Contributors: Niklas Yann Wettengel
+
+1.0.2 (2015-11-20)
+------------------
+* added cmake_modules as build dependency in package.xml
+* added Maintainers
+* Contributors: Niklas Yann Wettengel
+
+1.0.1 (2015-09-08)
+------------------
+* init
+* Contributors: Raphael Memmesheimer
diff --git a/homer_navigation/CMakeLists.txt b/homer_navigation/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..240de6260f5aead23f276f7a63b562b739cb9a62
--- /dev/null
+++ b/homer_navigation/CMakeLists.txt
@@ -0,0 +1,29 @@
+cmake_minimum_required(VERSION 2.8.3)
+project(homer_navigation)
+
+find_package(catkin REQUIRED COMPONENTS
+  roscpp roslib nav_msgs sensor_msgs homer_mapnav_msgs homer_nav_libs tf cmake_modules robbie_architecture
+)
+
+find_package(Eigen REQUIRED)
+
+catkin_package(
+  INCLUDE_DIRS include
+  CATKIN_DEPENDS roscpp roslib nav_msgs sensor_msgs homer_mapnav_msgs homer_nav_libs tf robbie_architecture
+)
+
+set(CMAKE_BUILD_TYPE Release)
+
+include_directories(
+  include
+  ${catkin_INCLUDE_DIRS}
+  ${Eigen_INCLUDE_DIRS}
+)
+
+add_executable(homer_navigation src/homer_navigation_node.cpp)
+add_dependencies(homer_navigation ${catkin_EXPORTED_TARGETS})
+
+target_link_libraries(homer_navigation
+   ${catkin_LIBRARIES}
+   ${Eigen_LIBRARIES}
+ )
diff --git a/homer_navigation/README.md b/homer_navigation/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..ae2cb85d54e9ab04344156eec1de8f71d5684be2
--- /dev/null
+++ b/homer_navigation/README.md
@@ -0,0 +1,79 @@
+# homer_navigation
+
+
+## Known Issues / Todo's 
+
+Die Pfadplanung dauert im Gegensatz zur alten Robbie-Implementierung zu lange. Je mehr freie Fläche vorhanden ist, desto länger dauert die Berechnung eines Pfades.
+
+## Introduction 
+
+Das Package "homer_navigation" mit seiner gleichnamigen Node ist für die Navigation des Roboters zuständig. Es hält stets die aktuelle Karte des Roboters vor, die z.B. vom map_manager veschickt wurde und berechnet anhand von dieser Karte einen Pfad vom Roboter zu einem gegebenen Zielpunkt. Dafür verwendet die Navigation die sogenannte Pfad-Transformation - eine Kombination aus Distanz-Transformation und Hindernistransformation -, in Verbindung mit A-Stern, um einen optimalen Pfad zu finden. Das Verhältnis zwischen Distanz- und Hindernis-Transformation kann über einen Parameter angepasst werden.
+Nach der Pfadberechnung ist das Package außerdem dafür zuständig den Roboter diesen Pfad zum Ziel abfahren zu lassen.
+
+## Topics 
+
+
+
+#### Publisher 
+* `/robot_platform/MoveRobot (robot_platform/MoveRobot)`: Ãœber dieses Topic wird der aktuelle Fahrbefehl an die Roboterplattform geschickt.
+* `/robot_platform/TurnRobot (robot_platform/TurnRobot)`: Ãœber dieses Topic wird der aktuelle Drehbefehl an die Roboterplattform geschickt.
+* `/robot_platform/StopRobot (robot_platform/StopRobot)`: Ãœber dieses Topic wird der Roboter am Ziel beziehungsweise vor einem Hindernis gestoppt.
+* `/homer_navigation/target_reached (std_msgs/Empty)`: Wenn der Roboter sein Ziel erreicht hat, wird eine Message über dieses Topic veschickt.
+* `/homer_navigation/target_unreachable (map_messages/TargetUnreachable)`: Ãœber dieses Topic wird mitgeteilt, wenn der Roboter sein Ziel nicht erreichen kann und die Navigation abgebrochen wurde. Ein Statuscode wird mitgeliefert (siehe Package map_messages).
+* `/homer_navigation/path (nav_msgs/Path)`: Hierüber wird der aktuelle Pfad zur Visualisierung an die GUI geschickt.
+
+#### Subscriber
+* `/map (nav_msgs/OccupancyGrid)`: Die jeweils aktuelle Map wird empfangen, um sie für die Pfadplanung und Hindernisvermeidung während der Navigation zu verwenden.
+* `/pose (geometry_msgs/PoseStamped)`: Die aktuelle Pose des Roboters wird als Startpunkt der Pfadplanung verwendet.
+* `/scan (nav_msgs/LaserScan)`: Der aktuelle LaserScan wird zur Hindernisvermeidung verwendet.
+* `/robot_platform/task_finished (std_msgs/Empty)`: Wird vom Roboter nach erfolgter AUsführung einer Bewegung verschickt. Die Navigation verwendet dies am Ende der Navigation, um nach der letzten Drehung auf dem Zielpunkt die TargetReached-Nachricht zu versenden.
+* `/homer_navigation/start_navigation (map_messages/StartNavigation)`: Startet die Pfadplanung und anschließend die Navigation zur mitgelieferten Zielpose
+* `/homer_navigation/stop_navigation (map_messages/StopNavigation)`: Stoppt die aktuelle Navigation.
+* `/homer_navigation/navigate_to_POI (map_messages/NavigateToPOI)`: Startet die Pfadplanung und anschließend die Navigation zum POI mit angegebenen Namen. Der entsprechende POI wird anschließend vom map_manager erfragt.
+* `/homer_navigation/unknown_threshold (std_msgs/Int8)`: Über dieses Topic kann der Schwellwert verändert werden, ab dem ein Zellwahrscheinlichkeit als belegt und damit unbefahrbar markiert wird. Standard ist 50 (%).
+
+## Launch Files 
+
+* `homer_navigation.launch:` Startet die Navigation und lädt alle Navigations-Paramter in den Parameterserver.
+
+
+## Parameter 
+
+
+### homer_navigation
+
+
+
+
+* `/homer_navigation/safe_path_weight:` Gewicht, um Bevorzugung sicherer (d.h. größerer Abstand zu Hindernissen) Pfade im Gegensatz zu kürzeren Pfaden einzustellen. 0 bedeutet kürzester Pfad, aber keine Sicherheit. Je höher, desto sicherer.
+* `/homer_navigation/allowed_obstacle_distance/min:` Mindestdistanz zum nächsten Hindernis, die der Roboter bei der Navigation besitzen muss.
+* `/homer_navigation/allowed_obstacle_distance/max:` Maximaldistanz zum nächsten Hindernis, die der Roboter bei der Navigation besitzen muss (wichtig für die Lokalisierung, abhängig von der Reichweite der Abstandssensoren).
+* `/homer_navigation/safe_obstacle_distance/min:` Mindestdistanz des Roboters zum nächsten Hindernis für eine sichere Navigation. Gewichtung wird mit safe_path_weight eingestellt.
+* `/homer_navigation/safe_obstacle_distance/max:` Maximaldistanz des Roboters zum nächsten Hindernis.
+* `/homer_navigation/frontier_safeness_factor:` Faktor der minimal erlaubten Distanz zum nächsten Hindernis, den eine Grenzzelle zu unbekanntem Gebiet mindestens haben muss, um als sicher und damit befahrbar zu gelten.
+* `/homer_navigation/collision_distance:` Wenn die Distanz zum nächsten Hindernis in Metern (gemessen ab der Front des Roboters) kleiner wird als der angegebene Parameter, wird der aktuelle Fahrbefehl gestoppt und die Pfadplanung neugestartet.
+* `/homer_navigation/collision_distance_near_target:` Nähe in Metern zum Ziel, ab der der Roboter bei einer Kollision nicht mehr zurückfährt und neuplant, sondern stoppt und eine TargetReached-Nachricht versendet.
+* `/homer_navigation/backward_distance:` Strecke in Metern, die der Roboter bei einer bevorstehenden Kollision zurückfährt, bevor er einen neuen Pfad plant.
+* `/homer_navigation/check_path:` Wenn auf "true" gesetzt, wird der aktuell geplante Pfad auf neu hinzukommende Hindernisse geprüft und gegebenenfalls neugeplant.
+* `/homer_navigation/check_path_max_errors:` Wenn Pfade gecheckt werden, wird umgeplant, sobald sich "check_path_max_errors"-mal hintereinander ein Hindernis in der ankommenden Karte im Pfad befindet.
+* `/homer_navigation/check_path_max_distance:` Der Pfad wird nur in der Nähe des Roboters bis zur im Parameter angegebenen Distanz auf neu hinzukommende Hindernisse überprüft
+* `/homer_navigation/turn_threshold_angle:` Wenn der Winkel zwischen der Orientierung des Roboters und der Strecke zum nächsten Wegpunkt unter dem angegebenen Wert liegt, soll geradeaus gefahren werden, ansonsten soll sich der Roboter um diesen Winkel in Richtung des Wegpunkts drehen.
+* `/homer_navigation/waypoint_sampling_threshold:` Parameter, um Anzahl der Wegpunkte im Pfad zu minimieren. 0 bedeutet keine Reduzierung. Je höher der Wert, desto mehr Wegpunkte werden gelöscht.
+* `/homer_navigation/speed_control/last_speedfactor_count:` Größe des Vektors, der die zuletzt berechneten Geschwindigkeitsfaktoren berechnet. Wird benutzt, um aus dem Mittelwert zusammen mit der aktuellen Distanz zum nächsten Hindernis die aktuelle Geschwindigkeit zu berechnen.
+* `/homer_navigation/speed_control/min_move_speedfactor:` Minimaler Faktor der maximal möglichen Geschwindigkeit, mit der der Roboter jemals fahren darf.
+* `/homer_navigation/speed_control/min_turn_speedfactor_moving:` Minimaler Faktor der maximal möglichen Drehgeschwindigkeit, mit der der Roboter sich während einer Geradeausfahrt drehen darf (aktuell mit dem cu2wd nicht möglich).
+* `/homer_navigation/speed_control/min_turn_speedfactor_standing:` Minimaler Faktor der maximal möglichen Drehgeschwindigkeit, mit der sich der Roboter im Stand drehen darf.
+* `/homer_navigation/speed_control/inner_danger_zone/x_min:` Wenn sich in der mit den nächsten vier Parametern beschriebenen Boundingbox um den Roboter ein Hindernis befindet, darf sich der Roboter nur mit der vorher eingestellten nachfolgend eingestellten Geschwindigkeit bewegen.
+* `/homer_navigation/speed_control/inner_danger_zone/x_max:`
+* `/homer_navigation/speed_control/inner_danger_zone/y_min:`
+* `/homer_navigation/speed_control/inner_danger_zone/y_max:`
+* `/homer_navigation/speed_control/inner_danger_zone/speed_factor:` Faktor der maximalen Geschwindigkeit, mit der sich der Roboter in seiner inneren Gefahrenzone bewegen darf.
+* `/homer_navigation/speed_control/outer_danger_zone/x_min:` Eine zweite Boundingbox, die die innere umschließen muss.
+* `/homer_navigation/speed_control/outer_danger_zone/x_max:`
+* `/homer_navigation/speed_control/outer_danger_zone/y_min:` 
+* `/homer_navigation/speed_control/outer_danger_zone/y_max:` 
+* `/homer_navigation/speed_control/outer_danger_zone/speed_factor:` Faktor der maximalen Geschwindigkeit, mit der sich der Roboter in seiner äußeren Gefahrenzone bewegen darf.
+* `/homer_navigation/max_rot_vel:` Maximal mögliche Rotationsgeschwindigkeit des Roboters in Radiants/Sekunde.
+* `/homer_navigation/max_trans_vel:` Maximal mögliche Geschwindigkeit des Roboters in Metern/Sekunde.
+
+
diff --git a/homer_navigation/config/homer_navigation.yaml b/homer_navigation/config/homer_navigation.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a9e7aff8d43121fb9779d66ecaee6fe25bc08565
--- /dev/null
+++ b/homer_navigation/config/homer_navigation.yaml
@@ -0,0 +1,48 @@
+/homer_navigation/safe_path_weight: 1.5 #weight for safer path in relation to shortest path
+/homer_navigation/allowed_obstacle_distance/min: 0.32 #m robot must move within these bounds
+/homer_navigation/allowed_obstacle_distance/max: 5.0 #m
+/homer_navigation/safe_obstacle_distance/min: 0.7 #m if possible robot should move within these bounds
+/homer_navigation/safe_obstacle_distance/max: 5.0 #m
+
+/homer_navigation/frontier_safeness_factor: 1.5 #factor of distance to an obstacle of a frontier cell which is considered safe
+
+/homer_navigation/collision_distance: 0.20 #m
+
+/homer_navigation/collision_distance_near_target: 0.4 #m distance to target where obstacle avoidance won't be executed, to avoid strange for- and backward moving activities near a target
+/homer_navigation/backward_distance: 0.07 #m
+
+/homer_navigation/check_path: true
+/homer_navigation/check_path_max_errors: 2
+/homer_navigation/check_path_max_distance: 2.0 #m
+
+/homer_navigation/turn_threshold_angle: 15 #°
+
+/homer_navigation/waypoint_sampling_threshold: 2
+
+/homer_navigation/speed_control/last_speedfactor_count: 10
+/homer_navigation/speed_control/min_move_speedfactor: 1.0
+/homer_navigation/speed_control/min_turn_speedfactor_moving: 1.0
+/homer_navigation/speed_control/min_turn_speedfactor_standing: 0.5
+
+/homer_navigation/speed_control/inner_danger_zone/x_min: -0.35
+/homer_navigation/speed_control/inner_danger_zone/x_max: 1.1
+/homer_navigation/speed_control/inner_danger_zone/y_min: -0.35
+/homer_navigation/speed_control/inner_danger_zone/y_max: 0.35
+
+/homer_navigation/speed_control/inner_danger_zone/speed_factor: 0.3
+
+/homer_navigation/speed_control/outer_danger_zone/x_min: -0.45
+/homer_navigation/speed_control/outer_danger_zone/x_max: 1.6
+/homer_navigation/speed_control/outer_danger_zone/y_min: -0.45
+/homer_navigation/speed_control/outer_danger_zone/y_max: 0.45
+
+/homer_navigation/speed_control/outer_danger_zone/speed_factor: 0.6
+
+/homer_navigation/max_rot_vel: 0.4 # rad/s
+/homer_navigation/max_trans_vel: 0.3 # m/s
+
+/homer_navigation/use_cmd_vel: true # test
+/homer_navigation/min_turn_angle: 0.15 # 0.17
+/homer_navigation/max_turn_speed: 0.6 # rad/s 0.6
+/homer_navigation/max_move_speed: 0.4 # m/s 0.4
+/homer_navigation/max_drive_angle: 0.6 # if above that value only turn
diff --git a/homer_navigation/config/homer_navigation_followme.yaml b/homer_navigation/config/homer_navigation_followme.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..7b13dfc3d9b00556b7294f8019bcf4697effcbc8
--- /dev/null
+++ b/homer_navigation/config/homer_navigation_followme.yaml
@@ -0,0 +1,14 @@
+#/homer_navigation/collision_distance: 0.23 #m
+/homer_navigation/collision_distance: 0.47 #m
+
+/homer_navigation/collision_distance_near_target: 0.2 #m distance to target where obstacle avoidance won't be executed, to avoid strange for- and backward moving activities near a target
+/homer_navigation/backward_distance: 0.07 #m
+/homer_navigation/check_path_max_errors: 5
+
+/homer_navigation/min_turn_angle/min: 20 #°
+/homer_navigation/min_turn_angle/max: 20
+/homer_navigation/min_turn_angle/min_distance: 0.5 #m 
+/homer_navigation/min_turn_angle/max_distance: 2.0 #m
+
+/homer_navigation/waypoint_sampling_threshold: 4
+
diff --git a/homer_navigation/include/homer_navigation/homer_navigation_node.h b/homer_navigation/include/homer_navigation/homer_navigation_node.h
new file mode 100644
index 0000000000000000000000000000000000000000..d0d95b1bbbd280237c17dd9817a6a041814c9a93
--- /dev/null
+++ b/homer_navigation/include/homer_navigation/homer_navigation_node.h
@@ -0,0 +1,372 @@
+#ifndef FastNavigationModule_H
+#define FastNavigationModule_H
+
+#include <vector>
+#include <string>
+#include <map>
+#include <deque>
+
+#include <Eigen/Geometry>
+
+#include <ros/ros.h>
+#include <tf/transform_listener.h>
+
+#include "Architecture/StateMachine/StateMachine.h"
+
+#include <nav_msgs/OccupancyGrid.h>
+#include <geometry_msgs/PoseStamped.h>
+#include <sensor_msgs/LaserScan.h>
+#include <sensor_msgs/PointCloud2.h>
+#include <homer_mapnav_msgs/StartNavigation.h>
+#include <homer_mapnav_msgs/StopNavigation.h>
+#include <homer_mapnav_msgs/NavigateToPOI.h>
+#include <std_msgs/Int8.h>
+
+class Explorer;
+/**
+ * @class  HomerNavigationNode
+ * @author Malte Knauf, Stephan Wirth, David Gossow (RX)
+ * @brief  Performs autonomous exploration and navigation
+ */
+class HomerNavigationNode {
+
+  public:
+
+    /**
+     * @brief   States of the state machines
+     */
+    enum MapType
+    {
+      SLAM_MAP,
+      NAVIGATION_MAP
+    };
+
+    enum ProcessState
+    {
+      IDLE,
+      AWAITING_EXPLORATION_MAP,
+      AWAITING_PATHPLANNING_MAP,
+      FOLLOWING_PATH,
+      AVOIDING_COLLISION,
+      FINAL_TURN,
+      TARGET_REACHED,
+      TILTED,
+      STALLED
+    };
+
+     /**
+     * The constructor
+     */
+    HomerNavigationNode();
+
+     /**
+     * The destructor
+     */
+    virtual ~HomerNavigationNode();
+    
+    /** @brief Is called in constant intervals. */
+    void idleProcess();
+
+
+  protected:
+
+    /** @brief Handles incoming messages. */
+    //virtual std::set<Message*> processMessages();
+    void mapCallback(const nav_msgs::OccupancyGrid::ConstPtr& msg);
+    void poseCallback(const geometry_msgs::PoseStamped::ConstPtr& msg);
+    void laserDataCallback(const sensor_msgs::LaserScan::ConstPtr& msg);
+    void backLaserCallback(const sensor_msgs::LaserScan::ConstPtr& msg);
+    void startNavigationCallback(const homer_mapnav_msgs::StartNavigation::ConstPtr& msg);
+    void stopNavigationCallback(const homer_mapnav_msgs::StopNavigation::ConstPtr& msg);
+    void navigateToPOICallback(const homer_mapnav_msgs::NavigateToPOI::ConstPtr& msg);
+    void unknownThresholdCallback(const std_msgs::Int8::ConstPtr& msg);
+	void moveBaseSimpleGoalCallback(const geometry_msgs::PoseStamped::ConstPtr& msg);
+
+
+    /** @brief initializes and refreshs parameters */
+	void loadParameters();
+
+    /** @brief Is called when all modules are loaded and thread has started. */
+    virtual void init();
+
+
+    /** @brief Detect & handle possible collision */
+    void handleCollision();
+
+  private:
+  
+
+    /** @brief Start navigation to m_Target on  last_map_data_ */
+    void startNavigation();
+
+    /** @brief Start exploration on last_map_data_ */
+    void startExploration();
+
+    /** @brief Check if obstacles are blocking the way in last_map_data_ */
+    void checkPath();
+
+    /** @brief calculate path from current robot position to target approximation */
+    void calculatePath();
+
+    /** @brief Send message containing current navigation path */
+    void sendPathData();
+
+    /** @brief Sends target reached and stops the robot. */
+    void sendTargetReachedMsg();
+
+    /**
+     * @brief Sends a target unreachable with given reason and stops the robot.
+     * @param reason reason for unreachable target (see homer_mapnav_msgs::TargetUnreachable for possible reasons)
+     */
+    void sendTargetUnreachableMsg( int8_t reason );
+	
+	void refreshParamsCallback(const std_msgs::Empty::ConstPtr& msg);
+
+    /** @brief Navigate robot to next waypoint */
+    void performNextMove();
+
+    /** @brief Finishes navigation or starts turning to target direction if the target position has been reached */
+    void targetPositionReached();
+
+    /** @return Distance from robot_pose_ to point */
+    double distanceTo(geometry_msgs::Point point);
+
+    /** @return Angle from robot_pose_ to point in degrees */
+    int angleToPointDeg(geometry_msgs::Point point);
+
+    /** @brief Set status info */
+    void actualizeStatusInfo();
+
+    /** @brief Calculates current maximal speed based on laser data */
+    float calcSpeedFactor();
+    
+    /** @brief Calculates current maximal backwards distance on map Data */
+    float obstacleBackwardDistance();
+
+    
+    /**
+     * @brief Send move message
+     * @param distance_m distance to drive in m
+     * @param speed_mPerSec driving speed in m/s
+     * @param drive permanently until stopped
+     */
+
+    void sendMoveMessage(double distance_m , double speed_mPerSec, bool permanent = false);
+    
+    /**
+     * @brief Send TurnMessage and set current turn action
+     * @param theta angle to turn (in degrees)
+     * @param speed turning speed
+     * @param turn permanently until stopped
+     */
+    void sendTurnMessage(double theta, double speed, bool permanent = false);
+
+	void sendStopRobot();
+
+    /**
+     * @brief Sets each cell of the map to -1 outside the bounding box
+     *        containing the robot pose and the current target
+     */
+    void maskMap();
+
+    /**
+     * @brief Current path was finished (either successful or not),
+     *        sets state machine to path planning to check if the robot is already at the goal
+     */
+    void currentPathFinished();
+
+    //convenience math functions
+    /**
+     * Computes mean of given input values
+     * @param values Container with values from which to compute mean
+     * @return mean value
+     */
+    template<class ContainerT>
+    static double mean ( const ContainerT& values );
+
+    /**
+     * Computes minimum turn angle from angle 1 to angle 2
+     * @param angle1 from angle
+     * @param angle2 to angle
+     * @return minimal angle needed to turn from angle 1 to angle 2 [-Pi..Pi]
+     */
+    static float minTurnAngle ( float angle1, float angle2 );
+
+    /**
+     * converts value from degree to radiant
+     * @param deg Value in degree
+     * @return value in radiants
+     */
+    static float deg2Rad ( float deg ) { return deg / 180.0*M_PI; }
+
+    /**
+     * converts value from radiants to degrees
+     * @param rad Value in radiants
+     * @return value in degrees
+     */
+    static float rad2Deg ( float rad ) { return rad / M_PI*180.0; }
+
+    /// @brief Worker instances
+
+    Explorer* explorer_;
+
+    /// @brief State machines
+
+    StateMachine<MapType> m_MapTypeMachine;
+    StateMachine<ProcessState> m_MainMachine;
+
+    /// @brief Navigation options & data
+
+    /** list of waypoints subsampled from m_PixelPath */
+    std::vector<geometry_msgs::PoseStamped> waypoints_;
+
+    /** Path planned by Explorer, pixel accuracy */
+    std::vector<Eigen::Vector2i> pixel_path_;
+
+    /** target point */
+    geometry_msgs::Point target_point_;
+
+    /** approximation of the target point is target is in an occupied cell */
+    Eigen::Vector2i target_approx_;
+
+    /** orientation the robot should have at the target point */
+    double target_orientation_;
+
+    /** allowed distance to target */
+    float desired_distance_;
+
+    /** check if the final turn should be skipped */
+    bool skip_final_turn_;
+
+    /**
+     *  check if navigation should perform fast planning. In this mode a path is only planned within
+     *  a bounding box containing the robot pose and the target point
+     */
+    bool fast_path_planning_;
+
+    /** current pose of the robot */
+    geometry_msgs::Pose robot_pose_;
+
+    /** current laser scan */
+    std::vector<geometry_msgs::Point> laser_points_;
+    std::vector<geometry_msgs::Point> m_laser_points_map;
+    std::vector<geometry_msgs::Point> m_back_laser;
+
+    /** time stamp of the last incoming laser scan */
+    ros::Time last_laser_time_;
+
+    /** Distance factor of a frontier cell considered save for exploration */
+    float m_FrontierSafenessFactor;
+
+    /** stores the last m_SpeedFactorMeanFilterSize speed factors */
+    std::deque<float> m_LastSpeedFactors;
+    /** stores the mean of the last speed factors */
+    std::deque<float> m_LastMeanSpeedFactors;
+    /** maximal count of stored last speed factors bevore oldest one will be overwritten */
+    int m_SpeedFactorMeanFilterSize;
+
+    /** minimal speed factor while moving */
+    float m_MinMoveSpeedFactor;
+
+    /** minimal turn speed factor while moving */
+    float m_MinTurnSpeedFactorMoving;
+
+    /** minimal turn speed factor while standing */
+    float m_MinTurnSpeedFactorStanding;
+
+    double m_SafePathWeight;
+
+    /** Number of subsequent times that an obstacle was detected in the planned path */
+    int invalid_path_count_;
+
+    ///map parameters
+    double resolution_;
+    double width_;
+    double height_;
+    geometry_msgs::Pose origin_;
+
+    /// @brief Configuration parameters
+
+    /** maximum move speed of the robot */
+    float m_MaxTransVel;
+    /** maximum turn speed of the robot */
+    int m_MaxRotVel;
+
+	bool m_use_cmd_vel_;
+
+    /** Allowed distances of obstacles to robot. Robot must move within these bounds */
+    std::pair<float,float> m_AllowedObstacleDistance;
+    /** Safe distances of obstacles to robot. If possible, robot should move within these bounds */
+    std::pair<float,float> m_SafeObstacleDistance;
+
+    /** threshold to sample down waypoints */
+    float waypoint_sampling_threshold_;
+
+    /** if distance to nearest obstacle is below collision distance trigger collision avoidance */
+    float collision_distance_;
+    /** do not drive back in collision avoidance when this near target */
+    float collision_distance_near_target_;
+    /** drive this distance backwards when avoiding collision */
+    float backward_distance_;
+
+    /** threshold angle between robot and next waypoint when to turn instead of driving forward */
+    double turn_threshold_angle_;
+
+    /** if true, obstacles in path will be detected and path will be replanned */
+    bool check_path_;
+    /** path will be replanned, if obstacle is present in at least check_path_max_errors consecutive incoming maps  */
+    int check_path_max_errors_;
+
+    /** waypoints will only be checked for obstacles if they are closer than check_path_max_distance to robot */
+    float check_path_max_distance_;
+
+	bool m_avoided_collision;
+
+	double m_min_turn_angle;
+	double m_max_turn_speed;
+	double m_max_move_speed;
+	double m_max_drive_angle;
+	
+	float m_act_speed;
+	float m_act_angle; 
+
+	bool m_path_reaches_target;
+
+    /** timestamp of last incoming map */
+    ros::Time last_map_timestamp_;
+
+    /** last map data */
+    std::vector<int8_t> * last_map_data_;
+
+    //ros specific members
+    tf::TransformListener transform_listener_;
+
+    //subscribers
+    ros::Subscriber map_sub_;
+    ros::Subscriber pose_sub_;
+    ros::Subscriber laser_data_sub_;
+    ros::Subscriber laser_back_data_sub_;
+    ros::Subscriber robot_data_sub_;
+    ros::Subscriber task_finished_sub_;
+    ros::Subscriber start_navigation_sub_;
+    ros::Subscriber stop_navigation_sub_;
+    ros::Subscriber navigate_to_poi_sub_;
+    ros::Subscriber unknown_threshold_sub_;
+	ros::Subscriber refresh_param_sub_;
+	ros::Subscriber m_move_base_simple_goal_sub_;
+
+    //publishers
+    ros::Publisher move_robot_pub_;
+    ros::Publisher turn_robot_pub_;
+    ros::Publisher stop_robot_pub_;
+	ros::Publisher cmd_vel_pub_;
+    ros::Publisher target_reached_pub_;
+    ros::Publisher target_unreachable_pub_;
+    ros::Publisher path_pub_;
+
+
+    //service clients
+    ros::ServiceClient get_POIs_client_;
+};
+
+#endif
diff --git a/homer_navigation/launch/homer_navigation.launch b/homer_navigation/launch/homer_navigation.launch
new file mode 100644
index 0000000000000000000000000000000000000000..db217818f217c26ead905d64d0bb2e7523d1a821
--- /dev/null
+++ b/homer_navigation/launch/homer_navigation.launch
@@ -0,0 +1,4 @@
+<launch>
+ <rosparam command="load" file="$(find homer_navigation)/config/homer_navigation.yaml"/>
+ <node ns="/homer_navigation" name="homer_navigation" pkg="homer_navigation" type="homer_navigation" output="screen"/>
+</launch>
diff --git a/homer_navigation/launch/homer_navigation_followme.launch b/homer_navigation/launch/homer_navigation_followme.launch
new file mode 100644
index 0000000000000000000000000000000000000000..419db5e814b5c2c120b60e549283e73751339e0a
--- /dev/null
+++ b/homer_navigation/launch/homer_navigation_followme.launch
@@ -0,0 +1,4 @@
+<launch>
+ <rosparam command="load" file="$(find homer_navigation)/config/homer_navigation_followme.yaml"/>
+ <node ns="/homer_navigation" name="homer_navigation" pkg="homer_navigation" type="homer_navigation" output="screen"/>
+</launch>
diff --git a/homer_navigation/launch/homer_navigation_ros.launch b/homer_navigation/launch/homer_navigation_ros.launch
new file mode 100644
index 0000000000000000000000000000000000000000..04a131d5b115687e8d631c02a603d97cd0afe736
--- /dev/null
+++ b/homer_navigation/launch/homer_navigation_ros.launch
@@ -0,0 +1,6 @@
+<launch>
+ <rosparam command="load" file="$(find homer_navigation)/config/homer_navigation.yaml"/>
+ <node ns="/homer_navigation" name="homer_navigation" pkg="homer_navigation" type="homer_navigation" output="screen">
+ <remap from="/robot_platform/cmd_vel" to="/cmd_vel"/>
+ </node>
+</launch>
diff --git a/homer_navigation/package.xml b/homer_navigation/package.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3526b91403ca0e8eb26d9898e36372f004ffc144
--- /dev/null
+++ b/homer_navigation/package.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0"?>
+<package>
+	<name>homer_navigation</name>
+	<version>1.0.11</version>
+	<description>The homer_navigation package</description>
+
+	<maintainer email="vseib@uni-koblenz.de">Viktor Seib</maintainer>
+	<maintainer email="niyawe@uni-koblenz.de">Niklas Yann Wettengel</maintainer>
+	<maintainer email="heuer@uni-koblenz.de">Gregor Heuer</maintainer>
+	<maintainer email="raphael@uni-koblenz.de">Raphael Memmesheimer</maintainer>
+
+	<author email="mknauf@uni-koblenz.de">Malte Knauf</author>
+	<license>GPLv3</license>
+
+	<buildtool_depend>catkin</buildtool_depend>
+	<build_depend>roscpp</build_depend>
+	<build_depend>roslib</build_depend>
+	<build_depend>homer_nav_libs</build_depend>
+	<build_depend>nav_msgs</build_depend>
+	<build_depend>sensor_msgs</build_depend>
+	<build_depend>homer_mapnav_msgs</build_depend>
+	<build_depend>tf</build_depend>
+	<build_depend>cmake_modules</build_depend>
+	<build_depend>eigen</build_depend>
+	<build_depend>robbie_architecture</build_depend>
+
+	<run_depend>roscpp</run_depend>
+	<run_depend>roslib</run_depend>
+	<run_depend>homer_nav_libs</run_depend>
+	<run_depend>nav_msgs</run_depend>
+	<run_depend>sensor_msgs</run_depend>
+	<run_depend>homer_mapnav_msgs</run_depend>
+	<run_depend>tf</run_depend>
+	<run_depend>robbie_architecture</run_depend>
+	<!-- The export tag contains other, unspecified, tags -->
+	<export>
+		<!-- You can specify that this package is a metapackage here: -->
+		<!-- <metapackage/> -->
+
+		<!-- Other tools can request additional information be placed here -->
+
+	</export>
+</package>
diff --git a/homer_navigation/readme.pdf b/homer_navigation/readme.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..808199ca0b0e7635cc36e1000a53c87196827351
Binary files /dev/null and b/homer_navigation/readme.pdf differ
diff --git a/homer_navigation/src/homer_navigation_node.cpp b/homer_navigation/src/homer_navigation_node.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5897946e6fe76ac3cbe0b658f0660b7c2398bdf4
--- /dev/null
+++ b/homer_navigation/src/homer_navigation_node.cpp
@@ -0,0 +1,1069 @@
+
+#include <vector>
+#include <iostream>
+#include <sstream>
+#include <cmath>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include <ros/package.h>
+
+#include "homer_navigation/homer_navigation_node.h"
+
+//messages
+#include <std_msgs/Empty.h>
+#include <homer_mapnav_msgs/TargetUnreachable.h>
+#include <homer_mapnav_msgs/GetPointsOfInterest.h>
+#include <homer_mapnav_msgs/ModifyMap.h>
+#include <nav_msgs/Path.h>
+#include <std_msgs/Int8.h>
+#include <tools/tools.h>
+#include <tools/loadRosConfig.h>
+
+//nav_libs
+#include "Explorer/Explorer.h"
+#include "SpeedControl/SpeedControl.h"
+
+using namespace std;
+
+
+HomerNavigationNode::HomerNavigationNode()
+{
+    ros::NodeHandle nh;
+
+	srand(time(NULL));// Initialize random numbers
+
+    //subscribers
+    map_sub_ 				= nh.subscribe<nav_msgs::OccupancyGrid>("/map", 1, &HomerNavigationNode::mapCallback, this);
+    pose_sub_				= nh.subscribe<geometry_msgs::PoseStamped>("/pose", 1, &HomerNavigationNode::poseCallback, this);
+    laser_data_sub_			= nh.subscribe<sensor_msgs::LaserScan>("/scan", 1, &HomerNavigationNode::laserDataCallback, this);
+    laser_back_data_sub_    = nh.subscribe<sensor_msgs::LaserScan>("/back_scan", 1, &HomerNavigationNode::backLaserCallback, this);
+    start_navigation_sub_ 	= nh.subscribe<homer_mapnav_msgs::StartNavigation>("/homer_navigation/start_navigation", 1, &HomerNavigationNode::startNavigationCallback, this);
+    stop_navigation_sub_ 	= nh.subscribe<homer_mapnav_msgs::StopNavigation>("/homer_navigation/stop_navigation", 1, &HomerNavigationNode::stopNavigationCallback, this);
+    navigate_to_poi_sub_	= nh.subscribe<homer_mapnav_msgs::NavigateToPOI>("/homer_navigation/navigate_to_POI", 1, &HomerNavigationNode::navigateToPOICallback, this);
+    unknown_threshold_sub_ 	= nh.subscribe<std_msgs::Int8>("/homer_navigation/unknown_threshold", 1, &HomerNavigationNode::unknownThresholdCallback, this);
+    refresh_param_sub_ 		= nh.subscribe<std_msgs::Empty>("/homer_navigation/refresh_params", 1, &HomerNavigationNode::refreshParamsCallback, this);
+
+	cmd_vel_pub_			= nh.advertise<geometry_msgs::Twist>("/robot_platform/cmd_vel", 1);
+    target_reached_pub_ 	= nh.advertise<std_msgs::Empty>("/homer_navigation/target_reached", 1);
+    target_unreachable_pub_ = nh.advertise<homer_mapnav_msgs::TargetUnreachable>("/homer_navigation/target_unreachable", 1);
+    path_pub_ 				= nh.advertise<nav_msgs::Path>("/homer_navigation/path", 1);
+    get_POIs_client_ 		= nh.serviceClient<homer_mapnav_msgs::GetPointsOfInterest>("/map_manager/get_pois");
+
+
+	m_move_base_simple_goal_sub_ = nh.subscribe<geometry_msgs::PoseStamped>("/move_base_simple/goal", 1, &HomerNavigationNode::moveBaseSimpleGoalCallback, this); // for RVIZ usage
+
+
+
+    m_MapTypeMachine.setName( "HomerNavigation Node" );
+	ADD_MACHINE_STATE( m_MapTypeMachine, SLAM_MAP );
+	ADD_MACHINE_STATE( m_MapTypeMachine, NAVIGATION_MAP );
+	m_MapTypeMachine.setState( SLAM_MAP );
+
+    m_MainMachine.setName( "HomerNavigation Main" );
+	ADD_MACHINE_STATE( m_MainMachine, IDLE );
+	ADD_MACHINE_STATE( m_MainMachine, AWAITING_EXPLORATION_MAP );
+	ADD_MACHINE_STATE( m_MainMachine, AWAITING_PATHPLANNING_MAP );
+	ADD_MACHINE_STATE( m_MainMachine, FOLLOWING_PATH );
+	ADD_MACHINE_STATE( m_MainMachine, AVOIDING_COLLISION );
+	ADD_MACHINE_STATE( m_MainMachine, FINAL_TURN );
+    ADD_MACHINE_STATE( m_MainMachine, TARGET_REACHED );
+	
+	m_avoided_collision = false; 
+	 
+    init();
+    m_act_speed = 0;
+    m_act_angle = 0; 
+}
+
+void HomerNavigationNode::loadParameters()
+{
+    SpeedControl::loadDimensions();
+    
+	//Explorer constructor 
+    loadConfigValue("/homer_navigation/safe_path_weight", 				m_SafePathWeight);
+    loadConfigValue("/homer_mapping/resolution", 						resolution_);
+    loadConfigValue("/homer_navigation/allowed_obstacle_distance/min", 	m_AllowedObstacleDistance.first);
+    loadConfigValue("/homer_navigation/allowed_obstacle_distance/max", 	m_AllowedObstacleDistance.second);
+    m_AllowedObstacleDistance.first /= resolution_;
+    m_AllowedObstacleDistance.second/= resolution_;
+    loadConfigValue("/homer_navigation/safe_obstacle_distance/min", 	m_SafeObstacleDistance.first);
+    loadConfigValue("/homer_navigation/safe_obstacle_distance/max", 	m_SafeObstacleDistance.second);
+    m_SafeObstacleDistance.first /= resolution_;
+    m_SafeObstacleDistance.second /= resolution_;
+    loadConfigValue("/homer_navigation/frontier_safeness_factor", 		m_FrontierSafenessFactor);
+	
+	//Explorer     
+    loadConfigValue("/homer_navigation/waypoint_sampling_threshold", 	waypoint_sampling_threshold_);    
+    
+    //check path 
+    loadConfigValue("/homer_navigation/check_path", 					check_path_);
+    loadConfigValue("/homer_navigation/check_path_max_errors", 			check_path_max_errors_);
+    loadConfigValue("/homer_navigation/check_path_max_distance", 		check_path_max_distance_);
+    
+    //collision 
+    loadConfigValue("/homer_navigation/collision_distance", 			collision_distance_);
+    loadConfigValue("/homer_navigation/collision_distance_near_target", collision_distance_near_target_);
+
+	//moveRobot config values
+	loadConfigValue("/homer_navigation/backward_distance", 							 backward_distance_);
+	loadConfigValue("/homer_navigation/max_trans_vel", 								 m_MaxTransVel);
+    loadConfigValue("/homer_navigation/max_rot_vel", 								 m_MaxRotVel);
+    loadConfigValue("/homer_navigation/speed_control/last_speedfactor_count", 		 m_SpeedFactorMeanFilterSize);
+    loadConfigValue("/homer_navigation/speed_control/min_move_speedfactor", 		 m_MinMoveSpeedFactor);
+    loadConfigValue("/homer_navigation/speed_control/min_turn_speedfactor_moving", 	 m_MinTurnSpeedFactorMoving);
+    loadConfigValue("/homer_navigation/speed_control/min_turn_speedfactor_standing", m_MinTurnSpeedFactorStanding);
+    loadConfigValue("/homer_navigation/turn_threshold_angle", 						 turn_threshold_angle_);
+
+	//cmd_vel config values
+    loadConfigValue("/homer_navigation/use_cmd_vel", 					m_use_cmd_vel_);
+    loadConfigValue("/homer_navigation/min_turn_angle", 				m_min_turn_angle);
+    loadConfigValue("/homer_navigation/max_turn_speed", 				m_max_turn_speed);
+    loadConfigValue("/homer_navigation/max_move_speed", 				m_max_move_speed);
+    loadConfigValue("/homer_navigation/max_drive_angle",				m_max_drive_angle);
+
+}
+
+
+void HomerNavigationNode::init()
+{
+    last_map_timestamp_ = ros::Time(0);
+
+	loadParameters();
+
+    robot_pose_.position.x = 0.0;
+    robot_pose_.position.y = 0.0;
+    robot_pose_.position.z = 0.0;
+    robot_pose_.orientation = tf::createQuaternionMsgFromYaw(0.0);
+
+    last_laser_time_ = ros::Time::now();
+
+    explorer_ = new Explorer ( m_AllowedObstacleDistance.first, m_AllowedObstacleDistance.second,
+								m_SafeObstacleDistance.first, m_SafeObstacleDistance.second,
+								m_SafePathWeight, m_FrontierSafenessFactor );
+
+    m_MainMachine.setState ( IDLE );
+}
+
+HomerNavigationNode::~HomerNavigationNode()
+{
+    if ( explorer_ )
+	{
+        delete explorer_;
+	}
+    if(last_map_data_)
+    {
+        delete last_map_data_;
+    }
+}
+
+void HomerNavigationNode::sendStopRobot()
+{
+    m_act_speed = 0;
+    m_act_angle = 0; 
+	geometry_msgs::Twist cmd_vel_msg;
+	cmd_vel_msg.linear.x = 0;
+	cmd_vel_msg.linear.y = 0;
+	cmd_vel_msg.linear.z = 0;
+	cmd_vel_msg.angular.x = 0;
+	cmd_vel_msg.angular.y = 0;
+	cmd_vel_msg.angular.z = 0;
+	cmd_vel_pub_.publish(cmd_vel_msg);
+}
+
+void HomerNavigationNode::idleProcess()
+{
+	if ( m_MainMachine.state() == FOLLOWING_PATH )
+	{
+	    if ( (ros::Time::now() - last_laser_time_) > ros::Duration(2.0) )
+	    {
+	        ROS_ERROR_STREAM( "Laser data timeout!\n");
+			sendTargetUnreachableMsg(homer_mapnav_msgs::TargetUnreachable::LASER_TIMEOUT);
+		}
+	}
+}
+
+
+void HomerNavigationNode::calculatePath()
+{
+    float desired_distance_2 = desired_distance_ - 0.05;
+    if ( desired_distance_2 < resolution_ )
+	{
+      desired_distance_2 = resolution_;
+	}
+    explorer_->setStart ( map_tools::toMapCoords( robot_pose_.position,  origin_, resolution_) );
+
+    if ( map_tools::distance( map_tools::fromMapCoords( target_approx_, origin_, resolution_ ), target_point_ ) <= desired_distance_ )
+	{
+      ROS_INFO_STREAM( "There is a way to the target circle. Planning direct path." );
+      explorer_->setTarget ( map_tools::toMapCoords( target_point_, origin_, resolution_ ), desired_distance_2 / resolution_ );
+	}
+	else
+	{
+      ROS_INFO_STREAM( "The target area is not reachable. Trying to go as close as possible." );
+      explorer_->setTarget ( target_approx_, 0 );
+	}
+
+	bool success;
+    pixel_path_ = explorer_->getPath( success );
+    if ( !success )
+	{
+        ROS_WARN_STREAM("No path found for navigation, reporting as unreachable." );
+        sendTargetUnreachableMsg(homer_mapnav_msgs::TargetUnreachable::NO_PATH_FOUND);
+	}
+	else
+	{
+		ROS_INFO_STREAM("homer_navigation::calculatePath - Path Size: " << pixel_path_.size());
+		std::vector<Eigen::Vector2i> waypoint_pixels = explorer_->sampleWaypointsFromPath ( pixel_path_, waypoint_sampling_threshold_ );
+		waypoints_.clear();
+		for(std::vector<Eigen::Vector2i>::iterator it = waypoint_pixels.begin(); it != waypoint_pixels.end(); ++it)
+		{
+		    geometry_msgs::PoseStamped poseStamped;
+		    poseStamped.pose.position = map_tools::fromMapCoords(*it, origin_, resolution_);
+		    poseStamped.pose.orientation.x = 0.0;
+		    poseStamped.pose.orientation.y = 0.0;
+		    poseStamped.pose.orientation.z = 0.0;
+		    poseStamped.pose.orientation.w = 1.0;
+		    waypoints_.push_back(poseStamped);
+		}
+
+		ROS_INFO_STREAM("homer_navigation::calculatePath - Path Size: " << waypoints_.size());
+
+		sendPathData();
+		//make sure no timeout occurs after long calculation time
+		last_laser_time_ = ros::Time::now();
+	}
+}
+
+
+void HomerNavigationNode::startExploration()
+{
+    ROS_INFO_STREAM( "Starting exploration." );
+/*
+	m_Explorer->resetExploration();
+	m_Explorer->setOccupancyMap ( gridSize, gridSize, mapData, m_ExploredRegion );
+	m_Explorer->setFrontierSafenessFactor( m_FrontierSafenessFactor );
+	m_Explorer->setStart ( m_CoordinateConverter->worldToMap ( m_RobotPose ) );
+
+	bool success;
+	m_PixelPath= m_Explorer->getExplorationTransformPath( success );
+
+	if ( success ) {
+		m_Target = m_CoordinateConverter->mapToWorld( m_PixelPath.back() );
+		m_TargetApprox = m_PixelPath.back();
+	}
+
+	vector<Pixel> waypointPixels = m_Explorer->sampleWaypointsFromPath ( m_PixelPath, m_WaypointSamplingThreshold );
+	m_Waypoints = m_CoordinateConverter->mapToWorld ( waypointPixels );
+*/
+
+    if ( pixel_path_.size() == 0 )
+	{
+        ROS_WARN_STREAM("No path found for exploration, sending NoTargetM." );
+        //sendMessage ( new NoTargetM() );
+		m_MainMachine.setState( IDLE );
+	}
+	else
+	{
+		m_MainMachine.setState ( FOLLOWING_PATH );
+		sendPathData();
+	}
+  //make sure no timeout occurs after long calculation time
+    last_laser_time_ = ros::Time::now();
+}
+
+
+void HomerNavigationNode::startNavigation()
+{
+    ROS_INFO_STREAM("Starting navigation to " << target_point_.x << "," << target_point_.y);
+
+    if ( distanceTo(target_point_) < desired_distance_ )
+	{
+        ROS_INFO_STREAM( "Will not (re-)plan path: Target position already reached." );
+		targetPositionReached();
+		return;
+	}
+    ROS_INFO_STREAM( "Distance to target still too large (" << distanceTo( target_point_ ) << "m; requested: " << desired_distance_ << "m)" );
+
+    ROS_DEBUG_STREAM("homer_navigation_node::startNavigation: target point " << target_point_.x << " " << target_point_.y);
+    Eigen::Vector2i new_target = map_tools::toMapCoords(target_point_, origin_, resolution_);
+    ROS_DEBUG_STREAM("homer_navigation_node::startNavigation: target cell " << new_target);
+    Eigen::Vector2i new_target_approx;
+
+	switch ( m_MapTypeMachine.state() )
+	{
+		case SLAM_MAP:
+        {
+            ROS_INFO_STREAM( "Resetting occupancy map." );
+
+            if(fast_path_planning_)
+            {
+                maskMap();
+            }
+            explorer_->setOccupancyMap(width_, width_, origin_, &(*last_map_data_)[0]);
+            explorer_->setStart(map_tools::toMapCoords(robot_pose_.position, origin_, resolution_));
+            new_target_approx = explorer_->getNearestAccessibleTarget(new_target);
+			break;
+        }
+		case NAVIGATION_MAP:
+            ROS_INFO_STREAM( "Updating obstacles in externally assigned navigation map." );
+            explorer_->updateObstacles( width_, width_, origin_, &(*last_map_data_)[0] );
+            explorer_->setStart(map_tools::toMapCoords(robot_pose_.position, origin_, resolution_));
+            new_target_approx = new_target;
+			break;
+	}
+
+    geometry_msgs::Point new_target_approx_world = map_tools::fromMapCoords(new_target_approx, origin_, resolution_);
+    ROS_INFO_STREAM("start Navigation: Approx target: " << new_target_approx_world);
+
+    bool new_approx_is_better = ( map_tools::distance( robot_pose_.position, target_point_ ) - map_tools::distance( new_target_approx_world, target_point_ ) ) > 0.2;
+    bool new_approx_reaches_target = ( map_tools::distance(new_target_approx_world, target_point_ ) < desired_distance_ );
+    m_path_reaches_target = new_approx_reaches_target;
+    if ( !new_approx_is_better && !new_approx_reaches_target )
+	{
+      ROS_WARN_STREAM( "No better way to target found, turning and then reporting as unreachable."
+          <<     endl << "Distance to target: " << distanceTo( target_point_ ) << "m; requested: " << desired_distance_ << "m" );
+	  m_MainMachine.setState( FINAL_TURN );
+	}
+	else
+	{
+      target_approx_ = new_target_approx;
+      m_MainMachine.setState ( FOLLOWING_PATH );
+      calculatePath();
+	}
+  }
+  
+void HomerNavigationNode::sendPathData()
+{
+    geometry_msgs::PoseStamped pose_stamped;
+    pose_stamped.pose = robot_pose_;
+    pose_stamped.header.frame_id = "/map";
+	pose_stamped.header.stamp = ros::Time::now();
+	
+    nav_msgs::Path msg;
+    msg.poses = waypoints_;
+    if(waypoints_.size() > 0)
+        msg.poses.insert(msg.poses.begin(), pose_stamped);
+    path_pub_.publish(msg);
+ }
+
+void HomerNavigationNode::sendTargetReachedMsg() {
+	sendStopRobot();
+    m_MainMachine.setState( IDLE );
+    std_msgs::Empty reached_msg;
+    target_reached_pub_.publish(reached_msg);
+    waypoints_.clear();
+    nav_msgs::Path empty_path_msg;
+    empty_path_msg.poses = waypoints_;
+    path_pub_.publish(empty_path_msg);
+    ROS_INFO_STREAM("TargetReachedMsg");
+}
+
+void HomerNavigationNode::sendTargetUnreachableMsg( int8_t reason ) {
+	sendStopRobot();
+	m_MainMachine.setState( IDLE );
+    homer_mapnav_msgs::TargetUnreachable unreachable_msg;
+    unreachable_msg.reason = reason;
+    target_unreachable_pub_.publish(unreachable_msg);
+    waypoints_.clear();
+    nav_msgs::Path empty_path_msg;
+    empty_path_msg.poses = waypoints_;
+    path_pub_.publish(empty_path_msg);
+    ROS_INFO_STREAM("TargetUnreachableMsg");
+}
+
+void HomerNavigationNode::targetPositionReached()
+{
+  //we're as close s we can get, target reached
+    ROS_INFO_STREAM( "Target position reached. Distance to target: " << distanceTo( target_point_ ) << "m. Desired distance:" << desired_distance_ << "m" );
+	sendStopRobot();
+   // usleep( 30000 );
+    waypoints_.clear();
+    sendPathData();
+	m_MainMachine.setState( FINAL_TURN );
+    ROS_INFO_STREAM("Turning to look-at point");
+}
+
+
+void HomerNavigationNode::checkPath()
+{
+    invalid_path_count_=0;
+    for ( unsigned i=0; i<pixel_path_.size(); i++ )
+	{
+        geometry_msgs::Point p = map_tools::fromMapCoords(pixel_path_.at(i), origin_, resolution_);
+        if ( distanceTo(p) > check_path_max_distance_ )
+		{
+			continue;
+		}
+        if (map_tools::findValue( last_map_data_, width_, height_, pixel_path_[i].x(), pixel_path_[i].y(), 90, m_AllowedObstacleDistance.first ) )
+		{
+            invalid_path_count_++;
+            ROS_WARN_STREAM("Obstacle detected in current path " << invalid_path_count_ << " of " << check_path_max_errors_ << " times.");
+
+            if ( invalid_path_count_ >= check_path_max_errors_ )
+            {
+                ROS_WARN_STREAM( "Replanning path." );
+                currentPathFinished();
+			}
+			return;
+		}
+	}
+}
+
+void HomerNavigationNode::handleCollision ()
+{
+	if ( m_MainMachine.state()== FOLLOWING_PATH )
+	{
+        sendStopRobot();
+        if( distanceTo( target_point_) < collision_distance_near_target_ )
+        {
+            ROS_INFO_STREAM("Collision detected near target. Switch to final turn.");
+            targetPositionReached();
+        }
+        else
+        {
+            m_MainMachine.setState( AVOIDING_COLLISION );
+            ROS_WARN_STREAM( "Collision detected while following path!" );
+        }
+    }
+}
+
+float HomerNavigationNode::calcSpeedFactor()
+{
+    float speedFactor = SpeedControl::getSpeedFactor(laser_points_, m_MinMoveSpeedFactor, 1.0 );
+
+	m_LastSpeedFactors.push_back( speedFactor );
+	if ( m_LastSpeedFactors.size() > m_SpeedFactorMeanFilterSize ) { m_LastSpeedFactors.pop_front(); }
+
+    float speedFactorMean = mean( m_LastSpeedFactors );
+
+	return speedFactorMean;
+}
+
+
+void HomerNavigationNode::performNextMove()
+{
+    float maxMoveDistance = SpeedControl::getMaxMoveDistance ( laser_points_ );
+	float speedFactor = calcSpeedFactor();
+
+	switch ( m_MainMachine.state() )
+	{
+		case FOLLOWING_PATH:
+		{
+            if ( distanceTo( target_point_ ) < desired_distance_ )
+			{
+                ROS_INFO_STREAM( "Desired distance to target was reached." );
+				targetPositionReached();
+				return;
+            }
+
+			float waypointRadiusLaser = 0.125 * maxMoveDistance;
+
+            Eigen::Vector2i waypointPixel = map_tools::toMapCoords(waypoints_[0].pose.position, origin_, resolution_);
+            float obstacleDistanceMap = explorer_->getObstacleTransform()->getValue( waypointPixel.x(), waypointPixel.y() );
+            float waypointRadiusMap = 0.125 * obstacleDistanceMap * resolution_;
+
+			float waypointRadius = waypointRadiusLaser + waypointRadiusMap;
+            if ( ( waypointRadius < resolution_ ) || ( waypoints_.size() == 1 ) )
+			{
+                waypointRadius = resolution_;
+			}
+
+            //if we have accidentaly skipped waypoints, recalculate path
+			float minDistance=FLT_MAX;
+			unsigned nearestWaypoint=0;
+            for ( unsigned i=0; i<waypoints_.size(); i++ )
+			{
+                if ( distanceTo( waypoints_[i].pose.position ) < minDistance ) {
+					nearestWaypoint = i;
+                    minDistance = distanceTo( waypoints_[i].pose.position );
+				}
+			}
+			if ( nearestWaypoint != 0 )
+			{
+                ROS_WARN_STREAM("Waypoints skipped. Recalculating path!");
+				calculatePath();
+				if ( m_MainMachine.state() != FOLLOWING_PATH ) { break; }
+			}
+
+            ROS_DEBUG_STREAM("NextMove DEBUG VALUES: maxMoveDistance="<< maxMoveDistance <<"\n"
+                            << "\tWaypointRadiusLaser=" << waypointRadiusLaser << "\n\t"
+                            << "obstacleDistanceMap=" << obstacleDistanceMap << "\n\t"
+                            << "");
+
+            //check if current waypoint has been reached
+            if ( (waypoints_.size() != 0) && ( distanceTo( waypoints_[0].pose.position ) < waypointRadius ) )
+            {
+                waypoints_.erase ( waypoints_.begin() );
+                ROS_DEBUG_STREAM("homer_navigation::performNextMove(): Current waypoint has been reached! Still " << waypoints_.size() << " to reach!");
+            }
+
+			sendPathData();
+
+			ROS_ERROR_STREAM("waypointRadius: " << waypointRadius);
+            //last wayoint reached
+            if ( waypoints_.size() == 0 )
+			{
+                ROS_INFO_STREAM("Last waypoint reached");
+				currentPathFinished();
+				return;
+            }
+
+            geometry_msgs::Point currentWaypoint = waypoints_[0].pose.position;
+
+			double distanceToWaypoint = distanceTo ( currentWaypoint );
+			double angleToWaypoint = angleToPointDeg ( currentWaypoint );
+
+            ROS_DEBUG_STREAM("homer_navigation::performNextMove(): Distance to waypoint: "<<distanceToWaypoint<<" Angle to waypoint: "<< (angleToWaypoint) << " Waypoint: " << currentWaypoint << "Robot Pose: " << robot_pose_.position << " Robot orientation " << tf::getYaw(robot_pose_.orientation)) ;
+
+			ostringstream stream;
+			stream.precision(2);
+
+			if (!m_use_cmd_vel_) 
+			{
+				ROS_ERROR_STREAM("Not supported");
+			}
+				//move to next waypoint if heading in right direction
+			else // else use cmd_vel
+			{
+				if (angleToWaypoint < -180)
+				{
+					angleToWaypoint += 360;
+				}	
+
+				//linear speed calculation
+				double speed = distanceToWaypoint; 
+				if (speed < 0 )
+				{
+					speed = max(speed,-m_max_move_speed);
+				}
+				else
+				{
+					speed = min(speed,m_max_move_speed);
+				}
+				if(m_avoided_collision)
+				{
+					if( std::abs(angleToWaypoint) < 10)
+					{
+						m_avoided_collision = false;
+					}
+					else
+					{
+						speed = 0;
+					}
+				}
+				//linear speed calculation end
+				//angular speed calculation
+				double angle = angleToWaypoint*3.14/180.0;
+				if (abs(angle) < m_min_turn_angle)
+				{
+					angle = 0.0;
+				}
+				else
+				{
+					if (abs(angle) > m_max_drive_angle)
+					{
+						speed = 0.0;
+					}
+					if (angle < 0 )
+					{
+						angle = max(angle,-m_max_turn_speed);
+					}
+					else
+					{
+						angle = min(angle,m_max_turn_speed);
+					}
+					if (distanceToWaypoint < 1.0)
+					{
+					angle *= distanceToWaypoint;
+					}
+					// min speed for angles because under 0.35 the machine is really really slow
+					if (speed < 0.07)
+					{
+						if ( angle < 0 ) 
+						{
+							angle = min(angle,-0.45);
+						}
+						else
+						{
+							angle = max(angle,0.45);
+						}
+					}
+				}
+				//angular speed calculation end			
+
+				m_act_speed = speed;
+    			m_act_angle = angle; 
+				geometry_msgs::Twist cmd_vel_msg;
+				cmd_vel_msg.linear.x = speed;			
+				cmd_vel_msg.angular.z = angle;
+				cmd_vel_pub_.publish(cmd_vel_msg);
+
+				stream << "Driving & turning" << endl;
+				stream << "linear: " << speed << " angular: " << angle << endl;
+				stream << "distanceToWaypoint:" << distanceToWaypoint << "angleToWaypoint: " << angleToWaypoint << endl;
+			}
+			ROS_INFO_STREAM( stream.str() );
+			break;
+		}
+
+		case AVOIDING_COLLISION:
+		{
+            if( distanceTo( target_point_) < collision_distance_near_target_ )
+            {
+                ROS_INFO_STREAM("Collision detected near target. Switch to final turn.");
+                targetPositionReached();
+            } 
+			else if ( maxMoveDistance <= collision_distance_ )
+			{
+				ostringstream stream;
+                stream << "Maximum driving distance too short (" << maxMoveDistance << "m)! Moving back.";
+                ROS_WARN_STREAM( stream.str() );
+				if (!m_use_cmd_vel_)
+				{
+					ROS_ERROR_STREAM("Not supported");
+				}
+				else // cmd_vel
+				{
+                    geometry_msgs::Twist cmd_vel_msg;
+                    if(HomerNavigationNode::obstacleBackwardDistance() > 0.4)
+                    {
+                        cmd_vel_msg.linear.x = -0.3;
+                    }
+                    else
+                    {
+                        cmd_vel_msg.angular.z = -0.45;
+                    }
+                    cmd_vel_pub_.publish(cmd_vel_msg);
+				}
+			} 
+			else
+			{
+				m_avoided_collision = true;
+                ROS_WARN_STREAM( "Collision avoided. Updating path." );
+                currentPathFinished();
+			}
+			break;
+		}
+		case FINAL_TURN:
+		{
+			if ( skip_final_turn_ ) 
+			{
+                ROS_INFO_STREAM("Final turn skipped. Target reached.");
+                if( m_path_reaches_target	)
+                {
+        			sendTargetReachedMsg();
+        		}
+        		else
+        		{
+        			sendTargetUnreachableMsg(homer_mapnav_msgs::TargetUnreachable::NO_PATH_FOUND);
+        		}
+				break;
+			}
+
+			double turnAngle = minTurnAngle( tf::getYaw(robot_pose_.orientation), target_orientation_ );
+			ROS_INFO_STREAM("homer_navigation::PerformNextMove:: Final Turn. Robot orientation: " << rad2Deg(tf::getYaw(robot_pose_.orientation)) << ". Target orientation: " << rad2Deg(target_orientation_) );
+			ROS_DEBUG_STREAM ( "homer_navigation::PerformNextMove:: turnAngle: " << rad2Deg(turnAngle));
+			if (m_use_cmd_vel_ ) // final turn with cmd_vel
+			{
+				if (turnAngle< 0 )
+				{
+					turnAngle= max(turnAngle,-m_max_turn_speed);
+				}
+				else
+				{
+					turnAngle = min(turnAngle,m_max_turn_speed);
+				}
+				
+				if (abs(turnAngle) < m_min_turn_angle) 
+				{
+					ROS_INFO_STREAM(":::::::TARGET REACHED BECAUSE lower "<<m_min_turn_angle);
+					if( m_path_reaches_target	)
+		            {
+		    			sendTargetReachedMsg();
+		    		}
+		    		else
+		    		{
+		    			sendTargetUnreachableMsg(homer_mapnav_msgs::TargetUnreachable::NO_PATH_FOUND);
+		    		}
+				}
+				else
+				{
+					geometry_msgs::Twist cmd_vel_msg;
+					cmd_vel_msg.angular.z = turnAngle;
+					cmd_vel_pub_.publish(cmd_vel_msg);				
+				}
+			}
+			break;
+		}
+
+		case AWAITING_EXPLORATION_MAP:
+		case AWAITING_PATHPLANNING_MAP:
+        {
+      //make sure that the robot doesn't move
+            ROS_INFO_STREAM("Awaiting pathplanning map");
+			sendStopRobot();
+			break;
+        }
+        case IDLE:
+			break;
+    }
+}
+
+void HomerNavigationNode::currentPathFinished() // also used for replanning
+{
+    ROS_INFO_STREAM( "Current path was finished, initiating recalculation.");
+	waypoints_.clear();
+	sendStopRobot();
+	m_MainMachine.setState( AWAITING_PATHPLANNING_MAP );
+
+}
+
+// returns angle to target point in degrees(!)
+int HomerNavigationNode::angleToPointDeg ( geometry_msgs::Point target )
+{
+    double cx = robot_pose_.position.x;
+    double cy = robot_pose_.position.y;
+    int targetAngle = rad2Deg( atan2 ( target.y - cy, target.x - cx ) );
+    int currentAngle = rad2Deg( tf::getYaw(robot_pose_.orientation) );
+
+    int angleDiff = targetAngle - currentAngle;
+    angleDiff = (angleDiff + 180) % 360 - 180;
+	return angleDiff;
+}
+
+
+double HomerNavigationNode::distanceTo ( geometry_msgs::Point target )
+{
+    double cx = robot_pose_.position.x;
+    double cy = robot_pose_.position.y;
+    double distance_to_target_2 = ( cx - target.x ) * ( cx - target.x ) + ( cy - target.y ) * ( cy - target.y );
+    return sqrt ( distance_to_target_2 );
+}
+
+float HomerNavigationNode::obstacleBackwardDistance()
+{
+    float min_y = -0.27; 
+    float max_y =  0.27;
+
+    float back_distance = 4;
+
+    for(float depth = -0.3 ; depth > -1.0; depth -= 0.01) 
+    {
+        for(float y = min_y ; y <= max_y ; y += 0.1) 
+        {
+            geometry_msgs::Point base_link_point;
+            base_link_point.x = depth;
+            base_link_point.y = y;
+            geometry_msgs::Point map_point = map_tools::transformPoint(base_link_point, transform_listener_ ,"/base_link", "/map");
+            int i = map_tools::map_index(map_point, origin_ ,width_,resolution_);
+            if(last_map_data_->at(i) > 90)
+            {
+              if(back_distance > HomerNavigationNode::distanceTo(map_point))
+              {
+                  back_distance = HomerNavigationNode::distanceTo(map_point);
+              }
+            }
+        }
+        if(back_distance != 4)
+        {
+            break;
+        }
+    }
+    ROS_ERROR_STREAM("Back Distance: "<< back_distance);
+    return back_distance;
+}
+
+void HomerNavigationNode::actualizeStatusInfo()
+{
+	ostringstream stream;
+	stream << m_MapTypeMachine.stateString() << '\n'
+           << m_MainMachine.stateString();
+    ROS_DEBUG_STREAM( stream.str() );
+}
+
+void HomerNavigationNode::maskMap()
+{
+    //generate bounding box
+    ROS_INFO_STREAM("Calculating Bounding box for fast planning");
+    Eigen::Vector2i pose_pixel =  map_tools::toMapCoords( robot_pose_.position,  origin_, resolution_);
+    Eigen::Vector2i target_pixel =  map_tools::toMapCoords( target_point_,  origin_, resolution_);
+    Eigen::Vector2i safe_pixel_distance(m_AllowedObstacleDistance.first * 4,
+                                        m_AllowedObstacleDistance.first * 4);
+    Eigen::AlignedBox2i planning_box;
+    planning_box.extend(pose_pixel);
+    planning_box.extend(target_pixel);
+    ROS_INFO_STREAM("Bounding Box: (" << planning_box.min() << " " << planning_box.max());
+    Eigen::AlignedBox2i safe_planning_box(planning_box.min() - safe_pixel_distance, planning_box.max() + safe_pixel_distance);
+    ROS_INFO_STREAM("safe Bounding Box: (" << safe_planning_box.min() << " " << safe_planning_box.max());
+    ROS_INFO_STREAM("min in m: " <<map_tools::fromMapCoords(safe_planning_box.min(), origin_, resolution_));
+    ROS_INFO_STREAM("max in m: "<<map_tools::fromMapCoords(safe_planning_box.max(), origin_, resolution_));
+    for(size_t x = 0; x < width_; x++)
+  	{
+        for(size_t y = 0; y < width_; y++)
+        {
+            if(!safe_planning_box.contains(Eigen::Vector2i(x, y)))
+            {
+                last_map_data_->at(y * width_ + x) = -1;
+
+            }
+		}		
+	}	
+}
+
+//convenience math functions
+float HomerNavigationNode::minTurnAngle( float angle1, float angle2 )
+{
+  angle1 *= 180.0/M_PI;
+  angle2 *= 180.0/M_PI;
+
+  int diff= angle2 - angle1;
+  diff = (diff + 180) % 360 - 180;
+
+  float ret = static_cast<double>(diff) * M_PI/180.0;
+  return ret;
+}
+
+template<class ContainerT>
+double HomerNavigationNode::mean ( const ContainerT& values )
+{
+  typename ContainerT::const_iterator it;
+  it = values.begin();
+  double sum = 0;
+  while ( it != values.end() )
+  {
+    sum += *it;
+    it++;
+  }
+  return sum / double ( values.size() );
+}
+
+void HomerNavigationNode::refreshParamsCallback(const std_msgs::Empty::ConstPtr& msg)
+{
+	ROS_INFO_STREAM("Refreshing Parameters");
+	loadParameters();
+}
+
+void HomerNavigationNode::mapCallback(const nav_msgs::OccupancyGrid::ConstPtr& msg)
+{
+    if(msg->info.height != msg->info.width)
+    {
+        ROS_ERROR_STREAM("Incoming Map not quadratic. No map update!");
+        return;
+    }
+    if(msg->header.stamp != last_map_timestamp_)
+    {
+        last_map_timestamp_ = msg->header.stamp;
+        last_map_data_ = new std::vector<int8_t>(msg->data);
+        origin_ = msg->info.origin;
+        width_ = msg->info.width;
+        height_ = msg->info.height;
+        resolution_ = msg->info.resolution;
+        
+        Eigen::Vector2i map_point;
+		if(m_laser_points_map.size() > 0)
+		{
+			for(int i = 0; i < m_laser_points_map.size(); i++)
+			{
+				geometry_msgs::Point& point = m_laser_points_map[i];
+				map_point = map_tools::toMapCoords(point, origin_, resolution_);
+				int k = map_point.y() * width_ + map_point.x();
+				if(k < 0 || k > width_*height_)
+				{
+					continue;
+				}
+				last_map_data_->at(k) = homer_mapnav_msgs::ModifyMap::BLOCKED;
+			}
+		}
+		if(m_back_laser.size() > 0 )
+		{
+			for(int i = 0; i < m_back_laser.size(); i++)
+			{
+				geometry_msgs::Point& point = m_back_laser[i];
+				map_point = map_tools::toMapCoords(point, origin_, resolution_);
+				int k = map_point.y() * width_ + map_point.x();
+				if(k < 0 || k > width_*height_)
+				{
+					continue;
+				}
+				last_map_data_->at(k) = homer_mapnav_msgs::ModifyMap::BLOCKED;
+			}
+		}
+		
+        switch ( m_MainMachine.state() )
+        {
+            case AWAITING_EXPLORATION_MAP:
+                if ( m_MapTypeMachine.state() ==  SLAM_MAP )
+                {
+                    startExploration();
+                }
+                break;
+
+            case AWAITING_PATHPLANNING_MAP:
+                startNavigation();
+                break;
+            case FOLLOWING_PATH:
+            {
+                if ( check_path_)
+                {
+                    checkPath();
+                }
+                
+                break;
+			}
+            default:
+                break;
+        }
+    }
+}
+
+void HomerNavigationNode::poseCallback(const geometry_msgs::PoseStamped::ConstPtr& msg)
+{
+    robot_pose_ = msg->pose;
+	performNextMove();
+}
+
+void HomerNavigationNode::laserDataCallback(const sensor_msgs::LaserScan::ConstPtr& msg)
+{
+    float frontal_obstacle_distance;
+    bool collision_detected;
+    
+    last_laser_time_ = ros::Time::now();
+    laser_points_ =  map_tools::laser_ranges_to_points(msg->ranges, msg->angle_min, msg->angle_increment, msg->range_min, msg->range_max, transform_listener_, msg->header.frame_id, "/base_link");                                       
+    m_laser_points_map =  map_tools::laser_ranges_to_points( msg->ranges, msg->angle_min, msg->angle_increment, msg->range_min, msg->range_max, transform_listener_, msg->header.frame_id, "/map");                
+
+    if(m_act_speed == 0) 
+    {
+    	return;
+    }
+    frontal_obstacle_distance = SpeedControl::getMaxMoveDistance ( laser_points_ );
+    collision_detected = frontal_obstacle_distance <= collision_distance_;
+    if(collision_detected)
+    {
+    	handleCollision();
+    }
+}
+
+void HomerNavigationNode::backLaserCallback(const sensor_msgs::LaserScan::ConstPtr& msg)
+{
+	m_back_laser = map_tools::laser_ranges_to_points( msg->ranges, msg->angle_min, msg->angle_increment, msg->range_min, msg->range_max, transform_listener_, msg->header.frame_id, "/map");                
+}
+
+void HomerNavigationNode::startNavigationCallback(const homer_mapnav_msgs::StartNavigation::ConstPtr& msg)
+{
+    ROS_INFO_STREAM("Start navigating to (" << msg->goal.position.x << ", " << msg->goal.position.y << ")");
+    if (m_MainMachine.state() != IDLE) {
+        ROS_WARN_STREAM( "Aborting current operation and starting navigation.\n");
+    }
+
+    m_MapTypeMachine.setState(SLAM_MAP);
+
+    target_point_ = msg->goal.position;
+    target_orientation_ = tf::getYaw(msg->goal.orientation);
+    desired_distance_ = msg->distance_to_target < 0.1 ? 0.1 : msg->distance_to_target;
+	skip_final_turn_ = msg->skip_final_turn;
+    fast_path_planning_ = msg->fast_planning;
+
+    m_LastSpeedFactors.clear();
+
+    ROS_INFO_STREAM("Navigating to target " << target_point_.x << ", " << target_point_.y
+                    << "\nTarget orientation: " << target_orientation_
+                    << "Desired distance to target: " << desired_distance_);
+
+    m_MainMachine.setState( AWAITING_PATHPLANNING_MAP );
+}
+
+
+void HomerNavigationNode::moveBaseSimpleGoalCallback(const geometry_msgs::PoseStamped::ConstPtr& msg)
+{
+	m_avoided_collision 	= false;
+    target_point_ 			= msg->pose.position;
+    target_orientation_ 	= tf::getYaw(msg->pose.orientation);
+	desired_distance_ 		= 0.1;// msg->distance_to_target < 0.1 ? 0.1 : msg->distance_to_target;
+	skip_final_turn_ 		= false;
+    fast_path_planning_ 	= false;
+
+    ROS_INFO_STREAM("Navigating to target via Move Base Simple x: " << target_point_.x << ", y: " << target_point_.y
+                    << "\nTarget orientation: " << target_orientation_
+                    << "Desired distance to target: " << desired_distance_ );
+
+    m_MainMachine.setState( AWAITING_PATHPLANNING_MAP );
+}
+
+void HomerNavigationNode::navigateToPOICallback(const homer_mapnav_msgs::NavigateToPOI::ConstPtr &msg)
+{
+	m_avoided_collision = false;
+    std::string name = msg->poi_name;
+    homer_mapnav_msgs::GetPointsOfInterest srv;
+    get_POIs_client_.call(srv);
+    std::vector<homer_mapnav_msgs::PointOfInterest>::iterator it;
+    for(it = srv.response.poi_list.pois.begin(); it != srv.response.poi_list.pois.end(); ++it)
+    {
+        if(it->name == name)
+        {
+            ROS_INFO_STREAM("Start navigating to (" << it->pose.position.x << ", " << it->pose.position.y << ")");
+            if (m_MainMachine.state() != IDLE) {
+                ROS_WARN_STREAM( "Aborting current operation and starting navigation.\n");
+            }
+
+            m_MapTypeMachine.setState(SLAM_MAP);
+
+			sendStopRobot();
+
+            target_point_ = it->pose.position;
+            target_orientation_ = tf::getYaw(it->pose.orientation);
+            desired_distance_ = msg->distance_to_target < 0.1 ? 0.1 : msg->distance_to_target;
+			skip_final_turn_ = msg->skip_final_turn;
+
+
+            m_LastSpeedFactors.clear();
+
+            ROS_INFO_STREAM("Navigating to target " << target_point_.x << ", " << target_point_.y
+                            << "\nTarget orientation: " << target_orientation_
+                            << "Desired distance to target: " << desired_distance_);
+
+            m_MainMachine.setState( AWAITING_PATHPLANNING_MAP );
+            return;
+        }
+    }
+    ROS_ERROR_STREAM("No point of interest with name '" << msg->poi_name << "' found in current poi list");
+}
+
+void HomerNavigationNode::stopNavigationCallback(const homer_mapnav_msgs::StopNavigation::ConstPtr& msg)
+{
+    ROS_INFO_STREAM("Stopping navigation." );
+    // stop exploring
+    m_MainMachine.setState( IDLE );
+    m_avoided_collision = false;
+	sendStopRobot();
+
+    waypoints_.clear();
+    nav_msgs::Path empty_path_msg;
+    empty_path_msg.poses = waypoints_;
+    path_pub_.publish(empty_path_msg);
+}
+
+void HomerNavigationNode::unknownThresholdCallback(const std_msgs::Int8::ConstPtr &msg)
+{
+    explorer_->setUnknownThreshold(static_cast<int>(msg->data));
+}
+
+int main(int argc, char **argv)
+{
+  ros::init(argc, argv, "homer_navigation");
+
+  HomerNavigationNode node;
+  
+  ros::Rate rate(12);
+
+  while(ros::ok())
+  {
+      ros::spinOnce();
+      node.idleProcess();
+      rate.sleep();
+  }
+
+  return 0;
+}
diff --git a/tracks.yaml b/tracks.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3ec3f7abdcf96a57064a343d5a358beb3c73c02f
--- /dev/null
+++ b/tracks.yaml
@@ -0,0 +1,23 @@
+tracks:
+  indigo:
+    actions:
+    - bloom-export-upstream :{vcs_local_uri} :{vcs_type} --tag :{release_tag} --display-uri
+      :{vcs_uri} --name :{name} --output-dir :{archive_dir_path}
+    - git-bloom-import-upstream :{archive_path} :{patches} --release-version :{version}
+      --replace
+    - git-bloom-generate -y rosrelease :{ros_distro} --source upstream -i :{release_inc}
+    - git-bloom-generate -y rosdebian --prefix release/:{ros_distro} :{ros_distro}
+      -i :{release_inc}
+    - git-bloom-generate -y rosrpm --prefix release/:{ros_distro} :{ros_distro} -i
+      :{release_inc}
+    devel_branch: null
+    last_version: 1.0.10
+    name: upstream
+    patches: null
+    release_inc: '0'
+    release_repo_url: null
+    release_tag: :{version}
+    ros_distro: indigo
+    vcs_type: git
+    vcs_uri: https://gitlab.uni-koblenz.de/robbie/homer_mapnav.git
+    version: :{auto}