# Gerrit User Summit Europe 2019 - Location

## Europe - Hosted by Volvo Cars

The User Summit is hosted by Volvo Cars in [Volvohallen](https://goo.gl/maps/HWHd11EkEP6YPAjD7).

See below the full address of the location:

```
Volvohallen
Volvo Cars HQ
Gunnar Engellaus väg 2, 418 78 Gothenburg
Sweden
```

The Hackathon will be located at [Volvo PVD Torslanda](https://goo.gl/maps/x2yJidD73VAPkFNz9).

See below the full address of the location:

````
Volvo PVD Torslanda
Volvo Jakobs väg 17, 418 78 Gothenburg
Sweden
````

If you are coming by car, there is free parking available for the attendees of the Summit.

## Check-in Instructions

When you arrive at Volvohallen, please enter through the southeast entrance, which faces 
the parking lot.  You will be greeted and can check-in.

You will receive at check-in:

- The Gerrit User Summit conference badge
- The Gerrit v3.0 celebration T-Shirt
- Stickers to remember about the event and on Gerrit Code Review

For attendees of the hackathon, please enter PVD through the south entrance.
Proceed to the reception desk in the main lobby to check-in.

## Hotels and Places to Stay

Volvo Cars has a special rate for this event at the [Gothia Towers](https://goo.gl/maps/rmRoQweSvVrAsPPw6),
a 4-stars hotel in downtown Gothenburg.

You can reserve directly your rooms using [this link](https://booking.gothiatowers.com/reserve/e/block/vcc230819/avail).

## How to reach Volvo Cars from Gothenburg

__By Car__

From the Gothia Towers, it would take around 20 mins to reach Volvo Cars HQ.

- Take the E6/E20 (Toll) road to E45/Oslo, stay on E6 onto Tingstadstunneln,
  then keep left at the fork to continue on Lundbyleden, follow signs for
  Route 155/Öckerö/N Älvstranden/Hamnar.
- Use the right lane to take the Route 155 slip road to E6/E45/Hamn/Torslanda/Öckerö/Oslo/Karlstad.
- Keep left to stay on Hisingsleden, follow signs for E45/Angered Volvo/E6.
- Continue on Hisingsleden and then use the left 2 lanes to turn left onto
  Assar Gabrielssons väg (signs for Volvo Torslanda).
- Follow the road through a traffic light, and at the roundabout, take the 
  first exit.
- Keep left to Volvohallen.

For those attending the hackathon, the directions are almost the same.

- Take the E6/E20 (Toll) road to E45/Oslo, stay on E6 onto Tingstadstunneln,
  then keep left at the fork to continue on Lundbyleden, follow signs for
  Route 155/Öckerö/N Älvstranden/Hamnar.
- Use the right lane to take the Route 155 slip road to E6/E45/Hamn/Torslanda/Öckerö/Oslo/Karlstad.
- Keep left to stay on Hisingsleden, follow signs for E45/Angered Volvo/E6.
- Continue on Hisingsleden and then use the left 2 lanes to turn left onto
  Assar Gabrielssons väg (signs for Volvo Torslanda).
- Turn right at the traffic light onto Gustaf Larssons väg and follow signs for PV.
  (Gustaf Larssons väg becomes Volvo Jakobs väg)
- PVD will be on your left, across the street from a multistory parking garage.
- If you reach a gate, you have gone too far, but PVD is the modern white
  building to your left.

__By Taxi__

Volvo Cars has a special deal with taxi service PM Logistik (http://www.pmlogistik.se/en/),
we recommend groups at a hotel go together to share one.
PM Logisitik can also provide rides from the airport into the city with a special rate
(typically ~450 SEK, split fares are cheaper).

## Facility Resources

__Food and Drink__

Lunch will be provided in Volvohallen during the Summit.
Water and coffee will be available outside the main auditorium.

__Internet__

Wifi will be available to all attendees.
