From abce90c136cb2b74f37e1df0d493c0f150aa2c70 Mon Sep 17 00:00:00 2001 From: CalCraven Date: Sun, 17 Sep 2023 14:50:25 +0100 Subject: [PATCH] Add gaff support in hoomd by fixing iterable periodic dihedrals. Relax uniqueness in gmso xsd for bonded types. --- gmso/external/convert_hoomd.py | 97 +- gmso/tests/base_test.py | 8 + gmso/tests/test_hoomd.py | 181 +- gmso/utils/ff_utils.py | 14 +- .../files/gmso_xmls/test_ffstyles/gaff.xml | 47249 ++++++++++++++++ gmso/utils/schema/ff-gmso.xsd | 35 +- 6 files changed, 47419 insertions(+), 165 deletions(-) create mode 100644 gmso/utils/files/gmso_xmls/test_ffstyles/gaff.xml diff --git a/gmso/external/convert_hoomd.py b/gmso/external/convert_hoomd.py index 637b00d2e..458fcc456 100644 --- a/gmso/external/convert_hoomd.py +++ b/gmso/external/convert_hoomd.py @@ -1,6 +1,7 @@ """Convert GMSO Topology to GSD snapshot.""" from __future__ import division +import copy import itertools import json import re @@ -1126,29 +1127,48 @@ def _parse_dihedral_forces( if int(hoomd_version[0]) >= 4 or ( int(hoomd_version[0]) == 3 and int(hoomd_version[1]) >= 8 ): - dtype_group_map["PeriodicTorsionPotential"] = ( - { - "container": hoomd.md.dihedral.Periodic, - "parser": _parse_periodic_dihedral, - }, - ) + v_hoomd = "gt3.8" + dtype_group_map["PeriodicTorsionPotential"] = { + "container": hoomd.md.dihedral.Periodic, + "parser": _parse_periodic_dihedral, + } + else: + v_hoomd = "lt3.8" # Should this be periodic, deprecated starting from 3.8.0 - dtype_group_map["PeriodicTorsionPotential"] = ( - { - "container": hoomd.md.dihedral.Harmonic, - "parser": _parse_periodic_dihedral, - }, - ) + dtype_group_map["PeriodicTorsionPotential"] = { + "container": hoomd.md.dihedral.Harmonic, + "parser": _parse_periodic_dihedral, + } dihedral_forces = list() for group in groups: - dihedral_forces.append( - dtype_group_map[group]["parser"]( - container=dtype_group_map[group]["container"](), - dtypes=groups[group], + container = dtype_group_map[group]["container"] + if isinstance(container(), hoomd.md.dihedral.OPLS): + dihedral_forces.append( + dtype_group_map[group]["parser"]( + container=container(), + dtypes=groups[group], + ) + ) + elif v_hoomd == "gt3.8" and isinstance( + container(), hoomd.md.dihedral.Periodic + ): + dihedral_forces.extend( + dtype_group_map[group]["parser"]( + container=container, + dtypes=groups[group], + ) + ) + elif v_hoomd == "lt3.8" and isinstance( + container(), hoomd.md.dihedral.Harmonic + ): + dihedral_forces.extend( + dtype_group_map[group]["parser"]( + container=container, + dtypes=groups[group], + ) ) - ) return dihedral_forces @@ -1156,15 +1176,42 @@ def _parse_periodic_dihedral( container, dtypes, ): + containersList = [] + for _ in range(5): + containersList.append(copy.deepcopy(container)()) for dtype in dtypes: member_types = sort_member_types(dtype) - container.params["-".join(member_types)] = { - "k": dtype.parameters["k"], - "d": 1, - "n": dtype.parameters["n"], - "phi0": dtype.parameters["phi_eq"], - } - return container + if isinstance(dtype.parameters["k"], u.array.unyt_quantity): + containersList[0].params["-".join(member_types)] = { + "k": dtype.parameters["k"].to_value(), + "d": 1, + "n": dtype.parameters["n"].to_value(), + "phi0": dtype.parameters["phi_eq"].to_value(), + } + elif isinstance(dtype.parameters["k"], u.array.unyt_array): + paramsLen = len(dtype.parameters["k"]) + for nIndex in range(paramsLen): + containersList[nIndex].params["-".join(member_types)] = { + "k": dtype.parameters["k"].to_value()[nIndex], + "d": 1, + "n": dtype.parameters["n"].to_value()[nIndex], + "phi0": dtype.parameters["phi_eq"].to_value()[nIndex], + } + filled_containersList = [] + for i in range(5): # take only periodic terms that have parameters + if len(tuple(containersList[i].params.keys())) == 0: + continue + # add in extra parameters + for key in containersList[0].params.keys(): + if key not in containersList[i].params.keys(): + containersList[i].params[key] = { + "k": 0, + "d": 1, + "n": 0, + "phi0": 0, + } + filled_containersList.append(containersList[i]) + return filled_containersList def _parse_opls_dihedral( @@ -1370,6 +1417,8 @@ def _validate_base_units(base_units, top, auto_scale, potential_types=None): base_units[key] = 1 * base_units[key] # Add angle unit (since HOOMD will use radian across the board) base_units["angle"] = 1 * u.radian + # add dimensionless handling + base_units["dimensionless"] = 1 * u.dimensionless return base_units diff --git a/gmso/tests/base_test.py b/gmso/tests/base_test.py index 9e040d915..b5dc15395 100644 --- a/gmso/tests/base_test.py +++ b/gmso/tests/base_test.py @@ -677,3 +677,11 @@ def harmonic_parmed_types_charmm(self): assert_improper_params=False, ) return struc + + @pytest.fixture + def gaff_forcefield(self): + return ForceField(get_fn("gmso_xmls/test_ffstyles/gaff.xml")) + + @pytest.fixture + def oplsaa_forcefield(self): + return ForceField("oplsaa") diff --git a/gmso/tests/test_hoomd.py b/gmso/tests/test_hoomd.py index 76651034a..b31a70e63 100644 --- a/gmso/tests/test_hoomd.py +++ b/gmso/tests/test_hoomd.py @@ -20,10 +20,43 @@ mb = import_("mbuild") +def run_hoomd_nvt(snapshot, forces, vhoomd=4): + cpu = hoomd.device.CPU() + sim = hoomd.Simulation(device=cpu) + sim.create_state_from_snapshot(snapshot) + + integrator = hoomd.md.Integrator(dt=0.001) + integrator_forces = list() + for cat in forces: + for force in forces[cat]: + integrator_forces.append(force) + integrator.forces = integrator_forces + + temp = 300 * u.K + kT = temp.to_equivalent("kJ/mol", "thermal").value + if vhoomd == 4: + thermostat = hoomd.md.methods.thermostats.MTTK(kT=kT, tau=1.0) + nvt = hoomd.md.methods.ConstantVolume( + thermostat=thermostat, filter=hoomd.filter.All() + ) + elif vhoomd == 3: + nvt = hoomd.md.methods.NVT(kT=kT, filter=hoomd.filter.All(), tau=1.0) + integrator.methods.append(nvt) + sim.operations.integrator = integrator + + sim.state.thermalize_particle_momenta(filter=hoomd.filter.All(), kT=kT) + thermodynamic_properties = hoomd.md.compute.ThermodynamicQuantities( + filter=hoomd.filter.All() + ) + + sim.operations.computes.append(thermodynamic_properties) + return sim + + @pytest.mark.skipif(not has_hoomd, reason="hoomd is not installed") @pytest.mark.skipif(not has_mbuild, reason="mbuild not installed") class TestGsd(BaseTest): - def test_mbuild_comparison(self): + def test_mbuild_comparison(self, oplsaa_forcefield): compound = mb.load("CCC", smiles=True) com_box = mb.packing.fill_box(compound, box=[5, 5, 5], n_compounds=20) base_units = { @@ -34,13 +67,10 @@ def test_mbuild_comparison(self): top = from_mbuild(com_box) top.identify_connections() - oplsaa = ffutils.FoyerFFs().load("oplsaa").to_gmso_ff() - top = apply(top, oplsaa, remove_untyped=True) + top = apply(top, oplsaa_forcefield, remove_untyped=True) - gmso_snapshot, snapshot_base_units = to_hoomd_snapshot( - top, base_units=base_units - ) - gmso_forces, forces_base_units = to_hoomd_forcefield( + gmso_snapshot, _ = to_hoomd_snapshot(top, base_units=base_units) + gmso_forces, _ = to_hoomd_forcefield( top, r_cut=1.4, base_units=base_units, @@ -61,7 +91,7 @@ def test_mbuild_comparison(self): e = 1 / 4.184 m = 0.9999938574 - mb_snapshot, mb_forcefield, ref_vals = create_hoomd_forcefield( + mb_snapshot, mb_forcefield, _ = create_hoomd_forcefield( structure, ref_distance=d, ref_energy=e, @@ -85,6 +115,7 @@ def test_mbuild_comparison(self): sorted_mbuild_ff = sorted( mb_forcefield, key=lambda cls: str(cls.__class__) ) + for mb_force, gmso_force in zip(sorted_mbuild_ff, sorted_gmso_ff): if not isinstance(mb_force, hoomd.md.long_range.pppm.Coulomb): keys = mb_force.params.param_dict.keys() @@ -112,46 +143,15 @@ def test_hoomd4_simulation(self): oplsaa = ffutils.FoyerFFs().load("oplsaa").to_gmso_ff() top = apply(top, oplsaa, remove_untyped=True) - gmso_snapshot, snapshot_base_units = to_hoomd_snapshot( - top, base_units=base_units - ) - gmso_forces, forces_base_units = to_hoomd_forcefield( + gmso_snapshot, _ = to_hoomd_snapshot(top, base_units=base_units) + gmso_forces, _ = to_hoomd_forcefield( top, r_cut=1.4, base_units=base_units, pppm_kwargs={"resolution": (64, 64, 64), "order": 7}, ) - integrator_forces = list() - for cat in gmso_forces: - for force in gmso_forces[cat]: - integrator_forces.append(force) - - temp = 300 * u.K - kT = temp.to_equivalent("kJ/mol", "thermal").value - - cpu = hoomd.device.CPU() - sim = hoomd.Simulation(device=cpu) - sim.create_state_from_snapshot(gmso_snapshot) - - integrator = hoomd.md.Integrator(dt=0.001) - # cell = hoomd.md.nlist.Cell(buffer=0.4) - integrator.forces = integrator_forces - # integrator.forces = mb_forcefield - - thermostat = hoomd.md.methods.thermostats.MTTK(kT=kT, tau=1.0) - nvt = hoomd.md.methods.ConstantVolume( - thermostat=thermostat, filter=hoomd.filter.All() - ) - integrator.methods.append(nvt) - sim.operations.integrator = integrator - - sim.state.thermalize_particle_momenta(filter=hoomd.filter.All(), kT=kT) - thermodynamic_properties = hoomd.md.compute.ThermodynamicQuantities( - filter=hoomd.filter.All() - ) - - sim.operations.computes.append(thermodynamic_properties) + sim = run_hoomd_nvt(gmso_snapshot, gmso_forces) sim.run(100) @pytest.mark.skipif( @@ -171,12 +171,12 @@ def test_hoomd4_simulation_auto_scaled(self): oplsaa = ffutils.FoyerFFs().load("oplsaa").to_gmso_ff() top = apply(top, oplsaa, remove_untyped=True) - gmso_snapshot, snapshot_base_units = to_hoomd_snapshot( + gmso_snapshot, _ = to_hoomd_snapshot( top, base_units=base_units, auto_scale=True, ) - gmso_forces, forces_base_units = to_hoomd_forcefield( + gmso_forces, _ = to_hoomd_forcefield( top, r_cut=1.4, base_units=base_units, @@ -184,36 +184,7 @@ def test_hoomd4_simulation_auto_scaled(self): auto_scale=True, ) - integrator_forces = list() - for cat in gmso_forces: - for force in gmso_forces[cat]: - integrator_forces.append(force) - - temp = 300 * u.K - kT = temp.to_equivalent("kJ/mol", "thermal").value - - cpu = hoomd.device.CPU() - sim = hoomd.Simulation(device=cpu) - sim.create_state_from_snapshot(gmso_snapshot) - - integrator = hoomd.md.Integrator(dt=0.001) - # cell = hoomd.md.nlist.Cell(buffer=0.4) - integrator.forces = integrator_forces - # integrator.forces = mb_forcefield - - thermostat = hoomd.md.methods.thermostats.MTTK(kT=kT, tau=1.0) - nvt = hoomd.md.methods.ConstantVolume( - thermostat=thermostat, filter=hoomd.filter.All() - ) - integrator.methods.append(nvt) - sim.operations.integrator = integrator - - sim.state.thermalize_particle_momenta(filter=hoomd.filter.All(), kT=kT) - thermodynamic_properties = hoomd.md.compute.ThermodynamicQuantities( - filter=hoomd.filter.All() - ) - - sim.operations.computes.append(thermodynamic_properties) + sim = run_hoomd_nvt(gmso_snapshot, gmso_forces) sim.run(100) @pytest.mark.skipif( @@ -243,33 +214,7 @@ def test_hoomd3_simulation(self): pppm_kwargs={"resolution": (64, 64, 64), "order": 7}, ) - integrator_forces = list() - for cat in gmso_forces: - for force in gmso_forces[cat]: - integrator_forces.append(force) - - temp = 300 * u.K - kT = temp.to_equivalent("kJ/mol", "thermal").value - - cpu = hoomd.device.CPU() - sim = hoomd.Simulation(device=cpu) - sim.create_state_from_snapshot(gmso_snapshot) - - integrator = hoomd.md.Integrator(dt=0.001) - # cell = hoomd.md.nlist.Cell(buffer=0.4) - integrator.forces = integrator_forces - # integrator.forces = mb_forcefield - - nvt = hoomd.md.methods.NVT(kT=kT, filter=hoomd.filter.All(), tau=1.0) - integrator.methods.append(nvt) - sim.operations.integrator = integrator - - sim.state.thermalize_particle_momenta(filter=hoomd.filter.All(), kT=kT) - thermodynamic_properties = hoomd.md.compute.ThermodynamicQuantities( - filter=hoomd.filter.All() - ) - - sim.operations.computes.append(thermodynamic_properties) + sim = run_hoomd_nvt(gmso_snapshot, gmso_forces, vhoomd=3) sim.run(100) @pytest.mark.skipif( @@ -427,7 +372,7 @@ def test_zero_charges(self): for site in top.sites: site.charge = 0 - gmso_forces, forces_base_units = to_hoomd_forcefield( + gmso_forces, _ = to_hoomd_forcefield( top=top, r_cut=1.4, ) @@ -436,3 +381,35 @@ def test_zero_charges(self): assert not isinstance(force, hoomd.md.pair.pair.Ewald) assert not isinstance(force, hoomd.md.long_range.pppm.Coulomb) assert not isinstance(force, hoomd.md.special_pair.Coulomb) + + @pytest.mark.skipif(not has_hoomd, reason="hoomd is not installed") + @pytest.mark.skipif(not has_mbuild, reason="mbuild not installed") + @pytest.mark.skipif( + int(hoomd_version[0]) <= 3.8, reason="Deprecated features in HOOMD 4" + ) + def test_gaff_sim(self, gaff_forcefield): + base_units = { + "mass": u.g / u.mol, + "length": u.nm, + "energy": u.kJ / u.mol, + } + ethanol = mb.load("CCO", smiles=True) + ethanol.box = mb.Box([5, 5, 5]) + top = ethanol.to_gmso() + parameterized_top = apply( + top, gaff_forcefield, identify_connections=True + ) + assert parameterized_top.is_fully_typed + + snap, _ = to_hoomd_snapshot(parameterized_top, base_units) + forces, _ = to_hoomd_forcefield( + parameterized_top, + r_cut=1.4, + base_units=base_units, + pppm_kwargs={"resolution": (64, 64, 64), "order": 7}, + ) + assert forces + assert snap + + sim = run_hoomd_nvt(snap, forces) + sim.run(100) diff --git a/gmso/utils/ff_utils.py b/gmso/utils/ff_utils.py index 079f84dc7..3e1538eaa 100644 --- a/gmso/utils/ff_utils.py +++ b/gmso/utils/ff_utils.py @@ -320,19 +320,7 @@ def _validate_schema(xml_path_or_etree, schema=None): # rewrite error message for constraint violation if ex.error_log.last_error.type_name == "SCHEMAV_CVC_IDC": for keyword in ex.error_log: - if keyword.message == message: - atomtype = message[ - message.find("[") + 1 : message.find("]") - ] - error_text = ex.error_log[keyword].format(atomtype, line) - raise ForceFieldParseError((error_text, ex, line)) - else: - raise ForceFieldParseError( - "Unhandled XML validation error. " - "Please consider submitting a bug report.", - message, - line, - ) + raise ForceFieldParseError(message, line) return ff_xml diff --git a/gmso/utils/files/gmso_xmls/test_ffstyles/gaff.xml b/gmso/utils/files/gmso_xmls/test_ffstyles/gaff.xml new file mode 100644 index 000000000..923ad88e7 --- /dev/null +++ b/gmso/utils/files/gmso_xmls/test_ffstyles/gaff.xml @@ -0,0 +1,47249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.2552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.1002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.1002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.1002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.1002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.1002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.029 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.029 + + + 3.141592653589793 + + + 2.0 + + + + + + + 10.46 + + + 3.141592653589793 + + + 2.0 + + + + + + + 17.3636 + + + 3.141592653589793 + + + 2.0 + + + + + + + 16.736 + + + 3.141592653589793 + + + 2.0 + + + + + + + 16.736 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.8368000000000001 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.8368000000000001 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.0668 + 1.4644 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 4.0 + + + + + + + 1.8828 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.623199999999999 + + + 3.141592653589793 + + + 2.0 + + + + + + + 11.296800000000001 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 8.368 + + + 3.141592653589793 + + + 2.0 + + + + + + + 8.368 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.485200000000001 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.6484000000000005 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.6484000000000005 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 0.0 + + + 2.0 + + + + + + + 4.184 + + + 0.0 + + + 2.0 + + + + + + + 9.414 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.970400000000001 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.8368000000000001 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.8368000000000001 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.092 + + + 0.0 + + + 2.0 + + + + + + + 2.092 + + + 0.0 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 16.736 + + + 3.141592653589793 + + + 2.0 + + + + + + + 16.736 + + + 3.141592653589793 + + + 2.0 + + + + + + + 16.736 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 0.0 + + + 2.0 + + + + + + + 2.9288 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.7196000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 17.3636 + + + 3.141592653589793 + + + 2.0 + + + + + + + 17.3636 + + + 3.141592653589793 + + + 2.0 + + + + + + + 17.3636 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.3472000000000004 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.3472000000000004 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.2552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 3.0 + + + + + + + 2.615 + + + 3.141592653589793 + + + 2.0 + + + + + + + 7.1128 + + + 3.141592653589793 + + + 2.0 + + + + + + + 7.1128 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.8242000000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.138 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.3932 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.3932 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.9748 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.9748 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.874000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.8828 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.3598000000000001 + + + 0.0 + + + 2.0 + + + + + + + 1.3598000000000001 + + + 0.0 + + + 2.0 + + + + + + + 1.3598000000000001 + + + 0.0 + + + 2.0 + + + + + + + 27.8236 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.8236 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.8236 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.997066666666666 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.997066666666666 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.997066666666666 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.092 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.5104 + + + 0.0 + + + 2.0 + + + + + + + 2.5104 + + + 0.0 + + + 2.0 + + + + + + + 2.5104 + + + 0.0 + + + 2.0 + + + + + + + 27.8236 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.8236 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.8236 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.299733333333333 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.299733333333333 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.299733333333333 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.6508444444444444 + + + 0.0 + + + 3.0 + + + + + + + 0.6508444444444444 + + + 0.0 + + + 3.0 + + + + + + + 0.6508444444444444 + + + 0.0 + + + 3.0 + + + + + + + 0.0 + + + 0.0 + + + 2.0 + + + + + + + 0.0 + + + 0.0 + + + 2.0 + + + + + + + 0.0 + + + 0.0 + + + 2.0 + + + + + + + 0.0 + + + 0.0 + + + 2.0 + + + + + + + 0.0 + + + 0.0 + + + 3.0 + + + + + + + 0.0 + + + 0.0 + + + 3.0 + + + + + + + 0.0 + + + 0.0 + + + 3.0 + + + + + + + 1.2552 + + + 0.0 + + + 3.0 + + + + + + + 0.6508444444444444 + + + 0.0 + + + 3.0 + + + + + + + 0.0 + + + 0.0 + + + 2.0 + + + + + + + 0.0 + + + 0.0 + + + 2.0 + + + + + + + 0.0 + + + 0.0 + + + 2.0 + + + + + + + 0.6973333333333334 + + + 0.0 + + + 3.0 + + + + + + + 1.6038666666666666 + + + 0.0 + + + 3.0 + + + + + + + 1.1157333333333335 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.1157333333333335 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.1157333333333335 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.5578666666666667 + + + 0.0 + + + 3.0 + + + + + + + 0.5578666666666667 + + + 0.0 + + + 3.0 + + + + + + + 0.5578666666666667 + + + 0.0 + + + 3.0 + + + + + + + 0.09297777777777778 + + + 0.0 + + + 3.0 + + + + + + + 0.09297777777777778 + + + 0.0 + + + 3.0 + + + + + + + 1.046 + + + 0.0 + + + 3.0 + + + + + + + 1.3946666666666667 + + + 0.0 + + + 3.0 + + + + + + + 0.8368000000000001 + + + 0.0 + + + 3.0 + + + + + + + 0.8368000000000001 + + + 0.0 + + + 3.0 + + + + + + + 0.6043555555555556 + + + 0.0 + + + 3.0 + + + + + + + 0.6043555555555556 + + + 0.0 + + + 3.0 + + + + + + + 0.0 + + + 0.0 + + + 3.0 + + + + + + + 0.0 + + + 0.0 + + + 3.0 + + + + + + + 15.167 + + + 3.141592653589793 + + + 2.0 + + + + + + + 15.167 + + + 3.141592653589793 + + + 2.0 + + + + + + + 15.167 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.8828 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 3.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 3.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 3.0 + + + + + + + 7.322 + + + 0.0 + + + 2.0 + + + + + + + 1.2552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.3932 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.3932 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.3932 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.5104 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.7656 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.7656 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.5104 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.5104 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.5104 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.1966 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.1966 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.136533333333333 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.136533333333333 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.6736000000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.2552 + + + 0.0 + + + 2.0 + + + + + + + 1.2552 + + + 0.0 + + + 2.0 + + + + + + + 5.4392 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.4392 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.9036 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.9036 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.811599999999999 + + + 0.0 + + + 2.0 + + + + + + + 1.6736000000000002 + + + 0.0 + + + 2.0 + + + + + + + 1.6736000000000002 + + + 0.0 + + + 2.0 + + + + + + + 1.6736000000000002 + + + 0.0 + + + 2.0 + + + + + + + 4.4978 + + + 0.0 + + + 2.0 + + + + + + + 3.9748 + + + 0.0 + + + 2.0 + + + + + + + 2.9288 + + + 0.0 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 0.0 + + + 2.0 + + + + + + + 5.753 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.276 + + + 0.0 + + + 2.0 + + + + + + + 4.6024 + + + 0.0 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.414 + + + 0.0 + + + 2.0 + + + + + + + 1.3598000000000001 + + + 0.0 + + + 2.0 + + + + + + + 1.3598000000000001 + + + 0.0 + + + 2.0 + + + + + + + 9.2048 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.2048 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 0.0 + + + 2.0 + + + + + + + 6.276 + + + 0.0 + + + 2.0 + + + + + + + 6.276 + + + 0.0 + + + 3.0 + + + + + + + 6.276 + + + 0.0 + + + 3.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.552 + 11.7152 + + + 3.141592653589793 + 0.0 + + + 2.0 + 1.0 + + + + + + + 12.552 + 11.7152 + + + 3.141592653589793 + 0.0 + + + 2.0 + 1.0 + + + + + + + 12.552 + 11.7152 + + + 3.141592653589793 + 0.0 + + + 2.0 + 1.0 + + + + + + + 12.552 + 11.7152 + + + 3.141592653589793 + 0.0 + + + 2.0 + 1.0 + + + + + + + 5.0208 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.0208 + + + 3.141592653589793 + + + 2.0 + + + + + + + 16.736 + + + 3.141592653589793 + + + 2.0 + + + + + + + 16.736 + + + 3.141592653589793 + + + 2.0 + + + + + + + 16.736 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.552 + 11.7152 + + + 3.141592653589793 + 0.0 + + + 2.0 + 1.0 + + + + + + + 12.552 + 11.7152 + + + 3.141592653589793 + 0.0 + + + 2.0 + 1.0 + + + + + + + 25.5224 + + + 3.141592653589793 + + + 2.0 + + + + + + + 25.5224 + + + 3.141592653589793 + + + 2.0 + + + + + + + 25.5224 + + + 3.141592653589793 + + + 2.0 + + + + + + + 33.472 + + + 3.141592653589793 + + + 2.0 + + + + + + + 33.472 + + + 3.141592653589793 + + + 2.0 + + + + + + + 33.472 + + + 3.141592653589793 + + + 2.0 + + + + + + + 7.1128 + + + 3.141592653589793 + + + 2.0 + + + + + + + 7.1128 + + + 3.141592653589793 + + + 2.0 + + + + + + + 7.1128 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 11.7152 + + + 3.141592653589793 + + + 2.0 + + + + + + + 11.7152 + + + 3.141592653589793 + + + 2.0 + + + + + + + 11.7152 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.138 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.138 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.138 + + + 3.141592653589793 + + + 2.0 + + + + + + + 13.388800000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 13.388800000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 13.388800000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 22.593600000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 22.593600000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 22.593600000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 22.593600000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 22.593600000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 22.593600000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 22.593600000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 22.593600000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.6144 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.6144 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.6144 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.6144 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.5104 + + + 0.0 + + + 1.0 + + + + + + + 2.5104 + + + 0.0 + + + 1.0 + + + + + + + 8.7864 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.893333333333334 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 3.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 3.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 3.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 3.0 + + + + + + + 8.7864 + + + 3.141592653589793 + + + 2.0 + + + + + + + 8.7864 + + + 3.141592653589793 + + + 2.0 + + + + + + + 8.7864 + + + 3.141592653589793 + + + 2.0 + + + + + + + 11.7152 + 5.4392000000000005 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 11.7152 + 5.4392000000000005 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 11.7152 + 5.4392000000000005 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.276 + + + 3.141592653589793 + + + 3.0 + + + + + + + 6.276 + + + 3.141592653589793 + + + 3.0 + + + + + + + 27.893333333333334 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.092 + 28.4512 + + + 3.141592653589793 + 3.141592653589793 + + + 3.0 + 1.0 + + + + + + + 2.092 + 28.4512 + + + 3.141592653589793 + 3.141592653589793 + + + 3.0 + 1.0 + + + + + + + 9.414 + + + 0.0 + + + 2.0 + + + + + + + 1.046 + + + 0.0 + + + 3.0 + + + + + + + 6.694400000000001 + + + 0.0 + + + 2.0 + + + + + + + 7.9496 + + + 0.0 + + + 2.0 + + + + + + + 16.736 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.2048 + + + 0.0 + + + 2.0 + + + + + + + 7.5312 + + + 0.0 + + + 2.0 + + + + + + + 13.388800000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 13.388800000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 13.388800000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.832400000000002 + + + 0.0 + + + 2.0 + + + + + + + 8.7864 + + + 3.141592653589793 + + + 2.0 + + + + + + + 8.7864 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.970400000000001 + + + 0.0 + + + 2.0 + + + + + + + 10.878400000000001 + + + 0.0 + + + 2.0 + + + + + + + 15.690000000000001 + + + 0.0 + + + 2.0 + + + + + + + 15.690000000000001 + + + 0.0 + + + 2.0 + + + + + + + 13.109866666666669 + + + 0.0 + + + 2.0 + + + + + + + 13.109866666666669 + + + 0.0 + + + 2.0 + + + + + + + 0.7903111111111111 + + + 0.0 + + + 3.0 + + + + + + + 0.9762666666666666 + + + 0.0 + + + 3.0 + + + + + + + 0.7670666666666667 + + + 0.0 + + + 3.0 + + + + + + + 0.3486666666666667 + + + 3.141592653589793 + + + 3.0 + + + + + + + 1.3946666666666667 + + + 0.0 + + + 3.0 + + + + + + + 2.3709333333333333 + + + 0.0 + + + 3.0 + + + + + + + 0.6973333333333334 + + + 3.141592653589793 + + + 3.0 + + + + + + + 0.6973333333333334 + + + 3.141592653589793 + + + 3.0 + + + + + + + 0.6973333333333334 + + + 3.141592653589793 + + + 3.0 + + + + + + + 0.6276 + + + 0.0 + + + 3.0 + + + + + + + 0.20920000000000002 + + + 0.0 + + + 3.0 + + + + + + + 0.20920000000000002 + + + 0.0 + + + 3.0 + + + + + + + 0.37191111111111114 + + + 0.0 + + + 3.0 + + + + + + + 0.37191111111111114 + + + 0.0 + + + 3.0 + + + + + + + 2.7893333333333334 + + + 0.0 + + + 3.0 + + + + + + + 1.3946666666666667 + + + 0.0 + + + 3.0 + + + + + + + 1.1854666666666667 + + + 0.0 + + + 3.0 + + + + + + + 1.1854666666666667 + + + 0.0 + + + 3.0 + + + + + + + 0.5578666666666667 + + + 0.0 + + + 3.0 + + + + + + + 0.5578666666666667 + + + 0.0 + + + 3.0 + + + + + + + 3.7656 + + + 0.0 + + + 2.0 + + + + + + + 5.0208 + + + 0.0 + + + 2.0 + + + + + + + 25.104 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 0.0 + + + 2.0 + + + + + + + 2.7196000000000002 + + + 0.0 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.184 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.0668 + + + 0.0 + + + 2.0 + + + + + + + 4.6024 + + + 0.0 + + + 3.0 + + + + + + + 4.6024 + + + 0.0 + + + 3.0 + + + + + + + 3.486666666666667 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.486666666666667 + + + 3.141592653589793 + + + 2.0 + + + + + + + 7.5312 + + + 0.0 + + + 2.0 + + + + + + + 32.6352 + + + 0.0 + + + 2.0 + + + + + + + 4.3932 + + + 0.0 + + + 2.0 + + + + + + + 4.3932 + + + 0.0 + + + 2.0 + + + + + + + 15.341333333333333 + + + 3.141592653589793 + + + 2.0 + + + + + + + 15.341333333333333 + + + 3.141592653589793 + + + 2.0 + + + + + + + 7.5312 + + + 3.141592653589793 + + + 3.0 + + + + + + + 10.6692 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.276 + + + 0.0 + + + 2.0 + + + + + + + 6.276 + + + 0.0 + + + 1.0 + + + + + + + 5.8576 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.8576 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.8576 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.832400000000002 + + + 0.0 + + + 2.0 + + + + + + + 4.916200000000001 + + + 0.0 + + + 3.0 + + + + + + + 4.916200000000001 + + + 0.0 + + + 3.0 + + + + + + + 3.3472000000000004 + + + 0.0 + + + 2.0 + + + + + + + 3.3472000000000004 + + + 0.0 + + + 2.0 + + + + + + + 6.694400000000001 + + + 0.0 + + + 2.0 + + + + + + + 8.7864 + + + 0.0 + + + 2.0 + + + + + + + 3.138 + 0.41840000000000005 + + + 0.0 + 3.141592653589793 + + + 2.0 + 3.0 + + + + + + + 3.138 + 0.41840000000000005 + + + 0.0 + 3.141592653589793 + + + 2.0 + 3.0 + + + + + + + 0.41840000000000005 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.41840000000000005 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.6736000000000002 + 7.5312 + + + 3.141592653589793 + 3.141592653589793 + + + 4.0 + 2.0 + + + + + + + 16.3176 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.2552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.2552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.2552 + + + 3.141592653589793 + + + 2.0 + + + + + + + 7.9496 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.4057999999999997 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.4057999999999997 + + + 3.141592653589793 + + + 2.0 + + + + + + + 10.0416 + 1.6736000000000002 + + + 0.0 + 0.0 + + + 2.0 + 3.0 + + + + + + + 10.0416 + 1.6736000000000002 + + + 0.0 + 0.0 + + + 2.0 + 3.0 + + + + + + + 9.623199999999999 + + + 3.141592653589793 + + + 2.0 + + + + + + + 11.296800000000001 + + + 3.141592653589793 + + + 2.0 + + + + + + + 10.878400000000001 + + + 3.141592653589793 + + + 2.0 + + + + + + + 10.878400000000001 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.3946666666666667 + + + 0.0 + + + 2.0 + + + + + + + 1.3946666666666667 + + + 0.0 + + + 2.0 + + + + + + + 6.694400000000001 + + + 0.0 + + + 2.0 + + + + + + + 6.694400000000001 + + + 0.0 + + + 2.0 + + + + + + + 6.276 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.276 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.276 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.6736000000000002 + + + 3.141592653589793 + + + 3.0 + + + + + + + 2.9288 + + + 0.0 + + + 1.0 + + + + + + + 2.9288 + + + 0.0 + + + 1.0 + + + + + + + 2.231466666666667 + + + 0.0 + + + 3.0 + + + + + + + 2.231466666666667 + + + 0.0 + + + 3.0 + + + + + + + 10.0416 + + + 0.0 + + + 2.0 + + + + + + + 10.0416 + + + 0.0 + + + 2.0 + + + + + + + 20.92 + + + 0.0 + + + 1.0 + + + + + + + 20.92 + + + 0.0 + + + 1.0 + + + + + + + 39.748 + + + 3.141592653589793 + + + 1.0 + + + + + + + 39.748 + + + 3.141592653589793 + + + 1.0 + + + + + + + 4.184 + + + 0.0 + + + 1.0 + + + + + + + 9.2048 + + + 0.0 + + + 2.0 + + + + + + + 7.5312 + + + 0.0 + + + 2.0 + + + + + + + 6.9036 + + + 0.0 + + + 3.0 + + + + + + + 6.9036 + + + 0.0 + + + 3.0 + + + + + + + 5.0208 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.0208 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.552 + 8.368 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 12.552 + 8.368 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 12.552 + 8.368 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 9.2048 + + + 0.0 + + + 2.0 + + + + + + + 4.3932 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.3932 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.3472000000000004 + + + 0.0 + + + 2.0 + + + + + + + 3.3472000000000004 + + + 0.0 + + + 2.0 + + + + + + + 27.6144 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.6144 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.6144 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.6144 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.6144 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.0208 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.0208 + + + 3.141592653589793 + + + 2.0 + + + + + + + 30.1248 + + + 3.141592653589793 + + + 2.0 + + + + + + + 30.1248 + + + 3.141592653589793 + + + 2.0 + + + + + + + 30.1248 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.0208 + + + 0.0 + + + 1.0 + + + + + + + 5.0208 + + + 0.0 + + + 1.0 + + + + + + + 5.0208 + + + 0.0 + + + 1.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 10.250800000000002 + + + 0.0 + + + 2.0 + + + + + + + 10.250800000000002 + + + 0.0 + + + 2.0 + + + + + + + 27.893333333333334 + + + 3.141592653589793 + + + 2.0 + + + + + + + 7.9496 + + + 0.0 + + + 1.0 + + + + + + + 7.9496 + + + 0.0 + + + 1.0 + + + + + + + 5.8576 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.8576 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.8576 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.8576 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.8576 + + + 3.141592653589793 + + + 2.0 + + + + + + + 5.8576 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.276 + + + 0.0 + + + 2.0 + + + + + + + 6.276 + + + 0.0 + + + 2.0 + + + + + + + 27.893333333333334 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.6736000000000002 + + + 3.141592653589793 + + + 3.0 + + + + + + + 1.6736000000000002 + + + 3.141592653589793 + + + 3.0 + + + + + + + 2.092 + + + 0.0 + + + 3.0 + + + + + + + 3.7656 + + + 0.0 + + + 1.0 + + + + + + + 3.7656 + + + 0.0 + + + 1.0 + + + + + + + 7.6706666666666665 + + + 3.141592653589793 + + + 2.0 + + + + + + + 7.6706666666666665 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.246399999999998 + + + 0.0 + + + 2.0 + + + + + + + 4.811599999999999 + + + 0.0 + + + 3.0 + + + + + + + 16.1084 + + + 0.0 + + + 2.0 + + + + + + + 16.1084 + + + 0.0 + + + 2.0 + + + + + + + 1.1157333333333335 + + + 0.0 + + + 3.0 + + + + + + + 1.1157333333333335 + + + 0.0 + + + 3.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 6.0668 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.8236 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.3249333333333333 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.5564 + + + 0.0 + + + 1.0 + + + + + + + 27.8236 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.4881333333333333 + + + 0.0 + + + 3.0 + + + + + + + 1.046 + + + 3.141592653589793 + + + 1.0 + + + + + + + 1.046 + + + 3.141592653589793 + + + 1.0 + + + + + + + 2.5104 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.5104 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.893333333333334 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.5104 + + + 0.0 + + + 2.0 + + + + + + + 1.2552 + + + 0.0 + + + 3.0 + + + + + + + 1.2552 + + + 0.0 + + + 3.0 + + + + + + + 15.8992 + + + 3.141592653589793 + + + 2.0 + + + + + + + 15.8992 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.893333333333334 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.1157333333333335 + + + 0.0 + + + 3.0 + + + + + + + 27.893333333333334 + + + 3.141592653589793 + + + 2.0 + + + + + + + 1.1622222222222223 + + + 0.0 + + + 3.0 + + + + + + + 23.4304 + + + 0.0 + + + 3.0 + + + + + + + 22.1752 + + + 0.0 + + + 3.0 + + + + + + + 2.9288 + + + 0.0 + + + 3.0 + + + + + + + 2.9288 + + + 0.0 + + + 3.0 + + + + + + + 19.525333333333332 + + + 3.141592653589793 + + + 2.0 + + + + + + + 19.525333333333332 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.0 + + + 0.0 + + + 3.0 + + + + + + + 1.2552 + + + 0.0 + + + 3.0 + + + + + + + 1.2552 + + + 0.0 + + + 3.0 + + + + + + + 12.830933333333332 + + + 3.141592653589793 + + + 2.0 + + + + + + + 12.830933333333332 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 2.615 + + + 0.0 + + + 3.0 + + + + + + + 27.893333333333334 + + + 3.141592653589793 + + + 2.0 + + + + + + + 18.130666666666666 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.893333333333334 + + + 3.141592653589793 + + + 2.0 + + + + + + + 0.6508444444444444 + + + 3.141592653589793 + + + 2.0 + + + + + + + 27.823600000000003 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 20.0832 + + + 3.141592653589793 + + + 2.0 + + + + + + + 22.593600000000002 + + + 3.141592653589793 + + + 2.0 + + + + + + + 9.414 + 5.4392000000000005 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 4.6024 + 2.9288 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 3.0 + + + + + + + 2.7196000000000002 + 5.0208 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 4.184 + 7.9496 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 7.1128 + 8.368 + + + 3.141592653589793 + 3.141592653589793 + + + 1.0 + 2.0 + + + + + + + 3.5564 + 3.3472000000000004 + + + 3.141592653589793 + 0.0 + + + 2.0 + 1.0 + + + + + + + 2.092 + 0.6276 + 0.0 + 2.2175200000000004 + + + 3.141592653589793 + 3.141592653589793 + 0.0 + 0.0 + + + 4.0 + 3.0 + 2.0 + 1.0 + + + + + + + 0.41840000000000005 + 0.29288000000000003 + + + 0.0 + 0.0 + + + 4.0 + 2.0 + + + + + + + 0.0 + 9.623199999999999 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 9.623199999999999 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 9.623199999999999 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 9.623199999999999 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 9.623199999999999 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 9.623199999999999 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 10.46 + 8.368 + + + 3.141592653589793 + 0.0 + + + 2.0 + 1.0 + + + + + + + 14.644 + 2.5104 + + + 0.0 + 0.0 + + + 2.0 + 3.0 + + + + + + + 7.9496 + 7.9496 + + + 0.0 + 0.0 + + + 2.0 + 3.0 + + + + + + + 12.552 + 9.623199999999999 + + + 3.141592653589793 + 0.0 + + + 2.0 + 3.0 + + + + + + + 5.0208 + 6.276 + + + 0.0 + 0.0 + + + 1.0 + 2.0 + + + + + + + 1.046 + 5.0208 + + + 0.0 + 0.0 + + + 3.0 + 2.0 + + + + + + + 1.046 + 5.0208 + + + 0.0 + 0.0 + + + 3.0 + 2.0 + + + + + + + 3.3472000000000004 + 0.0 + 0.33472 + + + 0.0 + 0.0 + 3.141592653589793 + + + 1.0 + 2.0 + 3.0 + + + + + + + 3.3472000000000004 + 0.0 + 0.33472 + + + 0.0 + 0.0 + 3.141592653589793 + + + 1.0 + 2.0 + 3.0 + + + + + + + 0.6276 + + + 0.0 + + + 3.0 + + + + + + + 0.66944 + + + 0.0 + + + 3.0 + + + + + + + 1.58992 + 0.0 + 4.811599999999999 + + + 3.141592653589793 + 0.0 + 0.0 + + + 3.0 + 2.0 + 1.0 + + + + + + + 0.66944 + 1.046 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 9.623199999999999 + 7.9496 + + + 3.141592653589793 + 0.0 + + + 2.0 + 1.0 + + + + + + + 9.1002 + 1.2552 + + + 3.141592653589793 + 0.0 + + + 2.0 + 3.0 + + + + + + + 27.823600000000003 + 7.9496 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 0.75312 + 1.046 + 0.8368000000000001 + + + 0.0 + 3.141592653589793 + 3.141592653589793 + + + 3.0 + 2.0 + 1.0 + + + + + + + 1.2552 + 2.00832 + + + 0.0 + 3.141592653589793 + + + 3.0 + 2.0 + + + + + + + 1.6024720000000001 + 0.41840000000000005 + + + 0.0 + 3.141592653589793 + + + 3.0 + 2.0 + + + + + + + 1.6024720000000001 + 3.3472000000000004 + + + 0.0 + 3.141592653589793 + + + 3.0 + 1.0 + + + + + + + 0.41840000000000005 + 3.5564 + 5.6484000000000005 + + + 0.0 + 3.141592653589793 + 3.141592653589793 + + + 3.0 + 2.0 + 1.0 + + + + + + + 1.6024720000000001 + 2.7196000000000002 + + + 0.0 + 0.0 + + + 3.0 + 2.0 + + + + + + + 11.296800000000001 + 5.8576 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 0.0 + 10.46 + + + 0.0 + 0.0 + + + 2.0 + 1.0 + + + + + + + 0.602496 + 4.916200000000001 + + + 0.0 + 0.0 + + + 3.0 + 2.0 + + + + + + + 0.602496 + 4.916200000000001 + + + 0.0 + 0.0 + + + 3.0 + 2.0 + + + + + + + 0.602496 + 4.916200000000001 + + + 0.0 + 0.0 + + + 3.0 + 2.0 + + + + + + + 0.0 + 5.0208 + + + 0.0 + 3.141592653589793 + + + 3.0 + 1.0 + + + + + + + 0.0 + 1.8828 + + + 0.0 + 3.141592653589793 + + + 3.0 + 1.0 + + + + + + + 0.0 + 0.0 + + + 0.0 + 3.141592653589793 + + + 3.0 + 1.0 + + + + + + + 0.0 + 1.046 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 1.046 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 0.79496 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 1.046 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 2.3012 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 1.046 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 1.046 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 0.79496 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 1.046 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 2.3012 + + + 0.0 + 0.0 + + + 3.0 + 1.0 + + + + + + + 0.0 + 6.276 + + + 0.0 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 7.391733333333334 + 11.296800000000001 + + + 0.0 + 0.0 + + + 3.0 + 2.0 + + + + + + + 0.6508444444444444 + 2.9288 + + + 0.0 + 0.0 + + + 3.0 + 2.0 + + + + + + + 0.602496 + 5.4392000000000005 + + + 0.0 + 0.0 + + + 3.0 + 2.0 + + + + + + + 0.6508444444444444 + + + 0.0 + + + 3.0 + + + + + + + 11.296800000000001 + 0.0 + 4.811599999999999 + + + 3.141592653589793 + 0.0 + 0.0 + + + 2.0 + 1.0 + 3.0 + + + + + + + 11.296800000000001 + 8.368 + + + 3.141592653589793 + 3.141592653589793 + + + 2.0 + 1.0 + + + + + + + 3.3472000000000004 + 4.6024 + 2.092 + + + 0.0 + 0.0 + 3.141592653589793 + + + 2.0 + 1.0 + 3.0 + + + + + + + 1.6038666666666666 + 16.5268 + + + 0.0 + 3.141592653589793 + + + 3.0 + 1.0 + + + + + + + 3.3472000000000004 + 2.3012 + + + 0.0 + 0.0 + + + 2.0 + 3.0 + + + + + + + 7.322 + + + 3.141592653589793 + + + 2.0 + + + + + + + 3.3472000000000004 + 0.41840000000000005 + + + 3.141592653589793 + 0.0 + + + 2.0 + 3.0 + + + + + + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 43.932 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 43.932 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + + + 4.6024 + + + 3.141592653589793 + + + 2.0 + + + + + diff --git a/gmso/utils/schema/ff-gmso.xsd b/gmso/utils/schema/ff-gmso.xsd index 730183153..e5d1eb656 100644 --- a/gmso/utils/schema/ff-gmso.xsd +++ b/gmso/utils/schema/ff-gmso.xsd @@ -68,7 +68,9 @@ - + + + @@ -91,21 +93,18 @@ - - - - - - - - + + + - + + + @@ -250,22 +249,6 @@ - - - - - - - - - - - - - - - -