// Path: src/util/Tuple.java
// public class Tuple<K,V>  {
// 	private K key;
// 	private V value;
// 
// 	/**
// 	 * Creates a new tuple.
// 	 * @param key The key of the tuple
// 	 * @param value The value of the tuple
// 	 */
// 	public Tuple(K key, V value) {
// 		this.key = key;
// 		this.value = value;
// 	}
// 
// 	/**
// 	 * Returns the key
// 	 * @return the key
// 	 */
// 	public K getKey() {
// 		return key;
// 	}
// 
// 	/**
// 	 * Returns the value
// 	 * @return the value
// 	 */
// 	public V getValue() {
// 		return value;
// 	}
// 
// 	/**
// 	 * Returns a string representation of the tuple
// 	 * @return a string representation of the tuple
// 	 */
// 	public String toString() {
// 		return key.toString() + ":" + value.toString();
// 	}
// }
// 
// Path: src/core/SettingsError.java
// public class SettingsError extends SimError {
// 
// 	public SettingsError(String cause) {
// 		super(cause);
// 	}
// 
// 	public SettingsError(String cause, Exception e) {
// 		super(cause,e);
// 	}
// 
// 	public SettingsError(Exception e) {
// 		super(e);
// 	}
// 
// }


import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import util.Tuple;
import core.Coord;
import core.SettingsError;
			maxX = lineScan.nextDouble();
			minY = lineScan.nextDouble();
			maxY = lineScan.nextDouble();
		} catch (Exception e) {
			throw new SettingsError("Invalid offset line '" + offsets + "'");
		}
		finally {
			if (lineScan != null) {
				lineScan.close();
			}
		}

		lastLine = scanner.nextLine();
	}

	/**
	 * Sets normalizing of read values on/off. If on, values returned by
	 * {@link #readNextMovements()} are decremented by minimum values of the
	 * offsets. Default is on (normalize).
	 * @param normalize If true, normalizing is on (false -> off).
	 */
	public void setNormalize(boolean normalize) {
		this.normalize = normalize;
	}

	/**
	 * Reads all new id-coordinate tuples that belong to the same time instance
	 * @return A list of tuples or empty list if there were no more moves
	 * @throws SettingError if an invalid line was read
	 */
// Path: src/util/Tuple.java
// public class Tuple<K,V>  {
// 	private K key;
// 	private V value;
// 
// 	/**
// 	 * Creates a new tuple.
// 	 * @param key The key of the tuple
// 	 * @param value The value of the tuple
// 	 */
// 	public Tuple(K key, V value) {
// 		this.key = key;
// 		this.value = value;
// 	}
// 
// 	/**
// 	 * Returns the key
// 	 * @return the key
// 	 */
// 	public K getKey() {
// 		return key;
// 	}
// 
// 	/**
// 	 * Returns the value
// 	 * @return the value
// 	 */
// 	public V getValue() {
// 		return value;
// 	}
// 
// 	/**
// 	 * Returns a string representation of the tuple
// 	 * @return a string representation of the tuple
// 	 */
// 	public String toString() {
// 		return key.toString() + ":" + value.toString();
// 	}
// }
// 
// Path: src/core/SettingsError.java
// public class SettingsError extends SimError {
// 
// 	public SettingsError(String cause) {
// 		super(cause);
// 	}
// 
// 	public SettingsError(String cause, Exception e) {
// 		super(cause,e);
// 	}
// 
// 	public SettingsError(Exception e) {
// 		super(e);
// 	}
// 
// }


// Path: src/input/ExternalMovementReader.java
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import util.Tuple;
import core.Coord;
import core.SettingsError;

			maxX = lineScan.nextDouble();
			minY = lineScan.nextDouble();
			maxY = lineScan.nextDouble();
		} catch (Exception e) {
			throw new SettingsError("Invalid offset line '" + offsets + "'");
		}
		finally {
			if (lineScan != null) {
				lineScan.close();
			}
		}

		lastLine = scanner.nextLine();
	}

	/**
	 * Sets normalizing of read values on/off. If on, values returned by
	 * {@link #readNextMovements()} are decremented by minimum values of the
	 * offsets. Default is on (normalize).
	 * @param normalize If true, normalizing is on (false -> off).
	 */
	public void setNormalize(boolean normalize) {
		this.normalize = normalize;
	}

	/**
	 * Reads all new id-coordinate tuples that belong to the same time instance
	 * @return A list of tuples or empty list if there were no more moves
	 * @throws SettingError if an invalid line was read
	 */
	public List<Tuple<String, Coord>> readNextMovements() {