From 7af71db19df39a36f85757d6b38c6d1e715faf12 Mon Sep 17 00:00:00 2001 From: Pilar Date: Wed, 20 Oct 2021 10:24:01 -0400 Subject: [PATCH 01/54] modified name of class due to an error in the format --- city_model_structure/energy_system.py | 37 +++++---------------------- 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/city_model_structure/energy_system.py b/city_model_structure/energy_system.py index 04ab3681..6df539d6 100644 --- a/city_model_structure/energy_system.py +++ b/city_model_structure/energy_system.py @@ -2,7 +2,6 @@ EnergySystem module SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca -Contributor Peter Yefi peteryefi@gmail.com """ from city_model_structure.city_object import CityObject @@ -10,36 +9,14 @@ from city_model_structure.energy_systems.heat_pump import HeatPump class EnergySystem(CityObject): - """ + """ EnergySystem(CityObject) class """ + def __init__(self, name, lod, surfaces, city_lower_corner): + super().__init__(name, lod, surfaces, city_lower_corner) + self._heat_pump = None - def __init__(self, name, lod, surfaces, city_lower_corner): - super().__init__(name, lod, surfaces, city_lower_corner) - self._heat_pump = None - self._type = 'energy_system' + @property + def heat_pump(self) -> HeatPump: + return self._heat_pump - @property - def heat_pump(self) -> HeatPump: - """ - Heat pump energy system - :return: - """ - return self._heat_pump - - @heat_pump.setter - def heat_pump(self, value): - """ - Set heat pumm for energy system - :param value: HeatPump - """ - if self._heat_pump is None: - self._heat_pump = value - - @property - def type(self) -> str: - """ - Type of city object - :return: str - """ - return self._type From 41f79b189ac2eafaf2e5b7df3c57d44f4c454002 Mon Sep 17 00:00:00 2001 From: Pilar Date: Fri, 22 Oct 2021 11:28:22 -0400 Subject: [PATCH 02/54] added the belonging specific edges and nodes to origind-destination and traffic networks --- .../transport/origin_destination_network.py | 19 +++++++++++++++++++ .../transport/traffic_network.py | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/city_model_structure/transport/origin_destination_network.py b/city_model_structure/transport/origin_destination_network.py index b23bb01c..973317c6 100644 --- a/city_model_structure/transport/origin_destination_network.py +++ b/city_model_structure/transport/origin_destination_network.py @@ -4,7 +4,10 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ +from typing import List from city_model_structure.network import Network +from city_model_structure.transport.origin_destination_edge import OriginDestinationEdge +from city_model_structure.transport.origin_destination_node import OriginDestinationNode class OriginDestinationNetwork(Network): @@ -22,3 +25,19 @@ class OriginDestinationNetwork(Network): :return: str """ return self._type + + @property + def edges(self) -> List[OriginDestinationEdge]: + """ + Get network edges + :return: [OriginDestinationEdge] + """ + return self._edges + + @property + def nodes(self) -> List[OriginDestinationNode]: + """ + Get network nodes + :return: [OriginDestinationNode] + """ + return self._nodes diff --git a/city_model_structure/transport/traffic_network.py b/city_model_structure/transport/traffic_network.py index 27e30096..e473f6da 100644 --- a/city_model_structure/transport/traffic_network.py +++ b/city_model_structure/transport/traffic_network.py @@ -6,7 +6,10 @@ Contributor Milad milad.aghamohamadnia@concordia.ca Contributor Guille guille.gutierrezmorote@concordia.ca """ +from typing import List from city_model_structure.network import Network +from city_model_structure.transport.traffic_edge import TrafficEdge +from city_model_structure.transport.traffic_node import TrafficNode class TrafficNetwork(Network): @@ -24,3 +27,19 @@ class TrafficNetwork(Network): :return: str """ return self._type + + @property + def edges(self) -> List[TrafficEdge]: + """ + Get network edges + :return: [TrafficEdge] + """ + return self._edges + + @property + def nodes(self) -> List[TrafficNode]: + """ + Get network nodes + :return: [TrafficNode] + """ + return self._nodes From 0a75cf46e67b31831563c18eaad43981d1b5b36d Mon Sep 17 00:00:00 2001 From: Pilar Date: Fri, 22 Oct 2021 13:13:12 -0400 Subject: [PATCH 03/54] added many new classes needed for the transportation group models. The documentation is not done because it is needed the students feed-back --- city_model_structure/attributes/edge.py | 2 +- city_model_structure/attributes/node.py | 8 ++- city_model_structure/attributes/record.py | 28 ++++++++ .../attributes/time_series.py | 26 +++++++ city_model_structure/bus_system.py | 40 +++++++++++ city_model_structure/energy_system.py | 2 +- city_model_structure/network.py | 3 +- city_model_structure/transport/bus.py | 70 +++++++++++++++++++ city_model_structure/transport/bus_depot.py | 26 +++++++ city_model_structure/transport/bus_edge.py | 41 +++++++++++ city_model_structure/transport/bus_network.py | 43 ++++++++++++ city_model_structure/transport/bus_node.py | 54 ++++++++++++++ city_model_structure/transport/bus_stop.py | 39 +++++++++++ city_model_structure/transport/connection.py | 2 +- city_model_structure/transport/crossing.py | 2 +- .../transport/fast_charging_infrastructure.py | 23 ++++++ city_model_structure/transport/join.py | 2 +- city_model_structure/transport/lane.py | 2 +- .../transport/origin_destination_edge.py | 12 +++- .../transport/origin_destination_network.py | 2 +- .../transport/origin_destination_node.py | 11 ++- city_model_structure/transport/phase.py | 2 +- .../transport/traffic_edge.py | 11 ++- .../transport/traffic_light.py | 2 +- .../transport/traffic_network.py | 2 +- .../transport/traffic_node.py | 14 +++- .../transport/walkway_node.py | 2 +- 27 files changed, 452 insertions(+), 19 deletions(-) create mode 100644 city_model_structure/attributes/record.py create mode 100644 city_model_structure/attributes/time_series.py create mode 100644 city_model_structure/bus_system.py create mode 100644 city_model_structure/transport/bus.py create mode 100644 city_model_structure/transport/bus_depot.py create mode 100644 city_model_structure/transport/bus_edge.py create mode 100644 city_model_structure/transport/bus_network.py create mode 100644 city_model_structure/transport/bus_node.py create mode 100644 city_model_structure/transport/bus_stop.py create mode 100644 city_model_structure/transport/fast_charging_infrastructure.py diff --git a/city_model_structure/attributes/edge.py b/city_model_structure/attributes/edge.py index 2235f096..3a156ed8 100644 --- a/city_model_structure/attributes/edge.py +++ b/city_model_structure/attributes/edge.py @@ -1,7 +1,7 @@ """ Node module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +Copyright © 2021 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca """ import uuid diff --git a/city_model_structure/attributes/node.py b/city_model_structure/attributes/node.py index 65e769fd..50b617c6 100644 --- a/city_model_structure/attributes/node.py +++ b/city_model_structure/attributes/node.py @@ -1,12 +1,13 @@ """ Node module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +Copyright © 2021 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca """ import uuid from typing import List, TypeVar +from city_model_structure.attributes.time_series import TimeSeries Edge = TypeVar('Edge') @@ -21,6 +22,7 @@ class Node: self._name = name self._id = None self._edges = edges + self._time_series = None @property def name(self): @@ -47,3 +49,7 @@ class Node: :return: [Edge] """ return self._edges + + @property + def time_series(self) -> TimeSeries: + return self._time_series diff --git a/city_model_structure/attributes/record.py b/city_model_structure/attributes/record.py new file mode 100644 index 00000000..294bb8b9 --- /dev/null +++ b/city_model_structure/attributes/record.py @@ -0,0 +1,28 @@ +""" +Record module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + + +class Record: + """ + Record class + """ + + def __init__(self, time=None, value=None, flag=None): + self._time = time + self._value = value + self._flag = flag + + @property + def time(self): + return self._time + + @property + def value(self): + return self._value + + @property + def flag(self): + return self._flag diff --git a/city_model_structure/attributes/time_series.py b/city_model_structure/attributes/time_series.py new file mode 100644 index 00000000..83301bb5 --- /dev/null +++ b/city_model_structure/attributes/time_series.py @@ -0,0 +1,26 @@ +""" +Time series module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + +from typing import List +from city_model_structure.attributes.record import Record + + +class TimeSeries: + """ + TimeSeries class + """ + + def __init__(self, time_series_type=None, records=None): + self._time_series_type = time_series_type + self._records = records + + @property + def time_series_type(self): + return self._time_series_type + + @property + def records(self) -> List[Record]: + return self._records diff --git a/city_model_structure/bus_system.py b/city_model_structure/bus_system.py new file mode 100644 index 00000000..171903e6 --- /dev/null +++ b/city_model_structure/bus_system.py @@ -0,0 +1,40 @@ +""" +Bus system module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + +from typing import List +from city_model_structure.city_object import CityObject +from city_model_structure.attributes.polygon import Polygon +from city_model_structure.transport.bus_network import BusNetwork +from city_model_structure.transport.bus_node import BusNode +from city_model_structure.transport.bus import Bus + + +class BusSystem(CityObject): + """ + BusSystem(CityObject) class + """ + def __init__(self, name, lod, surfaces, city_lower_corner): + super().__init__(name, lod, surfaces, city_lower_corner) + self._bus_routes = None + self._bus_network = None + self._buses = None + self._restricted_polygons = None + + @property + def bus_routes(self) -> List[BusNode]: + return self._bus_routes + + @property + def bus_network(self) -> BusNetwork: + return self._bus_network + + @property + def buses(self) -> List[Bus]: + return self._buses + + @property + def restricted_polygons(self) -> List[Polygon]: + return self._restricted_polygons diff --git a/city_model_structure/energy_system.py b/city_model_structure/energy_system.py index 6df539d6..f648001a 100644 --- a/city_model_structure/energy_system.py +++ b/city_model_structure/energy_system.py @@ -1,7 +1,7 @@ """ EnergySystem module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ from city_model_structure.city_object import CityObject diff --git a/city_model_structure/network.py b/city_model_structure/network.py index 869c7107..ae3d0186 100644 --- a/city_model_structure/network.py +++ b/city_model_structure/network.py @@ -1,9 +1,10 @@ """ Network module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +Copyright © 2021 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca """ + import uuid from typing import List diff --git a/city_model_structure/transport/bus.py b/city_model_structure/transport/bus.py new file mode 100644 index 00000000..708d0a6d --- /dev/null +++ b/city_model_structure/transport/bus.py @@ -0,0 +1,70 @@ +""" +Bus module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + +from city_model_structure.attributes.schedule import Schedule + + +class Bus: + """ + Bus class + """ + + def __init__(self): + self._maintenance_time = None + self._charging_time = None + self._recovery_time = None + self._vehicle_type = None + self._energy_consumption = None + self._trips_schedule = None + self._capacity = None + self._maintenance_cost = None + self._investment_cost = None + self._charging_range = None + self._maximum_travel_range = None + + @property + def maintenance_time(self): + return self._maintenance_time + + @property + def charging_time(self): + return self._charging_time + + @property + def recovery_time(self): + return self.maintenance_time + self.charging_time + + @property + def vehicle_type(self): + return self._vehicle_type + + @property + def energy_consumption(self): + return self._energy_consumption + + @property + def trips_schedule(self) -> Schedule: + return self._trips_schedule + + @property + def capacity(self): + return self._capacity + + @property + def maintenance_cost(self): + return self._maintenance_cost + + @property + def investment_cost(self): + return self._investment_cost + + @property + def charging_range(self): + return self._charging_range + + @property + def maximum_travel_range(self): + return self._maximum_travel_range diff --git a/city_model_structure/transport/bus_depot.py b/city_model_structure/transport/bus_depot.py new file mode 100644 index 00000000..3bda6c66 --- /dev/null +++ b/city_model_structure/transport/bus_depot.py @@ -0,0 +1,26 @@ +""" +Bus depot module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + +from city_model_structure.transport.bus_node import BusNode + + +class BusDepot(BusNode): + """ + BusDepot class + """ + + def __init__(self, name, coordinates, edges=None): + super().__init__(name, coordinates, edges=edges, node_type='BusDepot') + self._number_of_charging_poles = None + self._number_of_available_buses = None + + @property + def number_of_charging_poles(self): + return self._number_of_charging_poles + + @property + def number_of_available_buses(self): + return self._number_of_available_buses diff --git a/city_model_structure/transport/bus_edge.py b/city_model_structure/transport/bus_edge.py new file mode 100644 index 00000000..9d9f967a --- /dev/null +++ b/city_model_structure/transport/bus_edge.py @@ -0,0 +1,41 @@ +""" +Bus edge module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + +from typing import List +from city_model_structure.attributes.edge import Edge +from city_model_structure.transport.bus_node import BusNode + + +class BusEdge(Edge): + """ + BusEdge class + Each edge is unidirectional and starts at the "from" node and ends at the "to" node + """ + + def __init__(self, name, nodes, edge_type='BusEdge'): + super().__init__(name, nodes) + self._edge_type = edge_type + self._average_travel_time = None + + @property + def edge_type(self): + """ + Get the edge type + :return: str + """ + return self._edge_type + + @property + def nodes(self) -> List[BusNode]: + """ + Get delimiting nodes for the edge + :return: [BusNode] + """ + return self._nodes + + @property + def average_travel_time(self): + return self._average_travel_time diff --git a/city_model_structure/transport/bus_network.py b/city_model_structure/transport/bus_network.py new file mode 100644 index 00000000..6f3dfbd8 --- /dev/null +++ b/city_model_structure/transport/bus_network.py @@ -0,0 +1,43 @@ +""" +Bus network module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + +from typing import List +from city_model_structure.network import Network +from city_model_structure.transport.bus_edge import BusEdge +from city_model_structure.transport.bus_node import BusNode + + +class BusNetwork(Network): + """ + BusNetwork(Network) class + """ + def __init__(self, name, edges=None, nodes=None): + super().__init__(name, edges, nodes) + self._type = "BusNetwork" + + @property + def type(self): + """ + Get network type + :return: str + """ + return self._type + + @property + def edges(self) -> List[BusEdge]: + """ + Get network edges + :return: [BusEdge] + """ + return self._edges + + @property + def nodes(self) -> List[BusNode]: + """ + Get network nodes + :return: [BusNode] + """ + return self._nodes diff --git a/city_model_structure/transport/bus_node.py b/city_model_structure/transport/bus_node.py new file mode 100644 index 00000000..03113fdf --- /dev/null +++ b/city_model_structure/transport/bus_node.py @@ -0,0 +1,54 @@ +""" +Bus node module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + +from typing import List + +from city_model_structure.attributes.node import Node +from city_model_structure.attributes.point import Point +from city_model_structure.transport.bus_edge import BusEdge + + +class BusNode(Node): + """ + BusNode class + """ + + def __init__(self, name, coordinates, node_type='BusNode', edges=None): + super().__init__(name, edges) + self._coordinates = coordinates + self._node_type = node_type + + @property + def node_type(self): + """ + Get node type + :return: str + """ + return self._node_type + + @property + def coordinates(self) -> Point: + """ + Get node coordinates + :return: Point + """ + return self._coordinates + + @coordinates.setter + def coordinates(self, value): + """ + Set node coordinates + :param value: Point + """ + self._coordinates = value + + @property + def edges(self) -> List[BusEdge]: + """ + get edges delimited by the node + :return: [BusEdge] + """ + return self._edges diff --git a/city_model_structure/transport/bus_stop.py b/city_model_structure/transport/bus_stop.py new file mode 100644 index 00000000..7aed89eb --- /dev/null +++ b/city_model_structure/transport/bus_stop.py @@ -0,0 +1,39 @@ +""" +Bus stop module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + +from typing import Union +from city_model_structure.transport.bus_node import BusNode +from city_model_structure.transport.fast_charging_infrastructure import FastChargingInfrastructure +from city_model_structure.attributes.schedule import Schedule + + +class BusStop(BusNode): + """ + BusStop class + """ + + def __init__(self, name, coordinates, edges=None): + super().__init__(name, coordinates, edges=edges, node_type='BusStop') + self._time_table = None + self._average_hourly_passengers_demand = None + self._fast_charging_infrastructure = None + self._waiting_time = None + + @property + def time_table(self): + return self._time_table + + @property + def average_hourly_passengers_demand(self) -> Schedule: + return self._average_hourly_passengers_demand + + @property + def fast_charging_infrastructure(self) -> Union[None, FastChargingInfrastructure]: + return self._fast_charging_infrastructure + + @property + def waiting_time(self): + return self._waiting_time diff --git a/city_model_structure/transport/connection.py b/city_model_structure/transport/connection.py index 093fb4b8..0f023cd4 100644 --- a/city_model_structure/transport/connection.py +++ b/city_model_structure/transport/connection.py @@ -1,7 +1,7 @@ """ Connection module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca Contributor Guille guille.gutierrezmorote@concordia.ca """ diff --git a/city_model_structure/transport/crossing.py b/city_model_structure/transport/crossing.py index 9a28c8f8..0b740355 100644 --- a/city_model_structure/transport/crossing.py +++ b/city_model_structure/transport/crossing.py @@ -1,7 +1,7 @@ """ Crossing module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca Contributor Guille guille.gutierrezmorote@concordia.ca """ diff --git a/city_model_structure/transport/fast_charging_infrastructure.py b/city_model_structure/transport/fast_charging_infrastructure.py new file mode 100644 index 00000000..16b4b6e5 --- /dev/null +++ b/city_model_structure/transport/fast_charging_infrastructure.py @@ -0,0 +1,23 @@ +""" +Fast charging infrastructure module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + + +class FastChargingInfrastructure: + """ + FastChargingInfrastructure class + """ + + def __init__(self): + self._electrical_demand = None + self._losses_in_grid = None + + @property + def electrical_demand(self): + return self._electrical_demand + + @property + def losses_in_grid(self): + return self._losses_in_grid diff --git a/city_model_structure/transport/join.py b/city_model_structure/transport/join.py index a7f609b8..3e1cd143 100644 --- a/city_model_structure/transport/join.py +++ b/city_model_structure/transport/join.py @@ -1,7 +1,7 @@ """ Join module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca Contributor Guille guille.gutierrezmorote@concordia.ca """ diff --git a/city_model_structure/transport/lane.py b/city_model_structure/transport/lane.py index d68bcca0..417f986a 100644 --- a/city_model_structure/transport/lane.py +++ b/city_model_structure/transport/lane.py @@ -1,7 +1,7 @@ """ Lane module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca """ diff --git a/city_model_structure/transport/origin_destination_edge.py b/city_model_structure/transport/origin_destination_edge.py index c3d3f3c1..664bdd81 100644 --- a/city_model_structure/transport/origin_destination_edge.py +++ b/city_model_structure/transport/origin_destination_edge.py @@ -1,11 +1,13 @@ """ Origin-Destination edge module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ +from typing import List from city_model_structure.attributes.edge import Edge +from city_model_structure.transport.origin_destination_node import OriginDestinationNode from city_model_structure.attributes.schedule import Schedule @@ -28,6 +30,14 @@ class OriginDestinationEdge(Edge): """ return self._edge_type + @property + def nodes(self) -> List[OriginDestinationNode]: + """ + Get delimiting nodes for the edge + :return: [OriginDestinationNode] + """ + return self._nodes + @property def movement_schedule(self) -> Schedule: """ diff --git a/city_model_structure/transport/origin_destination_network.py b/city_model_structure/transport/origin_destination_network.py index 973317c6..9090f983 100644 --- a/city_model_structure/transport/origin_destination_network.py +++ b/city_model_structure/transport/origin_destination_network.py @@ -1,7 +1,7 @@ """ Origin-Destination network module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ from typing import List diff --git a/city_model_structure/transport/origin_destination_node.py b/city_model_structure/transport/origin_destination_node.py index 5e46e92d..eabf06fb 100644 --- a/city_model_structure/transport/origin_destination_node.py +++ b/city_model_structure/transport/origin_destination_node.py @@ -1,7 +1,7 @@ """ Origin-Destination node module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ from typing import List @@ -9,6 +9,7 @@ from city_model_structure.attributes.node import Node from city_model_structure.attributes.point import Point from city_model_structure.attributes.polygon import Polygon from city_model_structure.city_object import CityObject +from city_model_structure.transport.origin_destination_edge import OriginDestinationEdge class OriginDestinationNode(Node): @@ -48,6 +49,14 @@ class OriginDestinationNode(Node): """ self._coordinates = value + @property + def edges(self) -> List[OriginDestinationEdge]: + """ + get edges delimited by the node + :return: [OriginDestinationEdge] + """ + return self._edges + @property def polygon(self) -> Polygon: """ diff --git a/city_model_structure/transport/phase.py b/city_model_structure/transport/phase.py index 559e0834..66d2d59b 100644 --- a/city_model_structure/transport/phase.py +++ b/city_model_structure/transport/phase.py @@ -1,7 +1,7 @@ """ Phase module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca """ diff --git a/city_model_structure/transport/traffic_edge.py b/city_model_structure/transport/traffic_edge.py index 1fd77299..e507e0ba 100644 --- a/city_model_structure/transport/traffic_edge.py +++ b/city_model_structure/transport/traffic_edge.py @@ -1,13 +1,14 @@ """ Traffic edge module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca Contributor Guille guille.gutierrezmorote@concordia.ca """ from typing import List, Union from city_model_structure.attributes.edge import Edge +from city_model_structure.transport.traffic_node import TrafficNode from city_model_structure.transport.lane import Lane @@ -37,6 +38,14 @@ class TrafficEdge(Edge): """ return self._edge_type + @property + def nodes(self) -> List[TrafficNode]: + """ + Get delimiting nodes for the edge + :return: [TrafficNode] + """ + return self._nodes + @property def lanes(self) -> List[Lane]: """ diff --git a/city_model_structure/transport/traffic_light.py b/city_model_structure/transport/traffic_light.py index 7b7d4621..89827a62 100644 --- a/city_model_structure/transport/traffic_light.py +++ b/city_model_structure/transport/traffic_light.py @@ -1,7 +1,7 @@ """ Traffic light module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca Contributor Guille guille.gutierrezmorote@concordia.ca """ diff --git a/city_model_structure/transport/traffic_network.py b/city_model_structure/transport/traffic_network.py index e473f6da..eef5a4e9 100644 --- a/city_model_structure/transport/traffic_network.py +++ b/city_model_structure/transport/traffic_network.py @@ -1,7 +1,7 @@ """ Traffic network module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca Contributor Guille guille.gutierrezmorote@concordia.ca """ diff --git a/city_model_structure/transport/traffic_node.py b/city_model_structure/transport/traffic_node.py index 3008cf97..6391750e 100644 --- a/city_model_structure/transport/traffic_node.py +++ b/city_model_structure/transport/traffic_node.py @@ -1,17 +1,17 @@ """ TrafficNode module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca Contributor Guille guille.gutierrezmorote@concordia.ca """ + from typing import List from city_model_structure.attributes.edge import Edge from city_model_structure.attributes.node import Node from city_model_structure.attributes.point import Point - - +from city_model_structure.transport.traffic_edge import TrafficEdge from city_model_structure.transport.connection import Connection @@ -55,6 +55,14 @@ class TrafficNode(Node): """ self._coordinates = value + @property + def edges(self) -> List[TrafficEdge]: + """ + get edges delimited by the node + :return: [TrafficEdge] + """ + return self._edges + @property def prohibitions(self) -> [(Edge, Edge)]: """ diff --git a/city_model_structure/transport/walkway_node.py b/city_model_structure/transport/walkway_node.py index 36ec90c6..e884f976 100644 --- a/city_model_structure/transport/walkway_node.py +++ b/city_model_structure/transport/walkway_node.py @@ -1,7 +1,7 @@ """ Walkway node module SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Milad milad.aghamohamadnia@concordia.ca Contributor Guille guille.gutierrezmorote@concordia.ca """ From 2c5490d13892bc6c548573a6dacb789ebb9594a3 Mon Sep 17 00:00:00 2001 From: Pilar Date: Mon, 25 Oct 2021 13:33:08 -0400 Subject: [PATCH 04/54] added many new classes needed for the transportation group models. The documentation is not done because it is needed the students feed-back --- city_model_structure/attributes/node.py | 6 +- city_model_structure/attributes/record.py | 12 ++ .../attributes/time_series.py | 8 ++ city_model_structure/bus_system.py | 16 +++ city_model_structure/transport/bus.py | 44 +++++++ city_model_structure/transport/bus_depot.py | 8 ++ city_model_structure/transport/bus_edge.py | 4 + city_model_structure/transport/bus_stop.py | 16 +++ .../transport/fast_charging_infrastructure.py | 8 ++ data/customized_imports/ashrae_archetypes.xml | 123 ++++++++++++++++++ .../sanam_customized_usage_parameters.py} | 6 +- imports/customized_imports_factory.py | 29 +++++ imports/usage_factory.py | 7 - 13 files changed, 276 insertions(+), 11 deletions(-) create mode 100644 data/customized_imports/ashrae_archetypes.xml rename imports/{usage/ashrae_usage_parameters.py => customized_imports/sanam_customized_usage_parameters.py} (92%) create mode 100644 imports/customized_imports_factory.py diff --git a/city_model_structure/attributes/node.py b/city_model_structure/attributes/node.py index 50b617c6..39154182 100644 --- a/city_model_structure/attributes/node.py +++ b/city_model_structure/attributes/node.py @@ -45,11 +45,15 @@ class Node: @property def edges(self) -> List[Edge]: """ - get edges delimited by the node + Get edges delimited by the node :return: [Edge] """ return self._edges @property def time_series(self) -> TimeSeries: + """ + Add explanation here + :return: add type of variable here + """ return self._time_series diff --git a/city_model_structure/attributes/record.py b/city_model_structure/attributes/record.py index 294bb8b9..e7261ddb 100644 --- a/city_model_structure/attributes/record.py +++ b/city_model_structure/attributes/record.py @@ -17,12 +17,24 @@ class Record: @property def time(self): + """ + Add explanation here + :return: add type of variable here + """ return self._time @property def value(self): + """ + Add explanation here + :return: add type of variable here + """ return self._value @property def flag(self): + """ + Add explanation here + :return: add type of variable here + """ return self._flag diff --git a/city_model_structure/attributes/time_series.py b/city_model_structure/attributes/time_series.py index 83301bb5..20c4d5dd 100644 --- a/city_model_structure/attributes/time_series.py +++ b/city_model_structure/attributes/time_series.py @@ -19,8 +19,16 @@ class TimeSeries: @property def time_series_type(self): + """ + Add explanation here + :return: add type of variable here + """ return self._time_series_type @property def records(self) -> List[Record]: + """ + Add explanation here + :return: List[Record] + """ return self._records diff --git a/city_model_structure/bus_system.py b/city_model_structure/bus_system.py index 171903e6..c254a55e 100644 --- a/city_model_structure/bus_system.py +++ b/city_model_structure/bus_system.py @@ -25,16 +25,32 @@ class BusSystem(CityObject): @property def bus_routes(self) -> List[BusNode]: + """ + Add explanation here + :return: [BusNode] + """ return self._bus_routes @property def bus_network(self) -> BusNetwork: + """ + Add explanation here + :return: BusNetwork + """ return self._bus_network @property def buses(self) -> List[Bus]: + """ + Add explanation here + :return: [Bus] + """ return self._buses @property def restricted_polygons(self) -> List[Polygon]: + """ + Add explanation here + :return: [Polygon] + """ return self._restricted_polygons diff --git a/city_model_structure/transport/bus.py b/city_model_structure/transport/bus.py index 708d0a6d..ea7acb47 100644 --- a/city_model_structure/transport/bus.py +++ b/city_model_structure/transport/bus.py @@ -27,44 +27,88 @@ class Bus: @property def maintenance_time(self): + """ + Add explanation here + :return: add type of variable here + """ return self._maintenance_time @property def charging_time(self): + """ + Add explanation here + :return: add type of variable here + """ return self._charging_time @property def recovery_time(self): + """ + Add explanation here + :return: add type of variable here + """ return self.maintenance_time + self.charging_time @property def vehicle_type(self): + """ + Add explanation here + :return: add type of variable here + """ return self._vehicle_type @property def energy_consumption(self): + """ + Add explanation here + :return: add type of variable here + """ return self._energy_consumption @property def trips_schedule(self) -> Schedule: + """ + Add explanation here + :return: add type of variable here + """ return self._trips_schedule @property def capacity(self): + """ + Add explanation here + :return: add type of variable here + """ return self._capacity @property def maintenance_cost(self): + """ + Add explanation here + :return: add type of variable here + """ return self._maintenance_cost @property def investment_cost(self): + """ + Add explanation here + :return: add type of variable here + """ return self._investment_cost @property def charging_range(self): + """ + Add explanation here + :return: add type of variable here + """ return self._charging_range @property def maximum_travel_range(self): + """ + Add explanation here + :return: add type of variable here + """ return self._maximum_travel_range diff --git a/city_model_structure/transport/bus_depot.py b/city_model_structure/transport/bus_depot.py index 3bda6c66..0b617275 100644 --- a/city_model_structure/transport/bus_depot.py +++ b/city_model_structure/transport/bus_depot.py @@ -19,8 +19,16 @@ class BusDepot(BusNode): @property def number_of_charging_poles(self): + """ + Add explanation here + :return: add type of variable here + """ return self._number_of_charging_poles @property def number_of_available_buses(self): + """ + Add explanation here + :return: add type of variable here + """ return self._number_of_available_buses diff --git a/city_model_structure/transport/bus_edge.py b/city_model_structure/transport/bus_edge.py index 9d9f967a..d886b4a3 100644 --- a/city_model_structure/transport/bus_edge.py +++ b/city_model_structure/transport/bus_edge.py @@ -38,4 +38,8 @@ class BusEdge(Edge): @property def average_travel_time(self): + """ + Add explanation here + :return: add type of variable here + """ return self._average_travel_time diff --git a/city_model_structure/transport/bus_stop.py b/city_model_structure/transport/bus_stop.py index 7aed89eb..b4fccd62 100644 --- a/city_model_structure/transport/bus_stop.py +++ b/city_model_structure/transport/bus_stop.py @@ -24,16 +24,32 @@ class BusStop(BusNode): @property def time_table(self): + """ + Add explanation here + :return: add type of variable here + """ return self._time_table @property def average_hourly_passengers_demand(self) -> Schedule: + """ + Add explanation here + :return: Schedule + """ return self._average_hourly_passengers_demand @property def fast_charging_infrastructure(self) -> Union[None, FastChargingInfrastructure]: + """ + Add explanation here + :return: FastChargingInfrastructure + """ return self._fast_charging_infrastructure @property def waiting_time(self): + """ + Add explanation here + :return: add type of variable here + """ return self._waiting_time diff --git a/city_model_structure/transport/fast_charging_infrastructure.py b/city_model_structure/transport/fast_charging_infrastructure.py index 16b4b6e5..a3369a91 100644 --- a/city_model_structure/transport/fast_charging_infrastructure.py +++ b/city_model_structure/transport/fast_charging_infrastructure.py @@ -16,8 +16,16 @@ class FastChargingInfrastructure: @property def electrical_demand(self): + """ + Add explanation here + :return: add type of variable here + """ return self._electrical_demand @property def losses_in_grid(self): + """ + Add explanation here + :return: add type of variable here + """ return self._losses_in_grid diff --git a/data/customized_imports/ashrae_archetypes.xml b/data/customized_imports/ashrae_archetypes.xml new file mode 100644 index 00000000..17569df2 --- /dev/null +++ b/data/customized_imports/ashrae_archetypes.xml @@ -0,0 +1,123 @@ + + + Ashrae values + Library created by Sanam from ANSI/ASHRAE Standard 62-2001 + + assembly + + 0.15 + + + + 5 + + + + + health + + 0.1 + + + + 20 + + + + + hotel + + 0.11 + + + + 5 + + + + + manufacturing + + 0.07 + + + + 10 + + + + + office + + 0.05 + + + + 5 + + + + + restaurant + + 0.7 + + + + 7.5 + + + + + retail + + 0.2 + + + + 7.5 + + + + + school + + 0.25 + + + + 10 + + + + + lab + + 0.25 + + + + 10 + + + + + residential + + + 5 + + + + + gymnasium + + 0.3 + + + + 7.5 + + + + diff --git a/imports/usage/ashrae_usage_parameters.py b/imports/customized_imports/sanam_customized_usage_parameters.py similarity index 92% rename from imports/usage/ashrae_usage_parameters.py rename to imports/customized_imports/sanam_customized_usage_parameters.py index 1bfb98bd..58dbdef0 100644 --- a/imports/usage/ashrae_usage_parameters.py +++ b/imports/customized_imports/sanam_customized_usage_parameters.py @@ -1,5 +1,5 @@ """ -AshraeUsageParameters model the usage properties +SanamCustomizedUsageParameters add two parameters to usage properties from ASHRAE SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ @@ -9,9 +9,9 @@ from imports.geometry.helpers.geometry_helper import GeometryHelper as gh from city_model_structure.building_demand.usage_zone import UsageZone -class AshraeUsageParameters: +class SanamCustomizedUsageParameters: """ - AshraeUsageParameters class + SanamCustomizedUsageParameters class """ def __init__(self, city, base_path): super().__init__(base_path, 'ashrae_archetypes.xml') diff --git a/imports/customized_imports_factory.py b/imports/customized_imports_factory.py new file mode 100644 index 00000000..520cf853 --- /dev/null +++ b/imports/customized_imports_factory.py @@ -0,0 +1,29 @@ +""" +CustomizedImportsFactory is used to import any information using user customized formats +This factory can only be called after calling the construction factory. +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" +from pathlib import Path + + +class CustomizedImportsFactory: + """ + CustomizedImportsFactory class + """ + def __init__(self, city, importer_class, base_path): + if base_path is None: + base_path = Path(Path(__file__).parent.parent / 'data/customized_imports') + self._city = city + self._importer_class = importer_class + self._base_path = base_path + for building in city.buildings: + if len(building.thermal_zones) == 0: + raise Exception('It seems that the customized imports factory is being called before the construction factory. ' + 'Please ensure that the construction factory is called first.') + + def enrich(self): + """ + Enrich the city given to the class using the given importer class + :return: None + """ diff --git a/imports/usage_factory.py b/imports/usage_factory.py index 763a6dba..a886c197 100644 --- a/imports/usage_factory.py +++ b/imports/usage_factory.py @@ -8,7 +8,6 @@ Contributors Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca from pathlib import Path from imports.usage.hft_usage_parameters import HftUsageParameters from imports.usage.ca_usage_parameters import CaUsageParameters -from imports.usage.ashrae_usage_parameters import AshraeUsageParameters # todo: handle missing lambda and rise error. @@ -39,12 +38,6 @@ class UsageFactory: """ return CaUsageParameters(self._city, self._base_path).enrich_buildings() - def _ashrae(self): - """ - Enrich the city by using ASHRAE information - """ - AshraeUsageParameters(self._city, self._base_path).enrich_buildings() - def enrich(self): """ Enrich the city given to the class using the usage factory given handler From beec60822944c8a039efa94df22d842b269988ae Mon Sep 17 00:00:00 2001 From: guille Date: Mon, 25 Oct 2021 13:28:43 -0400 Subject: [PATCH 05/54] import changes into typevar to avoid circular references when documentation is created --- city_model_structure/attributes/node.py | 1 - city_model_structure/transport/bus_edge.py | 5 +- city_model_structure/transport/bus_node.py | 5 +- .../transport/origin_destination_edge.py | 5 +- .../transport/origin_destination_node.py | 5 +- .../transport/traffic_node.py | 7 +- helpers/configuration_helper.py | 2 +- imports/geometry/rhino.py | 77 +++++++++++++++++++ imports/geometry_factory.py | 17 ++++ requirements.txt | 3 +- 10 files changed, 113 insertions(+), 14 deletions(-) create mode 100644 imports/geometry/rhino.py diff --git a/city_model_structure/attributes/node.py b/city_model_structure/attributes/node.py index 39154182..86e6b514 100644 --- a/city_model_structure/attributes/node.py +++ b/city_model_structure/attributes/node.py @@ -8,7 +8,6 @@ Contributor Milad milad.aghamohamadnia@concordia.ca import uuid from typing import List, TypeVar from city_model_structure.attributes.time_series import TimeSeries - Edge = TypeVar('Edge') diff --git a/city_model_structure/transport/bus_edge.py b/city_model_structure/transport/bus_edge.py index d886b4a3..98c31dc0 100644 --- a/city_model_structure/transport/bus_edge.py +++ b/city_model_structure/transport/bus_edge.py @@ -4,9 +4,10 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ -from typing import List +from typing import List, TypeVar from city_model_structure.attributes.edge import Edge -from city_model_structure.transport.bus_node import BusNode + +BusNode = TypeVar('BusNode') class BusEdge(Edge): diff --git a/city_model_structure/transport/bus_node.py b/city_model_structure/transport/bus_node.py index 03113fdf..17274a4f 100644 --- a/city_model_structure/transport/bus_node.py +++ b/city_model_structure/transport/bus_node.py @@ -4,11 +4,12 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ -from typing import List +from typing import List, TypeVar from city_model_structure.attributes.node import Node from city_model_structure.attributes.point import Point -from city_model_structure.transport.bus_edge import BusEdge + +BusEdge = TypeVar('BusEdge') class BusNode(Node): diff --git a/city_model_structure/transport/origin_destination_edge.py b/city_model_structure/transport/origin_destination_edge.py index 664bdd81..32fa7cbb 100644 --- a/city_model_structure/transport/origin_destination_edge.py +++ b/city_model_structure/transport/origin_destination_edge.py @@ -5,11 +5,12 @@ Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.mons """ -from typing import List +from typing import List, TypeVar from city_model_structure.attributes.edge import Edge -from city_model_structure.transport.origin_destination_node import OriginDestinationNode from city_model_structure.attributes.schedule import Schedule +OriginDestinationNode = TypeVar('OriginDestinationNode') + class OriginDestinationEdge(Edge): """ diff --git a/city_model_structure/transport/origin_destination_node.py b/city_model_structure/transport/origin_destination_node.py index eabf06fb..ea84bd5c 100644 --- a/city_model_structure/transport/origin_destination_node.py +++ b/city_model_structure/transport/origin_destination_node.py @@ -3,13 +3,14 @@ Origin-Destination node module SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ -from typing import List +from typing import List, TypeVar from city_model_structure.attributes.node import Node from city_model_structure.attributes.point import Point from city_model_structure.attributes.polygon import Polygon from city_model_structure.city_object import CityObject -from city_model_structure.transport.origin_destination_edge import OriginDestinationEdge + +OriginDestinationEdge = TypeVar('OriginDestinationEdge') class OriginDestinationNode(Node): diff --git a/city_model_structure/transport/traffic_node.py b/city_model_structure/transport/traffic_node.py index 6391750e..6188e6e5 100644 --- a/city_model_structure/transport/traffic_node.py +++ b/city_model_structure/transport/traffic_node.py @@ -6,13 +6,14 @@ Contributor Milad milad.aghamohamadnia@concordia.ca Contributor Guille guille.gutierrezmorote@concordia.ca """ -from typing import List +from typing import List, TypeVar from city_model_structure.attributes.edge import Edge from city_model_structure.attributes.node import Node from city_model_structure.attributes.point import Point -from city_model_structure.transport.traffic_edge import TrafficEdge -from city_model_structure.transport.connection import Connection + +Connection = TypeVar('Connection') +TrafficEdge = TypeVar('TrafficEdge') class TrafficNode(Node): diff --git a/helpers/configuration_helper.py b/helpers/configuration_helper.py index 0a9b2d6c..de99f24a 100644 --- a/helpers/configuration_helper.py +++ b/helpers/configuration_helper.py @@ -38,4 +38,4 @@ class ConfigurationHelper: Get configured maximal coordinate value :return: 1.7976931348623157e+308 """ - return self._config.getfloat('buildings', 'max_coordinate') + return self._config.getfloat('buildings', 'max_coordinate').real diff --git a/imports/geometry/rhino.py b/imports/geometry/rhino.py new file mode 100644 index 00000000..66f200d8 --- /dev/null +++ b/imports/geometry/rhino.py @@ -0,0 +1,77 @@ +""" +Rhino module parses rhino files and import the geometry into the city model structure +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" +from rhino3dm import * +from rhino3dm._rhino3dm import MeshType +import numpy as np + +import helpers.configuration_helper +from city_model_structure.attributes.polygon import Polygon +from city_model_structure.building import Building +from city_model_structure.city import City +from city_model_structure.building_demand.surface import Surface as LibsSurface +from imports.geometry.helpers.geometry_helper import GeometryHelper +from helpers.configuration_helper import ConfigurationHelper + + +class Rhino: + def __init__(self, path): + self._model = File3dm.Read(str(path)) + max_float = 1.7976931348623157e+308 + min_float = -1.7976931348623157e+308 + self._min_x = self._min_y = self._min_z = max_float + self._max_x = self._max_y = self._max_z = min_float + print('init') + + @staticmethod + def _solid_points(coordinates) -> np.ndarray: + solid_points = np.fromstring(coordinates, dtype=float, sep=' ') + solid_points = GeometryHelper.to_points_matrix(solid_points) + return solid_points + + def _lower_corner(self, x, y, z): + if x < self._min_x: + self._min_x = x + if y < self._min_y: + self._min_y = y + if z < self._min_z: + self._min_z = z + if x > self._max_x: + self._max_x = x + if y > self._max_y: + self._max_y = y + if z > self._max_z: + self._max_z = z + + @property + def city(self) -> City: + buildings = [] + print('city') + for obj in self._model.Objects: + name = obj.Attributes.Id + surfaces = [] + for face in obj.Geometry.Faces: + if face is None: + break + _mesh = face.GetMesh(MeshType.Default) + for i in range(0, len(_mesh.Faces)): + faces = _mesh.Faces[i] + _points = '' + + for index in faces: + self._lower_corner(_mesh.Vertices[index].X, _mesh.Vertices[index].Y, _mesh.Vertices[index].Z) + _points = _points + f'{_mesh.Vertices[index].X} {_mesh.Vertices[index].Y} {_mesh.Vertices[index].Z} ' + polygon_points = Rhino._solid_points(_points.strip()) + print(_points) + surfaces.append(LibsSurface(Polygon(polygon_points), Polygon(polygon_points))) + buildings.append(Building(name, 3, surfaces, 'unknown', 'unknown', (self._min_x, self._min_y, self._min_z), [])) + lower_corner = (self._min_x, self._min_y, self._min_z) + upper_corner = (self._max_x, self._max_y, self._max_z) + city = City(lower_corner, upper_corner, 'Montreal') + for building in buildings: + city.add_city_object(building) + return city + + diff --git a/imports/geometry_factory.py b/imports/geometry_factory.py index ae2c3e29..d24199bf 100644 --- a/imports/geometry_factory.py +++ b/imports/geometry_factory.py @@ -8,6 +8,7 @@ from city_model_structure.city import City from imports.geometry.citygml import CityGml from imports.geometry.obj import Obj from imports.geometry.osm_subway import OsmSubway +from imports.geometry.rhino import Rhino class GeometryFactory: @@ -42,6 +43,14 @@ class GeometryFactory: """ return OsmSubway(self._path).city + @property + def _rhino(self) -> City: + """ + Enrich the city by using OpenStreetMap information as data source + :return: City + """ + return Rhino(self._path).city + @property def city(self) -> City: """ @@ -49,3 +58,11 @@ class GeometryFactory: :return: City """ return getattr(self, self._file_type, lambda: None) + + @property + def city_debug(self) -> City: + """ + Enrich the city given to the class using the class given handler + :return: City + """ + return Rhino(self._path).city diff --git a/requirements.txt b/requirements.txt index 8a6287d3..abd62d1a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,4 +14,5 @@ networkx~=2.5.1 parseidf~=1.0.0 ply~=3.11 scipy==1.7.1 -PyYAML==6.0 \ No newline at end of file +PyYAML==6.0 +rhino3dm~=7.7.0 \ No newline at end of file From 2af8bf5db3fdc415aff2e72422d4bc48f3dd8edb Mon Sep 17 00:00:00 2001 From: Pilar Date: Mon, 25 Oct 2021 18:05:51 -0400 Subject: [PATCH 06/54] created customized imports factory and correspondent test --- .../sanam_customized_usage_parameters.py | 37 +++++++++++---- imports/customized_imports_factory.py | 10 ++-- imports/usage/ca_usage_parameters.py | 2 +- unittests/test_customized_imports_factory.py | 47 +++++++++++++++++++ 4 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 unittests/test_customized_imports_factory.py diff --git a/imports/customized_imports/sanam_customized_usage_parameters.py b/imports/customized_imports/sanam_customized_usage_parameters.py index 58dbdef0..80d2e063 100644 --- a/imports/customized_imports/sanam_customized_usage_parameters.py +++ b/imports/customized_imports/sanam_customized_usage_parameters.py @@ -3,9 +3,11 @@ SanamCustomizedUsageParameters add two parameters to usage properties from ASHRA SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ -import sys +import sys +import xmltodict from imports.geometry.helpers.geometry_helper import GeometryHelper as gh +from imports.usage.data_classes.hft_usage_zone_archetype import HftUsageZoneArchetype as huza from city_model_structure.building_demand.usage_zone import UsageZone @@ -14,9 +16,17 @@ class SanamCustomizedUsageParameters: SanamCustomizedUsageParameters class """ def __init__(self, city, base_path): - super().__init__(base_path, 'ashrae_archetypes.xml') + file = 'ashrae_archetypes.xml' + path = str(base_path / file) + self._usage_archetypes = [] + with open(path) as xml: + self._archetypes = xmltodict.parse(xml.read(), force_list=('zoneUsageVariant', 'zoneUsageType')) + for zone_usage_type in self._archetypes['buildingUsageLibrary']['zoneUsageType']: + usage = zone_usage_type['id'] + usage_archetype = self._parse_zone_usage_type(usage, zone_usage_type) + self._usage_archetypes.append(usage_archetype) + self._city = city - self._usage_archetypes = None def enrich_buildings(self): """ @@ -25,20 +35,19 @@ class SanamCustomizedUsageParameters: """ city = self._city for building in city.buildings: - archetype = self._search_archetype(building.function) + archetype = self._search_archetype(building.function) # todo: building.function or other translation??????? if archetype is None: sys.stderr.write(f'Building {building.name} has unknown archetype for building function:' f' {building.function}, that assigns building usage as ' f'{gh.usage_from_function(building.function)}\n') continue - # todo: what to do with mix-usage usage from gml? mix_usage = False if not mix_usage: # just one usage_zone for thermal_zone in building.thermal_zones: usage_zone = UsageZone() - usage_zone.volume = thermal_zone.volume self._assign_values(usage_zone, archetype) + usage_zone.volume = thermal_zone.volume thermal_zone.usage_zones = [usage_zone] def _search_archetype(self, building_usage): @@ -50,6 +59,18 @@ class SanamCustomizedUsageParameters: @staticmethod def _assign_values(usage_zone, archetype): usage_zone.usage = archetype.usage + # Due to the fact that python is not a typed language, the wrong object type is assigned to + # usage_zone.internal_gains when writing usage_zone.internal_gains = archetype.internal_gains. + # Therefore, this walk around has been done. usage_zone.occupancy_density = archetype.occupancy_density - # todo: should I use this value: self._min_air_change?? - usage_zone.minimum_ventilation_rate = archetype.minimum_ventilation_rate + usage_zone.mechanical_air_change = archetype.mechanical_air_change + + @staticmethod + def _parse_zone_usage_type(usage, zone_usage_type): + occupancy_density = None + if 'occupancy' in zone_usage_type: + occupancy_density = zone_usage_type['occupancy']['occupancyDensity'] + mechanical_air_change = zone_usage_type['endUses']['ventilation']['minimumVentilationRate'] + usage_zone_archetype = huza(usage=usage, occupancy_density=occupancy_density, + mechanical_air_change=mechanical_air_change) + return usage_zone_archetype diff --git a/imports/customized_imports_factory.py b/imports/customized_imports_factory.py index 520cf853..bca8a87c 100644 --- a/imports/customized_imports_factory.py +++ b/imports/customized_imports_factory.py @@ -11,11 +11,11 @@ class CustomizedImportsFactory: """ CustomizedImportsFactory class """ - def __init__(self, city, importer_class, base_path): + def __init__(self, importer_class, city, base_path=None): if base_path is None: base_path = Path(Path(__file__).parent.parent / 'data/customized_imports') - self._city = city self._importer_class = importer_class + self._city = city self._base_path = base_path for building in city.buildings: if len(building.thermal_zones) == 0: @@ -24,6 +24,8 @@ class CustomizedImportsFactory: def enrich(self): """ - Enrich the city given to the class using the given importer class - :return: None + Returns the class that will enrich the city given + :return: Class """ + importer = self._importer_class(self._city, self._base_path) + return importer.enrich_buildings() diff --git a/imports/usage/ca_usage_parameters.py b/imports/usage/ca_usage_parameters.py index 1bbe5d58..01cc85a5 100644 --- a/imports/usage/ca_usage_parameters.py +++ b/imports/usage/ca_usage_parameters.py @@ -41,8 +41,8 @@ class CaUsageParameters(HftUsageInterface): # just one usage_zone for thermal_zone in building.thermal_zones: usage_zone = UsageZone() - usage_zone.volume = thermal_zone.volume self._assign_values(usage_zone, archetype) + usage_zone.volume = thermal_zone.volume thermal_zone.usage_zones = [usage_zone] def _search_archetype(self, building_usage): diff --git a/unittests/test_customized_imports_factory.py b/unittests/test_customized_imports_factory.py new file mode 100644 index 00000000..7b98784a --- /dev/null +++ b/unittests/test_customized_imports_factory.py @@ -0,0 +1,47 @@ +""" +TestCustomizedImportsFactory tests and validates the factory to import customized data +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" +from pathlib import Path +from unittest import TestCase + +from imports.geometry_factory import GeometryFactory +from imports.construction_factory import ConstructionFactory +from imports.customized_imports_factory import CustomizedImportsFactory +from imports.customized_imports.sanam_customized_usage_parameters import SanamCustomizedUsageParameters as scp + + +class TestCustomizedImportsFactory(TestCase): + """ + TestCustomizedImportsFactory TestCase + """ + def setUp(self) -> None: + """ + Configure test environment + :return: + """ + self._example_path = (Path(__file__).parent / 'tests_data').resolve() + + def _get_citygml(self, file): + file_path = (self._example_path / file).resolve() + _city = GeometryFactory('citygml', file_path).city + self.assertIsNotNone(_city, 'city is none') + ConstructionFactory('nrel', _city).enrich() + + return _city + + def test_city_with_customized_data(self): + """ + Enrich the city with the usage information and verify it + :return: None + """ + + file = 'one_building_in_kelowna.gml' + city = self._get_citygml(file) + + CustomizedImportsFactory(scp, city).enrich() + for building in city.buildings: + self.assertIsNot(len(building.usage_zones), 0, 'no building usage_zones defined') + for usage_zone in building.usage_zones: + self.assertIsNotNone(usage_zone.mechanical_air_change, 'usage is none') From 3adf8c9604edc4f6a0d777149d753abeb10edcee Mon Sep 17 00:00:00 2001 From: Pilar Date: Fri, 5 Nov 2021 10:16:35 -0400 Subject: [PATCH 07/54] created customized imports factory and correspondent test --- city_model_structure/building.py | 11 +++++ data/customized_imports/ashrae_archetypes.xml | 42 +++++++++---------- helpers/constants.py | 4 ++ helpers/enrich_city.py | 5 ++- imports/construction/us_physics_parameters.py | 1 + .../helpers/sanam_customized_usage_helper.py | 38 +++++++++++++++++ .../sanam_customized_usage_parameters.py | 34 ++++++++------- imports/geometry_factory.py | 30 ++++++------- unittests/test_customized_imports_factory.py | 2 + 9 files changed, 116 insertions(+), 51 deletions(-) create mode 100644 imports/customized_imports/helpers/sanam_customized_usage_helper.py diff --git a/city_model_structure/building.py b/city_model_structure/building.py index 9e144141..423d5ab8 100644 --- a/city_model_structure/building.py +++ b/city_model_structure/building.py @@ -174,6 +174,8 @@ class Building(CityObject): :return: [ThermalZone] """ if len(self._thermal_zones) == 0: + if self.storeys is None: + return [] for storey in self.storeys: self._thermal_zones.append(storey.thermal_zone) return self._thermal_zones @@ -194,6 +196,15 @@ class Building(CityObject): """ return self._year_of_construction + @year_of_construction.setter + def year_of_construction(self, value): + """ + Set building year of construction + :param value: int + """ + if value is not None: + self._year_of_construction = value + @property def function(self) -> Union[None, str]: """ diff --git a/data/customized_imports/ashrae_archetypes.xml b/data/customized_imports/ashrae_archetypes.xml index 17569df2..df281f3a 100644 --- a/data/customized_imports/ashrae_archetypes.xml +++ b/data/customized_imports/ashrae_archetypes.xml @@ -5,99 +5,99 @@ assembly - 0.15 + 0.15 - 5 + 5 health - 0.1 + 0.1 - 20 + 20 hotel - 0.11 + 0.11 - 5 + 5 manufacturing - 0.07 + 0.07 - 10 + 10 office - 0.05 + 0.05 - 5 + 5 restaurant - 0.7 + 0.7 - 7.5 + 7.5 retail - 0.2 + 0.2 - 7.5 + 7.5 school - 0.25 + 0.25 - 10 + 10 lab - 0.25 + 0.25 - 10 + 10 @@ -105,18 +105,18 @@ residential - 5 + 5 gymnasium - 0.3 + 0.3 - 7.5 + 7.5 diff --git a/helpers/constants.py b/helpers/constants.py index 0f571a50..50a35eb7 100644 --- a/helpers/constants.py +++ b/helpers/constants.py @@ -7,6 +7,10 @@ Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.mons # universal constants KELVIN = 273.15 +# converters +HOUR_TO_MINUTES = 60 +METERS_TO_FEET = 3.28084 + # time SECOND = 'second' MINUTE = 'minute' diff --git a/helpers/enrich_city.py b/helpers/enrich_city.py index e19bcf41..cc5067a1 100644 --- a/helpers/enrich_city.py +++ b/helpers/enrich_city.py @@ -55,10 +55,13 @@ class EnrichCity: def _construction(self, construction_format): ConstructionFactory(construction_format, self._city).enrich() + for building in self._city.buildings: # infiltration_rate_system_off is a mandatory parameter. # If it is not returned, extract the building from the calculation list - if building.thermal_zones[0].infiltration_rate_system_off is None: + if len(building.thermal_zones) == 0: + self._city.remove_city_object(building) + elif building.thermal_zones[0].infiltration_rate_system_off is None: self._city.remove_city_object(building) if self._city.buildings is None: self._errors.append('no archetype found per construction') diff --git a/imports/construction/us_physics_parameters.py b/imports/construction/us_physics_parameters.py index 50b0b8ca..f45e0f29 100644 --- a/imports/construction/us_physics_parameters.py +++ b/imports/construction/us_physics_parameters.py @@ -31,6 +31,7 @@ class UsPhysicsParameters(NrelPhysicsInterface): # it is assumed that all buildings have the same archetypes' keys for building in city.buildings: building_type = ConstructionHelper.nrel_from_function(building.function) + print(building_type) if building_type is None: return archetype = self._search_archetype(building_type, diff --git a/imports/customized_imports/helpers/sanam_customized_usage_helper.py b/imports/customized_imports/helpers/sanam_customized_usage_helper.py new file mode 100644 index 00000000..a0d981b8 --- /dev/null +++ b/imports/customized_imports/helpers/sanam_customized_usage_helper.py @@ -0,0 +1,38 @@ +""" +Sanam's customized importer Usage helper +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" +import sys +import helpers.constants as cte + + +class SanamCustomizedUsageHelper: + """ + SanamCustomizedUsage class + """ + usage_to_customized = { + cte.RESIDENTIAL: 'residential', + cte.INDUSTRY: 'manufacturing', + cte.OFFICE_ADMINISTRATION: 'office', + cte.HOTEL: 'hotel', + cte.HEALTH_CARE: 'health', + cte.RETAIL: 'retail', + cte.HALL: 'assembly', + cte.RESTAURANT: 'restaurant', + cte.EDUCATION: 'school' + } + customized_default_value = 'residential' + + @staticmethod + def customized_from_usage(usage): + """ + Get customized usage from the given internal usage key + :param usage: str + :return: str + """ + try: + return SanamCustomizedUsageHelper.usage_to_customized[usage] + except KeyError: + sys.stderr.write('Error: keyword not found. Returned default HfT usage "residential"\n') + return SanamCustomizedUsageHelper.customized_default_value diff --git a/imports/customized_imports/sanam_customized_usage_parameters.py b/imports/customized_imports/sanam_customized_usage_parameters.py index 80d2e063..6604a8e5 100644 --- a/imports/customized_imports/sanam_customized_usage_parameters.py +++ b/imports/customized_imports/sanam_customized_usage_parameters.py @@ -8,7 +8,7 @@ import sys import xmltodict from imports.geometry.helpers.geometry_helper import GeometryHelper as gh from imports.usage.data_classes.hft_usage_zone_archetype import HftUsageZoneArchetype as huza -from city_model_structure.building_demand.usage_zone import UsageZone +import helpers.constants as cte class SanamCustomizedUsageParameters: @@ -36,6 +36,11 @@ class SanamCustomizedUsageParameters: city = self._city for building in city.buildings: archetype = self._search_archetype(building.function) # todo: building.function or other translation??????? + height = building.average_storey_height + if height is None: + raise Exception('Average storey height not defined, ACH cannot be calculated') + if height <= 0: + raise Exception('Average storey height is zero, ACH cannot be calculated') if archetype is None: sys.stderr.write(f'Building {building.name} has unknown archetype for building function:' f' {building.function}, that assigns building usage as ' @@ -44,11 +49,8 @@ class SanamCustomizedUsageParameters: mix_usage = False if not mix_usage: # just one usage_zone - for thermal_zone in building.thermal_zones: - usage_zone = UsageZone() - self._assign_values(usage_zone, archetype) - usage_zone.volume = thermal_zone.volume - thermal_zone.usage_zones = [usage_zone] + for usage_zone in building.usage_zones: + self._assign_values(usage_zone, archetype, height) def _search_archetype(self, building_usage): for building_archetype in self._usage_archetypes: @@ -57,20 +59,24 @@ class SanamCustomizedUsageParameters: return None @staticmethod - def _assign_values(usage_zone, archetype): + def _assign_values(usage_zone, archetype, height): usage_zone.usage = archetype.usage # Due to the fact that python is not a typed language, the wrong object type is assigned to # usage_zone.internal_gains when writing usage_zone.internal_gains = archetype.internal_gains. # Therefore, this walk around has been done. - usage_zone.occupancy_density = archetype.occupancy_density - usage_zone.mechanical_air_change = archetype.mechanical_air_change + if archetype.occupancy_density is not None: + usage_zone.occupancy_density = archetype.occupancy_density + archetype_mechanical_air_change = float(archetype.mechanical_air_change) * float(usage_zone.occupancy_density) \ + * cte.HOUR_TO_MINUTES / cte.METERS_TO_FEET**3 / height + usage_zone.mechanical_air_change = archetype_mechanical_air_change @staticmethod def _parse_zone_usage_type(usage, zone_usage_type): - occupancy_density = None + mechanical_air_change = zone_usage_type['endUses']['ventilation']['minimumVentilationRate']['#text'] if 'occupancy' in zone_usage_type: - occupancy_density = zone_usage_type['occupancy']['occupancyDensity'] - mechanical_air_change = zone_usage_type['endUses']['ventilation']['minimumVentilationRate'] - usage_zone_archetype = huza(usage=usage, occupancy_density=occupancy_density, - mechanical_air_change=mechanical_air_change) + occupancy_density = zone_usage_type['occupancy']['occupancyDensity']['#text'] + usage_zone_archetype = huza(usage=usage, occupancy_density=occupancy_density, + mechanical_air_change=mechanical_air_change) + else: + usage_zone_archetype = huza(usage=usage, mechanical_air_change=mechanical_air_change) return usage_zone_archetype diff --git a/imports/geometry_factory.py b/imports/geometry_factory.py index d24199bf..da35c334 100644 --- a/imports/geometry_factory.py +++ b/imports/geometry_factory.py @@ -8,7 +8,7 @@ from city_model_structure.city import City from imports.geometry.citygml import CityGml from imports.geometry.obj import Obj from imports.geometry.osm_subway import OsmSubway -from imports.geometry.rhino import Rhino +#from imports.geometry.rhino import Rhino class GeometryFactory: @@ -43,13 +43,13 @@ class GeometryFactory: """ return OsmSubway(self._path).city - @property - def _rhino(self) -> City: - """ - Enrich the city by using OpenStreetMap information as data source - :return: City - """ - return Rhino(self._path).city +# @property +# def _rhino(self) -> City: +# """ +# Enrich the city by using OpenStreetMap information as data source +# :return: City +# """ +# return Rhino(self._path).city @property def city(self) -> City: @@ -59,10 +59,10 @@ class GeometryFactory: """ return getattr(self, self._file_type, lambda: None) - @property - def city_debug(self) -> City: - """ - Enrich the city given to the class using the class given handler - :return: City - """ - return Rhino(self._path).city +# @property +# def city_debug(self) -> City: +# """ +# Enrich the city given to the class using the class given handler +# :return: City +# """ +# return Rhino(self._path).city diff --git a/unittests/test_customized_imports_factory.py b/unittests/test_customized_imports_factory.py index 7b98784a..80373480 100644 --- a/unittests/test_customized_imports_factory.py +++ b/unittests/test_customized_imports_factory.py @@ -8,6 +8,7 @@ from unittest import TestCase from imports.geometry_factory import GeometryFactory from imports.construction_factory import ConstructionFactory +from imports.usage_factory import UsageFactory from imports.customized_imports_factory import CustomizedImportsFactory from imports.customized_imports.sanam_customized_usage_parameters import SanamCustomizedUsageParameters as scp @@ -28,6 +29,7 @@ class TestCustomizedImportsFactory(TestCase): _city = GeometryFactory('citygml', file_path).city self.assertIsNotNone(_city, 'city is none') ConstructionFactory('nrel', _city).enrich() + UsageFactory('hft', _city).enrich() return _city From e5e339841c60dc9b8e68b17e1cbc0cb009d66991 Mon Sep 17 00:00:00 2001 From: guille Date: Thu, 11 Nov 2021 11:50:07 -0500 Subject: [PATCH 08/54] testing something with sanam --- requirements.txt | 1 - unittests/test_doe_idf.py | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index abd62d1a..15593f09 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,6 @@ geomeppy~=0.11.8 pathlib~=1.0.1 PyWavefront~=1.3.3 xlrd~=2.0.1 -openpyxl~=3.0.7 networkx~=2.5.1 parseidf~=1.0.0 ply~=3.11 diff --git a/unittests/test_doe_idf.py b/unittests/test_doe_idf.py index 8c930656..3aedcfdf 100644 --- a/unittests/test_doe_idf.py +++ b/unittests/test_doe_idf.py @@ -2,6 +2,7 @@ Building test SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Guille Gutierrez Morote Guillermo.GutierrezMorote@concordia.ca +this is my change """ from pathlib import Path from unittest import TestCase From b87cfea50902831b5020560a5c767e72d1a660db Mon Sep 17 00:00:00 2001 From: Guillermo Gutierrez Morote Date: Thu, 11 Nov 2021 16:49:21 +0000 Subject: [PATCH 09/54] Update test_doe_idf.py --- unittests/test_doe_idf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/unittests/test_doe_idf.py b/unittests/test_doe_idf.py index 3aedcfdf..8c930656 100644 --- a/unittests/test_doe_idf.py +++ b/unittests/test_doe_idf.py @@ -2,7 +2,6 @@ Building test SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Guille Gutierrez Morote Guillermo.GutierrezMorote@concordia.ca -this is my change """ from pathlib import Path from unittest import TestCase From 9837bb84279c573cbf2f74c5cde8c368e6cc8263 Mon Sep 17 00:00:00 2001 From: guille Date: Fri, 12 Nov 2021 04:41:17 -0500 Subject: [PATCH 10/54] Base implementation for the fuel life cicle analisis --- city_model_structure/city.py | 458 ++++++++++---------- city_model_structure/fuel.py | 41 ++ data/life_cicle_analize/lca_data.xml | 573 +++++++++++++++++++++++++ imports/life_cicle_analize/lca_fuel.py | 24 ++ imports/life_cicle_analyze_factory.py | 33 ++ unittests/tests_data/lca_data.xml | 573 +++++++++++++++++++++++++ 6 files changed, 1478 insertions(+), 224 deletions(-) create mode 100644 city_model_structure/fuel.py create mode 100644 data/life_cicle_analize/lca_data.xml create mode 100644 imports/life_cicle_analize/lca_fuel.py create mode 100644 imports/life_cicle_analyze_factory.py create mode 100644 unittests/tests_data/lca_data.xml diff --git a/city_model_structure/city.py b/city_model_structure/city.py index 9f6b0e0a..9465f368 100644 --- a/city_model_structure/city.py +++ b/city_model_structure/city.py @@ -2,7 +2,6 @@ City module SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca -Contributor Peter Yefi peteryefi@gmail.com """ from __future__ import annotations import sys @@ -19,361 +18,372 @@ from city_model_structure.city_objects_cluster import CityObjectsCluster from city_model_structure.buildings_cluster import BuildingsCluster from city_model_structure.parts_consisting_building import PartsConsistingBuilding from city_model_structure.subway_entrance import SubwayEntrance +from city_model_structure.fuel import Fuel from helpers.geometry_helper import GeometryHelper from helpers.location import Location from city_model_structure.energy_system import EnergySystem class City: - """ + """ City class """ - def __init__(self, lower_corner, upper_corner, srs_name): - self._name = None - self._lower_corner = lower_corner - self._upper_corner = upper_corner - self._buildings = None - self._subway_entrances = None - self._srs_name = srs_name - self._geometry = GeometryHelper() - # todo: right now extracted at city level, in the future should be extracted also at building level if exist - self._location = None - self._country_code = None - self._climate_reference_city = None - self._climate_file = None - self._latitude = None - self._longitude = None - self._time_zone = None - self._buildings_clusters = None - self._parts_consisting_buildings = None - self._city_objects_clusters = None - self._city_objects = None - self._energy_systems = None + def __init__(self, lower_corner, upper_corner, srs_name): + self._name = None + self._lower_corner = lower_corner + self._upper_corner = upper_corner + self._buildings = None + self._subway_entrances = None + self._srs_name = srs_name + self._geometry = GeometryHelper() + # todo: right now extracted at city level, in the future should be extracted also at building level if exist + self._location = None + self._country_code = None + self._climate_reference_city = None + self._climate_file = None + self._latitude = None + self._longitude = None + self._time_zone = None + self._buildings_clusters = None + self._parts_consisting_buildings = None + self._city_objects_clusters = None + self._city_objects = None + self._energy_systems = None + self._fuels = None - def _get_location(self) -> Location: - if self._location is None: - gps = pyproj.CRS('EPSG:4326') # LatLon with WGS84 datum used by GPS units and Google Earth - try: - input_reference = pyproj.CRS(self.srs_name) # Projected coordinate system from input data - except pyproj.exceptions.CRSError: - sys.stderr.write('Invalid projection reference system, please check the input data. ' - '(e.g. in CityGML files: srs_name)\n') - sys.exit() - transformer = Transformer.from_crs(input_reference, gps) - coordinates = transformer.transform(self.lower_corner[0], self.lower_corner[1]) - self._location = GeometryHelper.get_location(coordinates[0], coordinates[1]) - return self._location + @property + def fuels(self) -> [Fuel]: + return self._fuels - @property - def country_code(self): - """ + @fuels.setter + def fuels(self, value): + self._fuels = value + + + def _get_location(self) -> Location: + if self._location is None: + gps = pyproj.CRS('EPSG:4326') # LatLon with WGS84 datum used by GPS units and Google Earth + try: + input_reference = pyproj.CRS(self.srs_name) # Projected coordinate system from input data + except pyproj.exceptions.CRSError: + sys.stderr.write('Invalid projection reference system, please check the input data. ' + '(e.g. in CityGML files: srs_name)\n') + sys.exit() + transformer = Transformer.from_crs(input_reference, gps) + coordinates = transformer.transform(self.lower_corner[0], self.lower_corner[1]) + self._location = GeometryHelper.get_location(coordinates[0], coordinates[1]) + return self._location + + @property + def country_code(self): + """ Get city country code :return: str """ - return self._get_location().country + return self._get_location().country - @property - def name(self): - """ + @property + def name(self): + """ Get city name :return: str """ - return self._get_location().city + return self._get_location().city - @property - def climate_reference_city(self) -> Union[None, str]: - """ + @property + def climate_reference_city(self) -> Union[None, str]: + """ Get the name for the climatic information reference city :return: None or str """ - return self._climate_reference_city + return self._climate_reference_city - @climate_reference_city.setter - def climate_reference_city(self, value): - """ + @climate_reference_city.setter + def climate_reference_city(self, value): + """ Set the name for the climatic information reference city :param value: str """ - if value is not None: - self._climate_reference_city = str(value) + if value is not None: + self._climate_reference_city = str(value) - @property - def climate_file(self) -> Union[None, Path]: - """ + @property + def climate_file(self) -> Union[None, Path]: + """ Get the climate file full path :return: None or Path """ - return self._climate_file + return self._climate_file - @climate_file.setter - def climate_file(self, value): - """ + @climate_file.setter + def climate_file(self, value): + """ Set the climate file full path :param value: Path """ - if value is not None: - self._climate_file = Path(value) + if value is not None: + self._climate_file = Path(value) - @property - def city_objects(self) -> Union[List[CityObject], None]: - """ + @property + def city_objects(self) -> Union[List[CityObject], None]: + """ Get the city objects belonging to the city :return: None or [CityObject] """ - if self._city_objects is None: - if self.city_objects_clusters is None: - self._city_objects = [] - else: - self._city_objects = self.city_objects_clusters - if self.buildings is not None: - for building in self.buildings: - self._city_objects.append(building) - if self.subway_entrances is not None: - for subway_entrance in self.subway_entrances: - self._city_objects.append(subway_entrance) - if self.energy_systems is not None: - for energy_system in self.energy_systems: - self._city_objects.append(energy_system) - return self._city_objects + if self._city_objects is None: + if self.city_objects_clusters is None: + self._city_objects = [] + else: + self._city_objects = self.city_objects_clusters + if self.buildings is not None: + for building in self.buildings: + self._city_objects.append(building) + if self.subway_entrances is not None: + for subway_entrance in self.subway_entrances: + self._city_objects.append(subway_entrance) + if self.energy_systems is not None: + for energy_system in self.energy_systems: + self._city_objects.append(energy_system) + return self._city_objects - @property - def buildings(self) -> Union[List[Building], None]: - """ + @property + def buildings(self) -> Union[List[Building], None]: + """ Get the buildings belonging to the city :return: None or [Building] """ - return self._buildings + return self._buildings - @property - def subway_entrances(self) -> Union[List[SubwayEntrance], None]: - """ + @property + def subway_entrances(self) -> Union[List[SubwayEntrance], None]: + """ Get the subway entrances belonging to the city :return: a list of subway entrances objects or none """ - return self._subway_entrances + return self._subway_entrances - @property - def lower_corner(self) -> List[float]: - """ + @property + def lower_corner(self) -> List[float]: + """ Get city lower corner :return: [x,y,z] """ - return self._lower_corner + return self._lower_corner - @property - def upper_corner(self) -> List[float]: - """ + @property + def upper_corner(self) -> List[float]: + """ Get city upper corner :return: [x,y,z] """ - return self._upper_corner + return self._upper_corner - def city_object(self, name) -> Union[CityObject, None]: - """ + def city_object(self, name) -> Union[CityObject, None]: + """ Retrieve the city CityObject with the given name :param name:str :return: None or CityObject """ - for city_object in self.buildings: - if city_object.name == name: - return city_object - return None + for city_object in self.buildings: + if city_object.name == name: + return city_object + return None - def add_city_object(self, new_city_object): - """ + def add_city_object(self, new_city_object): + """ Add a CityObject to the city :param new_city_object:CityObject :return: None or not implemented error """ - if new_city_object.type == 'building': - if self._buildings is None: - self._buildings = [] - self._buildings.append(new_city_object) - elif new_city_object.type == 'subway_entrance': - if self._subway_entrances is None: - self._subway_entrances = [] - self._subway_entrances.append(new_city_object) - elif new_city_object.type == 'energy_system': - if self._energy_systems is None: - self._energy_systems = [] - self._energy_systems.append(new_city_object) - else: - raise NotImplementedError(new_city_object.type) + if new_city_object.type == 'building': + if self._buildings is None: + self._buildings = [] + self._buildings.append(new_city_object) + elif new_city_object.type == 'subway_entrance': + if self._subway_entrances is None: + self._subway_entrances = [] + self._subway_entrances.append(new_city_object) + elif new_city_object.type == 'energy_system': + if self._energy_systems is None: + self._energy_systems = [] + self._energy_systems.append(new_city_object) + else: + raise NotImplementedError(new_city_object.type) - def remove_city_object(self, city_object): - """ + def remove_city_object(self, city_object): + """ Remove a CityObject from the city :param city_object:CityObject :return: None """ - if city_object.type != 'building': - raise NotImplementedError(city_object.type) - if self._buildings is None or self._buildings == []: - sys.stderr.write('Warning: impossible to remove city_object, the city is empty\n') - else: - if city_object in self._buildings: - self._buildings.remove(city_object) + if city_object.type != 'building': + raise NotImplementedError(city_object.type) + if self._buildings is None or self._buildings == []: + sys.stderr.write('Warning: impossible to remove city_object, the city is empty\n') + else: + if city_object in self._buildings: + self._buildings.remove(city_object) - @property - def srs_name(self) -> Union[None, str]: - """ + @property + def srs_name(self) -> Union[None, str]: + """ Get city srs name :return: None or str """ - return self._srs_name + return self._srs_name - @name.setter - def name(self, value): - """ + @name.setter + def name(self, value): + """ Set city name :param value:str """ - if value is not None: - self._name = str(value) + if value is not None: + self._name = str(value) - @staticmethod - def load(city_filename) -> City: - """ + @staticmethod + def load(city_filename) -> City: + """ Load a city saved with city.save(city_filename) :param city_filename: city filename :return: City """ - with open(city_filename, 'rb') as file: - return pickle.load(file) + with open(city_filename, 'rb') as file: + return pickle.load(file) - def save(self, city_filename): - """ + def save(self, city_filename): + """ Save a city into the given filename :param city_filename: destination city filename :return: None """ - with open(city_filename, 'wb') as file: - pickle.dump(self, file) + with open(city_filename, 'wb') as file: + pickle.dump(self, file) - def region(self, center, radius) -> City: - """ + def region(self, center, radius) -> City: + """ Get a region from the city :param center: specific point in space [x, y, z] :param radius: distance to center of the sphere selected in meters :return: selected_region_city """ - selected_region_lower_corner = [center[0] - radius, center[1] - radius, center[2] - radius] - selected_region_upper_corner = [center[0] + radius, center[1] + radius, center[2] + radius] - selected_region_city = City(selected_region_lower_corner, selected_region_upper_corner, srs_name=self.srs_name) - selected_region_city.climate_file = self.climate_file - # selected_region_city.climate_reference_city = self.climate_reference_city - for city_object in self.city_objects: - location = city_object.centroid - if location is not None: - distance = math.sqrt(math.pow(location[0] - center[0], 2) + math.pow(location[1] - center[1], 2) - + math.pow(location[2] - center[2], 2)) - if distance < radius: - selected_region_city.add_city_object(city_object) - return selected_region_city + selected_region_lower_corner = [center[0] - radius, center[1] - radius, center[2] - radius] + selected_region_upper_corner = [center[0] + radius, center[1] + radius, center[2] + radius] + selected_region_city = City(selected_region_lower_corner, selected_region_upper_corner, srs_name=self.srs_name) + selected_region_city.climate_file = self.climate_file +# selected_region_city.climate_reference_city = self.climate_reference_city + for city_object in self.city_objects: + location = city_object.centroid + if location is not None: + distance = math.sqrt(math.pow(location[0]-center[0], 2) + math.pow(location[1]-center[1], 2) + + math.pow(location[2]-center[2], 2)) + if distance < radius: + selected_region_city.add_city_object(city_object) + return selected_region_city - @property - def latitude(self) -> Union[None, float]: - """ + @property + def latitude(self) -> Union[None, float]: + """ Get city latitude in degrees :return: None or float """ - return self._latitude + return self._latitude - @latitude.setter - def latitude(self, value): - """ + @latitude.setter + def latitude(self, value): + """ Set city latitude in degrees :parameter value: float """ - if value is not None: - self._latitude = float(value) + if value is not None: + self._latitude = float(value) - @property - def longitude(self) -> Union[None, float]: - """ + @property + def longitude(self) -> Union[None, float]: + """ Get city longitude in degrees :return: None or float """ - return self._longitude + return self._longitude - @longitude.setter - def longitude(self, value): - """ + @longitude.setter + def longitude(self, value): + """ Set city longitude in degrees :parameter value: float """ - if value is not None: - self._longitude = float(value) + if value is not None: + self._longitude = float(value) - @property - def time_zone(self) -> Union[None, float]: - """ + @property + def time_zone(self) -> Union[None, float]: + """ Get city time_zone :return: None or float """ - return self._time_zone + return self._time_zone - @time_zone.setter - def time_zone(self, value): - """ + @time_zone.setter + def time_zone(self, value): + """ Set city time_zone :parameter value: float """ - if value is not None: - self._time_zone = float(value) + if value is not None: + self._time_zone = float(value) - @property - def buildings_clusters(self) -> Union[List[BuildingsCluster], None]: - """ + @property + def buildings_clusters(self) -> Union[List[BuildingsCluster], None]: + """ Get buildings clusters belonging to the city :return: None or [BuildingsCluster] """ - return self._buildings_clusters + return self._buildings_clusters - @property - def parts_consisting_buildings(self) -> Union[List[PartsConsistingBuilding], None]: - """ + @property + def parts_consisting_buildings(self) -> Union[List[PartsConsistingBuilding], None]: + """ Get parts consisting buildings belonging to the city :return: None or [PartsConsistingBuilding] """ - return self._parts_consisting_buildings + return self._parts_consisting_buildings - @property - def energy_systems(self) -> Union[List[EnergySystem], None]: - """ - Get energy systems belonging to the city - :return: None or [EnergySystem] - """ - return self._energy_systems + @property + def energy_systems(self) -> Union[List[EnergySystem], None]: + """ + Get energy systems belonging to the city + :return: None or [EnergySystem] + """ + return self._energy_systems - @property - def city_objects_clusters(self) -> Union[List[CityObjectsCluster], None]: - """ + @property + def city_objects_clusters(self) -> Union[List[CityObjectsCluster], None]: + """ Get city objects clusters belonging to the city :return: None or [CityObjectsCluster] """ - if self.buildings_clusters is None: - self._city_objects_clusters = [] - else: - self._city_objects_clusters = self.buildings_clusters - if self.parts_consisting_buildings is not None: - self._city_objects_clusters.append(self.parts_consisting_buildings) - return self._city_objects_clusters + if self.buildings_clusters is None: + self._city_objects_clusters = [] + else: + self._city_objects_clusters = self.buildings_clusters + if self.parts_consisting_buildings is not None: + self._city_objects_clusters.append(self.parts_consisting_buildings) + return self._city_objects_clusters - def add_city_objects_cluster(self, new_city_objects_cluster): - """ + def add_city_objects_cluster(self, new_city_objects_cluster): + """ Add a CityObject to the city :param new_city_objects_cluster:CityObjectsCluster :return: None or NotImplementedError """ - if new_city_objects_cluster.type == 'buildings': - if self._buildings_clusters is None: - self._buildings_clusters = [] - self._buildings_clusters.append(new_city_objects_cluster) - elif new_city_objects_cluster.type == 'building_parts': - if self._parts_consisting_buildings is None: - self._parts_consisting_buildings = [] - self._parts_consisting_buildings.append(new_city_objects_cluster) - else: - raise NotImplementedError + if new_city_objects_cluster.type == 'buildings': + if self._buildings_clusters is None: + self._buildings_clusters = [] + self._buildings_clusters.append(new_city_objects_cluster) + elif new_city_objects_cluster.type == 'building_parts': + if self._parts_consisting_buildings is None: + self._parts_consisting_buildings = [] + self._parts_consisting_buildings.append(new_city_objects_cluster) + else: + raise NotImplementedError diff --git a/city_model_structure/fuel.py b/city_model_structure/fuel.py new file mode 100644 index 00000000..e78a9f76 --- /dev/null +++ b/city_model_structure/fuel.py @@ -0,0 +1,41 @@ +""" +ConstructionFactory (before PhysicsFactory) retrieve the specific construction module for the given region +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Atiya +""" + +class Fuel: + def __init__(self, fuel_id, name, carbon_emission_factor, unit): + self._fuel_id = fuel_id + self._name = name + self._carbon_emission_factor = carbon_emission_factor + self._unit = unit + + @property + def id(self): + """ + Get fuel id + """ + return self._fuel_id + + @property + def name(self): + """ + Get fuel name + """ + return self._name + + @property + def carbon_emission_factor(self): + """ + Get fuel carbon emission factor + """ + return self._carbon_emission_factor + + @property + def unit(self): + """ + Get fuel units + """ + return self._unit + diff --git a/data/life_cicle_analize/lca_data.xml b/data/life_cicle_analize/lca_data.xml new file mode 100644 index 00000000..bc3ab8ee --- /dev/null +++ b/data/life_cicle_analize/lca_data.xml @@ -0,0 +1,573 @@ + + + + + 0.32 + + + 0.4 + + + 0.4 + + + 0.5 + + + 0.18 + + + 0.39 + + + 0.27 + + + 4.16 + + + 2.24 + + + 0.2 + + + 3.19 + + + 3.53 + + + 0.27 + + + 0.21 + + + 1.69 + + + 0.21 + + + 0.35 + + + 0.18 + + + 0.81 + + + 1.21 + + + 1.61 + + + 0.11 + + + 0.3 + + + 1.16 + + + 0.61 + + + + + 0.347 + 16.5 + 0.918 + + + 0.033 + 25.2 + 4.16 + + + 0.027 + 16.8 + 2.239 + + + 0.023 + 16.8 + 2.239 + + + 0.109 + 25.2 + 2.239 + + + 0.003 + 16.4 + 4.16 + + + 0.002 + 11 + 0.918 + + + 0.002 + 90 + 0.918 + + + 0.002 + 10 + 0.918 + + + 0.002 + 11 + 0.918 + + + 0.002 + 132 + 0.918 + + + 0.002 + 15 + 0.918 + + + 0.002 + 5.5 + 0.918 + + + 0.002 + 22.5 + 0.918 + + + + + 0.0123 + 2.239 + + + 0.042 + 0.918 + + + 0.01 + 1.00000 + + + 1.3 + 1.00000 + + + + + + 1.8 + 560 + 0.8 + 0.3 + 0.7 + 0.2 + .... + + + 1.2 + 310 + 0.8 + 0.3 + 0.7 + 0.2 + .... + + + 2 + 3080 + 0.8 + 0.3 + 0.7 + 0.2 + .... + + + 1.4 + 300 + 0.8 + 0.3 + 0.7 + 0.2 + .... + + + + + 1.6 + 900 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.6 + 2340 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.6 + 1570 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.4 + 1840 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.3 + 410 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.3 + 160 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.3 + 170 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.3 + 230 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.4 + 240 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.4 + 280 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.3 + 170 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.2 + 440 + 0.8 + 0 + 1 + 0.2 + .... + + + + + 2.58 + 2660 + 0.95 + 0 + 1 + 0.05 + .... + + + 2.58 + 5260 + 0.95 + 0 + 1 + 0.05 + .... + + + + + 0.06 + 1760 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.122 + 3080 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.028 + 3180 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.024 + 5140 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.1 + 6040 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.3 + 5380 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.032 + 2150 + 0.9 + 0 + 1 + 0.1 + .... + + + + + 0.9 + 3420 + 0.6 + 0 + 1 + 0.4 + .... + + + 0.7 + 1430 + 0.6 + 0 + 1 + 0.4 + .... + + + 0.65 + 2780 + 0.6 + 0 + 1 + 0.4 + .... + + + 0.72 + 2190 + 0.6 + 0 + 1 + 0.4 + .... + + + + + 1.43 + 1070 + 0 + 0 + 0 + 1 + .... + + + 1.43 + 240 + 0 + 0 + 0 + 1 + .... + + + 1.43 + 430 + 0 + 0 + 0 + 1 + .... + + + 1.43 + 340 + 0 + 0 + 0 + 1 + .... + + + 1.2 + 440 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.1 + 1410 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.43 + 250 + 0 + 0 + 0 + 1 + .... + + + 1.44 + 1480 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.44 + 2220 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.27 + 3960 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.15 + 760 + 0.8 + 0 + 1 + 0.2 + .... + + + + + 8 + 3160 + 0.98 + 0 + 1 + 0.02 + .... + + + 2.7 + 5370 + 0.98 + 0 + 1 + 0.02 + .... + + + 7.85 + 3910 + 0.98 + 0 + 1 + 0.02 + .... + + + + \ No newline at end of file diff --git a/imports/life_cicle_analize/lca_fuel.py b/imports/life_cicle_analize/lca_fuel.py new file mode 100644 index 00000000..c35e0749 --- /dev/null +++ b/imports/life_cicle_analize/lca_fuel.py @@ -0,0 +1,24 @@ +""" +CityGml module parses citygml_classes files and import the geometry into the city model structure +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Atiya +""" +import xmltodict +from pathlib import Path +from city_model_structure.fuel import Fuel + +class LcaFuel: + def __init__(self, city, base_path): + self._city = city + self._base_path = base_path + self._lca = None + + def enrich(self): + self._city.fuels = [] + path = Path(self._base_path / 'lca_data.xml').resolve() + + with open(path) as xml: + self._lca = xmltodict.parse(xml.read()) + for fuel in self._lca["library"]["Fuels"]['fuel']: + self._city.fuels.append(Fuel(fuel['@id'], fuel['@name'], fuel['carbon_emission_factor']['#text'], + fuel['carbon_emission_factor']['@unit'])) diff --git a/imports/life_cicle_analyze_factory.py b/imports/life_cicle_analyze_factory.py new file mode 100644 index 00000000..7a09097a --- /dev/null +++ b/imports/life_cicle_analyze_factory.py @@ -0,0 +1,33 @@ +""" +ConstructionFactory (before PhysicsFactory) retrieve the specific construction module for the given region +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Atiya +""" + +from pathlib import Path +from imports.life_cicle_analize.lca_fuel import LcaFuel + + +class LifeCicleAnalizeFactory: + """ + Life cicle analize factory class + """ + def __init__(self, handler, city, base_path=None): + if base_path is None: + base_path = Path(Path(__file__).parent.parent / 'data/construction') + self._handler = '_' + handler.lower().replace(' ', '_') + self._city = city + self._base_path = base_path + + def _fuel(self): + """ + Enrich the city by adding the fuel carbon information + """ + LcaFuel(self._city, self._base_path).enrich() + + def enrich(self): + """ + Enrich the city given to the class using the class given handler + :return: None + """ + getattr(self, self._handler, lambda: None)() diff --git a/unittests/tests_data/lca_data.xml b/unittests/tests_data/lca_data.xml new file mode 100644 index 00000000..bc3ab8ee --- /dev/null +++ b/unittests/tests_data/lca_data.xml @@ -0,0 +1,573 @@ + + + + + 0.32 + + + 0.4 + + + 0.4 + + + 0.5 + + + 0.18 + + + 0.39 + + + 0.27 + + + 4.16 + + + 2.24 + + + 0.2 + + + 3.19 + + + 3.53 + + + 0.27 + + + 0.21 + + + 1.69 + + + 0.21 + + + 0.35 + + + 0.18 + + + 0.81 + + + 1.21 + + + 1.61 + + + 0.11 + + + 0.3 + + + 1.16 + + + 0.61 + + + + + 0.347 + 16.5 + 0.918 + + + 0.033 + 25.2 + 4.16 + + + 0.027 + 16.8 + 2.239 + + + 0.023 + 16.8 + 2.239 + + + 0.109 + 25.2 + 2.239 + + + 0.003 + 16.4 + 4.16 + + + 0.002 + 11 + 0.918 + + + 0.002 + 90 + 0.918 + + + 0.002 + 10 + 0.918 + + + 0.002 + 11 + 0.918 + + + 0.002 + 132 + 0.918 + + + 0.002 + 15 + 0.918 + + + 0.002 + 5.5 + 0.918 + + + 0.002 + 22.5 + 0.918 + + + + + 0.0123 + 2.239 + + + 0.042 + 0.918 + + + 0.01 + 1.00000 + + + 1.3 + 1.00000 + + + + + + 1.8 + 560 + 0.8 + 0.3 + 0.7 + 0.2 + .... + + + 1.2 + 310 + 0.8 + 0.3 + 0.7 + 0.2 + .... + + + 2 + 3080 + 0.8 + 0.3 + 0.7 + 0.2 + .... + + + 1.4 + 300 + 0.8 + 0.3 + 0.7 + 0.2 + .... + + + + + 1.6 + 900 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.6 + 2340 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.6 + 1570 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.4 + 1840 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.3 + 410 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.3 + 160 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.3 + 170 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.3 + 230 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.4 + 240 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.4 + 280 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.3 + 170 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.2 + 440 + 0.8 + 0 + 1 + 0.2 + .... + + + + + 2.58 + 2660 + 0.95 + 0 + 1 + 0.05 + .... + + + 2.58 + 5260 + 0.95 + 0 + 1 + 0.05 + .... + + + + + 0.06 + 1760 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.122 + 3080 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.028 + 3180 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.024 + 5140 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.1 + 6040 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.3 + 5380 + 0.9 + 0 + 1 + 0.1 + .... + + + 0.032 + 2150 + 0.9 + 0 + 1 + 0.1 + .... + + + + + 0.9 + 3420 + 0.6 + 0 + 1 + 0.4 + .... + + + 0.7 + 1430 + 0.6 + 0 + 1 + 0.4 + .... + + + 0.65 + 2780 + 0.6 + 0 + 1 + 0.4 + .... + + + 0.72 + 2190 + 0.6 + 0 + 1 + 0.4 + .... + + + + + 1.43 + 1070 + 0 + 0 + 0 + 1 + .... + + + 1.43 + 240 + 0 + 0 + 0 + 1 + .... + + + 1.43 + 430 + 0 + 0 + 0 + 1 + .... + + + 1.43 + 340 + 0 + 0 + 0 + 1 + .... + + + 1.2 + 440 + 0.8 + 0 + 1 + 0.2 + .... + + + 2.1 + 1410 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.43 + 250 + 0 + 0 + 0 + 1 + .... + + + 1.44 + 1480 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.44 + 2220 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.27 + 3960 + 0.8 + 0 + 1 + 0.2 + .... + + + 1.15 + 760 + 0.8 + 0 + 1 + 0.2 + .... + + + + + 8 + 3160 + 0.98 + 0 + 1 + 0.02 + .... + + + 2.7 + 5370 + 0.98 + 0 + 1 + 0.02 + .... + + + 7.85 + 3910 + 0.98 + 0 + 1 + 0.02 + .... + + + + \ No newline at end of file From 068a780ebb17d05e3ae9b53ecf45192c6d494f26 Mon Sep 17 00:00:00 2001 From: Pilar Date: Thu, 11 Nov 2021 17:25:53 -0500 Subject: [PATCH 11/54] Added comnet usage library, including import factory. Some modifications on internal_gains.py and hft_internal_gains_archetypes.py were required. Also created a class to pass from daily schedules to yearly schedule. --- .../building_demand/internal_gains.py | 20 ++- data/usage/comnet_archetypes.xlsx | Bin 0 -> 299386 bytes helpers/constants.py | 13 +- helpers/yearly_from_daily_schedules.py | 44 +++++ imports/construction/us_physics_parameters.py | 1 - imports/usage/comnet_usage_parameters.py | 162 ++++++++++++++++++ .../hft_internal_gains_archetype.py | 21 ++- imports/usage/helpers/usage_helper.py | 26 +++ imports/usage/hft_usage_interface.py | 6 +- imports/usage_factory.py | 7 + 10 files changed, 289 insertions(+), 11 deletions(-) create mode 100644 data/usage/comnet_archetypes.xlsx create mode 100644 helpers/yearly_from_daily_schedules.py create mode 100644 imports/usage/comnet_usage_parameters.py diff --git a/city_model_structure/building_demand/internal_gains.py b/city_model_structure/building_demand/internal_gains.py index d2342a98..75e60cb7 100644 --- a/city_model_structure/building_demand/internal_gains.py +++ b/city_model_structure/building_demand/internal_gains.py @@ -13,11 +13,29 @@ class InternalGains: """ def __init__(self): + self._type = None self._average_internal_gain = None self._convective_fraction = None self._radiative_fraction = None self._latent_fraction = None + @property + def type(self) -> Union[None, str]: + """ + Get internal gains type + :return: None or string + """ + return self._type + + @type.setter + def type(self, value): + """ + Set internal gains type + :param value: string + """ + if value is not None: + self._type = str(value) + @property def average_internal_gain(self) -> Union[None, float]: """ @@ -30,7 +48,7 @@ class InternalGains: def average_internal_gain(self, value): """ Set internal gains average internal gain in W/m2 - :param value:float + :param value: float """ if value is not None: self._average_internal_gain = float(value) diff --git a/data/usage/comnet_archetypes.xlsx b/data/usage/comnet_archetypes.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8e04fc172f0162f8c1be9e1226508daa6cc9bf88 GIT binary patch literal 299386 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

)m`1yYhA0awHJCAtE|ZobxhQc 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­vvJ8il$%stZfv`1 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 z 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 N76`=Q1teI|{{tq@Llpo3 literal 0 HcmV?d00001 diff --git a/helpers/constants.py b/helpers/constants.py index 50a35eb7..00416177 100644 --- a/helpers/constants.py +++ b/helpers/constants.py @@ -10,6 +10,7 @@ KELVIN = 273.15 # converters HOUR_TO_MINUTES = 60 METERS_TO_FEET = 3.28084 +BTU_H_TO_WATTS = 0.29307107 # time SECOND = 'second' @@ -40,7 +41,6 @@ TEMPERATURE = 'temperature' HUMIDITY = 'humidity' CONTROL_TYPE = 'control_type' -# todo: modify code to use global constants instead of hard-coded values # surface types WALL = 'Wall' GROUND_WALL = 'Ground wall' @@ -80,7 +80,10 @@ HALL = 'hall' RESTAURANT = 'restaurant' EDUCATION = 'education' - - - - +LIGHTING = 'Lights' +OCCUPANCY = 'Occupancy' +RECEPTACLE = 'Receptacle' +HVAC_AVAILABILITY = 'HVAC Avail' +INFILTRATION = 'Infiltration' +COOLING_SET_POINT = 'ClgSetPt' +HEATING_SET_POINT = 'HtgSetPt' diff --git a/helpers/yearly_from_daily_schedules.py b/helpers/yearly_from_daily_schedules.py new file mode 100644 index 00000000..c7c3bac5 --- /dev/null +++ b/helpers/yearly_from_daily_schedules.py @@ -0,0 +1,44 @@ +""" +Yearly from daily schedules module +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" +import calendar as cal +import helpers.constants as cte +from city_model_structure.attributes.schedule import Schedule + + +class YearlyFromDailySchedules: + """ + YearlyFromDailySchedules class + """ + def __init__(self, daily_schedules, year): + self._daily_schedules = daily_schedules + self._year = year + + @property + def yearly_schedule(self) -> Schedule: + """ + Creates a yearly schedule out of a set of daily schedules + :return: Schedule + """ + yearly_schedule = Schedule() + weekly_schedules = [0, 0, 0, 0, 0, 0, 0] + day_types = dict({cte.MONDAY: 0, cte.TUESDAY: 1, cte.WEDNESDAY: 2, cte.THURSDAY: 3, + cte.FRIDAY: 4, cte.SATURDAY: 5, cte.SUNDAY: 6}) + for daily_schedule in self._daily_schedules: + for day_type in daily_schedule.day_types: + weekly_schedules[day_types[day_type]] = daily_schedule.values + + values = [] + for month in range(1, 13): + for day in range(1, cal.monthlen(self._year, month)+1): + week_day = cal.weekday(self._year, month, day) + values.extend(weekly_schedules[week_day]) + yearly_schedule.type = self._daily_schedules[0].type + yearly_schedule.data_type = self._daily_schedules[0].data_type + yearly_schedule.time_range = cte.YEAR + yearly_schedule.time_step = cte.HOUR + yearly_schedule.values = values + + return yearly_schedule diff --git a/imports/construction/us_physics_parameters.py b/imports/construction/us_physics_parameters.py index f45e0f29..50b0b8ca 100644 --- a/imports/construction/us_physics_parameters.py +++ b/imports/construction/us_physics_parameters.py @@ -31,7 +31,6 @@ class UsPhysicsParameters(NrelPhysicsInterface): # it is assumed that all buildings have the same archetypes' keys for building in city.buildings: building_type = ConstructionHelper.nrel_from_function(building.function) - print(building_type) if building_type is None: return archetype = self._search_archetype(building_type, diff --git a/imports/usage/comnet_usage_parameters.py b/imports/usage/comnet_usage_parameters.py new file mode 100644 index 00000000..5d10312c --- /dev/null +++ b/imports/usage/comnet_usage_parameters.py @@ -0,0 +1,162 @@ +""" +ComnetUsageParameters model the usage properties +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" +import sys +from typing import Dict +import pandas as pd + +import helpers.constants as cte +from helpers.configuration_helper import ConfigurationHelper as ch +from imports.geometry.helpers.geometry_helper import GeometryHelper +from imports.usage.helpers.usage_helper import UsageHelper +from city_model_structure.building_demand.usage_zone import UsageZone +from city_model_structure.building_demand.internal_gains import InternalGains +from imports.usage.data_classes.hft_usage_zone_archetype import HftUsageZoneArchetype as huza +from imports.usage.data_classes.hft_internal_gains_archetype import HftInternalGainsArchetype as higa + + +class ComnetUsageParameters: + """ + ComnetUsageParameters class + """ + def __init__(self, city, base_path): + self._city = city + self._base_path = str(base_path / 'comnet_archetypes.xlsx') + self._usage_archetypes = [] + data = self._read_file() + for item in data['lighting']: + for usage in UsageHelper.usage_to_comnet: + comnet_usage = UsageHelper.usage_to_comnet[usage] + if comnet_usage == item: + usage_archetype = self._parse_zone_usage_type(comnet_usage, data) + self._usage_archetypes.append(usage_archetype) + + def _read_file(self) -> Dict: + """ + reads xlsx file containing usage information into a dictionary + :return : Dict + """ + number_usage_types = 33 + xl_file = pd.ExcelFile(self._base_path) + file_data = pd.read_excel(xl_file, sheet_name="Modeling Data", skiprows=[0, 1, 2], + nrows=number_usage_types, usecols="A:Z") + + lighting_data = {} + plug_loads_data = {} + occupancy_data = {} + ventilation_rate = {} + water_heating = {} + process_data = {} + + for j in range(0, number_usage_types): + usage_parameters = file_data.iloc[j] + usage_type = usage_parameters[0] + lighting_data[usage_type] = usage_parameters[1:6].values.tolist() + plug_loads_data[usage_type] = usage_parameters[8:13].values.tolist() + occupancy_data[usage_type] = usage_parameters[17:20].values.tolist() + ventilation_rate[usage_type] = usage_parameters[20:21].values.tolist() + water_heating[usage_type] = usage_parameters[23:24].values.tolist() + process_data[usage_type] = usage_parameters[24:26].values.tolist() + + return {'lighting': lighting_data, + 'plug loads': plug_loads_data, + 'occupancy': occupancy_data, + 'ventilation rate': ventilation_rate, + 'water heating': water_heating, + 'process': process_data} + + @staticmethod + def _parse_zone_usage_type(usage, data): + if data['occupancy'][usage][0] <= 0: + occupancy_density = 0 + else: + occupancy_density = 1 / data['occupancy'][usage][0] + mechanical_air_change = data['ventilation rate'][usage][0] + internal_gains = [] + # lighting + latent_fraction = ch().comnet_lighting_latent + convective_fraction = ch().comnet_lighting_convective + radiative_fraction = ch().comnet_lighting_radiant + average_internal_gain = data['lighting'][usage][4] + internal_gains.append(higa(internal_gains_type=cte.LIGHTING, average_internal_gain=average_internal_gain, + convective_fraction=convective_fraction, radiative_fraction=radiative_fraction, + latent_fraction=latent_fraction)) + # occupancy + latent_fraction = data['occupancy'][usage][2] / (data['occupancy'][usage][1] + data['occupancy'][usage][2]) + sensible_fraction = float(1 - latent_fraction) + convective_fraction = sensible_fraction * ch().comnet_occupancy_sensible_convective + radiative_fraction = sensible_fraction * ch().comnet_occupancy_sensible_radiant + average_internal_gain = (data['occupancy'][usage][1] + data['occupancy'][usage][2]) \ + * occupancy_density * cte.BTU_H_TO_WATTS + internal_gains.append(higa(internal_gains_type=cte.OCCUPANCY, average_internal_gain=average_internal_gain, + convective_fraction=convective_fraction, radiative_fraction=radiative_fraction, + latent_fraction=latent_fraction)) + # plug loads + if data['plug loads'][usage][0] != 'n.a.': + latent_fraction = ch().comnet_plugs_latent + convective_fraction = ch().comnet_plugs_convective + radiative_fraction = ch().comnet_plugs_radiant + average_internal_gain = data['plug loads'][usage][0] + internal_gains.append(higa(internal_gains_type=cte.RECEPTACLE, average_internal_gain=average_internal_gain, + convective_fraction=convective_fraction, radiative_fraction=radiative_fraction, + latent_fraction=latent_fraction)) + + usage_zone_archetype = huza(usage=usage, internal_gains=internal_gains, + occupancy_density=occupancy_density, + mechanical_air_change=mechanical_air_change) + return usage_zone_archetype + + def enrich_buildings(self): + """ + Returns the city with the usage parameters assigned to the buildings + :return: + """ + city = self._city + for building in city.buildings: + usage = GeometryHelper.usage_from_function(building.function) + height = building.average_storey_height + if height is None: + raise Exception('Average storey height not defined, ACH cannot be calculated') + if height <= 0: + raise Exception('Average storey height is zero, ACH cannot be calculated') + archetype = self._search_archetype(UsageHelper.comnet_from_usage(usage)) + if archetype is None: + sys.stderr.write(f'Building {building.name} has unknown archetype for building function:' + f' {building.function}, that assigns building usage as ' + f'{GeometryHelper.usage_from_function(building.function)}\n') + continue + + # just one usage_zone + for thermal_zone in building.thermal_zones: + usage_zone = UsageZone() + usage_zone.usage = usage + self._assign_values(usage_zone, archetype, height) + usage_zone.volume = thermal_zone.volume + thermal_zone.usage_zones = [usage_zone] + + def _search_archetype(self, building_usage): + for building_archetype in self._usage_archetypes: + if building_archetype.usage == building_usage: + return building_archetype + return None + + @staticmethod + def _assign_values(usage_zone, archetype, height): + # Due to the fact that python is not a typed language, the wrong object type is assigned to + # usage_zone.internal_gains when writing usage_zone.internal_gains = archetype.internal_gains. + # Therefore, this walk around has been done. + internal_gains = [] + for archetype_internal_gain in archetype.internal_gains: + internal_gain = InternalGains() + internal_gain.type = archetype_internal_gain.type + internal_gain.average_internal_gain = archetype_internal_gain.average_internal_gain * cte.METERS_TO_FEET**2 + internal_gain.convective_fraction = archetype_internal_gain.convective_fraction + internal_gain.radiative_fraction = archetype_internal_gain.radiative_fraction + internal_gain.latent_fraction = archetype_internal_gain.latent_fraction + internal_gains.append(internal_gain) + usage_zone.internal_gains = internal_gains + usage_zone.occupancy_density = archetype.occupancy_density * cte.METERS_TO_FEET**2 + usage_zone.mechanical_air_change = archetype.mechanical_air_change * usage_zone.occupancy_density \ + * cte.HOUR_TO_MINUTES / cte.METERS_TO_FEET**3 / height diff --git a/imports/usage/data_classes/hft_internal_gains_archetype.py b/imports/usage/data_classes/hft_internal_gains_archetype.py index c9de13b0..cc21a77a 100644 --- a/imports/usage/data_classes/hft_internal_gains_archetype.py +++ b/imports/usage/data_classes/hft_internal_gains_archetype.py @@ -9,13 +9,30 @@ class HftInternalGainsArchetype: """ HftInternalGainsArchetype class """ - def __init__(self, average_internal_gain=None, convective_fraction=None, radiative_fraction=None, - latent_fraction=None): + def __init__(self, internal_gains_type=None, average_internal_gain=None, convective_fraction=None, \ + radiative_fraction=None, latent_fraction=None): + self._type = internal_gains_type self._average_internal_gain = average_internal_gain self._convective_fraction = convective_fraction self._radiative_fraction = radiative_fraction self._latent_fraction = latent_fraction + @property + def type(self): + """ + Get internal gains type + :return: string + """ + return self._type + + @type.setter + def type(self, value): + """ + Set internal gains type + :param value: string + """ + self._type = value + @property def average_internal_gain(self): """ diff --git a/imports/usage/helpers/usage_helper.py b/imports/usage/helpers/usage_helper.py index b46b08d3..310b4888 100644 --- a/imports/usage/helpers/usage_helper.py +++ b/imports/usage/helpers/usage_helper.py @@ -36,3 +36,29 @@ class UsageHelper: except KeyError: sys.stderr.write('Error: keyword not found. Returned default HfT usage "residential"\n') return UsageHelper.hft_default_value + + usage_to_comnet = { + cte.RESIDENTIAL: 'BA Multifamily', + cte.INDUSTRY: 'BA Manufacturing Facility', + cte.OFFICE_ADMINISTRATION: 'BA Office', + cte.HOTEL: 'BA Hotel', + cte.HEALTH_CARE: 'BA Hospital', + cte.RETAIL: 'BA Retail', + cte.HALL: 'BA Town Hall', + cte.RESTAURANT: 'BA Dining: Bar Lounge/Leisure', + cte.EDUCATION: 'BA School/University' + } + comnet_default_value = 'BA Multifamily' + + @staticmethod + def comnet_from_usage(usage): + """ + Get Comnet usage from the given internal usage key + :param usage: str + :return: str + """ + try: + return UsageHelper.usage_to_comnet[usage] + except KeyError: + sys.stderr.write('Error: keyword not found. Returned default Comnet usage "BA Multifamily"\n') + return UsageHelper.comnet_default_value diff --git a/imports/usage/hft_usage_interface.py b/imports/usage/hft_usage_interface.py index b6223295..3da6457d 100644 --- a/imports/usage/hft_usage_interface.py +++ b/imports/usage/hft_usage_interface.py @@ -68,7 +68,8 @@ class HftUsageInterface: average_internal_gain = 0 radiative_fraction = 0 - internal_gains.append(higa(average_internal_gain, convective_fraction, radiative_fraction, latent_fraction)) + internal_gains.append(higa(average_internal_gain=average_internal_gain, convective_fraction=convective_fraction, + radiative_fraction=radiative_fraction, latent_fraction=latent_fraction)) usage_zone_archetype = huza(usage=usage, internal_gains=internal_gains, heating_set_point=heating_setpoint, heating_set_back=heating_setback, cooling_set_point=cooling_setpoint, occupancy_density=occupancy_density, hours_day=hours_day, days_year=days_year, @@ -130,7 +131,8 @@ class HftUsageInterface: average_internal_gain = usage_zone_variant['schedules']['internGains']['averageInternGainPerSqm'] if 'radiantFraction' in usage_zone_variant['schedules']['internGains']: radiative_fraction = usage_zone_variant['schedules']['internGains']['radiantFraction'] - internal_gains.append(higa(average_internal_gain, convective_fraction, radiative_fraction, latent_fraction)) + internal_gains.append(higa(average_internal_gain=average_internal_gain, convective_fraction=convective_fraction, + radiative_fraction=radiative_fraction, latent_fraction=latent_fraction)) usage_zone_archetype = huza(usage=usage, internal_gains=internal_gains, heating_set_point=heating_setpoint, heating_set_back=heating_setback, cooling_set_point=cooling_setpoint, occupancy_density=occupancy_density, hours_day=hours_day, days_year=days_year, diff --git a/imports/usage_factory.py b/imports/usage_factory.py index a886c197..0e2875de 100644 --- a/imports/usage_factory.py +++ b/imports/usage_factory.py @@ -8,6 +8,7 @@ Contributors Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca from pathlib import Path from imports.usage.hft_usage_parameters import HftUsageParameters from imports.usage.ca_usage_parameters import CaUsageParameters +from imports.usage.comnet_usage_parameters import ComnetUsageParameters # todo: handle missing lambda and rise error. @@ -38,6 +39,12 @@ class UsageFactory: """ return CaUsageParameters(self._city, self._base_path).enrich_buildings() + def _comnet(self): + """ + Enrich the city with COMNET usage library + """ + return ComnetUsageParameters(self._city, self._base_path).enrich_buildings() + def enrich(self): """ Enrich the city given to the class using the usage factory given handler From da17cd5d823066730ded676885f669df74374abc Mon Sep 17 00:00:00 2001 From: Pilar Date: Thu, 11 Nov 2021 17:27:19 -0500 Subject: [PATCH 12/54] Changed hard-coded values to constant values --- imports/schedules/helpers/schedules_helper.py | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/imports/schedules/helpers/schedules_helper.py b/imports/schedules/helpers/schedules_helper.py index a36c2fa6..fa47b343 100644 --- a/imports/schedules/helpers/schedules_helper.py +++ b/imports/schedules/helpers/schedules_helper.py @@ -33,28 +33,26 @@ class SchedulesHelper: # usage function_to_usage = { - 'full service restaurant': 'restaurant', + 'full service restaurant': cte.RESTAURANT, 'high-rise apartment': cte.RESIDENTIAL, - 'hospital': 'health care', - 'large hotel': 'hotel', - 'large office': 'office and administration', - 'medium office': 'office and administration', + 'hospital': cte.HEALTH_CARE, + 'large hotel': cte.HOTEL, + 'large office': cte.OFFICE_ADMINISTRATION, + 'medium office': cte.OFFICE_ADMINISTRATION, 'midrise apartment': cte.RESIDENTIAL, - 'outpatient healthcare': 'health care', - 'primary school': 'education', - 'quick service restaurant': 'restaurant', - 'secondary school': 'education', - 'small hotel': 'hotel', - 'small office': 'office and administration', - 'stand-alone-retail': 'retail', - 'strip mall': 'hall', - 'supermarket': 'retail', - 'warehouse': 'industry', + 'outpatient healthcare': cte.HEALTH_CARE, + 'primary school': cte.EDUCATION, + 'quick service restaurant': cte.RESTAURANT, + 'secondary school': cte.EDUCATION, + 'small hotel': cte.HOTEL, + 'small office': cte.OFFICE_ADMINISTRATION, + 'stand-alone-retail': cte.RETAIL, + 'strip mall': cte.HALL, + 'supermarket': cte.RETAIL, + 'warehouse': cte.INDUSTRY, 'residential': cte.RESIDENTIAL } - - @staticmethod def comnet_from_usage(usage): """ From 61e5e95c0c403eff87e715a343f2443abfa92e80 Mon Sep 17 00:00:00 2001 From: Pilar Date: Thu, 11 Nov 2021 17:28:28 -0500 Subject: [PATCH 13/54] Added new values to configuration.ini for comnet usage --- config/configuration.ini | 8 ++++ helpers/configuration_helper.py | 66 +++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/config/configuration.ini b/config/configuration.ini index 394c1c61..b2ddfb04 100644 --- a/config/configuration.ini +++ b/config/configuration.ini @@ -3,3 +3,11 @@ max_location_distance_for_shared_walls = 5.0 min_coordinate = -1.7976931348623157e+308 max_coordinate = 1.7976931348623157e+308 +comnet_lighting_latent = 0 +comnet_lighting_convective = 0.5 +comnet_lighting_radiant = 0.5 +comnet_occupancy_sensible_convective = 0.9 +comnet_occupancy_sensible_radiant = 0.1 +comnet_plugs_latent = 0 +comnet_plugs_convective = 0.75 +comnet_plugs_radiant = 0.25 diff --git a/helpers/configuration_helper.py b/helpers/configuration_helper.py index de99f24a..85677ceb 100644 --- a/helpers/configuration_helper.py +++ b/helpers/configuration_helper.py @@ -39,3 +39,69 @@ class ConfigurationHelper: :return: 1.7976931348623157e+308 """ return self._config.getfloat('buildings', 'max_coordinate').real + + @property + def comnet_lighting_latent(self) -> float: + """ + Get configured latent ratio of internal gains do to lighting used for Comnet (ASHRAE) standard + :return: 0 + """ + return self._config.getfloat('buildings', 'comnet_lighting_latent').real + + @property + def comnet_lighting_convective(self) -> float: + """ + Get configured convective ratio of internal gains do to lighting used for Comnet (ASHRAE) standard + :return: 0.5 + """ + return self._config.getfloat('buildings', 'comnet_lighting_convective').real + + @property + def comnet_lighting_radiant(self) -> float: + """ + Get configured radiant ratio of internal gains do to lighting used for Comnet (ASHRAE) standard + :return: 0.5 + """ + return self._config.getfloat('buildings', 'comnet_lighting_radiant').real + + @property + def comnet_plugs_latent(self) -> float: + """ + Get configured latent ratio of internal gains do to electrical appliances used for Comnet (ASHRAE) standard + :return: 0 + """ + return self._config.getfloat('buildings', 'comnet_plugs_latent').real + + @property + def comnet_plugs_convective(self) -> float: + """ + Get configured convective ratio of internal gains do to electrical appliances used for Comnet (ASHRAE) standard + :return: 0.75 + """ + return self._config.getfloat('buildings', 'comnet_plugs_convective').real + + @property + def comnet_plugs_radiant(self) -> float: + """ + Get configured radiant ratio of internal gains do to electrical appliances used for Comnet (ASHRAE) standard + :return: 0.25 + """ + return self._config.getfloat('buildings', 'comnet_plugs_radiant').real + + @property + def comnet_occupancy_sensible_convective(self) -> float: + """ + Get configured convective ratio of the sensible part of internal gains do to occupancy + used for Comnet (ASHRAE) standard + :return: 0.9 + """ + return self._config.getfloat('buildings', 'comnet_occupancy_sensible_convective').real + + @property + def comnet_occupancy_sensible_radiant(self) -> float: + """ + Get configured radiant ratio of the sensible part of internal gains do to occupancy + used for Comnet (ASHRAE) standard + :return: 0.1 + """ + return self._config.getfloat('buildings', 'comnet_occupancy_sensible_radiant').real From cc56c19aa0d3c48d951a7e411b394b67110f334d Mon Sep 17 00:00:00 2001 From: atiya Date: Sat, 13 Nov 2021 00:55:04 -0500 Subject: [PATCH 14/54] added Machine and Vehicle classes to Life Cycle Assessment --- city_model_structure/machine.py | 78 +++++++++++++++++++ city_model_structure/vehicle.py | 61 +++++++++++++++ .../lca_fuel.py | 2 +- imports/life_cycle_assessment/lca_machine.py | 26 +++++++ imports/life_cycle_assessment/lca_vehicle.py | 25 ++++++ ...ry.py => life_cycle_assessment_factory.py} | 20 ++++- .../test_life_cycle_assessment_factory.py | 50 ++++++++++++ 7 files changed, 258 insertions(+), 4 deletions(-) create mode 100644 city_model_structure/machine.py create mode 100644 city_model_structure/vehicle.py rename imports/{life_cicle_analize => life_cycle_assessment}/lca_fuel.py (93%) create mode 100644 imports/life_cycle_assessment/lca_machine.py create mode 100644 imports/life_cycle_assessment/lca_vehicle.py rename imports/{life_cicle_analyze_factory.py => life_cycle_assessment_factory.py} (56%) create mode 100644 unittests/test_life_cycle_assessment_factory.py diff --git a/city_model_structure/machine.py b/city_model_structure/machine.py new file mode 100644 index 00000000..5c25fc71 --- /dev/null +++ b/city_model_structure/machine.py @@ -0,0 +1,78 @@ +""" +LifeCycleAssessment retrieve the specific Life Cycle Assessment module for the given region +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Atiya +""" + +class Machine: + """ + Machine class + """ + + def __init__(self, machine_id, name, work_efficiency, work_efficiency_unit, energy_consumption_rate, energy_consumption_unit, + carbon_emission_factor, carbon_emission_unit): + self._machine_id = machine_id + self._name = name + self._work_efficiency = work_efficiency + self._work_efficiency_unit = work_efficiency_unit + self._energy_consumption_rate = energy_consumption_rate + self._energy_consumption_unit = energy_consumption_unit + self._carbon_emission_factor = carbon_emission_factor + self._carbon_emission_unit = carbon_emission_unit + + @property + def id(self): + """ + Get machine id + """ + return self._machine_id + + @property + def name(self): + """ + Get machine name + """ + return self._name + + @property + def work_efficiency(self): + """ + Get machine work efficiency + """ + return self._work_efficiency + + @property + def work_efficiency_unit(self): + """ + Get machine work efficiency unit + """ + return self._work_efficiency_unit + + @property + def energy_consumption_rate(self): + """ + Get energy consumption rate + """ + return self._energy_consumption_rate + + @property + def energy_consumption_unit(self): + """ + Get energy consumption unit + """ + return self._energy_consumption_unit + + @property + def carbon_emission_factor(self): + """ + Get carbon emission factor + """ + return self._carbon_emission_factor + + @property + def carbon_emission_unit(self): + """ + Get carbon emission unit + """ + return self._carbon_emission_unit + diff --git a/city_model_structure/vehicle.py b/city_model_structure/vehicle.py new file mode 100644 index 00000000..95aff94a --- /dev/null +++ b/city_model_structure/vehicle.py @@ -0,0 +1,61 @@ +""" +LifeCycleAssessment retrieve the specific Life Cycle Assessment module for the given region +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Atiya +""" + +class Vehicle: + """ + Vehicle class + """ + + def __init__(self, vehicle_id, name, fuel_consumption_rate, fuel_consumption_unit, carbon_emission_factor, carbon_emission_factor_unit): + self._vehicle_id = vehicle_id + self._name = name + self._fuel_consumption_rate = fuel_consumption_rate + self._fuel_consumption_unit = fuel_consumption_unit + self._carbon_emission_factor = carbon_emission_factor + self._carbon_emission_factor_unit = carbon_emission_factor_unit + + @property + def id(self): + """ + Get vehicle id + """ + return self._vehicle_id + + @property + def name(self): + """ + Get vehicle name + """ + return self._name + + @property + def fuel_consumption_rate(self): + """ + Get vehicle fuel consumption rate + """ + return self._fuel_consumption_rate + + @property + def fuel_consumption_unit(self): + """ + Get fuel consumption unit + """ + return self._fuel_consumption_unit + + @property + def carbon_emission_factor(self): + """ + Get vehicle carbon emission factor + """ + return self._carbon_emission_factor + + @property + def carbon_emission_unit(self): + """ + Get carbon emission units + """ + return self._carbon_emission_unit + diff --git a/imports/life_cicle_analize/lca_fuel.py b/imports/life_cycle_assessment/lca_fuel.py similarity index 93% rename from imports/life_cicle_analize/lca_fuel.py rename to imports/life_cycle_assessment/lca_fuel.py index c35e0749..2ffbcb37 100644 --- a/imports/life_cicle_analize/lca_fuel.py +++ b/imports/life_cycle_assessment/lca_fuel.py @@ -19,6 +19,6 @@ class LcaFuel: with open(path) as xml: self._lca = xmltodict.parse(xml.read()) - for fuel in self._lca["library"]["Fuels"]['fuel']: + for fuel in self._lca["library"]["fuels"]['fuel']: self._city.fuels.append(Fuel(fuel['@id'], fuel['@name'], fuel['carbon_emission_factor']['#text'], fuel['carbon_emission_factor']['@unit'])) diff --git a/imports/life_cycle_assessment/lca_machine.py b/imports/life_cycle_assessment/lca_machine.py new file mode 100644 index 00000000..ae90c03c --- /dev/null +++ b/imports/life_cycle_assessment/lca_machine.py @@ -0,0 +1,26 @@ +""" +CityGml module parses citygml_classes files and import the geometry into the city model structure +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Atiya +""" +import xmltodict +from pathlib import Path +from city_model_structure.machine import Machine + +class LcaMachine: + def __init__(self, city, base_path): + self._city = city + self._base_path = base_path + self._lca = None + + def enrich(self): + self._city.machines = [] + path = Path(self._base_path / 'lca_data.xml').resolve() + + with open(path) as xml: + self._lca = xmltodict.parse(xml.read()) + for machine in self._lca["library"]["machines"]['machine']: + self._city.machines.append(Machine(machine['@id'], machine['@name'], machine['work_efficiency']['#text'], + machine['work_efficiency']['@unit'], machine['energy_consumption_rate']['#text'], + machine['energy_consumption_rate']['@unit'], machine['carbon_emission_factor']['#text'], + machine['carbon_emission_factor']['@unit'])) diff --git a/imports/life_cycle_assessment/lca_vehicle.py b/imports/life_cycle_assessment/lca_vehicle.py new file mode 100644 index 00000000..79da498f --- /dev/null +++ b/imports/life_cycle_assessment/lca_vehicle.py @@ -0,0 +1,25 @@ +""" +CityGml module parses citygml_classes files and import the geometry into the city model structure +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Atiya +""" +import xmltodict +from pathlib import Path +from city_model_structure.vehicle import Vehicle + +class LcaVehicle: + def __init__(self, city, base_path): + self._city = city + self._base_path = base_path + self._lca = None + + def enrich(self): + self._city.vehicles = [] + path = Path(self._base_path / 'lca_data.xml').resolve() + + with open(path) as xml: + self._lca = xmltodict.parse(xml.read()) + for vehicle in self._lca["library"]["vehicles"]['vehicle']: + self._city.vehicles.append(Vehicle(vehicle['@id'], vehicle['@name'], vehicle['fuel_consumption_rate']['#text'], + vehicle['fuel_consumption_rate']['@unit'], vehicle['carbon_emission_factor']['#text'], + vehicle['carbon_emission_factor']['@unit'])) diff --git a/imports/life_cicle_analyze_factory.py b/imports/life_cycle_assessment_factory.py similarity index 56% rename from imports/life_cicle_analyze_factory.py rename to imports/life_cycle_assessment_factory.py index 7a09097a..3aff1fe4 100644 --- a/imports/life_cicle_analyze_factory.py +++ b/imports/life_cycle_assessment_factory.py @@ -5,16 +5,18 @@ Copyright © 2020 Project Author Atiya """ from pathlib import Path -from imports.life_cicle_analize.lca_fuel import LcaFuel +from imports.life_cycle_assessment.lca_fuel import LcaFuel +from imports.life_cycle_assessment.lca_vehicle import LcaVehicle +from imports.life_cycle_assessment.lca_machine import LcaMachine -class LifeCicleAnalizeFactory: +class LifeCycleAssessment: """ Life cicle analize factory class """ def __init__(self, handler, city, base_path=None): if base_path is None: - base_path = Path(Path(__file__).parent.parent / 'data/construction') + base_path = Path(Path(__file__).parent.parent / 'data/life_cycle_assessment') self._handler = '_' + handler.lower().replace(' ', '_') self._city = city self._base_path = base_path @@ -25,6 +27,18 @@ class LifeCicleAnalizeFactory: """ LcaFuel(self._city, self._base_path).enrich() + def _vehicle(self): + """ + Enrich the city by adding the vehicle carbon information + """ + LcaVehicle(self._city, self._base_path).enrich() + + def _machine(self): + """ + Enrich the city by adding the machine carbon information + """ + LcaMachine(self._city, self._base_path).enrich() + def enrich(self): """ Enrich the city given to the class using the class given handler diff --git a/unittests/test_life_cycle_assessment_factory.py b/unittests/test_life_cycle_assessment_factory.py new file mode 100644 index 00000000..32e3453e --- /dev/null +++ b/unittests/test_life_cycle_assessment_factory.py @@ -0,0 +1,50 @@ +""" +Building test +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Guille Gutierrez Morote Guillermo.GutierrezMorote@concordia.ca +""" +from pathlib import Path +from unittest import TestCase +from imports.geometry_factory import GeometryFactory +from imports.life_cycle_assessment_factory import LifeCycleAssessment + + +class TestLifeCycleAssessment(TestCase): + """ + TestBuilding TestCase 1 + """ + def setUp(self) -> None: + """ + Test setup + :return: None + """ + self._city_gml = None + self._example_path = (Path(__file__).parent / 'tests_data').resolve() + + def test_fuel(self): + city_file = "../unittests/tests_data/C40_Final.gml" + city = GeometryFactory('citygml', city_file).city + LifeCycleAssessment('fuel', city).enrich() + for fuel in city.fuels: + # print(fuel.name) + self.assertTrue(len(city.fuels) > 0) + + def test_vehicle(self): + city_file = "../unittests/tests_data/C40_Final.gml" + city = GeometryFactory('citygml', city_file).city + LifeCycleAssessment('vehicle', city).enrich() + for vehicle in city.vehicles: + # print(vehicle.name) + self.assertTrue(len(city.vehicles) > 0) + + def test_machine(self): + city_file = "../unittests/tests_data/C40_Final.gml" + city = GeometryFactory('citygml', city_file).city + LifeCycleAssessment('machine', city).enrich() + for machine in city.machines: + # print(machine.name) + self.assertTrue(len(city.machines) > 0) + + + + From d76ea58b74b011642fed34e336a28d82eebd5234 Mon Sep 17 00:00:00 2001 From: atiya Date: Mon, 15 Nov 2021 08:24:03 -0500 Subject: [PATCH 15/54] Added LCA formulas --- city_model_structure/lca_calculations.py | 23 ++++ city_model_structure/material.py | 118 ++++++++++++++++++ imports/life_cycle_assessment_factory.py | 7 ++ .../test_life_cycle_assessment_factory.py | 8 ++ 4 files changed, 156 insertions(+) create mode 100644 city_model_structure/lca_calculations.py create mode 100644 city_model_structure/material.py diff --git a/city_model_structure/lca_calculations.py b/city_model_structure/lca_calculations.py new file mode 100644 index 00000000..032edcd6 --- /dev/null +++ b/city_model_structure/lca_calculations.py @@ -0,0 +1,23 @@ +""" +LifeCycleAssessment retrieve the specific Life Cycle Assessment module for the given region +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Atiya +""" +from city_model_structure.machine import Machine + +class LcaCalculations: + """ + LCA Calculations class + """ + + def __init__(self): + print("lca calculations class") + + def emission_disposal_machines(self, ): + return Machine.work_efficiency * Machine.energy_consumption_rate * Machine.carbon_emission_factor + + def emission_transportation(self, weight, distance ): + return weight * distance * Machine.energy_consumption_rate * Machine.carbon_emission_factor + + + diff --git a/city_model_structure/material.py b/city_model_structure/material.py new file mode 100644 index 00000000..d0ef2c53 --- /dev/null +++ b/city_model_structure/material.py @@ -0,0 +1,118 @@ +""" +LifeCycleAssessment retrieve the specific Life Cycle Assessment module for the given region +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Atiya +""" + +class Material: + """ + LCA Material class + """ + + def __init__(self, material_name, material_id, type, density, density_unit, embodied_carbon, embodied_carbon_unit, recycling_ratio, + onsite_recycling_ratio, company_recycling_ratio, landfilling_ratio, cost, cost_unit): + self._material_name = material_name + self._material_id = material_id + self._type = type + self._density = density + self._density_unit = density_unit + self._embodied_carbon = embodied_carbon + self._embodied_carbon_unit = embodied_carbon_unit + self._recycling_ratio = recycling_ratio + self._onsite_recycling_ratio = onsite_recycling_ratio + self._company_recycling_ratio = company_recycling_ratio + self._landfilling_ratio = landfilling_ratio + self._cost = cost + self._cost_unit = cost_unit + + @property + def material_name(self): + """ + Get material name + """ + return self._material_name + + @property + def id(self): + """ + Get material id + """ + return self._material_id + + @property + def type(self): + """ + Get material type + """ + return self._type + + @property + def density(self): + """ + Get material density + """ + return self._density + + @property + def density_unit(self): + """ + Get material density unit + """ + return self._density_unit + + @property + def embodied_carbon(self): + """ + Get material embodied carbon + """ + return self._embodied_carbon + + @property + def embodied_carbon_unit(self): + """ + Get material embodied carbon unit + """ + return self._embodied_carbon_unit + + @property + def recycling_ratio(self): + """ + Get material recycling ratio + """ + return self._recycling_ratio + + @property + def onsite_recycling_ratio(self): + """ + Get material onsite recycling ratio + """ + return self._onsite_recycling_ratio + + @property + def company_recycling_ratio(self): + """ + Get material company recycling ratio + """ + return self._company_recycling_ratio + + @property + def landfilling_ratio(self): + """ + Get material landfilling ratio + """ + return self._landfilling_ratio + + @property + def cost(self): + """ + Get material cost + """ + return self._cost + + @property + def cost_unit(self): + """ + Get material cost unit + """ + return self._cost_unit + diff --git a/imports/life_cycle_assessment_factory.py b/imports/life_cycle_assessment_factory.py index 3aff1fe4..cb99b981 100644 --- a/imports/life_cycle_assessment_factory.py +++ b/imports/life_cycle_assessment_factory.py @@ -8,6 +8,7 @@ from pathlib import Path from imports.life_cycle_assessment.lca_fuel import LcaFuel from imports.life_cycle_assessment.lca_vehicle import LcaVehicle from imports.life_cycle_assessment.lca_machine import LcaMachine +from imports.life_cycle_assessment.lca_material import LcaMaterial class LifeCycleAssessment: @@ -39,6 +40,12 @@ class LifeCycleAssessment: """ LcaMachine(self._city, self._base_path).enrich() + def _material(self): + """ + Enrich the city by adding the material carbon information + """ + LcaMaterial(self._city, self._base_path).enrich() + def enrich(self): """ Enrich the city given to the class using the class given handler diff --git a/unittests/test_life_cycle_assessment_factory.py b/unittests/test_life_cycle_assessment_factory.py index 32e3453e..3245d56b 100644 --- a/unittests/test_life_cycle_assessment_factory.py +++ b/unittests/test_life_cycle_assessment_factory.py @@ -45,6 +45,14 @@ class TestLifeCycleAssessment(TestCase): # print(machine.name) self.assertTrue(len(city.machines) > 0) + def test_material(self): + city_file = "../unittests/tests_data/C40_Final.gml" + city = GeometryFactory('citygml', city_file).city + LifeCycleAssessment('material', city).enrich() + for material in city.materials: + print(material.material_name) + self.assertTrue(len(city.materials) > 0) + From 155daa47b7e713d14cf85b5dfcbf0ba8adf5e5d8 Mon Sep 17 00:00:00 2001 From: guille Date: Tue, 16 Nov 2021 07:37:27 -0500 Subject: [PATCH 16/54] Correct merge mistake --- city_model_structure/energy_system.py | 18 ++++++++++++++++++ .../xlsx_heat_pump_parameters.py | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/city_model_structure/energy_system.py b/city_model_structure/energy_system.py index f648001a..ce4d0c14 100644 --- a/city_model_structure/energy_system.py +++ b/city_model_structure/energy_system.py @@ -2,6 +2,7 @@ EnergySystem module SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2021 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Contributor Peter Yefi peteryefi@gmail.com """ from city_model_structure.city_object import CityObject @@ -15,8 +16,25 @@ class EnergySystem(CityObject): def __init__(self, name, lod, surfaces, city_lower_corner): super().__init__(name, lod, surfaces, city_lower_corner) self._heat_pump = None + self._type = 'energy_system' @property def heat_pump(self) -> HeatPump: return self._heat_pump + @heat_pump.setter + def heat_pump(self, value): + """ + Set heat pump for energy system + :param value: HeatPump + """ + if self._heat_pump is None: + self._heat_pump = value + + @property + def type(self) -> str: + """ + Type of city object + :return: str + """ + return self._type diff --git a/imports/energy_systems/xlsx_heat_pump_parameters.py b/imports/energy_systems/xlsx_heat_pump_parameters.py index b1b96e70..d148d010 100644 --- a/imports/energy_systems/xlsx_heat_pump_parameters.py +++ b/imports/energy_systems/xlsx_heat_pump_parameters.py @@ -22,7 +22,7 @@ class XlsxHeatPumpParameters: def __init__(self, city, base_path): self._city = city - self._base_path = (base_path / 'heat_pumps/Air source.xlsx') + self._base_path = (base_path / 'heat_pumps/Air Source.xlsx') def _read_file(self) -> Dict: """ From a692f9c22a933f62149bf506ca704d16a946360d Mon Sep 17 00:00:00 2001 From: guille Date: Tue, 16 Nov 2021 07:57:47 -0500 Subject: [PATCH 17/54] Test driven partial corrections --- .../lca_data.xml | 0 imports/geometry/obj.py | 4 ++-- imports/life_cycle_assessment/lca_fuel.py | 2 +- imports/life_cycle_assessment/lca_machine.py | 2 +- imports/life_cycle_assessment/lca_vehicle.py | 2 +- imports/life_cycle_assessment_factory.py | 2 +- unittests/test_exports.py | 2 +- unittests/test_usage_factory.py | 5 +++-- 8 files changed, 10 insertions(+), 9 deletions(-) rename data/{life_cicle_analize => life_cycle_assessment}/lca_data.xml (100%) diff --git a/data/life_cicle_analize/lca_data.xml b/data/life_cycle_assessment/lca_data.xml similarity index 100% rename from data/life_cicle_analize/lca_data.xml rename to data/life_cycle_assessment/lca_data.xml diff --git a/imports/geometry/obj.py b/imports/geometry/obj.py index 5c7fdd5b..6349921b 100644 --- a/imports/geometry/obj.py +++ b/imports/geometry/obj.py @@ -21,8 +21,8 @@ class Obj: with open(path, 'r') as file: self._scene = trimesh.exchange.load.load(file, file_type='obj', force='scene') self._corners = self._scene.bounds_corners - _bound_corner_min = [] - _bound_corner_max = [] + _bound_corner_min = None + _bound_corner_max = None for corner in self._corners: if _bound_corner_min is None: _bound_corner_min = corner diff --git a/imports/life_cycle_assessment/lca_fuel.py b/imports/life_cycle_assessment/lca_fuel.py index 2ffbcb37..c35e0749 100644 --- a/imports/life_cycle_assessment/lca_fuel.py +++ b/imports/life_cycle_assessment/lca_fuel.py @@ -19,6 +19,6 @@ class LcaFuel: with open(path) as xml: self._lca = xmltodict.parse(xml.read()) - for fuel in self._lca["library"]["fuels"]['fuel']: + for fuel in self._lca["library"]["Fuels"]['fuel']: self._city.fuels.append(Fuel(fuel['@id'], fuel['@name'], fuel['carbon_emission_factor']['#text'], fuel['carbon_emission_factor']['@unit'])) diff --git a/imports/life_cycle_assessment/lca_machine.py b/imports/life_cycle_assessment/lca_machine.py index ae90c03c..0ecae0c8 100644 --- a/imports/life_cycle_assessment/lca_machine.py +++ b/imports/life_cycle_assessment/lca_machine.py @@ -19,7 +19,7 @@ class LcaMachine: with open(path) as xml: self._lca = xmltodict.parse(xml.read()) - for machine in self._lca["library"]["machines"]['machine']: + for machine in self._lca["library"]["Machines"]['machine']: self._city.machines.append(Machine(machine['@id'], machine['@name'], machine['work_efficiency']['#text'], machine['work_efficiency']['@unit'], machine['energy_consumption_rate']['#text'], machine['energy_consumption_rate']['@unit'], machine['carbon_emission_factor']['#text'], diff --git a/imports/life_cycle_assessment/lca_vehicle.py b/imports/life_cycle_assessment/lca_vehicle.py index 79da498f..55cef922 100644 --- a/imports/life_cycle_assessment/lca_vehicle.py +++ b/imports/life_cycle_assessment/lca_vehicle.py @@ -19,7 +19,7 @@ class LcaVehicle: with open(path) as xml: self._lca = xmltodict.parse(xml.read()) - for vehicle in self._lca["library"]["vehicles"]['vehicle']: + for vehicle in self._lca["library"]["Vehicles"]['vehicle']: self._city.vehicles.append(Vehicle(vehicle['@id'], vehicle['@name'], vehicle['fuel_consumption_rate']['#text'], vehicle['fuel_consumption_rate']['@unit'], vehicle['carbon_emission_factor']['#text'], vehicle['carbon_emission_factor']['@unit'])) diff --git a/imports/life_cycle_assessment_factory.py b/imports/life_cycle_assessment_factory.py index cb99b981..66e1f609 100644 --- a/imports/life_cycle_assessment_factory.py +++ b/imports/life_cycle_assessment_factory.py @@ -8,7 +8,7 @@ from pathlib import Path from imports.life_cycle_assessment.lca_fuel import LcaFuel from imports.life_cycle_assessment.lca_vehicle import LcaVehicle from imports.life_cycle_assessment.lca_machine import LcaMachine -from imports.life_cycle_assessment.lca_material import LcaMaterial +# from imports.life_cycle_assessment.lca_material import LcaMaterial class LifeCycleAssessment: diff --git a/unittests/test_exports.py b/unittests/test_exports.py index 5b25b4e1..b4c38be1 100644 --- a/unittests/test_exports.py +++ b/unittests/test_exports.py @@ -45,7 +45,7 @@ class TestExports(TestCase): else: file_path = (self._example_path / 'one_building_in_kelowna.gml').resolve() self._complete_city = self._get_citygml(file_path) - ConstructionFactory('ca', self._complete_city).enrich() + ConstructionFactory('nrel', self._complete_city).enrich() UsageFactory('ca', self._complete_city).enrich() SchedulesFactory('comnet', self._complete_city).enrich() cli = 'C:\\Users\\Pilar\\PycharmProjects\\monthlyenergybalance\\tests_data\\weather\\inseldb_Summerland.cli' diff --git a/unittests/test_usage_factory.py b/unittests/test_usage_factory.py index 82c692a1..7281f86d 100644 --- a/unittests/test_usage_factory.py +++ b/unittests/test_usage_factory.py @@ -9,6 +9,7 @@ from unittest import TestCase from imports.geometry_factory import GeometryFactory from imports.usage_factory import UsageFactory from imports.geometry.helpers.geometry_helper import GeometryHelper +from imports.construction_factory import ConstructionFactory class TestUsageFactory(TestCase): @@ -38,7 +39,7 @@ class TestUsageFactory(TestCase): city = self._get_citygml(file) for building in city.buildings: building.function = GeometryHelper.pluto_to_function[building.function] - + ConstructionFactory('nrel', city).enrich() UsageFactory('hft', city).enrich() for building in city.buildings: self.assertIsNot(len(building.usage_zones), 0, 'no building usage_zones defined') @@ -61,7 +62,7 @@ class TestUsageFactory(TestCase): # case 2: CA file = 'one_building_in_kelowna.gml' city = self._get_citygml(file) - + ConstructionFactory('nrel', city).enrich() UsageFactory('ca', city).enrich() for building in city.buildings: self.assertIsNot(len(building.usage_zones), 0, 'no building usage_zones defined') From 179efbc4fbfc93f8a39556556849127c76237041 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Thu, 9 Dec 2021 09:01:06 +0000 Subject: [PATCH 18/54] Excluded pycache from git files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ca8768ed..0767a50d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /development_tests/ /data/energy_systems/heat_pumps/*.csv /data/energy_systems/heat_pumps/*.insel +unittests/__pycache__ From 02882f5e1ca560cecb976715d1f5cb0a1bbf3bba Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 15 Dec 2021 09:19:10 +0000 Subject: [PATCH 19/54] Added water to water heat pump --- city_model_structure/energy_system.py | 39 +++- .../energy_systems/air_source_hp.py | 190 ++++++++++++++++++ .../energy_systems/heat_pump.py | 190 ------------------ .../energy_systems/water_to_water_hp.py | 0 .../energy_systems/heat_pumps/Air Source.xlsx | Bin 105875 -> 0 bytes ...ameters.py => air_source_hp_parameters.py} | 28 +-- .../water_to_water_hp_parameters.py | 0 ...y => test_energy_systems_air_source_hp.py} | 14 +- .../test_energy_systems_water_to_water_hp.py | 0 9 files changed, 241 insertions(+), 220 deletions(-) create mode 100644 city_model_structure/energy_systems/air_source_hp.py create mode 100644 city_model_structure/energy_systems/water_to_water_hp.py delete mode 100644 data/energy_systems/heat_pumps/Air Source.xlsx rename imports/energy_systems/{xlsx_heat_pump_parameters.py => air_source_hp_parameters.py} (89%) create mode 100644 imports/energy_systems/water_to_water_hp_parameters.py rename unittests/{test_energy_systems_factory.py => test_energy_systems_air_source_hp.py} (78%) create mode 100644 unittests/test_energy_systems_water_to_water_hp.py diff --git a/city_model_structure/energy_system.py b/city_model_structure/energy_system.py index 04ab3681..f1815bac 100644 --- a/city_model_structure/energy_system.py +++ b/city_model_structure/energy_system.py @@ -6,7 +6,8 @@ Contributor Peter Yefi peteryefi@gmail.com """ from city_model_structure.city_object import CityObject -from city_model_structure.energy_systems.heat_pump import HeatPump +from city_model_structure.energy_systems.air_source_hp import AirSourceHP +from city_model_structure.energy_systems.water_to_water_hp import WaterToWaterHP class EnergySystem(CityObject): @@ -16,25 +17,43 @@ class EnergySystem(CityObject): def __init__(self, name, lod, surfaces, city_lower_corner): super().__init__(name, lod, surfaces, city_lower_corner) - self._heat_pump = None + self._air_source_hp = None + self._water_to_water_hp = None self._type = 'energy_system' @property - def heat_pump(self) -> HeatPump: + def air_source_hp(self) -> AirSourceHP: """ Heat pump energy system :return: """ - return self._heat_pump + return self._air_source_hp - @heat_pump.setter - def heat_pump(self, value): + @air_source_hp.setter + def air_source_hp(self, value): """ - Set heat pumm for energy system - :param value: HeatPump + Set heat pump for energy system + :param value: AirSourceHP """ - if self._heat_pump is None: - self._heat_pump = value + if self._air_source_hp is None: + self._air_source_hp = value + + @property + def water_to_water_hp(self) -> WaterToWaterHP: + """ + Water to water heat pump energy system + :return: + """ + return self._water_to_water_hp + + @water_to_water_hp.setter + def water_to_water_hp(self, value): + """ + Set water to water heat pump for energy system + :param value: WaterToWaterHP + """ + if self._water_to_water_hp is None: + self._water_to_water_hp = value @property def type(self) -> str: diff --git a/city_model_structure/energy_systems/air_source_hp.py b/city_model_structure/energy_systems/air_source_hp.py new file mode 100644 index 00000000..752f13b0 --- /dev/null +++ b/city_model_structure/energy_systems/air_source_hp.py @@ -0,0 +1,190 @@ +""" +heat_pump module defines a heat pump +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Contributor Peter Yefi peteryefi@gmail.com +""" + +from typing import List +from typing import Dict + + +class HeatPump: + """ + HeatPump class + """ + + def __init__(self): + self._model = None + self._cooling_capacity = None + self._cooling_comp_power = None + self._cooling_capacity_coff = None + self._cooling_comp_power_coff = None + self._heating_capacity = None + self._heating_comp_power = None + self._heating_capacity_coff = None + self._heating_comp_power_coff = None + + @property + def model(self) -> str: + """ + Get model name + :return: str + """ + return self._model + + @model.setter + def model(self, value): + """ + Set model (name, indicated in capacity) + :param value: str + """ + if self._model is None: + self._model = value + + @property + def cooling_capacity(self) -> List[float]: + """ + Get cooling capacity in kW + :return: [[float]] + """ + return self._cooling_capacity + + @cooling_capacity.setter + def cooling_capacity(self, value): + """ + Set cooling capacity in kW + :param value: [[float]] + """ + if self._cooling_capacity is None: + self._cooling_capacity = value + + @property + def cooling_comp_power(self) -> List[float]: + """ + Get cooling compressor power input in kW + :return: [[float]] + """ + return self._cooling_comp_power + + @cooling_comp_power.setter + def cooling_comp_power(self, value): + """ + Set the cooling compressor in kW + :param value: [[float]] + :return: + """ + if self._cooling_comp_power is None: + self._cooling_comp_power = value + + @property + def cooling_capacity_coff(self) -> List[float]: + """ + Get cooling capacity coefficients + :return: [float] + """ + return self._cooling_capacity_coff + + @cooling_capacity_coff.setter + def cooling_capacity_coff(self, value): + """ + Set the value for cooling capacity coefficients + :param value: [float] + :return: + """ + if self._cooling_capacity_coff is None: + self._cooling_capacity_coff = value + + @property + def cooling_comp_power_coff(self) -> List[float]: + """ + Get cooling compressor power coefficients + :return: [float] + """ + return self._cooling_comp_power_coff + + @cooling_comp_power_coff.setter + def cooling_comp_power_coff(self, value): + """ + Set the value for cooling compressor power coefficients + :param value: [float] + :return: + """ + if self._cooling_comp_power_coff is None: + self._cooling_comp_power_coff = value + + + + @property + def heating_capacity(self) -> List[float]: + """ + Get heating capacity kW + :return: [[float]] + """ + return self._heating_capacity + + @heating_capacity.setter + def heating_capacity(self, value): + """ + Set the heating capacity in kW + :param value: [[float]] + :return: + """ + if self._heating_capacity is None: + self._heating_capacity = value + + @property + def heating_comp_power(self) -> List[float]: + """ + Get heating compressor power kW + :return: [[float]] + """ + return self._heating_comp_power + + @heating_comp_power.setter + def heating_comp_power(self, value): + """ + Set the heating compressor power in kW + :param value: [[float]] + :return: + """ + if self._heating_comp_power is None: + self._heating_comp_power = value + + @property + def heating_comp_power_coff(self) -> List[float]: + """ + Get heating compressor power coefficients + :return: [float] + """ + return self._heating_comp_power_coff + + @heating_comp_power_coff.setter + def heating_comp_power_coff(self, value): + """ + Set the value for heating compressor power coefficients + :param value: [float] + :return: + """ + if self._heating_comp_power_coff is None: + self._heating_comp_power_coff = value + + @property + def heating_capacity_coff(self) -> List[float]: + """ + Get heating capacity coefficients + :return: [float] + """ + return self._heating_capacity_coff + + @heating_capacity_coff.setter + def heating_capacity_coff(self, value): + """ + Set the value for heating capacity coefficients + :param value: [float] + :return: + """ + if self._heating_capacity_coff is None: + self._heating_capacity_coff = value + + diff --git a/city_model_structure/energy_systems/heat_pump.py b/city_model_structure/energy_systems/heat_pump.py index 752f13b0..e69de29b 100644 --- a/city_model_structure/energy_systems/heat_pump.py +++ b/city_model_structure/energy_systems/heat_pump.py @@ -1,190 +0,0 @@ -""" -heat_pump module defines a heat pump -SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca -Contributor Peter Yefi peteryefi@gmail.com -""" - -from typing import List -from typing import Dict - - -class HeatPump: - """ - HeatPump class - """ - - def __init__(self): - self._model = None - self._cooling_capacity = None - self._cooling_comp_power = None - self._cooling_capacity_coff = None - self._cooling_comp_power_coff = None - self._heating_capacity = None - self._heating_comp_power = None - self._heating_capacity_coff = None - self._heating_comp_power_coff = None - - @property - def model(self) -> str: - """ - Get model name - :return: str - """ - return self._model - - @model.setter - def model(self, value): - """ - Set model (name, indicated in capacity) - :param value: str - """ - if self._model is None: - self._model = value - - @property - def cooling_capacity(self) -> List[float]: - """ - Get cooling capacity in kW - :return: [[float]] - """ - return self._cooling_capacity - - @cooling_capacity.setter - def cooling_capacity(self, value): - """ - Set cooling capacity in kW - :param value: [[float]] - """ - if self._cooling_capacity is None: - self._cooling_capacity = value - - @property - def cooling_comp_power(self) -> List[float]: - """ - Get cooling compressor power input in kW - :return: [[float]] - """ - return self._cooling_comp_power - - @cooling_comp_power.setter - def cooling_comp_power(self, value): - """ - Set the cooling compressor in kW - :param value: [[float]] - :return: - """ - if self._cooling_comp_power is None: - self._cooling_comp_power = value - - @property - def cooling_capacity_coff(self) -> List[float]: - """ - Get cooling capacity coefficients - :return: [float] - """ - return self._cooling_capacity_coff - - @cooling_capacity_coff.setter - def cooling_capacity_coff(self, value): - """ - Set the value for cooling capacity coefficients - :param value: [float] - :return: - """ - if self._cooling_capacity_coff is None: - self._cooling_capacity_coff = value - - @property - def cooling_comp_power_coff(self) -> List[float]: - """ - Get cooling compressor power coefficients - :return: [float] - """ - return self._cooling_comp_power_coff - - @cooling_comp_power_coff.setter - def cooling_comp_power_coff(self, value): - """ - Set the value for cooling compressor power coefficients - :param value: [float] - :return: - """ - if self._cooling_comp_power_coff is None: - self._cooling_comp_power_coff = value - - - - @property - def heating_capacity(self) -> List[float]: - """ - Get heating capacity kW - :return: [[float]] - """ - return self._heating_capacity - - @heating_capacity.setter - def heating_capacity(self, value): - """ - Set the heating capacity in kW - :param value: [[float]] - :return: - """ - if self._heating_capacity is None: - self._heating_capacity = value - - @property - def heating_comp_power(self) -> List[float]: - """ - Get heating compressor power kW - :return: [[float]] - """ - return self._heating_comp_power - - @heating_comp_power.setter - def heating_comp_power(self, value): - """ - Set the heating compressor power in kW - :param value: [[float]] - :return: - """ - if self._heating_comp_power is None: - self._heating_comp_power = value - - @property - def heating_comp_power_coff(self) -> List[float]: - """ - Get heating compressor power coefficients - :return: [float] - """ - return self._heating_comp_power_coff - - @heating_comp_power_coff.setter - def heating_comp_power_coff(self, value): - """ - Set the value for heating compressor power coefficients - :param value: [float] - :return: - """ - if self._heating_comp_power_coff is None: - self._heating_comp_power_coff = value - - @property - def heating_capacity_coff(self) -> List[float]: - """ - Get heating capacity coefficients - :return: [float] - """ - return self._heating_capacity_coff - - @heating_capacity_coff.setter - def heating_capacity_coff(self, value): - """ - Set the value for heating capacity coefficients - :param value: [float] - :return: - """ - if self._heating_capacity_coff is None: - self._heating_capacity_coff = value - - diff --git a/city_model_structure/energy_systems/water_to_water_hp.py b/city_model_structure/energy_systems/water_to_water_hp.py new file mode 100644 index 00000000..e69de29b diff --git a/data/energy_systems/heat_pumps/Air Source.xlsx b/data/energy_systems/heat_pumps/Air Source.xlsx deleted file mode 100644 index c0ea122f7ff2b916671eec40912df50c829ce43b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105875 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 diff --git a/imports/energy_systems/xlsx_heat_pump_parameters.py b/imports/energy_systems/air_source_hp_parameters.py similarity index 89% rename from imports/energy_systems/xlsx_heat_pump_parameters.py rename to imports/energy_systems/air_source_hp_parameters.py index b1b96e70..7e62f1af 100644 --- a/imports/energy_systems/xlsx_heat_pump_parameters.py +++ b/imports/energy_systems/air_source_hp_parameters.py @@ -1,13 +1,12 @@ """ -XlsxHeatPumpParameters import the heat pump information +AirSourceHeatPumpParameters import the heat pump information SPDX - License - Identifier: LGPL - 3.0 - or -later -Copyright © 2020 Project Author Peter Yefi peteryefi@gmail.com -Contributor Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Copyright © 2021 Project Author Peter Yefi peteryefi@gmail.com """ import pandas as pd from typing import Dict -from city_model_structure.energy_systems.heat_pump import HeatPump +from city_model_structure.energy_systems.air_source_hp import AirSourceHP from city_model_structure.energy_system import EnergySystem from scipy.optimize import curve_fit import numpy as np @@ -15,14 +14,14 @@ from typing import List import itertools -class XlsxHeatPumpParameters: +class AirSourceHeatPumpParameters: """ - XlsxHeatPumpParameters class + AirSourceHeatPumpParameters class """ def __init__(self, city, base_path): self._city = city - self._base_path = (base_path / 'heat_pumps/Air source.xlsx') + self._base_path = (base_path / 'heat_pumps/air_source.xlsx') def _read_file(self) -> Dict: """ @@ -31,6 +30,7 @@ class XlsxHeatPumpParameters: :return : Dict """ xl_file = pd.ExcelFile(self._base_path) + heat_pump_dfs = {sheet_name: xl_file.parse(sheet_name) for sheet_name in xl_file.sheet_names} @@ -38,8 +38,10 @@ class XlsxHeatPumpParameters: heating_data = {} for sheet, dataframe in heat_pump_dfs.items(): - if sheet == "Summary": - continue + + if 'Summary' in sheet: + continue + # Remove nan rows and columns and extract cooling and heating data # for each sheet df = heat_pump_dfs[sheet].dropna(axis=1, how='all') @@ -65,10 +67,10 @@ class XlsxHeatPumpParameters: """ Enriches the city with information from file """ - heap_pump_data = self._read_file() + heat_pump_data = self._read_file() for (k_cool, v_cool), (k_heat, v_heat) in \ - zip(heap_pump_data["cooling"].items(), heap_pump_data["heating"].items()): - heat_pump = HeatPump() + zip(heat_pump_data["cooling"].items(), heat_pump_data["heating"].items()): + heat_pump = AirSourceHP() heat_pump.model = k_cool h_data = self._extract_heat_pump_data(v_heat) c_data = self._extract_heat_pump_data(v_cool) @@ -82,7 +84,7 @@ class XlsxHeatPumpParameters: heat_pump.heating_comp_power_coff = self._compute_coefficients(h_data[1]) energy_system = EnergySystem('{} capacity heat pump'.format(heat_pump.model), 0, [], None) - energy_system.heat_pump = heat_pump + energy_system.air_source_hp = heat_pump self._city.add_city_object(energy_system) return self._city diff --git a/imports/energy_systems/water_to_water_hp_parameters.py b/imports/energy_systems/water_to_water_hp_parameters.py new file mode 100644 index 00000000..e69de29b diff --git a/unittests/test_energy_systems_factory.py b/unittests/test_energy_systems_air_source_hp.py similarity index 78% rename from unittests/test_energy_systems_factory.py rename to unittests/test_energy_systems_air_source_hp.py index eb8bb7dd..ecdfdd5a 100644 --- a/unittests/test_energy_systems_factory.py +++ b/unittests/test_energy_systems_air_source_hp.py @@ -7,7 +7,7 @@ import pandas as pd from unittest import TestCase from imports.geometry_factory import GeometryFactory from imports.energy_systems_factory import EnergySystemsFactory -from city_model_structure.energy_systems.heat_pump import HeatPump +from city_model_structure.energy_systems.air_source_hp import AirSourceHP from exports.energy_systems_factory import EnergySystemsExportFactory import os @@ -25,15 +25,15 @@ class TestEnergySystemsFactory(TestCase): city_file = "../unittests/tests_data/C40_Final.gml" self._output_path = "../unittests/tests_data/user_output.csv" self._city = GeometryFactory('citygml', city_file).city - EnergySystemsFactory('xlsx heat pump', self._city).enrich() + EnergySystemsFactory('air source hp', self._city).enrich() - def test_heat_pump_import(self): + def test_air_source_heat_pump_import(self): self.assertIsNotNone(self._city.energy_systems, 'City has energy systems') - self.assertIsInstance(self._city.energy_systems[0].heat_pump, HeatPump) - self.assertEqual(self._city.energy_systems[0].heat_pump.model, '012') - self.assertEqual(self._city.energy_systems[len(self._city.energy_systems) - 1].heat_pump.model, '140') + self.assertIsInstance(self._city.energy_systems[0].air_source_hp, AirSourceHP) + self.assertEqual(self._city.energy_systems[0].air_source_hp.model, '012') + self.assertEqual(self._city.energy_systems[len(self._city.energy_systems) - 1].air_source_hp.model, '140') - def test_heat_pump_export(self): + def test_air_source_heat_pump_export(self): # User defined paramenters user_input = { 'StartYear': 2020, diff --git a/unittests/test_energy_systems_water_to_water_hp.py b/unittests/test_energy_systems_water_to_water_hp.py new file mode 100644 index 00000000..e69de29b From 680b63502543c806f1f15f2583c182d07155f9cd Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 15 Dec 2021 09:20:08 +0000 Subject: [PATCH 20/54] changed heat_pump to air source to reflect data source --- .../energy_systems/air_source_hp.py | 27 ++++--------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/city_model_structure/energy_systems/air_source_hp.py b/city_model_structure/energy_systems/air_source_hp.py index 752f13b0..c6aeaa8a 100644 --- a/city_model_structure/energy_systems/air_source_hp.py +++ b/city_model_structure/energy_systems/air_source_hp.py @@ -1,21 +1,21 @@ """ -heat_pump module defines a heat pump +air_source_hp module defines an air source heat pump SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca Contributor Peter Yefi peteryefi@gmail.com """ from typing import List -from typing import Dict +from city_model_structure.energy_systems.heat_pump import HeatPump -class HeatPump: +class AirSourceHP(HeatPump): """ - HeatPump class + AirSourceHP class """ def __init__(self): - self._model = None + super().__init__() self._cooling_capacity = None self._cooling_comp_power = None self._cooling_capacity_coff = None @@ -25,23 +25,6 @@ class HeatPump: self._heating_capacity_coff = None self._heating_comp_power_coff = None - @property - def model(self) -> str: - """ - Get model name - :return: str - """ - return self._model - - @model.setter - def model(self, value): - """ - Set model (name, indicated in capacity) - :param value: str - """ - if self._model is None: - self._model = value - @property def cooling_capacity(self) -> List[float]: """ From d703b8c8cfc2b46d7bd95db128dff796f3e1e762 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 15 Dec 2021 09:22:20 +0000 Subject: [PATCH 21/54] Made heat pump a parent class for air source and water to water sources heat pumps --- .../energy_systems/heat_pump.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/city_model_structure/energy_systems/heat_pump.py b/city_model_structure/energy_systems/heat_pump.py index e69de29b..a0af2442 100644 --- a/city_model_structure/energy_systems/heat_pump.py +++ b/city_model_structure/energy_systems/heat_pump.py @@ -0,0 +1,31 @@ +""" +heat_pump module defines a heat pump +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Peter Yefi peteryefi@gmail.com +""" + + +class HeatPump: + """ + HeatPump class + """ + + def __init__(self): + self._model = None + + @property + def model(self) -> str: + """ + Get model name + :return: str + """ + return self._model + + @model.setter + def model(self, value): + """ + Set model (name, indicated in capacity) + :param value: str + """ + if self._model is None: + self._model = value From 1ed60762c3df1afe8e632fb313a162e91e4cb3c3 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 15 Dec 2021 09:22:44 +0000 Subject: [PATCH 22/54] Added water to water heat pump model --- .../energy_systems/water_to_water_hp.py | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/city_model_structure/energy_systems/water_to_water_hp.py b/city_model_structure/energy_systems/water_to_water_hp.py index e69de29b..60a97cac 100644 --- a/city_model_structure/energy_systems/water_to_water_hp.py +++ b/city_model_structure/energy_systems/water_to_water_hp.py @@ -0,0 +1,151 @@ +""" +water_to_water_hp module defines a water to water heat pump heat pump +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Peter Yefi peteryefi@gmail.com +""" + +from typing import List +from city_model_structure.energy_systems.heat_pump import HeatPump + + +class WaterToWaterHP(HeatPump): + """ + WaterToWaterHP class + """ + + def __init__(self): + super().__init__() + self._entering_water_temp = None + self._leaving_water_temp = None + self._total_cooling_capacity = None + self._power_demand = None + self._flow_rate = None + self._total_cooling_capacity_coff = None + self._power_demand_coff = None + + @property + def entering_water_temp(self) -> List[float]: + """ + Get entering water temperature in degree celsius + :return: [[float]] + """ + return self._entering_water_temp + + @entering_water_temp.setter + def entering_water_temp(self, value): + """ + Set entering water temperature in degree celsius + :param value: [[float]] + """ + if self._entering_water_temp is None: + self._entering_water_temp = value + + @property + def leaving_water_temp(self) -> List[float]: + """ + Get leaving water temperature in degree celsius + :return: [[float]] + """ + return self._leaving_water_temp + + @leaving_water_temp.setter + def leaving_water_temp(self, value): + """ + Set the leaving water temperature in degree celsius + :param value: [[float]] + :return: + """ + if self._leaving_water_temp is None: + self._leaving_water_temp = value + + @property + def total_cooling_capacity(self) -> List[float]: + """ + Get total cooling capacity + :return: [float] + """ + return self._total_cooling_capacity + + @total_cooling_capacity.setter + def total_cooling_capacity(self, value): + """ + Set the value for total cooling capacity + :param value: [float] + :return: + """ + if self._total_cooling_capacity is None: + self._total_cooling_capacity = value + + @property + def power_demand(self) -> List[float]: + """ + Get power demand in kW + :return: [float] + """ + return self._power_demand + + @power_demand.setter + def power_demand(self, value): + """ + Set the value for power demand in kW + :param value: [float] + :return: + """ + if self._power_demand is None: + self._power_demand = value + + @property + def flow_rate(self) -> List[float]: + """ + Get flow rate in kg/s + :return: [[float]] + """ + return self._flow_rate + + @flow_rate.setter + def flow_rate(self, value): + """ + Set flow rate in kW + :param value: [[float]] + :return: + """ + if self._flow_rate is None: + self._flow_rate = value + + @property + def total_cooling_capacity_coff(self) -> List[float]: + """ + Get coefficients for total cooling capacity + :return: [[float]] + """ + return self._total_cooling_capacity_coff + + @total_cooling_capacity_coff.setter + def total_cooling_capacity_coff(self, value): + """ + Set coefficients for totol cooling capacity + :param value: [[float]] + :return: + """ + if self._total_cooling_capacity_coff is None: + self._total_cooling_capacity_coff = value + + @property + def power_demand_coff(self) -> List[float]: + """ + Get power demand coefficients + :return: [float] + """ + return self._power_demand_coff + + @power_demand_coff.setter + def power_demand_coff(self, value): + """ + Set the value for power demand coefficients + :param value: [float] + :return: + """ + if self._power_demand_coff is None: + self._power_demand_coff = value + + From 93160912c3f6f654c3b5315a7d0bad3d820a6563 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 15 Dec 2021 09:24:52 +0000 Subject: [PATCH 23/54] Added a module for importing water to water source heat pump --- .../water_to_water_hp_parameters.py | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) diff --git a/imports/energy_systems/water_to_water_hp_parameters.py b/imports/energy_systems/water_to_water_hp_parameters.py index e69de29b..4d712742 100644 --- a/imports/energy_systems/water_to_water_hp_parameters.py +++ b/imports/energy_systems/water_to_water_hp_parameters.py @@ -0,0 +1,173 @@ +""" +WaterToWaterHPParameters import the heat pump information +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Peter Yefi peteryefi@gmail.com +""" + +import pandas as pd +from typing import Dict +from city_model_structure.energy_systems.water_to_water_hp import WaterToWaterHP +from city_model_structure.energy_system import EnergySystem +from scipy.optimize import curve_fit +import numpy as np +from typing import List + + +class WaterToWaterHPParameters: + """ + WaterToWaterHPParameters class + """ + + def __init__(self, city, base_path): + self._city = city + self._base_path = (base_path / 'heat_pumps/water_to_water.xlsx') + + def _read_file(self) -> Dict: + """ + reads xlsx file containing water to water heat pump information + into a dictionary + :return : Dict + """ + xl_file = pd.ExcelFile(self._base_path) + heat_pump_dfs = {sheet_name: xl_file.parse(sheet_name) + for sheet_name in xl_file.sheet_names} + + hp_data = {} + flow_rates = { + '156': [2.84, 4.23, 5.68], + '256': [4.73, 7.13, 9.446], + '335': [6.62, 9.97, 12.93], + } + + for sheet, dataframe in heat_pump_dfs.items(): + + df = heat_pump_dfs[sheet].dropna(axis=1, how='all') + df = df.iloc[3:, 6:35] + + if '156' in sheet: + hp_data[sheet] = self._extract_required_hp_data(df, [0, 10, 25, 40, 55, 67], flow_rates['156']) + elif '256' in sheet: + hp_data[sheet] = self._extract_required_hp_data(df, [0, 9, 24, 39, 54, 66], flow_rates['256']) + elif '335' in sheet: + hp_data[sheet] = self._extract_required_hp_data(df, [0, 11, 26, 41, 56, 69], flow_rates['335']) + + return hp_data + + def _extract_required_hp_data(self, dataframe, ranges, flow_rates): + """ + Extracts 156 Kw water to water heat pump data + :param dataframe: dataframe containing all data + :param ranges: the range of values to extract + :param flow_rates: the flow rates of water through pump + :return: Dict + """ + # extract data rows and columns + data = {'tc': self._extract_hp_data(dataframe, [1, 11, 21], ranges), + 'pd': self._extract_hp_data(dataframe, [2, 12, 22], ranges), + 'lwt': self._extract_hp_data(dataframe, [5, 15, 25], ranges), + 'fr': (self._extract_flow_and_ewt(dataframe, ranges, [1, 11, 21], flow_rates))[0], + 'ewt': (self._extract_flow_and_ewt(dataframe, ranges, [1, 11, 21], flow_rates))[1]} + # range values for extracting data + return data + + def _extract_hp_data(self, df, columns, ranges): + """ + Extract variable specific (LWT, PD or TC) data from water to water hp + :param df: the dataframe + :param columns: the columns to extract data from + :param ranges: the range of values to extract + :return: List + """ + data = df.iloc[ranges[0]:ranges[1], columns[0]].append(df.iloc[ranges[0]:ranges[1], columns[1]])\ + .append(df.iloc[ranges[0]:ranges[1], columns[2]]) + for i in range(1, 5): + data = data.append(df.iloc[ranges[i]:ranges[i + 1], columns[0]]).append( + df.iloc[ranges[i]:ranges[i + 1], columns[1]]).append(df.iloc[ranges[i]:ranges[i + 1], columns[2]]) + return data.dropna().values.tolist() + + def _extract_flow_and_ewt(self, df, ranges, columns, flow_rates): + """ + Create the flow and ewt data based on the length of the various + columns for the variables being extracted + :param df: the dataframe + :param ranges: the range of values to extract + :param columns: the columns to extract data from + :param flow_rates: flow rate values + :return: + """ + ewt_values = [-1.111111111, 4.444444444, 10, 15.55555556, 21.11111111] + length = [len(df.iloc[ranges[0]:ranges[1], columns[0]].dropna()), + len(df.iloc[ranges[0]:ranges[1], columns[1]].dropna()), + len(df.iloc[ranges[0]:ranges[1], columns[2]].dropna())] + + ewt_data = np.repeat(ewt_values[0], sum(length)) + flow_rates_data = np.repeat(flow_rates, length) + + for i in range(1, 5): + length = [len(df.iloc[ranges[i]:ranges[i + 1], columns[0]].dropna()), + len(df.iloc[ranges[i]:ranges[i + 1], columns[1]].dropna()), + len(df.iloc[ranges[i]:ranges[i + 1], columns[2]].dropna())] + flow_rates_data = np.append(flow_rates_data, np.repeat(flow_rates, length)) + ewt_data = np.append(ewt_data, np.repeat(ewt_values[i], sum(length))) + + return flow_rates_data.tolist(), ewt_data.tolist() + + def enrich_city(self): + """ + Enriches the city with information from file + """ + heap_pump_data = self._read_file() + for model, data in heap_pump_data.items(): + heat_pump = WaterToWaterHP() + heat_pump.model = model.strip() + heat_pump.total_cooling_capacity = data['tc'] + heat_pump.power_demand = data['pd'] + heat_pump.flow_rate = data['fr'] + heat_pump.entering_water_temp = data['ewt'] + heat_pump.leaving_water_temp = data['lwt'] + heat_pump.power_demand_coff = self._compute_coefficients(data, data_type='power') + heat_pump.total_cooling_capacity_coff = self._compute_coefficients(data) + + energy_system = EnergySystem(heat_pump.model, 0, [], None) + energy_system.water_to_water_hp = heat_pump + self._city.add_city_object(energy_system) + return self._city + + def _compute_coefficients(self, heat_pump_data: Dict, data_type="heat_output") -> List[float]: + """ + Compute heat output and electrical demand coefficients + from heating performance data + :param heat_pump_data: a dictionary of heat pump data. + :param data_type: string to indicate whether coefficient are power demands + or heat output coefficients. Default is heat output + :return: Tuple[Dict, Dict] + """ + demand = heat_pump_data['tc'] if data_type == "heat_output" else heat_pump_data['pd'] + + # Compute heat output coefficients + popt, _ = curve_fit(self._objective_function, [heat_pump_data['ewt'], heat_pump_data['lwt'], heat_pump_data['fr']], + demand) + return popt.tolist() + + def _objective_function(self, xdata: List, a1: float, a2: float, a3: float, a4: float, a5: float, a6: float, + a7: float, a8: float, a9: float, a10: float, a11: float) -> float: + """ + Objective function for computing coefficients + :param xdata: + :param a1: float + :param a2: float + :param a3: float + :param a4: float + :param a5: float + :param a6: float + :param a7: float + :param a8: float + :param a9: float + :param a10: float + :param a11: float + :return: + """ + x, y, t = xdata + return (a1 * x ** 2) + (a2 * x) + (a3 * y ** 2) + (a4 * y) + (a5 * t ** 2) + (a6 * t) + (a7 * x * y) + ( + a8 * x * t) + (a9 * y * t) + (a10 * x * y * t) + a11 + From f6354586d68beaf629e91489ea078750507f7b6f Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 15 Dec 2021 09:25:37 +0000 Subject: [PATCH 24/54] Added method for importing water to water source. Made some modifications to reflect data source --- imports/energy_systems_factory.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/imports/energy_systems_factory.py b/imports/energy_systems_factory.py index 964353e7..466ff936 100644 --- a/imports/energy_systems_factory.py +++ b/imports/energy_systems_factory.py @@ -2,9 +2,11 @@ EnergySystemsFactory retrieve the energy system module for the given region SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Pilar Monsalvete pilar.monsalvete@concordi.ca +Contributor Peter Yefi peteryefi@gmail.com """ from pathlib import Path -from imports.energy_systems.xlsx_heat_pump_parameters import XlsxHeatPumpParameters +from imports.energy_systems.air_source_hp_parameters import AirSourceHeatPumpParameters +from imports.energy_systems.water_to_water_hp_parameters import WaterToWaterHPParameters class EnergySystemsFactory: @@ -19,11 +21,17 @@ class EnergySystemsFactory: self._city = city self._base_path = base_path - def _xlsx_heat_pump(self): + def _air_source_hp(self): """ Enrich the city by using xlsx heat pump information """ - XlsxHeatPumpParameters(self._city, self._base_path).enrich_city() + AirSourceHeatPumpParameters(self._city, self._base_path).enrich_city() + + def _water_to_water_hp(self): + """ + Enrich the city by using water to water heat pump information + """ + WaterToWaterHPParameters(self._city, self._base_path).enrich_city() def enrich(self): """ From 286a03441fb414a897ec833d03305e6ff3b7477e Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 15 Dec 2021 09:25:56 +0000 Subject: [PATCH 25/54] Added unit test for water to water source import --- .../test_energy_systems_air_source_hp.py | 2 +- .../test_energy_systems_water_to_water_hp.py | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/unittests/test_energy_systems_air_source_hp.py b/unittests/test_energy_systems_air_source_hp.py index ecdfdd5a..45a95a8f 100644 --- a/unittests/test_energy_systems_air_source_hp.py +++ b/unittests/test_energy_systems_air_source_hp.py @@ -31,7 +31,7 @@ class TestEnergySystemsFactory(TestCase): self.assertIsNotNone(self._city.energy_systems, 'City has energy systems') self.assertIsInstance(self._city.energy_systems[0].air_source_hp, AirSourceHP) self.assertEqual(self._city.energy_systems[0].air_source_hp.model, '012') - self.assertEqual(self._city.energy_systems[len(self._city.energy_systems) - 1].air_source_hp.model, '140') + self.assertEqual(self._city.energy_systems[16].air_source_hp.model, '140') def test_air_source_heat_pump_export(self): # User defined paramenters diff --git a/unittests/test_energy_systems_water_to_water_hp.py b/unittests/test_energy_systems_water_to_water_hp.py index e69de29b..3f9b430d 100644 --- a/unittests/test_energy_systems_water_to_water_hp.py +++ b/unittests/test_energy_systems_water_to_water_hp.py @@ -0,0 +1,39 @@ +""" +Test EnergySystemsFactory and various heatpump models +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Peter Yefi peteryefi@gmail.com +""" +from unittest import TestCase +from imports.geometry_factory import GeometryFactory +from imports.energy_systems_factory import EnergySystemsFactory +from city_model_structure.energy_systems.water_to_water_hp import WaterToWaterHP + +import os + + +class TestEnergySystemsFactory(TestCase): + """ + TestBuilding TestCase 1 + """ + + def setUp(self) -> None: + """ + Test setup + :return: None + """ + city_file = "../unittests/tests_data/C40_Final.gml" + self._output_path = "../unittests/tests_data/user_output.csv" + self._city = GeometryFactory('citygml', city_file).city + EnergySystemsFactory('water to water hp', self._city).enrich() + + def test_air_source_heat_pump_import(self): + self.assertIsNotNone(self._city.energy_systems, 'City has energy systems') + self.assertIsInstance(self._city.energy_systems[0].water_to_water_hp, WaterToWaterHP) + self.assertEqual(self._city.energy_systems[0].water_to_water_hp.model, 'ClimateMaster 156 kW') + self.assertEqual(self._city.energy_systems[2].water_to_water_hp.model, 'ClimateMaster 335 kW') + + def tearDown(self) -> None: + try: + os.remove(self._output_path) + except OSError: + pass From 12181cc12b58a3a9d564b2aa76179e853f4a2719 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 15 Dec 2021 09:26:14 +0000 Subject: [PATCH 26/54] Included required data for importation --- data/energy_systems/heat_pumps/air_source.xlsx | Bin 0 -> 105875 bytes .../heat_pumps/water_to_water.xlsx | Bin 0 -> 73906 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/energy_systems/heat_pumps/air_source.xlsx create mode 100644 data/energy_systems/heat_pumps/water_to_water.xlsx diff --git a/data/energy_systems/heat_pumps/air_source.xlsx b/data/energy_systems/heat_pumps/air_source.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c0ea122f7ff2b916671eec40912df50c829ce43b GIT binary patch literal 105875 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 literal 0 HcmV?d00001 diff --git a/data/energy_systems/heat_pumps/water_to_water.xlsx b/data/energy_systems/heat_pumps/water_to_water.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a43279195eb58cdea505de9b5a4a97a07e722608 GIT binary patch literal 73906 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%0D$^!DWnk7+ z2QasVtI=(rz$#zg?B?E)7;`Vt8GQ;;qyh~|JBZZ*HNbv+2mVUr`i;i=P~y7^J_#-- ztwy$ZIg2ZGi$Su&(`+g^a`b($s&1`%C>$Nh|X{- zX;2~|qh=;GF>7DZb!bx7=)ESK(kHK>y&OOdE5( z4e;lO2eqJSGhlDpiYRm5C<$cc_J4KTGKB!L&_rA znJq6Hn;ryH&5udnKe|E{0128YTf7Vm74pl4vk!#+nO$8O(hp8iEapFydh3SPVB?~2))e0%+0hqR6R-yrPq8v#IFQ`=Qc`FN&ro(Z&%&6Jf18-$k( zgGmkcI1k5&2rbdG+P2JXX@=G|KZvi{bf2h38qE*3M_jLe*3;9>1N)I4aVslqPu;#D zWHhJ&g0u5y#mW52*||_)#hNV^W)XY$iFzEdb50=7EEOMr-@Nvj&_coaqp$Rshk(#? zc4%f(ff?wGe(HpXD!Q@Bq||Soa$hiRQL~|^a>e%S@7P!2Mu0PbWW0C6h(A0%G(Mq5 z7}Jl&(ercFQx*yb{HBbl*Fm5FZ#GQw#!fl8EM49XQEHN05jSRhU@zrL?b@F~ca@?H znSaQH9nqhh7Y8I)9-R`|%Sr@fs!S3uqp!)B%WWENC>9`h@Xl3j;cnFKNFm4N#}r(i zM2q~Vq*=XW(0bdhdkza$-fYV2aymb+&~&tmu1j9wtY7`CHO&pmn17$(18|Aj7mWGe|- zOvzFZ1Qk6qwD?O`8sC7V69iD9>(=~icR1MQDCxGog^`2rIo;Lg4c?m{F0G-Bdg8FH z%$+?)5jA?I_lvg3(Ot9+*t{+~djRN z!|vr(6Y{AD3R~P#W|5LKPbiIM;Gc@)a`jUcWN%I9)hBsSq&zfUvK4$inteFo@!!Q! znsawmiZYoN(9d8V@V+L@Y0k9lVJRDjS*^0hNpA<4+(3ol|3UiFJyw9ktQ+I5>Y~jwUSD7|+o9_b)?H zaNXR>eppC@66g8@vi8w=m%_}=uxzJ6i=I-6v6}NTla$@ELpJ9)kSuI_#FO&?f~+ic zGESe$q3TL|rs%0&veXq@d0ZvhM2U82Q7}T(P`VNW!&B@@HrxuvT9$>403(oQz=@*Y zr8(yY+)*8Eq6)Nr5?v80wN45cOb9KIejNoRMwY8|F-?)$F#%eerBE6 zP$8|Boh`eEC@e%|zJnCIhgl}?O4cTa@4{2wmN9~8#_=W*Sr3Nx-Gi}^^;a(!{dYwvQt7X!hRvIoEyrw&2@5Mat`Et9P&>~BNTYTUQc?>@Hq7Vh))CF(S>=bpuIX|DO1JYV|G z9(XVp)7ge!{9ZFWE(ZVPsKN&8ALtX01i8CcvrZ4U8We$Z(FUHVLT&}xIW zgNj`$R%LL2Ljer#XoL7!19>u0)d2@|=(aG|J zRP_zNzsp|Kyr%V)r@Dkef67?#KOOU`5Vma_9I_*whkPI9^-SPEieFh}8*Vkx_J}v~AxhzY+lYRu zKhow+6p)xNpL*)BLIq45Pt7sweTunFiL`9gHZ+@AL z@1ii@__w>71W3L8#D8EQ=l;sAu^qD=t`?XnC_cq%F5F-Ma3sf1|9d8NYLVg+;6TQg zzHJpT>VbSlkEO3sTxgk_tFM@w3mt^A{s{z{s*|8Bco3_1^Ie)^ahlm)whpr!v{Ic! zA^*D@z1d!b+TvQP?J#2Sla%7Q>|m!pm(Q~7%^P}Jrt>6TO&=ToQ^ScV^R15;ZF+lE zlwfs9>05IH_WmsO)j6=pfRg(=Yvy-+?v52?$?M`?QqubeK?Bq ztvF;d>Y9sWn8y7}pmjbP{!*~#i3KL=p0&d+CdO`<53|EwDB^D%HvUo4eyF-7t5+}Z zy7mXb?NK|B!E;i+`3AI*=wZow@LOBXDQ@RzfOiz7(MQRpFuIO3(420>dTcly+k63t znR<1^hn6ViU#9~F0_;L1)YqU{|IE2GG+l@aYUtgtTnEueM{Ejd1b-e)>Nc6{UY|Wz zNM#X!St1B{wJ8VK)JzhHU4MSkCz|t=l34^WBsb1wdW@xUD|cmx&|CfH%|`4RWiN%DoCubv(XnAE?|CA~TZ^r)1RmR4)8O zMh#aIS+b|(aPwWtLx@pZrjs%CY?!svKuBDXDwO4r@-^wd)0L+nFn?QqqO`UKtDy`q z$PcibjM?8DzKF1+#^j&ztk2M4VV~F^vZB{CkmeS-@IM>D&5I|v)cIOUwjHsfi1z;S zgwIk>eh~!!*==K5sRjlcONv=@HeiD@R&IyNkBTgU=%q~gvcI^*)Zag>L;nP5Wr-mX zc$ENc0D??K?c}$TRqGFLojEB4YGR%{gfj;(@SEBVKHwmC7Omo&{^VD{#*hO0(TDuL zI4_CJDmtV76SK+^LPl6$To>995^iBFge~*5KdeUn*-Dk?P7)zzE|RL!MHE5yqY5;_<=V^qllZI3^=nT$k&SepS~U ztfMLUF4U_1nclqp0N%RT3OR0!aP5~<^4bdb&-}xtEcj_Qt=t=%i}B(L>OADdDjJAJ zPIX@%xron;Y!V^k$1&SSV+TR@_=}0B3tXq9Cw=@#lj#K_OS~Bn!AV;nyo~*#*b;{r zJvR=4Ui}rJ=HJ)~K-@hA-+g14o@Vm-?5RHr9wvC!8V@+L8nCdAxP0u`-A6FJVQ>Hl z@qSDlR4awU82;5d6Y5I%%(OB3B%`{B1S3I09pL5Y((+TjHeAaH{O_d^GW#Lz0hYMq ziB%-H`_tk1^|=ly6!X(Ii%!QGVD4@+Ep8^6IOo^$i@rXXnRd-r=V1@D@I#fTafxSU z&R+~n(9V%RouTE7g_pvQEosI^w<(TMu}p@z038xyVs??Nhcj_fS&m_N2?xM`B(^v# z!vC;Irs0upU)NLIU!POOz^5C-qfARq>&7onsnP$w5=ZIpt~WOSP9jAy;u;L{;r{)$ zAAZmxJdO_)FGQ!08Kqa?F-)2`KqJ>39XDbi*`eAa68QWK#6+KUT%Yt(d|)U{mAGNB z)()C$f8p;P51iriNc0@{%M95Z8IyZv#DA?x>UiU$?ISG{wWg&piyzvVN;L;V((xSuDfCQbm#C?- z-~EHMHG!2kQ}L~NfV36{>~Xu~bPZl3u z6rMpQM%5x`#dXW`E-#VedrBI!AV@xhicmoXY}Y!RDK`uKf?*NGC}~)`KYxN1KDYzq zFqrVjpEh_(v)k5;75dfacvEtz2$S>HnEFIcV}AS}{ZN&MIorkdwugJAK#m(C;1^Io zH!1Yu?=Ts>g(zFr^_0rJymD|jtYEg{_+R`q_?L*JpaZ2L#~eiY+opZEvZWLmLPq$b zVg`T2MG(@NkpK0Wvu6r}G}$HjCOfMc_;4q{V5t}c=9T*xwV}tgVjQ)S=p{`BLe>|c z*Md%Eu7S|W1qOB7Bn^xdL1aR60&Lta>H2#K5)mgU`p351fhe;T0|D8xVFshpV%2SE zZG2i(Tk4TCsuGgrgT`i@h3LG|T!KQi&-Y>?|6bhJ!Z_Ct;KRgEe(WY93fIT#H%4vE zmz|$!bew0!XtdECWhvp6SUw9pgH>Y$R}t3FMJKok_-yVqIIl1e#$wWbw~0sg1&~Dw1aE@he29xp^SB#tHY$xdtKcPP z6*OeF=ni~Ha5^0vbud1oA)fRBJEBZf>011g_=PvGSp7?>Lmg2^FrAS$P9OYHZK~Om z+-ECM#%oF-BJGrXS}aMQDpf@hF9N8p8Z`s3ckXS_VnY7G0eCeYOAClW9eJ3RuWoZ# z9@h*MD$_6qLc!vXLaGno-s)O(Fm>Z3svIi(chn#Wv2ss~z`+r@6DHODp6089iJ4U{XjJBC_mdR2Q^7GC z&)yEuE}i-|{qnBw9|=f??KW|K#EYvG$IYx4VSbo?@nQMp9|)y|cO%bUw1K@C^sSd2 zFh;(}nSztpNtRmP%J616+rDAUB#VOI74Xm+CF>;FFUFK^yWg01k!0e9XTgRWeBv6=gefA z!;nA#icX)f@5p1}Ujf@u1;Tg*&e$UTlF?orz|tm7lCc25@VtXXDbAS4n#jN}QJ6Jh zKAk=sqhe@fkYH3;KOWSg%#K}K)1_!6bucc#Z5)r!;W{xS*&tduOlQ#{8xLCekG7Q_ z7&NW@krhK80I4Egv!NN)B_=^l^jLDCs1yH&Z2FYDWtn#=9HuRuF{>Lf5F9Y~*N-#; zMhkh7?wUhwHpsuHk~$oI9>Z5Zre=WMH<(Yrhxj;;QLO4>sx@l-grn4>ehUrNB~wj{ zq0gPbI5^h6kNrc3(GR{(k=j>Xl*FTfK5NF)uDJbURyN+IWh$!3UrIrK&{D{rsiNT6HSt}-vM!LfWxp)T z6iNZ@;p0?IM(zCbDqU`h_$&m{@_!7N@7YvxChVSNN((D*fgQ^#n05ORy8d1z0zk2C zUmyzCv|0iAK2m3Tvp&Sq!B|vHi@V>#>&9eSwUf9PYIvu~)X{{3fW{}??>+JVSLw-| z?cEdC9j?a4rV@yNNqXx%XImHt&J>&M=bOZLQcKcG%?^B@gWbiBjmOa@HUn zC93LB$7;2jlbygV)eZTXXqmynjmzeE9j`)mhi;`NJJzTLPa!t}nK-T!M~UPA7cSPS zp`W}4BmMAx{q|-O0kX^*&^Y_GTHQTIBk?#@vboF|0kw;*-SxraBlLu6Q=nea1TH|t zIEC+HR4v__qDg+So@cde(z$8%@JoR4?uRXuQ}1zx9?GZ>5O>;}7d$5!?#GoxjmfzV z*xf?OaQ(-#pZIqS%j-sFKN=&AU_?B}>JXkOLn-N3CTC^@$>V@mXd-&HB)7Vloiot3aRG5J zwgh7oT6R>OVi(hpx;e3^RGNps#`}TMqOL5PI=m5U|09cq+zuY+JS3IR&FGSies{z+ zrMWQ;{?V4h&Mr;06#H2g+5%K{QSQodi)9OLV`oc8xj7k1dKU>#HV!n0C239e`Af+l z>{IJ&g|$kMgD`C%EX)z++O{r4T#(|XOwyk!j5y^V@%=2U7k=$y7XKhpX8>m9KWND! zLrf4~C+PPJa7lqIFBYDvky zex?0^H~NPNY_ikZ7NhttPGbI*kKgKGOW!H`57n9Kc>38&UM&@{Ge|c;=Q&fKjBfc< zFdlELMCzOt(W=nGk+f0Fo>W6CD_~0 z3tM*!`Zs_pOH6q7E8jcOS|KwCe3(5MpfF7KHuzrJvN7|6`wnorzb#JVAG5`ZwvRU}0x)xy9%ixUzKFRepy zt$Kw{S`h>o#4D`p>HuW}u$72jG#I)8Hn#0>aci|b0e+1TQV}r5JeBl{sHqb(`Y+|F z7*9hdHplh6c=%b+OsSJNX-_*-=8_2%JXdP+s1Id89xj%7x@E#W<;Duc;wlZk7TW>B zuxKhAQ~DQ6a@xMBXiB5zapdZpUu??TreTjL%;&S;WemvO_10ntd|1f zblSL-?+)63>10YmGN{3%o@jC8p*hUbxVV8yl6cPle8jj^ti4U1g~sJR2dngWfY@{+ zQY+vXSbV5J{-=C{TIe@;J?5F+0`YlpWw=dATnsrL5U2S0f9QJ0;9j2S z-8acjc5K_WZQHhO+t!YEY}>Z&WXHDcBc+Pm?vO zHbIZ8Ns?!(el6Ifum-t(S89GfKD7G3-CXGVeZ8gm?>f{_Q=y$k!3akFrI{=K4BbSvOr3epgXbHW#5Ufg@_@!24zS!tl?^0r8tUWq=%uL`co(^-l#M%$E**o-xokQ^bG-FSCIE}EgUWgKxEBC+K3$V3z_2Q4Gr%5+%oopBN8p|$@7 zSe0C{dm*x|_GpVRdF2a|6rxLYo?i9LRo2{?cnX`DH#q#iOZo>Iv3N8VTIn=6#jzW3 zS^R*DBkZs>33iBic=1#tiViHG2?@!z7x5?nm1go^R<{_UsY`T>>r70+FEcO>C0?7(N#hsH?TY61lI10PU$YnPJz+lX1|5rNHce8FyJsa z7j|vbcRw;lK)2c8E+X#*eE6~ynrefY%{DO><2%_;!sZ?4H{4#C-;0@&<*VWH6>}Sq zIHud*0zg+jGlrTXv?m87*;4w_v#^h(dHJN6kvxb_#QcbfJkD+=R^%>-+C-(mnviD1 zyI6a}PF==>z=!fnpWab8k!OO(`81v$^-@Kp?%{7EPP^TRBQ|He5+4cR(ioU=Q! zWs^fgU;7$Y8sVm%dWfgsBp<|>iIRsM(TWD^6C`8;ia7*oZ2>{VEs#hguL(}xHNs5q zUS%ijzXK0fI>88uJ;{+QaA0b>VE14Pj@mDBizruW}TRYLcU^($Vx~SG`y_Zw?n%-!BEGHtyxzeBPOmY zw+&jU{v)tH=)FOzb?U&yfo22v-{ikXi?OmVJj(dNwZ)c?>~ar6t^t{jIGG&D90IYd zDvQgQP_O_!JX?Q-F_O;xkkU>)+Jiom8hR*?Kr&YUI3wT=OtS-*@E1B9_w@_FW`-{J zMAj`A3W?I^pxFJ;sO{jC=)oj7vd2sZK^+YMzQT_gNwP3BXjqmrWwk4qomp}h7t>`) zP`5c0>FRJ;znZk4#ygSF;mCJjO9n%O8)D342#nLq{o*sC9R-_8zx3-eA@P za1*t=bm!g|IfUk|4|;!w|95q5O1#&z<>ijMV0Glb2_UnVZ3x*JJ!Xhw^0&l@w7zz? zCHj>bD?{3wQ3vLAhhu)~>N{KF+x`ipNqDz@|)j@QYuL(Zd3 z^vOSyzKU@UOCxsL4nK5@n`!W4aFRw04Z@b?mwA~gsVI`pygcY^^G2HWV+aJ3$*9V4 zLDpg!!>o-?BTvEKJvG-)=l~0)cKJb?wa#C?T?ioVD;@Vc>zYMx(I@jNMo9dh_awo5x7gNJJkoD^DAiL z{feco1&*q0fKw7qJ@`Zi+~jd;sd5788fD*ZZ|v0lcU(-nGV-zzLOQ#d+db$(nxdA| z?4)W~3H85C@T9$s(FCb4CQLEi_%;jrYogYHaECOB#iNkU0)fUTg^c6}V8c|&2~8?m zR5L!{6Ro$Ye3f78NgNJG)NiH>P4Th^QndJwFUWqFHfkHoT&Y@a=1QK-&3yTDos{+m zB&o31`kf8IFLxioLEz-D=n~3tl;pDARPnxYBa+4oJUT>&=wH6unKtv9T!E%@{iHZ7 zakz z-MDozGfnQMBxo++tw6IO`ja*1wfTUarkvT(Z-f6rrl}FJHnyu+rM@Zz>~N`? zOsk)j9cNBCCh|3aPqgqZRG_Ba3TA4Tke1(|oc1Uob4oa5&p18C;ROdwKAD%XZ534V z5SqNLy#x(dorEDTI$uTm8KSzJ;k;XMy49m-=*5rz-b*dl8r02>dlbuXNt^AImk?Xt z5FK&MY=Hy?h@T`?kcAJ=0bL@EiCRgUazY}2Dl-z)x?!k6usV$>NZItijaJm3a1j*B zSLofv0yA0;H)2YzyPLxA(>B7(77-%~!5M@=h2XIijex-$<5v_EwJ4$#Y&SXYCa=PE zP=`Ubk6$izkY&}WFHb!7|LZ@Ku*=Cq}QC> zMFAF=_sJE=9pxLRJHTe+qoIRwPv@8LTE`>?n{+gXy>x0CzdoA0QIW%GwL@~y!emK{ zsc5^di<2g3ayDR}Lqk&c!%->5dPLe$ZD9O&PYdn+30e^NK>Pp%d`f^`@wPsL(Q33( za6Uy#X|Nq`;dGKI6%NkM!}t$}ugXUB{dzz$C%eX9rn65pa(zRv`wl3TM^nLcQNLR0 zG@!FcI%Zw@M5zK^@h*q88(JvlKP%5qVG&d zq@tX%JnsRI%Or*Kbgqym0|FGJCa|zG5mMi~iu@yObrg3IGdl6_NTTR!Q!|(qBX3Z4>w#@`KClOl zZDQ!D*fHq*CjWa@TKGQ;V%dez)P5O>fQXpXR!0&~K33Emj!i^7jX|Z)8|^FuIG(L) zzjzCVuIkVOQ^};}NHNhPIh|$h{4jLbbfL43s`0mz2%dHtaUJ&Rd6U2}bG++A9yf&W za4xD>nNCunZUjHIZv-o_KiwTfA*TdF`B4iQ`*Ly1sFvL%?XuJ0uq0bgg2{J^8(~fj zE98;2)l2gxk#NBBs#7#RqR@H!QUpu5zWrN-dql3rv_jC24YM}As^OvDe`^xhG1+zQ zcicgqFe#g-r+)UFYz&zV*fP5no&9Z2*t~yRHvyrtqq_oA((SR^`DQ$h-^DF)2wf2DW3+qu%|tlBg;$xMI8|-O=@sjVV^x<^y-)SyO^OihTSjM zT+qIB)EP?c+>|S!PSmGUfD`we$jb8WNN~n{CWVM;_5)}$@!^G$h$HeS9y%M(Pa= zZR&-*mc%ZiiM|GI;%QenI@li?=^ln4P%0SgFMUX)To>;K9POL#TH=BphL9MW1%9FL zSj0UqY`3BAyoRf9nF|I-!3VTt*v?EqY3?-A4U*R}?p6l%sfGY4m}zh3tOk-O`D8cA zAsH&8>5!Q9f}ornX0lqXp`_C=S*NHZl+gKDHS9ipl?V*iKt(XdEy`#(H*qMvsW>0H z14+$N4CzCqB>Nsyk|&{sq!&?fQy*Ch^LqVEB#fIT4tkSYr!D4u<&lXayyX%nN*{Ac zr%1&KBju=%mr5>BC9Y!_ku1$>BGEUl5roIeTM=dOS&LF=} z#}T91;etkDqdab_DnwzHRP?V9TtH0v6{(JCLy(A1ZyK#gXDW;;w z!z!c+-mxTF+!nrJrg{+I3oV!62UrgYzN&c!fF2ZoV6FMJ0H&(9FY5ON#!$6N(gvnM z{MBEK-3C8Gg6djEweM7h)VlA${F-sUdx|Q|$>2QLaC{%9Fdnvo2Ekj$|pIW|{oDrRtQ5i7??~MyXgX zb=j0*TbKj8Xd5U+Pw8Bce=jsTD;*=~sM6J`t6uZ9sQvuOZKyo6-TYku*hMM|Z;L|S z;QJ3mZlA>wsc?qOZGEF)j3^qf#p30sQ2sb(=q0QG3x6C@)Ol?Fc6wF9C(sqUYJCO; zqwVhGB8oBVOFl0+yS2sg5Xn=z5J)3-8$a_q9@qVnXyvUNIcitT`vw%bk81PvJ{P3= zGvkk*@x@o6SN&bvW!2;-N7_Yy+*=?CS;lMm3_SWH!lXp$!tyf~;-lx>0wbz=+J)=u zIGtBwvAytgwz+0A(8Tq{lw&d~p-Xf0tsq&!##3mzvO;7eCm5&wmzymlry}7AEed_O zYBy~>8%2{Y>iSA(%lDiTcurkB z+g)3i^wNm}#ky zte;8T<^XkE&6+hM7EH_yAq`MX=*uH(_CY55rWtI`c`qDksbw}7(72fY4PbJR&`)Ir zO=U#@k)d7yi_t*V_sYT(hO@-N`$Mp4#!2;JYWWJRVC7Gpfk zVH0^9gZV?XcEJ*gZFk$nZFB{HEG@a#gh=&=Dw2s{jMz>D;qgWiFlkdiNF8Q8boI%O zBT$8}$0T`JKa+q`))A@tGMxR31@)*aw;Bu2Ww;fjS;Z;*^~B`oE?u}Q1$B|yWwH1p zJs2u96U$v<@h3(2I{rmY5p__PK)(4CycgW=*u-7!<+?g4Udj}T8ES+MP6smTJdTqk zygT^jcf2c{=|~M&gAiftX$0LkqL@IF{Bmp3s%c!Zyj24_9I)ZClZ-1IEQIy)x5w^F zh{HL$nWP|^yolf1!*e-Iq;WpK(joeNTBr?)YfBr;_4#GaF5aR)FjzoWa?+w`)LCUs z2qWVT-C_M?bVx3%RZnLPvl);IxfCO%d5}DBV+l!|Z3(JlmAIL}4~D{(&&`kjbo`3W zlXLES53PFC))_yzit)yJE~!Au05E|0&ubh&bst9YAwJXmeY%z|r3i~@pG z?mUWu+fho`$me}K*^PkzN{Q)w(OvjjKE3rx^SJPm$#4H!E@NT76_yiL?D+_}TCYqp zIAm&gD+&M45|7-Oh7&)E=uHGBIlA&=3MF)T>!ngVRJs#H?oD3pv+pKh8~p+oTzXNz z`FntL{T-G@m3mqVQz^o)`k{!O8n{-AO&0$P%l3N!%b`H&bf`M&xUVWf?xpJ{S*hWi`$em?6=lFv(< z4xhIsPj)BckA1Oeki)F*3+OQq&h^Hs9Aj8`2|Gqxz(%;uHnx9H%`y=gmLNml(n!-f zkHoK6?TK6{aDVVS zKi_<_1%C-hA(n7e2Qx+Zo&;l4Jyho1$cfP0IYOlusISPkYj(xXEj;FI?mboroPhI` zUc|eUI0)#B0DoOFX=R*Z&^DVxTUeg#|G@Q|=R=abcG05ytcbll{%f(Tj=erxVLJ}V z=#b6ZJ0RQX#l~->n>&8pZMv;}kTwvI=6wETai+6a{~DcWX$OZa`p57)E$KD>?eW?- zhO(&%>Wk-A1|+Nf>06P|>;b3#7C{&&1{52<9#r2?b83`J+6x<=E?|26&8A9 zlX%3+7S#&7AA61wECSjMTD8QxV$#CHv|O6;3rvmqHJ*y*Q<#K7i5IZw=%{54|~wQep_K zUwcu7DKH-?@-~5;eFe*0N)ljuM3q-|TY8DWIy+d)b@vf=@2<N_E{yXpv^5*nHf=lX+$)Yy50G7awKo=Zy)y$L`k$8G6O!u(Iqp1B ziU1=N{|w-mlc~pG(Q!n=9js{PBKeoA_S} z-TpZ+mVFE!mTt(>FBq$5$~InJI}5z>bXz@jF5xez5&#Z!#6Of|kuPJpWsK71{BBS2{`pQF3GY0r;L~rZoPH+tuE4)Lak(}9V}51U zyv^@EeLbjkv=(1-k#X|1(V@q;boG&WxMsZQ@`3(o)IFNLx^+Qky)N5*mAX~37I&|^ z=yv6_NEmE~C+5lR`)X0Qt-bi|rMc?L{tf$IANxOHSHXIe+L1CqKr7MzSJ)Nv|G=)2 zbnVv}P{MA=ulPlJ$RmXb@QG9`F}2(oWiR-eqz^ER5J%H(p_1 z_)mP}cc$#%3Y_rL7j#xI2WsMR)RZ-Ey^`{4^-~KmIM@Gl5TsOThQ-MgX1;B(H+HLN z>oS?)5G-*C7c4Z5&eF=NM!FQgyaGxk66FXKujqB9*R=m#L=d30+qdCZ&oo;4ZQgU z2k8n2#Ru#&s+;-zElS>Bo~Tt53vF^!^tRx)Pl}h%d$#aH00YN6jMvWFXRhLqO~P}g z+0Sg_Lu#`=c-f}XaUdGzH$3SRGibpHWr!KtPlSKunHYoC3M}`z(RtVD@s2%h4i=8w zQiC(Rf;r)s;U6J%IBjkl)Z^H)N^dp#XZcqp1}jX5!6A<%B_2h6IJ#iP$7DQP!tz-O z?48s^b?DY08~*z_n$ZW6)hltQF)Gg&aRdFptXfpHVA$$~ho*Z*s_iX5WvPL6L*Lycyu=~2i-Ph+*x@$qeb1KM1I#OrS7{2i-XL3RoW}TaqLDerXg9zoyJ~VZk zn~{Kgk6|1Kb_i`9UdYYZ0kj``veT)5`>19?GcmN^BX8maK{G+LUeLnKd(DJj|3Aj6 z%Gc2OVkF^8-||JU2FCe(w*nzTvt%2l_p_2mEcf)EWLiO|K8`z5eeH?)=eX%@IpGe&n?5HAgGW zHbtg*ey;3IEcttl5i|wf?9bcUhya$=jh0)@QGYW}M=JShgF7w1gfuqZ+vJ=Qz3}7% z;IyB%IDOs8{$?EA$?@i{_Eh)P`$F%?T48B!ko7Zjg@A&^8-t;OMR-E11$sb}C$vhm zH^gNJ4rbIj22*6oAT-g77?ri9P-}Syzh5*0) zWbu8`GWe#>lj}@de#0=Saz}@p7o&C{=4;ZhG%~ePDTmhD7s?W+y05du+naj>;NP+_ z?%f6Lr9$(EizSY)?mcJy?7Z(KOU&r zJ1&p1uoUc>G4L(|%hc@+-)&bI(O0dTNsH(iHvTDKfG8u!=AD zR&C1RC*>-TY)3~dRJyA6Lr9Pye+BTY`T#sD69j#JhKO)@nEkt7!5;4b#FZ@k{>LN1 z_v!DuO8lXkk3I@FF8!z-BXZ?3CZ$J4w^n?NF*&n@^cYm%xUDVmu!avF-qdWFX4Spu zOOul75&4FsNL5(mjZ;RNPQ7?mb?K?2Cc}F|-jx?9UbmLunUSxjIVD=LZXafr>XFoq z{Nig{f@K?%ESsWSjpaY}4&+3QV_j({>0sS0PqWT9nQqsJ_&Sq?KWjyw$o@v`>M z!4X4h=-q4RKW4Mn(|Vr|UGF8q-b01foNu|^ocS+j>>rNr(>?F(7hEq^y8G1Uhs;sE zRdReqr;F!@gOQn!!jV1W*Nxu&a(pQdBWw?_uC=y}1KUGKY`n*Ve1AHv(OGLY;mS z56!y)M&MxpeRx}Li2FJHEr0wwni|Byo^DmWNZ#)cBF;!_H#tiQV2@{@CUx7+ih6w9Zwp92QXsTX5O8P#dw*&9lb^WZB zbE}@HpHpvNVivT!!6`GAt{bt8o-KS>mgTISPio`A6=`zZu}cj#7`f61{Sxt2PY*9} z(Zv~5Jg-2xlb?2QnLnKJyVolqDyyOaT#67(`D)kEmmWWaxLK+b>F`s~i5Wi?m+9k7)qgYD2$g zt7XUj?$6HWJ3NOE00h`>D%z!`PkUlpxw96-ckF%E(;xrgYBVg|lQeqaJN^oXUUY&t zbyQJ-3BWFo_x$?#jK6w`fB)2w{<)o7kZRWuh#&T6QO=qAHC221^*ngw<>=>ATQY50 zTXJ-Nd*7USIvavJ;)VN_kmy4x3`nd$3j>&Q!jYV>mw7s~HEOcmHUqp>lDAR{9jreF z`8F#&g7IimYf<74D!(6={QMW#`~H0Go%U5pPA-mqiy1U%wOXvL{>=b|AwpOCVKi-oZLh2d!`;{qnd$9~uVYDGR;B9QxOkJ(MttA&0n|7e?JklWO|Y{ve5Q!kd{@&YA-IsGFr+&oWB2mSuWGW53#d z-9kS>kxn*Ps@lvZ89q(4bbzWvvmqrH-PNi&EYV`)$cb_XrTXT@k=%SEGnnn2D)?$^ zL74CFWcQWqKfd#Tlw>Lx8y>?)@!YGV_GtFHBPY4?j7hz6ER0**`O!}s2a6M*ui}Vc zie;-*uxKCnUl@WhlC${sZ|-{X%f*cmltXAdY>`g4{MVjPr5eOaCh1yXR#HXcd->iId-WEErrG=RL)i!kx+%9 z`edb(%E#3V<5cjlMYkFCp#@{bUMZD<3zZQGRBQh^&d>B3rXU7l$PF5( zQtz>m&=-=(^Qx{ng4R@&UGa4XM1qyk-}fgQUVHVk2pM-{Mk{r>+3gHqO%ff*3IY-2 zRY-GTM9ldi*i?;&QMQW{CYG%gIRAlc0uWDG8{nuk(gV3Ngw!qp%-mr~Y-{bRxL}<_ z8@VRiCR#W4@Rt6}zWVW5Ctp0#%Vx`|kd7Bw?w!ZoOuWI1nC(Y$`j*ua#^O8hok!8k z5s?aW%S2MJTn$CdZ1RWX5H^8G3aCeFMzv;V>V;6YviPabLeYrQ_5J zGPrv`C}WJBvK4V#I<&M&%~;1XyWx#Q+?XZepKA7z+)0YfYRQ^1pkP*j)bO4kTto0y za)JhN#>c)M2Ye(4(N(Z7qn1H_imrZi^&Tx(h3LCW1GQ8~i-eYwci3HvUQZxY zG-&HpPfWxyny}xcI!KmrQzxtsa-WWLYJ{$qruc8ZSB25IAZstO72b--`INDmzi*$% zi}ZmFu?rf^!T9nl`SrL{G5Tb8Wq#A7h3C>!Q=m1dKE0TVQw?NH!@R*)NOSC(c?EKh zif;~NN=Ve0lJ5kkXbg<2zh~hO2BgWTd9cWeO~lBmdC}x-cz5S8YhAh8H*0y^#yZJ` zK(GwLrb3K522{uVdDo~sx6)OG=rU0v#vs%(;t27YJHhJ7GP}a@7N-uhi7R;LOu0i^ zj^B01{x#y!J#T!6^hmcVsKG)0R#$`m9#O%bMw-tLPnH~A8W|!(;iEsps68Uh+t_Vf zIbav%?{^SD#O$SlHAp?sZnwg(mo0|NG}bx;3ddD+T2Q^BOsAD2{b{Amt*KOwq()S} zAX++Mg)=H#C3S=ROs{a3xPxCR{kV4f#bv9~agR;3Q#B##7Z%%M2nI!oyq+5AF>VU$ z**-_5W$tiWx!9d`Y5e^ib$Ezqg zP7TD{$ZJj+GmheWdC0#>t%nikvZL9-At<9eqoEP3nxRqC-^DGgDvhqfSyzliWEhCF zYEkUr>YuF7;2#cjz8Fhpu#C{jqst&T3^nZ6506oQ^^v2&dPeXm5r>#OiS(5UxNw+4 z5s#Q-x$U&MMijcaK_OoTFOBsWJhcJws&L)f2#xq$k-@F!(bd=@VIbW~A>FnC4KGB3`m-o4-QFqc)nzz47tM7cVqn zX@s+v`+h@RR$E5#Aft_m7J`N_p%H3?jkoHtRZe{$r7${vZ2vM`@Rp`95c^ADBu4K{ zWsDR$HDRT}|Iq(5J9}rx=xFtiAW>-$Ceqy<28oM5OB)*xj+CMObB6C2f4~CBv_+5R z!HVPhH*;w2VXA;8;h5lxlLC-2POR*EClie^f$f0rr1S6*iH1SqajjKl*ZOp!@$^nk znp5C9DqpN(=YrW%&Apvb^Th^R$}@VUuH~fY@*z8xTH&&PrLLUFa_VhH|KIep2sm*V(AR#ivhK z5zgoOCMtbwrtTJe15huFBBkLynG9!>JJ@9%l1mL6ZbK2HiBs-?`0x z?HTC!V2>tyt^&(`7>Dn`z1>idccI<|#WDXa^7&OSupl~F7OP*f?7-W(2ZF5{L9CEx zzJg|Isw+I4y}aJgy6olWbcBJ+#%|W%)P#LifTVg1F+sA6IUy*pPZn1|12PEf(`M%Z z&M23_cvxlNIo<$|!D)H%R#EMGceKgmJ28Bl{J&rO$Wa1^9|P2Y+1?km zU3VH=mJViaZw=e)8=y@?b4;~y5jnQWkoXIs`GJ&=T47Ksjt6RFU-ZVI1oQaOFBXGq zs(6_yc$nI_z9}^Wernu#(krB{SNT&6gpE1h5lVP*k=Z#4KVgiB@mUsJ0xyL2!M&Sr zt}QE)8lF=}_RJ3v!3m{oI7@y6qW>RBLLTx0LOH)j9HUNP@xHMm*M>>XTvq`4zo7bk zoGn;LARVuv&if^V=D6KV*CkFr(89e3%FBRKluiklqOBq`bD5E?>g7vb&wY^T8k3la zN*L73V0$T$$Zq%^+rnPfe)ho=2N&kI$PiaXbBoWGb#u+T=kdTvQLx&Z+Y=P}J6j}A zq_EQkBK-O$NAI~&tWRWK@;*QPctf1%gf>ZjhI#u_I`3}jl^ufK*>`N3jgfY_TuA)1 z(R-y4abri{DBEs}drrp?_(rlzhgJ!7f}fdrDG&eoa+rvb{oQdI#G#!_TOE=aICgWv zzm=5BlNKCySp9ofYZpv-6`s~6u}#sUGYWyifk1b32Hg5&O5}#-*q%im-tKi)If>b^ zwgw3XOTJ_wW3#82)^1Rw-GlcAU^^hc(g>?nc}WjIzN%2-HTbDNNT|phuhAfp8TW|h zTjtpcb77^2oL3Lo3-b0HNR~U6<;aoN{xEE>Vk@j9E6<5+IRcmJdgK#wgS0qXPQDoo zS5BBR@>Ga$DuIv6*Vn~&!%qO!x7)NS_n3uz^Ht{4MuR^`boVm@hu9FtEuprn3JTBG zm`T6hEQ?D6bz}WSM0Rp~`31aWAWPH67Y{l&b+nZ=0c80vjtQ1}f!ZGC&!iF?5U2AR z;Q!lZlXFNfHVKt6N`dU29;7Ugj=$E`&{CErh=%J(yv%C`@-j+=2rJjwTMflJ}w(Vosin zddB*m0PzwXd)(@7cP2~FcEq&a#c!6lA1t~ar-yo=SkAWSFlE=Pk-fOyr`3Q{)izJ6 z+-hLrjTJ^^?9F`HMR$Zsicw66BdYCq%n=k#sf}~rReI5~*#RCoIsE>hE4&b593wkZ zY4uonZ<)L-Q^-cHSw~M-+hpIMsCvd9Q?Q2qVcf;kHoB2INCzcE`adm6HWu3QF!@H1 zr4tY7w2lI{=d(D&{=dSYBEn4cRWl{g*jowxItt=pk>pZZ{C)4~FBDEk*Bd!OCl>Rq z-VA+VTSH-O6>Tc|N|;Al%fP~vvN~A;=@XQ&sr1pQ^k8oXgoW$lL{duIwt2VtoH@Z>yeE8GqEg3wEaMGjNlN1IsoWp@p4Zmbz#8- z)T|O6);Pf(fh}Zsh^r;3(zOQovIlx)4P9aD(^FG+My2w0$@ z9&v06S{`@G*xbh9{p|y4mv_jIn!i4q(4HJnIF2aWf+y`u3Hsbd-3j}7U^H{c3s%9l z?>NrK8J`BE$kadkN)TkkMkm*Jaxa7x!T;1DH$WY_X?Y--l|n#t!yeI%Q7VjxSI>a) zWdqXfxo-~>-%PdN+{ql+Q1?Uv>BL8jGA4d;WB(^DQ~H(cmT>pv6HNBBp6r>^UZ

z{nCkeaU(u`(xybJj&R z$R5!-e>c$z8z)UN&F8(3AvQ1X$QLmXFt-Zo4#DI;Z9jrwZA7VF(sj+|g?#Pb8jvb% zWiO(sj=xeX-fZbmPkFG0_$7A*JdyyX&}g4td$nwpAwVPwv5`Y)o3 z5+DXpsI4@=+%YnD=crC0U$T95+Z3;nO7FH!PfBBEAutXe15?5pJ_xmXk~$zT8pDD0 z2QOd`8#6-SiA?>q*9kL^`I~|~g@NZJ(xvT@rItg~fykB2)n%5lqS@v%ETb`jpWnSK zp{Ox^u|7JBK_Q+>0Pt0H>bwO8N|A6UCtwL%4o8CW+HyqFC7UHk9kG>(2ufqCf>V>X zg0*seFyZ0EsoXw02Z5J5jrhsk?h5(W&*bd(kK2owe-yn`yKyC)0hJEINM5$TCjw|F zJPAxXPM+5T)bMMoz9!+mSYZz;(`WC6&k9W?^=!%UBXzTTJYs-;uDXuA#QxPyVcY8L z-SSG{bLxX7N~ao8w8v21($9aU(yu-O9vT>Rv<8uzQ(=0?sTB#8zyh!}iCMtptSR?! zEcS1Q2b-hemo}IFwFiYqyDC7>CvNg#>v#3!3N^qY>ZkAE zAg1Z!`;xb2v(Q!oPqBSNWJ7FYR|g)ZbuJaU2J(Qkf{&6v64S27@+1?_XVKUro1=}a z6(`u;`^ywZ2f4idELv)~zgbYq`Bzph0BoOkiQm_uN4o->WTrP=3#e5Hg{f;ML3$zS z2*Wy-j>imfwy9BNVUO5TEvQv>=5@owr$ls)3!CoS9a~LE5`X}Zw$v3#;26pr9C&Cw z9}Sgg#ru6y<%5vCbP3Tw!qw0>By|{snKAfeG9Pn{^@!%f$Vf@XxoQX8EFu=NevzZkS9`ez;r7KBHPlGe;!Qi z_aU4Bf4N!eh|=k-6%7s}dw6%eF~a&EEFX_~5mj?}uW@QuOW!sgf!3*}m;I<^Kog=#TzKvV!_6((CB7%Ng zr!t1p+6xT&(Stzee2Bjp<+84!Q#v?WnXW*iTUmn+aZ3FJq*9rhh{>K5X?Q)btJ+MlLOQz4=_ExG zEwC-LWsDTsaLRArb1P^v|K5cHd=m?}KwKQk6yElMM<=-Hg!{G77fc~%KF;%gsYh^n zZPwc|5as;#g6O;P?J!*eACMcp;YKZ=pkuQ;L-6rN9W);*GKJ)M#a<9AdV0YxILQV% zQ|95=@MnS3N6;uC#ZY3wBbE1Z7*&)8YR(IQa4QjZ6NSnGV=C^0O{(Bm^B$NsC{gpT zV@aZ(I4%DcgTnS0tK2oaZQ(@T*Acp=-Am)*UyLFMI8i3&8wxUh88R0eFFsosD~-96 z%)pi<4tOB!6`CDx6VRt_Ctg`yFpF_CO%TC}UT?K+nm)A_hQBLfe~S&f@!^EHa!E|l zS)TNiZF%T^bH#5tsC7fvGlAI5MI;dW_w+Ck8AJ4>I$->L zLdHZPby)5m9p`+nWtPHUwHX zL zXl{+?rwv9EC79aQ;tz`>zbhJF#I$M4(;6~H5^Dz07mx_;4Ced~#o9HmP?_#jM7fda3=yBISy^Q_+ zq@J_r|LzxCmcuEh4g3_y*Ih!Jn&P%cywR*iW8tLj#k0Iso*m&77IJzcM5c%xrB+?V zs};mgpr&_tO{&(aH5`#Aj2JY)a;)`jFNq%w=q{L!ojMI5Banm%nMefXIDj#jM4D_f znIZbSZ`D-(nYyr127z_#AX@9_B!#K(-u3OBVGL}~=q%I4Y)K$sM{G9U)LDv4khI`O zk{rH5I`th=52*Y43Hip3bnzXY2%}cZxdHjYpi-Nug6qelR)k5d+a&o-)rz zg7*b_S)Xio!S5QAd$@X(3))lsBeSzuiRH)V_Nu9GMT%g!Dx^Oyjex0syehImXm!CKMw*xkQA!*=boOv^!U-1X z=>I&@+dy{a-IgU+k~c|NO{;9r>T~2Ps8Z6?Zs;U(JQU$#_`7B#KiFt_1J;lM!G^r{a(bbnHqJ)gto76>;PtnRq3$+{6?+gGUh_9J-_?TNC?QuId==7>1DcsGCFSGz z_Gq?M*Xo64HIE?e;!d=h8%(u%wA_)|a`dwTnGpdTTX?Pew2Z-n_2n^Q9kt>&TnO~} zFEr$SjFR+d*Azo6W8Gn;QF|C<@lF~UIaPVaDI6(Ld+AlpIV-i0RnsY zPQDxfY-wA3if)n3n7dMEhz`0JcY|#mt#MLFJ4}~sb#FpVXk9IHA0d@EiW{PPkkxOZG)j9L^}mz9JI{pcIXlgiiyZZTFuM8H^naAq|2i=C8@+7n@rq-g z0{wJi!Jb?x7&c5>gVKB_JF%M)rO*YGreXZJ+h!+6xx!{?9qOW*<2pMT{vsz=MJiQ4 zGwQ;X>CHGxSBo&!8AE7BGfEk5C8QzN9YcbowxqAwL2C5e=YLaZzcE0-q-qr0=S!JD zXgGPkzF}>E$;mA2q_r-M;fw5=;36gc4KVfM6gND**a>Clw60aX%1Y%@3)Ws-V~IBm zhz6}He}KO-#SDv*Y?MQpPNl74LNY z>tu`7dKce$RLvBlg=J-j5qSLEYVHNz$0uU%L6L#oX_0K&BGm(lWBoa(_CLPXTSrr5 z5#i^v`B%rXp6-vy4gN-4a~s~0o=)#%W`Dc^NH8AuW*lJG5L9oGQx+UKr_dW#xks3= z)ZH~`vSlB8Ac&~~Kvo22C)wNP8Y~LhV<~g3NEaeH&0~0f3f>&J(b<3GpV_V%pS^gw zOUX|;-aiC~-_QGJ(U4RS4j%`YNX|(I#h}9zXWtY8)E_RKKLei+z=H~0jU7lRkmgs3 zP$qf=QF>M8USsp~RCl+8_MUYBPGavV8CU|w1Vf8JL6_B=j{R94_dM1at4^)mvFDMS zmI$*0IGo^xMN57foA0GbI*ULmU=E1=i$c{n-C)owN zO_w(fsy)-DOwS;V^zx$VbwL)p6Z+CO)y4 z;O|wsu0e$S+pw+Rlv84qsW!+1)fk0<743;C?}isal-V|Hjz!PfeN9sy!Lj+BXeKw* zr(9YpYIHon=tdGkGf-^i0HVQeAQ%YGYyuC0p!}sXoJ{ECIH`Magkboo#)-F8r6qP)lTC}h=KwT=-TZ=v(xZ}8rT!S?&Y_bArwAbA{Xn9HhE*dUVX@NrexTvgDgc-vNxBP>t9QWD z*`v~uX`4ps=_M_uK18N9W3Uz%@_?GE8pnpLdLM#YC9CpKi@qa;Yj?)}D(37b&aBV~ zvF?vVnbB6o824p;c&YG`bJUS4djV%tx6@N6ge=lf>c^f4W4m7VnXZn_AH5p0rp7!x zG6xp`3zl#_TQ)r#Q9;K-77170t^mrBn#>^RoZ_Uq7vg}Xna*Y0g3L`BdmgVIrT z0vUK>qcDG}{7=0sKC~{y2>@k`{N;sCUeU}t;{IoB1PNAHb5!#Xa^y^Mn8D~hmw%p| zBE$gax#xdCEHNe^#LCEr3ATO7|9eN^BjWO7krUr@ewH%}CFb+b(B^x?$5BT2%g80q zkNI|zFcp5UKnDo$*PCK3_0sqFoxL=hDP(|4Zf3Y7gi#;H_owdR*q}AG5YUWJCE11E z#+coFGSSppNQoVCV zwJuaLxMPVj3p~Q#YqEnO$T|bXe3?a~*M{>lgt>NNef_5ZVz}rS-sMyD@SR!cdn_m$ z5<$h{jn!AK_+?sD1@m(kuac1Zv<_8j zq(*G}0AyJ%#u@zP)j_lZ@OJiUHEO zRep{wl^MPG##ycdrLNK=RrrzQyIGc&J_MvEz2>rq;F~;)D-&jkErNtEaoLBtdWDPIV<@R!#G;(ztZP z?#$YMa+E6b2{Dg2E7_<3Iq9*0cI}C!w(B# z6Cm+mzUFW@xNffPX&lom*3=Iiel>g$pLc#Kh=4SV(hN=C;G)Lc6^3{u;SgHG2rzSz!BevIRp7 zD^f0r=k&8Gh6y=d5Tadg*Y3$mlH`wRrU;7I6fT?Jn;;k(>f&_A)%B0ge*4mX4S6xz zaZ!zP)6_rwTEsEBGhot+08ANpTxI`orZKk``XY`3p^Y`q^LlfcqF*%-aAM zk@l}=(SHR{dMKNXT->|=Cdwo- z*YH$|R+6xDjoT94{QS>C!xf-~@Z&Y@==xxX@QYely_73a+{F=@KOG7lkqXU7Hd>W$FMRgK@w2$7ix;f?mU8Q*2G9{^bY;kGZ!$itt>MCPTL*F8Uc>V7Fum`if< z44K)C^eo~gJ$g!tiK>pMRw=K$ZHMOVIJ~&*1d(MQ>zpI1eUIv=cJh|S>iB*KZYGBL zZKk=!Ud;Y41}dY(!g+bEC5Zz+NMq_l7G`);Bm+C*KqPJK=U`l5v*YL51t;^g3r6s* z)*(ji4@BZlLdFgtJm8^tpr{6HbchX}pA?7UK!o1T^ws0G&uD_pPmzPBl!RHG+WofB zSF~QS@K2KgHi)BgWJCHzQ#3CUm5%#tp$=R+kmXX< zazmXeWzv8q?f)Iv5t#%U^ykQa)wI#pKPk^a{FOojn}&1prw>-R4k30;=0gR(?0&rO z^(x))3zz)s>YESO;g9$;V3VygyV}z^TcJoUh=n$L4ep~A7erE|Qerzx@SQN$`F8O{ zgFbDs2OAzNHrn&p5CjuR<$qKJh@;s)t6%|bF@T&n4Mef<^t-EA*>iC z^@Gg;p@|VmOri`})+3qHx7veBedfMdATO@5Ft8e7zM~;r*pj(=l{5-w`?y9` z-Xf(>TKdb{8E$nD&+8s5p$R((vcCKuNR&o;)ef*;vYCKW%&Vj#m-HkrKoAlz(~^9c>lmz16AnuRxF=sC&%q<#^*Jcoum-!uMa_N(}a}}G}-!1Lsyc_MLMOwys$e^ zavsJu7gVc(V{BzP2kc>(s9*p_J|TlORWWF#B?FQ!6fIIl-#l0Vg==lrA|5L&NHT4; z2a#)TX`0N)Rck@EJdGkR^6#(4n^@pl1zYq`Q!35WpJ5v8BHQ3ZP~f$mE8blU14uW4 z1_j%hXk^F$pXgtc2~Y{SI$y&LK!@U90YDdd#QZWHT#Cc1ibL;!g~pSTTZjkT=v;L; z(_6AfVOx?3^Wn=di-8pLg9fgkvLz+9hgCFYM$dW7zjr>a^*tYJx{tRrqPve1UEeqvA1-q4fzy&j0q-TL47%`9@g1t2 zCVpXe)yM`#j9VOu6nGzo!5{5?&-4k4J9p3ncaX&G8f!IQ2=!qcWmV$gM6@H_dl^-$ z@yrNW<%zI`!?e*yr@d+8zW*oW`6g#X5+`JvN9Us{`%bOeM&Dezt+9akh~Kbs%QY!KDJ zwzyaDVrUei)q3lGe3Yh8df-YhZUK>z7Z4e}PVR!fM!GeUAfd81Qj=Ib6$jYzyc8>A z6;WyJ3~e@1hpRmm*Q}yR(7xTeEPX(2$mO4N%ogXg5?hez<-cY=)p>W8_7G?gyioVk zVy@oZ$|NROFpyeg4!NDkJTz#&po+r3Tc0t0c^AWFv7SI;-*C0jnZX|4c-S#|um0%zx1B7ulatq_WRY7j?&7)zfII=^qa^~+YtZ9Np$Ep||) z_P{+v@o90rLYUN(;~IfM(BCXTg%vXnD^T2xLQc|bXBa5(`=YX+*0kt(p%jdbss639 zqsVWh&TD-lSXAe|`Jx&SJ;zQVQ^U%`a2p9C={l%Fl0$OFG(N)~JNk2WlU8Vn%SCAC zyLANL_kU2f8MLJ~g8}i<(36A`|F8KfXN8B*sysy@Z?S{r!gC*6cR$Yc^F?4k8|*8# zduKok8r-7Z%aVJbynZdVrUd5<#kca>+AsBYy{Z>A5&jFTYXBZ2N2&^I>w8J-j zkSZdnz?~qV%weE>#kjWvhZDHhM2-C$635-+fCa1)UBfY*F#L~&6c&DB5_^6|*Ykxs z-gRu9-v0S83_tL`IWw!39Ud0C+G02>UuA64A}hN%%l6}puCfUx_ZBQ}6F#vOJ0$yY zIWuO9jhApfZ{E2TFrU!3sS|7j>M=1oR|5N|o!TP}p58rcimkLSC}B_FMbLO^j(RWy z!zi}tIW!ry-F`eld(^FqU% zGq4%R-_xasf0uPT`e9H*$s2eh3+@MLgFdG?&8FnpyBk4R1_TAQjI&c&y8^(0C4`BE zke->#mW|6Qv}gWQc{8FbeRXyIXhyy(0l~QK8#(cbND4S(t};V%1T*X`v>sg#1j3I^ zimj6@vIT$Lu&sIAIoRmm`HyX1M0k*R!gRQXVufg)`gFL&2PuL;21SYAbZCd!)#vkw!Q$snZ)|RE7uv#vM%g%jWM?` z-*L;mPuZt_CLE)E-pE@u>D{0yE7<%f1)&1SAu@zWJB1}374(-QrLUfbfD6vw?)9MtFWfBuHB-@R$5re7(7(e z%*?>ltII_GG3EGG49%-ktLAi(M%y%1LCBD01Z+p>kv)c!Y}dbN8Q(h=vj5MP*|5J? zxR5oPk_Lqvp?iXXV-#UcQyasc7aQzmNHcZ@ZQrW`_gXo;M3Zx;95*8wG!KA#^+JretH$LoI3e)nHcjZ+!>0zb9_4h)0 zuAfG4EkAdW6|x9qLcS8i9HI*K^b0G7DLtGQz-MXz^KmZc-DdGuU-azw+MR^>#9}3P z5Tn2kSX!XznS{jOlbjxeI2|ruqUR@}(i2TFKxe_LU2%8mA)>$B_l2m7l3m^6h&~>U zN~4Kt)NITI3bUjr$&0!;krE3vVxk`a~JS6?+LcUWB^T>waeI=zR5IlgM(kFMT~LhjxGf zmxu`EF=bw)_qI~wOQ%yh2CC@Ei=I;!CLB;`TZd*1l`46R9AD9fA$ogBL6(4S(e}m) zP03qGd-R9!%_Kj?3uw;}lW{iEJrQc>D`jcd_}87QF{+&hmWL6|%y69_+B*BvYr7=s zVa;+!j7t4^^aCHUr#P}grD476<)Ucv*K!?oWic_0lCUPqOVTP{ZCxl~@`StyCCdz4 znfdCDJ7^vov=UtmJ7|xZ0`nR>6@T_+1(<-~N6-ioj{jFQX$-odgEU|Y7e4w+$;_!T z*N~oEY7`rf9{5j^yk}H-kzfyzibdeZ^^>D?iR-ebGYZiW%R5#z1k>OKim9!uMVEub#~~XUZYPP#!O6_i4sUTq`BHF zvy%8)uSCA%wr5*@yHf&U+CURLS|7|!>2A2p$^kb4H3(Q#V**%MJQqo@M%5&WSZ_44%^c;KW?yIH6{2DzY$eujJy z{AfHIVatfKcBK&^d-yReNy`H`lF2>k^6X##O588ww@v&qI-h)hC>(qny(UjKST2bE zt<}6>ol?SH<@qQQT@}EbCGit<6-sr5&`06Oh4o==B0z0d+AQRnFu-BM?3J}vdo-_B z74)Yh&#f9Im$2@8mU5!-xsgKEs0aS#_qV!plg@k~zU^zI-(0cO#)AUxdjsNpMQXAX zK#in#J{&p&ZnU*!32L3S=R<`X-_kONrVx-HqS`w7eGHv5NNdBvDSzGql6)^yUDW={ zeJ9Bvnl#%YrAJP3RRgeFrkRD+i~HbreN597&1EYL)f%D}j*GHe9!Ns7p2CeT^w+wJ@6?!j(CpMec#*&EaY6VrSRy^unzNJ)E= zv~XT&!``-FeGH3gj`J|EIhPv{y4!q5wky20p^Kdwr_84K%P-FUt2@qHVpnB|!9f!6 z4AI)G{xG$F-a&Zoj||1`^ftnxx(b~$HTd_T@g?K!R}%9ZTsdJue#C_E#-%Va2&*0D zSxha{5W7~+E`y10gRShSEd#Ic)Uc&Kd%O_A)4nf4dYC?;-vg&S|{P)ZDeQ`?FN zN-FV}*Fn>>OtDuh;uFj)rMn7%x}?;RZgs>84d(mzRvo${CvEB`jLP%q)`hWGjnI%{f2!v{B_@E2wIt+3A6EJ1@)gD{4EMn-ymn*T* zm~dct=nOcf62$_Y!OGYifOr>|^)i@`jM4`7;QnIewi9uf4Ngn^eRB8DG@2!ZyWSGL%5_%eP!;@W@#&AuQ`_BzbgGA;W>faj;=@oMFvlj=q~*Y1__jMT6ZP zc~x_*hP36nw zkI^Kgn#l47NeNEJ!jc9z^Z0>QP_9jkeQ$TPh@SnmT=nslOEMHjlk{u9(2WBqH1!-u zLUU}u{+f~@s|3UG`Ayra)OL+~t=yNj#zwgqmQFZtY=n7fZ)`NV2DzLfYN~V!x%WFx zXAJGN#s<0R<{yM1GX^aVeBrF;4F`s>mCQ(UBcf6S)PufUjSi5hW4YvQIfU{O!S-f^d^z)mlhd zknggY%7r}ZLQ%ZX+LI)&jBZxzFvoCRgdwpg@2*bx4nFPRX5Pl9*z!`)6JId~e-Gj) z5ztpX!S3f5RS|}0(x&pgAWwVn^a(+5P?uJ2 z20Q+ULYxeGCdJ}N$rx3F z>E3tgtOscapfqnrUIkAlvuo&FiS?aFuKlEgE z!+BY{H1%u49958%>^=y~0t4MW3YfGf5@b$=p@fiFYZOk22VSkHI0{R(*NmC^6vFX{ zES&aE^PG-5mvvvzRfmt87f>MUCuJ{`lW&PTsa=_G^GL*=eW68s&c+^_;(w4QHGB^g zeT#!53LKS8s@wp%X~Rp9aVyBKT)BUt;>Vy4XL|Kuo*G3m34Dl5tH_oPQqrXGQSbfr@KqNx%$UuV`Rs{j^eecr)~fbwN`W{MBo@E!1?IigaPFgobXhGz(CRb{ay z;hioz`fV=w6-D{;_e2na=(F_}2P*f0ARduG+g4x+gQRk*`PMzk6B?$P#g7bv_j8C6 z293HTHegatjZaPA_$KKp(Do+FBVoyRbjeyiLy}|j=t$D z&LN0jrCKBs>#2rSiNhy?>tI<4%%q9@-YijX&_`g{dnc_fZCM_#a_>Rg>jkKwjjCsQ2}&sY0Lw^-TR5+1^7x|$x$3PYG&`?rdm2U zrBcjX4-q7eu+*sJhy3l&H<>!YML%-H^BZTy6+UgjA{|se?k131z zfx{}~DH#ic#_>QMI5G{;Ak0cWkxjSR+E#c2TudeinZr)Az#PZzJLH=851GQ#j)~0{ z2;X_o!Zs(2mQ#wTdw}YCrVSU3glhO_p}XJhG+u1S73U$I%oX+iu9o;Zni6u@Q*gt5 zronD)X1y^LU$kNtZCkcVSGW$UVpll8Wa6+Iw(5^gE}K>cuhuyM6lc`B?g9?&bRi|n zNONTJ&i47!^*3{PeoMdbjYc;+8n+6CZSuDQH-bANr~A@8!!6%#9Ob0+V$+HCB?!4a z+)8f~r&tbSD=uM;5?&6_Re1V@+9kgdi1tHD z#j9Ru+ihO#Sr2KhNKAR6a2K7Ob1SfJ>6f0NH}t)@ZrJj2(@x}`0&FI^YR(nAoLC6Z zi>S<5kO+*kH@7BA>EG~MR=fN2V0CH~WPFv(!`CB3)%ps^wlw8Kc#rK{K_YbI${#_~ zlixPa;{lB3a#w87f<-?i&4eg-kna(Kkvtp8r^bQ8QoPE-8_Zl!>e_3@@}jHvt;JEe zy+Td&m6un3r~pnOZw~WFl?RE}DuRGrP<)Km^}DoQ6@jPsN^&JEQEj!{O__W4aLim5 zVqgse|Hk1S#hE!Tp-E{~~NEMc>s_WzF`B8wgCp|a;F;4n1%6<#I-Bv(F?jYc| z{#NsbB<{x}|98eETZ!Vh<}_PN`u*mf3!_kG>Blk_2+&7Tm7A37KXVI+j|LeS%|C#h zkBR)KdE7@%){09PTqR!n1{=gY3#7y;Lt{Z-j$H zfkw`SBh|G-6k#nkWXgn_=7Wg@mt(dm^Zqp75%sJtp<93FuXmCGU5<*!gBP?OBAMfF zmHAdCQ8ffH(EE#atFnQg(t8O1fn7&X`Vr912HOLkCnuIq>y=@b-q?!y>qZ2=) zaFC{LM)y{NDM2Ak0xd>goH z4s4EcW?&i%`?+?p)I+@ytjt?G{`vC0_xiYW+_Gf51hggvG${r0mpCPFIIJ=u1?dm% zK~rh;KNwRok;;7W3q%q2mcB4&-lp!0v@fp75#edXBw zqS!;Y>g|~{9B?Y|r<9uWeHp&0)sXSxO$3eh1x0wIfDq}{18mFw+K4ia>^P+Oe?&~};HMe2LsICz7Awp%eJl^xj2bZ#5f`;(_X##{uQF9h&C z)b^;PHvQ58%_^$~vjQYLqvN4N*xJ~vuY+*EJS-2A&vUfWSYFr1GgmOxFeX3D58_sG zDtTuy458Lj5hx1n{9b^Ca2Pc{A4$y3Ys`VtXCC8a6V9O{C1q{? z+#KaQ4~QdQ`?T0kqS;Y6N_FFkjDO{m$?8F@>ASaYqA#g1)y9{f?OxwT{{0?5qNr@` zlCov(_10Jn+~91p_HtgonpE*~B~zUvn&an&9)@d0)*i$7!#mcZoGQVps`g@tw`XNW zv!*INi)7Qq$S>FTGM7X3jW^!&@p^pEf5hzH&6o9IB6Z6{gMbVZfqeT zoBWG1|Fv9prui!ZmlLfA^F;vQ=<>$C7el_eJ#Ce+L1vtlh}YD7rl`is65ol73P#R- zuS8W?lp<`)mpCT~4&QYb154I;OgKyVYnim_fGopGTFV(eLgJ&Vq~tN%+x^z*daf(g zT_W{Me|)ljx55oyX5?}z*?h8(B^MQ&=Qqj3NMsXOo98cdZ!&8+-VVstV=yDj;LoB~ zdC7!Q+-o!#LomT{t-YpPep?igBa;23IT#~&_yL=#7_>!7Ram6)PkR2}6+FCHh)K`j zlcaq-$~wR8FvkhQM^bI6m)DW!)$I+`3x@_BDP72m{p??J%G{_vB~{pX_GbZ)R=X=IqtKVBZ3Lg@+i^=FVz{jKYiEgX`U+qHD~ir zDsEopIZd*OHH24qSMoMP9J*gZP3ekxA{24FSH*z|^-!P;qY$u945fpx6eZP#CnTP{T{BKGpF1eH4?1 zH#4ymCg~c4Y2Ye7xPBiTlWl&Z&0XXqV$A0A__#X04e8)bIJYI=SXNUZA}0AMAO1o=EBWyym&D-Caj#?Do33IZnXb^146#7K6XK zhKHYeMI2UlRlQ?$NfBY_hwyq0Dv&kEBs>@|h64(SW+W4J z52wC;F`^5U`NI=(k0aCr2iQY+CD0w@h?j9Vnrn-|VvXZ-UXD`WbzGH=2V!pu1Y)r` zmjEeD&zP03qI@EF3iZtEEwIh~@1`WJkoy+tiIkx)CR6xzosnr>gqTkLwGk$(yv@r^ zzrt9*^4yjst#)83J4Fs-0jF1v8Z(Bh6NhcH>Ldn9_-E3Uw4+n1K$Hb)5?^llo7y1- zhSucqI?=k;%+}uD6@w}ad8_alM|4A4m+K%?#XTz;L2jEJ?0|4TVxD>l@`x$EqetpA z3P#f`#U10qQ`e5x+qPlEK!20(yc+`B(*m35q2=KhlA@(QuVF9@8~}5}KNS5#M>MNK z%jzOAV>yEZ5gbh%xTPs!KWbqA5nd2|xw$Dx?xQaus}>GkP-lHl29@$#){ z)qRopwf52lX$dpzk(|Dcy0Y|<{s`W{Qp}bo^xILcw)-d_+QP3STfyt^B8-aZ0_Qp8 zL@w0OV5EhP4)cu&a5(wJ?3YoC9(VBUvTHDIzSJ2$$DJ5W$`hgBoS$l(-OnCYJvsZ0 zmJsXPN_t=3DFbh6Iru}@w+&9h#c@ZdAAih>hiFa~oDz;hzV5?U+=wjH(-hgf%hNkl zTQamEpe(vcckV2BMS%A)(dSIE$Z2-U4}>=~D6TcK(!l_}EpR+p{}kuqyRN1b7|oj0 z`YA|vDxLN8GQQrqXbSD($LntA!&Rbmq#$gYLQ3^AhdY|cVGyyNpcw_T)yYjs|LIL_ z1-&7?OrMBj*n^}Jpp=K)ToD9xf->=5t8?;`265XUPEiM8{`3V@$8bi>`A5yj62ryb z0sXHa1Y1Ak!v3Du^!mf|;}5JVAO@+L!R| z8@01|yjNYM@Cd7mHVUVla7_*^+AtR6Cf)^_rO-*zUrSqX-*exIXpIaGsJ)E4K^`qS zn*U{?_TPtJ&y$w{NH`D>+Aa_fpn1{1!>^;0o0W;ZcP3tPWP7aC-}~$IFiEG z6H^a&S&o$rD;CFi$B0nrU_@{(%S+SGS2e%p--&F5a%0MlQ>wI4L&~;YTbJ5HXC+2h zRQg?H_j~5mCx{}d*Cd>Jud~k8ABVRNOo~Ztj`>ZfgK?bd`kgB8Kd$!>8`wNxJHLIM zol2Y00;gH3&EP+=}nSe z+!e6F6A&nWb5KjzYTxR@;&TA)4LlrCM3eXWG{F&$YKD$fDzV|Db5Ob#mWP*cD{@n@ z?kKz^x68I^jA*PwziH*Uw6`PQRQ9JeC2n-|Tzrn++MLNzfP!9vrD^c>Wd1-Ivq28e zq-=LMges$g6f7}*`&tI=6Py0HXA~~yLThraC$UCeu==RHIkn9miBeiTIa-0C2ZcLN zef_!*_DywnevL!^2%2%oBtUOe{nbhT2z7Nn0%u4uS94PBuKKp&W^4Uev$)jlU|weI z?TyH_s96eDhJnsBke-z>EO|e|;pOew68->mU}yo{`j@a=OvkGBC3Sh&~$0FHwsI&mgQsrE|cFCnx9^=GUd_} ztN7)QBZ8*qu47d6G(i6y)jtmu0;98ZwqoQLbt-DDC4fGZ&I(?8&aeDiHfJ@)i^cld zBL>|HvxFM|{h#~?mb5j*uK4OpCkAp0NPEL>)lb!k+w=FgOkvw|!v0U{l^>=~FY$2p zR9_DstLa;f)oSC2tGnB(VckO{=J;R?Wq#u?h=0g^WmP9p^~XmNT7~stkxSGNXef(T zgLqZ8O?|+qw%OX;$ud)hD7RkpFas4QU*yhg5(%+^T@78M4O0KJU2p6VFP^gT3yP@o z%#0;}cOo0B>cOeIVdiFPo_Z`bn_dZe_4O@~;^VdA`vp=6)nR85^0Csl4N!k7ZFk}U zTq(-muSeguA={-2FNgv-)%6ID*RGK&Spq|8eVtJ;wm0XksqVl>KrhXH%Uh|Juqeyu zZ$>^%B;2*YEQy?-z;_`i#a9y7U>5cVOlaMq5TUV`UUh4=fgIlAyCrAqY^!nSAtcb- z0)7_YElWC|a@!e?op4yg^saWSH;%4?eI1tb@4?w+tY4pvOp|_pa9O%nyk#KT6mC=h zIRK&FK&Y_U=#76oH5Bd~M7Df>OEv3R~V>_SbbF{d_bLBH9nZ!7)4!2{L^LmBs|@*~ft*1?BB>K!Zyg1yL; zSYauCgj>8RgKtoUIlY-w|8muQEqpz)Sgsr#AG6s5g622V7mNL))mT`~7p)7Cs3gjk zeJ~=SeP_nfOEpD$-)^|@RB{nmId}T)&`HoQDUB3R4;%hmNn76-4JCQAdI8r3$*IbaC%m*eUs=cmS;ou`m}l^P1C`3{YfHF zG@{YE|4G1o5RhpS|9r8CF73Zp%zX_IHozc%w2y{X{6LZKiyAcso%meJ5G4;2!=TK&<5OH>l2^)v$%hRO)Z0I!qsmgao{ zSAql0*;a|h+C4696@0z=ycFkLBO5pj5o!-T2=x&v>IH+37SFxI@tgb7s5*0&rc;zg zP?+`8gy`8{CuZ$)T=0eu!?*je{{v!r)`f|A z$H>ZA<6aj%+|B9}f(P|lzOS5iK)WDDsqt|s0Y^D)M7q9E)V3h~6&5?nWn(~TQ`E7_ z%W6JW!42EdMGW#$8HSOHE<(5^pq$lE`>UWA?Sc-sMbs$NMx9N;3sdRHjc@fH7CTfz z!8O!RLVV@V;EkUCd{OH`B1_Me{YkTLLN5UtiKTM;bkYkiYyor0UR6!*N5!0>c<5HjgsWp!==3Wl{UZxQL1h{n2Qr z9&LpG;3^{CnRo?%bPeKcg7#>ul05nrFu^>mIfs`m0j+NT-v9db;C$^dY6AnwH18=T zWpuze;RD?yYg_s|bG9!Bg`6FZOWMr$@DrtaDn&ULNNMw5gWo0Shgqm7mGB68&dFy} zdVVK&jy{}Nw@r39=x@1Kh{_-RTHN|kPS;vaQjOpp`#c-WeR=d%t?40Evuc2qJf^7iIitP+F>=6%^;hC&GW^azKZrt?d#c# z!u6TdgehqZb-YvYY!TshP5U+PtDW`pF!sB8*S4|IXTcYXb?q4ba!Y zHc)Yh_8)lB+|a?qSlP+phmF}ku+dX_!ls`IsZ;$#pwcrxgoiOfA_=05nmS1^N)+iZ zv=vFn3g>Il`zwxc5e=fv!`a!?q}BuF)&Xd@IXT=En6Uvqs0nU1rWJ0kDvm%qOyHzO zHa=GY=t~}$T>tA=eHhsClrWIC0#4X|R(qiDl!^HRH17mQ9O;b@`eM&WYnU zxoPb-mL_UU5V(4*Wlpd{3Jtpr#fkwMP;g#~f!%;TaDnG^fY-UFZSBvSx!~f{MtJf! zQQGC2wWs){#o*>y?&%wjhjcm~krZ2NstYQKODPGbO?IvfXW6@26&9=^M6U%y-jl0o z4~R9;Bv^5X42-kIiMx5;uDqza^M`p;Wi0ya`Nc}s?e8tLIpQMlhvVKGwt}9Rv_j<|JuVJp}*$vI@1968nhu?$Ll}(tB`V zH+{g7@yc6tO0+%B=@M;`Hk;)p;MQKY)dZ$h+^x>iQ5O*|4u?t2kB7z|8F?J z@^^~!pB%6lU_uhT40;P#_8|Kjq7Y85FHO8e@eU%Ux0e4PZQeru{Ccz;C>%Xtw8^CF zqltMBJf}tSrOHN-IEYO&oz63hzquw?gBRXgDiEW3bf)7Mu;oUiXzg;Fsx1mz8Dfmt z4%?;L-&ZP&mmABP+$$NS$v*6?eKU8KYv4Sn0bkEj#)tZHz|@#4zoe6r(=pFA?0ZT5 zR{56&W90D$-1(AxqpIfZ5>tn4NeL!$ELK#s$o~n4 zUowS3_W`usnRp1=uHdkkbvZdNa$EfA;-F(|nva|FG1ilV#8W670{fiSq0@hYS6F9| zyQ2L2Hh6K=T;{_a1+8Kc%4lk^)- zybOH(&xElf&kKev2C&X-(W?j&t6=uW}c`_quU|=sm*r&G}QpXqcQ;I1M}F9F&lY}VuW9O|M5AH=iATvOm^&i zUn(NFP_X~zZ!*7^9$3l$Ux)$A|BAu?ih-FU>;HppQ*DVx!AGjO2X2-nrh7T;HFcPTZbbybpvdE?z(H9NaD)ZrQ5$ ze0V&M#8gzYJiZ=IKgKXlkE|_zM%z~82)w`B5)xhz5_&&7eBM8wI0YTHtSzQIKH7eE zc6)m~Ie51FyzU&VT|eLXeB9o=IDLA*OfPNKY;|`LTnhAfaT9Fi5Y%uI^5a$K$YW}F zy*%07yLYr}+o-AQ+p51VF78n$E#Bu`D}rHp?SYGLsH&_<`MQ&GFYUpoQnQQR>55ii*cf0yu2@g{Z`0c-u zc49cr$?n+uWO~0-XX?dIOyGkj(%a_!;P6Xl z{znPY$mH3mYxEf%Dei=C4PbfPw*rtl?pp%T822pzV2%6c0G7vmGXSY$z9|5WG2a9L z)|hV$V0qLx0+2fD8v@W6^$h@EjrwW=T!(yB0n7cqw1CupUr@l6fbS>B33wr*FF(jV z$UL}YjEG(bv@gN78_1#ks2zMSZ|@Dr_#VX)7q}H-?mKRHpq~@V317h`>tEvM4t;`O z>XQ3E73cxG&sMy|zE4)P{fB^bfSy6s;`Z9~wu0_KMdC8q_%;J~$eZKlS_?LU&O(Xe zB3Z9>+OQF=`kI61TW93xfj7d>a0sqBk3wT{8m#-;uMrdaZh$z0FI&fW`nrRkz?Zi0 z-GIKqUvc(sf%t&`mq703-xN_T*)Ndn0lKWqKmzIvxr}b0?)yI#0KW1zT-Qz=a=K<) z&SapfcEYVW62F;|*MS2*M)W`+XbJ)N`!zuAWJ4gI=Xh%emt|%Q$2?n`AT^{iprC^u z%@UNV?mAxhU2lgb;pD7cIn-@v&q0-I0u6YDJ|WyKs6&?K5BkS$Ia4b2;2{y!d*|XMdmUteMOhnaNuP>;AiC%CQ|Vi`(@Tp2~eOPM*L@DsK1G45gS3b!H=O= zQBxTZUmD1Vpn6RdtUxq~rhQl6DZ=#82*zT>&b^oRGt?co*q>Du9kwwGdF8Nzt*$mb|E^Tjsv{*d8mWrN_ zu80Ev>&pRPkovG z#!|L-h%@=Eaa#^Na`D;`{w8e09r)G0Rna+7;aTo62HwETz_)hXRSWTJ=Jl@Xuy*1G}ma&Kmwso|Z1xx}U9b%4K;-F{AwrnpCDa>`GW`1vK z!_k@43Qm@vzu2G2XFf74Z{#dmez8kZw!0PgtyXlg|7BO#s?@FGifCiPpY*dD{22?% zU*d-6=Ts$434aQha5X%d5=;veI9&df?n%41#^`);GhLVR#etwt8}_Yn?N320;?=xO zMpSrrroq=yfLb60 zGNf`Lz(p<__I_I~ph%6+b;-Cw1#y#ol+yhQ$bi`ZPWWW4`)%C-PeJP;r3!*hedyzVa?KkK)i_kDk}=Ka3&taKYoA5V*LRn)VtV5&6F+Vw_S zO?sO~iAL?4>}y@rNabXfTe*anZFI*GmE+?>zg0iFnxi4TH9b3^UFS{Y_%3>*f|+u- z%V;WF!7OrA!7Ts#M9%vK1+!eEL^_e4Sm=9}Ve?Rb=8p}Elaej;eGm1`@3~Ht=gGa% zSNTJbjLpK3zxtCNXFvUyLZ%_zCcEUC6o__xH9zNI7Lz?zU_=untEwPb=h&8l45<(f zPcCF$HUT;7gxdqGP1~-_r|7m46wod+gPtRpWaI#nZ{N6)lGhr$i}CcL?(P%m!!_L- zDaH3^i)BYW5*C>W$5h6PACGt>L_sx{X_HQT#V0Mn#rGfYWHemd0ETNZureMA{N#0m zTj`qZeTcF%Q8kW>%`*~X7BPexajrPsl}66BDzf}XsPveHQcU;D0mAzS#y+k)Sfuey z%*hW~lS%1z8QS$-c43y1WQRqW*@fNhI}x!?e?yQ@M!71EZ$RYEpKjjDHzY+3zsp+m z8r4zh9-d{!J1LHv=vCHQ#78mrzXqY++b;<96xaG*Y*FL9AFwdkivW>v>0Rd9&bWh$ zQ}a@}w>M$D3;12451gfWo^vp!%tX^*-U35W1v!4QCX@_JHNup9ktANVoeA~=`q8C0i~ zGLyJt0b>zI^zlk?+_V|5^ub|jGLJ;F0|%@VYN>ZTuwk_Z84O#sh%Kn9ZjCAu51Fe& zF18M{@``+EDY-J9svc10^t)%v3*hs(YMBx~c36yqHUdLE(HXKvmT^^SWiKdJlhDH+ z#aX8+s!yS3u;vBt2E@z+lq(gYl>dL~SrIN`)Mq{KBD`|Ptj=#gn* zi+1=RLt=~eeIh%X-ai6my~0owgnYQAFGi8SMmv#evRHyBU3tuHOJRHoMwD_&dFbD zQiT_}9w`}696*JK1nQuxAqj*ZnXos692ANtkVE_hPxD&L6$tF_5E$~my`4Je`O`hE zHHq9G7iFbq)vvnjx9?qlBy0rp>WJ}xc5QD#BF3ubUy;O`u6Y_gNbJpc5J$Cx@94%x zuQ~Kg&(;rf8B!?OaouF?39QoLc;tIJrl>&CFHlzL(PU@lc~TomjGFh%$77|*xUN60 zdu@+dKCby!vi0We6EY)Bl%u+#F(ecBEgzdr;$C5^>oIEb55Ma}+FHmxLEz@%o^tcv zLGgrZR`DT9nJd}eUg(`YKj4qIwc;FZce6UR$LI#(c$u*r12m!2IP>S8rg8qtn1chw z)dh#I_Z$eeiqJD15vLda$nu5ORRz48PQ0j)em?AsV%f2`XqKV1$A{RgSXJ{o`W>$< zp4;U{({g#HcUd?kY@bUJ-(Wf7+G@KV5Qtx4Lt*Ol`&j#oW ztz-}>0R+)si%ZoFkHfEkGsi&@R&IF&9u5lne*lV-E<4kc)GK)NFnU4OX7+4$ zxU^2I-unL0rZ%K~FUi$1ZHJ%zt^)g+_td|;bdQC77e=-8^12k7)=1`@)iyYFEyrLq zgyw{FyW`wTu-23vEMYlgGRv*ZOB0;B+FPsY zE1MigY;@%F{@Lo`N<>i|@0$3?AMyviW8a@NxLnK2)mB&Ac68pmv*UUi-csFA<0PtX zdLVGUydzGdT+*;wk46qaC6y5~b^0})lG@*{+sw(s4eAqpQkt3PHXsAIs2JH>hk6{} z$)U)dd8i8>T27xDDsEsSXsgY#<104@66Jj% zaXx5r1I9}iUXJ+UByN!FR&jShkWuu~OSMI)d8z+S;!jacB&We|W&iq@*|&E?(8VY? zMbqtz6rm&qr@&wEEt-qe?u;ihoW zSY&zv{P#rAatN1@;RLv>DI%yK5dR5^uZf&+AY3IB0o9OS0g5z3I1sM6iGZ47Ujd2~ zI5-flV2Ob1RtSMG{pyQ)*0)1(;@<)lsw3YHHIn!isIb-!hr(;MqTAmlDTIDjxrJMQ z{%|O=g`gEm2 Date: Wed, 15 Dec 2021 09:26:42 +0000 Subject: [PATCH 27/54] Updated file with DS_Store --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0767a50d..fa2e5085 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ /data/energy_systems/heat_pumps/*.csv /data/energy_systems/heat_pumps/*.insel unittests/__pycache__ +.DS_Store \ No newline at end of file From ecc8bfcbb1dafd24664db6429b9b77eab1a684bf Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 26 Jan 2022 10:39:26 -0500 Subject: [PATCH 28/54] Added comments for a and b insel coefficient values --- city_model_structure/energy_systems/air_source_hp.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/city_model_structure/energy_systems/air_source_hp.py b/city_model_structure/energy_systems/air_source_hp.py index c6aeaa8a..9b219a16 100644 --- a/city_model_structure/energy_systems/air_source_hp.py +++ b/city_model_structure/energy_systems/air_source_hp.py @@ -18,8 +18,8 @@ class AirSourceHP(HeatPump): super().__init__() self._cooling_capacity = None self._cooling_comp_power = None - self._cooling_capacity_coff = None - self._cooling_comp_power_coff = None + self._cooling_capacity_coff = None # a coefficients for insel + self._cooling_comp_power_coff = None # b coefficients for insel self._heating_capacity = None self._heating_comp_power = None self._heating_capacity_coff = None @@ -96,8 +96,6 @@ class AirSourceHP(HeatPump): if self._cooling_comp_power_coff is None: self._cooling_comp_power_coff = value - - @property def heating_capacity(self) -> List[float]: """ @@ -169,5 +167,3 @@ class AirSourceHP(HeatPump): """ if self._heating_capacity_coff is None: self._heating_capacity_coff = value - - From f728685c659af321d5a9c940a2ab8f4e79112bf0 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 26 Jan 2022 10:40:14 -0500 Subject: [PATCH 29/54] Renamed certain variables and added comments for insel required coefficients --- .../energy_systems/water_to_water_hp.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/city_model_structure/energy_systems/water_to_water_hp.py b/city_model_structure/energy_systems/water_to_water_hp.py index 60a97cac..ab81623f 100644 --- a/city_model_structure/energy_systems/water_to_water_hp.py +++ b/city_model_structure/energy_systems/water_to_water_hp.py @@ -20,8 +20,8 @@ class WaterToWaterHP(HeatPump): self._total_cooling_capacity = None self._power_demand = None self._flow_rate = None - self._total_cooling_capacity_coff = None - self._power_demand_coff = None + self._heat_output_coff = None # b coefficients + self._power_demand_coff = None # a coefficients @property def entering_water_temp(self) -> List[float]: @@ -113,22 +113,22 @@ class WaterToWaterHP(HeatPump): self._flow_rate = value @property - def total_cooling_capacity_coff(self) -> List[float]: + def heat_output_coff(self) -> List[float]: """ Get coefficients for total cooling capacity :return: [[float]] """ - return self._total_cooling_capacity_coff + return self._heat_output_coff - @total_cooling_capacity_coff.setter - def total_cooling_capacity_coff(self, value): + @heat_output_coff.setter + def heat_output_coff(self, value): """ Set coefficients for totol cooling capacity :param value: [[float]] :return: """ - if self._total_cooling_capacity_coff is None: - self._total_cooling_capacity_coff = value + if self._heat_output_coff is None: + self._heat_output_coff = value @property def power_demand_coff(self) -> List[float]: @@ -147,5 +147,3 @@ class WaterToWaterHP(HeatPump): """ if self._power_demand_coff is None: self._power_demand_coff = value - - From a7ac455d652fcae67c928a8e5b588d7d103bf8fe Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 26 Jan 2022 10:40:41 -0500 Subject: [PATCH 30/54] Renamed template for air source hp data --- .../{template.txt => air_source_tmpl.txt} | 0 .../heat_pumps/water_to_water_tmpl.txt | 1067 + data/energy_systems/heat_pumps/wt_hourly3.txt | 105408 +++++++++++++++ 3 files changed, 106475 insertions(+) rename data/energy_systems/heat_pumps/{template.txt => air_source_tmpl.txt} (100%) create mode 100644 data/energy_systems/heat_pumps/water_to_water_tmpl.txt create mode 100644 data/energy_systems/heat_pumps/wt_hourly3.txt diff --git a/data/energy_systems/heat_pumps/template.txt b/data/energy_systems/heat_pumps/air_source_tmpl.txt similarity index 100% rename from data/energy_systems/heat_pumps/template.txt rename to data/energy_systems/heat_pumps/air_source_tmpl.txt diff --git a/data/energy_systems/heat_pumps/water_to_water_tmpl.txt b/data/energy_systems/heat_pumps/water_to_water_tmpl.txt new file mode 100644 index 00000000..1f1b6120 --- /dev/null +++ b/data/energy_systems/heat_pumps/water_to_water_tmpl.txt @@ -0,0 +1,1067 @@ + +B 1 DIV + 256.1 + 135.1 + +B 2 DIV + 86.1 + 86.2 + +B 3 DIV + 1.1 + 279.1 + +B 4 DIV + 257.1 + 119.1 + +B 5 DIV + 123.1 + 168.1 + +B 6 DIV + 179.1 + 127.1 + +B 7 DIV + 123.1 + 174.1 + +B 8 DIV + 179.1 + 167.1 + +B 9 DIV + 107.1 + 123.1 + +B 10 DIV + 171.1 + 147.1 + +B 11 DIV + 264.1 + 146.1 + +B 76 SCREEN + 2.1 +P 76 + '*' % Format + 'HP Seasonal COP' % Headline + +B 77 SCREEN + 87.1 +P 77 + '*' % Format + 'Total Cost of the Auxiliary Heater Fuel in a Year (CAD)' % Headline + +B 78 SCREEN + 85.1 +P 78 + '*' % Format + 'Total Electricity Cost in a Year (CAD)' % Headline + +B 79 SCREEN + 84.1 +P 79 + '*' % Format + 'Total Fossil Fuel consumption in a Year (m3)' % Headline + +B 80 SCREEN + 89.1 +P 80 + '*' % Format + 'Total CO2 Emissions from Electricity Grid (g)' % Headline + +B 81 SCREEN + 83.1 +P 81 + '*' % Format + 'Total CO2 Emissions from Auxiliary Heater (g)' % Headline + +B 82 SCREEN + 88.1 +P 82 + '*' % Format + 'Total Electricuty Demand of Heat Pumps in a year (kWh)' % Headline + +B 83 CUM + 140.1 + +B 84 CUM + 255.1 + +B 85 CUM + 110.1 + +B 86 CUM + 107.1 + 123.1 + +B 87 CUM + 104.1 + +B 88 CUM + 259.1 + +B 89 CUM + 120.1 + +B 90 SUM + 141.1 + 108.1 + 105.1 + 114.1 + 125.1 + 131.1 + 134.1 + 112.1 + 130.1 + 111.1 + 201.1 + +B 91 SUM + 219.1 + 268.1 + +B 92 SUM + 132.1 + 143.1 + +B 93 SUM + 148.1 + 269.2 + +B 94 SUM + 187.1 + 220.1 + +B 95 SUM + 253.1 + 212.1 + +B 96 SUM + 117.1 + 116.1 + 136.1 + 133.1 + 124.1 + 122.1 + 118.1 + 142.1 + 106.1 + 121.1 + 150.1 + +B 97 SUM + 164.1 + 218.1 + +B 98 SUM + 113.1 + 274.1 + +B 99 SUM + 268.5 + 221.1 + +B 100 SUM + 103.1 + 155.1 + +B 101 SUM + 222.1 + 215.1 + +B 102 SUM + 109.1 + 129.1 + 137.1 + +B 103 MUL + 4.1 + 199.1 + +B 104 MUL + 265.1 + 151.1 + 209.1 + +B 105 MUL + 250.1 + 149.1 + +B 106 MUL + 187.1 + 102.1 + 178.1 + +B 107 MUL + 279.1 + 96.1 + 95.1 + 98.1 + +B 108 MUL + 280.1 + 190.1 + +B 109 MUL + 160.1 + 252.1 + +B 110 MUL + 7.1 + 175.1 + +B 111 MUL + 280.1 + 187.1 + 102.1 + 188.1 + +B 112 MUL + 280.1 + 102.1 + 145.1 + +B 113 MUL + 273.1 + 138.1 + +B 114 MUL + 187.1 + 144.1 + +B 115 MUL + 100.1 + 177.1 + 97.1 + 251.1 + +B 116 MUL + 280.1 + 172.1 + +B 117 MUL + 191.1 + 245.1 + +B 118 MUL + 280.1 + 187.1 + 184.1 + +B 119 MUL + 208.1 + 154.1 + +B 120 MUL + 5.1 + 205.1 + +B 121 MUL + 280.1 + 187.1 + 102.1 + 176.1 + +B 122 MUL + 102.1 + 165.1 + +B 123 MUL + 279.1 + 90.1 + 95.1 + 98.1 + +B 124 MUL + 166.1 + 249.1 + +B 125 MUL + 189.1 + 248.1 + +B 126 MUL + 102.1 + 279.1 + +B 127 MUL + 139.1 + 156.1 + +B 128 MUL + 213.1 + 126.1 + +B 129 MUL + 3.1 + 242.1 + 254.1 + +B 130 MUL + 187.1 + 102.1 + 207.1 + +B 131 MUL + 102.1 + 206.1 + +B 132 MUL + 91.1 + 210.1 + +B 133 MUL + 187.1 + 183.1 + +B 134 MUL + 280.1 + 187.1 + 159.1 + +B 135 MUL + 181.1 + 94.1 + +B 136 MUL + 247.1 + 196.1 + +B 137 MUL + 163.1 + 214.1 + +B 138 MUL + 273.1 + 243.1 + 211.1 + +B 139 MUL + 8.1 + 195.1 + +B 140 MUL + 262.1 + 158.1 + 161.1 + +B 141 MUL + 182.1 + 246.1 + +B 142 MUL + 280.1 + 102.1 + 170.1 + +B 143 MUL + 275.1 + 185.1 + +B 144 CONST +P 144 + $b4 % Constant value + +B 145 CONST +P 145 + $b8 % Constant value + +B 146 CONST +P 146 + $FuelLHV % Constant value + +B 147 CONST +P 147 + $HPNominalCapacity % Constant value + +B 148 CONST +P 148 + 10 % Constant value + +B 149 CONST +P 149 + $b3 % Constant value + +B 150 CONST +P 150 + $a11 % Constant value + +B 151 CONST +P 151 + 300 % Constant value + +B 152 CONST +P 152 + 40 % Constant value + +B 153 CONST +P 153 + 2 % Constant value + +B 154 CONST +P 154 + $TemperatureDifference % Constant value + +B 155 CONST +P 155 + 0 % Constant value + +B 156 CONST +P 156 + $Cp % Constant value + +B 157 CONST +P 157 + 2 % Constant value + +B 158 CONST +P 158 + 300 % Constant value + +B 159 CONST +P 159 + $b7 % Constant value + +B 160 CONST +P 160 + $LowestPossibleLoadFlow % Constant value + +B 161 CONST +P 161 + $FuelEF % Constant value + +B 162 CONST +P 162 + $TemperatureDifference % Constant value + +B 163 CONST +P 163 + $HighestPossibleLoadFlow % Constant value + +B 164 CONST +P 164 + $BuildingSuppTemp % Constant value + +B 165 CONST +P 165 + $a6 % Constant value + +B 166 CONST +P 166 + $a5 % Constant value + +B 167 CONST +P 167 + $HPNominalCapacity % Constant value + +B 168 CONST +P 168 + 12 % Constant value + +B 169 CONST +P 169 + 5 % Constant value + +B 170 CONST +P 170 + $a8 % Constant value + +B 171 CONST +P 171 + $MaximumHPEnergyInput % Constant value + +B 172 CONST +P 172 + $a2 % Constant value + +B 173 CONST +P 173 + 2 % Constant value + +B 174 CONST +P 174 + 12 % Constant value + +B 175 CONST +P 175 + $ElectricityPrice % Constant value + +B 176 CONST +P 176 + $a10 % Constant value + +B 177 CONST +P 177 + $Cp % Constant value + +B 178 CONST +P 178 + $a9 % Constant value + +B 179 CONST +P 179 + $MaximumHPEnergyInput % Constant value + +B 180 CONST +P 180 + 0 % Constant value + +B 181 CONST +P 181 + $Cp % Constant value + +B 182 CONST +P 182 + $b1 % Constant value + +B 183 CONST +P 183 + $a4 % Constant value + +B 184 CONST +P 184 + $a7 % Constant value + +B 185 CONST +P 185 + 25 % Constant value + +B 186 CONST +P 186 + 2 % Constant value + +B 187 CONST +P 187 + $HPSupTemp % Constant value + +B 188 CONST +P 188 + $b10 % Constant value + +B 189 CONST +P 189 + $b5 % Constant value + +B 190 CONST +P 190 + $b2 % Constant value + +B 191 CONST +P 191 + $a1 % Constant value + +B 192 CONST +P 192 + $MaximumHPEnergyInput % Constant value + +B 193 CONST +P 193 + 9 % Constant value + +B 194 CONST +P 194 + 0 % Constant value + +B 195 CONST +P 195 + 7.13 % Constant value + +B 196 CONST +P 196 + $a3 % Constant value + +B 197 CONST +P 197 + 2 % Constant value + +B 198 CONST +P 198 + $HPReactivationTemperature % Constant value + +B 199 CONST +P 199 + 1 % Constant value + +B 200 CONST +P 200 + 2 % Constant value + +B 201 CONST +P 201 + $b11 % Constant value + +B 202 CONST +P 202 + $HPDisactivationTemperature % Constant value + +B 203 CONST +P 203 + 40 % Constant value + +B 204 CONST +P 204 + 0.40 % Constant value + +B 205 CONST +P 205 + $ElecGridEF % Constant value + +B 206 CONST +P 206 + $b6 % Constant value + +B 207 CONST +P 207 + $b9 % Constant value + +B 208 CONST +P 208 + $Cp % Constant value + +B 209 CONST +P 209 + $FuelPrice % Constant value + +B 210 GT + 268.1 + 152.1 + +B 211 GT + 217.1 + 180.1 + +B 212 GT + 271.2 + 193.1 + +B 213 GT + 107.1 + 194.1 + +B 214 GT + 3.1 + 163.1 + +B 215 DELAY + 280.1 +P 215 + 10 % Initial value + +B 216 DELAY + 268.5 +P 216 + 0 % Initial value + +B 217 DELAY + 107.1 +P 217 + 0 % Initial value + +B 218 CHS + 268.1 + +B 219 CHS + 162.1 + +B 220 CHS + 268.4 + +B 221 CHS + 216.1 + +B 222 CHS + 6.1 + +B 223 CUMC + 271.2 + 259.1 + +B 224 CUMC + 271.4 + 259.1 + +B 225 CUMC + 271.2 + 120.1 + 140.1 + +B 226 CUMC + 271.3 + 259.1 + +B 227 CUMC + 271.2 + 110.1 + 104.1 + +B 228 CUMC + 271.3 + 255.1 + +B 229 CUMC + 271.3 + 110.1 + 104.1 + +B 230 CUMC + 271.2 + 255.1 + +B 231 CUMC + 271.3 + 120.1 + 140.1 + +B 232 WRITE + 228.1 + 228.2 +P 232 + 2 % Mode + $fileOut9 % File name + '*' % Fortran format + +B 233 WRITE + 227.1 + 227.2 + 227.3 +P 233 + 2 % Mode + $fileOut3 % File name + '*' % Fortran format + +B 234 WRITE + 226.1 + 226.2 +P 234 + 2 % Mode + $fileOut6 % File name + '*' % Fortran format + +B 235 WRITE + 230.1 + 230.2 +P 235 + 2 % Mode + $fileOut4 % File name + '*' % Fortran format + +B 236 WRITE + 223.1 + 223.2 +P 236 + 2 % Mode + $fileOut8 % File name + '*' % Fortran format + +B 237 WRITE + 231.1 + 231.2 + 231.3 +P 237 + 2 % Mode + $fileOut2 % File name + '*' % Fortran format + +B 238 WRITE + 229.1 + 229.2 + 229.3 +P 238 + 2 % Mode + $fileOut7 % File name + '*' % Fortran format + +B 239 WRITE + 271.1 + 271.2 + 271.3 + 224.1 + 224.2 +P 239 + 2 % Mode + $fileOut10 % File name + '*' % Fortran format + +B 240 WRITE + 225.1 + 225.2 + 225.3 +P 240 + 2 % Mode + $fileOut5 % File name + '*' % Fortran format + +B 241 WRITE + 271.1 + 271.2 + 271.3 + 271.4 + 271.5 + 107.1 + 123.1 + 9.1 + 128.1 + 100.1 + 268.1 + 268.2 + 268.3 + 268.4 + 268.5 + 258.1 + 260.1 + 11.1 + 263.1 + 110.1 + 104.1 + 120.1 + 140.1 + 92.1 + 277.1 + 269.2 + 96.1 + 90.1 +P 241 + 2 % Mode + $fileOut1 % File name + '*' % Fortran format + +B 242 GE + 3.1 + 160.1 +P 242 + 0 % Error tolerance + +B 243 GE + 268.1 + 198.1 +P 243 + 0 % Error tolerance + +B 244 GE + 268.1 + 202.1 +P 244 + 0 % Error tolerance + +B 245 EXPG + 280.1 + 157.1 + +B 246 EXPG + 280.1 + 153.1 + +B 247 EXPG + 187.1 + 197.1 + +B 248 EXPG + 102.1 + 186.1 + +B 249 EXPG + 102.1 + 173.1 + +B 250 EXPG + 187.1 + 200.1 + +B 251 LT + 268.1 + 203.1 + +B 252 LT + 3.1 + 160.1 + +B 253 LT + 271.2 + 169.1 + +B 254 LE + 3.1 + 163.1 +P 254 + 0 % Error tolerance + +B 255 GAIN + 261.1 +P 255 + 300 % Gain factor g + +B 256 GAIN + 171.1 +P 256 + 1000 % Gain factor g + +B 257 GAIN + 277.1 +P 257 + 1000 % Gain factor g + +B 258 ATT + 268.5 +P 258 + 3600000 % Attenuation factor a + +B 259 ATT + 123.1 +P 259 + 12 % Attenuation factor a + +B 260 ATT + 99.1 +P 260 + 3600000 % Attenuation factor a + +B 261 ATT + 11.1 +P 261 + $FuelDensity % Attenuation factor a + +B 262 ATT + 11.1 +P 262 + $FuelDensity % Attenuation factor a + +B 263 ATT + 115.1 +P 263 + 1000 % Attenuation factor a + +B 264 ATT + 115.1 +P 264 + $AuxHeaterEfficiency % Attenuation factor a + +B 265 ATT + 11.1 +P 265 + $FuelDensity % Attenuation factor a + +B 268 TANKST + 187.1 + 128.1 + 92.1 + 100.1 + 93.1 + 272.1 +P 268 + $TESCapacity % Tank volume + 4 % Number of temperature nodes + $TESDiameter % Tank diameter + $Cp % Specfic heat of fluid + $Rhow % Fluid density + 0 % Overall heat-loss coefficient + 1 % Effective heat conductivity + 30 % Initial tank temperature + +B 269 GENGT2 + 270.1 + 270.3 + 270.4 + 270.5 + 270.7 + 270.8 + 271.1 + 271.2 + 271.3 + 271.4 +P 269 + 45.5 % Latitude + -73.62 % Longitude + -5 % UTC Time zone + 1 % Variance factor of the Gordon Reddy correlation + 0 % Year-to-year variability + 0.3 % Autocorrelation coefficient lag one + 0.171 % Autocorrelation coefficient lag two + 4711 % Initialisation of random number generator + 2 % Maximum allowed mean temperature deviation + 100 % Maximum number of iterations + +B 270 MTM2 + 271.2 +P 270 + 'Montreal' % Location + +B 271 CLOCK +P 271 + $StartYear % Start year + $StartMonth % Start month + $StartDay % Start day + $StartHour % Start hour + $StartMinute % Start minute + $StartSecond % Start second + $EndYear % End year + $EndMonth % End month + $EndDay % End day + $EndHour % End hour + $EndMinute % End minute + $EndSecond % End second + 5 % Increment + 'm' % Unit + +B 272 SOY + 271.1 + 271.2 + 271.3 + 271.4 + 271.5 + 271.6 + +B 273 INV + 244.1 + +B 274 INV + 243.1 + +B 275 INV + 210.1 + +B 276 READ +P 276 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $HeatingDemand % File name + '*' % Fortran format + +B 277 READ +P 277 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $WaterTemperature % File name + '*' % Fortran format + +B 278 UBHLOSS + 192.1 + 276.1 +P 278 + 300 % L + 0.5 % D + 0.05 % U + 3 % Tg + 4190 % cp + 1000 % rho + 5 % delta_T + 20 % dx + 300 % df + +B 279 INT + 10.1 + +B 280 HXS + 101.1 + 139.1 + 278.2 + 204.1 +P 280 + 1 % Mode + 5000 % Overall heat transfer coefficient + 1007 % Specific heat of side 1 fluid + 1007 % Specific heat of side 2 fluid + diff --git a/data/energy_systems/heat_pumps/wt_hourly3.txt b/data/energy_systems/heat_pumps/wt_hourly3.txt new file mode 100644 index 00000000..ed678cca --- /dev/null +++ b/data/energy_systems/heat_pumps/wt_hourly3.txt @@ -0,0 +1,105408 @@ +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +26 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +25 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +24 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +23 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +22 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +21 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +20 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +19 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +18 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +17 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +16 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +15 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +14 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +13 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +12 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +9 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +7 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From aa7463cb9d213188336957086c7acb0fcec1fba7 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 26 Jan 2022 10:42:01 -0500 Subject: [PATCH 31/54] Added separate classes of water to water and air source hp. Refactored energy systems factory --- .../energy_systems/air_source_hp_export.py | 51 ++++++++++++ exports/energy_systems/heat_pump_export.py | 82 +++++++++---------- .../water_to_water_hp_export.py | 56 +++++++++++++ exports/energy_systems_factory.py | 16 ++-- 4 files changed, 159 insertions(+), 46 deletions(-) create mode 100644 exports/energy_systems/air_source_hp_export.py create mode 100644 exports/energy_systems/water_to_water_hp_export.py diff --git a/exports/energy_systems/air_source_hp_export.py b/exports/energy_systems/air_source_hp_export.py new file mode 100644 index 00000000..4ab8ad1a --- /dev/null +++ b/exports/energy_systems/air_source_hp_export.py @@ -0,0 +1,51 @@ +""" +AirSourceHPExport exports air source values after executing insel. +Multiple files are generated for the export +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Peter Yefi peteryefi@gmail.com +""" +from exports.energy_systems.heat_pump_export import HeatPumpExport +from typing import List, Tuple, Union + + +class AirSourceHPExport(HeatPumpExport): + """ + Exports heat pump values as multiple files + after executing insel + """ + + def __init__(self, base_path, city, output_path): + template_path = (base_path / 'heat_pumps/air_source_tmpl.txt') + super().__init__(base_path, city, output_path, template_path) + + def _extract_model_coff(self, hp_model: str, data_type='heat') -> Union[Tuple[List, List], None]: + """ + Extracts heat pump coefficient data for a specific + model. e.g 012, 140 + :param hp_model: the model type + :param data_type: indicates whether we're extracting cooling + or heating perfarmcn coefficients + :return: + """ + for energy_system in self._city.energy_systems: + if energy_system.air_source_hp.model == hp_model: + if data_type == 'heat': + return energy_system.air_source_hp.heating_capacity_coff, energy_system.air_source_hp.heating_comp_power_coff + return energy_system.air_source_hp.cooling_capacity_coff, energy_system.air_source_hp.cooling_comp_power_coff + return None + + def execute_insel(self, user_input, hp_model, data_type): + """ + Runs insel and produces output files + Runs insel and write the necessary files + :param user_input: a dictionary containing the user + values necessary to run insel + :param hp_model: a string that indicates the heat + pump model to be used e.g. 012, 015 + :param data_type: a string that indicates whether + insel should run for heat or cooling performance + :return: + :return: + """ + capacity_coeff, power_coeff = self._extract_model_coff(hp_model, data_type) + super(AirSourceHPExport, self)._run_insel(user_input, capacity_coeff, power_coeff) diff --git a/exports/energy_systems/heat_pump_export.py b/exports/energy_systems/heat_pump_export.py index 754b578a..5037dd75 100644 --- a/exports/energy_systems/heat_pump_export.py +++ b/exports/energy_systems/heat_pump_export.py @@ -1,5 +1,5 @@ """ -HeatPumpExport exports heatpump coefficient into several formats +HeatPumpExport exports heatpump outputs into several files after insel execution SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2021 Project Author Peter Yefi peteryefi@gmail.com """ @@ -16,8 +16,9 @@ class HeatPumpExport: of some defined function """ - def __init__(self, base_path, city, output_path): - self._template_path = (base_path / 'heat_pumps/template.txt') + def __init__(self, base_path, city, output_path, template, water_temp=None): + self._template_path = template + self._water_temp = water_temp self._constants_path = (base_path / 'heat_pumps/constants.yaml') # needed to compute max demand. self._demand_path = (base_path / 'heat_pumps/demand.txt') @@ -26,21 +27,17 @@ class HeatPumpExport: self._base_path = base_path self._output_path = output_path - def run_insel(self, user_input: Dict, hp_model: str, data_type: str) -> None: + def _run_insel(self, user_input: Dict, capacity_coeff: List, power_coeff: List) -> None: """ Runs insel and write the necessary files :param user_input: a dictionary containing the user values necessary to run insel - :param hp_model: a string that indicates the heat - pump model to be used e.g. 012, 015 - :param data_type: a string that indicates whether - insel should run for heat or cooling performance + :param capacity_coeff: a list containing capacity coefficients + :param power_coeff: a list containing power demand coefficients :return: """ self._input_data = user_input - # update input data with other data necessary to run insel - capacity_coff, comp_power_coff = self._extract_model_coff(hp_model, data_type) - self._update_input_data_with_coff(capacity_coff, comp_power_coff) + self._update_input_data_with_coff(capacity_coeff, power_coeff) # update input data with constants self._update_input_data_with_constants() # update input data with input and output files for insel @@ -99,6 +96,7 @@ class HeatPumpExport: self._input_data['fileOut9']: ['Day', 'Daily Fuel Consumption of Auxiliary Heater (m3)'], self._input_data['fileOut10']: ['Year', 'Month', 'Day', 'Hour', 'HP Electricity Demand (kWh)'] } + for file_path, header in header_data.items(): file_path = file_path.strip("'") df = pd.read_csv(file_path, header=None, sep='\s+') @@ -122,6 +120,9 @@ class HeatPumpExport: self._input_data["fileOut8"] = f"'{str((self._base_path / 'heat_pumps/monthly_hp_electricity_demand.csv'))}'" self._input_data["fileOut9"] = f"'{str((self._base_path / 'heat_pumps/daily_fossil_fuel_consumption.csv'))}'" self._input_data["fileOut10"] = f"'{str((self._base_path / 'heat_pumps/hp_hourly_electricity_demand.csv'))}'" + # include water temperature for water to water heat pump + if self._water_temp is not None: + self._input_data['WaterTemperature'] = f"'{str(self._water_temp)}'" def _delete_existing_output_files(self): """ @@ -161,41 +162,40 @@ class HeatPumpExport: self._input_data["TESCapacity"] = self._input_data["HoursOfStorageAtMaxDemand"] * (max_demand * 3.6) / ( (self._input_data["Cp"] / 1000) * self._input_data["TemperatureDifference"]) - def _update_input_data_with_coff(self, capacity_coff: List, comp_power_coff: List): + def _update_input_data_with_coff(self, a_coeff: List, b_coeff: List): """ Updates the user data with coefficients derived from imports - :param capacity_coff: heat or cooling capacity coefficients - :param comp_power_coff: heat or cooling comppressor power coefficients + :param a_coeff: insel a coefficient values + :param b_coeff: insel b coefficient values + Meaning of a and b are in the respective models for air source heat pump + and water to water source heat pump :return: """ - self._input_data["a1"] = capacity_coff[0] - self._input_data["a2"] = capacity_coff[1] - self._input_data["a3"] = capacity_coff[2] - self._input_data["a4"] = capacity_coff[3] - self._input_data["a5"] = capacity_coff[4] - self._input_data["a6"] = capacity_coff[5] - self._input_data["b1"] = comp_power_coff[0] - self._input_data["b2"] = comp_power_coff[1] - self._input_data["b3"] = comp_power_coff[2] - self._input_data["b4"] = comp_power_coff[3] - self._input_data["b5"] = comp_power_coff[4] - self._input_data["b6"] = comp_power_coff[5] + self._input_data["a1"] = a_coeff[0] + self._input_data["a2"] = a_coeff[1] + self._input_data["a3"] = a_coeff[2] + self._input_data["a4"] = a_coeff[3] + self._input_data["a5"] = a_coeff[4] + self._input_data["a6"] = a_coeff[5] + self._input_data["b1"] = b_coeff[0] + self._input_data["b2"] = b_coeff[1] + self._input_data["b3"] = b_coeff[2] + self._input_data["b4"] = b_coeff[3] + self._input_data["b5"] = b_coeff[4] + self._input_data["b6"] = b_coeff[5] - def _extract_model_coff(self, hp_model: str, data_type='heat') -> Union[Tuple[List, List], None]: - """ - Extracts heat pump coefficient data for a specific - model. e.g 012, 140 - :param hp_model: the model type - :param data_type: indicates whether we're extracting cooling - or heating perfarmcn coefficients - :return: - """ - for energy_system in self._city.energy_systems: - if energy_system.heat_pump.model == hp_model: - if data_type == 'heat': - return energy_system.heat_pump.heating_capacity_coff, energy_system.heat_pump.heating_comp_power_coff - return energy_system.heat_pump.cooling_capacity_coff, energy_system.heat_pump.cooling_comp_power_coff - return None + # additional coefficients for water to water source + if self._water_temp is not None: + self._input_data["a7"] = a_coeff[6] + self._input_data["a8"] = a_coeff[7] + self._input_data["a9"] = a_coeff[8] + self._input_data["a10"] = a_coeff[9] + self._input_data["a11"] = a_coeff[10] + self._input_data["b7"] = b_coeff[6] + self._input_data["b8"] = b_coeff[7] + self._input_data["b9"] = b_coeff[8] + self._input_data["b10"] = b_coeff[9] + self._input_data["b11"] = b_coeff[10] def _get_user_out_put(self): """ diff --git a/exports/energy_systems/water_to_water_hp_export.py b/exports/energy_systems/water_to_water_hp_export.py new file mode 100644 index 00000000..b7d0fc7f --- /dev/null +++ b/exports/energy_systems/water_to_water_hp_export.py @@ -0,0 +1,56 @@ +""" +WaterToWaterHPExport exports water to water values after executing insel. +Multiple files are generated for the export +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2021 Project Author Peter Yefi peteryefi@gmail.com +""" +from exports.energy_systems.heat_pump_export import HeatPumpExport +from typing import List, Tuple, Union + +class WaterToWaterHPExport(HeatPumpExport): + """ + Exports heat pump values as multiple output files + after executing insel + """ + + def __init__(self, base_path, city, output_path): + template_path = (base_path / 'heat_pumps/water_to_water_tmpl.txt') + water_temp = (base_path / 'heat_pumps/wt_hourly3.txt') + super().__init__(base_path, city, output_path, template_path, water_temp) + + def _extract_model_coff(self, hp_model: str, data_type='heat') -> Union[Tuple[List, List], None]: + """ + Extracts heat pump coefficient data for a specific + model. e.g 012, 140 + :param hp_model: the model type + :param data_type: indicates whether we're extracting cooling + or heating perfarmcn coefficients + :return: + """ + for energy_system in self._city.energy_systems: + if energy_system.water_to_water_hp.model == hp_model: + return energy_system.water_to_water_hp.power_demand_coff, \ + energy_system.water_to_water_hp.heat_output_coff + return None + + def execute_insel(self, user_input, hp_model, data_type): + """ + Runs insel and produces output files + Runs insel and write the necessary files + :param user_input: a dictionary containing the user + values necessary to run insel + :param hp_model: a string that indicates the heat + pump model to be used e.g. 012, 015 + :param data_type: a string that indicates whether + insel should run for heat or cooling performance + :return: + :return: + """ + pow_demand_coeff, heat_output_coeff = self._extract_model_coff(hp_model, data_type) + super(WaterToWaterHPExport, self)._run_insel(user_input, pow_demand_coeff, heat_output_coeff) + + + + + + diff --git a/exports/energy_systems_factory.py b/exports/energy_systems_factory.py index 6cdf5a2e..1ebdfeca 100644 --- a/exports/energy_systems_factory.py +++ b/exports/energy_systems_factory.py @@ -6,6 +6,8 @@ Copyright © 2020 Project Author Peter Yefi peteryefi@gmail.com from pathlib import Path from exports.energy_systems.heat_pump_export import HeatPumpExport +from exports.energy_systems.air_source_hp_export import AirSourceHPExport +from exports.energy_systems.water_to_water_hp_export import WaterToWaterHPExport class EnergySystemsExportFactory: @@ -23,18 +25,22 @@ class EnergySystemsExportFactory: self._data_type = data_type self._output_path = output_path - def _export_heat_pump(self): + def _export_heat_pump(self, source): """ Exports heat pump performance data as coefficients of some objective function :return: None """ - HeatPumpExport(self._base_path, self._city, self._output_path)\ - .run_insel(self._user_input, self._hp_model, self._data_type) + if source == 'air': + AirSourceHPExport(self._base_path, self._city, self._output_path)\ + .execute_insel(self._user_input, self._hp_model, self._data_type) + elif source == 'water': + WaterToWaterHPExport(self._base_path, self._city, self._output_path)\ + .execute_insel(self._user_input, self._hp_model, self._data_type) - def export(self): + def export(self, source='air'): """ Export the city given to the class using the given export type handler :return: None """ - return getattr(self, '_export_heat_pump', lambda: None)() + return getattr(self, '_export_heat_pump', lambda: None)(source) From e948b69349a0bc10b4e7dd7a669a5ea430e20dd3 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 26 Jan 2022 10:42:44 -0500 Subject: [PATCH 32/54] Refactored variable names --- imports/energy_systems/water_to_water_hp_parameters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imports/energy_systems/water_to_water_hp_parameters.py b/imports/energy_systems/water_to_water_hp_parameters.py index 4d712742..9348832a 100644 --- a/imports/energy_systems/water_to_water_hp_parameters.py +++ b/imports/energy_systems/water_to_water_hp_parameters.py @@ -126,7 +126,7 @@ class WaterToWaterHPParameters: heat_pump.entering_water_temp = data['ewt'] heat_pump.leaving_water_temp = data['lwt'] heat_pump.power_demand_coff = self._compute_coefficients(data, data_type='power') - heat_pump.total_cooling_capacity_coff = self._compute_coefficients(data) + heat_pump.heat_output_coff = self._compute_coefficients(data) energy_system = EnergySystem(heat_pump.model, 0, [], None) energy_system.water_to_water_hp = heat_pump From 34fbd393aa6aa56d76799d3fe849f9d6ad9a2051 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Sat, 29 Jan 2022 09:41:17 -0500 Subject: [PATCH 33/54] Added constants for w2w hp --- data/energy_systems/heat_pumps/constants.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/data/energy_systems/heat_pumps/constants.yaml b/data/energy_systems/heat_pumps/constants.yaml index 38d5f125..a9d98713 100644 --- a/data/energy_systems/heat_pumps/constants.yaml +++ b/data/energy_systems/heat_pumps/constants.yaml @@ -18,3 +18,11 @@ AuxHeaterEfficiency: 0.9 ElecGridEF: 0.5 ElectricityPrice: 0.073 +# Water to Water HP constants +HPNominalCapacity: 256 +LowestPossibleLoadFlow: 4.73 +HighestPossibleLoadFlow: 9.46 + + + + From 81bb8a17951d55c22a50eb8c85ee479622bf1679 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Sat, 29 Jan 2022 09:42:34 -0500 Subject: [PATCH 34/54] Added additional parameter to method for running insel --- exports/energy_systems/air_source_hp_export.py | 2 +- exports/energy_systems/heat_pump_export.py | 6 ++++-- exports/energy_systems/water_to_water_hp_export.py | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/exports/energy_systems/air_source_hp_export.py b/exports/energy_systems/air_source_hp_export.py index 4ab8ad1a..b8214b9d 100644 --- a/exports/energy_systems/air_source_hp_export.py +++ b/exports/energy_systems/air_source_hp_export.py @@ -48,4 +48,4 @@ class AirSourceHPExport(HeatPumpExport): :return: """ capacity_coeff, power_coeff = self._extract_model_coff(hp_model, data_type) - super(AirSourceHPExport, self)._run_insel(user_input, capacity_coeff, power_coeff) + super(AirSourceHPExport, self)._run_insel(user_input, capacity_coeff, power_coeff, 'air_source.insel') diff --git a/exports/energy_systems/heat_pump_export.py b/exports/energy_systems/heat_pump_export.py index 5037dd75..2b755d38 100644 --- a/exports/energy_systems/heat_pump_export.py +++ b/exports/energy_systems/heat_pump_export.py @@ -27,13 +27,14 @@ class HeatPumpExport: self._base_path = base_path self._output_path = output_path - def _run_insel(self, user_input: Dict, capacity_coeff: List, power_coeff: List) -> None: + def _run_insel(self, user_input: Dict, capacity_coeff: List, power_coeff: List, filename: str) -> None: """ Runs insel and write the necessary files :param user_input: a dictionary containing the user values necessary to run insel :param capacity_coeff: a list containing capacity coefficients :param power_coeff: a list containing power demand coefficients + :param filename: the name of the insel file to be created :return: """ self._input_data = user_input @@ -50,7 +51,7 @@ class HeatPumpExport: insel_template_content = insel_template_handler.read() insel_template = Template(insel_template_content).substitute(self._input_data) # create the insel file and write the template with substituted values into it - insel_file = (self._base_path / 'heat_pumps/dompark_heat_pump.insel') + insel_file = (self._base_path / 'heat_pumps' / filename) insel_file_handler = open(insel_file, "w") insel_file_handler.write(insel_template) # Now run insel @@ -156,6 +157,7 @@ class HeatPumpExport: constants_dict = yaml.load(file, Loader=yaml.FullLoader) for key, value in constants_dict.items(): self._input_data[key] = value + # compute maximum demand. TODO: This should come from catalog in the future max_demand = self._compute_max_demand() # compute TESCapacity diff --git a/exports/energy_systems/water_to_water_hp_export.py b/exports/energy_systems/water_to_water_hp_export.py index b7d0fc7f..7154c16f 100644 --- a/exports/energy_systems/water_to_water_hp_export.py +++ b/exports/energy_systems/water_to_water_hp_export.py @@ -47,7 +47,7 @@ class WaterToWaterHPExport(HeatPumpExport): :return: """ pow_demand_coeff, heat_output_coeff = self._extract_model_coff(hp_model, data_type) - super(WaterToWaterHPExport, self)._run_insel(user_input, pow_demand_coeff, heat_output_coeff) + super(WaterToWaterHPExport, self)._run_insel(user_input, pow_demand_coeff, heat_output_coeff, 'w2w.insel') From 702c8c4103d2ea37e27b50a99d1783bca6dabe4e Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Sat, 29 Jan 2022 09:43:57 -0500 Subject: [PATCH 35/54] Changed names of insel generated output files --- .../test_energy_systems_air_source_hp.py | 2 +- .../test_energy_systems_water_to_water_hp.py | 33 +++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/unittests/test_energy_systems_air_source_hp.py b/unittests/test_energy_systems_air_source_hp.py index 45a95a8f..b596f73a 100644 --- a/unittests/test_energy_systems_air_source_hp.py +++ b/unittests/test_energy_systems_air_source_hp.py @@ -23,7 +23,7 @@ class TestEnergySystemsFactory(TestCase): :return: None """ city_file = "../unittests/tests_data/C40_Final.gml" - self._output_path = "../unittests/tests_data/user_output.csv" + self._output_path = "../unittests/tests_data/as_user_output.csv" self._city = GeometryFactory('citygml', city_file).city EnergySystemsFactory('air source hp', self._city).enrich() diff --git a/unittests/test_energy_systems_water_to_water_hp.py b/unittests/test_energy_systems_water_to_water_hp.py index 3f9b430d..9917a629 100644 --- a/unittests/test_energy_systems_water_to_water_hp.py +++ b/unittests/test_energy_systems_water_to_water_hp.py @@ -7,13 +7,15 @@ from unittest import TestCase from imports.geometry_factory import GeometryFactory from imports.energy_systems_factory import EnergySystemsFactory from city_model_structure.energy_systems.water_to_water_hp import WaterToWaterHP +from exports.energy_systems_factory import EnergySystemsExportFactory +import pandas as pd import os class TestEnergySystemsFactory(TestCase): """ - TestBuilding TestCase 1 + TestEnergySystemsFactory for Water to Water HP """ def setUp(self) -> None: @@ -22,16 +24,41 @@ class TestEnergySystemsFactory(TestCase): :return: None """ city_file = "../unittests/tests_data/C40_Final.gml" - self._output_path = "../unittests/tests_data/user_output.csv" + self._output_path = "../unittests/tests_data/w2w_user_output.csv" self._city = GeometryFactory('citygml', city_file).city EnergySystemsFactory('water to water hp', self._city).enrich() - def test_air_source_heat_pump_import(self): + def test_water_to_water_heat_pump_import(self): self.assertIsNotNone(self._city.energy_systems, 'City has energy systems') self.assertIsInstance(self._city.energy_systems[0].water_to_water_hp, WaterToWaterHP) self.assertEqual(self._city.energy_systems[0].water_to_water_hp.model, 'ClimateMaster 156 kW') self.assertEqual(self._city.energy_systems[2].water_to_water_hp.model, 'ClimateMaster 335 kW') + def test_water_to_water_heat_pump_export(self): + # User defined paramenters + user_input = { + 'StartYear': 2020, + 'EndYear': 2021, + 'MaximumHPEnergyInput': 8000, + 'HoursOfStorageAtMaxDemand': 1, + 'BuildingSuppTemp': 40, + 'TemperatureDifference': 15, + 'FuelLHV': 47100, + 'FuelPrice': 0.12, + 'FuelEF': 1887, + 'FuelDensity': 0.717, + 'HPSupTemp': 60, + # parameters below depend on HPSupTem + 'HPDisactivationTemperature': 55, + 'HPReactivationTemperature': 42 + } + + EnergySystemsExportFactory(self._city, user_input, 'ClimateMaster 156 kW', self._output_path).export('water') + df = pd.read_csv(self._output_path) + print(df.shape) + #self.assertEqual(df.shape, (13, 3)) + #self.assertEqual(df.iloc[0, 1], 3045398.0) + def tearDown(self) -> None: try: os.remove(self._output_path) From 7f21cc22c3f3a3fed34b821ac4f8c3eb94219c86 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Wed, 2 Feb 2022 07:03:22 -0500 Subject: [PATCH 36/54] Added Reactivation and Deactivation Temps --- exports/energy_systems/heat_pump_export.py | 4 ++++ unittests/test_energy_systems_water_to_water_hp.py | 5 +---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/exports/energy_systems/heat_pump_export.py b/exports/energy_systems/heat_pump_export.py index 2b755d38..e5828608 100644 --- a/exports/energy_systems/heat_pump_export.py +++ b/exports/energy_systems/heat_pump_export.py @@ -157,6 +157,10 @@ class HeatPumpExport: constants_dict = yaml.load(file, Loader=yaml.FullLoader) for key, value in constants_dict.items(): self._input_data[key] = value + # compute water to water HP specific values + if self._water_temp is not None: + self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 5 + self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 18 # compute maximum demand. TODO: This should come from catalog in the future max_demand = self._compute_max_demand() diff --git a/unittests/test_energy_systems_water_to_water_hp.py b/unittests/test_energy_systems_water_to_water_hp.py index 9917a629..9517476b 100644 --- a/unittests/test_energy_systems_water_to_water_hp.py +++ b/unittests/test_energy_systems_water_to_water_hp.py @@ -47,10 +47,7 @@ class TestEnergySystemsFactory(TestCase): 'FuelPrice': 0.12, 'FuelEF': 1887, 'FuelDensity': 0.717, - 'HPSupTemp': 60, - # parameters below depend on HPSupTem - 'HPDisactivationTemperature': 55, - 'HPReactivationTemperature': 42 + 'HPSupTemp': 60 } EnergySystemsExportFactory(self._city, user_input, 'ClimateMaster 156 kW', self._output_path).export('water') From e692f99316dea55395630805f8e0745cd05a2232 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Thu, 17 Feb 2022 13:56:42 -0500 Subject: [PATCH 37/54] Removed deprecated pandas method --- exports/energy_systems/heat_pump_export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exports/energy_systems/heat_pump_export.py b/exports/energy_systems/heat_pump_export.py index e5828608..3f5b9c73 100644 --- a/exports/energy_systems/heat_pump_export.py +++ b/exports/energy_systems/heat_pump_export.py @@ -215,7 +215,7 @@ class HeatPumpExport: data = [electricity_df, fossil_df] df = pd.concat(data, axis=1) - df = df.append(df.agg(['sum'])) + df = pd.concat([df, df.agg(['sum'])]) s = pd.Series(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec", "Total"]) df = df.set_index([s]) df.to_csv(self._output_path) From 5269caba9de2bc4bca7a7b6a54c949de25233afe Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Sat, 26 Feb 2022 11:40:19 -0500 Subject: [PATCH 38/54] Added different template files for parallel and series w2w and air source --- .../{air_source_tmpl.txt => as_parallel.txt} | 0 data/energy_systems/heat_pumps/as_series.txt | 816 +++++++++++++ ...ter_to_water_tmpl.txt => w2w_parallel.txt} | 0 data/energy_systems/heat_pumps/w2w_series.txt | 1067 +++++++++++++++++ 4 files changed, 1883 insertions(+) rename data/energy_systems/heat_pumps/{air_source_tmpl.txt => as_parallel.txt} (100%) create mode 100644 data/energy_systems/heat_pumps/as_series.txt rename data/energy_systems/heat_pumps/{water_to_water_tmpl.txt => w2w_parallel.txt} (100%) create mode 100644 data/energy_systems/heat_pumps/w2w_series.txt diff --git a/data/energy_systems/heat_pumps/air_source_tmpl.txt b/data/energy_systems/heat_pumps/as_parallel.txt similarity index 100% rename from data/energy_systems/heat_pumps/air_source_tmpl.txt rename to data/energy_systems/heat_pumps/as_parallel.txt diff --git a/data/energy_systems/heat_pumps/as_series.txt b/data/energy_systems/heat_pumps/as_series.txt new file mode 100644 index 00000000..0bc186e6 --- /dev/null +++ b/data/energy_systems/heat_pumps/as_series.txt @@ -0,0 +1,816 @@ + +B 10 MUL + 64.1 + 183.1 + +B 11 MUL + 198.1 + 167.1 + 163.1 + 162.1 + +B 12 MUL + 201.1 + 24.1 + +B 13 MUL + 70.1 + 180.1 + +B 14 MUL + 184.1 + 34.1 + +B 15 MUL + 198.1 + 165.1 + 163.1 + 162.1 + +B 16 MUL + 186.1 + 40.1 + +B 17 MUL + 79.1 + 56.1 + 69.1 + +B 18 MUL + 188.1 + 49.1 + +B 19 MUL + 46.1 + 158.1 + +B 20 MUL + 72.1 + 66.1 + +B 21 MUL + 57.1 + 182.1 + +B 22 MUL + 203.2 + 43.1 + +B 23 MUL + 78.1 + 50.1 + 47.1 + +B 24 MUL + 201.1 + 193.1 + 196.1 + +B 25 MUL + 203.2 + 76.1 + +B 26 MUL + 58.1 + 68.1 + +B 27 MUL + 160.1 + 63.1 + 168.1 + 136.1 + +B 28 MUL + 58.1 + 60.1 + +B 29 MUL + 65.1 + 181.1 + +B 30 MUL + 203.2 + 58.1 + 36.1 + +B 31 MUL + 159.1 + 195.1 + +B 32 MUL + 203.2 + 58.1 + 77.1 + +B 33 MUL + 202.1 + 74.1 + +B 34 CONST +P 34 + $ElecGridEF % Constant value + +B 35 CONST +P 35 + 5 % Constant value + +B 36 CONST +P 36 + $a3 % Constant value + +B 37 CONST +P 37 + $TemperatureDifference % Constant value + +B 38 CONST +P 38 + 42 % Constant value + +B 39 CONST +P 39 + 40 % Constant value + +B 40 CONST +P 40 + $ElectricityPrice % Constant value + +B 41 CONST +P 41 + 9 % Constant value + +B 42 CONST +P 42 + 12 % Constant value + +B 43 CONST +P 43 + $b2 % Constant value + +B 44 CONST +P 44 + $a6 % Constant value + +B 45 CONST +P 45 + 55 % Constant value + +B 46 CONST +P 46 + $Cp % Constant value + +B 47 CONST +P 47 + $FuelEF % Constant value + +B 48 CONST +P 48 + 2 % Constant value + +B 49 CONST +P 49 + 1 % Constant value + +B 50 CONST +P 50 + 300 % Constant value + +B 51 CONST +P 51 + 10 % Constant value + +B 52 CONST +P 52 + 0 % Constant value + +B 53 CONST +P 53 + 12 % Constant value + +B 54 CONST +P 54 + $FuelLHV % Constant value + +B 55 CONST +P 55 + 2 % Constant value + +B 56 CONST +P 56 + 300 % Constant value + +B 57 CONST +P 57 + $b5 % Constant value + +B 58 CONST +P 58 + $HPSupTemp % Constant value + +B 59 CONST +P 59 + 40 % Constant value + +B 60 CONST +P 60 + $a4 % Constant value + +B 61 CONST +P 61 + $b6 % Constant value + +B 62 CONST +P 62 + 2 % Constant value + +B 63 CONST +P 63 + $Cp % Constant value + +B 64 CONST +P 64 + $b1 % Constant value + +B 65 CONST +P 65 + $a1 % Constant value + +B 66 CONST +P 66 + $TemperatureDifference % Constant value + +B 67 CONST +P 67 + $MaximumHPEnergyInput % Constant value + +B 68 CONST +P 68 + $b4 % Constant value + +B 69 CONST +P 69 + $FuelPrice % Constant value + +B 70 CONST +P 70 + $a5 % Constant value + +B 71 CONST +P 71 + 2 % Constant value + +B 72 CONST +P 72 + $Cp % Constant value + +B 73 CONST +P 73 + $BuildingSuppTemp % Constant value + +B 74 CONST +P 74 + 25 % Constant value + +B 75 CONST +P 75 + 0 % Constant value + +B 76 CONST +P 76 + $a2 % Constant value + +B 77 CONST +P 77 + $b3 % Constant value + +B 78 ATT + 191.1 +P 78 + $FuelDensity % Attenuation factor a + +B 79 ATT + 191.1 +P 79 + $FuelDensity % Attenuation factor a + +B 80 ATT + 27.1 +P 80 + $AuxHeaterEfficiency % Attenuation factor a + +B 81 ATT + 191.1 +P 81 + $FuelDensity % Attenuation factor a + +B 82 ATT + 11.1 +P 82 + 12 % Attenuation factor a + +B 83 ATT + 210.5 +P 83 + 3600000 % Attenuation factor a + +B 84 ATT + 161.1 +P 84 + 3600000 % Attenuation factor a + +B 85 ATT + 27.1 +P 85 + 1000 % Attenuation factor a + + +B 125 WRITE + 156.1 + 156.2 + 156.3 +P 125 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut7 % File name + '*' % Fortran format + +B 126 WRITE + 151.1 + 151.2 + 151.3 +P 126 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut2 % File name + '*' % Fortran format + +B 127 WRITE + 154.1 + 154.2 + 154.3 +P 127 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut3 % File name + '*' % Fortran format + +B 128 WRITE + 153.1 + 153.2 + 153.3 +P 128 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut5 % File name + '*' % Fortran format + +B 129 WRITE + 204.1 + 204.2 + 204.3 + 204.4 + 204.5 + 15.1 + 11.1 + 190.1 + 187.1 + 160.1 + 210.1 + 210.2 + 210.3 + 210.4 + 210.5 + 83.1 + 84.1 + 191.1 + 85.1 + 16.1 + 17.1 + 14.1 + 23.1 + 164.1 + 145.1 +P 129 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut1 % File name + '*' % Fortran format + +B 130 WRITE + 204.1 + 204.2 + 204.3 + 152.1 + 152.2 +P 130 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut10 % File name + '*' % Fortran format + +B 131 WRITE + 149.1 + 149.2 +P 131 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut9 % File name + '*' % Fortran format + +B 132 WRITE + 157.1 + 157.2 +P 132 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut8 % File name + '*' % Fortran format + +B 133 WRITE + 150.1 + 150.2 +P 133 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut4 % File name + '*' % Fortran format + +B 134 WRITE + 155.1 + 155.2 +P 134 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut6 % File name + '*' % Fortran format + +B 135 LT + 204.2 + 35.1 + +B 136 LT + 210.1 + 39.1 + +%B 137 SCREEN + %176.1 +%P 137 + %'*' % Format + %'Total CO2 Emissions from Electricity Grid (g)' % Headline + +%B 138 SCREEN + %178.1 +%P 138 + %'*' % Format + %'Total Electricity Cost in a Year (CAD)' % Headline + +%B 139 SCREEN + %173.1 +%P 139 + %'*' % Format + %'Total Cost of the Auxiliary Heater Fuel in a Year (CAD)' % Headline + +%B 140 SCREEN + %177.1 +%P 140 + %'*' % Format + %'Total CO2 Emissions from Auxiliary Heater (g)' % Headline + +%B 141 SCREEN + %189.1 +%P 141 + %'*' % Format + %'HP Seasonal COP' % Headline + +%B 142 SCREEN + %148.1 +%P 142 + %'*' % Format + %'Maximum Number of HPs in Operation' % Headline + +%B 143 SCREEN + %174.1 +%P 143 + %'*' % Format + %'Total Electricuty Demand of Heat Pumps in a year (kWh)' % Headline + +%B 144 SCREEN + %179.1 +%P 144 + %'*' % Format + %'Total Fossil Fuel consumption in a Year (m3)' % Headline + +B 145 READ +P 145 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $HeatingDemand % File name + '*' % Fortran format + +B 146 DELAY + 15.1 +P 146 + 0 % Initial value + +B 147 DELAY + 210.5 +P 147 + 0 % Initial value + +B 148 MAXX + 198.1 + +B 149 CUMC + 204.3 + 205.1 + +B 150 CUMC + 204.2 + 205.1 + +B 151 CUMC + 204.3 + 14.1 + 23.1 + +B 152 CUMC + 204.4 + 82.1 + +B 153 CUMC + 204.2 + 14.1 + 23.1 + +B 154 CUMC + 204.2 + 16.1 + 17.1 + +B 155 CUMC + 204.3 + 82.1 + +B 156 CUMC + 204.3 + 16.1 + 17.1 + +B 157 CUMC + 204.2 + 82.1 + +B 158 SUM + 58.1 + 169.1 + +B 159 SUM + 170.1 + 210.1 + +B 160 SUM + 18.1 + 75.1 + +B 161 SUM + 210.5 + 172.1 + +B 162 SUM + 12.1 + 200.1 + +B 163 SUM + 135.1 + 197.1 + +B 164 SUM + 31.1 + 33.1 + +B 165 SUM + 29.1 + 25.1 + 30.1 + 28.1 + 13.1 + 44.1 + +B 166 SUM + 51.1 + 203.2 + +B 167 SUM + 10.1 + 22.1 + 32.1 + 26.1 + 21.1 + 61.1 + +B 168 SUM + 73.1 + 171.1 + +B 169 CHS + 210.4 + +B 170 CHS + 37.1 + +B 171 CHS + 210.1 + +B 172 CHS + 147.1 + +B 173 CUM + 17.1 + +B 174 CUM + 82.1 + +B 175 CUM + 15.1 + 11.1 + +B 176 CUM + 14.1 + +B 177 CUM + 23.1 + +B 178 CUM + 16.1 + +B 179 CUM + 205.1 + +B 180 EXPG + 58.1 + 55.1 + +B 181 EXPG + 203.2 + 71.1 + +B 182 EXPG + 58.1 + 48.1 + +B 183 EXPG + 203.2 + 62.1 + +B 184 DIV + 11.1 + 53.1 + +B 185 DIV + 67.1 + 165.1 + +B 186 DIV + 11.1 + 42.1 + +B 187 DIV + 206.1 + 19.1 + +B 188 DIV + 207.1 + 20.1 + +B 189 DIV + 175.1 + 175.2 + +B 190 DIV + 15.1 + 11.1 + +B 191 DIV + 80.1 + 54.1 + +B 192 GE + 210.1 + 45.1 +P 192 + 0 % Error tolerance + +B 193 GE + 210.1 + 38.1 +P 193 + 0 % Error tolerance + +B 194 SOY + 204.1 + 204.2 + 204.3 + 204.4 + 204.5 + 204.6 + +B 195 GT + 210.1 + 59.1 + +B 196 GT + 146.1 + 52.1 + +B 197 GT + 204.2 + 41.1 + +B 198 INT + 185.1 + +B 199 MTM + 204.2 +P 199 + 'Montreal' % Location + +B 200 INV + 193.1 + +B 201 INV + 192.1 + +B 202 INV + 195.1 + +B 203 GENGT + 199.1 + 199.3 + 199.4 + 199.5 + 199.7 + 199.8 + 204.1 + 204.2 + 204.3 + 204.4 +P 203 + 45.5 % Latitude + 73.62 % Longitude + 5 % Time zone + 1 % Variance factor of the Gordon Reddy correlation + 0 % Year-to-year variability + 0.3 % Autocorrelation coefficient lag one + 0.171 % Autocorrelation coefficient lag two + 4711 % Initialisation of random number generator + 2 % Maximum allowed mean temperature deviation + 100 % Maximum number of iterations + +B 204 CLOCK +P 204 + $StartYear % Start year + $StartMonth % Start month + $StartDay % Start day + $StartHour % Start hour + $StartMinute % Start minute + $StartSecond % Start second + $EndYear % End year + $EndMonth % End month + $EndDay % End day + $EndHour % End hour + $EndMinute % End minute + $EndSecond % End second + 5 % Increment + 'm' % Unit + +B 205 GAIN + 81.1 +P 205 + 300 % Gain factor g + +B 206 GAIN + 15.1 +P 206 + 1000 % Gain factor g + +B 207 GAIN + 145.1 +P 207 + 1000 % Gain factor g + +B 210 TANKST + 58.1 + 187.1 + 164.1 + 160.1 + 166.1 + 194.1 +P 210 + $TESCapacity % Tank volume + 4 % Number of temperature nodes + $TESDiameter % Tank diameter + $Cp % Specfic heat of fluid + $Rhow % Fluid density + 0 % Overall heat-loss coefficient + 1 % Effective heat conductivity + 30 % Initial tank temperature + diff --git a/data/energy_systems/heat_pumps/water_to_water_tmpl.txt b/data/energy_systems/heat_pumps/w2w_parallel.txt similarity index 100% rename from data/energy_systems/heat_pumps/water_to_water_tmpl.txt rename to data/energy_systems/heat_pumps/w2w_parallel.txt diff --git a/data/energy_systems/heat_pumps/w2w_series.txt b/data/energy_systems/heat_pumps/w2w_series.txt new file mode 100644 index 00000000..1f1b6120 --- /dev/null +++ b/data/energy_systems/heat_pumps/w2w_series.txt @@ -0,0 +1,1067 @@ + +B 1 DIV + 256.1 + 135.1 + +B 2 DIV + 86.1 + 86.2 + +B 3 DIV + 1.1 + 279.1 + +B 4 DIV + 257.1 + 119.1 + +B 5 DIV + 123.1 + 168.1 + +B 6 DIV + 179.1 + 127.1 + +B 7 DIV + 123.1 + 174.1 + +B 8 DIV + 179.1 + 167.1 + +B 9 DIV + 107.1 + 123.1 + +B 10 DIV + 171.1 + 147.1 + +B 11 DIV + 264.1 + 146.1 + +B 76 SCREEN + 2.1 +P 76 + '*' % Format + 'HP Seasonal COP' % Headline + +B 77 SCREEN + 87.1 +P 77 + '*' % Format + 'Total Cost of the Auxiliary Heater Fuel in a Year (CAD)' % Headline + +B 78 SCREEN + 85.1 +P 78 + '*' % Format + 'Total Electricity Cost in a Year (CAD)' % Headline + +B 79 SCREEN + 84.1 +P 79 + '*' % Format + 'Total Fossil Fuel consumption in a Year (m3)' % Headline + +B 80 SCREEN + 89.1 +P 80 + '*' % Format + 'Total CO2 Emissions from Electricity Grid (g)' % Headline + +B 81 SCREEN + 83.1 +P 81 + '*' % Format + 'Total CO2 Emissions from Auxiliary Heater (g)' % Headline + +B 82 SCREEN + 88.1 +P 82 + '*' % Format + 'Total Electricuty Demand of Heat Pumps in a year (kWh)' % Headline + +B 83 CUM + 140.1 + +B 84 CUM + 255.1 + +B 85 CUM + 110.1 + +B 86 CUM + 107.1 + 123.1 + +B 87 CUM + 104.1 + +B 88 CUM + 259.1 + +B 89 CUM + 120.1 + +B 90 SUM + 141.1 + 108.1 + 105.1 + 114.1 + 125.1 + 131.1 + 134.1 + 112.1 + 130.1 + 111.1 + 201.1 + +B 91 SUM + 219.1 + 268.1 + +B 92 SUM + 132.1 + 143.1 + +B 93 SUM + 148.1 + 269.2 + +B 94 SUM + 187.1 + 220.1 + +B 95 SUM + 253.1 + 212.1 + +B 96 SUM + 117.1 + 116.1 + 136.1 + 133.1 + 124.1 + 122.1 + 118.1 + 142.1 + 106.1 + 121.1 + 150.1 + +B 97 SUM + 164.1 + 218.1 + +B 98 SUM + 113.1 + 274.1 + +B 99 SUM + 268.5 + 221.1 + +B 100 SUM + 103.1 + 155.1 + +B 101 SUM + 222.1 + 215.1 + +B 102 SUM + 109.1 + 129.1 + 137.1 + +B 103 MUL + 4.1 + 199.1 + +B 104 MUL + 265.1 + 151.1 + 209.1 + +B 105 MUL + 250.1 + 149.1 + +B 106 MUL + 187.1 + 102.1 + 178.1 + +B 107 MUL + 279.1 + 96.1 + 95.1 + 98.1 + +B 108 MUL + 280.1 + 190.1 + +B 109 MUL + 160.1 + 252.1 + +B 110 MUL + 7.1 + 175.1 + +B 111 MUL + 280.1 + 187.1 + 102.1 + 188.1 + +B 112 MUL + 280.1 + 102.1 + 145.1 + +B 113 MUL + 273.1 + 138.1 + +B 114 MUL + 187.1 + 144.1 + +B 115 MUL + 100.1 + 177.1 + 97.1 + 251.1 + +B 116 MUL + 280.1 + 172.1 + +B 117 MUL + 191.1 + 245.1 + +B 118 MUL + 280.1 + 187.1 + 184.1 + +B 119 MUL + 208.1 + 154.1 + +B 120 MUL + 5.1 + 205.1 + +B 121 MUL + 280.1 + 187.1 + 102.1 + 176.1 + +B 122 MUL + 102.1 + 165.1 + +B 123 MUL + 279.1 + 90.1 + 95.1 + 98.1 + +B 124 MUL + 166.1 + 249.1 + +B 125 MUL + 189.1 + 248.1 + +B 126 MUL + 102.1 + 279.1 + +B 127 MUL + 139.1 + 156.1 + +B 128 MUL + 213.1 + 126.1 + +B 129 MUL + 3.1 + 242.1 + 254.1 + +B 130 MUL + 187.1 + 102.1 + 207.1 + +B 131 MUL + 102.1 + 206.1 + +B 132 MUL + 91.1 + 210.1 + +B 133 MUL + 187.1 + 183.1 + +B 134 MUL + 280.1 + 187.1 + 159.1 + +B 135 MUL + 181.1 + 94.1 + +B 136 MUL + 247.1 + 196.1 + +B 137 MUL + 163.1 + 214.1 + +B 138 MUL + 273.1 + 243.1 + 211.1 + +B 139 MUL + 8.1 + 195.1 + +B 140 MUL + 262.1 + 158.1 + 161.1 + +B 141 MUL + 182.1 + 246.1 + +B 142 MUL + 280.1 + 102.1 + 170.1 + +B 143 MUL + 275.1 + 185.1 + +B 144 CONST +P 144 + $b4 % Constant value + +B 145 CONST +P 145 + $b8 % Constant value + +B 146 CONST +P 146 + $FuelLHV % Constant value + +B 147 CONST +P 147 + $HPNominalCapacity % Constant value + +B 148 CONST +P 148 + 10 % Constant value + +B 149 CONST +P 149 + $b3 % Constant value + +B 150 CONST +P 150 + $a11 % Constant value + +B 151 CONST +P 151 + 300 % Constant value + +B 152 CONST +P 152 + 40 % Constant value + +B 153 CONST +P 153 + 2 % Constant value + +B 154 CONST +P 154 + $TemperatureDifference % Constant value + +B 155 CONST +P 155 + 0 % Constant value + +B 156 CONST +P 156 + $Cp % Constant value + +B 157 CONST +P 157 + 2 % Constant value + +B 158 CONST +P 158 + 300 % Constant value + +B 159 CONST +P 159 + $b7 % Constant value + +B 160 CONST +P 160 + $LowestPossibleLoadFlow % Constant value + +B 161 CONST +P 161 + $FuelEF % Constant value + +B 162 CONST +P 162 + $TemperatureDifference % Constant value + +B 163 CONST +P 163 + $HighestPossibleLoadFlow % Constant value + +B 164 CONST +P 164 + $BuildingSuppTemp % Constant value + +B 165 CONST +P 165 + $a6 % Constant value + +B 166 CONST +P 166 + $a5 % Constant value + +B 167 CONST +P 167 + $HPNominalCapacity % Constant value + +B 168 CONST +P 168 + 12 % Constant value + +B 169 CONST +P 169 + 5 % Constant value + +B 170 CONST +P 170 + $a8 % Constant value + +B 171 CONST +P 171 + $MaximumHPEnergyInput % Constant value + +B 172 CONST +P 172 + $a2 % Constant value + +B 173 CONST +P 173 + 2 % Constant value + +B 174 CONST +P 174 + 12 % Constant value + +B 175 CONST +P 175 + $ElectricityPrice % Constant value + +B 176 CONST +P 176 + $a10 % Constant value + +B 177 CONST +P 177 + $Cp % Constant value + +B 178 CONST +P 178 + $a9 % Constant value + +B 179 CONST +P 179 + $MaximumHPEnergyInput % Constant value + +B 180 CONST +P 180 + 0 % Constant value + +B 181 CONST +P 181 + $Cp % Constant value + +B 182 CONST +P 182 + $b1 % Constant value + +B 183 CONST +P 183 + $a4 % Constant value + +B 184 CONST +P 184 + $a7 % Constant value + +B 185 CONST +P 185 + 25 % Constant value + +B 186 CONST +P 186 + 2 % Constant value + +B 187 CONST +P 187 + $HPSupTemp % Constant value + +B 188 CONST +P 188 + $b10 % Constant value + +B 189 CONST +P 189 + $b5 % Constant value + +B 190 CONST +P 190 + $b2 % Constant value + +B 191 CONST +P 191 + $a1 % Constant value + +B 192 CONST +P 192 + $MaximumHPEnergyInput % Constant value + +B 193 CONST +P 193 + 9 % Constant value + +B 194 CONST +P 194 + 0 % Constant value + +B 195 CONST +P 195 + 7.13 % Constant value + +B 196 CONST +P 196 + $a3 % Constant value + +B 197 CONST +P 197 + 2 % Constant value + +B 198 CONST +P 198 + $HPReactivationTemperature % Constant value + +B 199 CONST +P 199 + 1 % Constant value + +B 200 CONST +P 200 + 2 % Constant value + +B 201 CONST +P 201 + $b11 % Constant value + +B 202 CONST +P 202 + $HPDisactivationTemperature % Constant value + +B 203 CONST +P 203 + 40 % Constant value + +B 204 CONST +P 204 + 0.40 % Constant value + +B 205 CONST +P 205 + $ElecGridEF % Constant value + +B 206 CONST +P 206 + $b6 % Constant value + +B 207 CONST +P 207 + $b9 % Constant value + +B 208 CONST +P 208 + $Cp % Constant value + +B 209 CONST +P 209 + $FuelPrice % Constant value + +B 210 GT + 268.1 + 152.1 + +B 211 GT + 217.1 + 180.1 + +B 212 GT + 271.2 + 193.1 + +B 213 GT + 107.1 + 194.1 + +B 214 GT + 3.1 + 163.1 + +B 215 DELAY + 280.1 +P 215 + 10 % Initial value + +B 216 DELAY + 268.5 +P 216 + 0 % Initial value + +B 217 DELAY + 107.1 +P 217 + 0 % Initial value + +B 218 CHS + 268.1 + +B 219 CHS + 162.1 + +B 220 CHS + 268.4 + +B 221 CHS + 216.1 + +B 222 CHS + 6.1 + +B 223 CUMC + 271.2 + 259.1 + +B 224 CUMC + 271.4 + 259.1 + +B 225 CUMC + 271.2 + 120.1 + 140.1 + +B 226 CUMC + 271.3 + 259.1 + +B 227 CUMC + 271.2 + 110.1 + 104.1 + +B 228 CUMC + 271.3 + 255.1 + +B 229 CUMC + 271.3 + 110.1 + 104.1 + +B 230 CUMC + 271.2 + 255.1 + +B 231 CUMC + 271.3 + 120.1 + 140.1 + +B 232 WRITE + 228.1 + 228.2 +P 232 + 2 % Mode + $fileOut9 % File name + '*' % Fortran format + +B 233 WRITE + 227.1 + 227.2 + 227.3 +P 233 + 2 % Mode + $fileOut3 % File name + '*' % Fortran format + +B 234 WRITE + 226.1 + 226.2 +P 234 + 2 % Mode + $fileOut6 % File name + '*' % Fortran format + +B 235 WRITE + 230.1 + 230.2 +P 235 + 2 % Mode + $fileOut4 % File name + '*' % Fortran format + +B 236 WRITE + 223.1 + 223.2 +P 236 + 2 % Mode + $fileOut8 % File name + '*' % Fortran format + +B 237 WRITE + 231.1 + 231.2 + 231.3 +P 237 + 2 % Mode + $fileOut2 % File name + '*' % Fortran format + +B 238 WRITE + 229.1 + 229.2 + 229.3 +P 238 + 2 % Mode + $fileOut7 % File name + '*' % Fortran format + +B 239 WRITE + 271.1 + 271.2 + 271.3 + 224.1 + 224.2 +P 239 + 2 % Mode + $fileOut10 % File name + '*' % Fortran format + +B 240 WRITE + 225.1 + 225.2 + 225.3 +P 240 + 2 % Mode + $fileOut5 % File name + '*' % Fortran format + +B 241 WRITE + 271.1 + 271.2 + 271.3 + 271.4 + 271.5 + 107.1 + 123.1 + 9.1 + 128.1 + 100.1 + 268.1 + 268.2 + 268.3 + 268.4 + 268.5 + 258.1 + 260.1 + 11.1 + 263.1 + 110.1 + 104.1 + 120.1 + 140.1 + 92.1 + 277.1 + 269.2 + 96.1 + 90.1 +P 241 + 2 % Mode + $fileOut1 % File name + '*' % Fortran format + +B 242 GE + 3.1 + 160.1 +P 242 + 0 % Error tolerance + +B 243 GE + 268.1 + 198.1 +P 243 + 0 % Error tolerance + +B 244 GE + 268.1 + 202.1 +P 244 + 0 % Error tolerance + +B 245 EXPG + 280.1 + 157.1 + +B 246 EXPG + 280.1 + 153.1 + +B 247 EXPG + 187.1 + 197.1 + +B 248 EXPG + 102.1 + 186.1 + +B 249 EXPG + 102.1 + 173.1 + +B 250 EXPG + 187.1 + 200.1 + +B 251 LT + 268.1 + 203.1 + +B 252 LT + 3.1 + 160.1 + +B 253 LT + 271.2 + 169.1 + +B 254 LE + 3.1 + 163.1 +P 254 + 0 % Error tolerance + +B 255 GAIN + 261.1 +P 255 + 300 % Gain factor g + +B 256 GAIN + 171.1 +P 256 + 1000 % Gain factor g + +B 257 GAIN + 277.1 +P 257 + 1000 % Gain factor g + +B 258 ATT + 268.5 +P 258 + 3600000 % Attenuation factor a + +B 259 ATT + 123.1 +P 259 + 12 % Attenuation factor a + +B 260 ATT + 99.1 +P 260 + 3600000 % Attenuation factor a + +B 261 ATT + 11.1 +P 261 + $FuelDensity % Attenuation factor a + +B 262 ATT + 11.1 +P 262 + $FuelDensity % Attenuation factor a + +B 263 ATT + 115.1 +P 263 + 1000 % Attenuation factor a + +B 264 ATT + 115.1 +P 264 + $AuxHeaterEfficiency % Attenuation factor a + +B 265 ATT + 11.1 +P 265 + $FuelDensity % Attenuation factor a + +B 268 TANKST + 187.1 + 128.1 + 92.1 + 100.1 + 93.1 + 272.1 +P 268 + $TESCapacity % Tank volume + 4 % Number of temperature nodes + $TESDiameter % Tank diameter + $Cp % Specfic heat of fluid + $Rhow % Fluid density + 0 % Overall heat-loss coefficient + 1 % Effective heat conductivity + 30 % Initial tank temperature + +B 269 GENGT2 + 270.1 + 270.3 + 270.4 + 270.5 + 270.7 + 270.8 + 271.1 + 271.2 + 271.3 + 271.4 +P 269 + 45.5 % Latitude + -73.62 % Longitude + -5 % UTC Time zone + 1 % Variance factor of the Gordon Reddy correlation + 0 % Year-to-year variability + 0.3 % Autocorrelation coefficient lag one + 0.171 % Autocorrelation coefficient lag two + 4711 % Initialisation of random number generator + 2 % Maximum allowed mean temperature deviation + 100 % Maximum number of iterations + +B 270 MTM2 + 271.2 +P 270 + 'Montreal' % Location + +B 271 CLOCK +P 271 + $StartYear % Start year + $StartMonth % Start month + $StartDay % Start day + $StartHour % Start hour + $StartMinute % Start minute + $StartSecond % Start second + $EndYear % End year + $EndMonth % End month + $EndDay % End day + $EndHour % End hour + $EndMinute % End minute + $EndSecond % End second + 5 % Increment + 'm' % Unit + +B 272 SOY + 271.1 + 271.2 + 271.3 + 271.4 + 271.5 + 271.6 + +B 273 INV + 244.1 + +B 274 INV + 243.1 + +B 275 INV + 210.1 + +B 276 READ +P 276 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $HeatingDemand % File name + '*' % Fortran format + +B 277 READ +P 277 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $WaterTemperature % File name + '*' % Fortran format + +B 278 UBHLOSS + 192.1 + 276.1 +P 278 + 300 % L + 0.5 % D + 0.05 % U + 3 % Tg + 4190 % cp + 1000 % rho + 5 % delta_T + 20 % dx + 300 % df + +B 279 INT + 10.1 + +B 280 HXS + 101.1 + 139.1 + 278.2 + 204.1 +P 280 + 1 % Mode + 5000 % Overall heat transfer coefficient + 1007 % Specific heat of side 1 fluid + 1007 % Specific heat of side 2 fluid + From 883461782cc61ba39c8b2ab64edf5e7c5d5004aa Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Sat, 26 Feb 2022 11:47:23 -0500 Subject: [PATCH 39/54] Added option for running series or parallel simulation --- exports/energy_systems/air_source_hp_export.py | 12 ++++++++++-- .../energy_systems/water_to_water_hp_export.py | 18 ++++++++++-------- exports/energy_systems_factory.py | 17 ++++++++++++++--- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/exports/energy_systems/air_source_hp_export.py b/exports/energy_systems/air_source_hp_export.py index b8214b9d..93a83fc2 100644 --- a/exports/energy_systems/air_source_hp_export.py +++ b/exports/energy_systems/air_source_hp_export.py @@ -14,8 +14,16 @@ class AirSourceHPExport(HeatPumpExport): after executing insel """ - def __init__(self, base_path, city, output_path): - template_path = (base_path / 'heat_pumps/air_source_tmpl.txt') + def __init__(self, base_path, city, output_path, sim_type): + """ + + :param base_path: path to energy system files + :param city: the city object + :param output_path: the file to hold insel simulation results + :param sim_type: the simulation type to run: 1 for series, 0 for parallel + """ + tmp_file = 'heat_pumps/as_series.txt' if sim_type == 1 else 'heat_pumps/as_parallel.txt' + template_path = (base_path / tmp_file) super().__init__(base_path, city, output_path, template_path) def _extract_model_coff(self, hp_model: str, data_type='heat') -> Union[Tuple[List, List], None]: diff --git a/exports/energy_systems/water_to_water_hp_export.py b/exports/energy_systems/water_to_water_hp_export.py index 7154c16f..24919a48 100644 --- a/exports/energy_systems/water_to_water_hp_export.py +++ b/exports/energy_systems/water_to_water_hp_export.py @@ -7,14 +7,22 @@ Copyright © 2021 Project Author Peter Yefi peteryefi@gmail.com from exports.energy_systems.heat_pump_export import HeatPumpExport from typing import List, Tuple, Union + class WaterToWaterHPExport(HeatPumpExport): """ Exports heat pump values as multiple output files after executing insel """ - def __init__(self, base_path, city, output_path): - template_path = (base_path / 'heat_pumps/water_to_water_tmpl.txt') + def __init__(self, base_path, city, output_path, sim_type): + """ + :param base_path: path to energy system files + :param city: the city object + :param output_path: the file to hold insel simulation results + :param sim_type: the simulation type to run: 1 for series, 0 for parallel + """ + tmp_file = 'heat_pumps/w2w_series.txt' if sim_type == 1 else 'heat_pumps/w2w_parallel.txt' + template_path = (base_path / tmp_file) water_temp = (base_path / 'heat_pumps/wt_hourly3.txt') super().__init__(base_path, city, output_path, template_path, water_temp) @@ -48,9 +56,3 @@ class WaterToWaterHPExport(HeatPumpExport): """ pow_demand_coeff, heat_output_coeff = self._extract_model_coff(hp_model, data_type) super(WaterToWaterHPExport, self)._run_insel(user_input, pow_demand_coeff, heat_output_coeff, 'w2w.insel') - - - - - - diff --git a/exports/energy_systems_factory.py b/exports/energy_systems_factory.py index 1ebdfeca..79e100be 100644 --- a/exports/energy_systems_factory.py +++ b/exports/energy_systems_factory.py @@ -15,7 +15,17 @@ class EnergySystemsExportFactory: Exports factory class for energy systems """ - def __init__(self, city, user_input, hp_model, output_path, data_type='heat', base_path=None): + def __init__(self, city, user_input, hp_model, output_path, sim_type=1, data_type='heat', base_path=None): + """ + + :param city: the city object + :param user_input: user provided input from UI + :param hp_model: the heat pump model to run + :param output_path: the file to hold simulation results + :param sim_type: the simulation type, 1 for series 0 for parallel + :param data_type: indicates whether cooling or heating data is used + :param base_path: the data directory of energy systems + """ self._city = city if base_path is None: base_path = base_path = Path(Path(__file__).parent.parent / 'data/energy_systems') @@ -24,6 +34,7 @@ class EnergySystemsExportFactory: self._hp_model = hp_model self._data_type = data_type self._output_path = output_path + self._sim_type = sim_type def _export_heat_pump(self, source): """ @@ -32,10 +43,10 @@ class EnergySystemsExportFactory: :return: None """ if source == 'air': - AirSourceHPExport(self._base_path, self._city, self._output_path)\ + AirSourceHPExport(self._base_path, self._city, self._output_path, self._sim_type)\ .execute_insel(self._user_input, self._hp_model, self._data_type) elif source == 'water': - WaterToWaterHPExport(self._base_path, self._city, self._output_path)\ + WaterToWaterHPExport(self._base_path, self._city, self._output_path, self._sim_type)\ .execute_insel(self._user_input, self._hp_model, self._data_type) def export(self, source='air'): From c22d28fc893b4e994bf4400f82b0fd2fe86542d7 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Thu, 3 Mar 2022 11:42:40 -0500 Subject: [PATCH 40/54] Excluded pycache files --- .gitignore | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.gitignore b/.gitignore index fa2e5085..0c5ffa01 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,26 @@ /data/energy_systems/heat_pumps/*.csv /data/energy_systems/heat_pumps/*.insel unittests/__pycache__ +city_model_structure/attributes/__pycache__/ +city_model_structure/building_demand/__pycache__/ +city_model_structure/energy_systems/__pycache__/ +city_model_structure/iot/__pycache__/ +exports/__pycache__/ +exports/formats/__pycache__/ +helpers/__pycache__/ +imports/__pycache__/ +imports/construction/__pycache__/ +imports/construction/data_classes/__pycache__/ +imports/construction/helpers/__pycache__/ +imports/geometry/__pycache__/ +imports/geometry/citygml_classes/__pycache__/ +imports/geometry/helpers/__pycache__/ +imports/life_cycle_assessment/__pycache__/ +imports/schedules/__pycache__/ +imports/schedules/helpers/__pycache__/ +imports/usage/__pycache__/ +imports/usage/data_classes/__pycache__/ +imports/usage/helpers/__pycache__/ +imports/weather/__pycache__/ +city_model_structure/__pycache__/ .DS_Store \ No newline at end of file From dd26fb6fd543e0a1172570d43852bce9d3596a32 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Thu, 3 Mar 2022 13:48:02 -0500 Subject: [PATCH 41/54] Changed boolean simulation type indicator --- .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 163 bytes .../__pycache__/heat_pump_export.cpython-38.pyc | Bin 0 -> 8925 bytes exports/energy_systems/air_source_hp_export.py | 2 +- .../energy_systems/water_to_water_hp_export.py | 2 +- exports/energy_systems_factory.py | 4 ++-- 5 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 exports/energy_systems/__pycache__/__init__.cpython-38.pyc create mode 100644 exports/energy_systems/__pycache__/heat_pump_export.cpython-38.pyc diff --git a/exports/energy_systems/__pycache__/__init__.cpython-38.pyc b/exports/energy_systems/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c72bf79a0ddfec56d36678103fa2610d83ed71b GIT binary patch literal 163 zcmWIL<>g`kf`3iF5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HAerR!OQL%nO zYDsEQWolZczDsIxc1eDLeoB6BL1Iz1eokgmv3_brL4HvQkj_gjO0SGBt}HG|%`MiC fkI&4@EQycTE2zB1VUwGmQks)$2eRQa5HkP({PQYb literal 0 HcmV?d00001 diff --git a/exports/energy_systems/__pycache__/heat_pump_export.cpython-38.pyc b/exports/energy_systems/__pycache__/heat_pump_export.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f72a477ebe7ebf26c9941029c35997cf0293427f GIT binary patch literal 8925 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 u;Dgu))7Yl literal 0 HcmV?d00001 diff --git a/exports/energy_systems/air_source_hp_export.py b/exports/energy_systems/air_source_hp_export.py index 93a83fc2..c07649cc 100644 --- a/exports/energy_systems/air_source_hp_export.py +++ b/exports/energy_systems/air_source_hp_export.py @@ -22,7 +22,7 @@ class AirSourceHPExport(HeatPumpExport): :param output_path: the file to hold insel simulation results :param sim_type: the simulation type to run: 1 for series, 0 for parallel """ - tmp_file = 'heat_pumps/as_series.txt' if sim_type == 1 else 'heat_pumps/as_parallel.txt' + tmp_file = 'heat_pumps/as_series.txt' if sim_type == 0 else 'heat_pumps/as_parallel.txt' template_path = (base_path / tmp_file) super().__init__(base_path, city, output_path, template_path) diff --git a/exports/energy_systems/water_to_water_hp_export.py b/exports/energy_systems/water_to_water_hp_export.py index 24919a48..7f7c4750 100644 --- a/exports/energy_systems/water_to_water_hp_export.py +++ b/exports/energy_systems/water_to_water_hp_export.py @@ -21,7 +21,7 @@ class WaterToWaterHPExport(HeatPumpExport): :param output_path: the file to hold insel simulation results :param sim_type: the simulation type to run: 1 for series, 0 for parallel """ - tmp_file = 'heat_pumps/w2w_series.txt' if sim_type == 1 else 'heat_pumps/w2w_parallel.txt' + tmp_file = 'heat_pumps/w2w_series.txt' if sim_type == 0 else 'heat_pumps/w2w_parallel.txt' template_path = (base_path / tmp_file) water_temp = (base_path / 'heat_pumps/wt_hourly3.txt') super().__init__(base_path, city, output_path, template_path, water_temp) diff --git a/exports/energy_systems_factory.py b/exports/energy_systems_factory.py index 79e100be..e24e0848 100644 --- a/exports/energy_systems_factory.py +++ b/exports/energy_systems_factory.py @@ -15,14 +15,14 @@ class EnergySystemsExportFactory: Exports factory class for energy systems """ - def __init__(self, city, user_input, hp_model, output_path, sim_type=1, data_type='heat', base_path=None): + def __init__(self, city, user_input, hp_model, output_path, sim_type=0, data_type='heat', base_path=None): """ :param city: the city object :param user_input: user provided input from UI :param hp_model: the heat pump model to run :param output_path: the file to hold simulation results - :param sim_type: the simulation type, 1 for series 0 for parallel + :param sim_type: the simulation type, 0 for series 1 for parallel :param data_type: indicates whether cooling or heating data is used :param base_path: the data directory of energy systems """ From 5e354bbd09390c34640c918d0f7a680d2117883d Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Thu, 3 Mar 2022 13:50:02 -0500 Subject: [PATCH 42/54] ignored __pycache__ --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0c5ffa01..2a704b0d 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,5 @@ imports/usage/data_classes/__pycache__/ imports/usage/helpers/__pycache__/ imports/weather/__pycache__/ city_model_structure/__pycache__/ +imports/energy_systems/__pycache__/ .DS_Store \ No newline at end of file From 7db319f3fdc3be3c0cdcb47c99b8d89bb7cb90cd Mon Sep 17 00:00:00 2001 From: guille Date: Thu, 3 Mar 2022 16:52:01 -0500 Subject: [PATCH 43/54] Partial implementation for the greenery catalog integration --- catalogs/catalog.py | 33 ++ .../ecore_greenery/greenerycatalog.ecore | 268 +++++++++++++++ .../ecore_greenery/greenerycatalog.py | 318 ++++++++++++++++++ .../greenerycatalog_no_quantities.ecore | 268 +++++++++++++++ catalogs/greenery/greenery_catalog.py | 41 +++ catalogs/greenery_catalog_factory.py | 44 +++ data/greenery/ecore_greenery_catalog.xml | 59 ++++ imports/geometry/rhino.py | 1 + 8 files changed, 1032 insertions(+) create mode 100644 catalogs/catalog.py create mode 100644 catalogs/greenery/ecore_greenery/greenerycatalog.ecore create mode 100644 catalogs/greenery/ecore_greenery/greenerycatalog.py create mode 100644 catalogs/greenery/ecore_greenery/greenerycatalog_no_quantities.ecore create mode 100644 catalogs/greenery/greenery_catalog.py create mode 100644 catalogs/greenery_catalog_factory.py create mode 100644 data/greenery/ecore_greenery_catalog.xml diff --git a/catalogs/catalog.py b/catalogs/catalog.py new file mode 100644 index 00000000..ed272383 --- /dev/null +++ b/catalogs/catalog.py @@ -0,0 +1,33 @@ +""" +Catalog base class +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +class Catalog: + """ + Catalog name + """ + + @property + def names(self): + """ + Base property to return the catalog entries names + :return: not implemented error + """ + raise NotImplementedError + + @property + def entries(self): + """ + Base property to return the catalog entries + :return: not implemented error + """ + raise NotImplementedError + + def get_entry(self, name): + """ + Base property to return the catalog entry matching the given name + :return: not implemented error + """ + raise NotImplementedError diff --git a/catalogs/greenery/ecore_greenery/greenerycatalog.ecore b/catalogs/greenery/ecore_greenery/greenerycatalog.ecore new file mode 100644 index 00000000..5c3bb85d --- /dev/null +++ b/catalogs/greenery/ecore_greenery/greenerycatalog.ecore @@ -0,0 +1,268 @@ + + + + +

+ + + + +
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + +
+
+ + + + + + + + + +
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + diff --git a/catalogs/greenery/ecore_greenery/greenerycatalog.py b/catalogs/greenery/ecore_greenery/greenerycatalog.py new file mode 100644 index 00000000..30ac116c --- /dev/null +++ b/catalogs/greenery/ecore_greenery/greenerycatalog.py @@ -0,0 +1,318 @@ +"""Definition of meta model 'greenerycatalog'.""" +from functools import partial +import pyecore.ecore as Ecore +from pyecore.ecore import * + + +name = 'greenerycatalog' +nsURI = 'http://ca.concordia/greenerycatalog' +nsPrefix = 'greenery' + +eClass = EPackage(name=name, nsURI=nsURI, nsPrefix=nsPrefix) + +eClassifiers = {} +getEClassifier = partial(Ecore.getEClassifier, searchspace=eClassifiers) +Management = EEnum('Management', literals=['Intensive', 'Extensive', 'SemiIntensive', 'NA']) + +Roughness = EEnum('Roughness', literals=['VeryRough', 'Rough', + 'MediumRough', 'MediumSmooth', 'Smooth', 'VerySmooth']) + + +class Soil(EObject, metaclass=MetaEClass): + + name = EAttribute(eType=EString, unique=True, derived=False, changeable=True) + roughness = EAttribute(eType=Roughness, unique=True, derived=False, + changeable=True, default_value=Roughness.MediumRough) + conductivityOfDrySoil = EAttribute( + eType=EString, unique=True, derived=False, changeable=True, default_value='1.0 W/(m*K)') + densityOfDrySoil = EAttribute(eType=EString, unique=True, derived=False, + changeable=True, default_value='1100 kg/m³') + specificHeatOfDrySoil = EAttribute( + eType=EString, unique=True, derived=False, changeable=True, default_value='1200 J/(kg*K)') + thermalAbsorptance = EAttribute(eType=EString, unique=True, + derived=False, changeable=True, default_value='0.9') + solarAbsorptance = EAttribute(eType=EString, unique=True, + derived=False, changeable=True, default_value='0.7') + visibleAbsorptance = EAttribute(eType=EString, unique=True, + derived=False, changeable=True, default_value='0.75') + saturationVolumetricMoistureContent = EAttribute( + eType=EString, unique=True, derived=False, changeable=True, default_value='0.0') + residualVolumetricMoistureContent = EAttribute( + eType=EString, unique=True, derived=False, changeable=True, default_value='0.05') + initialVolumetricMoistureContent = EAttribute( + eType=EString, unique=True, derived=False, changeable=True, default_value='0.1') + + def __init__(self, *, name=None, roughness=None, conductivityOfDrySoil=None, densityOfDrySoil=None, specificHeatOfDrySoil=None, thermalAbsorptance=None, solarAbsorptance=None, visibleAbsorptance=None, saturationVolumetricMoistureContent=None, residualVolumetricMoistureContent=None, initialVolumetricMoistureContent=None): + # if kwargs: + # raise AttributeError('unexpected arguments: {}'.format(kwargs)) + + super().__init__() + + if name is not None: + self.name = name + + if roughness is not None: + self.roughness = roughness + + if conductivityOfDrySoil is not None: + self.conductivityOfDrySoil = conductivityOfDrySoil + + if densityOfDrySoil is not None: + self.densityOfDrySoil = densityOfDrySoil + + if specificHeatOfDrySoil is not None: + self.specificHeatOfDrySoil = specificHeatOfDrySoil + + if thermalAbsorptance is not None: + self.thermalAbsorptance = thermalAbsorptance + + if solarAbsorptance is not None: + self.solarAbsorptance = solarAbsorptance + + if visibleAbsorptance is not None: + self.visibleAbsorptance = visibleAbsorptance + + if saturationVolumetricMoistureContent is not None: + self.saturationVolumetricMoistureContent = saturationVolumetricMoistureContent + + if residualVolumetricMoistureContent is not None: + self.residualVolumetricMoistureContent = residualVolumetricMoistureContent + + if initialVolumetricMoistureContent is not None: + self.initialVolumetricMoistureContent = initialVolumetricMoistureContent + + +class Plant(EObject, metaclass=MetaEClass): + + name = EAttribute(eType=EString, unique=True, derived=False, changeable=True) + height = EAttribute(eType=EString, unique=True, derived=False, + changeable=True, default_value='0.1 m') + leafAreaIndex = EAttribute(eType=EString, unique=True, derived=False, + changeable=True, default_value='2.5') + leafReflectivity = EAttribute(eType=EString, unique=True, + derived=False, changeable=True, default_value='0.1') + leafEmissivity = EAttribute(eType=EString, unique=True, derived=False, + changeable=True, default_value='0.9') + minimalStomatalResistance = EAttribute( + eType=EString, unique=True, derived=False, changeable=True, default_value='100.0 s/m') + co2Sequestration = EAttribute(eType=EString, unique=True, derived=False, + changeable=True, default_value='kgCO₂eq') + growsOn = EReference(ordered=True, unique=True, containment=False, derived=False, upper=-1) + + def __init__(self, *, name=None, height=None, leafAreaIndex=None, leafReflectivity=None, leafEmissivity=None, minimalStomatalResistance=None, growsOn=None, co2Sequestration=None): + # if kwargs: + # raise AttributeError('unexpected arguments: {}'.format(kwargs)) + + super().__init__() + + if name is not None: + self.name = name + + if height is not None: + self.height = height + + if leafAreaIndex is not None: + self.leafAreaIndex = leafAreaIndex + + if leafReflectivity is not None: + self.leafReflectivity = leafReflectivity + + if leafEmissivity is not None: + self.leafEmissivity = leafEmissivity + + if minimalStomatalResistance is not None: + self.minimalStomatalResistance = minimalStomatalResistance + + if co2Sequestration is not None: + self.co2Sequestration = co2Sequestration + + if growsOn: + self.growsOn.extend(growsOn) + + +class SupportEnvelope(EObject, metaclass=MetaEClass): + + roughness = EAttribute(eType=Roughness, unique=True, derived=False, + changeable=True, default_value=Roughness.MediumRough) + solarAbsorptance = EAttribute(eType=EDouble, unique=True, + derived=False, changeable=True, default_value=0.0) + conductivity = EAttribute(eType=EDouble, unique=True, derived=False, + changeable=True, default_value=0.0) + visibleAbsorptance = EAttribute(eType=EDouble, unique=True, + derived=False, changeable=True, default_value=0.0) + specificHeat = EAttribute(eType=EDouble, unique=True, derived=False, + changeable=True, default_value=0.0) + density = EAttribute(eType=EDouble, unique=True, derived=False, + changeable=True, default_value=0.0) + thermalAbsorptance = EAttribute(eType=EDouble, unique=True, + derived=False, changeable=True, default_value=0.0) + + def __init__(self, *, roughness=None, solarAbsorptance=None, conductivity=None, visibleAbsorptance=None, specificHeat=None, density=None, thermalAbsorptance=None): + # if kwargs: + # raise AttributeError('unexpected arguments: {}'.format(kwargs)) + + super().__init__() + + if roughness is not None: + self.roughness = roughness + + if solarAbsorptance is not None: + self.solarAbsorptance = solarAbsorptance + + if conductivity is not None: + self.conductivity = conductivity + + if visibleAbsorptance is not None: + self.visibleAbsorptance = visibleAbsorptance + + if specificHeat is not None: + self.specificHeat = specificHeat + + if density is not None: + self.density = density + + if thermalAbsorptance is not None: + self.thermalAbsorptance = thermalAbsorptance + + +class GreeneryCatalog(EObject, metaclass=MetaEClass): + + name = EAttribute(eType=EString, unique=True, derived=False, changeable=True) + description = EAttribute(eType=EString, unique=True, derived=False, changeable=True) + source = EAttribute(eType=EString, unique=True, derived=False, changeable=True) + plantCategories = EReference(ordered=True, unique=True, + containment=True, derived=False, upper=-1) + vegetationCategories = EReference(ordered=True, unique=True, + containment=True, derived=False, upper=-1) + soils = EReference(ordered=True, unique=True, containment=True, derived=False, upper=-1) + + def __init__(self, *, name=None, description=None, source=None, plantCategories=None, vegetationCategories=None, soils=None): + # if kwargs: + # raise AttributeError('unexpected arguments: {}'.format(kwargs)) + + super().__init__() + + if name is not None: + self.name = name + + if description is not None: + self.description = description + + if source is not None: + self.source = source + + if plantCategories: + self.plantCategories.extend(plantCategories) + + if vegetationCategories: + self.vegetationCategories.extend(vegetationCategories) + + if soils: + self.soils.extend(soils) + + +class PlantCategory(EObject, metaclass=MetaEClass): + """Excluding (that is non-overlapping) categories like Trees, Hedeges, Grasses that help users finding a specific biol. plant species.""" + name = EAttribute(eType=EString, unique=True, derived=False, changeable=True) + plants = EReference(ordered=True, unique=True, containment=True, derived=False, upper=-1) + + def __init__(self, *, name=None, plants=None): + # if kwargs: + # raise AttributeError('unexpected arguments: {}'.format(kwargs)) + + super().__init__() + + if name is not None: + self.name = name + + if plants: + self.plants.extend(plants) + + +class IrrigationSchedule(EObject, metaclass=MetaEClass): + + name = EAttribute(eType=EString, unique=True, derived=False, changeable=True) + + def __init__(self, *, name=None): + # if kwargs: + # raise AttributeError('unexpected arguments: {}'.format(kwargs)) + + super().__init__() + + if name is not None: + self.name = name + + +class Vegetation(EObject, metaclass=MetaEClass): + """Plant life or total plant cover (as of an area)""" + name = EAttribute(eType=EString, unique=True, derived=False, changeable=True) + thicknessOfSoil = EAttribute(eType=EString, unique=True, derived=False, + changeable=True, default_value='20 cm') + management = EAttribute(eType=Management, unique=True, derived=False, + changeable=True, default_value=Management.NA) + airGap = EAttribute(eType=EString, unique=True, derived=False, + changeable=True, default_value='0.0 cm') + soil = EReference(ordered=True, unique=True, containment=False, derived=False) + plants = EReference(ordered=True, unique=True, containment=True, derived=False, upper=-1) + + def __init__(self, *, name=None, thicknessOfSoil=None, soil=None, plants=None, management=None, airGap=None): + # if kwargs: + # raise AttributeError('unexpected arguments: {}'.format(kwargs)) + + super().__init__() + + if name is not None: + self.name = name + + if thicknessOfSoil is not None: + self.thicknessOfSoil = thicknessOfSoil + + if management is not None: + self.management = management + + if airGap is not None: + self.airGap = airGap + + if soil is not None: + self.soil = soil + + if plants: + self.plants.extend(plants) + + +class VegetationCategory(EObject, metaclass=MetaEClass): + """Excluding (that is non-overlapping) categories to help users finding a specific vegetation template.""" + name = EAttribute(eType=EString, unique=True, derived=False, changeable=True) + vegetationTemplates = EReference(ordered=True, unique=True, + containment=True, derived=False, upper=-1) + + def __init__(self, *, vegetationTemplates=None, name=None): + # if kwargs: + # raise AttributeError('unexpected arguments: {}'.format(kwargs)) + + super().__init__() + + if name is not None: + self.name = name + + if vegetationTemplates: + self.vegetationTemplates.extend(vegetationTemplates) + + +class PlantPercentage(EObject, metaclass=MetaEClass): + + percentage = EAttribute(eType=EString, unique=True, derived=False, + changeable=True, default_value='100') + plant = EReference(ordered=True, unique=True, containment=False, derived=False) + + def __init__(self, *, percentage=None, plant=None): + # if kwargs: + # raise AttributeError('unexpected arguments: {}'.format(kwargs)) + + super().__init__() + + if percentage is not None: + self.percentage = percentage + + if plant is not None: + self.plant = plant diff --git a/catalogs/greenery/ecore_greenery/greenerycatalog_no_quantities.ecore b/catalogs/greenery/ecore_greenery/greenerycatalog_no_quantities.ecore new file mode 100644 index 00000000..db58a9c0 --- /dev/null +++ b/catalogs/greenery/ecore_greenery/greenerycatalog_no_quantities.ecore @@ -0,0 +1,268 @@ + + + + +
+ + + + +
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + +
+
+ + + + + + + + + +
+ + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + diff --git a/catalogs/greenery/greenery_catalog.py b/catalogs/greenery/greenery_catalog.py new file mode 100644 index 00000000..3ede5ab9 --- /dev/null +++ b/catalogs/greenery/greenery_catalog.py @@ -0,0 +1,41 @@ +""" +Greenery catalog +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +from pyecore.resources import ResourceSet, URI +from catalogs.greenery.ecore_greenery.greenerycatalog import GreeneryCatalog as gc +from catalogs.catalog import Catalog +from pathlib import Path + + +class GreeneryCatalog(Catalog): + + def __init__(self, path): + base_path = Path(Path(__file__).parent / 'ecore_greenery' / 'greenerycatalog_no_quantities.ecore') + resource_set = ResourceSet() + data_model = resource_set.get_resource(URI(str(base_path))) + data_model_root = data_model.contents[0] + resource_set.metamodel_registry[data_model_root.nsURI] = data_model_root + resource = resource_set.get_resource(URI(str(path))) + catalog_data: gc = resource.contents[0] + self._data = {'vegetation': []} + vegetation = [] + for vegetation_category in catalog_data.vegetationCategories: + vegetation.append({vegetation_category.name: []}) + self._data['vegetation'] = vegetation + + @property + def names(self): + """ + :parm: + """ + _names = [] + for category in self._data: + for value in self._data[category]: + for key in value.keys(): + _names.append(key) + return _names + + diff --git a/catalogs/greenery_catalog_factory.py b/catalogs/greenery_catalog_factory.py new file mode 100644 index 00000000..8e7dfe29 --- /dev/null +++ b/catalogs/greenery_catalog_factory.py @@ -0,0 +1,44 @@ +""" +Greenery catalog publish the greenery information +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +from pathlib import Path +from catalogs.greenery.greenery_catalog import GreeneryCatalog + + +class GreeneryCatalogFactory: + """ + GeometryFactory class + """ + def __init__(self, file_type, base_path=None): + if base_path is None: + base_path = Path(Path(__file__).parent.parent / 'data/greenery') + self._file_type = '_' + file_type.lower() + self._path = base_path + + @property + def _nrel(self) -> GreeneryCatalog: + """ + Return a greenery catalog using ecore as datasource + :return: GreeneryCatalog + """ + print('greenery') + return GreeneryCatalog((self._path / 'ecore_greenery_catalog.xml').resolve()) + + @property + def catalog(self) -> GreeneryCatalog: + """ + Enrich the city given to the class using the class given handler + :return: City + """ + return getattr(self, self._file_type, lambda: None) + + @property + def catalog_debug(self) -> GreeneryCatalog: + """ + Enrich the city given to the class using the class given handler + :return: City + """ + return GreeneryCatalog((self._path / 'ecore_greenery_catalog.xml').resolve()) \ No newline at end of file diff --git a/data/greenery/ecore_greenery_catalog.xml b/data/greenery/ecore_greenery_catalog.xml new file mode 100644 index 00000000..41b7801c --- /dev/null +++ b/data/greenery/ecore_greenery_catalog.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/imports/geometry/rhino.py b/imports/geometry/rhino.py index 23df7202..38c350f0 100644 --- a/imports/geometry/rhino.py +++ b/imports/geometry/rhino.py @@ -3,6 +3,7 @@ Rhino module parses rhino files and import the geometry into the city model stru SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca """ +import numpy as np from numpy import inf from rhino3dm import * from rhino3dm._rhino3dm import MeshType From 868dfe22d52489c7002f71577a53df0d84dcc3af Mon Sep 17 00:00:00 2001 From: guille Date: Tue, 8 Mar 2022 20:25:50 -0500 Subject: [PATCH 44/54] Partial implementation for the greenery catalog integration --- .../data_model/greenery/greenery_content.py | 33 ++++ catalogs/data_model/greenery/plant.py | 73 +++++++++ .../data_model/greenery/plant_percentage.py | 17 ++ catalogs/data_model/greenery/soil.py | 96 +++++++++++ catalogs/data_model/greenery/vegetation.py | 151 ++++++++++++++++++ catalogs/greenery/greenery_catalog.py | 44 ++++- catalogs/greenery_catalog_factory.py | 2 +- helpers/yearly_from_daily_schedules.py | 3 +- requirements.txt | 4 +- 9 files changed, 412 insertions(+), 11 deletions(-) create mode 100644 catalogs/data_model/greenery/greenery_content.py create mode 100644 catalogs/data_model/greenery/plant.py create mode 100644 catalogs/data_model/greenery/plant_percentage.py create mode 100644 catalogs/data_model/greenery/soil.py create mode 100644 catalogs/data_model/greenery/vegetation.py diff --git a/catalogs/data_model/greenery/greenery_content.py b/catalogs/data_model/greenery/greenery_content.py new file mode 100644 index 00000000..04018d5b --- /dev/null +++ b/catalogs/data_model/greenery/greenery_content.py @@ -0,0 +1,33 @@ +""" +Greenery catalog content +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +class GreeneryContent: + def __init__(self, vegetations, plants, soils): + self._vegetations = vegetations + self._plants = plants + self._soils = soils + + @property + def vegetations(self): + """ + All vegetation in the catalog + """ + return self._vegetations + + @property + def plants(self): + """ + All plants in the catalog + """ + return self._plants + + @property + def soils(self): + """ + All soils in the catalog + """ + return self._soils + diff --git a/catalogs/data_model/greenery/plant.py b/catalogs/data_model/greenery/plant.py new file mode 100644 index 00000000..0a55269d --- /dev/null +++ b/catalogs/data_model/greenery/plant.py @@ -0,0 +1,73 @@ +""" +Greenery catalog data model Plant class +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + + +class Plant: + def __init__(self, category, plant): + self._name = plant.name + self._category = category + self._height = plant.height + self._leaf_area_index = plant.leafAreaIndex + self._leaf_reflectivity = plant.leafReflectivity + self._leaf_emissivity = plant.leafEmissivity + self._minimal_stomatal_resistance = plant.minimalStomatalResistance + self._co2_sequestration = plant.co2Sequestration + + @property + def name(self): + """ + Get plant name + """ + return self._name + + @property + def category(self): + """ + Get plant category name + """ + return self._category + + @property + def height(self): + """ + Get plant height + """ + return self._height + + @property + def leaf_area_index(self): + """ + Get plant leaf area index + """ + return self._leaf_area_index + + @property + def leaf_reflectivity(self): + """ + Get plant leaf area index + """ + return self._leaf_reflectivity + + @property + def leaf_emissivity(self): + """ + Get plant leaf emissivity + """ + return self._leaf_emissivity + + @property + def minimal_stomatal_resistance(self): + """ + Get plant minimal stomatal resistance + """ + return self._minimal_stomatal_resistance + + @property + def co2_sequestration(self): + """ + Get plant co2 sequestration capacity + """ + return self._co2_sequestration diff --git a/catalogs/data_model/greenery/plant_percentage.py b/catalogs/data_model/greenery/plant_percentage.py new file mode 100644 index 00000000..023ddfda --- /dev/null +++ b/catalogs/data_model/greenery/plant_percentage.py @@ -0,0 +1,17 @@ +""" +Greenery catalog data model Plant percentage class +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +from catalogs.data_model.greenery.plant import Plant + +class PlantPercentage(Plant): + + def __init__(self, percentage, plant): + super().__init__("unknown", plant) + self._percentage = percentage + + @property + def percentage(self): + return self._percentage diff --git a/catalogs/data_model/greenery/soil.py b/catalogs/data_model/greenery/soil.py new file mode 100644 index 00000000..177c3662 --- /dev/null +++ b/catalogs/data_model/greenery/soil.py @@ -0,0 +1,96 @@ +""" +Greenery catalog data model Soil class +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +class Soil: + def __init__(self, soil): + self._name = soil.name + self._roughness = soil.roughness + self._dry_conductivity = soil.conductivityOfDrySoil + self._dry_density = soil.densityOfDrySoil + self._dry_specific_heat = soil.specificHeatOfDrySoil + self._thermal_absorptance = soil.thermalAbsorptance + self._solar_absorptance = soil.solarAbsorptance + self._visible_absorptance = soil.visibleAbsorptance + self._saturation_volumetric_moisture_content = soil.saturationVolumetricMoistureContent + self._residual_volumetric_moisture_content = soil.residualVolumetricMoistureContent + self._initial_volumetric_moisture_content = soil.initialVolumetricMoistureContent + + @property + def name(self): + """ + Get soil name + """ + return self._name + + @property + def roughness(self): + """ + Get soil roughness + """ + return self._roughness + + @property + def dry_conductivity(self): + """ + Get soil dry conductivity + """ + return self._dry_conductivity + + @property + def dry_density(self): + """ + Get soil dry density + """ + return self._dry_density + + @property + def dry_specific_heat(self): + """ + Get soil dry specific heat + """ + return self._dry_specific_heat + + @property + def thermal_absorptance(self): + """ + Get soil thermal absortance + """ + return self._thermal_absorptance + + @property + def solar_absorptance(self): + """ + Get soil solar absortance + """ + return self._solar_absorptance + + @property + def visible_absorptance(self): + """ + Get soil visible absortance + """ + return self._visible_absorptance + + @property + def saturation_volumetric_moisture_content(self): + """ + Get soil saturation volumetric moisture content + """ + return self._saturation_volumetric_moisture_content + + @property + def residual_volumetric_moisture_content(self): + """ + Get soil residual volumetric moisture content + """ + return self._residual_volumetric_moisture_content + + @property + def initial_volumetric_moisture_content(self): + """ + Get soil initial volumetric moisture content + """ + return self._initial_volumetric_moisture_content diff --git a/catalogs/data_model/greenery/vegetation.py b/catalogs/data_model/greenery/vegetation.py new file mode 100644 index 00000000..ec829f70 --- /dev/null +++ b/catalogs/data_model/greenery/vegetation.py @@ -0,0 +1,151 @@ +""" +Greenery catalog data model Vegetation class +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +from catalogs.data_model.greenery.plant_percentage import PlantPercentage + +class Vegetation: + def __init__(self, category, vegetation, plant_percentages): + self._name = vegetation.name + self._category = category + self._soil_thickness = vegetation.thicknessOfSoil + self._management = vegetation.management + self._air_gap = vegetation.airGap + self._soil_name = vegetation.soil.name + self._soil_roughness = vegetation.soil.roughness + self._dry_soil_conductivity = vegetation.soil.conductivityOfDrySoil + self._dry_soil_density = vegetation.soil.densityOfDrySoil + self._dry_soil_specific_heat = vegetation.soil.specificHeatOfDrySoil + self._soil_thermal_absorptance = vegetation.soil.thermalAbsorptance + self._soil_solar_absorptance = vegetation.soil.solarAbsorptance + self._soil_visible_absorptance = vegetation.soil.visibleAbsorptance + self._soil_saturation_volumetric_moisture_content = vegetation.soil.saturationVolumetricMoistureContent + self._soil_residual_volumetric_moisture_content = vegetation.soil.residualVolumetricMoistureContent + self._soil_initial_volumetric_moisture_content = vegetation.soil.initialVolumetricMoistureContent + self._plant_percentages = plant_percentages + + @property + def name(self): + """ + Get vegetation name + """ + return self._name + + @property + def category(self): + """ + Get vegetation category + """ + return self._category + + @property + def soil_thickness(self): + """ + Get soil thickness + """ + return self._soil_thickness + + @property + def management(self): + """ + Get management + """ + return self._management + + @property + def air_gap(self): + """ + Get air gap + """ + return self._air_gap + + @property + def plant_percentages(self) -> [PlantPercentage]: + """ + Get plant percentages + """ + percentage = 0.0 + for plant_percentage in self._plant_percentages: + percentage += plant_percentage.percentage + if percentage > 100: + raise ValueError('the plant percentage in this vegetation is over 100%') + return self._plant_percentages + + @property + def soil_name(self): + """ + Get soil name + """ + return self._soil_name + + @property + def soil_roughness(self): + """ + Get soil roughness + """ + return self._soil_roughness + + @property + def dry_soil_conductivity(self): + """ + Get soil dry conductivity + """ + return self._dry_soil_conductivity + + @property + def dry_soil_density(self): + """ + Get soil dry density + """ + return self._dry_soil_density + + @property + def dry_soil_specific_heat(self): + """ + Get soil dry specific heat + """ + return self._dry_soil_specific_heat + + @property + def soil_thermal_absorptance(self): + """ + Get soil thermal absortance + """ + return self._soil_thermal_absorptance + + @property + def soil_solar_absorptance(self): + """ + Get soil solar absortance + """ + return self._soil_solar_absorptance + + @property + def soil_visible_absorptance(self): + """ + Get soil visible absortance + """ + return self._soil_visible_absorptance + + @property + def soil_saturation_volumetric_moisture_content(self): + """ + Get soil saturation volumetric moisture content + """ + return self._soil_saturation_volumetric_moisture_content + + @property + def soil_residual_volumetric_moisture_content(self): + """ + Get soil residual volumetric moisture content + """ + return self._soil_residual_volumetric_moisture_content + + @property + def soil_initial_volumetric_moisture_content(self): + """ + Get soil initial volumetric moisture content + """ + return self._soil_initial_volumetric_moisture_content diff --git a/catalogs/greenery/greenery_catalog.py b/catalogs/greenery/greenery_catalog.py index 3ede5ab9..b9b8897c 100644 --- a/catalogs/greenery/greenery_catalog.py +++ b/catalogs/greenery/greenery_catalog.py @@ -8,6 +8,11 @@ from pyecore.resources import ResourceSet, URI from catalogs.greenery.ecore_greenery.greenerycatalog import GreeneryCatalog as gc from catalogs.catalog import Catalog from pathlib import Path +from catalogs.data_model.greenery.vegetation import Vegetation as libs_vegetation +from catalogs.data_model.greenery.plant import Plant as libs_plant +from catalogs.data_model.greenery.soil import Soil as libs_soil +from catalogs.data_model.greenery.plant_percentage import PlantPercentage as libs_pp +from catalogs.data_model.greenery.greenery_content import GreeneryContent class GreeneryCatalog(Catalog): @@ -20,11 +25,27 @@ class GreeneryCatalog(Catalog): resource_set.metamodel_registry[data_model_root.nsURI] = data_model_root resource = resource_set.get_resource(URI(str(path))) catalog_data: gc = resource.contents[0] - self._data = {'vegetation': []} - vegetation = [] + + vegetations = [] for vegetation_category in catalog_data.vegetationCategories: - vegetation.append({vegetation_category.name: []}) - self._data['vegetation'] = vegetation + name = vegetation_category.name + for vegetation in vegetation_category.vegetationTemplates: + plant_percentages = [] + + for plant_percentage in vegetation.plants: + plant_percentages.append(libs_pp(plant_percentage.percentage, plant_percentage.plant)) + vegetations.append(libs_vegetation(name, vegetation, plant_percentages)) + plants = [] + for plant_category in catalog_data.plantCategories: + name = plant_category.name + for plant in plant_category.plants: + plants.append(libs_plant(name, plant)) + + soils = [] + for soil in catalog_data.soils: + soils.append(libs_soil(soil)) + + self._data = GreeneryContent(vegetations, plants, soils) @property def names(self): @@ -32,10 +53,17 @@ class GreeneryCatalog(Catalog): :parm: """ _names = [] - for category in self._data: - for value in self._data[category]: - for key in value.keys(): - _names.append(key) + for vegetation in self._data.vegetations: + _names.append(vegetation.name) + for plant in self._data.plants: + _names.append(plant.name) + for soil in self._data.soils: + _names.append(soil.name) return _names + def get_entry(self, name): + return 'value' + @property + def entries(self): + pass diff --git a/catalogs/greenery_catalog_factory.py b/catalogs/greenery_catalog_factory.py index 8e7dfe29..3491d716 100644 --- a/catalogs/greenery_catalog_factory.py +++ b/catalogs/greenery_catalog_factory.py @@ -41,4 +41,4 @@ class GreeneryCatalogFactory: Enrich the city given to the class using the class given handler :return: City """ - return GreeneryCatalog((self._path / 'ecore_greenery_catalog.xml').resolve()) \ No newline at end of file + return GreeneryCatalog((self._path / 'ecore_greenery_catalog.xml').resolve()) diff --git a/helpers/yearly_from_daily_schedules.py b/helpers/yearly_from_daily_schedules.py index c7c3bac5..2c4cd21a 100644 --- a/helpers/yearly_from_daily_schedules.py +++ b/helpers/yearly_from_daily_schedules.py @@ -32,7 +32,8 @@ class YearlyFromDailySchedules: values = [] for month in range(1, 13): - for day in range(1, cal.monthlen(self._year, month)+1): + _, number_days = cal.monthrange(self._year, month) + for day in range(1, number_days+1): week_day = cal.weekday(self._year, month, day) values.extend(weekly_schedules[week_day]) yearly_schedule.type = self._daily_schedules[0].type diff --git a/requirements.txt b/requirements.txt index 457ca623..5329b459 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,4 +15,6 @@ parseidf~=1.0.0 ply~=3.11 rhino3dm~=7.11.1 scipy==1.7.1 -PyYAML==6.0 \ No newline at end of file +PyYAML==6.0 +yaml~=0.2.5 +pyecore~=0.12.2 \ No newline at end of file From d5a4ffe0fa619d08588e57c791e600b48f513df7 Mon Sep 17 00:00:00 2001 From: guille Date: Wed, 9 Mar 2022 11:40:06 -0500 Subject: [PATCH 45/54] Complete implementation for the greenery catalog integration --- catalogs/catalog.py | 3 +- catalogs/data_model/greenery/plant.py | 12 +++ .../data_model/greenery/plant_percentage.py | 8 +- catalogs/greenery/greenery_catalog.py | 76 +++++++++++++++---- unittests/test_greenery_catalog.py | 37 +++++++++ 5 files changed, 115 insertions(+), 21 deletions(-) create mode 100644 unittests/test_greenery_catalog.py diff --git a/catalogs/catalog.py b/catalogs/catalog.py index ed272383..1aff80af 100644 --- a/catalogs/catalog.py +++ b/catalogs/catalog.py @@ -17,8 +17,7 @@ class Catalog: """ raise NotImplementedError - @property - def entries(self): + def entries(self, category=None): """ Base property to return the catalog entries :return: not implemented error diff --git a/catalogs/data_model/greenery/plant.py b/catalogs/data_model/greenery/plant.py index 0a55269d..6ef0c447 100644 --- a/catalogs/data_model/greenery/plant.py +++ b/catalogs/data_model/greenery/plant.py @@ -4,6 +4,8 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2022 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca """ +from catalogs.data_model.greenery.soil import Soil as libs_soil + class Plant: def __init__(self, category, plant): @@ -15,6 +17,9 @@ class Plant: self._leaf_emissivity = plant.leafEmissivity self._minimal_stomatal_resistance = plant.minimalStomatalResistance self._co2_sequestration = plant.co2Sequestration + self._grows_on = [] + for soil in plant.growsOn: + self._grows_on.append(libs_soil(soil)) @property def name(self): @@ -71,3 +76,10 @@ class Plant: Get plant co2 sequestration capacity """ return self._co2_sequestration + + @property + def grows_on(self) -> [libs_soil]: + """ + Get plant compatible soils + """ + return self._grows_on diff --git a/catalogs/data_model/greenery/plant_percentage.py b/catalogs/data_model/greenery/plant_percentage.py index 023ddfda..828e8871 100644 --- a/catalogs/data_model/greenery/plant_percentage.py +++ b/catalogs/data_model/greenery/plant_percentage.py @@ -4,12 +4,12 @@ SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2022 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca """ -from catalogs.data_model.greenery.plant import Plant +from catalogs.data_model.greenery.plant import Plant as libs_plant -class PlantPercentage(Plant): +class PlantPercentage(libs_plant): - def __init__(self, percentage, plant): - super().__init__("unknown", plant) + def __init__(self, percentage, plant_category, plant): + super().__init__(plant_category, plant) self._percentage = percentage @property diff --git a/catalogs/greenery/greenery_catalog.py b/catalogs/greenery/greenery_catalog.py index b9b8897c..aadb9754 100644 --- a/catalogs/greenery/greenery_catalog.py +++ b/catalogs/greenery/greenery_catalog.py @@ -26,6 +26,12 @@ class GreeneryCatalog(Catalog): resource = resource_set.get_resource(URI(str(path))) catalog_data: gc = resource.contents[0] + plants = [] + for plant_category in catalog_data.plantCategories: + name = plant_category.name + for plant in plant_category.plants: + plants.append(libs_plant(name, plant)) + vegetations = [] for vegetation_category in catalog_data.vegetationCategories: name = vegetation_category.name @@ -33,7 +39,12 @@ class GreeneryCatalog(Catalog): plant_percentages = [] for plant_percentage in vegetation.plants: - plant_percentages.append(libs_pp(plant_percentage.percentage, plant_percentage.plant)) + plant_category = "Unknown" + for plant in plants: + if plant.name == plant_percentage.plant.name: + plant_category = plant.category + break + plant_percentages.append(libs_pp(plant_percentage.percentage,plant_category, plant_percentage.plant)) vegetations.append(libs_vegetation(name, vegetation, plant_percentages)) plants = [] for plant_category in catalog_data.plantCategories: @@ -47,23 +58,58 @@ class GreeneryCatalog(Catalog): self._data = GreeneryContent(vegetations, plants, soils) - @property - def names(self): + def names(self, category=None): """ - :parm: + Get the catalog elements names + :parm: optional category filter """ - _names = [] - for vegetation in self._data.vegetations: - _names.append(vegetation.name) - for plant in self._data.plants: - _names.append(plant.name) - for soil in self._data.soils: - _names.append(soil.name) + if category is None: + _names = {'vegetations': [], 'plants': [], 'soils': []} + for vegetation in self._data.vegetations: + _names['vegetations'].append(vegetation.name) + for plant in self._data.plants: + _names['plants'].append(plant.name) + for soil in self._data.soils: + _names['soils'].append(soil.name) + else: + _names = {category: []} + if category == 'vegetations': + for vegetation in self._data.vegetations: + _names[category].append(vegetation.name) + elif category == 'plants': + for plant in self._data.plants: + _names[category].append(plant.name) + elif category == 'soils': + for soil in self._data.soils: + _names[category].append(soil.name) + else: + raise ValueError(f'Unknown category [{category}]') return _names def get_entry(self, name): - return 'value' + """ + Get one complete entry from the greenery catalog + """ + for entry in self._data.vegetations: + if entry.name == name: + return entry + for entry in self._data.plants: + if entry.name == name: + return entry + for entry in self._data.soils: + if entry.name == name: + return entry + raise IndexError(f"{name} doesn't exists in the catalog") - @property - def entries(self): - pass + def entries(self, category=None): + if category is None: + return self._data + else: + if category == 'vegetations': + return self._data.vegetations + elif category == 'plants': + return self._data.plants + elif category == 'soils': + return self._data.soils + else: + raise ValueError(f'Unknown category [{category}]') diff --git a/unittests/test_greenery_catalog.py b/unittests/test_greenery_catalog.py new file mode 100644 index 00000000..74869808 --- /dev/null +++ b/unittests/test_greenery_catalog.py @@ -0,0 +1,37 @@ +""" +TestGeometryFactory test and validate the city model structure geometric parameters +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca +""" + +from unittest import TestCase + +from catalogs.greenery_catalog_factory import GreeneryCatalogFactory + + +class TestGreeneryCatalog(TestCase): + def test_catalog(self): + catalog = GreeneryCatalogFactory('nrel').catalog_debug + catalog_categories = catalog.names() + vegetations = catalog.names('vegetations') + plants = catalog.names('plants') + soils = catalog.names('soils') + self.assertTrue(len(catalog_categories) == 3) + self.assertTrue(len(vegetations['vegetations']) == 4) + self.assertTrue(len(plants['plants']) == 14) + self.assertTrue(len(soils['soils']) == 6) + with self.assertRaises(ValueError): + catalog.names('unknown') + + # retrieving all the entries should not raise any exceptions + for category in catalog_categories: + for value in catalog_categories[category]: + catalog.get_entry(value) + + with self.assertRaises(IndexError): + catalog.get_entry('unknown') + + self.assertTrue(len(catalog.entries().vegetations) == 4) + self.assertTrue(len(catalog.entries().plants) == 14) + self.assertTrue(len(catalog.entries().soils) == 6) + From 993233aff9c8be049a81829d48c6b18af8dcf703 Mon Sep 17 00:00:00 2001 From: guille Date: Wed, 9 Mar 2022 17:02:12 -0500 Subject: [PATCH 46/54] Small bug fixing in greenery catalog and energy_systems_factory.py --- catalogs/data_model/greenery/vegetation.py | 2 +- catalogs/greenery/greenery_catalog.py | 18 +++++++++--------- catalogs/greenery_catalog_factory.py | 1 - exports/energy_systems_factory.py | 6 +++--- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/catalogs/data_model/greenery/vegetation.py b/catalogs/data_model/greenery/vegetation.py index ec829f70..3bc8da2c 100644 --- a/catalogs/data_model/greenery/vegetation.py +++ b/catalogs/data_model/greenery/vegetation.py @@ -68,7 +68,7 @@ class Vegetation: """ percentage = 0.0 for plant_percentage in self._plant_percentages: - percentage += plant_percentage.percentage + percentage += float(plant_percentage.percentage) if percentage > 100: raise ValueError('the plant percentage in this vegetation is over 100%') return self._plant_percentages diff --git a/catalogs/greenery/greenery_catalog.py b/catalogs/greenery/greenery_catalog.py index aadb9754..243bc47b 100644 --- a/catalogs/greenery/greenery_catalog.py +++ b/catalogs/greenery/greenery_catalog.py @@ -73,13 +73,13 @@ class GreeneryCatalog(Catalog): _names['soils'].append(soil.name) else: _names = {category: []} - if category == 'vegetations': + if category.lower() == 'vegetations': for vegetation in self._data.vegetations: _names[category].append(vegetation.name) - elif category == 'plants': + elif category.lower() == 'plants': for plant in self._data.plants: _names[category].append(plant.name) - elif category == 'soils': + elif category.lower() == 'soils': for soil in self._data.soils: _names[category].append(soil.name) else: @@ -91,13 +91,13 @@ class GreeneryCatalog(Catalog): Get one complete entry from the greenery catalog """ for entry in self._data.vegetations: - if entry.name == name: + if entry.name.lower() == name.lower(): return entry for entry in self._data.plants: - if entry.name == name: + if entry.name.lower() == name.lower(): return entry for entry in self._data.soils: - if entry.name == name: + if entry.name.lower() == name.lower(): return entry raise IndexError(f"{name} doesn't exists in the catalog") @@ -105,11 +105,11 @@ class GreeneryCatalog(Catalog): if category is None: return self._data else: - if category == 'vegetations': + if category.lower() == 'vegetations': return self._data.vegetations - elif category == 'plants': + elif category.lower() == 'plants': return self._data.plants - elif category == 'soils': + elif category.lower() == 'soils': return self._data.soils else: raise ValueError(f'Unknown category [{category}]') diff --git a/catalogs/greenery_catalog_factory.py b/catalogs/greenery_catalog_factory.py index 3491d716..3b70687a 100644 --- a/catalogs/greenery_catalog_factory.py +++ b/catalogs/greenery_catalog_factory.py @@ -24,7 +24,6 @@ class GreeneryCatalogFactory: Return a greenery catalog using ecore as datasource :return: GreeneryCatalog """ - print('greenery') return GreeneryCatalog((self._path / 'ecore_greenery_catalog.xml').resolve()) @property diff --git a/exports/energy_systems_factory.py b/exports/energy_systems_factory.py index 6cdf5a2e..3103077a 100644 --- a/exports/energy_systems_factory.py +++ b/exports/energy_systems_factory.py @@ -16,7 +16,7 @@ class EnergySystemsExportFactory: def __init__(self, city, user_input, hp_model, output_path, data_type='heat', base_path=None): self._city = city if base_path is None: - base_path = base_path = Path(Path(__file__).parent.parent / 'data/energy_systems') + base_path = Path(Path(__file__).parent.parent / 'data/energy_systems') self._base_path = base_path self._user_input = user_input self._hp_model = hp_model @@ -29,8 +29,8 @@ class EnergySystemsExportFactory: of some objective function :return: None """ - HeatPumpExport(self._base_path, self._city, self._output_path)\ - .run_insel(self._user_input, self._hp_model, self._data_type) + HeatPumpExport(self._base_path, self._city, self._output_path).run_insel(self._user_input, self._hp_model, + self._data_type) def export(self): """ From 409e894097affc3b633748cea13c5accd3dba44f Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Thu, 10 Mar 2022 12:41:35 -0500 Subject: [PATCH 47/54] Modified template files --- .../energy_systems/heat_pumps/as_parallel.txt | 1342 ++++++++--------- data/energy_systems/heat_pumps/as_series.txt | 1217 +++++++-------- .../heat_pumps/~$air_source.xlsx | Bin 0 -> 165 bytes 3 files changed, 1226 insertions(+), 1333 deletions(-) create mode 100644 data/energy_systems/heat_pumps/~$air_source.xlsx diff --git a/data/energy_systems/heat_pumps/as_parallel.txt b/data/energy_systems/heat_pumps/as_parallel.txt index 0bc186e6..581f7a0e 100644 --- a/data/energy_systems/heat_pumps/as_parallel.txt +++ b/data/energy_systems/heat_pumps/as_parallel.txt @@ -1,130 +1,91 @@ -B 10 MUL - 64.1 - 183.1 +B 17 CONST +P 17 + 12 % Constant value -B 11 MUL - 198.1 - 167.1 - 163.1 - 162.1 +B 18 CONST +P 18 + $a5 % Constant value -B 12 MUL - 201.1 - 24.1 +B 19 CONST +P 19 + 1 % Constant value -B 13 MUL - 70.1 - 180.1 +B 20 CONST +P 20 + $HPSupTemp % Constant value -B 14 MUL - 184.1 - 34.1 +B 21 CONST +P 21 + $AuxHeaterEfficiency % Constant value -B 15 MUL - 198.1 - 165.1 - 163.1 - 162.1 +B 22 CONST +P 22 + $ElecGridEF % Constant value -B 16 MUL - 186.1 - 40.1 +B 23 CONST +P 23 + 2 % Constant value -B 17 MUL - 79.1 - 56.1 - 69.1 +B 24 CONST +P 24 + $Cp % Constant value -B 18 MUL - 188.1 - 49.1 +B 25 CONST +P 25 + 9 % Constant value -B 19 MUL - 46.1 - 158.1 +B 26 CONST +P 26 + 2 % Constant value -B 20 MUL - 72.1 - 66.1 +B 27 CONST +P 27 + $BuildingSuppTemp % Constant value -B 21 MUL - 57.1 - 182.1 +B 28 CONST +P 28 + $a2 % Constant value -B 22 MUL - 203.2 - 43.1 +B 29 CONST +P 29 + $a3 % Constant value -B 23 MUL - 78.1 - 50.1 - 47.1 +B 30 CONST +P 30 + $MaximumHPEnergyInput % Constant value -B 24 MUL - 201.1 - 193.1 - 196.1 +B 31 CONST +P 31 + 12 % Constant value -B 25 MUL - 203.2 - 76.1 +B 32 CONST +P 32 + 12 % Constant value -B 26 MUL - 58.1 - 68.1 - -B 27 MUL - 160.1 - 63.1 - 168.1 - 136.1 - -B 28 MUL - 58.1 - 60.1 - -B 29 MUL - 65.1 - 181.1 - -B 30 MUL - 203.2 - 58.1 - 36.1 - -B 31 MUL - 159.1 - 195.1 - -B 32 MUL - 203.2 - 58.1 - 77.1 - -B 33 MUL - 202.1 - 74.1 +B 33 CONST +P 33 + $a6 % Constant value B 34 CONST P 34 - $ElecGridEF % Constant value + 10 % Constant value B 35 CONST P 35 - 5 % Constant value + 1 % Constant value B 36 CONST P 36 - $a3 % Constant value + $TemperatureDifference % Constant value B 37 CONST P 37 - $TemperatureDifference % Constant value + $ElectricityPrice % Constant value B 38 CONST P 38 - 42 % Constant value + $FuelPrice % Constant value B 39 CONST P 39 @@ -132,641 +93,348 @@ P 39 B 40 CONST P 40 - $ElectricityPrice % Constant value + $Cp % Constant value B 41 CONST P 41 - 9 % Constant value + $HPDisactivationTemperature % Constant value B 42 CONST P 42 - 12 % Constant value + $FuelEF % Constant value B 43 CONST P 43 - $b2 % Constant value + $HPReactivationTemperature % Constant value B 44 CONST P 44 - $a6 % Constant value + $HPNominalCapacity % Constant value B 45 CONST P 45 - 55 % Constant value + 0 % Constant value B 46 CONST P 46 - $Cp % Constant value + $FuelLHV % Constant value B 47 CONST P 47 - $FuelEF % Constant value + 5 % Constant value B 48 CONST P 48 - 2 % Constant value + $TemperatureDifference % Constant value B 49 CONST P 49 - 1 % Constant value + $Cp % Constant value B 50 CONST P 50 - 300 % Constant value + $BuildingSuppTemp % Constant value B 51 CONST P 51 - 10 % Constant value + $a1 % Constant value B 52 CONST P 52 - 0 % Constant value - -B 53 CONST -P 53 - 12 % Constant value - -B 54 CONST -P 54 - $FuelLHV % Constant value - -B 55 CONST -P 55 - 2 % Constant value - -B 56 CONST -P 56 - 300 % Constant value - -B 57 CONST -P 57 - $b5 % Constant value - -B 58 CONST -P 58 - $HPSupTemp % Constant value - -B 59 CONST -P 59 - 40 % Constant value - -B 60 CONST -P 60 $a4 % Constant value -B 61 CONST -P 61 - $b6 % Constant value +B 53 NOP + 120.1 -B 62 CONST -P 62 - 2 % Constant value +B 54 NOP + 68.2 -B 63 CONST -P 63 - $Cp % Constant value +B 55 NOP + 217.1 -B 64 CONST -P 64 - $b1 % Constant value +B 56 NOP + 136.1 -B 65 CONST -P 65 - $a1 % Constant value - -B 66 CONST -P 66 - $TemperatureDifference % Constant value - -B 67 CONST -P 67 - $MaximumHPEnergyInput % Constant value - -B 68 CONST -P 68 - $b4 % Constant value - -B 69 CONST -P 69 - $FuelPrice % Constant value - -B 70 CONST -P 70 - $a5 % Constant value - -B 71 CONST -P 71 - 2 % Constant value - -B 72 CONST -P 72 - $Cp % Constant value - -B 73 CONST -P 73 - $BuildingSuppTemp % Constant value - -B 74 CONST -P 74 - 25 % Constant value - -B 75 CONST -P 75 - 0 % Constant value - -B 76 CONST -P 76 - $a2 % Constant value - -B 77 CONST -P 77 - $b3 % Constant value - -B 78 ATT - 191.1 -P 78 - $FuelDensity % Attenuation factor a - -B 79 ATT - 191.1 -P 79 - $FuelDensity % Attenuation factor a - -B 80 ATT - 27.1 -P 80 - $AuxHeaterEfficiency % Attenuation factor a - -B 81 ATT - 191.1 -P 81 - $FuelDensity % Attenuation factor a - -B 82 ATT - 11.1 -P 82 - 12 % Attenuation factor a - -B 83 ATT - 210.5 -P 83 - 3600000 % Attenuation factor a - -B 84 ATT - 161.1 -P 84 - 3600000 % Attenuation factor a - -B 85 ATT - 27.1 -P 85 - 1000 % Attenuation factor a - - -B 125 WRITE - 156.1 - 156.2 - 156.3 -P 125 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut7 % File name - '*' % Fortran format - -B 126 WRITE - 151.1 - 151.2 - 151.3 -P 126 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut2 % File name - '*' % Fortran format - -B 127 WRITE - 154.1 - 154.2 - 154.3 -P 127 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut3 % File name - '*' % Fortran format - -B 128 WRITE - 153.1 - 153.2 - 153.3 -P 128 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut5 % File name - '*' % Fortran format - -B 129 WRITE - 204.1 - 204.2 - 204.3 - 204.4 - 204.5 - 15.1 - 11.1 - 190.1 - 187.1 - 160.1 - 210.1 - 210.2 - 210.3 - 210.4 - 210.5 - 83.1 - 84.1 - 191.1 - 85.1 - 16.1 - 17.1 - 14.1 - 23.1 - 164.1 - 145.1 -P 129 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut1 % File name - '*' % Fortran format - -B 130 WRITE - 204.1 - 204.2 - 204.3 - 152.1 - 152.2 -P 130 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut10 % File name - '*' % Fortran format - -B 131 WRITE - 149.1 - 149.2 -P 131 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut9 % File name - '*' % Fortran format - -B 132 WRITE - 157.1 - 157.2 -P 132 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut8 % File name - '*' % Fortran format - -B 133 WRITE - 150.1 - 150.2 -P 133 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut4 % File name - '*' % Fortran format - -B 134 WRITE - 155.1 - 155.2 -P 134 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut6 % File name - '*' % Fortran format - -B 135 LT - 204.2 - 35.1 - -B 136 LT - 210.1 - 39.1 - -%B 137 SCREEN - %176.1 -%P 137 - %'*' % Format - %'Total CO2 Emissions from Electricity Grid (g)' % Headline - -%B 138 SCREEN - %178.1 -%P 138 - %'*' % Format - %'Total Electricity Cost in a Year (CAD)' % Headline - -%B 139 SCREEN - %173.1 -%P 139 - %'*' % Format - %'Total Cost of the Auxiliary Heater Fuel in a Year (CAD)' % Headline - -%B 140 SCREEN - %177.1 -%P 140 - %'*' % Format - %'Total CO2 Emissions from Auxiliary Heater (g)' % Headline - -%B 141 SCREEN - %189.1 -%P 141 - %'*' % Format - %'HP Seasonal COP' % Headline - -%B 142 SCREEN - %148.1 -%P 142 - %'*' % Format - %'Maximum Number of HPs in Operation' % Headline - -%B 143 SCREEN - %174.1 -%P 143 - %'*' % Format - %'Total Electricuty Demand of Heat Pumps in a year (kWh)' % Headline - -%B 144 SCREEN - %179.1 -%P 144 - %'*' % Format - %'Total Fossil Fuel consumption in a Year (m3)' % Headline - -B 145 READ -P 145 - 1 % Number of values to be read per record - 0 % Number of records to be skipped on the first call - $HeatingDemand % File name - '*' % Fortran format - -B 146 DELAY - 15.1 -P 146 - 0 % Initial value - -B 147 DELAY - 210.5 -P 147 - 0 % Initial value - -B 148 MAXX - 198.1 - -B 149 CUMC - 204.3 - 205.1 - -B 150 CUMC - 204.2 - 205.1 - -B 151 CUMC - 204.3 - 14.1 - 23.1 - -B 152 CUMC - 204.4 - 82.1 - -B 153 CUMC - 204.2 - 14.1 - 23.1 - -B 154 CUMC - 204.2 - 16.1 - 17.1 - -B 155 CUMC - 204.3 - 82.1 - -B 156 CUMC - 204.3 - 16.1 - 17.1 - -B 157 CUMC - 204.2 - 82.1 - -B 158 SUM - 58.1 - 169.1 - -B 159 SUM - 170.1 - 210.1 - -B 160 SUM - 18.1 - 75.1 - -B 161 SUM - 210.5 - 172.1 - -B 162 SUM - 12.1 - 200.1 - -B 163 SUM - 135.1 - 197.1 - -B 164 SUM - 31.1 - 33.1 - -B 165 SUM - 29.1 - 25.1 - 30.1 - 28.1 - 13.1 - 44.1 - -B 166 SUM - 51.1 - 203.2 - -B 167 SUM - 10.1 - 22.1 - 32.1 - 26.1 - 21.1 - 61.1 - -B 168 SUM - 73.1 - 171.1 - -B 169 CHS - 210.4 - -B 170 CHS - 37.1 - -B 171 CHS - 210.1 - -B 172 CHS - 147.1 - -B 173 CUM - 17.1 - -B 174 CUM - 82.1 - -B 175 CUM - 15.1 - 11.1 - -B 176 CUM - 14.1 - -B 177 CUM - 23.1 - -B 178 CUM - 16.1 - -B 179 CUM - 205.1 - -B 180 EXPG - 58.1 - 55.1 - -B 181 EXPG - 203.2 - 71.1 - -B 182 EXPG - 58.1 - 48.1 - -B 183 EXPG - 203.2 - 62.1 - -B 184 DIV - 11.1 - 53.1 - -B 185 DIV - 67.1 - 165.1 - -B 186 DIV - 11.1 - 42.1 - -B 187 DIV - 206.1 - 19.1 - -B 188 DIV - 207.1 +B 57 NOP 20.1 -B 189 DIV - 175.1 - 175.2 +B 58 NOP + 57.1 -B 190 DIV - 15.1 - 11.1 +B 59 NOP + 165.1 -B 191 DIV - 80.1 +B 60 NOP + 57.1 + +B 61 NOP + 177.1 + +B 62 NOP + 119.1 + +B 63 NOP + 136.1 + +B 64 NOP + 120.1 + +B 65 NOP + 58.1 + +B 66 NOP 54.1 -B 192 GE - 210.1 - 45.1 -P 192 - 0 % Error tolerance +B 67 MIXER % Point 11 + 217.4 + 119.1 + 56.1 + 132.1 -B 193 GE - 210.1 - 38.1 -P 193 - 0 % Error tolerance +B 68 MIXER % Point 5 + 60.1 + 134.1 + 55.1 + 64.1 -B 194 SOY - 204.1 - 204.2 - 204.3 - 204.4 - 204.5 - 204.6 +B 105 MUL + 40.1 + 131.1 -B 195 GT - 210.1 - 59.1 +B 106 MUL + 171.1 + 22.1 -B 196 GT - 146.1 +B 107 MUL + 221.1 + 175.1 + 129.1 + 130.1 + +B 108 MUL + 18.1 + 169.1 + +B 109 MUL + 68.1 + 138.1 + +B 110 MUL + 20.1 52.1 -B 197 GT - 204.2 - 41.1 +B 111 MUL + 205.1 + 212.1 + 140.1 -B 198 INT - 185.1 +B 112 MUL + 207.1 + 48.1 -B 199 MTM - 204.2 -P 199 +B 113 MUL + 210.1 + 19.1 + 42.1 + +B 114 MUL + 51.1 + 168.1 + +B 115 MUL + 208.1 + 35.1 + 38.1 + +B 116 MUL + 205.1 + 111.1 + +B 117 MUL + 203.1 + 50.1 + +B 118 MUL + 185.2 + 20.1 + 29.1 + +B 119 MUL + 139.1 + 127.1 + +B 120 MUL + 214.1 + 133.1 + +B 121 MUL + 172.1 + 37.1 + +B 122 MUL + 215.1 + 24.1 + 68.2 + 216.1 + 126.1 + +B 123 MUL + 185.2 + 28.1 + +B 124 MUL + 221.1 + 44.1 + 129.1 + 130.1 + +B 125 SUM + 34.1 + 185.2 + +B 126 SUM + 27.1 + 197.1 + +B 127 SUM + 61.1 + 200.1 + +B 128 SUM + 109.1 + 117.1 + +B 129 SUM + 213.1 + 141.1 + +B 130 SUM + 116.1 + 204.1 + +B 131 SUM + 20.1 + 196.1 + +B 132 SUM + 66.1 + 198.1 + +B 133 SUM + 202.1 + 179.1 + +B 134 SUM + 61.1 + 201.1 + +B 135 SUM + 114.1 + 123.1 + 118.1 + 110.1 + 108.1 + 33.1 + +B 136 SUM + 128.1 + 199.1 + +B 137 MTM + 167.2 +P 137 'Montreal' % Location -B 200 INV - 193.1 +B 138 GT + 68.1 + 50.1 -B 201 INV - 192.1 +B 139 GT + 61.1 + 179.1 -B 202 INV - 195.1 +B 140 GT + 164.1 + 45.1 -B 203 GENGT - 199.1 - 199.3 - 199.4 - 199.5 - 199.7 - 199.8 - 204.1 - 204.2 - 204.3 - 204.4 -P 203 - 45.5 % Latitude - 73.62 % Longitude - 5 % Time zone - 1 % Variance factor of the Gordon Reddy correlation - 0 % Year-to-year variability - 0.3 % Autocorrelation coefficient lag one - 0.171 % Autocorrelation coefficient lag two - 4711 % Initialisation of random number generator - 2 % Maximum allowed mean temperature deviation - 100 % Maximum number of iterations +B 141 GT + 167.2 + 25.1 -B 204 CLOCK -P 204 +B 142 CUMC + 167.3 + 107.1 + +B 143 CUMC + 167.2 + 206.1 + +B 144 CUMC + 167.3 + 106.1 + 113.1 + +B 145 CUMC + 167.2 + 106.1 + 113.1 + +B 146 CUMC + 167.3 + 206.1 + +B 147 CUMC + 167.2 + 107.1 + +B 148 CUMC + 167.3 + 121.1 + 115.1 + +B 149 CUMC + 167.2 + 121.1 + 115.1 + +B 150 CUMC + 167.4 + 107.1 + +B 158 CUM + 113.1 + +B 159 CUM + 106.1 + +B 160 CUM + 115.1 + +B 161 CUM + 206.1 + +B 162 CUM + 121.1 + +B 163 CUM + 124.1 + 107.1 + +B 164 DELAY + 124.1 +P 164 + 0 % Initial value + +B 165 DELAY + 67.1 +P 165 + 25 % Initial value + +B 166 MAXX + 221.1 + +B 167 CLOCK +P 167 $StartYear % Start year $StartMonth % Start month $StartDay % Start day @@ -782,29 +450,308 @@ P 204 5 % Increment 'm' % Unit -B 205 GAIN - 81.1 -P 205 - 300 % Gain factor g +B 168 EXPG + 185.2 + 23.1 -B 206 GAIN - 15.1 -P 206 - 1000 % Gain factor g +B 169 EXPG + 20.1 + 26.1 -B 207 GAIN +B 170 DIV + 209.1 + 32.1 + +B 171 DIV + 107.1 + 17.1 + +B 172 DIV + 107.1 + 31.1 + +B 173 DIV + 180.1 + 46.1 + +B 174 DIV + 124.1 + 107.1 + +B 175 DIV + 44.1 + 135.1 + +B 176 DIV + 30.1 + 44.1 + +B 177 DIV + 218.1 + 105.1 + +B 178 DIV + 163.1 + 163.2 + +B 179 DIV + 220.1 + 112.1 + +B 180 DIV + 170.1 + 21.1 + +B 185 GENGT + 137.1 + 137.3 + 137.4 + 137.5 + 137.7 + 137.8 + 167.1 + 167.2 + 167.3 + 167.4 +P 185 + 45.5 % Latitude + 73.62 % Longitude + 5 % Time zone + 1 % Variance factor of the Gordon Reddy correlation + 0 % Year-to-year variability + 0.3 % Autocorrelation coefficient lag one + 0.171 % Autocorrelation coefficient lag two + 4711 % Initialisation of random number generator + 2 % Maximum allowed mean temperature deviation + 100 % Maximum number of iterations + +B 186 WRITE + 147.1 + 147.2 +P 186 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut8 % File name + '*' % Fortran format + +B 187 WRITE 145.1 -P 207 - 1000 % Gain factor g + 145.2 + 145.3 +P 187 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut5 % File name + '*' % Fortran format -B 210 TANKST - 58.1 - 187.1 - 164.1 - 160.1 - 166.1 - 194.1 +B 188 WRITE + 148.1 + 148.2 + 148.3 +P 188 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut7 % File name + '*' % Fortran format + +B 189 WRITE + 144.1 + 144.2 + 144.3 +P 189 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut2 % File name + '*' % Fortran format + +B 190 WRITE + 143.1 + 143.2 +P 190 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut4 % File name + '*' % Fortran format + +B 191 WRITE + 149.1 + 149.2 + 149.3 +P 191 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut3 % File name + '*' % Fortran format + +B 192 WRITE + 142.1 + 142.2 +P 192 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut6 % File name + '*' % Fortran format + +B 193 WRITE + 167.1 + 167.2 + 167.3 + 167.4 + 167.5 + 124.1 + 220.1 + 177.1 + 179.1 + 119.1 + 134.1 + 60.1 + 64.1 + 55.1 + 68.2 + 68.1 + 173.1 + 209.1 + 54.1 + 128.1 + 136.1 + 53.1 + 63.1 + 132.1 + 56.1 + 62.1 + 217.4 + 67.2 + 67.1 + 217.1 + 217.2 + 217.3 + 217.4 + 217.5 + 107.1 + 174.1 + 185.2 + 121.1 + 115.1 + 106.1 + 113.1 +P 193 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut1 % File name + '*' % Fortran format + +B 194 WRITE + 146.1 + 146.2 +P 194 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut9 % File name + '*' % Fortran format + +B 195 WRITE + 167.1 + 167.2 + 167.3 + 150.1 + 150.2 +P 195 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut10 % File name + '*' % Fortran format + +B 196 CHS + 59.1 + +B 197 CHS + 68.1 + +B 198 CHS + 53.1 + +B 199 CHS + 36.1 + +B 200 CHS + 179.1 + +B 201 CHS + 62.1 + +B 202 CHS + 177.1 + +B 203 INV + 138.1 + +B 204 INV + 212.1 + +B 205 INV + 211.1 + +B 206 ATT + 173.1 +P 206 + $FuelDensity % Attenuation factor a + +B 207 ATT + 49.1 +P 207 + 1000 % Attenuation factor a + +B 208 ATT + 173.1 +P 208 + $FuelDensity % Attenuation factor a + +B 209 ATT + 122.1 +P 209 + 1000 % Attenuation factor a + +B 210 ATT + 173.1 P 210 + $FuelDensity % Attenuation factor a + +B 211 GE + 217.1 + 41.1 +P 211 + 0 % Error tolerance + +B 212 GE + 217.1 + 43.1 +P 212 + 0 % Error tolerance + +B 213 LT + 167.2 + 47.1 + +B 214 LT + 177.1 + 179.1 + +B 215 LT + 177.1 + 179.1 + +B 216 LT + 68.1 + 39.1 + +B 217 TANKST + 65.1 + 62.1 + 63.1 + 53.1 + 125.1 + 219.1 +P 217 $TESCapacity % Tank volume 4 % Number of temperature nodes $TESDiameter % Tank diameter @@ -814,3 +761,26 @@ P 210 1 % Effective heat conductivity 30 % Initial tank temperature +B 218 GAIN + 124.1 +P 218 + 1000 % Gain factor g + +B 219 SOY + 167.1 + 167.2 + 167.3 + 167.4 + 167.5 + 167.6 + +B 220 READ +P 220 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $HeatingDemand % File name + '*' % Fortran format + +B 221 INT + 176.1 + diff --git a/data/energy_systems/heat_pumps/as_series.txt b/data/energy_systems/heat_pumps/as_series.txt index 0bc186e6..cc78cb9c 100644 --- a/data/energy_systems/heat_pumps/as_series.txt +++ b/data/energy_systems/heat_pumps/as_series.txt @@ -1,772 +1,679 @@ -B 10 MUL - 64.1 - 183.1 +B 9 ATT + 112.1 +P 9 + 12 % Attenuation factor a -B 11 MUL - 198.1 - 167.1 - 163.1 - 162.1 +B 10 ATT + 186.5 +P 10 + 3600000 % Attenuation factor a -B 12 MUL - 201.1 - 24.1 +B 11 ATT + 124.1 +P 11 + $FuelDensity % Attenuation factor a -B 13 MUL - 70.1 - 180.1 +B 12 ATT + 124.1 +P 12 + $FuelDensity % Attenuation factor a -B 14 MUL - 184.1 - 34.1 +B 13 ATT + 123.1 +P 13 + $AuxHeaterEfficiency % Attenuation factor a -B 15 MUL - 198.1 - 165.1 - 163.1 - 162.1 +B 14 ATT + 124.1 +P 14 + $FuelDensity % Attenuation factor a -B 16 MUL - 186.1 - 40.1 +B 15 ATT + 109.1 +P 15 + 1000 % Attenuation factor a -B 17 MUL - 79.1 - 56.1 - 69.1 - -B 18 MUL - 188.1 - 49.1 - -B 19 MUL - 46.1 - 158.1 - -B 20 MUL - 72.1 - 66.1 - -B 21 MUL - 57.1 - 182.1 - -B 22 MUL - 203.2 - 43.1 - -B 23 MUL - 78.1 - 50.1 - 47.1 - -B 24 MUL - 201.1 - 193.1 - 196.1 - -B 25 MUL - 203.2 - 76.1 - -B 26 MUL - 58.1 - 68.1 - -B 27 MUL - 160.1 - 63.1 - 168.1 +B 16 ATT 136.1 +P 16 + 3600000 % Attenuation factor a -B 28 MUL - 58.1 - 60.1 +B 17 CONST +P 17 + 0 % Constant value -B 29 MUL - 65.1 - 181.1 +B 18 CONST +P 18 + 5 % Constant value -B 30 MUL - 203.2 - 58.1 - 36.1 +B 19 CONST +P 19 + 0 % Constant value -B 31 MUL - 159.1 - 195.1 +B 20 CONST +P 20 + 12 % Constant value -B 32 MUL - 203.2 - 58.1 - 77.1 +B 21 CONST +P 21 + $Cp % Constant value -B 33 MUL - 202.1 - 74.1 +B 22 CONST +P 22 + 1 % Constant value + +B 23 CONST +P 23 + $TemperatureDifference % Constant value + +B 24 CONST +P 24 + $TemperatureDifference % Constant value + +B 25 CONST +P 25 + $ElecGridEF % Constant value + +B 26 CONST +P 26 + 12 % Constant value + +B 27 CONST +P 27 + $a4 % Constant value + +B 28 CONST +P 28 + $Cp % Constant value + +B 29 CONST +P 29 + 25 % Constant value + +B 30 CONST +P 30 + $MaximumHPEnergyInput % Constant value + +B 31 CONST +P 31 + $HPDisactivationTemperature % Constant value + +B 32 CONST +P 32 + 1 % Constant value + +B 33 CONST +P 33 + $a2 % Constant value B 34 CONST P 34 - $ElecGridEF % Constant value + $a3 % Constant value B 35 CONST P 35 - 5 % Constant value + $a1 % Constant value B 36 CONST P 36 - $a3 % Constant value + $FuelPrice % Constant value B 37 CONST P 37 - $TemperatureDifference % Constant value + $a5 % Constant value B 38 CONST P 38 - 42 % Constant value + 12 % Constant value B 39 CONST P 39 - 40 % Constant value + 9 % Constant value B 40 CONST P 40 - $ElectricityPrice % Constant value + 40 % Constant value B 41 CONST P 41 - 9 % Constant value + 1 % Constant value B 42 CONST P 42 - 12 % Constant value + 2 % Constant value B 43 CONST P 43 - $b2 % Constant value + 40 % Constant value B 44 CONST P 44 - $a6 % Constant value + $BuildingSuppTemp % Constant value B 45 CONST P 45 - 55 % Constant value + $Cp % Constant value B 46 CONST P 46 - $Cp % Constant value + $HPReactivationTemperature % Constant value B 47 CONST P 47 - $FuelEF % Constant value + 0 % Constant value B 48 CONST P 48 - 2 % Constant value + $FuelEF % Constant value B 49 CONST P 49 - 1 % Constant value + 2 % Constant value B 50 CONST P 50 - 300 % Constant value + $HPNominalCapacity % Constant value B 51 CONST P 51 - 10 % Constant value + $a6 % Constant value B 52 CONST P 52 - 0 % Constant value + $ElectricityPrice % Constant value B 53 CONST P 53 - 12 % Constant value + 10 % Constant value B 54 CONST P 54 - $FuelLHV % Constant value + $HPSupTemp % Constant value B 55 CONST P 55 - 2 % Constant value + 0 % Constant value B 56 CONST P 56 - 300 % Constant value + $FuelLHV % Constant value -B 57 CONST -P 57 - $b5 % Constant value +B 93 MAXX + 137.1 -B 58 CONST -P 58 - $HPSupTemp % Constant value +B 94 MUL + 199.2 + 33.1 -B 59 CONST -P 59 - 40 % Constant value +B 95 MUL + 35.1 + 152.1 -B 60 CONST -P 60 - $a4 % Constant value +B 96 MUL + 134.1 + 192.1 -B 61 CONST -P 61 - $b6 % Constant value +B 97 MUL + 45.1 + 133.1 -B 62 CONST -P 62 - 2 % Constant value +B 98 MUL + 12.1 + 41.1 + 36.1 -B 63 CONST -P 63 - $Cp % Constant value +B 99 MUL + 137.1 + 190.1 + 122.1 -B 64 CONST -P 64 - $b1 % Constant value +B 100 MUL + 151.1 + 106.1 -B 65 CONST -P 65 - $a1 % Constant value +B 101 MUL + 121.1 + 32.1 -B 66 CONST -P 66 - $TemperatureDifference % Constant value +B 102 MUL + 137.1 + 50.1 + 141.1 + 139.1 -B 67 CONST -P 67 - $MaximumHPEnergyInput % Constant value +B 103 MUL + 28.1 + 23.1 -B 68 CONST -P 68 - $b4 % Constant value - -B 69 CONST -P 69 - $FuelPrice % Constant value - -B 70 CONST -P 70 - $a5 % Constant value - -B 71 CONST -P 71 - 2 % Constant value - -B 72 CONST -P 72 - $Cp % Constant value - -B 73 CONST -P 73 - $BuildingSuppTemp % Constant value - -B 74 CONST -P 74 - 25 % Constant value - -B 75 CONST -P 75 - 0 % Constant value - -B 76 CONST -P 76 - $a2 % Constant value - -B 77 CONST -P 77 - $b3 % Constant value - -B 78 ATT - 191.1 -P 78 - $FuelDensity % Attenuation factor a - -B 79 ATT - 191.1 -P 79 - $FuelDensity % Attenuation factor a - -B 80 ATT +B 104 MUL + 54.1 27.1 -P 80 - $AuxHeaterEfficiency % Attenuation factor a -B 81 ATT +B 105 MUL + 199.2 + 54.1 + 34.1 + +B 106 MUL + 151.1 + 184.1 191.1 -P 81 - $FuelDensity % Attenuation factor a -B 82 ATT +B 107 MUL 11.1 -P 82 - 12 % Attenuation factor a + 22.1 + 48.1 -B 83 ATT - 210.5 -P 83 - 3600000 % Attenuation factor a +B 108 MUL + 37.1 + 153.1 -B 84 ATT - 161.1 -P 84 - 3600000 % Attenuation factor a +B 109 MUL + 140.1 + 21.1 + 142.1 + 114.1 -B 85 ATT - 27.1 -P 85 - 1000 % Attenuation factor a +B 110 MUL + 149.1 + 29.1 +B 111 MUL + 118.1 + 52.1 -B 125 WRITE - 156.1 - 156.2 - 156.3 -P 125 +B 112 MUL + 137.1 + 116.1 + 141.1 + 139.1 + +B 113 MUL + 125.1 + 25.1 + +B 114 LT + 186.1 + 43.1 + +B 115 LT + 194.2 + 18.1 + +B 116 DIV + 50.1 + 135.1 + +B 117 DIV + 132.1 + 132.2 + +B 118 DIV + 112.1 + 38.1 + +B 119 DIV + 30.1 + 50.1 + +B 120 DIV + 102.1 + 112.1 + +B 121 DIV + 196.1 + 103.1 + +B 122 DIV + 195.1 + 97.1 + +B 123 DIV + 15.1 + 20.1 + +B 124 DIV + 13.1 + 56.1 + +B 125 DIV + 112.1 + 26.1 + +B 126 CUM + 113.1 + +B 127 CUM + 98.1 + +B 128 CUM + 9.1 + +B 129 CUM + 14.1 + +B 130 CUM + 107.1 + +B 131 CUM + 111.1 + +B 132 CUM + 102.1 + 112.1 + +B 133 SUM + 54.1 + 145.1 + +B 134 SUM + 146.1 + 186.1 + +B 135 SUM + 95.1 + 94.1 + 105.1 + 104.1 + 108.1 + 51.1 + +B 136 SUM + 186.5 + 147.1 + +B 137 SUM + 200.1 + +B 138 SUM + 96.1 + 110.1 + +B 139 SUM + 100.1 + 150.1 + +B 140 SUM + 101.1 + 19.1 + +B 141 SUM + 115.1 + 189.1 + +B 142 SUM + 44.1 + 144.1 + +B 143 SUM + 53.1 + 199.2 + +B 144 CHS + 186.1 + +B 145 CHS + 186.4 + +B 146 CHS + 24.1 + +B 147 CHS + 188.1 + +B 148 SOY + 194.1 + 194.2 + 194.3 + 194.4 + 194.5 + 194.6 + +B 149 INV + 192.1 + +B 150 INV + 184.1 + +B 151 INV + 183.1 + +B 152 EXPG + 199.2 + 42.1 + +B 153 EXPG + 54.1 + 49.1 + +B 164 WRITE + 176.1 + 176.2 + 176.3 +P 164 2 % Mode 0 % Suppress FNQ inputs $fileOut7 % File name '*' % Fortran format -B 126 WRITE - 151.1 - 151.2 - 151.3 -P 126 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut2 % File name - '*' % Fortran format - -B 127 WRITE - 154.1 - 154.2 - 154.3 -P 127 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut3 % File name - '*' % Fortran format - -B 128 WRITE - 153.1 - 153.2 - 153.3 -P 128 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut5 % File name - '*' % Fortran format - -B 129 WRITE - 204.1 - 204.2 - 204.3 - 204.4 - 204.5 - 15.1 - 11.1 - 190.1 - 187.1 - 160.1 - 210.1 - 210.2 - 210.3 - 210.4 - 210.5 - 83.1 - 84.1 - 191.1 - 85.1 - 16.1 - 17.1 - 14.1 - 23.1 - 164.1 - 145.1 -P 129 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut1 % File name - '*' % Fortran format - -B 130 WRITE - 204.1 - 204.2 - 204.3 - 152.1 - 152.2 -P 130 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut10 % File name - '*' % Fortran format - -B 131 WRITE - 149.1 - 149.2 -P 131 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut9 % File name - '*' % Fortran format - -B 132 WRITE - 157.1 - 157.2 -P 132 - 2 % Mode - 0 % Suppress FNQ inputs - $fileOut8 % File name - '*' % Fortran format - -B 133 WRITE - 150.1 - 150.2 -P 133 +B 165 WRITE + 179.1 + 179.2 +P 165 2 % Mode 0 % Suppress FNQ inputs $fileOut4 % File name '*' % Fortran format -B 134 WRITE - 155.1 - 155.2 -P 134 +B 166 WRITE + 182.1 + 182.2 + 182.3 +P 166 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut5 % File name + '*' % Fortran format + +B 167 WRITE + 194.1 + 194.2 + 194.3 + 194.4 + 194.5 + 102.1 + 112.1 + 120.1 + 99.1 + 140.1 + 186.1 + 186.2 + 186.3 + 186.4 + 186.5 + 10.1 + 16.1 + 124.1 + 15.1 + 111.1 + 98.1 + 113.1 + 107.1 + 138.1 + 198.1 + 199.2 +P 167 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut1 % File name + '*' % Fortran format + +B 168 WRITE + 175.1 + 175.2 + 175.3 +P 168 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut3 % File name + '*' % Fortran format + +B 169 WRITE + 194.1 + 194.2 + 194.3 + 177.1 + 177.2 +P 169 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut10 % File name + '*' % Fortran format + +B 170 WRITE + 174.1 + 174.2 +P 170 2 % Mode 0 % Suppress FNQ inputs $fileOut6 % File name '*' % Fortran format -B 135 LT - 204.2 - 35.1 - -B 136 LT - 210.1 - 39.1 - -%B 137 SCREEN - %176.1 -%P 137 - %'*' % Format - %'Total CO2 Emissions from Electricity Grid (g)' % Headline - -%B 138 SCREEN - %178.1 -%P 138 - %'*' % Format - %'Total Electricity Cost in a Year (CAD)' % Headline - -%B 139 SCREEN - %173.1 -%P 139 - %'*' % Format - %'Total Cost of the Auxiliary Heater Fuel in a Year (CAD)' % Headline - -%B 140 SCREEN - %177.1 -%P 140 - %'*' % Format - %'Total CO2 Emissions from Auxiliary Heater (g)' % Headline - -%B 141 SCREEN - %189.1 -%P 141 - %'*' % Format - %'HP Seasonal COP' % Headline - -%B 142 SCREEN - %148.1 -%P 142 - %'*' % Format - %'Maximum Number of HPs in Operation' % Headline - -%B 143 SCREEN - %174.1 -%P 143 - %'*' % Format - %'Total Electricuty Demand of Heat Pumps in a year (kWh)' % Headline - -%B 144 SCREEN - %179.1 -%P 144 - %'*' % Format - %'Total Fossil Fuel consumption in a Year (m3)' % Headline - -B 145 READ -P 145 - 1 % Number of values to be read per record - 0 % Number of records to be skipped on the first call - $HeatingDemand % File name +B 171 WRITE + 178.1 + 178.2 + 178.3 +P 171 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut2 % File name '*' % Fortran format -B 146 DELAY - 15.1 -P 146 - 0 % Initial value +B 172 WRITE + 181.1 + 181.2 +P 172 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut9 % File name + '*' % Fortran format -B 147 DELAY - 210.5 -P 147 - 0 % Initial value +B 173 WRITE + 180.1 + 180.2 +P 173 + 2 % Mode + 0 % Suppress FNQ inputs + $fileOut8 % File name + '*' % Fortran format -B 148 MAXX - 198.1 +B 174 CUMC + 194.3 + 9.1 -B 149 CUMC - 204.3 - 205.1 +B 175 CUMC + 194.2 + 111.1 + 98.1 -B 150 CUMC - 204.2 - 205.1 +B 176 CUMC + 194.3 + 111.1 + 98.1 -B 151 CUMC - 204.3 +B 177 CUMC + 194.4 + 9.1 + +B 178 CUMC + 194.3 + 113.1 + 107.1 + +B 179 CUMC + 194.2 14.1 - 23.1 -B 152 CUMC - 204.4 - 82.1 +B 180 CUMC + 194.2 + 9.1 -B 153 CUMC - 204.2 +B 181 CUMC + 194.3 14.1 - 23.1 -B 154 CUMC - 204.2 - 16.1 - 17.1 +B 182 CUMC + 194.2 + 113.1 + 107.1 -B 155 CUMC - 204.3 - 82.1 - -B 156 CUMC - 204.3 - 16.1 - 17.1 - -B 157 CUMC - 204.2 - 82.1 - -B 158 SUM - 58.1 - 169.1 - -B 159 SUM - 170.1 - 210.1 - -B 160 SUM - 18.1 - 75.1 - -B 161 SUM - 210.5 - 172.1 - -B 162 SUM - 12.1 - 200.1 - -B 163 SUM - 135.1 - 197.1 - -B 164 SUM +B 183 GE + 186.1 31.1 - 33.1 +P 183 + 0 % Error tolerance -B 165 SUM - 29.1 - 25.1 - 30.1 - 28.1 - 13.1 - 44.1 +B 184 GE + 186.1 + 46.1 +P 184 + 0 % Error tolerance -B 166 SUM - 51.1 - 203.2 - -B 167 SUM - 10.1 - 22.1 - 32.1 - 26.1 - 21.1 - 61.1 - -B 168 SUM - 73.1 - 171.1 - -B 169 CHS - 210.4 - -B 170 CHS - 37.1 - -B 171 CHS - 210.1 - -B 172 CHS - 147.1 - -B 173 CUM +B 185 GE + 193.1 17.1 +P 185 + 0 % Error tolerance -B 174 CUM - 82.1 +B 186 TANKST + 54.1 + 99.1 + 138.1 + 140.1 + 143.1 + 148.1 +P 186 + $TESCapacity % Tank volume + 4 % Number of temperature nodes + $TESDiameter % Tank diameter + $Cp % Specfic heat of fluid + $Rhow % Fluid density + 0 % Overall heat-loss coefficient + 1 % Effective heat conductivity + 30 % Initial tank temperature -B 175 CUM - 15.1 - 11.1 +B 187 DELAY + 102.1 +P 187 + 0 % Initial value -B 176 CUM - 14.1 +B 188 DELAY + 186.5 +P 188 + 0 % Initial value -B 177 CUM - 23.1 +B 189 GT + 194.2 + 39.1 -B 178 CUM - 16.1 +B 190 GT + 102.1 + 47.1 -B 179 CUM - 205.1 - -B 180 EXPG - 58.1 +B 191 GT + 187.1 55.1 -B 181 EXPG - 203.2 - 71.1 +B 192 GT + 186.1 + 40.1 -B 182 EXPG - 58.1 - 48.1 +B 193 FRAC + 119.1 -B 183 EXPG - 203.2 - 62.1 - -B 184 DIV - 11.1 - 53.1 - -B 185 DIV - 67.1 - 165.1 - -B 186 DIV - 11.1 - 42.1 - -B 187 DIV - 206.1 - 19.1 - -B 188 DIV - 207.1 - 20.1 - -B 189 DIV - 175.1 - 175.2 - -B 190 DIV - 15.1 - 11.1 - -B 191 DIV - 80.1 - 54.1 - -B 192 GE - 210.1 - 45.1 -P 192 - 0 % Error tolerance - -B 193 GE - 210.1 - 38.1 -P 193 - 0 % Error tolerance - -B 194 SOY - 204.1 - 204.2 - 204.3 - 204.4 - 204.5 - 204.6 - -B 195 GT - 210.1 - 59.1 - -B 196 GT - 146.1 - 52.1 - -B 197 GT - 204.2 - 41.1 - -B 198 INT - 185.1 - -B 199 MTM - 204.2 -P 199 - 'Montreal' % Location - -B 200 INV - 193.1 - -B 201 INV - 192.1 - -B 202 INV - 195.1 - -B 203 GENGT - 199.1 - 199.3 - 199.4 - 199.5 - 199.7 - 199.8 - 204.1 - 204.2 - 204.3 - 204.4 -P 203 - 45.5 % Latitude - 73.62 % Longitude - 5 % Time zone - 1 % Variance factor of the Gordon Reddy correlation - 0 % Year-to-year variability - 0.3 % Autocorrelation coefficient lag one - 0.171 % Autocorrelation coefficient lag two - 4711 % Initialisation of random number generator - 2 % Maximum allowed mean temperature deviation - 100 % Maximum number of iterations - -B 204 CLOCK -P 204 +B 194 CLOCK +P 194 $StartYear % Start year $StartMonth % Start month $StartDay % Start day @@ -782,35 +689,51 @@ P 204 5 % Increment 'm' % Unit -B 205 GAIN - 81.1 -P 205 - 300 % Gain factor g - -B 206 GAIN - 15.1 -P 206 +B 195 GAIN + 50.1 +P 195 1000 % Gain factor g -B 207 GAIN - 145.1 -P 207 +B 196 GAIN + 198.1 +P 196 1000 % Gain factor g -B 210 TANKST - 58.1 - 187.1 - 164.1 - 160.1 - 166.1 +B 197 MTM + 194.2 +P 197 + 'Montreal' % Location + +B 198 READ +P 198 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $HeatingDemand % File name + '*' % Fortran format + +B 199 GENGT + 197.1 + 197.3 + 197.4 + 197.5 + 197.7 + 197.8 194.1 -P 210 - $TESCapacity % Tank volume - 4 % Number of temperature nodes - $TESDiameter % Tank diameter - $Cp % Specfic heat of fluid - $Rhow % Fluid density - 0 % Overall heat-loss coefficient - 1 % Effective heat conductivity - 30 % Initial tank temperature + 194.2 + 194.3 + 194.4 +P 199 + 45.5 % Latitude + 73.62 % Longitude + 5 % Time zone + 1 % Variance factor of the Gordon Reddy correlation + 0 % Year-to-year variability + 0.3 % Autocorrelation coefficient lag one + 0.171 % Autocorrelation coefficient lag two + 4711 % Initialisation of random number generator + 2 % Maximum allowed mean temperature deviation + 100 % Maximum number of iterations + +B 200 INT + 119.1 diff --git a/data/energy_systems/heat_pumps/~$air_source.xlsx b/data/energy_systems/heat_pumps/~$air_source.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5a932052db2a5d1e1d32a453f59be330b8becc3b GIT binary patch literal 165 zcmWgj%}g%JFV0UZQSeVo%S=vH2rW)6QXm9G8GIQs8Il=_81fm4fjEt!gh7G9A4sQx R#Z!U2P@qgIP=x};5CA3W7%cz* literal 0 HcmV?d00001 From 99a0ac0bce29ddd9486fbbdc46b6e9ea0ae582e2 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Thu, 10 Mar 2022 12:42:12 -0500 Subject: [PATCH 48/54] Removed unneeded attributes --- .gitignore | 24 ------------ .../energy_systems/air_source_hp.py | 38 ------------------- 2 files changed, 62 deletions(-) diff --git a/.gitignore b/.gitignore index 2a704b0d..10a17b31 100644 --- a/.gitignore +++ b/.gitignore @@ -4,28 +4,4 @@ /development_tests/ /data/energy_systems/heat_pumps/*.csv /data/energy_systems/heat_pumps/*.insel -unittests/__pycache__ -city_model_structure/attributes/__pycache__/ -city_model_structure/building_demand/__pycache__/ -city_model_structure/energy_systems/__pycache__/ -city_model_structure/iot/__pycache__/ -exports/__pycache__/ -exports/formats/__pycache__/ -helpers/__pycache__/ -imports/__pycache__/ -imports/construction/__pycache__/ -imports/construction/data_classes/__pycache__/ -imports/construction/helpers/__pycache__/ -imports/geometry/__pycache__/ -imports/geometry/citygml_classes/__pycache__/ -imports/geometry/helpers/__pycache__/ -imports/life_cycle_assessment/__pycache__/ -imports/schedules/__pycache__/ -imports/schedules/helpers/__pycache__/ -imports/usage/__pycache__/ -imports/usage/data_classes/__pycache__/ -imports/usage/helpers/__pycache__/ -imports/weather/__pycache__/ -city_model_structure/__pycache__/ -imports/energy_systems/__pycache__/ .DS_Store \ No newline at end of file diff --git a/city_model_structure/energy_systems/air_source_hp.py b/city_model_structure/energy_systems/air_source_hp.py index 9b219a16..4f9695c7 100644 --- a/city_model_structure/energy_systems/air_source_hp.py +++ b/city_model_structure/energy_systems/air_source_hp.py @@ -19,11 +19,9 @@ class AirSourceHP(HeatPump): self._cooling_capacity = None self._cooling_comp_power = None self._cooling_capacity_coff = None # a coefficients for insel - self._cooling_comp_power_coff = None # b coefficients for insel self._heating_capacity = None self._heating_comp_power = None self._heating_capacity_coff = None - self._heating_comp_power_coff = None @property def cooling_capacity(self) -> List[float]: @@ -78,24 +76,6 @@ class AirSourceHP(HeatPump): if self._cooling_capacity_coff is None: self._cooling_capacity_coff = value - @property - def cooling_comp_power_coff(self) -> List[float]: - """ - Get cooling compressor power coefficients - :return: [float] - """ - return self._cooling_comp_power_coff - - @cooling_comp_power_coff.setter - def cooling_comp_power_coff(self, value): - """ - Set the value for cooling compressor power coefficients - :param value: [float] - :return: - """ - if self._cooling_comp_power_coff is None: - self._cooling_comp_power_coff = value - @property def heating_capacity(self) -> List[float]: """ @@ -132,24 +112,6 @@ class AirSourceHP(HeatPump): if self._heating_comp_power is None: self._heating_comp_power = value - @property - def heating_comp_power_coff(self) -> List[float]: - """ - Get heating compressor power coefficients - :return: [float] - """ - return self._heating_comp_power_coff - - @heating_comp_power_coff.setter - def heating_comp_power_coff(self, value): - """ - Set the value for heating compressor power coefficients - :param value: [float] - :return: - """ - if self._heating_comp_power_coff is None: - self._heating_comp_power_coff = value - @property def heating_capacity_coff(self) -> List[float]: """ From 380c6644a33fce935028d8613d080d99c09d5388 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Thu, 10 Mar 2022 12:44:04 -0500 Subject: [PATCH 49/54] Changed how coefficients are generated --- .../heat_pumps/~$air_source.xlsx | Bin 165 -> 0 bytes .../energy_systems/air_source_hp_export.py | 8 ++--- exports/energy_systems/heat_pump_export.py | 34 ++++++++---------- .../air_source_hp_parameters.py | 13 +++---- .../test_energy_systems_air_source_hp.py | 2 +- 5 files changed, 27 insertions(+), 30 deletions(-) delete mode 100644 data/energy_systems/heat_pumps/~$air_source.xlsx diff --git a/data/energy_systems/heat_pumps/~$air_source.xlsx b/data/energy_systems/heat_pumps/~$air_source.xlsx deleted file mode 100644 index 5a932052db2a5d1e1d32a453f59be330b8becc3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmWgj%}g%JFV0UZQSeVo%S=vH2rW)6QXm9G8GIQs8Il=_81fm4fjEt!gh7G9A4sQx R#Z!U2P@qgIP=x};5CA3W7%cz* diff --git a/exports/energy_systems/air_source_hp_export.py b/exports/energy_systems/air_source_hp_export.py index c07649cc..9ea7f7d7 100644 --- a/exports/energy_systems/air_source_hp_export.py +++ b/exports/energy_systems/air_source_hp_export.py @@ -38,8 +38,8 @@ class AirSourceHPExport(HeatPumpExport): for energy_system in self._city.energy_systems: if energy_system.air_source_hp.model == hp_model: if data_type == 'heat': - return energy_system.air_source_hp.heating_capacity_coff, energy_system.air_source_hp.heating_comp_power_coff - return energy_system.air_source_hp.cooling_capacity_coff, energy_system.air_source_hp.cooling_comp_power_coff + return energy_system.air_source_hp.heating_capacity_coff + return energy_system.air_source_hp.cooling_capacity_coff return None def execute_insel(self, user_input, hp_model, data_type): @@ -55,5 +55,5 @@ class AirSourceHPExport(HeatPumpExport): :return: :return: """ - capacity_coeff, power_coeff = self._extract_model_coff(hp_model, data_type) - super(AirSourceHPExport, self)._run_insel(user_input, capacity_coeff, power_coeff, 'air_source.insel') + capacity_coeff = self._extract_model_coff(hp_model, data_type) + super(AirSourceHPExport, self)._run_insel(user_input, capacity_coeff, 'air_source.insel') diff --git a/exports/energy_systems/heat_pump_export.py b/exports/energy_systems/heat_pump_export.py index 3f5b9c73..f44edbf4 100644 --- a/exports/energy_systems/heat_pump_export.py +++ b/exports/energy_systems/heat_pump_export.py @@ -27,18 +27,17 @@ class HeatPumpExport: self._base_path = base_path self._output_path = output_path - def _run_insel(self, user_input: Dict, capacity_coeff: List, power_coeff: List, filename: str) -> None: + def _run_insel(self, user_input: Dict, capacity_coeff: List, filename: str) -> None: """ Runs insel and write the necessary files :param user_input: a dictionary containing the user values necessary to run insel :param capacity_coeff: a list containing capacity coefficients - :param power_coeff: a list containing power demand coefficients :param filename: the name of the insel file to be created :return: """ self._input_data = user_input - self._update_input_data_with_coff(capacity_coeff, power_coeff) + self._update_input_data_with_coff(capacity_coeff) # update input data with constants self._update_input_data_with_constants() # update input data with input and output files for insel @@ -82,7 +81,7 @@ class HeatPumpExport: 'HP Operational Cost (CAD)', 'Auxiliary Heater Operational Cost (CAD)', 'Operational CO2 Emissions of HP (g)', 'Operational CO2 Emissions of Auxiliary Heater (g)', - 'Return Temperature', 'Demand (kW)'], + 'Return Temperature', 'Demand (kW)', 'Test Column'], self._input_data['fileOut2']: ['Day', 'Operational Daily Emissions from Heat Pumps (g)', 'Operational Daily Emissions from Auxiliary Heater (g)'], self._input_data['fileOut3']: ['Month', 'Monthly Operational Costs of Heat Pumps (CAD)', @@ -158,9 +157,18 @@ class HeatPumpExport: for key, value in constants_dict.items(): self._input_data[key] = value # compute water to water HP specific values - if self._water_temp is not None: + if 55 <= self._input_data['HPSupTemp'] <= 60: self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 5 self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 18 + elif 50 <= self._input_data["HPSupTemp"] < 55: + self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 5 + self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 13 + elif 45 <= self._input_data["HPSupTemp"] < 50: + self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 3 + self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 8 + elif 35 <= self._input_data["HPSupTemp"] < 40: + self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 2 + self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 4 # compute maximum demand. TODO: This should come from catalog in the future max_demand = self._compute_max_demand() @@ -168,12 +176,11 @@ class HeatPumpExport: self._input_data["TESCapacity"] = self._input_data["HoursOfStorageAtMaxDemand"] * (max_demand * 3.6) / ( (self._input_data["Cp"] / 1000) * self._input_data["TemperatureDifference"]) - def _update_input_data_with_coff(self, a_coeff: List, b_coeff: List): + def _update_input_data_with_coff(self, a_coeff: List): """ Updates the user data with coefficients derived from imports :param a_coeff: insel a coefficient values - :param b_coeff: insel b coefficient values - Meaning of a and b are in the respective models for air source heat pump + Meaning of a is in the models for air source heat pump and water to water source heat pump :return: """ @@ -183,12 +190,6 @@ class HeatPumpExport: self._input_data["a4"] = a_coeff[3] self._input_data["a5"] = a_coeff[4] self._input_data["a6"] = a_coeff[5] - self._input_data["b1"] = b_coeff[0] - self._input_data["b2"] = b_coeff[1] - self._input_data["b3"] = b_coeff[2] - self._input_data["b4"] = b_coeff[3] - self._input_data["b5"] = b_coeff[4] - self._input_data["b6"] = b_coeff[5] # additional coefficients for water to water source if self._water_temp is not None: @@ -197,11 +198,6 @@ class HeatPumpExport: self._input_data["a9"] = a_coeff[8] self._input_data["a10"] = a_coeff[9] self._input_data["a11"] = a_coeff[10] - self._input_data["b7"] = b_coeff[6] - self._input_data["b8"] = b_coeff[7] - self._input_data["b9"] = b_coeff[8] - self._input_data["b10"] = b_coeff[9] - self._input_data["b11"] = b_coeff[10] def _get_user_out_put(self): """ diff --git a/imports/energy_systems/air_source_hp_parameters.py b/imports/energy_systems/air_source_hp_parameters.py index 7e62f1af..5c0334b0 100644 --- a/imports/energy_systems/air_source_hp_parameters.py +++ b/imports/energy_systems/air_source_hp_parameters.py @@ -76,12 +76,10 @@ class AirSourceHeatPumpParameters: c_data = self._extract_heat_pump_data(v_cool) heat_pump.cooling_capacity = c_data[0] heat_pump.cooling_comp_power = c_data[1] - heat_pump.cooling_capacity_coff = self._compute_coefficients(c_data[0], "cool") - heat_pump.cooling_comp_power_coff = self._compute_coefficients(c_data[1], "cool") + heat_pump.cooling_capacity_coff = self._compute_coefficients(c_data, "cool") heat_pump.heating_capacity = h_data[0] heat_pump.heating_comp_power = h_data[1] - heat_pump.heating_capacity_coff = self._compute_coefficients(h_data[0]) - heat_pump.heating_comp_power_coff = self._compute_coefficients(h_data[1]) + heat_pump.heating_capacity_coff = self._compute_coefficients(h_data) energy_system = EnergySystem('{} capacity heat pump'.format(heat_pump.model), 0, [], None) energy_system.air_source_hp = heat_pump @@ -123,10 +121,13 @@ class AirSourceHeatPumpParameters: x_values = heat_x_values if data_type == "heat" else cool_x_values x_values = x_values.tolist() # convert list of lists to one list - heat_pump_data = list(itertools.chain.from_iterable(heat_pump_data)) + + hp_data = [i/j for i, j in + zip(list(itertools.chain.from_iterable(heat_pump_data[0])), + list(itertools.chain.from_iterable(heat_pump_data[1])))] # Compute heat output coefficients - popt, _ = curve_fit(self._objective_function, [x_values, out_temp], heat_pump_data) + popt, _ = curve_fit(self._objective_function, [x_values, out_temp], hp_data) return popt.tolist() def _objective_function(self, xdata: List, a1: float, a2: float, a3: float, a4: float, a5: float, a6: float) -> float: diff --git a/unittests/test_energy_systems_air_source_hp.py b/unittests/test_energy_systems_air_source_hp.py index b596f73a..ca9ab04e 100644 --- a/unittests/test_energy_systems_air_source_hp.py +++ b/unittests/test_energy_systems_air_source_hp.py @@ -52,7 +52,7 @@ class TestEnergySystemsFactory(TestCase): EnergySystemsExportFactory(self._city, user_input, '012', self._output_path).export() df = pd.read_csv(self._output_path) self.assertEqual(df.shape, (13, 3)) - self.assertEqual(df.iloc[0, 1], 3045398.0) + self.assertEqual(df.iloc[0, 1], 1867715.88) def tearDown(self) -> None: try: From a8e44d5e3017ea546faeed4558c475515bbf8571 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Fri, 11 Mar 2022 10:18:33 -0500 Subject: [PATCH 50/54] Fixed issue with additional column for tech performance during series air source run --- exports/energy_systems/heat_pump_export.py | 23 ++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/exports/energy_systems/heat_pump_export.py b/exports/energy_systems/heat_pump_export.py index f44edbf4..bdcfcdae 100644 --- a/exports/energy_systems/heat_pump_export.py +++ b/exports/energy_systems/heat_pump_export.py @@ -71,6 +71,17 @@ class HeatPumpExport: Write headers to the various csv file generated by insel :return: """ + file_one_headers = ['Year', ' Month', ' Day', 'Hour', 'Minute', 'HP Heat Output (kW)', + 'HP Electricity Consumption (kW)', 'HP COP', 'TES Charging Rate (kg/s)', + 'TES Discharging Rate (kg/s)', 'TES Node 1 Temperature', 'TES Node 2 Temperature', + 'TES Node 3 Temperature', 'TES Node 4 Temperature', 'TES Energy Content (J)', + 'TES Energy Content (kWh)', 'TES Energy Content Variation (kWh)', + 'Auxiliary Heater Fuel Flow Rate (kg/s)', 'Auxiliary Heater Energy Input (kW)', + 'HP Operational Cost (CAD)', 'Auxiliary Heater Operational Cost (CAD)', + 'Operational CO2 Emissions of HP (g)', + 'Operational CO2 Emissions of Auxiliary Heater (g)', + 'Return Temperature', 'Demand (kW)', 'Test Column'] + header_data = { self._input_data['fileOut1']: ['Year', ' Month', ' Day', 'Hour', 'Minute', 'HP Heat Output (kW)', 'HP Electricity Consumption (kW)', 'HP COP', 'TES Charging Rate (kg/s)', @@ -81,7 +92,7 @@ class HeatPumpExport: 'HP Operational Cost (CAD)', 'Auxiliary Heater Operational Cost (CAD)', 'Operational CO2 Emissions of HP (g)', 'Operational CO2 Emissions of Auxiliary Heater (g)', - 'Return Temperature', 'Demand (kW)', 'Test Column'], + 'Return Temperature', 'Demand (kW)'], self._input_data['fileOut2']: ['Day', 'Operational Daily Emissions from Heat Pumps (g)', 'Operational Daily Emissions from Auxiliary Heater (g)'], self._input_data['fileOut3']: ['Month', 'Monthly Operational Costs of Heat Pumps (CAD)', @@ -100,6 +111,11 @@ class HeatPumpExport: for file_path, header in header_data.items(): file_path = file_path.strip("'") df = pd.read_csv(file_path, header=None, sep='\s+') + # ignore ambient temperature for air source series run + if df.shape[1] > 25: + df.drop(columns=df.columns[-1], + axis=1, + inplace=True) df.to_csv(file_path, header=header) def _update_input_data_with_files(self): @@ -167,8 +183,8 @@ class HeatPumpExport: self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 3 self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 8 elif 35 <= self._input_data["HPSupTemp"] < 40: - self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 2 - self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 4 + self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 2 + self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 4 # compute maximum demand. TODO: This should come from catalog in the future max_demand = self._compute_max_demand() @@ -215,4 +231,3 @@ class HeatPumpExport: s = pd.Series(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec", "Total"]) df = df.set_index([s]) df.to_csv(self._output_path) - From c8c4a681e34f801f50df151e31bf8120f8d56782 Mon Sep 17 00:00:00 2001 From: guille Date: Wed, 16 Mar 2022 13:21:51 -0400 Subject: [PATCH 51/54] Fixing bugs in idf export --- exports/formats/idf.py | 156 +++++++++++++----- exports/formats/idf_files/Minimal.idf | 5 +- .../one_building_in_kelowna_alkis.gml | 2 +- 3 files changed, 116 insertions(+), 47 deletions(-) diff --git a/exports/formats/idf.py b/exports/formats/idf.py index b956367e..54e899d3 100644 --- a/exports/formats/idf.py +++ b/exports/formats/idf.py @@ -3,6 +3,7 @@ TestOccupancyFactory test and validate the city model structure schedules parame SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2020 Project Author Soroush Samareh Abolhassani - soroush.samarehabolhassani@mail.concordia.ca """ + from geomeppy import IDF @@ -18,6 +19,7 @@ class Idf: _MATERIAL_NOMASS = 'MATERIAL:NOMASS' _ROUGHNESS = 'MediumRough' _HOURLY_SCHEDULE = 'SCHEDULE:DAY:HOURLY' + _COMPACT_SCHEDULE = 'SCHEDULE:COMPACT' _ZONE = 'ZONE' _LIGHTS = 'LIGHTS' _PEOPLE = 'PEOPLE' @@ -28,8 +30,8 @@ class Idf: _ON_OFF = 'On/Off' _FRACTION = 'Fraction' _ANY_NUMBER = 'Any Number' - _CONTINUOUS = 'CONTINUOUS' - _DISCRETE = 'DISCRETE' + _CONTINUOUS = 'Continuous' + _DISCRETE = 'Discrete' idf_surfaces = { # todo: make an enum for all the surface types @@ -42,9 +44,18 @@ class Idf: 'residential': 'residential_building' } + idf_type_limits = { + 'on_off': 'on/off', + 'fraction': 'Fraction', + 'any_number': 'Any Number', + 'continuous': 'Continuous', + 'discrete': 'Discrete' + } + def __init__(self, city, output_path, idf_file_path, idd_file_path, epw_file_path, export_type="Surfaces"): self._city = city - self._output_path = str((output_path / f'{city.name}.idf').resolve()) + self._output_path = str(output_path.resolve()) + self._output_file = str((output_path / f'{city.name}.idf').resolve()) self._export_type = export_type self._idd_file_path = str(idd_file_path) self._idf_file_path = str(idf_file_path) @@ -59,10 +70,13 @@ class Idf: self._export() @staticmethod - def _matrix_to_list(points): + def _matrix_to_list(points, lower_corner): + lower_x = lower_corner[0] + lower_y = lower_corner[1] + lower_z = lower_corner[2] points_list = [] for point in points: - point_tuple = (point[0], point[1], point[2]) + point_tuple = (point[0]-lower_x, point[1]-lower_y, point[2]-lower_z) points_list.append(point_tuple) return points_list @@ -103,41 +117,71 @@ class Idf: Visible_Absorptance=layer.material.visible_absorptance ) - def _add_schedule(self, usage_zone, schedule_type, limit_name='Any Number'): + def _add_daily_schedule(self, usage_zone, schedule): + _schedule = self._idf.newidfobject(self._COMPACT_SCHEDULE, Name=f'{schedule.type} schedules {usage_zone.usage}') + _val = schedule.values + _schedule.Schedule_Type_Limits_Name = self.idf_type_limits[schedule.data_type.lower()] + _schedule.Field_1 = "Through: 12/31" + _schedule.Field_2 = "For: AllDays" + _schedule.Field_3 = "Until: 01:00" + _schedule.Field_4 = _val[0] + _schedule.Field_5 = "Until: 02:00" + _schedule.Field_6 = _val[1] + _schedule.Field_7 = "Until: 03:00" + _schedule.Field_8 = _val[2] + _schedule.Field_9 = "Until: 04:00" + _schedule.Field_10 = _val[3] + _schedule.Field_11 = "Until: 05:00" + _schedule.Field_12 = _val[4] + _schedule.Field_13 = "Until: 06:00" + _schedule.Field_14 = _val[5] + _schedule.Field_15 = "Until: 07:00" + _schedule.Field_16 = _val[6] + _schedule.Field_17 = "Until: 08:00" + _schedule.Field_18 = _val[7] + _schedule.Field_19 = "Until: 09:00" + _schedule.Field_20 = _val[8] + _schedule.Field_21 = "Until: 10:00" + _schedule.Field_22 = _val[9] + _schedule.Field_23 = "Until: 11:00" + _schedule.Field_24 = _val[10] + _schedule.Field_25 = "Until: 12:00" + _schedule.Field_26 = _val[11] + _schedule.Field_27 = "Until: 13:00" + _schedule.Field_28 = _val[12] + _schedule.Field_29 = "Until: 14:00" + _schedule.Field_30 = _val[13] + _schedule.Field_31 = "Until: 15:00" + _schedule.Field_32 = _val[14] + _schedule.Field_33 = "Until: 16:00" + _schedule.Field_34 = _val[15] + _schedule.Field_35 = "Until: 17:00" + _schedule.Field_36 = _val[16] + _schedule.Field_37 = "Until: 18:00" + _schedule.Field_38 = _val[17] + _schedule.Field_39 = "Until: 19:00" + _schedule.Field_40 = _val[18] + _schedule.Field_41 = "Until: 20:00" + _schedule.Field_42 = _val[19] + _schedule.Field_43 = "Until: 21:00" + _schedule.Field_44 = _val[20] + _schedule.Field_45 = "Until: 22:00" + _schedule.Field_46 = _val[21] + _schedule.Field_47 = "Until: 23:00" + _schedule.Field_48 = _val[22] + _schedule.Field_49 = "Until: 24:00" + _schedule.Field_50 = _val[23] + + def _add_schedule(self, usage_zone, schedule_type): for schedule in self._idf.idfobjects[self._HOURLY_SCHEDULE]: if schedule.Name == f'{schedule_type} schedules {usage_zone.usage}': return - if usage_zone.schedules is None or schedule_type not in usage_zone.schedules: - # there are no schedule for this type - return - schedule = self._idf.newidfobject(self._HOURLY_SCHEDULE, Name=f'{schedule_type} schedules {usage_zone.usage}') - schedule.Schedule_Type_Limits_Name = limit_name - - schedule.Hour_1 = usage_zone.schedules[schedule_type]["WD"][0] - schedule.Hour_2 = usage_zone.schedules[schedule_type]["WD"][1] - schedule.Hour_3 = usage_zone.schedules[schedule_type]["WD"][2] - schedule.Hour_4 = usage_zone.schedules[schedule_type]["WD"][3] - schedule.Hour_5 = usage_zone.schedules[schedule_type]["WD"][4] - schedule.Hour_6 = usage_zone.schedules[schedule_type]["WD"][5] - schedule.Hour_7 = usage_zone.schedules[schedule_type]["WD"][6] - schedule.Hour_8 = usage_zone.schedules[schedule_type]["WD"][7] - schedule.Hour_9 = usage_zone.schedules[schedule_type]["WD"][8] - schedule.Hour_10 = usage_zone.schedules[schedule_type]["WD"][9] - schedule.Hour_11 = usage_zone.schedules[schedule_type]["WD"][10] - schedule.Hour_12 = usage_zone.schedules[schedule_type]["WD"][11] - schedule.Hour_13 = usage_zone.schedules[schedule_type]["WD"][12] - schedule.Hour_14 = usage_zone.schedules[schedule_type]["WD"][13] - schedule.Hour_15 = usage_zone.schedules[schedule_type]["WD"][14] - schedule.Hour_16 = usage_zone.schedules[schedule_type]["WD"][15] - schedule.Hour_17 = usage_zone.schedules[schedule_type]["WD"][16] - schedule.Hour_18 = usage_zone.schedules[schedule_type]["WD"][17] - schedule.Hour_19 = usage_zone.schedules[schedule_type]["WD"][18] - schedule.Hour_20 = usage_zone.schedules[schedule_type]["WD"][19] - schedule.Hour_21 = usage_zone.schedules[schedule_type]["WD"][20] - schedule.Hour_22 = usage_zone.schedules[schedule_type]["WD"][21] - schedule.Hour_23 = usage_zone.schedules[schedule_type]["WD"][22] - schedule.Hour_24 = usage_zone.schedules[schedule_type]["WD"][23] - + for schedule in usage_zone.schedules: + if schedule.type == schedule_type: + if schedule.time_range == "day": + return self._add_daily_schedule(usage_zone, schedule) + return + def _add_construction(self, thermal_boundary): for construction in self._idf.idfobjects[self._CONSTRUCTION]: if construction.Name == thermal_boundary.construction_name: @@ -183,7 +227,9 @@ class Idf: thermostat = self._add_thermostat(usage_zone) self._idf.newidfobject(self._IDEAL_LOAD_AIR_SYSTEM, Zone_Name=usage_zone.id, - Cooling_Availability_Schedule_Name=f'Refrigeration schedules {usage_zone.usage}', + System_Availability_Schedule_Name=f'HVAC AVAIL SCHEDULES {usage_zone.usage}', + Heating_Availability_Schedule_Name=f'HVAC AVAIL SCHEDULES {usage_zone.usage}', + Cooling_Availability_Schedule_Name=f'HVAC AVAIL SCHEDULES {usage_zone.usage}', Template_Thermostat_Name=thermostat.Name) def _add_occupancy(self, usage_zone): @@ -194,7 +240,7 @@ class Idf: Number_of_People_Calculation_Method="People", Number_of_People=500, # todo: get people from where? Fraction_Radiant=0.3, # todo: howto get this from InternalGains - Activity_Level_Schedule_Name='occupant schedules' + Activity_Level_Schedule_Name=f'Occupancy schedules {usage_zone.usage}' ) def _add_equipment(self, usage_zone): @@ -227,17 +273,19 @@ class Idf: Export the idf file into the given path export type = "Surfaces|Block" """ + for building in self._city.buildings: for usage_zone in building.usage_zones: self._add_schedule(usage_zone, "Infiltration") self._add_schedule(usage_zone, "Lights") self._add_schedule(usage_zone, "Occupancy") - self._add_schedule(usage_zone, "Refrigeration", self._ON_OFF) + self._add_schedule(usage_zone, "Refrigeration") + self._add_schedule(usage_zone, "HVAC Avail") self._add_zone(usage_zone) self._add_heating_system(usage_zone) - # self._add_infiltration(usage_zone) - # self._add_occupancy(usage_zone) + self._add_infiltration(usage_zone) + self._add_occupancy(usage_zone) for thermal_zone in building.thermal_zones: for thermal_boundary in thermal_zone.thermal_boundaries: self._add_construction(thermal_boundary) @@ -246,8 +294,27 @@ class Idf: self._add_surfaces(building) else: self._add_block(building) + self._idf.newidfobject( + "OUTPUT:VARIABLE", + Variable_Name="Zone Ideal Loads Supply Air Total Heating Energy", + Reporting_Frequency="Hourly", + ) + self._idf.newidfobject( + "OUTPUT:VARIABLE", + Variable_Name="Zone Ideal Loads Supply Air Total Cooling Energy", + Reporting_Frequency="Hourly", + ) self._idf.match() - self._idf.saveas(str(self._output_path)) + self._idf.intersect_match() + self._idf.saveas(str(self._output_file)) + return self._idf + + def run(self): + """ + Start the energy plus simulation + """ + self._idf.run(expandobjects=True, readvars=True, output_directory=self._output_path, + output_prefix=f'{self._city.name}_') def _add_block(self, building): _points = self._matrix_to_2d_list(building.foot_print.coordinates) @@ -267,6 +334,7 @@ class Idf: self._idf.intersect_match() def _add_surfaces(self, building): + for thermal_zone in building.thermal_zones: for boundary in thermal_zone.thermal_boundaries: idf_surface_type = self.idf_surfaces[boundary.surface.type] @@ -274,5 +342,5 @@ class Idf: surface = self._idf.newidfobject(self._SURFACE, Name=f'{boundary.surface.name}', Surface_Type=idf_surface_type, Zone_Name=usage_zone.id, Construction_Name=boundary.construction_name) - coordinates = self._matrix_to_list(boundary.surface.solid_polygon.coordinates) + coordinates = self._matrix_to_list(boundary.surface.solid_polygon.coordinates, self._city.lower_corner) surface.setcoords(coordinates) diff --git a/exports/formats/idf_files/Minimal.idf b/exports/formats/idf_files/Minimal.idf index c56db8eb..67846cf4 100644 --- a/exports/formats/idf_files/Minimal.idf +++ b/exports/formats/idf_files/Minimal.idf @@ -122,8 +122,8 @@ No, !- Do Zone Sizing Calculation No, !- Do System Sizing Calculation No, !- Do Plant Sizing Calculation - Yes, !- Run Simulation for Sizing Periods - No, !- Run Simulation for Weather File Run Periods + No, !- Run Simulation for Sizing Periods + Yes, !- Run Simulation for Weather File Run Periods No, !- Do HVAC Sizing Simulation for Sizing Periods 1; !- Maximum Number of HVAC Sizing Simulation Passes @@ -149,3 +149,4 @@ Output:Table:SummaryReports, AllSummary; !- Report 1 Name + Output:Diagnostics,DisplayUnusedSchedules; \ No newline at end of file diff --git a/unittests/tests_data/one_building_in_kelowna_alkis.gml b/unittests/tests_data/one_building_in_kelowna_alkis.gml index ee239b38..05926e5e 100644 --- a/unittests/tests_data/one_building_in_kelowna_alkis.gml +++ b/unittests/tests_data/one_building_in_kelowna_alkis.gml @@ -14,8 +14,8 @@ m2 -1010 1996 +residential 5.3 1 From 73593744b71c0e3c974e76357c7b3be7e73f13f3 Mon Sep 17 00:00:00 2001 From: Peter Yefi Date: Thu, 17 Mar 2022 10:37:47 -0400 Subject: [PATCH 52/54] Modified coefficient computation for water to water hp --- .../energy_systems/water_to_water_hp.py | 19 - .../heat_pumps/w2w_parallel.txt | 1620 ++++++++-------- data/energy_systems/heat_pumps/w2w_series.txt | 1705 ++++++++--------- exports/energy_systems/heat_pump_export.py | 12 +- .../water_to_water_hp_export.py | 18 +- exports/energy_systems_factory.py | 2 +- .../water_to_water_hp_parameters.py | 10 +- 7 files changed, 1707 insertions(+), 1679 deletions(-) diff --git a/city_model_structure/energy_systems/water_to_water_hp.py b/city_model_structure/energy_systems/water_to_water_hp.py index ab81623f..e65d2247 100644 --- a/city_model_structure/energy_systems/water_to_water_hp.py +++ b/city_model_structure/energy_systems/water_to_water_hp.py @@ -20,7 +20,6 @@ class WaterToWaterHP(HeatPump): self._total_cooling_capacity = None self._power_demand = None self._flow_rate = None - self._heat_output_coff = None # b coefficients self._power_demand_coff = None # a coefficients @property @@ -112,24 +111,6 @@ class WaterToWaterHP(HeatPump): if self._flow_rate is None: self._flow_rate = value - @property - def heat_output_coff(self) -> List[float]: - """ - Get coefficients for total cooling capacity - :return: [[float]] - """ - return self._heat_output_coff - - @heat_output_coff.setter - def heat_output_coff(self, value): - """ - Set coefficients for totol cooling capacity - :param value: [[float]] - :return: - """ - if self._heat_output_coff is None: - self._heat_output_coff = value - @property def power_demand_coff(self) -> List[float]: """ diff --git a/data/energy_systems/heat_pumps/w2w_parallel.txt b/data/energy_systems/heat_pumps/w2w_parallel.txt index 1f1b6120..44bfb9ae 100644 --- a/data/energy_systems/heat_pumps/w2w_parallel.txt +++ b/data/energy_systems/heat_pumps/w2w_parallel.txt @@ -1,482 +1,429 @@ -B 1 DIV - 256.1 - 135.1 - -B 2 DIV - 86.1 - 86.2 - -B 3 DIV - 1.1 - 279.1 - -B 4 DIV - 257.1 - 119.1 - -B 5 DIV - 123.1 - 168.1 - -B 6 DIV - 179.1 - 127.1 - -B 7 DIV - 123.1 - 174.1 - -B 8 DIV - 179.1 - 167.1 - -B 9 DIV - 107.1 - 123.1 - -B 10 DIV - 171.1 - 147.1 - -B 11 DIV - 264.1 - 146.1 - -B 76 SCREEN - 2.1 -P 76 - '*' % Format - 'HP Seasonal COP' % Headline - -B 77 SCREEN - 87.1 -P 77 - '*' % Format - 'Total Cost of the Auxiliary Heater Fuel in a Year (CAD)' % Headline - -B 78 SCREEN - 85.1 -P 78 - '*' % Format - 'Total Electricity Cost in a Year (CAD)' % Headline - -B 79 SCREEN - 84.1 -P 79 - '*' % Format - 'Total Fossil Fuel consumption in a Year (m3)' % Headline - -B 80 SCREEN - 89.1 -P 80 - '*' % Format - 'Total CO2 Emissions from Electricity Grid (g)' % Headline - -B 81 SCREEN - 83.1 -P 81 - '*' % Format - 'Total CO2 Emissions from Auxiliary Heater (g)' % Headline - -B 82 SCREEN - 88.1 -P 82 - '*' % Format - 'Total Electricuty Demand of Heat Pumps in a year (kWh)' % Headline - -B 83 CUM - 140.1 - -B 84 CUM - 255.1 - -B 85 CUM - 110.1 - -B 86 CUM - 107.1 - 123.1 - -B 87 CUM - 104.1 - -B 88 CUM - 259.1 - -B 89 CUM - 120.1 - -B 90 SUM - 141.1 - 108.1 - 105.1 - 114.1 - 125.1 - 131.1 - 134.1 - 112.1 - 130.1 - 111.1 - 201.1 - -B 91 SUM - 219.1 - 268.1 - -B 92 SUM - 132.1 - 143.1 - -B 93 SUM - 148.1 - 269.2 - -B 94 SUM - 187.1 - 220.1 - -B 95 SUM - 253.1 - 212.1 - -B 96 SUM - 117.1 - 116.1 - 136.1 - 133.1 - 124.1 - 122.1 - 118.1 - 142.1 - 106.1 - 121.1 - 150.1 - -B 97 SUM - 164.1 - 218.1 - -B 98 SUM - 113.1 - 274.1 - -B 99 SUM - 268.5 - 221.1 - -B 100 SUM - 103.1 - 155.1 - -B 101 SUM - 222.1 - 215.1 - -B 102 SUM - 109.1 - 129.1 - 137.1 - -B 103 MUL - 4.1 - 199.1 - -B 104 MUL - 265.1 - 151.1 - 209.1 - -B 105 MUL - 250.1 +B 1 MUL 149.1 + 264.1 -B 106 MUL - 187.1 - 102.1 - 178.1 - -B 107 MUL - 279.1 - 96.1 - 95.1 - 98.1 - -B 108 MUL - 280.1 +B 2 MUL + 259.1 190.1 -B 109 MUL +B 3 MUL + 296.1 160.1 + 289.2 + 298.1 + 83.1 + +B 4 MUL 252.1 + 79.1 + 151.1 -B 110 MUL - 7.1 - 175.1 - -B 111 MUL - 280.1 - 187.1 - 102.1 - 188.1 - -B 112 MUL - 280.1 - 102.1 - 145.1 - -B 113 MUL - 273.1 - 138.1 - -B 114 MUL - 187.1 - 144.1 - -B 115 MUL - 100.1 - 177.1 - 97.1 - 251.1 - -B 116 MUL - 280.1 - 172.1 - -B 117 MUL - 191.1 - 245.1 - -B 118 MUL - 280.1 - 187.1 - 184.1 - -B 119 MUL - 208.1 - 154.1 - -B 120 MUL - 5.1 +B 5 MUL + 79.1 205.1 -B 121 MUL - 280.1 - 187.1 - 102.1 +B 6 MUL + 33.1 + 178.1 + +B 7 MUL + 162.1 + 260.1 + +B 8 MUL + 171.1 + 297.1 + +B 9 MUL 176.1 + 79.1 + 169.1 -B 122 MUL - 102.1 - 165.1 - -B 123 MUL - 279.1 - 90.1 - 95.1 - 98.1 - -B 124 MUL - 166.1 - 249.1 - -B 125 MUL - 189.1 - 248.1 - -B 126 MUL - 102.1 - 279.1 - -B 127 MUL - 139.1 - 156.1 - -B 128 MUL - 213.1 - 126.1 - -B 129 MUL - 3.1 - 242.1 - 254.1 - -B 130 MUL - 187.1 - 102.1 - 207.1 - -B 131 MUL - 102.1 - 206.1 - -B 132 MUL - 91.1 - 210.1 - -B 133 MUL - 187.1 - 183.1 - -B 134 MUL - 280.1 - 187.1 - 159.1 - -B 135 MUL - 181.1 - 94.1 - -B 136 MUL - 247.1 - 196.1 - -B 137 MUL - 163.1 - 214.1 - -B 138 MUL - 273.1 - 243.1 - 211.1 - -B 139 MUL - 8.1 - 195.1 - -B 140 MUL - 262.1 - 158.1 - 161.1 - -B 141 MUL - 182.1 - 246.1 - -B 142 MUL - 280.1 - 102.1 +B 10 MUL + 176.1 + 79.1 170.1 -B 143 MUL - 275.1 - 185.1 +B 11 MUL + 255.1 + 40.1 + +B 12 MUL + 176.1 + 164.1 + +B 13 MUL + 304.1 + 231.1 + 256.1 + +B 14 MUL + 245.1 + 233.1 + 299.1 + +B 15 MUL + 282.1 + 153.1 + +B 16 MUL + 79.1 + 192.1 + +B 17 MUL + 252.1 + 176.1 + 79.1 + 195.1 + +B 18 MUL + 304.1 + 13.1 + +B 19 MUL + 281.1 + 89.1 + 84.1 + 81.1 + +B 20 MUL + 202.1 + 258.1 + +B 21 MUL + 261.1 + 199.1 + +B 22 MUL + 146.1 + 263.1 + +B 23 MUL + 252.1 + 79.1 + 186.1 + +B 24 MUL + 252.1 + 189.1 + +B 25 MUL + 242.1 + 175.1 + +B 26 MUL + 283.1 + 193.1 + 148.1 + +B 27 MUL + 252.1 + 155.1 + +B 28 MUL + 289.1 + 257.1 + +B 29 MUL + 252.1 + 176.1 + 79.1 + 163.1 + +B 30 MUL + 253.1 + 88.1 + +B 31 MUL + 240.1 + 161.1 + +B 32 MUL + 286.1 + 145.1 + 144.1 + +B 33 MUL + 241.1 + 200.1 + +B 34 MUL + 194.1 + 262.1 + +B 35 MUL + 252.1 + 176.1 + 201.1 + +B 36 MUL + 172.1 + 76.1 + +B 37 MUL + 252.1 + 176.1 + 198.1 + +B 38 MUL + 295.1 + 86.1 + +B 39 MUL + 302.1 + 157.1 + +B 40 MUL + 79.1 + 281.1 + +B 41 MUL + 281.1 + 85.1 + 84.1 + 81.1 + +B 42 MUL + 176.1 + 166.1 + +B 61 NOP + 72.1 + +B 62 NOP + 30.1 + +B 63 NOP + 80.1 + +B 64 NOP + 38.1 + +B 65 NOP + 71.1 + +B 66 NOP + 80.1 + +B 67 NOP + 68.1 + +B 68 NOP + 289.2 + +B 69 NOP + 11.1 + +B 70 NOP + 279.1 + +B 71 NOP + 176.1 + +B 72 NOP + 71.1 + +B 73 NOP + 287.1 + +B 74 NOP + 38.1 + +B 75 SUM + 28.1 + 39.1 + +B 76 SUM + 176.1 + 229.1 + +B 77 SUM + 224.1 + 277.1 + +B 78 SUM + 197.1 + 280.2 + +B 79 SUM + 8.1 + 14.1 + 20.1 + +B 80 SUM + 75.1 + 227.1 + +B 81 SUM + 18.1 + 303.1 + +B 82 SUM + 67.1 + 226.1 + +B 83 SUM + 177.1 + 223.1 + +B 84 SUM + 294.1 + 254.1 + +B 85 SUM + 1.1 + 27.1 + 21.1 + 42.1 + 34.1 + 16.1 + 37.1 + 4.1 + 10.1 + 29.1 + 196.1 + +B 86 SUM + 230.1 + 234.1 + +B 87 SUM + 69.1 + 225.1 + +B 88 SUM + 69.1 + 228.1 + +B 89 SUM + 22.1 + 24.1 + 2.1 + 12.1 + 7.1 + 5.1 + 35.1 + 23.1 + 9.1 + 17.1 + 179.1 B 144 CONST P 144 - $b4 % Constant value + $FuelEF % Constant value B 145 CONST P 145 - $b8 % Constant value + 300 % Constant value B 146 CONST P 146 - $FuelLHV % Constant value + $b1 % Constant value B 147 CONST P 147 - $HPNominalCapacity % Constant value + $HPDisactivationTemperature % Constant value B 148 CONST P 148 - 10 % Constant value + $FuelPrice % Constant value B 149 CONST P 149 - $b3 % Constant value + $a1 % Constant value B 150 CONST P 150 - $a11 % Constant value + $FuelLHV % Constant value B 151 CONST P 151 - 300 % Constant value + $a8 % Constant value B 152 CONST P 152 - 40 % Constant value + $HPNominalCapacity % Constant value B 153 CONST P 153 - 2 % Constant value + $TemperatureDifference % Constant value B 154 CONST P 154 - $TemperatureDifference % Constant value + 2 % Constant value B 155 CONST P 155 - 0 % Constant value + $a2 % Constant value B 156 CONST P 156 - $Cp % Constant value + 2 % Constant value B 157 CONST P 157 - 2 % Constant value + $BuildingSuppTemp % Constant value B 158 CONST P 158 - 300 % Constant value + $AuxHeaterEfficiency % Constant value B 159 CONST P 159 - $b7 % Constant value + 5 % Constant value B 160 CONST P 160 - $LowestPossibleLoadFlow % Constant value + $Cp % Constant value B 161 CONST P 161 - $FuelEF % Constant value + $ElecGridEF % Constant value B 162 CONST P 162 - $TemperatureDifference % Constant value + $b5 % Constant value B 163 CONST P 163 - $HighestPossibleLoadFlow % Constant value + $a10 % Constant value B 164 CONST P 164 - $BuildingSuppTemp % Constant value + $b4 % Constant value B 165 CONST P 165 - $a6 % Constant value + $HPReactivationTemperature % Constant value B 166 CONST P 166 - $a5 % Constant value + $a4 % Constant value B 167 CONST P 167 - $HPNominalCapacity % Constant value + 2 % Constant value B 168 CONST P 168 - 12 % Constant value + 9 % Constant value B 169 CONST P 169 - 5 % Constant value + $b9 % Constant value B 170 CONST P 170 - $a8 % Constant value + $a9 % Constant value B 171 CONST P 171 - $MaximumHPEnergyInput % Constant value + $LowestPossibleLoadFlow % Constant value B 172 CONST P 172 - $a2 % Constant value + $Cp % Constant value B 173 CONST P 173 @@ -484,7 +431,7 @@ P 173 B 174 CONST P 174 - 12 % Constant value + $HPNominalCapacity % Constant value B 175 CONST P 175 @@ -492,487 +439,543 @@ P 175 B 176 CONST P 176 - $a10 % Constant value + $HPSupTemp % Constant value B 177 CONST P 177 - $Cp % Constant value + $BuildingSuppTemp % Constant value B 178 CONST P 178 - $a9 % Constant value + $Cp % Constant value B 179 CONST P 179 - $MaximumHPEnergyInput % Constant value + $b11 % Constant value B 180 CONST P 180 - 0 % Constant value + 40 % Constant value B 181 CONST P 181 - $Cp % Constant value + 0 % Constant value B 182 CONST P 182 - $b1 % Constant value + $Cp % Constant value B 183 CONST P 183 - $a4 % Constant value + $TemperatureDifference % Constant value B 184 CONST P 184 - $a7 % Constant value + 2 % Constant value B 185 CONST P 185 - 25 % Constant value + 0 % Constant value B 186 CONST P 186 - 2 % Constant value + $b8 % Constant value B 187 CONST P 187 - $HPSupTemp % Constant value + $MaximumHPEnergyInput % Constant value B 188 CONST P 188 - $b10 % Constant value + 12 % Constant value B 189 CONST P 189 - $b5 % Constant value + $b2 % Constant value B 190 CONST P 190 - $b2 % Constant value + $b3 % Constant value B 191 CONST P 191 - $a1 % Constant value + 2 % Constant value B 192 CONST P 192 - $MaximumHPEnergyInput % Constant value + $a6 % Constant value B 193 CONST P 193 - 9 % Constant value + 300 % Constant value B 194 CONST P 194 - 0 % Constant value + $a5 % Constant value B 195 CONST P 195 - 7.13 % Constant value + $b10 % Constant value B 196 CONST P 196 - $a3 % Constant value + $a11 % Constant value B 197 CONST P 197 - 2 % Constant value + 10 % Constant value B 198 CONST P 198 - $HPReactivationTemperature % Constant value + $a7 % Constant value B 199 CONST P 199 - 1 % Constant value + $a3 % Constant value B 200 CONST P 200 - 2 % Constant value + 7.13 % Constant value B 201 CONST P 201 - $b11 % Constant value + $b7 % Constant value B 202 CONST P 202 - $HPDisactivationTemperature % Constant value + $HighestPossibleLoadFlow % Constant value B 203 CONST P 203 - 40 % Constant value + 12 % Constant value B 204 CONST P 204 - 0.40 % Constant value + $MaximumHPEnergyInput % Constant value B 205 CONST P 205 - $ElecGridEF % Constant value + $b6 % Constant value B 206 CONST P 206 - $b6 % Constant value + 8000 % Constant value B 207 CONST P 207 - $b9 % Constant value + 0.38 % Constant value -B 208 CONST -P 208 - $Cp % Constant value +B 208 CUMC + 301.2 + 19.1 -B 209 CONST -P 209 - $FuelPrice % Constant value +B 209 CUMC + 301.3 + 31.1 + 32.1 -B 210 GT - 268.1 +B 210 CUMC + 301.3 + 25.1 + 26.1 + +B 211 CUMC + 301.2 + 25.1 + 26.1 + +B 212 CUMC + 301.4 + 19.1 + +B 213 CUMC + 301.3 + 305.1 + +B 214 CUMC + 301.3 + 19.1 + +B 215 CUMC + 301.2 + 31.1 + 32.1 + +B 216 CUMC + 301.2 + 305.1 + +B 217 SCREEN + 249.1 +P 217 + '*' % Format + 'Total Electricity Cost in a Year (CAD)' % Headline + +B 218 SCREEN + 246.1 +P 218 + '*' % Format + 'Total CO2 Emissions from Auxiliary Heater (g)' % Headline + +B 219 SCREEN + 247.1 +P 219 + '*' % Format + 'Total Fossil Fuel consumption in a Year (m3)' % Headline + +B 220 SCREEN + 251.1 +P 220 + '*' % Format + 'Total Cost of the Auxiliary Heater Fuel in a Year (CAD)' % Headline + +B 221 SCREEN + 235.1 +P 221 + '*' % Format + 'HP Seasonal COP' % Headline + +B 222 SCREEN + 248.1 +P 222 + '*' % Format + 'Total CO2 Emissions from Electricity Grid (g)' % Headline + +B 223 CHS + 289.1 + +B 224 CHS + 243.1 + +B 225 CHS + 62.1 + +B 226 CHS + 74.1 + +B 227 CHS + 183.1 + +B 228 CHS + 234.1 + +B 229 CHS + 70.1 + +B 230 CHS + 11.1 + +B 231 GE + 287.1 + 165.1 +P 231 + 0 % Error tolerance + +B 232 GE + 287.1 + 147.1 +P 232 + 0 % Error tolerance + +B 233 GE + 245.1 + 171.1 +P 233 + 0 % Error tolerance + +B 234 DIV + 265.1 + 15.1 + +B 235 DIV + 250.1 + 250.2 + +B 236 DIV + 204.1 152.1 -B 211 GT - 217.1 - 180.1 - -B 212 GT - 271.2 - 193.1 - -B 213 GT - 107.1 - 194.1 - -B 214 GT +B 237 DIV 3.1 - 163.1 + 158.1 -B 215 DELAY - 280.1 -P 215 - 10 % Initial value +B 238 DIV + 41.1 + 19.1 -B 216 DELAY - 268.5 -P 216 - 0 % Initial value +B 239 DIV + 306.1 + 36.1 -B 217 DELAY - 107.1 -P 217 - 0 % Initial value +B 240 DIV + 19.1 + 188.1 -B 218 CHS - 268.1 +B 241 DIV + 187.1 + 174.1 -B 219 CHS - 162.1 +B 242 DIV + 19.1 + 203.1 -B 220 CHS - 268.4 - -B 221 CHS - 216.1 - -B 222 CHS +B 243 DIV + 187.1 6.1 -B 223 CUMC - 271.2 - 259.1 +B 244 DIV + 237.1 + 150.1 -B 224 CUMC - 271.4 - 259.1 +B 245 DIV + 239.1 + 281.1 -B 225 CUMC - 271.2 - 120.1 - 140.1 +B 246 CUM + 32.1 -B 226 CUMC - 271.3 - 259.1 +B 247 CUM + 305.1 -B 227 CUMC - 271.2 - 110.1 - 104.1 +B 248 CUM + 31.1 -B 228 CUMC - 271.3 - 255.1 +B 249 CUM + 25.1 -B 229 CUMC - 271.3 - 110.1 - 104.1 +B 250 CUM + 41.1 + 19.1 -B 230 CUMC - 271.2 - 255.1 +B 251 CUM + 26.1 -B 231 CUMC - 271.3 - 120.1 - 140.1 +B 252 HXS + 77.1 + 33.1 + 300.2 + 207.1 +P 252 + 1 % Mode + 5000 % Overall heat transfer coefficient + 1007 % Specific heat of side 1 fluid + 1007 % Specific heat of side 2 fluid -B 232 WRITE - 228.1 - 228.2 -P 232 - 2 % Mode - $fileOut9 % File name +B 253 GT + 69.1 + 234.1 + +B 254 GT + 301.2 + 168.1 + +B 255 GT + 41.1 + 185.1 + +B 256 GT + 278.1 + 181.1 + +B 257 GT + 289.1 + 157.1 + +B 258 GT + 245.1 + 202.1 + +B 259 EXPG + 176.1 + 154.1 + +B 260 EXPG + 79.1 + 156.1 + +B 261 EXPG + 176.1 + 173.1 + +B 262 EXPG + 79.1 + 184.1 + +B 263 EXPG + 252.1 + 191.1 + +B 264 EXPG + 252.1 + 167.1 + +B 265 READ +P 265 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $HeatingDemand % File name '*' % Fortran format -B 233 WRITE - 227.1 - 227.2 - 227.3 -P 233 - 2 % Mode - $fileOut3 % File name +B 266 READ +P 266 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $WaterTemperature % File name '*' % Fortran format -B 234 WRITE - 226.1 - 226.2 -P 234 - 2 % Mode - $fileOut6 % File name - '*' % Fortran format - -B 235 WRITE - 230.1 - 230.2 -P 235 - 2 % Mode - $fileOut4 % File name - '*' % Fortran format - -B 236 WRITE - 223.1 - 223.2 -P 236 +B 267 WRITE + 208.1 + 208.2 +P 267 2 % Mode $fileOut8 % File name '*' % Fortran format -B 237 WRITE - 231.1 - 231.2 - 231.3 -P 237 - 2 % Mode - $fileOut2 % File name - '*' % Fortran format - -B 238 WRITE - 229.1 - 229.2 - 229.3 -P 238 +B 268 WRITE + 210.1 + 210.2 + 210.3 +P 268 2 % Mode $fileOut7 % File name '*' % Fortran format -B 239 WRITE - 271.1 - 271.2 - 271.3 - 224.1 - 224.2 -P 239 - 2 % Mode - $fileOut10 % File name - '*' % Fortran format - -B 240 WRITE - 225.1 - 225.2 - 225.3 -P 240 - 2 % Mode - $fileOut5 % File name - '*' % Fortran format - -B 241 WRITE - 271.1 - 271.2 - 271.3 - 271.4 - 271.5 - 107.1 - 123.1 - 9.1 - 128.1 - 100.1 - 268.1 - 268.2 - 268.3 - 268.4 - 268.5 - 258.1 - 260.1 +B 269 WRITE + 301.1 + 301.2 + 301.3 + 301.4 + 301.5 + 41.1 + 265.1 11.1 - 263.1 - 110.1 - 104.1 - 120.1 - 140.1 - 92.1 - 277.1 - 269.2 - 96.1 - 90.1 -P 241 + 234.1 + 30.1 + 87.1 + 65.1 + 64.1 + 73.1 + 289.2 + 289.1 + 244.1 + 285.1 + 68.1 + 75.1 + 80.1 + 74.1 + 66.1 + 82.1 + 63.1 + 62.1 + 287.4 + 288.2 + 288.1 + 287.1 + 287.2 + 287.3 + 287.4 + 287.5 + 19.1 + 238.1 + 280.2 + 25.1 + 26.1 + 31.1 + 32.1 +P 269 2 % Mode $fileOut1 % File name '*' % Fortran format -B 242 GE - 3.1 - 160.1 -P 242 - 0 % Error tolerance +B 270 WRITE + 213.1 + 213.2 +P 270 + 2 % Mode + $fileOut9 % File name + '*' % Fortran format -B 243 GE - 268.1 - 198.1 -P 243 - 0 % Error tolerance +B 271 WRITE + 301.1 + 301.2 + 301.3 + 212.1 + 212.2 +P 271 + 2 % Mode + $fileOut10 % File name + '*' % Fortran format -B 244 GE - 268.1 - 202.1 -P 244 - 0 % Error tolerance +B 272 WRITE + 209.1 + 209.2 + 209.3 +P 272 + 2 % Mode + $fileOut2 % File name + '*' % Fortran format -B 245 EXPG - 280.1 - 157.1 +B 273 WRITE + 211.1 + 211.2 + 211.3 +P 273 + 2 % Mode + $fileOut3 % File name + '*' % Fortran format -B 246 EXPG - 280.1 - 153.1 +B 274 WRITE + 214.1 + 214.2 +P 274 + 2 % Mode + $fileOut6 % File name + '*' % Fortran format -B 247 EXPG - 187.1 - 197.1 +B 275 WRITE + 216.1 + 216.2 +P 275 + 2 % Mode + $fileOut4 % File name + '*' % Fortran format -B 248 EXPG - 102.1 - 186.1 +B 276 WRITE + 215.1 + 215.2 + 215.3 +P 276 + 2 % Mode + $fileOut5 % File name + '*' % Fortran format -B 249 EXPG - 102.1 - 173.1 +B 277 DELAY + 252.1 +P 277 + 10 % Initial value -B 250 EXPG - 187.1 - 200.1 +B 278 DELAY + 41.1 +P 278 + 0 % Initial value -B 251 LT - 268.1 - 203.1 +B 279 DELAY + 288.1 +P 279 + 25 % Initial value -B 252 LT - 3.1 - 160.1 - -B 253 LT - 271.2 - 169.1 - -B 254 LE - 3.1 - 163.1 -P 254 - 0 % Error tolerance - -B 255 GAIN - 261.1 -P 255 - 300 % Gain factor g - -B 256 GAIN - 171.1 -P 256 - 1000 % Gain factor g - -B 257 GAIN - 277.1 -P 257 - 1000 % Gain factor g - -B 258 ATT - 268.5 -P 258 - 3600000 % Attenuation factor a - -B 259 ATT - 123.1 -P 259 - 12 % Attenuation factor a - -B 260 ATT - 99.1 -P 260 - 3600000 % Attenuation factor a - -B 261 ATT - 11.1 -P 261 - $FuelDensity % Attenuation factor a - -B 262 ATT - 11.1 -P 262 - $FuelDensity % Attenuation factor a - -B 263 ATT - 115.1 -P 263 - 1000 % Attenuation factor a - -B 264 ATT - 115.1 -P 264 - $AuxHeaterEfficiency % Attenuation factor a - -B 265 ATT - 11.1 -P 265 - $FuelDensity % Attenuation factor a - -B 268 TANKST - 187.1 - 128.1 - 92.1 - 100.1 - 93.1 - 272.1 -P 268 - $TESCapacity % Tank volume - 4 % Number of temperature nodes - $TESDiameter % Tank diameter - $Cp % Specfic heat of fluid - $Rhow % Fluid density - 0 % Overall heat-loss coefficient - 1 % Effective heat conductivity - 30 % Initial tank temperature - -B 269 GENGT2 - 270.1 - 270.3 - 270.4 - 270.5 - 270.7 - 270.8 - 271.1 - 271.2 - 271.3 - 271.4 -P 269 +B 280 GENGT2 + 308.1 + 308.3 + 308.4 + 308.5 + 308.7 + 308.8 + 301.1 + 301.2 + 301.3 + 301.4 +P 280 45.5 % Latitude -73.62 % Longitude -5 % UTC Time zone @@ -984,13 +987,105 @@ P 269 2 % Maximum allowed mean temperature deviation 100 % Maximum number of iterations -B 270 MTM2 - 271.2 -P 270 - 'Montreal' % Location +B 281 INT + 236.1 -B 271 CLOCK -P 271 +B 282 ATT + 182.1 +P 282 + 1000 % Attenuation factor a + +B 283 ATT + 244.1 +P 283 + $FuelDensity % Attenuation factor a + +B 284 ATT + 244.1 +P 284 + $FuelDensity % Attenuation factor a + +B 285 ATT + 3.1 +P 285 + 1000 % Attenuation factor a + +B 286 ATT + 244.1 +P 286 + $FuelDensity % Attenuation factor a + +B 287 TANKST + 61.1 + 62.1 + 66.1 + 74.1 + 78.1 + 307.1 +P 287 + $TESCapacity % Tank volume + 4 % Number of temperature nodes + $TESDiameter % Tank diameter + $Cp % Specfic heat of fluid + $Rhow % Fluid density + 0 % Overall heat-loss coefficient + 1 % Effective heat conductivity + 30 % Initial tank temperature + +B 288 MIXER % Point 11 + 287.4 + 30.1 + 63.1 + 82.1 + +B 289 MIXER % Point 5 + 65.1 + 87.1 + 73.1 + 64.1 + +B 294 LT + 301.2 + 159.1 + +B 295 LT + 11.1 + 234.1 + +B 296 LT + 11.1 + 234.1 + +B 297 LT + 245.1 + 171.1 + +B 298 LT + 289.1 + 180.1 + +B 299 LE + 245.1 + 202.1 +P 299 + 0 % Error tolerance + +B 300 UBHLOSS + 206.1 + 266.1 +P 300 + 400 % bp1 + 0.5 % bp2 + 0.05 % bp3 + 3 % bp4 + 4200 % bp5 + 1000 % bp6 + 5 % bp7 + 20 % bp8 + 300 % bp9 + +B 301 CLOCK +P 301 $StartYear % Start year $StartMonth % Start month $StartDay % Start day @@ -1006,62 +1101,35 @@ P 271 5 % Increment 'm' % Unit -B 272 SOY - 271.1 - 271.2 - 271.3 - 271.4 - 271.5 - 271.6 +B 302 INV + 257.1 -B 273 INV - 244.1 +B 303 INV + 231.1 -B 274 INV - 243.1 +B 304 INV + 232.1 -B 275 INV - 210.1 +B 305 GAIN + 284.1 +P 305 + 300 % Gain factor g -B 276 READ -P 276 - 1 % Number of values to be read per record - 0 % Number of records to be skipped on the first call - $HeatingDemand % File name - '*' % Fortran format - -B 277 READ -P 277 - 1 % Number of values to be read per record - 0 % Number of records to be skipped on the first call - $WaterTemperature % File name - '*' % Fortran format - -B 278 UBHLOSS - 192.1 - 276.1 -P 278 - 300 % L - 0.5 % D - 0.05 % U - 3 % Tg - 4190 % cp - 1000 % rho - 5 % delta_T - 20 % dx - 300 % df - -B 279 INT - 10.1 - -B 280 HXS - 101.1 - 139.1 - 278.2 +B 306 GAIN 204.1 -P 280 - 1 % Mode - 5000 % Overall heat transfer coefficient - 1007 % Specific heat of side 1 fluid - 1007 % Specific heat of side 2 fluid +P 306 + 1000 % Gain factor g + +B 307 SOY + 301.1 + 301.2 + 301.3 + 301.4 + 301.5 + 301.6 + +B 308 MTM2 + 301.2 +P 308 + 'Montreal' % Location diff --git a/data/energy_systems/heat_pumps/w2w_series.txt b/data/energy_systems/heat_pumps/w2w_series.txt index 1f1b6120..1528a0ee 100644 --- a/data/energy_systems/heat_pumps/w2w_series.txt +++ b/data/energy_systems/heat_pumps/w2w_series.txt @@ -1,510 +1,470 @@ +B 65 INT + 198.1 -B 1 DIV - 256.1 +B 66 CUM + 242.1 + +B 67 CUM + 95.1 + +B 68 CUM + 84.1 + +B 69 CUM + 247.1 + +B 70 CUM + 96.1 + +B 71 CUM + 91.1 + +B 72 CUM + 81.1 + 112.1 + +B 73 MUL + 181.1 135.1 -B 2 DIV - 86.1 - 86.2 - -B 3 DIV - 1.1 - 279.1 - -B 4 DIV - 257.1 - 119.1 - -B 5 DIV - 123.1 - 168.1 - -B 6 DIV - 179.1 - 127.1 - -B 7 DIV - 123.1 - 174.1 - -B 8 DIV - 179.1 - 167.1 - -B 9 DIV - 107.1 - 123.1 - -B 10 DIV - 171.1 - 147.1 - -B 11 DIV - 264.1 - 146.1 - -B 76 SCREEN - 2.1 -P 76 - '*' % Format - 'HP Seasonal COP' % Headline - -B 77 SCREEN - 87.1 -P 77 - '*' % Format - 'Total Cost of the Auxiliary Heater Fuel in a Year (CAD)' % Headline - -B 78 SCREEN - 85.1 -P 78 - '*' % Format - 'Total Electricity Cost in a Year (CAD)' % Headline - -B 79 SCREEN - 84.1 -P 79 - '*' % Format - 'Total Fossil Fuel consumption in a Year (m3)' % Headline - -B 80 SCREEN - 89.1 -P 80 - '*' % Format - 'Total CO2 Emissions from Electricity Grid (g)' % Headline - -B 81 SCREEN - 83.1 -P 81 - '*' % Format - 'Total CO2 Emissions from Auxiliary Heater (g)' % Headline - -B 82 SCREEN - 88.1 -P 82 - '*' % Format - 'Total Electricuty Demand of Heat Pumps in a year (kWh)' % Headline - -B 83 CUM - 140.1 - -B 84 CUM - 255.1 - -B 85 CUM - 110.1 - -B 86 CUM - 107.1 - 123.1 - -B 87 CUM - 104.1 - -B 88 CUM - 259.1 - -B 89 CUM - 120.1 - -B 90 SUM - 141.1 - 108.1 - 105.1 - 114.1 - 125.1 - 131.1 - 134.1 - 112.1 - 130.1 - 111.1 - 201.1 - -B 91 SUM - 219.1 - 268.1 - -B 92 SUM - 132.1 - 143.1 - -B 93 SUM - 148.1 - 269.2 - -B 94 SUM - 187.1 - 220.1 - -B 95 SUM - 253.1 - 212.1 - -B 96 SUM - 117.1 - 116.1 - 136.1 - 133.1 - 124.1 - 122.1 - 118.1 - 142.1 - 106.1 - 121.1 - 150.1 - -B 97 SUM - 164.1 - 218.1 - -B 98 SUM - 113.1 - 274.1 - -B 99 SUM - 268.5 - 221.1 - -B 100 SUM - 103.1 - 155.1 - -B 101 SUM - 222.1 - 215.1 - -B 102 SUM - 109.1 - 129.1 - 137.1 - -B 103 MUL - 4.1 - 199.1 - -B 104 MUL - 265.1 - 151.1 - 209.1 - -B 105 MUL - 250.1 - 149.1 - -B 106 MUL - 187.1 - 102.1 - 178.1 - -B 107 MUL - 279.1 - 96.1 - 95.1 - 98.1 - -B 108 MUL - 280.1 - 190.1 - -B 109 MUL - 160.1 - 252.1 - -B 110 MUL - 7.1 - 175.1 - -B 111 MUL - 280.1 - 187.1 - 102.1 - 188.1 - -B 112 MUL - 280.1 - 102.1 - 145.1 - -B 113 MUL - 273.1 - 138.1 - -B 114 MUL - 187.1 - 144.1 - -B 115 MUL - 100.1 - 177.1 - 97.1 - 251.1 - -B 116 MUL - 280.1 - 172.1 - -B 117 MUL +B 74 MUL 191.1 - 245.1 + 179.1 + 194.1 + 226.1 -B 118 MUL - 280.1 - 187.1 - 184.1 +B 75 MUL + 140.1 + 265.1 -B 119 MUL - 208.1 - 154.1 +B 76 MUL + 181.1 + 196.1 + 128.1 -B 120 MUL - 5.1 - 205.1 +B 77 MUL + 196.1 + 169.1 -B 121 MUL - 280.1 - 187.1 - 102.1 - 176.1 - -B 122 MUL - 102.1 - 165.1 - -B 123 MUL - 279.1 - 90.1 - 95.1 - 98.1 - -B 124 MUL - 166.1 - 249.1 - -B 125 MUL - 189.1 - 248.1 - -B 126 MUL - 102.1 - 279.1 - -B 127 MUL - 139.1 - 156.1 - -B 128 MUL - 213.1 - 126.1 - -B 129 MUL - 3.1 - 242.1 - 254.1 - -B 130 MUL - 187.1 - 102.1 - 207.1 - -B 131 MUL - 102.1 - 206.1 - -B 132 MUL - 91.1 - 210.1 - -B 133 MUL - 187.1 - 183.1 - -B 134 MUL - 280.1 - 187.1 +B 78 MUL + 263.1 159.1 -B 135 MUL +B 79 MUL + 246.1 181.1 - 94.1 + 146.1 -B 136 MUL - 247.1 - 196.1 +B 80 MUL + 268.1 + 148.1 -B 137 MUL - 163.1 - 214.1 +B 81 MUL + 65.1 + 187.1 + 189.1 + 192.1 -B 138 MUL - 273.1 - 243.1 - 211.1 +B 82 MUL + 145.1 + 264.1 -B 139 MUL - 8.1 +B 83 MUL + 155.1 195.1 -B 140 MUL - 262.1 - 158.1 - 161.1 +B 84 MUL + 202.1 + 157.1 -B 141 MUL - 182.1 +B 85 MUL + 219.1 + 89.1 + +B 86 MUL + 196.1 + 65.1 + +B 87 MUL 246.1 + 196.1 + 158.1 -B 142 MUL - 280.1 - 102.1 +B 88 MUL + 246.1 + 152.1 + +B 89 MUL + 219.1 + 257.1 + 227.1 + +B 90 MUL + 172.1 + 267.1 + +B 91 MUL + 207.1 + 174.1 + +B 92 MUL + 199.1 + 256.1 + 269.1 + +B 93 MUL + 150.1 + 230.1 + +B 94 MUL + 200.1 + 183.1 + +B 95 MUL + 249.1 + 143.1 + 126.1 + +B 96 MUL + 251.1 + 177.1 + 171.1 + +B 97 MUL + 147.1 + 225.1 + +B 98 MUL + 203.1 + 137.1 + +B 99 MUL + 246.1 + 181.1 + 196.1 + 167.1 + +B 100 MUL + 149.1 + 164.1 + +B 101 MUL + 181.1 + 129.1 + +B 102 MUL 170.1 + 266.1 -B 143 MUL - 275.1 +B 103 MUL + 246.1 + 196.1 + 178.1 + +B 104 MUL + 221.1 + 127.1 + +B 105 MUL + 98.1 + 142.1 + +B 106 MUL + 196.1 + 176.1 + +B 107 MUL + 246.1 + 181.1 + 196.1 + 153.1 + +B 108 MUL + 229.1 + 86.1 + +B 109 MUL + 197.1 + 228.1 + +B 110 MUL + 181.1 + 196.1 + 154.1 + +B 111 MUL + 246.1 + 181.1 + 121.1 + +B 112 MUL + 65.1 185.1 + 189.1 + 192.1 + +B 113 MUL + 246.1 + 119.1 + +B 114 CHS + 278.4 + +B 115 CHS + 261.1 + +B 116 CHS + 144.1 + +B 117 CHS + 278.1 + +B 118 CHS + 206.1 + +B 119 CONST +P 119 + $b2 % Constant value + +B 120 CONST +P 120 + 2 % Constant value + +B 121 CONST +P 121 + $a7 % Constant value + +B 122 CONST +P 122 + 0.40 % Constant value + +B 123 CONST +P 123 + $HPNominalCapacity % Constant value + +B 124 CONST +P 124 + $a11 % Constant value + +B 125 CONST +P 125 + 2 % Constant value + +B 126 CONST +P 126 + $FuelEF % Constant value + +B 127 CONST +P 127 + 25 % Constant value + +B 128 CONST +P 128 + $b9 % Constant value + +B 129 CONST +P 129 + $b4 % Constant value + +B 130 CONST +P 130 + 10 % Constant value + +B 131 CONST +P 131 + $BuildingSuppTemp % Constant value + +B 132 CONST +P 132 + 12 % Constant value + +B 133 CONST +P 133 + $MaximumHPEnergyInput % Constant value + +B 134 CONST +P 134 + 2 % Constant value + +B 135 CONST +P 135 + $a4 % Constant value + +B 136 CONST +P 136 + 0 % Constant value + +B 137 CONST +P 137 + 7.13 % Constant value + +B 138 CONST +P 138 + $FuelLHV % Constant value + +B 139 CONST +P 139 + 2 % Constant value + +B 140 CONST +P 140 + $b1 % Constant value + +B 141 CONST +P 141 + 2 % Constant value + +B 142 CONST +P 142 + $Cp % Constant value + +B 143 CONST +P 143 + 300 % Constant value B 144 CONST P 144 - $b4 % Constant value + $TemperatureDifference % Constant value B 145 CONST P 145 - $b8 % Constant value + $b5 % Constant value B 146 CONST P 146 - $FuelLHV % Constant value + $b7 % Constant value B 147 CONST P 147 - $HPNominalCapacity % Constant value + $LowestPossibleLoadFlow % Constant value B 148 CONST P 148 - 10 % Constant value + $a3 % Constant value B 149 CONST P 149 - $b3 % Constant value + $Cp % Constant value B 150 CONST P 150 - $a11 % Constant value + $HighestPossibleLoadFlow % Constant value B 151 CONST P 151 - 300 % Constant value + $MaximumHPEnergyInput % Constant value B 152 CONST P 152 - 40 % Constant value + $a2 % Constant value B 153 CONST P 153 - 2 % Constant value + $a10 % Constant value B 154 CONST P 154 - $TemperatureDifference % Constant value + $a9 % Constant value B 155 CONST P 155 - 0 % Constant value + $Cp % Constant value B 156 CONST P 156 - $Cp % Constant value + $HPDisactivationTemperature % Constant value B 157 CONST P 157 - 2 % Constant value + $ElecGridEF % Constant value B 158 CONST P 158 - 300 % Constant value + $b8 % Constant value B 159 CONST P 159 - $b7 % Constant value + $b3 % Constant value B 160 CONST P 160 - $LowestPossibleLoadFlow % Constant value + 40 % Constant value B 161 CONST P 161 - $FuelEF % Constant value + 5 % Constant value B 162 CONST P 162 - $TemperatureDifference % Constant value + 2 % Constant value B 163 CONST P 163 - $HighestPossibleLoadFlow % Constant value + $MaximumHPEnergyInput % Constant value B 164 CONST P 164 - $BuildingSuppTemp % Constant value + $TemperatureDifference % Constant value B 165 CONST P 165 - $a6 % Constant value + 40 % Constant value B 166 CONST P 166 - $a5 % Constant value + $HPNominalCapacity % Constant value B 167 CONST P 167 - $HPNominalCapacity % Constant value + $b10 % Constant value B 168 CONST P 168 - 12 % Constant value + 0 % Constant value B 169 CONST P 169 - 5 % Constant value + $a6 % Constant value B 170 CONST P 170 - $a8 % Constant value + $a1 % Constant value B 171 CONST P 171 - $MaximumHPEnergyInput % Constant value + $FuelPrice % Constant value B 172 CONST P 172 - $a2 % Constant value + $a5 % Constant value B 173 CONST P 173 - 2 % Constant value + 12 % Constant value B 174 CONST P 174 - 12 % Constant value + $ElectricityPrice % Constant value B 175 CONST P 175 - $ElectricityPrice % Constant value + $HPReactivationTemperature % Constant value B 176 CONST P 176 - $a10 % Constant value + $b6 % Constant value B 177 CONST P 177 - $Cp % Constant value + 300 % Constant value B 178 CONST P 178 - $a9 % Constant value + $a8 % Constant value B 179 CONST P 179 - $MaximumHPEnergyInput % Constant value + $Cp % Constant value B 180 CONST P 180 @@ -512,467 +472,545 @@ P 180 B 181 CONST P 181 - $Cp % Constant value + $HPSupTemp % Constant value B 182 CONST P 182 - $b1 % Constant value + 9 % Constant value B 183 CONST P 183 - $a4 % Constant value + 1 % Constant value B 184 CONST P 184 - $a7 % Constant value - -B 185 CONST -P 185 - 25 % Constant value - -B 186 CONST -P 186 - 2 % Constant value - -B 187 CONST -P 187 - $HPSupTemp % Constant value - -B 188 CONST -P 188 - $b10 % Constant value - -B 189 CONST -P 189 - $b5 % Constant value - -B 190 CONST -P 190 - $b2 % Constant value - -B 191 CONST -P 191 - $a1 % Constant value - -B 192 CONST -P 192 - $MaximumHPEnergyInput % Constant value - -B 193 CONST -P 193 - 9 % Constant value - -B 194 CONST -P 194 - 0 % Constant value - -B 195 CONST -P 195 - 7.13 % Constant value - -B 196 CONST -P 196 - $a3 % Constant value - -B 197 CONST -P 197 - 2 % Constant value - -B 198 CONST -P 198 - $HPReactivationTemperature % Constant value - -B 199 CONST -P 199 - 1 % Constant value - -B 200 CONST -P 200 - 2 % Constant value - -B 201 CONST -P 201 $b11 % Constant value -B 202 CONST -P 202 - $HPDisactivationTemperature % Constant value +B 185 SUM + 75.1 + 113.1 + 78.1 + 101.1 + 82.1 + 106.1 + 79.1 + 87.1 + 76.1 + 99.1 + 184.1 -B 203 CONST -P 203 - 40 % Constant value +B 186 SUM + 278.5 + 115.1 -B 204 CONST -P 204 - 0.40 % Constant value - -B 205 CONST -P 205 - $ElecGridEF % Constant value - -B 206 CONST -P 206 - $b6 % Constant value - -B 207 CONST -P 207 - $b9 % Constant value - -B 208 CONST -P 208 - $Cp % Constant value - -B 209 CONST -P 209 - $FuelPrice % Constant value - -B 210 GT - 268.1 - 152.1 - -B 211 GT - 217.1 - 180.1 - -B 212 GT - 271.2 - 193.1 - -B 213 GT - 107.1 - 194.1 - -B 214 GT - 3.1 - 163.1 - -B 215 DELAY - 280.1 -P 215 - 10 % Initial value - -B 216 DELAY - 268.5 -P 216 - 0 % Initial value - -B 217 DELAY - 107.1 -P 217 - 0 % Initial value - -B 218 CHS - 268.1 - -B 219 CHS - 162.1 - -B 220 CHS - 268.4 - -B 221 CHS - 216.1 - -B 222 CHS - 6.1 - -B 223 CUMC - 271.2 - 259.1 - -B 224 CUMC - 271.4 - 259.1 - -B 225 CUMC - 271.2 - 120.1 - 140.1 - -B 226 CUMC - 271.3 - 259.1 - -B 227 CUMC - 271.2 +B 187 SUM + 102.1 + 88.1 + 80.1 + 73.1 + 90.1 + 77.1 + 111.1 + 103.1 110.1 - 104.1 + 107.1 + 124.1 -B 228 CUMC - 271.3 - 255.1 +B 188 SUM + 118.1 + 262.1 -B 229 CUMC - 271.3 - 110.1 - 104.1 - -B 230 CUMC - 271.2 - 255.1 - -B 231 CUMC - 271.3 - 120.1 - 140.1 - -B 232 WRITE - 228.1 - 228.2 -P 232 - 2 % Mode - $fileOut9 % File name - '*' % Fortran format - -B 233 WRITE - 227.1 - 227.2 - 227.3 -P 233 - 2 % Mode - $fileOut3 % File name - '*' % Fortran format - -B 234 WRITE - 226.1 - 226.2 -P 234 - 2 % Mode - $fileOut6 % File name - '*' % Fortran format - -B 235 WRITE - 230.1 - 230.2 -P 235 - 2 % Mode - $fileOut4 % File name - '*' % Fortran format - -B 236 WRITE - 223.1 - 223.2 -P 236 - 2 % Mode - $fileOut8 % File name - '*' % Fortran format - -B 237 WRITE - 231.1 - 231.2 - 231.3 -P 237 - 2 % Mode - $fileOut2 % File name - '*' % Fortran format - -B 238 WRITE - 229.1 - 229.2 - 229.3 -P 238 - 2 % Mode - $fileOut7 % File name - '*' % Fortran format - -B 239 WRITE - 271.1 - 271.2 - 271.3 +B 189 SUM 224.1 - 224.2 -P 239 - 2 % Mode - $fileOut10 % File name - '*' % Fortran format + 231.1 -B 240 WRITE - 225.1 - 225.2 - 225.3 -P 240 +B 190 SUM + 130.1 + 277.2 + +B 191 SUM + 94.1 + 168.1 + +B 192 SUM + 85.1 + 220.1 + +B 193 SUM + 109.1 + 104.1 + +B 194 SUM + 131.1 + 117.1 + +B 195 SUM + 181.1 + 114.1 + +B 196 SUM + 97.1 + 92.1 + 93.1 + +B 197 SUM + 116.1 + 278.1 + +B 198 DIV + 151.1 + 123.1 + +B 199 DIV + 201.1 + 65.1 + +B 200 DIV + 243.1 + 100.1 + +B 201 DIV + 241.1 + 83.1 + +B 202 DIV + 112.1 + 173.1 + +B 203 DIV + 133.1 + 166.1 + +B 204 DIV + 81.1 + 112.1 + +B 205 DIV + 253.1 + 138.1 + +B 206 DIV + 133.1 + 105.1 + +B 207 DIV + 112.1 + 132.1 + +B 208 DIV + 72.1 + 72.2 + +B 209 WRITE + 236.1 + 236.2 + 236.3 +P 209 2 % Mode $fileOut5 % File name '*' % Fortran format -B 241 WRITE - 271.1 - 271.2 - 271.3 - 271.4 - 271.5 - 107.1 - 123.1 - 9.1 - 128.1 - 100.1 - 268.1 - 268.2 - 268.3 - 268.4 - 268.5 - 258.1 - 260.1 - 11.1 - 263.1 - 110.1 - 104.1 - 120.1 - 140.1 - 92.1 - 277.1 - 269.2 +B 210 WRITE + 280.1 + 280.2 + 280.3 + 280.4 + 280.5 + 81.1 + 112.1 + 204.1 + 108.1 + 191.1 + 278.1 + 278.2 + 278.3 + 278.4 + 278.5 + 248.1 + 254.1 + 205.1 + 252.1 + 91.1 96.1 - 90.1 -P 241 + 84.1 + 95.1 + 193.1 + 222.1 + 277.2 + 187.1 + 185.1 +P 210 2 % Mode $fileOut1 % File name '*' % Fortran format -B 242 GE - 3.1 +B 211 WRITE + 233.1 + 233.2 +P 211 + 2 % Mode + $fileOut6 % File name + '*' % Fortran format + +B 212 WRITE + 280.1 + 280.2 + 280.3 + 239.1 + 239.2 +P 212 + 2 % Mode + $fileOut10 % File name + '*' % Fortran format + +B 213 WRITE + 235.1 + 235.2 +P 213 + 2 % Mode + $fileOut4 % File name + '*' % Fortran format + +B 214 WRITE + 232.1 + 232.2 +P 214 + 2 % Mode + $fileOut8 % File name + '*' % Fortran format + +B 215 WRITE + 237.1 + 237.2 + 237.3 +P 215 + 2 % Mode + $fileOut7 % File name + '*' % Fortran format + +B 216 WRITE + 234.1 + 234.2 + 234.3 +P 216 + 2 % Mode + $fileOut2 % File name + '*' % Fortran format + +B 217 WRITE + 240.1 + 240.2 + 240.3 +P 217 + 2 % Mode + $fileOut3 % File name + '*' % Fortran format + +B 218 WRITE + 238.1 + 238.2 +P 218 + 2 % Mode + $fileOut9 % File name + '*' % Fortran format + +B 219 INV + 258.1 + +B 220 INV + 257.1 + +B 221 INV + 228.1 + +B 222 READ +P 222 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $HeatingDemand % File name + '*' % Fortran format + +B 223 READ +P 223 + 1 % Number of values to be read per record + 0 % Number of records to be skipped on the first call + $WaterTemperature % File name + '*' % Fortran format + +B 224 LT + 280.2 + 161.1 + +B 225 LT + 199.1 + 147.1 + +B 226 LT + 278.1 + 165.1 + +B 227 GT + 260.1 + 180.1 + +B 228 GT + 278.1 160.1 + +B 229 GT + 81.1 + 136.1 + +B 230 GT + 199.1 + 150.1 + +B 231 GT + 280.2 + 182.1 + +B 232 CUMC + 280.2 + 247.1 + +B 233 CUMC + 280.3 + 247.1 + +B 234 CUMC + 280.3 + 84.1 + 95.1 + +B 235 CUMC + 280.2 + 242.1 + +B 236 CUMC + 280.2 + 84.1 + 95.1 + +B 237 CUMC + 280.3 + 91.1 + 96.1 + +B 238 CUMC + 280.3 + 242.1 + +B 239 CUMC + 280.4 + 247.1 + +B 240 CUMC + 280.2 + 91.1 + 96.1 + +B 241 GAIN + 151.1 +P 241 + 1000 % Gain factor g + +B 242 GAIN + 250.1 P 242 - 0 % Error tolerance - -B 243 GE - 268.1 - 198.1 -P 243 - 0 % Error tolerance - -B 244 GE - 268.1 - 202.1 -P 244 - 0 % Error tolerance - -B 245 EXPG - 280.1 - 157.1 - -B 246 EXPG - 280.1 - 153.1 - -B 247 EXPG - 187.1 - 197.1 - -B 248 EXPG - 102.1 - 186.1 - -B 249 EXPG - 102.1 - 173.1 - -B 250 EXPG - 187.1 - 200.1 - -B 251 LT - 268.1 - 203.1 - -B 252 LT - 3.1 - 160.1 - -B 253 LT - 271.2 - 169.1 - -B 254 LE - 3.1 - 163.1 -P 254 - 0 % Error tolerance - -B 255 GAIN - 261.1 -P 255 300 % Gain factor g -B 256 GAIN - 171.1 -P 256 +B 243 GAIN + 222.1 +P 243 1000 % Gain factor g -B 257 GAIN - 277.1 -P 257 - 1000 % Gain factor g +B 246 HXS + 188.1 + 98.1 + 259.2 + 122.1 +P 246 + 1 % Mode + 5000 % Overall heat transfer coefficient + 1007 % Specific heat of side 1 fluid + 1007 % Specific heat of side 2 fluid -B 258 ATT - 268.5 -P 258 - 3600000 % Attenuation factor a - -B 259 ATT - 123.1 -P 259 +B 247 ATT + 112.1 +P 247 12 % Attenuation factor a -B 260 ATT - 99.1 -P 260 +B 248 ATT + 278.5 +P 248 3600000 % Attenuation factor a -B 261 ATT - 11.1 -P 261 +B 249 ATT + 205.1 +P 249 $FuelDensity % Attenuation factor a -B 262 ATT - 11.1 -P 262 +B 250 ATT + 205.1 +P 250 $FuelDensity % Attenuation factor a -B 263 ATT - 115.1 -P 263 +B 251 ATT + 205.1 +P 251 + $FuelDensity % Attenuation factor a + +B 252 ATT + 74.1 +P 252 1000 % Attenuation factor a -B 264 ATT - 115.1 -P 264 +B 253 ATT + 74.1 +P 253 $AuxHeaterEfficiency % Attenuation factor a -B 265 ATT - 11.1 -P 265 - $FuelDensity % Attenuation factor a +B 254 ATT + 186.1 +P 254 + 3600000 % Attenuation factor a -B 268 TANKST - 187.1 - 128.1 - 92.1 - 100.1 - 93.1 - 272.1 -P 268 - $TESCapacity % Tank volume - 4 % Number of temperature nodes - $TESDiameter % Tank diameter - $Cp % Specfic heat of fluid - $Rhow % Fluid density - 0 % Overall heat-loss coefficient - 1 % Effective heat conductivity - 30 % Initial tank temperature +B 255 MTM2 + 280.2 +P 255 + 'Montreal' % Location -B 269 GENGT2 - 270.1 - 270.3 - 270.4 - 270.5 - 270.7 - 270.8 - 271.1 - 271.2 - 271.3 - 271.4 +B 256 GE + 199.1 + 147.1 +P 256 + 0 % Error tolerance + +B 257 GE + 278.1 + 175.1 +P 257 + 0 % Error tolerance + +B 258 GE + 278.1 + 156.1 +P 258 + 0 % Error tolerance + +B 259 UBHLOSS + 163.1 + 223.1 +P 259 + 300 % bp1 + 0.5 % bp2 + 0.05 % bp3 + 3 % bp4 + 4190 % bp5 + 1000 % bp6 + 5 % bp7 + 20 % bp8 + 300 % bp9 + +B 260 DELAY + 81.1 +P 260 + 0 % Initial value + +B 261 DELAY + 278.5 +P 261 + 0 % Initial value + +B 262 DELAY + 246.1 +P 262 + 10 % Initial value + +B 263 EXPG + 181.1 + 120.1 + +B 264 EXPG + 196.1 + 141.1 + +B 265 EXPG + 246.1 + 125.1 + +B 266 EXPG + 246.1 + 139.1 + +B 267 EXPG + 196.1 + 162.1 + +B 268 EXPG + 181.1 + 134.1 + +B 269 LE + 199.1 + 150.1 P 269 + 0 % Error tolerance + +B 270 SCREEN + 71.1 +P 270 + '*' % Format + 'Total Electricity Cost in a Year (CAD)' % Headline + +B 271 SCREEN + 67.1 +P 271 + '*' % Format + 'Total CO2 Emissions from Auxiliary Heater (g)' % Headline + +B 272 SCREEN + 208.1 +P 272 + '*' % Format + 'HP Seasonal COP' % Headline + +B 273 SCREEN + 66.1 +P 273 + '*' % Format + 'Total Fossil Fuel consumption in a Year (m3)' % Headline + +B 274 SCREEN + 69.1 +P 274 + '*' % Format + 'Total Electricuty Demand of Heat Pumps in a year (kWh)' % Headline + +B 275 SCREEN + 68.1 +P 275 + '*' % Format + 'Total CO2 Emissions from Electricity Grid (g)' % Headline + +B 276 SCREEN + 70.1 +P 276 + '*' % Format + 'Total Cost of the Auxiliary Heater Fuel in a Year (CAD)' % Headline + +B 277 GENGT2 + 255.1 + 255.3 + 255.4 + 255.5 + 255.7 + 255.8 + 280.1 + 280.2 + 280.3 + 280.4 +P 277 45.5 % Latitude -73.62 % Longitude -5 % UTC Time zone @@ -984,13 +1022,33 @@ P 269 2 % Maximum allowed mean temperature deviation 100 % Maximum number of iterations -B 270 MTM2 - 271.2 -P 270 - 'Montreal' % Location +B 278 TANKST + 181.1 + 108.1 + 193.1 + 191.1 + 190.1 + 279.1 +P 278 + $TESCapacity % Tank volume + 4 % Number of temperature nodes + $TESDiameter % Tank diameter + $Cp % Specfic heat of fluid + $Rhow % Fluid density + 0 % Overall heat-loss coefficient + 1 % Effective heat conductivity + 30 % Initial tank temperature -B 271 CLOCK -P 271 +B 279 SOY + 280.1 + 280.2 + 280.3 + 280.4 + 280.5 + 280.6 + +B 280 CLOCK +P 280 $StartYear % Start year $StartMonth % Start month $StartDay % Start day @@ -1006,62 +1064,3 @@ P 271 5 % Increment 'm' % Unit -B 272 SOY - 271.1 - 271.2 - 271.3 - 271.4 - 271.5 - 271.6 - -B 273 INV - 244.1 - -B 274 INV - 243.1 - -B 275 INV - 210.1 - -B 276 READ -P 276 - 1 % Number of values to be read per record - 0 % Number of records to be skipped on the first call - $HeatingDemand % File name - '*' % Fortran format - -B 277 READ -P 277 - 1 % Number of values to be read per record - 0 % Number of records to be skipped on the first call - $WaterTemperature % File name - '*' % Fortran format - -B 278 UBHLOSS - 192.1 - 276.1 -P 278 - 300 % L - 0.5 % D - 0.05 % U - 3 % Tg - 4190 % cp - 1000 % rho - 5 % delta_T - 20 % dx - 300 % df - -B 279 INT - 10.1 - -B 280 HXS - 101.1 - 139.1 - 278.2 - 204.1 -P 280 - 1 % Mode - 5000 % Overall heat transfer coefficient - 1007 % Specific heat of side 1 fluid - 1007 % Specific heat of side 2 fluid - diff --git a/exports/energy_systems/heat_pump_export.py b/exports/energy_systems/heat_pump_export.py index bdcfcdae..b6731579 100644 --- a/exports/energy_systems/heat_pump_export.py +++ b/exports/energy_systems/heat_pump_export.py @@ -71,17 +71,6 @@ class HeatPumpExport: Write headers to the various csv file generated by insel :return: """ - file_one_headers = ['Year', ' Month', ' Day', 'Hour', 'Minute', 'HP Heat Output (kW)', - 'HP Electricity Consumption (kW)', 'HP COP', 'TES Charging Rate (kg/s)', - 'TES Discharging Rate (kg/s)', 'TES Node 1 Temperature', 'TES Node 2 Temperature', - 'TES Node 3 Temperature', 'TES Node 4 Temperature', 'TES Energy Content (J)', - 'TES Energy Content (kWh)', 'TES Energy Content Variation (kWh)', - 'Auxiliary Heater Fuel Flow Rate (kg/s)', 'Auxiliary Heater Energy Input (kW)', - 'HP Operational Cost (CAD)', 'Auxiliary Heater Operational Cost (CAD)', - 'Operational CO2 Emissions of HP (g)', - 'Operational CO2 Emissions of Auxiliary Heater (g)', - 'Return Temperature', 'Demand (kW)', 'Test Column'] - header_data = { self._input_data['fileOut1']: ['Year', ' Month', ' Day', 'Hour', 'Minute', 'HP Heat Output (kW)', 'HP Electricity Consumption (kW)', 'HP COP', 'TES Charging Rate (kg/s)', @@ -200,6 +189,7 @@ class HeatPumpExport: and water to water source heat pump :return: """ + self._input_data["a1"] = a_coeff[0] self._input_data["a2"] = a_coeff[1] self._input_data["a3"] = a_coeff[2] diff --git a/exports/energy_systems/water_to_water_hp_export.py b/exports/energy_systems/water_to_water_hp_export.py index 7f7c4750..07787218 100644 --- a/exports/energy_systems/water_to_water_hp_export.py +++ b/exports/energy_systems/water_to_water_hp_export.py @@ -26,22 +26,19 @@ class WaterToWaterHPExport(HeatPumpExport): water_temp = (base_path / 'heat_pumps/wt_hourly3.txt') super().__init__(base_path, city, output_path, template_path, water_temp) - def _extract_model_coff(self, hp_model: str, data_type='heat') -> Union[Tuple[List, List], None]: + def _extract_model_coff(self, hp_model: str) -> Union[List, None]: """ Extracts heat pump coefficient data for a specific - model. e.g 012, 140 + model. e.g ClimateMaster 156 kW, etc :param hp_model: the model type - :param data_type: indicates whether we're extracting cooling - or heating perfarmcn coefficients :return: """ for energy_system in self._city.energy_systems: if energy_system.water_to_water_hp.model == hp_model: - return energy_system.water_to_water_hp.power_demand_coff, \ - energy_system.water_to_water_hp.heat_output_coff + return energy_system.water_to_water_hp.power_demand_coff return None - def execute_insel(self, user_input, hp_model, data_type): + def execute_insel(self, user_input, hp_model): """ Runs insel and produces output files Runs insel and write the necessary files @@ -49,10 +46,7 @@ class WaterToWaterHPExport(HeatPumpExport): values necessary to run insel :param hp_model: a string that indicates the heat pump model to be used e.g. 012, 015 - :param data_type: a string that indicates whether - insel should run for heat or cooling performance - :return: :return: """ - pow_demand_coeff, heat_output_coeff = self._extract_model_coff(hp_model, data_type) - super(WaterToWaterHPExport, self)._run_insel(user_input, pow_demand_coeff, heat_output_coeff, 'w2w.insel') + pow_demand_coeff = self._extract_model_coff(hp_model) + super(WaterToWaterHPExport, self)._run_insel(user_input, pow_demand_coeff, 'w2w.insel') diff --git a/exports/energy_systems_factory.py b/exports/energy_systems_factory.py index e24e0848..f3b52e11 100644 --- a/exports/energy_systems_factory.py +++ b/exports/energy_systems_factory.py @@ -47,7 +47,7 @@ class EnergySystemsExportFactory: .execute_insel(self._user_input, self._hp_model, self._data_type) elif source == 'water': WaterToWaterHPExport(self._base_path, self._city, self._output_path, self._sim_type)\ - .execute_insel(self._user_input, self._hp_model, self._data_type) + .execute_insel(self._user_input, self._hp_model) def export(self, source='air'): """ diff --git a/imports/energy_systems/water_to_water_hp_parameters.py b/imports/energy_systems/water_to_water_hp_parameters.py index 9348832a..346c5e3f 100644 --- a/imports/energy_systems/water_to_water_hp_parameters.py +++ b/imports/energy_systems/water_to_water_hp_parameters.py @@ -125,24 +125,20 @@ class WaterToWaterHPParameters: heat_pump.flow_rate = data['fr'] heat_pump.entering_water_temp = data['ewt'] heat_pump.leaving_water_temp = data['lwt'] - heat_pump.power_demand_coff = self._compute_coefficients(data, data_type='power') - heat_pump.heat_output_coff = self._compute_coefficients(data) - + heat_pump.power_demand_coff = self._compute_coefficients(data) energy_system = EnergySystem(heat_pump.model, 0, [], None) energy_system.water_to_water_hp = heat_pump self._city.add_city_object(energy_system) return self._city - def _compute_coefficients(self, heat_pump_data: Dict, data_type="heat_output") -> List[float]: + def _compute_coefficients(self, heat_pump_data: Dict) -> List[float]: """ Compute heat output and electrical demand coefficients from heating performance data :param heat_pump_data: a dictionary of heat pump data. - :param data_type: string to indicate whether coefficient are power demands - or heat output coefficients. Default is heat output :return: Tuple[Dict, Dict] """ - demand = heat_pump_data['tc'] if data_type == "heat_output" else heat_pump_data['pd'] + demand = [i / j for i, j in zip(heat_pump_data['tc'], heat_pump_data['pd'])] # Compute heat output coefficients popt, _ = curve_fit(self._objective_function, [heat_pump_data['ewt'], heat_pump_data['lwt'], heat_pump_data['fr']], From ceb6ae1856ed099f8ed3c320e69ab8b155d51333 Mon Sep 17 00:00:00 2001 From: guille Date: Thu, 17 Mar 2022 14:49:18 -0400 Subject: [PATCH 53/54] correct small error in merge --- city_model_structure/city.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/city_model_structure/city.py b/city_model_structure/city.py index b4c8cbea..780d8e35 100644 --- a/city_model_structure/city.py +++ b/city_model_structure/city.py @@ -17,6 +17,8 @@ from city_model_structure.building import Building from city_model_structure.city_object import CityObject from city_model_structure.city_objects_cluster import CityObjectsCluster from city_model_structure.buildings_cluster import BuildingsCluster +from city_model_structure.fuel import Fuel +from city_model_structure.machine import Machine from city_model_structure.parts_consisting_building import PartsConsistingBuilding from city_model_structure.subway_entrance import SubwayEntrance from helpers.geometry_helper import GeometryHelper From 172cecdb7bdf2403920b3ad1118e6a1ea01c328b Mon Sep 17 00:00:00 2001 From: guille Date: Fri, 18 Mar 2022 08:33:35 -0400 Subject: [PATCH 54/54] correct another error in merge --- imports/geometry_factory.py | 1 + 1 file changed, 1 insertion(+) diff --git a/imports/geometry_factory.py b/imports/geometry_factory.py index e5facb60..d24199bf 100644 --- a/imports/geometry_factory.py +++ b/imports/geometry_factory.py @@ -8,6 +8,7 @@ from city_model_structure.city import City from imports.geometry.citygml import CityGml from imports.geometry.obj import Obj from imports.geometry.osm_subway import OsmSubway +from imports.geometry.rhino import Rhino class GeometryFactory: