From 33539c8de6e3a0c15b14faff4dff1730ffc66f0d Mon Sep 17 00:00:00 2001
From: Alise Au <20424172+ahiuchingau@users.noreply.github.com>
Date: Wed, 12 Jun 2024 13:41:37 -0400
Subject: [PATCH] feat(api): add protocol api and engine support for absorbance
plate reader (#15266)
# Overview
This PR adds protocol api and engine support for absorbance plate
reader.
Requires OE-core changes in
https://github.com/Opentrons/oe-core/pull/151
---
api-client/src/modules/api-types.ts | 8 +
api-client/src/modules/types.ts | 9 +
.../drivers/absorbance_reader/abstract.py | 7 +-
.../drivers/absorbance_reader/async_byonoy.py | 30 +-
.../drivers/absorbance_reader/driver.py | 13 +-
.../drivers/absorbance_reader/hid_protocol.py | 23 +-
.../drivers/absorbance_reader/simulator.py | 9 +-
api/src/opentrons/drivers/types.py | 11 +-
.../hardware_control/modules/__init__.py | 2 +
.../modules/absorbance_reader.py | 66 +-
.../hardware_control/modules/types.py | 9 +
api/src/opentrons/protocol_api/__init__.py | 2 +
api/src/opentrons/protocol_api/core/common.py | 2 +
.../protocol_api/core/engine/module_core.py | 22 +
.../protocol_api/core/engine/protocol.py | 2 +
api/src/opentrons/protocol_api/core/module.py | 18 +
.../opentrons/protocol_api/module_contexts.py | 29 +
.../protocol_api/protocol_context.py | 5 +
api/src/opentrons/protocol_api/validation.py | 2 +
.../protocol_engine/clients/sync_client.py | 28 +
.../commands/absorbance_reader/__init__.py | 32 +
.../commands/absorbance_reader/initialize.py | 81 +
.../commands/absorbance_reader/measure.py | 94 +
.../commands/command_unions.py | 11 +
.../protocol_engine/execution/equipment.py | 9 +
.../state/module_substates/__init__.py | 5 +-
.../absorbance_reader_substate.py | 13 +-
.../protocol_engine/state/modules.py | 78 +
api/src/opentrons/protocol_engine/types.py | 12 +
.../engine/test_absorbance_reader_core.py | 96 +
.../test_absorbance_reader_context.py | 66 +
.../commands/test_load_module.py | 56 +
.../opentrons/protocol_engine/conftest.py | 7 +
.../AddFixtureModal.tsx | 21 +
.../ModuleCard/AbsorbanceReaderData.tsx | 28 +
.../ModuleCard/AbsorbanceReaderSlideout.tsx | 44 +
app/src/organisms/ModuleCard/hooks.tsx | 1 +
app/src/organisms/ModuleCard/index.tsx | 17 +
app/src/redux/modules/api-types.ts | 15 +
app/src/redux/modules/types.ts | 10 +
.../AbsorbanceReaderFixture.tsx | 93 +
.../hardware-sim/DeckConfigurator/index.tsx | 17 +
components/src/icons/ModuleIcon.tsx | 2 +
components/src/icons/icon-data.ts | 6 +
.../LabwareSelectionModal.tsx | 2 +
.../CreateFileWizard/ModulesAndOtherTile.tsx | 12 +-
.../components/modules/EditModulesCard.tsx | 5 +
.../src/components/modules/ModuleDiagram.tsx | 6 +
protocol-designer/src/constants.ts | 9 +
.../src/feature-flags/reducers.ts | 2 +
.../src/feature-flags/selectors.ts | 4 +
protocol-designer/src/feature-flags/types.ts | 7 +-
.../src/localization/en/feature_flags.json | 4 +
.../src/localization/en/modules.json | 9 +-
protocol-designer/src/modules/moduleData.ts | 9 +
.../src/step-forms/selectors/index.ts | 18 +-
protocol-designer/src/step-forms/types.ts | 5 +
protocol-designer/src/ui/modules/utils.ts | 2 +
.../src/utils/labwareModuleCompatibility.ts | 2 +
.../modules/module_data_mapper.py | 18 +
.../robot_server/modules/module_models.py | 40 +
.../deck_configuration/test_validation.py | 1 +
shared-data/command/schemas/8.json | 107 +-
.../deck/definitions/5/ot3_standard.json | 58 +
shared-data/deck/types/schemaV5.ts | 5 +
shared-data/js/constants.ts | 33 +
shared-data/js/fixtures.ts | 8 +
shared-data/js/helpers/getModuleVizDims.ts | 83 +-
shared-data/js/modules.ts | 5 +
shared-data/js/types.ts | 6 +
.../definitions/3/absorbanceReaderV1.json | 3685 +----------------
step-generation/src/types.ts | 5 +
72 files changed, 1555 insertions(+), 3706 deletions(-)
create mode 100644 api/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py
create mode 100644 api/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py
create mode 100644 api/src/opentrons/protocol_engine/commands/absorbance_reader/measure.py
create mode 100644 api/tests/opentrons/protocol_api/core/engine/test_absorbance_reader_core.py
create mode 100644 api/tests/opentrons/protocol_api/test_absorbance_reader_context.py
create mode 100644 app/src/organisms/ModuleCard/AbsorbanceReaderData.tsx
create mode 100644 app/src/organisms/ModuleCard/AbsorbanceReaderSlideout.tsx
create mode 100644 components/src/hardware-sim/DeckConfigurator/AbsorbanceReaderFixture.tsx
diff --git a/api-client/src/modules/api-types.ts b/api-client/src/modules/api-types.ts
index 60203dba15e7..c8560ae39800 100644
--- a/api-client/src/modules/api-types.ts
+++ b/api-client/src/modules/api-types.ts
@@ -80,6 +80,12 @@ export interface HeaterShakerData {
errorDetails: string | null
status: HeaterShakerStatus
}
+export interface AbsorbanceReaderData {
+ lidStatus: 'open' | 'closed' | 'unknown'
+ platePresence: 'present' | 'absent' | 'unknown'
+ sampleWavelength: number | null
+ status: AbsorbanceReaderStatus
+}
export type TemperatureStatus =
| 'idle'
@@ -112,3 +118,5 @@ export type LatchStatus =
| 'idle_closed'
| 'idle_unknown'
| 'unknown'
+
+export type AbsorbanceReaderStatus = 'idle' | 'measuring' | 'error'
diff --git a/api-client/src/modules/types.ts b/api-client/src/modules/types.ts
index f138680dafdd..07b6ec27bda4 100644
--- a/api-client/src/modules/types.ts
+++ b/api-client/src/modules/types.ts
@@ -3,10 +3,12 @@ import type {
ThermocyclerModuleModel,
MagneticModuleModel,
HeaterShakerModuleModel,
+ AbsorbanceReaderModel,
TEMPERATURE_MODULE_TYPE,
MAGNETIC_MODULE_TYPE,
THERMOCYCLER_MODULE_TYPE,
HEATERSHAKER_MODULE_TYPE,
+ ABSORBANCE_READER_TYPE,
} from '@opentrons/shared-data'
import type * as ApiTypes from './api-types'
@@ -44,11 +46,18 @@ export interface HeaterShakerModule extends CommonModuleInfo {
data: ApiTypes.HeaterShakerData
}
+export interface AbsorbanceReaderModule extends CommonModuleInfo {
+ moduleType: typeof ABSORBANCE_READER_TYPE
+ moduleModel: AbsorbanceReaderModel
+ data: ApiTypes.AbsorbanceReaderData
+}
+
export type AttachedModule =
| TemperatureModule
| MagneticModule
| ThermocyclerModule
| HeaterShakerModule
+ | AbsorbanceReaderModule
export interface ModulesMeta {
cursor: number
diff --git a/api/src/opentrons/drivers/absorbance_reader/abstract.py b/api/src/opentrons/drivers/absorbance_reader/abstract.py
index 769de38253e0..e344af956181 100644
--- a/api/src/opentrons/drivers/absorbance_reader/abstract.py
+++ b/api/src/opentrons/drivers/absorbance_reader/abstract.py
@@ -1,6 +1,9 @@
from abc import ABC, abstractmethod
from typing import Dict, List
-from opentrons.drivers.types import AbsorbanceReaderLidStatus
+from opentrons.drivers.types import (
+ AbsorbanceReaderLidStatus,
+ AbsorbanceReaderDeviceState,
+)
class AbstractAbsorbanceReaderDriver(ABC):
@@ -36,7 +39,7 @@ async def initialize_measurement(self, wavelength: int) -> None:
...
@abstractmethod
- async def get_status(self) -> None:
+ async def get_status(self) -> AbsorbanceReaderDeviceState:
...
@abstractmethod
diff --git a/api/src/opentrons/drivers/absorbance_reader/async_byonoy.py b/api/src/opentrons/drivers/absorbance_reader/async_byonoy.py
index 1d5465db3422..d67883cd062a 100644
--- a/api/src/opentrons/drivers/absorbance_reader/async_byonoy.py
+++ b/api/src/opentrons/drivers/absorbance_reader/async_byonoy.py
@@ -5,13 +5,17 @@
from concurrent.futures.thread import ThreadPoolExecutor
from functools import partial
from typing import Optional, List, Dict
-import usb.core as usb_core # type: ignore[import-untyped]
-from .hid_protocol import AbsorbanceHidInterface as AbsProtocol, ErrorCodeNames
+from .hid_protocol import (
+ AbsorbanceHidInterface as AbsProtocol,
+ ErrorCodeNames,
+ DeviceStateNames,
+)
from opentrons.drivers.types import (
AbsorbanceReaderLidStatus,
AbsorbanceReaderPlatePresence,
+ AbsorbanceReaderDeviceState,
)
from opentrons.drivers.rpi_drivers.types import USBPort
@@ -36,6 +40,8 @@ def serial_number_from_port(name: str) -> str:
"""
Get the serial number from a port using pyusb.
"""
+ import usb.core as usb_core # type: ignore[import-untyped]
+
port_numbers = tuple(int(s) for s in name.split("-")[1].split("."))
device = usb_core.find(port_numbers=port_numbers)
if device:
@@ -232,6 +238,7 @@ async def get_device_static_info(self) -> Dict[str, str]:
return {
"serial": self._device.sn,
"model": "ABS96",
+ "version": "1.0",
}
async def get_device_information(self) -> Dict[str, str]:
@@ -270,3 +277,22 @@ async def get_single_measurement(self, wavelength: int) -> List[float]:
async def get_plate_presence(self) -> AbsorbanceReaderPlatePresence:
return AbsorbanceReaderPlatePresence.UNKNOWN
+
+ async def get_device_status(self) -> AbsorbanceReaderDeviceState:
+ status = await self._loop.run_in_executor(
+ executor=self._executor,
+ func=self._get_device_status,
+ )
+ return self.convert_device_state(status.name)
+
+ @staticmethod
+ def convert_device_state(
+ device_state: DeviceStateNames,
+ ) -> AbsorbanceReaderDeviceState:
+ state_map: Dict[DeviceStateNames, AbsorbanceReaderDeviceState] = {
+ "BYONOY_DEVICE_STATE_UNKNOWN": AbsorbanceReaderDeviceState.UNKNOWN,
+ "BYONOY_DEVICE_STATE_OK": AbsorbanceReaderDeviceState.OK,
+ "BYONOY_DEVICE_STATE_BROKEN_FW": AbsorbanceReaderDeviceState.BROKEN_FW,
+ "BYONOY_DEVICE_STATE_ERROR": AbsorbanceReaderDeviceState.ERROR,
+ }
+ return state_map[device_state]
diff --git a/api/src/opentrons/drivers/absorbance_reader/driver.py b/api/src/opentrons/drivers/absorbance_reader/driver.py
index 8777f8cbbf74..b3fbb5031e10 100644
--- a/api/src/opentrons/drivers/absorbance_reader/driver.py
+++ b/api/src/opentrons/drivers/absorbance_reader/driver.py
@@ -3,7 +3,11 @@
import asyncio
from typing import Dict, Optional, List, TYPE_CHECKING
-from opentrons.drivers.types import AbsorbanceReaderLidStatus
+from opentrons.drivers.types import (
+ AbsorbanceReaderLidStatus,
+ AbsorbanceReaderDeviceState,
+ AbsorbanceReaderPlatePresence,
+)
from opentrons.drivers.absorbance_reader.abstract import AbstractAbsorbanceReaderDriver
from opentrons.drivers.rpi_drivers.types import USBPort
@@ -61,5 +65,8 @@ async def get_single_measurement(self, wavelength: int) -> List[float]:
async def initialize_measurement(self, wavelength: int) -> None:
await self._connection.initialize(wavelength)
- async def get_status(self) -> None:
- pass
+ async def get_status(self) -> AbsorbanceReaderDeviceState:
+ return await self._connection.get_device_status()
+
+ async def get_plate_presence(self) -> AbsorbanceReaderPlatePresence:
+ return await self._connection.get_plate_presence()
diff --git a/api/src/opentrons/drivers/absorbance_reader/hid_protocol.py b/api/src/opentrons/drivers/absorbance_reader/hid_protocol.py
index 6ddd82aa030d..2efee337846c 100644
--- a/api/src/opentrons/drivers/absorbance_reader/hid_protocol.py
+++ b/api/src/opentrons/drivers/absorbance_reader/hid_protocol.py
@@ -4,7 +4,6 @@
List,
Literal,
Tuple,
- ClassVar,
runtime_checkable,
TypeVar,
)
@@ -36,6 +35,20 @@
"BYONOY_ERROR_INTERNAL",
]
+SlotStateNames = Literal[
+ "BYONOY_SLOT_UNKNOWN",
+ "BYONOY_SLOT_EMPTY",
+ "BYONOY_SLOT_OCCUPIED",
+ "BYONOY_SLOT_UNDETERMINED",
+]
+
+DeviceStateNames = Literal[
+ "BYONOY_DEVICE_STATE_UNKNOWN",
+ "BYONOY_DEVICE_STATE_OK",
+ "BYONOY_DEVICE_STATE_BROKEN_FW",
+ "BYONOY_DEVICE_STATE_ERROR",
+]
+
@runtime_checkable
class AbsorbanceHidInterface(Protocol):
@@ -51,7 +64,9 @@ class ErrorCode(Protocol):
@runtime_checkable
class SlotState(Protocol):
- __members__: ClassVar[Dict[str, int]]
+ __members__: Dict[SlotStateNames, int]
+ name: SlotStateNames
+ value: int
@runtime_checkable
class MeasurementConfig(Protocol):
@@ -65,7 +80,9 @@ class DeviceInfo(Protocol):
@runtime_checkable
class DeviceState(Protocol):
- __members__: ClassVar[Dict[str, int]]
+ __members__: Dict[DeviceStateNames, int]
+ name: DeviceStateNames
+ value: int
def ByonoyAbs96SingleMeasurementConfig(self) -> MeasurementConfig:
...
diff --git a/api/src/opentrons/drivers/absorbance_reader/simulator.py b/api/src/opentrons/drivers/absorbance_reader/simulator.py
index b189030b6537..94758bd6e3ea 100644
--- a/api/src/opentrons/drivers/absorbance_reader/simulator.py
+++ b/api/src/opentrons/drivers/absorbance_reader/simulator.py
@@ -1,7 +1,10 @@
from typing import Dict, List, Optional
from opentrons.util.async_helpers import ensure_yield
-from opentrons.drivers.types import AbsorbanceReaderLidStatus
+from opentrons.drivers.types import (
+ AbsorbanceReaderLidStatus,
+ AbsorbanceReaderDeviceState,
+)
from .abstract import AbstractAbsorbanceReaderDriver
@@ -51,5 +54,5 @@ async def initialize_measurement(self, wavelength: int) -> None:
pass
@ensure_yield
- async def get_status(self) -> None:
- pass
+ async def get_status(self) -> AbsorbanceReaderDeviceState:
+ return AbsorbanceReaderDeviceState.OK
diff --git a/api/src/opentrons/drivers/types.py b/api/src/opentrons/drivers/types.py
index 09691ff051ff..a4047ca64daa 100644
--- a/api/src/opentrons/drivers/types.py
+++ b/api/src/opentrons/drivers/types.py
@@ -73,4 +73,13 @@ class AbsorbanceReaderPlatePresence(str, Enum):
UNKNOWN = "unknown"
PRESENT = "present"
- ABSENCE = "absence"
+ ABSENT = "absent"
+
+
+class AbsorbanceReaderDeviceState(str, Enum):
+ """Absorbance reader device state."""
+
+ UNKNOWN = "unknown"
+ OK = "ok"
+ BROKEN_FW = "broken_fw"
+ ERROR = "error"
diff --git a/api/src/opentrons/hardware_control/modules/__init__.py b/api/src/opentrons/hardware_control/modules/__init__.py
index 3e4c14f0baf5..9bac782ef364 100644
--- a/api/src/opentrons/hardware_control/modules/__init__.py
+++ b/api/src/opentrons/hardware_control/modules/__init__.py
@@ -19,6 +19,7 @@
TemperatureStatus,
MagneticStatus,
HeaterShakerStatus,
+ AbsorbanceReaderStatus,
SpeedStatus,
LiveData,
)
@@ -47,4 +48,5 @@
"SpeedStatus",
"LiveData",
"AbsorbanceReader",
+ "AbsorbanceReaderStatus",
]
diff --git a/api/src/opentrons/hardware_control/modules/absorbance_reader.py b/api/src/opentrons/hardware_control/modules/absorbance_reader.py
index 8f3c65e3acea..e49c0e5c3111 100644
--- a/api/src/opentrons/hardware_control/modules/absorbance_reader.py
+++ b/api/src/opentrons/hardware_control/modules/absorbance_reader.py
@@ -7,7 +7,14 @@
AbsorbanceReaderDriver,
SimulatingDriver,
)
+from opentrons.drivers.types import (
+ AbsorbanceReaderLidStatus,
+ AbsorbanceReaderPlatePresence,
+ AbsorbanceReaderDeviceState,
+)
+
from opentrons.hardware_control.execution_manager import ExecutionManager
+from opentrons.hardware_control.poller import Reader
from opentrons.hardware_control.modules import mod_abc
from opentrons.hardware_control.modules.types import (
ModuleType,
@@ -56,6 +63,7 @@ async def build(
driver=driver,
hw_control_loop=hw_control_loop,
)
+ await module.setup()
return module
def __init__(
@@ -83,6 +91,14 @@ def status(self) -> AbsorbanceReaderStatus:
"""Return some string describing status."""
return AbsorbanceReaderStatus.IDLE
+ @property
+ def lid_status(self) -> AbsorbanceReaderLidStatus:
+ return AbsorbanceReaderLidStatus.UNKNOWN
+
+ @property
+ def plate_presence(self) -> AbsorbanceReaderPlatePresence:
+ return AbsorbanceReaderPlatePresence.UNKNOWN
+
@property
def device_info(self) -> Mapping[str, str]:
"""Return a dict of the module's static information (serial, etc)"""
@@ -92,8 +108,10 @@ def device_info(self) -> Mapping[str, str]:
def live_data(self) -> LiveData:
"""Return a dict of the module's dynamic information"""
return {
- "status": "idle",
+ "status": self.status.value,
"data": {
+ "lidStatus": self.lid_status.value,
+ "platePresence": self.plate_presence.value,
"sampleWavelength": 400,
},
}
@@ -159,14 +177,50 @@ async def set_sample_wavelength(self, wavelength: int) -> None:
"""Set the Absorbance Reader's active wavelength."""
await self._driver.initialize_measurement(wavelength)
- async def start_measure(self, wavelength: int) -> None:
+ async def start_measure(self, wavelength: int) -> List[float]:
"""Initiate a single measurement."""
- await self._driver.get_single_measurement(wavelength)
+ return await self._driver.get_single_measurement(wavelength)
- async def get_supported_wavelengths(self) -> List[int]:
- """Get the Absorbance Reader's supported wavelengths."""
- return await self._driver.get_available_wavelengths()
+ async def setup(self) -> None:
+ """Setup the Absorbance Reader."""
+ is_open = await self._driver.is_connected()
+ if not is_open:
+ await self._driver.connect()
async def get_current_wavelength(self) -> None:
"""Get the Absorbance Reader's current active wavelength."""
pass
+
+
+class AbsorbanceReaderReader(Reader):
+ device_state: AbsorbanceReaderDeviceState
+ lid_status: AbsorbanceReaderLidStatus
+ plate_presence: AbsorbanceReaderPlatePresence
+ supported_wavelengths: List[int]
+
+ def __init__(self, driver: AbsorbanceReaderDriver) -> None:
+ self.device_state = AbsorbanceReaderDeviceState.UNKNOWN
+ self.lid_status = AbsorbanceReaderLidStatus.UNKNOWN
+ self.plate_presence = AbsorbanceReaderPlatePresence.UNKNOWN
+ self.supported_wavelengths = []
+ self._driver = driver
+
+ async def read(self) -> None:
+ await self.get_device_status()
+ await self.get_supported_wavelengths()
+
+ async def get_device_status(self) -> None:
+ """Get the Absorbance Reader's current status."""
+ self.device_state = await self._driver.get_status()
+
+ async def get_supported_wavelengths(self) -> None:
+ """Get the Absorbance Reader's supported wavelengths."""
+ self.supported_wavelengths = await self._driver.get_available_wavelengths()
+
+ async def get_lid_status(self) -> None:
+ """Get the Absorbance Reader's lid status."""
+ self.lid_status = await self._driver.get_lid_status()
+
+ async def get_plate_presence(self) -> None:
+ """Get the Absorbance Reader's plate presence."""
+ self.plate_presence = await self._driver.get_plate_presence()
diff --git a/api/src/opentrons/hardware_control/modules/types.py b/api/src/opentrons/hardware_control/modules/types.py
index e538e603f8d0..1382961dc21a 100644
--- a/api/src/opentrons/hardware_control/modules/types.py
+++ b/api/src/opentrons/hardware_control/modules/types.py
@@ -80,6 +80,8 @@ def to_module_fixture_id(cls, module_type: ModuleType) -> str:
return "heaterShakerModuleV1"
if module_type == ModuleType.MAGNETIC_BLOCK:
return "magneticBlockV1"
+ if module_type == ModuleType.ABSORBANCE_READER:
+ return "absorbanceReaderV1"
else:
raise ValueError(
f"Module Type {module_type} does not have a related fixture ID."
@@ -210,3 +212,10 @@ class AbsorbanceReaderStatus(str, Enum):
IDLE = "idle"
MEASURING = "measuring"
ERROR = "error"
+
+
+class LidStatus(str, Enum):
+ ON = "on"
+ OFF = "off"
+ UNKNOWN = "unknown"
+ ERROR = "error"
diff --git a/api/src/opentrons/protocol_api/__init__.py b/api/src/opentrons/protocol_api/__init__.py
index 1e817c7a882b..b9f1090164b2 100644
--- a/api/src/opentrons/protocol_api/__init__.py
+++ b/api/src/opentrons/protocol_api/__init__.py
@@ -21,6 +21,7 @@
TemperatureModuleContext,
HeaterShakerContext,
MagneticBlockContext,
+ AbsorbanceReaderContext,
)
from .disposal_locations import TrashBin, WasteChute
from ._liquid import Liquid
@@ -50,6 +51,7 @@
"ThermocyclerContext",
"HeaterShakerContext",
"MagneticBlockContext",
+ "AbsorbanceReaderContext",
"ParameterContext",
"Labware",
"TrashBin",
diff --git a/api/src/opentrons/protocol_api/core/common.py b/api/src/opentrons/protocol_api/core/common.py
index 1df2542ff0ca..5a63abb46b3f 100644
--- a/api/src/opentrons/protocol_api/core/common.py
+++ b/api/src/opentrons/protocol_api/core/common.py
@@ -10,6 +10,7 @@
AbstractThermocyclerCore,
AbstractHeaterShakerCore,
AbstractMagneticBlockCore,
+ AbstractAbsorbanceReaderCore,
)
from .protocol import AbstractProtocol
from .well import AbstractWellCore
@@ -24,4 +25,5 @@
ThermocyclerCore = AbstractThermocyclerCore
HeaterShakerCore = AbstractHeaterShakerCore
MagneticBlockCore = AbstractMagneticBlockCore
+AbsorbanceReaderCore = AbstractAbsorbanceReaderCore
ProtocolCore = AbstractProtocol[InstrumentCore, LabwareCore, ModuleCore]
diff --git a/api/src/opentrons/protocol_api/core/engine/module_core.py b/api/src/opentrons/protocol_api/core/engine/module_core.py
index d0c395358050..835601ca0fd5 100644
--- a/api/src/opentrons/protocol_api/core/engine/module_core.py
+++ b/api/src/opentrons/protocol_api/core/engine/module_core.py
@@ -33,6 +33,7 @@
AbstractThermocyclerCore,
AbstractHeaterShakerCore,
AbstractMagneticBlockCore,
+ AbstractAbsorbanceReaderCore,
)
from .exceptions import InvalidMagnetEngageHeightError
@@ -467,3 +468,24 @@ def get_labware_latch_status(self) -> HeaterShakerLabwareLatchStatus:
class MagneticBlockCore(NonConnectedModuleCore, AbstractMagneticBlockCore):
"""Magnetic Block control interface via a ProtocolEngine."""
+
+
+class AbsorbanceReaderCore(ModuleCore, AbstractAbsorbanceReaderCore):
+ """Absorbance Reader core logic implementation for Python protocols."""
+
+ _sync_module_hardware: SynchronousAdapter[hw_modules.AbsorbanceReader]
+ _initialized_value: Optional[int] = None
+
+ def initialize(self, wavelength: int) -> None:
+ """Initialize the Absorbance Reader by taking zero reading."""
+ self._engine_client.absorbance_reader_initialize(
+ module_id=self.module_id, wavelength=wavelength
+ )
+ self._initialized_value = wavelength
+
+ def initiate_read(self) -> None:
+ """Initiate read on the Absorbance Reader."""
+ if self._initialized_value:
+ self._engine_client.absorbance_reader_measure(
+ module_id=self.module_id, wavelength=self._initialized_value
+ )
diff --git a/api/src/opentrons/protocol_api/core/engine/protocol.py b/api/src/opentrons/protocol_api/core/engine/protocol.py
index 4089dff4b4d1..ed9ba0c5eeec 100644
--- a/api/src/opentrons/protocol_api/core/engine/protocol.py
+++ b/api/src/opentrons/protocol_api/core/engine/protocol.py
@@ -64,6 +64,7 @@
HeaterShakerModuleCore,
NonConnectedModuleCore,
MagneticBlockCore,
+ AbsorbanceReaderCore,
)
from .exceptions import InvalidModuleLocationError
from . import load_labware_params
@@ -455,6 +456,7 @@ def _create_module_core(
ModuleType.MAGNETIC: MagneticModuleCore,
ModuleType.THERMOCYCLER: ThermocyclerModuleCore,
ModuleType.HEATER_SHAKER: HeaterShakerModuleCore,
+ ModuleType.ABSORBANCE_READER: AbsorbanceReaderCore,
}
module_type = load_module_result.model.as_type()
diff --git a/api/src/opentrons/protocol_api/core/module.py b/api/src/opentrons/protocol_api/core/module.py
index b26a2ce91c81..004bd5c85b61 100644
--- a/api/src/opentrons/protocol_api/core/module.py
+++ b/api/src/opentrons/protocol_api/core/module.py
@@ -343,3 +343,21 @@ class AbstractMagneticBlockCore(AbstractModuleCore):
"""Core control interface for an attached Magnetic Block."""
MODULE_TYPE: ClassVar = ModuleType.MAGNETIC_BLOCK
+
+
+class AbstractAbsorbanceReaderCore(AbstractModuleCore):
+ """Core control interface for an attached Absorbance Reader Module."""
+
+ MODULE_TYPE: ClassVar = ModuleType.ABSORBANCE_READER
+
+ @abstractmethod
+ def get_serial_number(self) -> str:
+ """Get the module's unique hardware serial number."""
+
+ @abstractmethod
+ def initialize(self, wavelength: int) -> None:
+ """Initialize the Absorbance Reader by taking zero reading."""
+
+ @abstractmethod
+ def initiate_read(self) -> None:
+ """Initiate read on the Absorbance Reader."""
diff --git a/api/src/opentrons/protocol_api/module_contexts.py b/api/src/opentrons/protocol_api/module_contexts.py
index 654a6ec46c14..e1a2fce844b2 100644
--- a/api/src/opentrons/protocol_api/module_contexts.py
+++ b/api/src/opentrons/protocol_api/module_contexts.py
@@ -22,6 +22,7 @@
ThermocyclerCore,
HeaterShakerCore,
MagneticBlockCore,
+ AbsorbanceReaderCore,
)
from .core.core_map import LoadedCoreMap
from .core.engine import ENGINE_CORE_API_VERSION
@@ -955,3 +956,31 @@ class MagneticBlockContext(ModuleContext):
"""
_core: MagneticBlockCore
+
+
+class AbsorbanceReaderContext(ModuleContext):
+ """An object representing a connected Absorbance Reader Module.
+
+ It should not be instantiated directly; instead, it should be
+ created through :py:meth:`.ProtocolContext.load_module`.
+
+ .. versionadded:: 2.18
+ """
+
+ _core: AbsorbanceReaderCore
+
+ @property
+ @requires_version(2, 18)
+ def serial_number(self) -> str:
+ """Get the module's unique hardware serial number."""
+ return self._core.get_serial_number()
+
+ @requires_version(2, 18)
+ def initialize(self, wavelength: int) -> None:
+ """Initialize the Absorbance Reader by taking zero reading."""
+ self._core.initialize(wavelength)
+
+ @requires_version(2, 18)
+ def initiate_read(self) -> None:
+ """Initiate read on the Absorbance Reader."""
+ self._core.initiate_read()
diff --git a/api/src/opentrons/protocol_api/protocol_context.py b/api/src/opentrons/protocol_api/protocol_context.py
index 07c4bdfff5d5..1f724bd743be 100644
--- a/api/src/opentrons/protocol_api/protocol_context.py
+++ b/api/src/opentrons/protocol_api/protocol_context.py
@@ -50,6 +50,7 @@
AbstractThermocyclerCore,
AbstractHeaterShakerCore,
AbstractMagneticBlockCore,
+ AbstractAbsorbanceReaderCore,
)
from .core.engine import ENGINE_CORE_API_VERSION
from .core.legacy.legacy_protocol_core import LegacyProtocolCore
@@ -66,6 +67,7 @@
ThermocyclerContext,
HeaterShakerContext,
MagneticBlockContext,
+ AbsorbanceReaderContext,
ModuleContext,
)
from ._parameters import Parameters
@@ -80,6 +82,7 @@
ThermocyclerContext,
HeaterShakerContext,
MagneticBlockContext,
+ AbsorbanceReaderContext,
]
@@ -1213,6 +1216,8 @@ def _create_module_context(
module_cls = HeaterShakerContext
elif isinstance(module_core, AbstractMagneticBlockCore):
module_cls = MagneticBlockContext
+ elif isinstance(module_core, AbstractAbsorbanceReaderCore):
+ module_cls = AbsorbanceReaderContext
else:
assert False, "Unsupported module type"
diff --git a/api/src/opentrons/protocol_api/validation.py b/api/src/opentrons/protocol_api/validation.py
index eb72c6b6dfdf..e1c1902023fe 100644
--- a/api/src/opentrons/protocol_api/validation.py
+++ b/api/src/opentrons/protocol_api/validation.py
@@ -29,6 +29,7 @@
ThermocyclerModuleModel,
HeaterShakerModuleModel,
MagneticBlockModel,
+ AbsorbanceReaderModel,
ThermocyclerStep,
)
@@ -272,6 +273,7 @@ def ensure_definition_is_labware(definition: LabwareDefinition) -> None:
"thermocyclerModuleV2": ThermocyclerModuleModel.THERMOCYCLER_V2,
"heaterShakerModuleV1": HeaterShakerModuleModel.HEATER_SHAKER_V1,
"magneticBlockV1": MagneticBlockModel.MAGNETIC_BLOCK_V1,
+ "absorbanceReaderV1": AbsorbanceReaderModel.ABSORBANCE_READER_V1,
}
diff --git a/api/src/opentrons/protocol_engine/clients/sync_client.py b/api/src/opentrons/protocol_engine/clients/sync_client.py
index f29cbb02f71d..cbb4f0c26601 100644
--- a/api/src/opentrons/protocol_engine/clients/sync_client.py
+++ b/api/src/opentrons/protocol_engine/clients/sync_client.py
@@ -900,3 +900,31 @@ def load_liquid(
)
result = self._transport.execute_command(request=request)
return cast(commands.LoadLiquidResult, result)
+
+ def absorbance_reader_initialize(
+ self,
+ module_id: str,
+ wavelength: int,
+ ) -> commands.absorbance_reader.InitializeResult:
+ """Execute a `absorbanceReader/initialize` command and return the result."""
+ request = commands.absorbance_reader.InitializeCreate(
+ params=commands.absorbance_reader.InitializeParams(
+ moduleId=module_id, sampleWavelength=wavelength
+ )
+ )
+ result = self._transport.execute_command(request=request)
+ return cast(commands.absorbance_reader.InitializeResult, result)
+
+ def absorbance_reader_measure(
+ self,
+ module_id: str,
+ wavelength: int,
+ ) -> commands.absorbance_reader.MeasureAbsorbanceResult:
+ """Execute a `absorbanceReader/measure` command and return the result."""
+ request = commands.absorbance_reader.MeasureAbsorbanceCreate(
+ params=commands.absorbance_reader.MeasureAbsorbanceParams(
+ moduleId=module_id, sampleWavelength=wavelength
+ )
+ )
+ result = self._transport.execute_command(request=request)
+ return cast(commands.absorbance_reader.MeasureAbsorbanceResult, result)
diff --git a/api/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py b/api/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py
new file mode 100644
index 000000000000..6f2db320b4f8
--- /dev/null
+++ b/api/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py
@@ -0,0 +1,32 @@
+"""Command models for Absorbance Reader commands."""
+
+from .initialize import (
+ InitializeCommandType,
+ InitializeParams,
+ InitializeResult,
+ Initialize,
+ InitializeCreate,
+)
+
+from .measure import (
+ MeasureAbsorbanceCommandType,
+ MeasureAbsorbanceParams,
+ MeasureAbsorbanceResult,
+ MeasureAbsorbance,
+ MeasureAbsorbanceCreate,
+)
+
+__all__ = [
+ # absorbanace_reader/initialize
+ "InitializeCommandType",
+ "InitializeParams",
+ "InitializeResult",
+ "Initialize",
+ "InitializeCreate",
+ # absorbanace_reader/measure
+ "MeasureAbsorbanceCommandType",
+ "MeasureAbsorbanceParams",
+ "MeasureAbsorbanceResult",
+ "MeasureAbsorbance",
+ "MeasureAbsorbanceCreate",
+]
diff --git a/api/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py b/api/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py
new file mode 100644
index 000000000000..469732ee9fd9
--- /dev/null
+++ b/api/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py
@@ -0,0 +1,81 @@
+"""Command models to initialize an Absorbance Reader."""
+from __future__ import annotations
+from typing import Optional, Literal, TYPE_CHECKING
+from typing_extensions import Type
+
+from pydantic import BaseModel, Field
+
+from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
+from ...errors.error_occurrence import ErrorOccurrence
+
+if TYPE_CHECKING:
+ from opentrons.protocol_engine.state import StateView
+ from opentrons.protocol_engine.execution import EquipmentHandler
+
+
+InitializeCommandType = Literal["absorbanceReader/initialize"]
+
+
+class InitializeParams(BaseModel):
+ """Input parameters to initialize an absorbance reading."""
+
+ moduleId: str = Field(..., description="Unique ID of the absorbance reader.")
+ sampleWavelength: int = Field(..., description="Sample wavelength in nm.")
+
+
+class InitializeResult(BaseModel):
+ """Result data from initializing an aborbance reading."""
+
+
+class InitializeImpl(
+ AbstractCommandImpl[InitializeParams, SuccessData[InitializeResult, None]]
+):
+ """Execution implementation of initializing an Absorbance Reader."""
+
+ def __init__(
+ self,
+ state_view: StateView,
+ equipment: EquipmentHandler,
+ **unused_dependencies: object,
+ ) -> None:
+ self._state_view = state_view
+ self._equipment = equipment
+
+ async def execute(
+ self, params: InitializeParams
+ ) -> SuccessData[InitializeResult, None]:
+ """Initiate a single absorbance measurement."""
+ abs_reader_substate = self._state_view.modules.get_absorbance_reader_substate(
+ module_id=params.moduleId
+ )
+ # Allow propagation of ModuleNotAttachedError.
+ abs_reader = self._equipment.get_module_hardware_api(
+ abs_reader_substate.module_id
+ )
+
+ if abs_reader is not None:
+ await abs_reader.set_sample_wavelength(wavelength=params.sampleWavelength)
+
+ return SuccessData(
+ public=InitializeResult(),
+ private=None,
+ )
+
+
+class Initialize(BaseCommand[InitializeParams, InitializeResult, ErrorOccurrence]):
+ """A command to initialize an Absorbance Reader."""
+
+ commandType: InitializeCommandType = "absorbanceReader/initialize"
+ params: InitializeParams
+ result: Optional[InitializeResult]
+
+ _ImplementationCls: Type[InitializeImpl] = InitializeImpl
+
+
+class InitializeCreate(BaseCommandCreate[InitializeParams]):
+ """A request to execute an Absorbance Reader measurement."""
+
+ commandType: InitializeCommandType = "absorbanceReader/initialize"
+ params: InitializeParams
+
+ _CommandCls: Type[Initialize] = Initialize
diff --git a/api/src/opentrons/protocol_engine/commands/absorbance_reader/measure.py b/api/src/opentrons/protocol_engine/commands/absorbance_reader/measure.py
new file mode 100644
index 000000000000..53b87bd26498
--- /dev/null
+++ b/api/src/opentrons/protocol_engine/commands/absorbance_reader/measure.py
@@ -0,0 +1,94 @@
+"""Command models to measure absorbance."""
+from __future__ import annotations
+from typing import List, Optional, TYPE_CHECKING
+from typing_extensions import Literal, Type
+
+from pydantic import BaseModel, Field
+
+from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
+from ...errors.error_occurrence import ErrorOccurrence
+
+if TYPE_CHECKING:
+ from opentrons.protocol_engine.state import StateView
+ from opentrons.protocol_engine.execution import EquipmentHandler
+
+
+MeasureAbsorbanceCommandType = Literal["absorbanceReader/measure"]
+
+
+class MeasureAbsorbanceParams(BaseModel):
+ """Input parameters for a single absorbance reading."""
+
+ moduleId: str = Field(..., description="Unique ID of the Absorbance Reader.")
+ sampleWavelength: int = Field(..., description="Sample wavelength in nm.")
+
+
+class MeasureAbsorbanceResult(BaseModel):
+ """Result data from running an aborbance reading."""
+
+ # TODO: Transform this into a more complex model, such as a map with well names.
+ data: Optional[List[float]] = Field(
+ ..., min_items=96, max_items=96, description="Absorbance data points."
+ )
+
+
+class MeasureAbsorbanceImpl(
+ AbstractCommandImpl[
+ MeasureAbsorbanceParams, SuccessData[MeasureAbsorbanceResult, None]
+ ]
+):
+ """Execution implementation of an Absorbance Reader measurement."""
+
+ def __init__(
+ self,
+ state_view: StateView,
+ equipment: EquipmentHandler,
+ **unused_dependencies: object,
+ ) -> None:
+ self._state_view = state_view
+ self._equipment = equipment
+
+ async def execute(
+ self, params: MeasureAbsorbanceParams
+ ) -> SuccessData[MeasureAbsorbanceResult, None]:
+ """Initiate a single absorbance measurement."""
+ abs_reader_substate = self._state_view.modules.get_absorbance_reader_substate(
+ module_id=params.moduleId
+ )
+ # Allow propagation of ModuleNotAttachedError.
+ abs_reader = self._equipment.get_module_hardware_api(
+ abs_reader_substate.module_id
+ )
+
+ if abs_reader is not None:
+ result = await abs_reader.start_measure(wavelength=params.sampleWavelength)
+ return SuccessData(
+ public=MeasureAbsorbanceResult(data=result),
+ private=None,
+ )
+
+ return SuccessData(
+ public=MeasureAbsorbanceResult(data=None),
+ private=None,
+ )
+
+
+class MeasureAbsorbance(
+ BaseCommand[MeasureAbsorbanceParams, MeasureAbsorbanceResult, ErrorOccurrence]
+):
+ """A command to execute an Absorbance Reader measurement."""
+
+ commandType: MeasureAbsorbanceCommandType = "absorbanceReader/measure"
+ params: MeasureAbsorbanceParams
+ result: Optional[MeasureAbsorbanceResult]
+
+ _ImplementationCls: Type[MeasureAbsorbanceImpl] = MeasureAbsorbanceImpl
+
+
+class MeasureAbsorbanceCreate(BaseCommandCreate[MeasureAbsorbanceParams]):
+ """A request to execute an Absorbance Reader measurement."""
+
+ commandType: MeasureAbsorbanceCommandType = "absorbanceReader/measure"
+ params: MeasureAbsorbanceParams
+
+ _CommandCls: Type[MeasureAbsorbance] = MeasureAbsorbance
diff --git a/api/src/opentrons/protocol_engine/commands/command_unions.py b/api/src/opentrons/protocol_engine/commands/command_unions.py
index 362b2eb0a02b..6544b9a8c56b 100644
--- a/api/src/opentrons/protocol_engine/commands/command_unions.py
+++ b/api/src/opentrons/protocol_engine/commands/command_unions.py
@@ -8,6 +8,7 @@
from .command import DefinedErrorData
from .pipetting_common import OverpressureError, OverpressureErrorInternalData
+from . import absorbance_reader
from . import heater_shaker
from . import magnetic_module
from . import temperature_module
@@ -358,6 +359,8 @@
thermocycler.OpenLid,
thermocycler.CloseLid,
thermocycler.RunProfile,
+ absorbance_reader.Initialize,
+ absorbance_reader.MeasureAbsorbance,
calibration.CalibrateGripper,
calibration.CalibratePipette,
calibration.CalibrateModule,
@@ -424,6 +427,8 @@
thermocycler.CloseLidParams,
thermocycler.RunProfileParams,
thermocycler.RunProfileStepParams,
+ absorbance_reader.InitializeParams,
+ absorbance_reader.MeasureAbsorbanceParams,
calibration.CalibrateGripperParams,
calibration.CalibratePipetteParams,
calibration.CalibrateModuleParams,
@@ -487,6 +492,8 @@
thermocycler.OpenLidCommandType,
thermocycler.CloseLidCommandType,
thermocycler.RunProfileCommandType,
+ absorbance_reader.InitializeCommandType,
+ absorbance_reader.MeasureAbsorbanceCommandType,
calibration.CalibrateGripperCommandType,
calibration.CalibratePipetteCommandType,
calibration.CalibrateModuleCommandType,
@@ -551,6 +558,8 @@
thermocycler.OpenLidCreate,
thermocycler.CloseLidCreate,
thermocycler.RunProfileCreate,
+ absorbance_reader.InitializeCreate,
+ absorbance_reader.MeasureAbsorbanceCreate,
calibration.CalibrateGripperCreate,
calibration.CalibratePipetteCreate,
calibration.CalibrateModuleCreate,
@@ -616,6 +625,8 @@
thermocycler.OpenLidResult,
thermocycler.CloseLidResult,
thermocycler.RunProfileResult,
+ absorbance_reader.InitializeResult,
+ absorbance_reader.MeasureAbsorbanceResult,
calibration.CalibrateGripperResult,
calibration.CalibratePipetteResult,
calibration.CalibrateModuleResult,
diff --git a/api/src/opentrons/protocol_engine/execution/equipment.py b/api/src/opentrons/protocol_engine/execution/equipment.py
index 7dc2f3bcfaaf..d41894a4cb21 100644
--- a/api/src/opentrons/protocol_engine/execution/equipment.py
+++ b/api/src/opentrons/protocol_engine/execution/equipment.py
@@ -14,6 +14,7 @@
HeaterShaker,
TempDeck,
Thermocycler,
+ AbsorbanceReader,
)
from opentrons.hardware_control.nozzle_manager import NozzleMap
from opentrons.protocol_engine.state.module_substates import (
@@ -21,6 +22,7 @@
HeaterShakerModuleId,
TemperatureModuleId,
ThermocyclerModuleId,
+ AbsorbanceReaderId,
)
from ..errors import (
FailedToLoadPipetteError,
@@ -488,6 +490,13 @@ def get_module_hardware_api(
) -> Optional[Thermocycler]:
...
+ @overload
+ def get_module_hardware_api(
+ self,
+ module_id: AbsorbanceReaderId,
+ ) -> Optional[AbsorbanceReader]:
+ ...
+
def get_module_hardware_api(self, module_id: str) -> Optional[AbstractModule]:
"""Get the hardware API for a given module."""
use_virtual_modules = self._state_store.config.use_virtual_modules
diff --git a/api/src/opentrons/protocol_engine/state/module_substates/__init__.py b/api/src/opentrons/protocol_engine/state/module_substates/__init__.py
index 2e9b18ba17ba..3865982612be 100644
--- a/api/src/opentrons/protocol_engine/state/module_substates/__init__.py
+++ b/api/src/opentrons/protocol_engine/state/module_substates/__init__.py
@@ -12,7 +12,7 @@
ThermocyclerModuleId,
)
from .magnetic_block_substate import MagneticBlockSubState, MagneticBlockId
-
+from .absorbance_reader_substate import AbsorbanceReaderSubState, AbsorbanceReaderId
ModuleSubStateType = Union[
HeaterShakerModuleSubState,
@@ -20,6 +20,7 @@
TemperatureModuleSubState,
ThermocyclerModuleSubState,
MagneticBlockSubState,
+ AbsorbanceReaderSubState,
]
__all__ = [
@@ -33,6 +34,8 @@
"ThermocyclerModuleId",
"MagneticBlockSubState",
"MagneticBlockId",
+ "AbsorbanceReaderSubState",
+ "AbsorbanceReaderId",
# Union of all module substates
"ModuleSubStateType",
]
diff --git a/api/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py b/api/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py
index f694f798a71e..03daa32e1479 100644
--- a/api/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py
+++ b/api/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py
@@ -1,6 +1,6 @@
"""Heater-Shaker Module sub-state."""
from dataclasses import dataclass
-from typing import List, NewType, Optional
+from typing import NewType, Optional, List
AbsorbanceReaderId = NewType("AbsorbanceReaderId", str)
@@ -11,10 +11,7 @@ class AbsorbanceReaderSubState:
"""Absorbance-Plate-Reader-specific state."""
module_id: AbsorbanceReaderId
- initialized: bool
- is_lid_open: bool
- is_loaded: bool
- is_measuring: bool
- temperature: float
- sample_wavelength: Optional[int]
- supported_wavelengths: Optional[List[int]]
+ configured: bool
+ measured: bool
+ data: Optional[List[float]]
+ configured_wavelength: Optional[int]
diff --git a/api/src/opentrons/protocol_engine/state/modules.py b/api/src/opentrons/protocol_engine/state/modules.py
index 0e79dd53cf25..49794ce329df 100644
--- a/api/src/opentrons/protocol_engine/state/modules.py
+++ b/api/src/opentrons/protocol_engine/state/modules.py
@@ -54,6 +54,7 @@
heater_shaker,
temperature_module,
thermocycler,
+ absorbance_reader,
)
from ..actions import Action, SucceedCommandAction, AddModuleAction
from .abstract_store import HasState, HandlesActions
@@ -62,10 +63,12 @@
HeaterShakerModuleSubState,
TemperatureModuleSubState,
ThermocyclerModuleSubState,
+ AbsorbanceReaderSubState,
MagneticModuleId,
HeaterShakerModuleId,
TemperatureModuleId,
ThermocyclerModuleId,
+ AbsorbanceReaderId,
MagneticBlockSubState,
MagneticBlockId,
ModuleSubStateType,
@@ -263,6 +266,15 @@ def _handle_command(self, command: Command) -> None:
):
self._handle_thermocycler_module_commands(command)
+ if isinstance(
+ command.result,
+ (
+ absorbance_reader.InitializeResult,
+ absorbance_reader.MeasureAbsorbanceResult,
+ ),
+ ):
+ self._handle_absorbance_reader_commands(command)
+
def _add_module_substate(
self,
module_id: str,
@@ -321,6 +333,14 @@ def _add_module_substate(
self._state.substate_by_module_id[module_id] = MagneticBlockSubState(
module_id=MagneticBlockId(module_id)
)
+ elif ModuleModel.is_absorbance_reader(actual_model):
+ self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState(
+ module_id=AbsorbanceReaderId(module_id),
+ configured=False,
+ measured=False,
+ data=None,
+ configured_wavelength=None,
+ )
def _update_additional_slots_occupied_by_thermocycler(
self,
@@ -509,6 +529,40 @@ def _handle_thermocycler_module_commands(
target_lid_temperature=lid_temperature,
)
+ def _handle_absorbance_reader_commands(
+ self,
+ command: Union[
+ absorbance_reader.Initialize,
+ absorbance_reader.MeasureAbsorbance,
+ ],
+ ) -> None:
+ module_id = command.params.moduleId
+ absorbance_reader_substate = self._state.substate_by_module_id[module_id]
+ assert isinstance(
+ absorbance_reader_substate, AbsorbanceReaderSubState
+ ), f"{module_id} is not an absorbance plate reader."
+
+ # Get current values
+ configured = absorbance_reader_substate.configured
+ configured_wavelength = absorbance_reader_substate.configured_wavelength
+
+ if isinstance(command.result, absorbance_reader.InitializeResult):
+ self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState(
+ module_id=AbsorbanceReaderId(module_id),
+ configured=True,
+ measured=False,
+ data=None,
+ configured_wavelength=command.params.sampleWavelength,
+ )
+ elif isinstance(command.result, absorbance_reader.MeasureAbsorbanceResult):
+ self._state.substate_by_module_id[module_id] = AbsorbanceReaderSubState(
+ module_id=AbsorbanceReaderId(module_id),
+ configured=configured,
+ configured_wavelength=configured_wavelength,
+ measured=True,
+ data=command.result.data,
+ )
+
class ModuleView(HasState[ModuleState]):
"""Read-only view of computed module state."""
@@ -644,6 +698,22 @@ def get_thermocycler_module_substate(
expected_name="Thermocycler Module",
)
+ def get_absorbance_reader_substate(
+ self, module_id: str
+ ) -> AbsorbanceReaderSubState:
+ """Return a `AbsorbanceReaderSubState` for the given Absorbance Reader.
+
+ Raises:
+ ModuleNotLoadedError: If module_id has not been loaded.
+ WrongModuleTypeError: If module_id has been loaded,
+ but it's not an Absorbance Reader.
+ """
+ return self._get_module_substate(
+ module_id=module_id,
+ expected_type=AbsorbanceReaderSubState,
+ expected_name="Thermocycler Module",
+ )
+
def get_location(self, module_id: str) -> DeckSlotLocation:
"""Get the slot location of the given module."""
location = self.get(module_id).location
@@ -1187,6 +1257,14 @@ def ensure_and_convert_module_fixture_location(
]
elif model == ModuleModel.THERMOCYCLER_MODULE_V2:
return "thermocyclerModuleV2"
+ elif model == ModuleModel.ABSORBANCE_READER_V1:
+ valid_slots = ["A3", "B3", "C3", "D3"]
+ addressable_areas = [
+ "absorbanceReaderV1A3",
+ "absorbanceReaderV1B3",
+ "absorbanceReaderV1C3",
+ "absorbanceReaderV1D3",
+ ]
else:
raise ValueError(
f"Unknown module {model.name} has no addressable areas to provide."
diff --git a/api/src/opentrons/protocol_engine/types.py b/api/src/opentrons/protocol_engine/types.py
index 26c9a3d82ddc..abad53efed16 100644
--- a/api/src/opentrons/protocol_engine/types.py
+++ b/api/src/opentrons/protocol_engine/types.py
@@ -314,6 +314,7 @@ class ModuleModel(str, Enum):
THERMOCYCLER_MODULE_V2 = "thermocyclerModuleV2"
HEATER_SHAKER_MODULE_V1 = "heaterShakerModuleV1"
MAGNETIC_BLOCK_V1 = "magneticBlockV1"
+ ABSORBANCE_READER_V1 = "absorbanceReaderV1"
def as_type(self) -> ModuleType:
"""Get the ModuleType of this model."""
@@ -327,6 +328,8 @@ def as_type(self) -> ModuleType:
return ModuleType.HEATER_SHAKER
elif ModuleModel.is_magnetic_block(self):
return ModuleType.MAGNETIC_BLOCK
+ elif ModuleModel.is_absorbance_reader(self):
+ return ModuleType.ABSORBANCE_READER
assert False, f"Invalid ModuleModel {self}"
@@ -363,6 +366,13 @@ def is_magnetic_block(cls, model: ModuleModel) -> TypeGuard[MagneticBlockModel]:
"""Whether a given model is a Magnetic block."""
return model == cls.MAGNETIC_BLOCK_V1
+ @classmethod
+ def is_absorbance_reader(
+ cls, model: ModuleModel
+ ) -> TypeGuard[AbsorbanceReaderModel]:
+ """Whether a given model is an Absorbance Plate Reader."""
+ return model == cls.ABSORBANCE_READER_V1
+
TemperatureModuleModel = Literal[
ModuleModel.TEMPERATURE_MODULE_V1, ModuleModel.TEMPERATURE_MODULE_V2
@@ -375,6 +385,7 @@ def is_magnetic_block(cls, model: ModuleModel) -> TypeGuard[MagneticBlockModel]:
]
HeaterShakerModuleModel = Literal[ModuleModel.HEATER_SHAKER_MODULE_V1]
MagneticBlockModel = Literal[ModuleModel.MAGNETIC_BLOCK_V1]
+AbsorbanceReaderModel = Literal[ModuleModel.ABSORBANCE_READER_V1]
class ModuleDimensions(BaseModel):
@@ -729,6 +740,7 @@ class AreaType(Enum):
HEATER_SHAKER = "heaterShaker"
TEMPERATURE = "temperatureModule"
MAGNETICBLOCK = "magneticBlock"
+ ABSORBANCE_READER = "absorbanceReader"
@dataclass(frozen=True)
diff --git a/api/tests/opentrons/protocol_api/core/engine/test_absorbance_reader_core.py b/api/tests/opentrons/protocol_api/core/engine/test_absorbance_reader_core.py
new file mode 100644
index 000000000000..6d03af9e4582
--- /dev/null
+++ b/api/tests/opentrons/protocol_api/core/engine/test_absorbance_reader_core.py
@@ -0,0 +1,96 @@
+"""Tests for the engine based Protocol API module core implementations."""
+import pytest
+from decoy import Decoy
+
+from opentrons.hardware_control import SynchronousAdapter
+from opentrons.hardware_control.modules import AbsorbanceReader
+from opentrons.hardware_control.modules.types import (
+ ModuleType,
+)
+from opentrons.protocol_engine.clients import SyncClient as EngineClient
+from opentrons.protocol_api.core.engine.module_core import AbsorbanceReaderCore
+from opentrons.protocol_api import MAX_SUPPORTED_VERSION
+
+SyncAbsorbanceReaderHardware = SynchronousAdapter[AbsorbanceReader]
+
+
+@pytest.fixture
+def mock_engine_client(decoy: Decoy) -> EngineClient:
+ """Get a mock ProtocolEngine synchronous client."""
+ return decoy.mock(cls=EngineClient)
+
+
+@pytest.fixture
+def mock_sync_module_hardware(decoy: Decoy) -> SyncAbsorbanceReaderHardware:
+ """Get a mock synchronous module hardware."""
+ return decoy.mock(name="SyncAbsorbanceReaderHardware") # type: ignore[no-any-return]
+
+
+@pytest.fixture
+def subject(
+ mock_engine_client: EngineClient,
+ mock_sync_module_hardware: SyncAbsorbanceReaderHardware,
+) -> AbsorbanceReaderCore:
+ """Get a AbsorbanceReaderCore test subject."""
+ return AbsorbanceReaderCore(
+ module_id="1234",
+ engine_client=mock_engine_client,
+ api_version=MAX_SUPPORTED_VERSION,
+ sync_module_hardware=mock_sync_module_hardware,
+ )
+
+
+def test_create(
+ decoy: Decoy,
+ mock_engine_client: EngineClient,
+ mock_sync_module_hardware: SyncAbsorbanceReaderHardware,
+) -> None:
+ """It should be able to create an absorbance plate reader module core."""
+ result = AbsorbanceReaderCore(
+ module_id="1234",
+ engine_client=mock_engine_client,
+ api_version=MAX_SUPPORTED_VERSION,
+ sync_module_hardware=mock_sync_module_hardware,
+ )
+
+ assert result.module_id == "1234"
+ assert result.MODULE_TYPE == ModuleType.ABSORBANCE_READER
+
+
+def test_initialize(
+ decoy: Decoy, mock_engine_client: EngineClient, subject: AbsorbanceReaderCore
+) -> None:
+ """It should set the sample wavelength with the engine client."""
+ subject.initialize(wavelength=123)
+
+ decoy.verify(
+ mock_engine_client.absorbance_reader_initialize(
+ module_id="1234", wavelength=123
+ ),
+ times=1,
+ )
+ assert subject._initialized_value == 123
+
+
+def test_initiate_read(
+ decoy: Decoy, mock_engine_client: EngineClient, subject: AbsorbanceReaderCore
+) -> None:
+ """It should call absorbance reader to read with the engine client."""
+ subject._initialized_value = 123
+ subject.initiate_read()
+
+ decoy.verify(
+ mock_engine_client.absorbance_reader_measure(module_id="1234", wavelength=123),
+ times=1,
+ )
+
+
+def test_get_serial_number(
+ decoy: Decoy, subject: AbsorbanceReaderCore, mock_engine_client: EngineClient
+) -> None:
+ """It should return a serial number."""
+ decoy.when(mock_engine_client.state.modules.get_serial_number("1234")).then_return(
+ "abc"
+ )
+
+ assert subject.get_serial_number() == "abc"
diff --git a/api/tests/opentrons/protocol_api/test_absorbance_reader_context.py b/api/tests/opentrons/protocol_api/test_absorbance_reader_context.py
new file mode 100644
index 000000000000..132e6d1cae63
--- /dev/null
+++ b/api/tests/opentrons/protocol_api/test_absorbance_reader_context.py
@@ -0,0 +1,66 @@
+"""Tests for Protocol API absorbance plate reader contexts."""
+import pytest
+from decoy import Decoy
+
+from opentrons.legacy_broker import LegacyBroker
+from opentrons.protocols.api_support.types import APIVersion
+from opentrons.protocol_api import MAX_SUPPORTED_VERSION, AbsorbanceReaderContext
+from opentrons.protocol_api.core.common import ProtocolCore, AbsorbanceReaderCore
+from opentrons.protocol_api.core.core_map import LoadedCoreMap
+
+
+@pytest.fixture
+def mock_core(decoy: Decoy) -> AbsorbanceReaderCore:
+ """Get a mock module implementation core."""
+ return decoy.mock(cls=AbsorbanceReaderCore)
+
+
+@pytest.fixture
+def mock_protocol_core(decoy: Decoy) -> ProtocolCore:
+ """Get a mock protocol implementation core."""
+ return decoy.mock(cls=ProtocolCore)
+
+
+@pytest.fixture
+def mock_core_map(decoy: Decoy) -> LoadedCoreMap:
+ """Get a mock LoadedCoreMap."""
+ return decoy.mock(cls=LoadedCoreMap)
+
+
+@pytest.fixture
+def mock_broker(decoy: Decoy) -> LegacyBroker:
+ """Get a mock command message broker."""
+ return decoy.mock(cls=LegacyBroker)
+
+
+@pytest.fixture
+def api_version() -> APIVersion:
+ """Get an API version to apply to the interface."""
+ return MAX_SUPPORTED_VERSION
+
+
+@pytest.fixture
+def subject(
+ api_version: APIVersion,
+ mock_core: AbsorbanceReaderCore,
+ mock_protocol_core: ProtocolCore,
+ mock_core_map: LoadedCoreMap,
+ mock_broker: LegacyBroker,
+) -> AbsorbanceReaderContext:
+ """Get an absorbance reader context with its dependencies mocked out."""
+ return AbsorbanceReaderContext(
+ core=mock_core,
+ protocol_core=mock_protocol_core,
+ core_map=mock_core_map,
+ broker=mock_broker,
+ api_version=api_version,
+ )
+
+
+def test_get_serial_number(
+ decoy: Decoy, mock_core: AbsorbanceReaderCore, subject: AbsorbanceReaderContext
+) -> None:
+ """It should get the serial number from the core."""
+ decoy.when(mock_core.get_serial_number()).then_return("12345")
+ result = subject.serial_number
+ assert result == "12345"
diff --git a/api/tests/opentrons/protocol_engine/commands/test_load_module.py b/api/tests/opentrons/protocol_engine/commands/test_load_module.py
index 88a43d6e5573..9f5692b53b0f 100644
--- a/api/tests/opentrons/protocol_engine/commands/test_load_module.py
+++ b/api/tests/opentrons/protocol_engine/commands/test_load_module.py
@@ -152,6 +152,62 @@ async def test_load_module_implementation_mag_block(
)
+async def test_load_module_implementation_abs_reader(
+ decoy: Decoy,
+ equipment: EquipmentHandler,
+ state_view: StateView,
+ abs_reader_v1_def: ModuleDefinition,
+) -> None:
+ """A loadModule command for abs reader should have an execution implementation."""
+ subject = LoadModuleImplementation(equipment=equipment, state_view=state_view)
+
+ data = LoadModuleParams(
+ model=ModuleModel.ABSORBANCE_READER_V1,
+ location=DeckSlotLocation(slotName=DeckSlotName.SLOT_D3),
+ moduleId="some-id",
+ )
+
+ deck_def = load_deck(STANDARD_OT3_DECK, 5)
+
+ decoy.when(state_view.addressable_areas.state.deck_definition).then_return(deck_def)
+ decoy.when(
+ state_view.addressable_areas.get_cutout_id_by_deck_slot_name(
+ DeckSlotName.SLOT_D3
+ )
+ ).then_return("cutout" + DeckSlotName.SLOT_D3.value)
+
+ decoy.when(
+ state_view.geometry.ensure_location_not_occupied(
+ DeckSlotLocation(slotName=DeckSlotName.SLOT_D3)
+ )
+ ).then_return(DeckSlotLocation(slotName=DeckSlotName.SLOT_D3))
+
+ decoy.when(
+ await equipment.load_module(
+ model=ModuleModel.ABSORBANCE_READER_V1,
+ location=DeckSlotLocation(slotName=DeckSlotName.SLOT_D3),
+ module_id="some-id",
+ )
+ ).then_return(
+ LoadedModuleData(
+ module_id="module-id",
+ serial_number=None,
+ definition=abs_reader_v1_def,
+ )
+ )
+
+ result = await subject.execute(data)
+ assert result == SuccessData(
+ public=LoadModuleResult(
+ moduleId="module-id",
+ serialNumber=None,
+ model=ModuleModel.ABSORBANCE_READER_V1,
+ definition=abs_reader_v1_def,
+ ),
+ private=None,
+ )
+
+
async def test_load_module_raises_if_location_occupied(
decoy: Decoy,
equipment: EquipmentHandler,
diff --git a/api/tests/opentrons/protocol_engine/conftest.py b/api/tests/opentrons/protocol_engine/conftest.py
index ab23f7e9e088..df02b53ce382 100644
--- a/api/tests/opentrons/protocol_engine/conftest.py
+++ b/api/tests/opentrons/protocol_engine/conftest.py
@@ -212,6 +212,13 @@ def mag_block_v1_def() -> ModuleDefinition:
return ModuleDefinition.parse_raw(definition)
+@pytest.fixture(scope="session")
+def abs_reader_v1_def() -> ModuleDefinition:
+ """Get the definition of a V1 absorbance plate reader."""
+ definition = load_shared_data("module/definitions/3/absorbanceReaderV1.json")
+ return ModuleDefinition.parse_raw(definition)
+
+
@pytest.fixture(scope="session")
def supported_tip_fixture() -> pipette_definition.SupportedTipsDefinition:
"""Get a mock supported tip definition."""
diff --git a/app/src/organisms/DeviceDetailsDeckConfiguration/AddFixtureModal.tsx b/app/src/organisms/DeviceDetailsDeckConfiguration/AddFixtureModal.tsx
index e61a3c76eddc..501d1c246708 100644
--- a/app/src/organisms/DeviceDetailsDeckConfiguration/AddFixtureModal.tsx
+++ b/app/src/organisms/DeviceDetailsDeckConfiguration/AddFixtureModal.tsx
@@ -22,6 +22,9 @@ import {
import {
getCutoutDisplayName,
getFixtureDisplayName,
+ ABSORBANCE_READER_CUTOUTS,
+ ABSORBANCE_READER_V1,
+ ABSORBANCE_READER_V1_FIXTURE,
HEATER_SHAKER_CUTOUTS,
HEATERSHAKER_MODULE_V1,
HEATERSHAKER_MODULE_V1_FIXTURE,
@@ -227,6 +230,24 @@ export function AddFixtureModal({
...unconfiguredTemperatureModules,
]
}
+ if (
+ ABSORBANCE_READER_CUTOUTS.includes(cutoutId) &&
+ unconfiguredMods.some(m => m.moduleModel === ABSORBANCE_READER_V1)
+ ) {
+ const unconfiguredAbsorbanceReaders = unconfiguredMods
+ .filter(mod => mod.moduleModel === ABSORBANCE_READER_V1)
+ .map(mod => [
+ {
+ cutoutId,
+ cutoutFixtureId: ABSORBANCE_READER_V1_FIXTURE,
+ opentronsModuleSerialNumber: mod.serialNumber,
+ },
+ ])
+ availableOptions = [
+ ...availableOptions,
+ ...unconfiguredAbsorbanceReaders,
+ ]
+ }
}
} else if (optionStage === 'wasteChuteOptions') {
availableOptions = WASTE_CHUTE_FIXTURES.map(fixture => [
diff --git a/app/src/organisms/ModuleCard/AbsorbanceReaderData.tsx b/app/src/organisms/ModuleCard/AbsorbanceReaderData.tsx
new file mode 100644
index 000000000000..8bcb496e7fa2
--- /dev/null
+++ b/app/src/organisms/ModuleCard/AbsorbanceReaderData.tsx
@@ -0,0 +1,28 @@
+import * as React from 'react'
+import { useTranslation } from 'react-i18next'
+import { TYPOGRAPHY, StyledText } from '@opentrons/components'
+import type { AbsorbanceReaderModule } from '../../redux/modules/types'
+
+interface AbsorbanceReaderProps {
+ moduleData: AbsorbanceReaderModule['data']
+}
+
+export const AbsorbanceReaderData = (
+ props: AbsorbanceReaderProps
+): JSX.Element | null => {
+ const { moduleData } = props
+ const { t } = useTranslation('device_details')
+
+ return (
+ <>
+
+ {t('abs_reader_status', {
+ status: moduleData.status,
+ })}
+
+ >
+ )
+}
diff --git a/app/src/organisms/ModuleCard/AbsorbanceReaderSlideout.tsx b/app/src/organisms/ModuleCard/AbsorbanceReaderSlideout.tsx
new file mode 100644
index 000000000000..1224357435cf
--- /dev/null
+++ b/app/src/organisms/ModuleCard/AbsorbanceReaderSlideout.tsx
@@ -0,0 +1,44 @@
+import * as React from 'react'
+import { useTranslation } from 'react-i18next'
+import { getModuleDisplayName } from '@opentrons/shared-data'
+import { SPACING, StyledText, TYPOGRAPHY } from '@opentrons/components'
+import { Slideout } from '../../atoms/Slideout'
+
+import type { AbsorbanceReaderModule } from '../../redux/modules/types'
+
+interface AbsorbanceReaderSlideoutProps {
+ module: AbsorbanceReaderModule
+ onCloseClick: () => unknown
+ isExpanded: boolean
+}
+
+export const AbsorbanceReaderSlideout = (
+ props: AbsorbanceReaderSlideoutProps
+): JSX.Element | null => {
+ const { module, onCloseClick, isExpanded } = props
+ const { t } = useTranslation('device_details')
+ const moduleName = getModuleDisplayName(module.moduleModel)
+
+ const handleCloseSlideout = (): void => {
+ onCloseClick()
+ }
+
+ return (
+
+
+ {t('set_absorbance_reader')}
+
+
+ )
+}
diff --git a/app/src/organisms/ModuleCard/hooks.tsx b/app/src/organisms/ModuleCard/hooks.tsx
index 3c9d3dce6c3d..5f515b75a8df 100644
--- a/app/src/organisms/ModuleCard/hooks.tsx
+++ b/app/src/organisms/ModuleCard/hooks.tsx
@@ -349,6 +349,7 @@ export function useModuleOverflowMenu(
},
},
],
+ absorbanceReaderType: [],
}
return {
diff --git a/app/src/organisms/ModuleCard/index.tsx b/app/src/organisms/ModuleCard/index.tsx
index 945b9857b8f6..eac70fc46281 100644
--- a/app/src/organisms/ModuleCard/index.tsx
+++ b/app/src/organisms/ModuleCard/index.tsx
@@ -26,6 +26,7 @@ import {
TEMPERATURE_MODULE_TYPE,
THERMOCYCLER_MODULE_TYPE,
MODULE_MODELS_OT2_ONLY,
+ ABSORBANCE_READER_TYPE,
} from '@opentrons/shared-data'
import { RUN_STATUS_FINISHING, RUN_STATUS_RUNNING } from '@opentrons/api-client'
@@ -74,6 +75,8 @@ import type {
} from '../../redux/modules/types'
import type { State, Dispatch } from '../../redux/types'
import type { RequestState } from '../../redux/robot-api/types'
+import { AbsorbanceReaderData } from './AbsorbanceReaderData'
+import { AbsorbanceReaderSlideout } from './AbsorbanceReaderSlideout'
interface ModuleCardProps {
module: AttachedModule
@@ -210,6 +213,12 @@ export const ModuleCard = (props: ModuleCardProps): JSX.Element | null => {
showTemperatureData={true}
/>
)
+ break
+ }
+
+ case 'absorbanceReaderType': {
+ moduleData =
+ break
}
}
@@ -526,6 +535,14 @@ const ModuleSlideout = (props: ModuleSlideoutProps): JSX.Element => {
isExpanded={showSlideout}
/>
)
+ } else if (module.moduleType === ABSORBANCE_READER_TYPE) {
+ return (
+
+ )
} else {
return (
void
+ selected?: boolean
+}
+
+const ABSORBANCE_READER_FIXTURE_DISPLAY_NAME = 'Absorbance Reader'
+
+export function AbsorbanceReaderFixture(
+ props: AbsorbanceReaderFixtureProps
+): JSX.Element {
+ const {
+ deckDefinition,
+ handleClickRemove,
+ fixtureLocation,
+ cutoutFixtureId,
+ selected = false,
+ } = props
+
+ const cutoutDef = deckDefinition.locations.cutouts.find(
+ cutout => cutout.id === fixtureLocation
+ )
+
+ /**
+ * deck definition cutout position is the position of the single slot located within that cutout
+ * so, to get the position of the cutout itself we must add an adjustment to the slot position
+ * the adjustment for x is different for right side/left side
+ */
+ // TODO (AA): fix the slot length for the absorbance reader fixture
+ const [xSlotPosition = 0, ySlotPosition = 0] = cutoutDef?.position ?? []
+
+ const x = xSlotPosition + COLUMN_3_X_ADJUSTMENT
+
+ const y = ySlotPosition + Y_ADJUSTMENT
+
+ const editableStyle = selected ? CONFIG_STYLE_SELECTED : CONFIG_STYLE_EDITABLE
+ return (
+
+ {
+ handleClickRemove(fixtureLocation, cutoutFixtureId)
+ }
+ : () => {}
+ }
+ >
+
+ {ABSORBANCE_READER_FIXTURE_DISPLAY_NAME}
+
+ {handleClickRemove != null ? (
+
+ ) : null}
+
+
+ )
+}
diff --git a/components/src/hardware-sim/DeckConfigurator/index.tsx b/components/src/hardware-sim/DeckConfigurator/index.tsx
index 67e9f972e25e..9f1a9506a2f0 100644
--- a/components/src/hardware-sim/DeckConfigurator/index.tsx
+++ b/components/src/hardware-sim/DeckConfigurator/index.tsx
@@ -12,6 +12,7 @@ import {
HEATERSHAKER_MODULE_V1_FIXTURE,
TEMPERATURE_MODULE_V2_FIXTURE,
MAGNETIC_BLOCK_V1_FIXTURE,
+ ABSORBANCE_READER_V1_FIXTURE,
STAGING_AREA_SLOT_WITH_MAGNETIC_BLOCK_V1_FIXTURE,
} from '@opentrons/shared-data'
@@ -34,6 +35,7 @@ import { TemperatureModuleFixture } from './TemperatureModuleFixture'
import { HeaterShakerFixture } from './HeaterShakerFixture'
import { MagneticBlockFixture } from './MagneticBlockFixture'
import { ThermocyclerFixture } from './ThermocyclerFixture'
+import { AbsorbanceReaderFixture } from './AbsorbanceReaderFixture'
interface DeckConfiguratorProps {
deckConfig: DeckConfiguration
@@ -105,6 +107,9 @@ export function DeckConfigurator(props: DeckConfiguratorProps): JSX.Element {
STAGING_AREA_SLOT_WITH_MAGNETIC_BLOCK_V1_FIXTURE,
] as CutoutFixtureId[]).includes(cutoutFixtureId)
)
+ const absorbanceReaderFixtures = deckConfig.filter(
+ ({ cutoutFixtureId }) => cutoutFixtureId === ABSORBANCE_READER_V1_FIXTURE
+ )
return (
))}
+ {absorbanceReaderFixtures.map(({ cutoutId, cutoutFixtureId }) => (
+
+ ))}
{additionalStaticFixtures?.map(staticFixture => (
module.type) : []
@@ -208,16 +214,16 @@ function FlexModuleFields(props: WizardTileProps): JSX.Element {
modules,
trashType: 'trashBin',
})
-
React.useEffect(() => {
if (trashBinDisabled) {
setValue('additionalEquipment', without(additionalEquipment, 'trashBin'))
}
}, [trashBinDisabled, setValue])
-
return (
- {FLEX_SUPPORTED_MODULE_MODELS.map(moduleModel => {
+ {FLEX_SUPPORTED_MODULE_MODELS.filter(moduleModel =>
+ enableAbsorbanceReader ? true : moduleModel !== 'absorbanceReaderV1'
+ ).map(moduleModel => {
const moduleType = getModuleType(moduleModel)
const isModuleOnDeck = moduleTypesOnDeck.includes(moduleType)
diff --git a/protocol-designer/src/components/modules/EditModulesCard.tsx b/protocol-designer/src/components/modules/EditModulesCard.tsx
index f1507f01f148..c64ff4632e6e 100644
--- a/protocol-designer/src/components/modules/EditModulesCard.tsx
+++ b/protocol-designer/src/components/modules/EditModulesCard.tsx
@@ -83,6 +83,9 @@ export function EditModulesCard(props: Props): JSX.Element {
const moduleRestrictionsDisabled = Boolean(
useSelector(featureFlagSelectors.getDisableModuleRestrictions)
)
+ const enableAbsorbanceReader = Boolean(
+ useSelector(featureFlagSelectors.getEnableAbsorbanceReader)
+ )
const showHeaterShakerPipetteCollisions =
isHeaterShakerOnDeck &&
@@ -99,6 +102,8 @@ export function EditModulesCard(props: Props): JSX.Element {
isFlex
? moduleType !== 'magneticModuleType'
: moduleType !== 'magneticBlockType'
+ ).filter(moduleType =>
+ enableAbsorbanceReader ? true : moduleType !== 'absorbanceReaderType'
)
const handleDeleteStagingAreas = (): void => {
diff --git a/protocol-designer/src/components/modules/ModuleDiagram.tsx b/protocol-designer/src/components/modules/ModuleDiagram.tsx
index 297ed5ce29d7..3763e4679613 100644
--- a/protocol-designer/src/components/modules/ModuleDiagram.tsx
+++ b/protocol-designer/src/components/modules/ModuleDiagram.tsx
@@ -14,6 +14,8 @@ import {
THERMOCYCLER_MODULE_V2,
MAGNETIC_BLOCK_TYPE,
MAGNETIC_BLOCK_V1,
+ ABSORBANCE_READER_TYPE,
+ ABSORBANCE_READER_V1,
} from '@opentrons/shared-data'
import magdeck_gen1 from '../../images/modules/magdeck_gen1.png'
@@ -56,6 +58,10 @@ const MODULE_IMG_BY_TYPE: ModuleImg = {
[MAGNETIC_BLOCK_TYPE]: {
[MAGNETIC_BLOCK_V1]: mag_block,
},
+ [ABSORBANCE_READER_TYPE]: {
+ // TODO (AA): update absorbance reader image
+ [ABSORBANCE_READER_V1]: heater_shaker_module_transparent,
+ },
}
export function ModuleDiagram(props: Props): JSX.Element {
diff --git a/protocol-designer/src/constants.ts b/protocol-designer/src/constants.ts
index 6c0c2db38163..b28f6ebee354 100644
--- a/protocol-designer/src/constants.ts
+++ b/protocol-designer/src/constants.ts
@@ -13,6 +13,8 @@ import {
THERMOCYCLER_MODULE_V2,
MAGNETIC_BLOCK_TYPE,
MAGNETIC_BLOCK_V1,
+ ABSORBANCE_READER_TYPE,
+ ABSORBANCE_READER_V1,
} from '@opentrons/shared-data'
import type {
LabwareDefinition2,
@@ -138,6 +140,12 @@ export const MODELS_FOR_MODULE_TYPE: Record<
value: MAGNETIC_BLOCK_V1,
},
],
+ [ABSORBANCE_READER_TYPE]: [
+ {
+ name: 'GEN1',
+ value: ABSORBANCE_READER_V1,
+ },
+ ],
}
export const DEFAULT_MODEL_FOR_MODULE_TYPE: Record = {
@@ -146,6 +154,7 @@ export const DEFAULT_MODEL_FOR_MODULE_TYPE: Record = {
[THERMOCYCLER_MODULE_TYPE]: THERMOCYCLER_MODULE_V2,
[HEATERSHAKER_MODULE_TYPE]: HEATERSHAKER_MODULE_V1,
[MAGNETIC_BLOCK_TYPE]: MAGNETIC_BLOCK_V1,
+ [ABSORBANCE_READER_TYPE]: ABSORBANCE_READER_V1,
}
// Values for pauseAction field
export const PAUSE_UNTIL_RESUME: 'untilResume' = 'untilResume'
diff --git a/protocol-designer/src/feature-flags/reducers.ts b/protocol-designer/src/feature-flags/reducers.ts
index 3220828e0c61..3e60f923a081 100644
--- a/protocol-designer/src/feature-flags/reducers.ts
+++ b/protocol-designer/src/feature-flags/reducers.ts
@@ -23,6 +23,8 @@ const initialFlags: Flags = {
process.env.OT_PD_DISABLE_MODULE_RESTRICTIONS === '1' || false,
OT_PD_ALLOW_ALL_TIPRACKS:
process.env.OT_PD_ALLOW_ALL_TIPRACKS === '1' || false,
+ OT_PD_ENABLE_ABSORBANCE_READER:
+ process.env.OT_PD_ENABLE_ABSORBANCE_READER === '1' || false,
}
// @ts-expect-error(sa, 2021-6-10): cannot use string literals as action type
// TODO IMMEDIATELY: refactor this to the old fashioned way if we cannot have type safety: https://github.com/redux-utilities/redux-actions/issues/282#issuecomment-595163081
diff --git a/protocol-designer/src/feature-flags/selectors.ts b/protocol-designer/src/feature-flags/selectors.ts
index 82b846c0da1f..fe18b33fb490 100644
--- a/protocol-designer/src/feature-flags/selectors.ts
+++ b/protocol-designer/src/feature-flags/selectors.ts
@@ -19,3 +19,7 @@ export const getAllowAllTipracks: Selector = createSelector(
getFeatureFlagData,
flags => flags.OT_PD_ALLOW_ALL_TIPRACKS ?? false
)
+export const getEnableAbsorbanceReader: Selector = createSelector(
+ getFeatureFlagData,
+ flags => flags.OT_PD_ENABLE_ABSORBANCE_READER ?? false
+)
diff --git a/protocol-designer/src/feature-flags/types.ts b/protocol-designer/src/feature-flags/types.ts
index 7a9c04b5af92..5f2ade969d73 100644
--- a/protocol-designer/src/feature-flags/types.ts
+++ b/protocol-designer/src/feature-flags/types.ts
@@ -30,10 +30,15 @@ export type FlagTypes =
| 'PRERELEASE_MODE'
| 'OT_PD_DISABLE_MODULE_RESTRICTIONS'
| 'OT_PD_ALLOW_ALL_TIPRACKS'
+ | 'OT_PD_ENABLE_ABSORBANCE_READER'
// flags that are not in this list only show in prerelease mode
export const userFacingFlags: FlagTypes[] = [
'OT_PD_DISABLE_MODULE_RESTRICTIONS',
'OT_PD_ALLOW_ALL_TIPRACKS',
]
-export const allFlags: FlagTypes[] = [...userFacingFlags, 'PRERELEASE_MODE']
+export const allFlags: FlagTypes[] = [
+ ...userFacingFlags,
+ 'PRERELEASE_MODE',
+ 'OT_PD_ENABLE_ABSORBANCE_READER',
+]
export type Flags = Partial>
diff --git a/protocol-designer/src/localization/en/feature_flags.json b/protocol-designer/src/localization/en/feature_flags.json
index 7f2f9883bbdc..4902fa784d7e 100644
--- a/protocol-designer/src/localization/en/feature_flags.json
+++ b/protocol-designer/src/localization/en/feature_flags.json
@@ -11,5 +11,9 @@
"OT_PD_ALLOW_ALL_TIPRACKS": {
"title": "Allow all tip rack options",
"description": "Enable selection of all tip racks for each pipette."
+ },
+ "OT_PD_ENABLE_ABSORBANCE_READER": {
+ "title": "Enable absorbance plate reader",
+ "description": "Enable absorbance plate reader support."
}
}
diff --git a/protocol-designer/src/localization/en/modules.json b/protocol-designer/src/localization/en/modules.json
index 0f7911f45c42..9774e98a3393 100644
--- a/protocol-designer/src/localization/en/modules.json
+++ b/protocol-designer/src/localization/en/modules.json
@@ -13,14 +13,16 @@
"magneticModuleType": "Magnetic",
"thermocyclerModuleType": "Thermocycler",
"heaterShakerModuleType": "Heater-Shaker",
- "magneticBlockType": "Magnetic Block"
+ "magneticBlockType": "Magnetic Block",
+ "absorbanceReaderType": "Absorbance Plate Reader"
},
"module_long_names": {
"temperatureModuleType": "Temperature module",
"magneticModuleType": "Magnetic module",
"thermocyclerModuleType": "Thermocycler module",
"heaterShakerModuleType": "Heater-Shaker module",
- "magneticBlockType": "Magnetic block"
+ "magneticBlockType": "Magnetic block",
+ "absorbanceReaderType": "Absorbance Plate Reader"
},
"model_display_name": {
"temperatureModuleV1": "GEN1",
@@ -31,7 +33,8 @@
"thermocyclerModuleV2": "GEN2",
"heaterShakerModuleV1": "GEN1",
"magneticBlockV1": "GEN1",
- "gripperV1": "GEN1"
+ "gripperV1": "GEN1",
+ "absorbanceReaderV1": "GEN1"
},
"status": {
"engaged": "engaged",
diff --git a/protocol-designer/src/modules/moduleData.ts b/protocol-designer/src/modules/moduleData.ts
index 240a2e11eae9..c6d8d4ec00c3 100644
--- a/protocol-designer/src/modules/moduleData.ts
+++ b/protocol-designer/src/modules/moduleData.ts
@@ -8,6 +8,7 @@ import {
MOVABLE_TRASH_ADDRESSABLE_AREAS,
WASTE_CHUTE_ADDRESSABLE_AREAS,
FIXED_TRASH_ID,
+ ABSORBANCE_READER_TYPE,
} from '@opentrons/shared-data'
import { SPAN7_8_10_11_SLOT } from '../constants'
import { getStagingAreaAddressableAreas } from '../utils'
@@ -28,6 +29,7 @@ export const SUPPORTED_MODULE_TYPES: ModuleType[] = [
MAGNETIC_MODULE_TYPE,
TEMPERATURE_MODULE_TYPE,
THERMOCYCLER_MODULE_TYPE,
+ ABSORBANCE_READER_TYPE,
]
type SupportedSlotMap = Record
export const SUPPORTED_MODULE_SLOTS_OT2: SupportedSlotMap = {
@@ -61,6 +63,7 @@ export const SUPPORTED_MODULE_SLOTS_OT2: SupportedSlotMap = {
value: '1',
},
],
+ [ABSORBANCE_READER_TYPE]: [],
}
export const SUPPORTED_MODULE_SLOTS_FLEX: SupportedSlotMap = {
[MAGNETIC_MODULE_TYPE]: [
@@ -93,6 +96,12 @@ export const SUPPORTED_MODULE_SLOTS_FLEX: SupportedSlotMap = {
value: 'D2',
},
],
+ [ABSORBANCE_READER_TYPE]: [
+ {
+ name: 'Slot D3',
+ value: 'D3',
+ },
+ ],
}
const ALL_MODULE_SLOTS_OT2: DropdownOption[] = [
diff --git a/protocol-designer/src/step-forms/selectors/index.ts b/protocol-designer/src/step-forms/selectors/index.ts
index 372ea86f0a22..51a2eaee7780 100644
--- a/protocol-designer/src/step-forms/selectors/index.ts
+++ b/protocol-designer/src/step-forms/selectors/index.ts
@@ -11,6 +11,7 @@ import {
THERMOCYCLER_MODULE_TYPE,
HEATERSHAKER_MODULE_TYPE,
MAGNETIC_BLOCK_TYPE,
+ ABSORBANCE_READER_TYPE,
getPipetteSpecsV2,
} from '@opentrons/shared-data'
import { TEMPERATURE_DEACTIVATED } from '@opentrons/step-generation'
@@ -68,6 +69,7 @@ import type {
ThermocyclerModuleState,
HeaterShakerModuleState,
MagneticBlockState,
+ AbsorbanceReaderState,
} from '../types'
import type {
PresavedStepFormState,
@@ -205,6 +207,9 @@ const HEATERSHAKER_MODULE_INITIAL_STATE: HeaterShakerModuleState = {
const MAGNETIC_BLOCK_INITIAL_STATE: MagneticBlockState = {
type: MAGNETIC_BLOCK_TYPE,
}
+const ABSORBANCE_READER_INITIAL_STATE: AbsorbanceReaderState = {
+ type: ABSORBANCE_READER_TYPE,
+}
const _getInitialDeckSetup = (
initialSetupStep: FormData,
@@ -296,6 +301,14 @@ const _getInitialDeckSetup = (
slot,
moduleState: MAGNETIC_BLOCK_INITIAL_STATE,
}
+ case ABSORBANCE_READER_TYPE:
+ return {
+ id: moduleEntity.id,
+ model: moduleEntity.model,
+ type: ABSORBANCE_READER_TYPE,
+ slot,
+ moduleState: ABSORBANCE_READER_INITIAL_STATE,
+ }
}
}
),
@@ -599,13 +612,15 @@ export const getInvariantContext: Selector<
getAdditionalEquipmentEntities,
featureFlagSelectors.getDisableModuleRestrictions,
featureFlagSelectors.getAllowAllTipracks,
+ featureFlagSelectors.getEnableAbsorbanceReader,
(
labwareEntities,
moduleEntities,
pipetteEntities,
additionalEquipmentEntities,
disableModuleRestrictions,
- allowAllTipracks
+ allowAllTipracks,
+ enableAbsorbanceReader
) => ({
labwareEntities,
moduleEntities,
@@ -614,6 +629,7 @@ export const getInvariantContext: Selector<
config: {
OT_PD_ALLOW_ALL_TIPRACKS: Boolean(allowAllTipracks),
OT_PD_DISABLE_MODULE_RESTRICTIONS: Boolean(disableModuleRestrictions),
+ OT_PD_ENABLE_ABSORBANCE_READER: Boolean(enableAbsorbanceReader),
},
})
)
diff --git a/protocol-designer/src/step-forms/types.ts b/protocol-designer/src/step-forms/types.ts
index bffcda77c798..b170a1288439 100644
--- a/protocol-designer/src/step-forms/types.ts
+++ b/protocol-designer/src/step-forms/types.ts
@@ -7,6 +7,7 @@ import type {
THERMOCYCLER_MODULE_TYPE,
HEATERSHAKER_MODULE_TYPE,
MAGNETIC_BLOCK_TYPE,
+ ABSORBANCE_READER_TYPE,
NozzleConfigurationStyle,
} from '@opentrons/shared-data'
import type { DeckSlot } from '../types'
@@ -61,6 +62,9 @@ export interface HeaterShakerModuleState {
export interface MagneticBlockState {
type: typeof MAGNETIC_BLOCK_TYPE
}
+export interface AbsorbanceReaderState {
+ type: typeof ABSORBANCE_READER_TYPE
+}
export interface ModuleTemporalProperties {
slot: DeckSlot
moduleState:
@@ -69,6 +73,7 @@ export interface ModuleTemporalProperties {
| ThermocyclerModuleState
| HeaterShakerModuleState
| MagneticBlockState
+ | AbsorbanceReaderState
}
export type ModuleOnDeck = ModuleEntity & ModuleTemporalProperties
export type ModulesForEditModulesCard = Partial<
diff --git a/protocol-designer/src/ui/modules/utils.ts b/protocol-designer/src/ui/modules/utils.ts
index 54b7b4c4b762..80560fab6ec0 100644
--- a/protocol-designer/src/ui/modules/utils.ts
+++ b/protocol-designer/src/ui/modules/utils.ts
@@ -86,6 +86,8 @@ export const getModuleShortNames = (type: ModuleType): string => {
return 'Temperature Module'
case 'thermocyclerModuleType':
return 'Thermocycler'
+ case 'absorbanceReaderType':
+ return 'Absorbance Reader'
}
}
diff --git a/protocol-designer/src/utils/labwareModuleCompatibility.ts b/protocol-designer/src/utils/labwareModuleCompatibility.ts
index 2c6b6c0913bc..30b62883ec94 100644
--- a/protocol-designer/src/utils/labwareModuleCompatibility.ts
+++ b/protocol-designer/src/utils/labwareModuleCompatibility.ts
@@ -5,6 +5,7 @@ import {
THERMOCYCLER_MODULE_TYPE,
HEATERSHAKER_MODULE_TYPE,
MAGNETIC_BLOCK_TYPE,
+ ABSORBANCE_READER_TYPE,
} from '@opentrons/shared-data'
import type { LabwareDefByDefURI } from '../labware-defs'
import type { LabwareOnDeck } from '../step-forms'
@@ -66,6 +67,7 @@ export const COMPATIBLE_LABWARE_ALLOWLIST_BY_MODULE_TYPE: Record<
'armadillo_96_wellplate_200ul_pcr_full_skirt',
'biorad_96_wellplate_200ul_pcr',
],
+ [ABSORBANCE_READER_TYPE]: [],
}
export const getLabwareIsCompatible = (
def: LabwareDefinition2,
diff --git a/robot-server/robot_server/modules/module_data_mapper.py b/robot-server/robot_server/modules/module_data_mapper.py
index dafcf4e3fce5..6b7ca918e095 100644
--- a/robot-server/robot_server/modules/module_data_mapper.py
+++ b/robot-server/robot_server/modules/module_data_mapper.py
@@ -11,11 +11,14 @@
TemperatureStatus,
HeaterShakerStatus,
SpeedStatus,
+ AbsorbanceReaderStatus,
)
from opentrons.hardware_control.modules.magdeck import OFFSET_TO_LABWARE_BOTTOM
from opentrons.drivers.types import (
ThermocyclerLidStatus,
HeaterShakerLabwareLatchStatus,
+ AbsorbanceReaderLidStatus,
+ AbsorbanceReaderPlatePresence,
)
from opentrons.drivers.rpi_drivers.types import USBPort as HardwareUSBPort
@@ -34,6 +37,8 @@
ThermocyclerModuleData,
HeaterShakerModule,
HeaterShakerModuleData,
+ AbsorbanceReaderModule,
+ AbsorbanceReaderModuleData,
UsbPort,
)
@@ -131,6 +136,19 @@ def map_data(
targetTemperature=cast(float, live_data["data"].get("targetTemp")),
errorDetails=cast(str, live_data["data"].get("errorDetails")),
)
+ elif module_type == ModuleType.ABSORBANCE_READER:
+ module_cls = AbsorbanceReaderModule
+ module_data = AbsorbanceReaderModuleData(
+ status=AbsorbanceReaderStatus(live_data["status"]),
+ lidStatus=cast(
+ AbsorbanceReaderLidStatus, live_data["data"].get("lidStatus")
+ ),
+ platePresence=cast(
+ AbsorbanceReaderPlatePresence,
+ live_data["data"].get("platePresence"),
+ ),
+ sampleWavelength=cast(int, live_data["data"].get("sampleWavelength")),
+ )
else:
assert False, f"Invalid module type {module_type}"
diff --git a/robot-server/robot_server/modules/module_models.py b/robot-server/robot_server/modules/module_models.py
index f05e2ff0a99c..3f59911cd398 100644
--- a/robot-server/robot_server/modules/module_models.py
+++ b/robot-server/robot_server/modules/module_models.py
@@ -12,10 +12,13 @@
MagneticStatus,
HeaterShakerStatus,
SpeedStatus,
+ AbsorbanceReaderStatus,
)
from opentrons.drivers.types import (
ThermocyclerLidStatus,
HeaterShakerLabwareLatchStatus,
+ AbsorbanceReaderLidStatus,
+ AbsorbanceReaderPlatePresence,
)
from opentrons.protocol_engine import ModuleModel
from opentrons.protocol_engine.types import Vec3f
@@ -305,11 +308,47 @@ class HeaterShakerModule(
data: HeaterShakerModuleData
+class AbsorbanceReaderModuleData(BaseModel):
+ """Live data from an Absorbance Reader module."""
+
+ status: AbsorbanceReaderStatus = Field(
+ ...,
+ description="Overall status of the module.",
+ )
+ lidStatus: AbsorbanceReaderLidStatus = Field(
+ ...,
+ description="Lid status.",
+ )
+ platePresence: AbsorbanceReaderPlatePresence = Field(
+ ...,
+ description="Plate presence status.",
+ )
+ sampleWavelength: int = Field(
+ ...,
+ description="The current sample wavelength, in nanometers.",
+ )
+
+
+class AbsorbanceReaderModule(
+ _GenericModule[
+ Literal[ModuleType.ABSORBANCE_READER],
+ Literal[ModuleModel.ABSORBANCE_READER_V1],
+ AbsorbanceReaderModuleData,
+ ]
+):
+ """An attached Heater-Shaker Module."""
+
+ moduleType: Literal[ModuleType.ABSORBANCE_READER]
+ moduleModel: Literal[ModuleModel.ABSORBANCE_READER_V1]
+ data: AbsorbanceReaderModuleData
+
+
AttachedModule = Union[
TemperatureModule,
MagneticModule,
ThermocyclerModule,
HeaterShakerModule,
+ AbsorbanceReaderModule,
]
@@ -318,4 +357,5 @@ class HeaterShakerModule(
MagneticModuleData,
ThermocyclerModuleData,
HeaterShakerModuleData,
+ AbsorbanceReaderModuleData,
]
diff --git a/robot-server/tests/deck_configuration/test_validation.py b/robot-server/tests/deck_configuration/test_validation.py
index 24aecf9117a4..3f8de00a60b4 100644
--- a/robot-server/tests/deck_configuration/test_validation.py
+++ b/robot-server/tests/deck_configuration/test_validation.py
@@ -226,6 +226,7 @@ def test_unrecognized_cutout_fixture() -> None:
"heaterShakerModuleV1",
"temperatureModuleV2",
"magneticBlockV1",
+ "absorbanceReaderV1",
"stagingAreaSlotWithMagneticBlockV1",
]
),
diff --git a/shared-data/command/schemas/8.json b/shared-data/command/schemas/8.json
index 5aea97fe94f9..dc58d5445108 100644
--- a/shared-data/command/schemas/8.json
+++ b/shared-data/command/schemas/8.json
@@ -61,6 +61,8 @@
"thermocycler/openLid": "#/definitions/OpenLidCreate",
"thermocycler/closeLid": "#/definitions/CloseLidCreate",
"thermocycler/runProfile": "#/definitions/RunProfileCreate",
+ "absorbanceReader/initialize": "#/definitions/InitializeCreate",
+ "absorbanceReader/measure": "#/definitions/MeasureAbsorbanceCreate",
"calibration/calibrateGripper": "#/definitions/CalibrateGripperCreate",
"calibration/calibratePipette": "#/definitions/CalibratePipetteCreate",
"calibration/calibrateModule": "#/definitions/CalibrateModuleCreate",
@@ -236,6 +238,12 @@
{
"$ref": "#/definitions/RunProfileCreate"
},
+ {
+ "$ref": "#/definitions/InitializeCreate"
+ },
+ {
+ "$ref": "#/definitions/MeasureAbsorbanceCreate"
+ },
{
"$ref": "#/definitions/CalibrateGripperCreate"
},
@@ -1521,7 +1529,8 @@
"thermocyclerModuleV1",
"thermocyclerModuleV2",
"heaterShakerModuleV1",
- "magneticBlockV1"
+ "magneticBlockV1",
+ "absorbanceReaderV1"
],
"type": "string"
},
@@ -3721,6 +3730,102 @@
},
"required": ["params"]
},
+ "InitializeParams": {
+ "title": "InitializeParams",
+ "description": "Input parameters to initialize an absorbance reading.",
+ "type": "object",
+ "properties": {
+ "moduleId": {
+ "title": "Moduleid",
+ "description": "Unique ID of the absorbance reader.",
+ "type": "string"
+ },
+ "sampleWavelength": {
+ "title": "Samplewavelength",
+ "description": "Sample wavelength in nm.",
+ "type": "integer"
+ }
+ },
+ "required": ["moduleId", "sampleWavelength"]
+ },
+ "InitializeCreate": {
+ "title": "InitializeCreate",
+ "description": "A request to execute an Absorbance Reader measurement.",
+ "type": "object",
+ "properties": {
+ "commandType": {
+ "title": "Commandtype",
+ "default": "absorbanceReader/initialize",
+ "enum": ["absorbanceReader/initialize"],
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/definitions/InitializeParams"
+ },
+ "intent": {
+ "description": "The reason the command was added. If not specified or `protocol`, the command will be treated as part of the protocol run itself, and added to the end of the existing command queue.\n\nIf `setup`, the command will be treated as part of run setup. A setup command may only be enqueued if the run has not started.\n\nUse setup commands for activities like pre-run calibration checks and module setup, like pre-heating.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/CommandIntent"
+ }
+ ]
+ },
+ "key": {
+ "title": "Key",
+ "description": "A key value, unique in this run, that can be used to track the same logical command across multiple runs of the same protocol. If a value is not provided, one will be generated.",
+ "type": "string"
+ }
+ },
+ "required": ["params"]
+ },
+ "MeasureAbsorbanceParams": {
+ "title": "MeasureAbsorbanceParams",
+ "description": "Input parameters for a single absorbance reading.",
+ "type": "object",
+ "properties": {
+ "moduleId": {
+ "title": "Moduleid",
+ "description": "Unique ID of the Absorbance Reader.",
+ "type": "string"
+ },
+ "sampleWavelength": {
+ "title": "Samplewavelength",
+ "description": "Sample wavelength in nm.",
+ "type": "integer"
+ }
+ },
+ "required": ["moduleId", "sampleWavelength"]
+ },
+ "MeasureAbsorbanceCreate": {
+ "title": "MeasureAbsorbanceCreate",
+ "description": "A request to execute an Absorbance Reader measurement.",
+ "type": "object",
+ "properties": {
+ "commandType": {
+ "title": "Commandtype",
+ "default": "absorbanceReader/measure",
+ "enum": ["absorbanceReader/measure"],
+ "type": "string"
+ },
+ "params": {
+ "$ref": "#/definitions/MeasureAbsorbanceParams"
+ },
+ "intent": {
+ "description": "The reason the command was added. If not specified or `protocol`, the command will be treated as part of the protocol run itself, and added to the end of the existing command queue.\n\nIf `setup`, the command will be treated as part of run setup. A setup command may only be enqueued if the run has not started.\n\nUse setup commands for activities like pre-run calibration checks and module setup, like pre-heating.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/CommandIntent"
+ }
+ ]
+ },
+ "key": {
+ "title": "Key",
+ "description": "A key value, unique in this run, that can be used to track the same logical command across multiple runs of the same protocol. If a value is not provided, one will be generated.",
+ "type": "string"
+ }
+ },
+ "required": ["params"]
+ },
"CalibrateGripperParamsJaw": {
"title": "CalibrateGripperParamsJaw",
"description": "An enumeration.",
diff --git a/shared-data/deck/definitions/5/ot3_standard.json b/shared-data/deck/definitions/5/ot3_standard.json
index 85dcbf64792e..0cd6c72f49d1 100644
--- a/shared-data/deck/definitions/5/ot3_standard.json
+++ b/shared-data/deck/definitions/5/ot3_standard.json
@@ -672,6 +672,50 @@
"zDimension": 0
},
"displayName": "Magnetic Block in A3"
+ },
+ {
+ "id": "absorbanceReaderV1D3",
+ "areaType": "absorbanceReader",
+ "offsetFromCutoutFixture": [0.0, 0.0, 10.65],
+ "boundingBox": {
+ "xDimension": 127.8,
+ "yDimension": 85.5,
+ "zDimension": 0
+ },
+ "displayName": "Absorbance Reader in D3"
+ },
+ {
+ "id": "absorbanceReaderV1C3",
+ "areaType": "absorbanceReader",
+ "offsetFromCutoutFixture": [0.0, 0.0, 10.65],
+ "boundingBox": {
+ "xDimension": 127.8,
+ "yDimension": 85.5,
+ "zDimension": 0
+ },
+ "displayName": "Absorbance Reader in C3"
+ },
+ {
+ "id": "absorbanceReaderV1B3",
+ "areaType": "absorbanceReader",
+ "offsetFromCutoutFixture": [0.0, 0.0, 10.65],
+ "boundingBox": {
+ "xDimension": 127.8,
+ "yDimension": 85.5,
+ "zDimension": 0
+ },
+ "displayName": "Absorbance Reader in B3"
+ },
+ {
+ "id": "absorbanceReaderV1A3",
+ "areaType": "absorbanceReader",
+ "offsetFromCutoutFixture": [0.0, 0.0, 10.65],
+ "boundingBox": {
+ "xDimension": 127.8,
+ "yDimension": 85.5,
+ "zDimension": 0
+ },
+ "displayName": "Absorbance Reader in A3"
}
],
"cutouts": [
@@ -1023,6 +1067,20 @@
},
"fixtureGroup": {},
"height": 38.0
+ },
+ {
+ "id": "absorbanceReaderV1",
+ "expectOpentronsModuleSerialNumber": true,
+ "mayMountTo": ["cutoutD3", "cutoutC3", "cutoutB3", "cutoutA3"],
+ "displayName": "Slot With an Absorbance Reader and a Lid Dock",
+ "providesAddressableAreas": {
+ "cutoutD3": ["absorbanceReaderV1D3"],
+ "cutoutC3": ["absorbanceReaderV1C3"],
+ "cutoutB3": ["absorbanceReaderV1B3"],
+ "cutoutA3": ["absorbanceReaderV1A3"]
+ },
+ "fixtureGroup": {},
+ "height": 10.65
}
],
"gripperOffsets": {
diff --git a/shared-data/deck/types/schemaV5.ts b/shared-data/deck/types/schemaV5.ts
index e763b893bdeb..e558f3f44f61 100644
--- a/shared-data/deck/types/schemaV5.ts
+++ b/shared-data/deck/types/schemaV5.ts
@@ -56,6 +56,10 @@ export type FlexAddressableAreaName =
| 'magneticBlockV1B3'
| 'magneticBlockV1C3'
| 'magneticBlockV1D3'
+ | 'absorbanceReaderV1A3'
+ | 'absorbanceReaderV1B3'
+ | 'absorbanceReaderV1C3'
+ | 'absorbanceReaderV1D3'
export type OT2AddressableAreaName =
| '1'
@@ -126,6 +130,7 @@ export type FlexModuleCutoutFixtureId =
| 'stagingAreaSlotWithMagneticBlockV1'
| 'thermocyclerModuleV2Rear'
| 'thermocyclerModuleV2Front'
+ | 'absorbanceReaderV1'
export type OT2SingleStandardSlot = 'singleStandardSlot'
diff --git a/shared-data/js/constants.ts b/shared-data/js/constants.ts
index 71b4813c07ef..d1ce19a8a561 100644
--- a/shared-data/js/constants.ts
+++ b/shared-data/js/constants.ts
@@ -41,6 +41,7 @@ export const THERMOCYCLER_MODULE_V2: 'thermocyclerModuleV2' =
'thermocyclerModuleV2'
export const HEATERSHAKER_MODULE_V1: 'heaterShakerModuleV1' =
'heaterShakerModuleV1'
+export const ABSORBANCE_READER_V1: 'absorbanceReaderV1' = 'absorbanceReaderV1'
export const MAGNETIC_BLOCK_V1: 'magneticBlockV1' = 'magneticBlockV1'
@@ -75,6 +76,8 @@ export const THERMOCYCLER_MODULE_TYPE: 'thermocyclerModuleType' =
export const HEATERSHAKER_MODULE_TYPE: 'heaterShakerModuleType' =
'heaterShakerModuleType'
export const MAGNETIC_BLOCK_TYPE: 'magneticBlockType' = 'magneticBlockType'
+export const ABSORBANCE_READER_TYPE: 'absorbanceReaderType' =
+ 'absorbanceReaderType'
export const MAGNETIC_MODULE_MODELS = [MAGNETIC_MODULE_V1, MAGNETIC_MODULE_V2]
@@ -92,6 +95,8 @@ export const THERMOCYCLER_MODULE_MODELS = [
export const HEATERSHAKER_MODULE_MODELS = [HEATERSHAKER_MODULE_V1]
+export const ABSORBANCE_READER_MODELS = [ABSORBANCE_READER_V1]
+
export const MAGNETIC_BLOCK_MODELS = [MAGNETIC_BLOCK_V1]
export const MODULE_MODELS = [
@@ -100,6 +105,7 @@ export const MODULE_MODELS = [
...THERMOCYCLER_MODULE_MODELS,
...HEATERSHAKER_MODULE_MODELS,
...MAGNETIC_BLOCK_MODELS,
+ ...ABSORBANCE_READER_MODELS,
]
export const MODULE_MODELS_OT2_ONLY = [
@@ -114,6 +120,7 @@ export const MODULE_TYPES = [
THERMOCYCLER_MODULE_TYPE,
HEATERSHAKER_MODULE_TYPE,
MAGNETIC_BLOCK_TYPE,
+ ABSORBANCE_READER_TYPE,
]
export const GEN_ONE_MULTI_PIPETTES = ['p10_multi', 'p50_multi', 'p300_multi']
@@ -239,6 +246,12 @@ export const HEATER_SHAKER_CUTOUTS: CutoutId[] = [
...SINGLE_LEFT_CUTOUTS,
]
export const THERMOCYCLER_MODULE_CUTOUTS: CutoutId[] = ['cutoutA1', 'cutoutB1']
+export const ABSORBANCE_READER_CUTOUTS: CutoutId[] = [
+ 'cutoutA3',
+ 'cutoutB3',
+ 'cutoutC3',
+ 'cutoutD3',
+]
export const WASTE_CHUTE_CUTOUT: 'cutoutD3' = 'cutoutD3'
@@ -344,6 +357,14 @@ export const MAGNETIC_BLOCK_C3_ADDRESSABLE_AREA: 'magneticBlockV1C3' =
'magneticBlockV1C3'
export const MAGNETIC_BLOCK_D3_ADDRESSABLE_AREA: 'magneticBlockV1D3' =
'magneticBlockV1D3'
+export const ABSORBANCE_READER_D3_ADDRESSABLE_AREA: 'absorbanceReaderV1D3' =
+ 'absorbanceReaderV1D3'
+export const ABSORBANCE_READER_C3_ADDRESSABLE_AREA: 'absorbanceReaderV1C3' =
+ 'absorbanceReaderV1C3'
+export const ABSORBANCE_READER_B3_ADDRESSABLE_AREA: 'absorbanceReaderV1B3' =
+ 'absorbanceReaderV1B3'
+export const ABSORBANCE_READER_A3_ADDRESSABLE_AREA: 'absorbanceReaderV1A3' =
+ 'absorbanceReaderV1A3'
export const MAGNETIC_BLOCK_ADDRESSABLE_AREAS: AddressableAreaName[] = [
MAGNETIC_BLOCK_A1_ADDRESSABLE_AREA,
@@ -382,8 +403,16 @@ export const HEATERSHAKER_ADDRESSABLE_AREAS: AddressableAreaName[] = [
HEATERSHAKER_D3_ADDRESSABLE_AREA,
]
+export const ABSORBANCE_READER_ADDRESSABLE_AREAS: AddressableAreaName[] = [
+ ABSORBANCE_READER_A3_ADDRESSABLE_AREA,
+ ABSORBANCE_READER_B3_ADDRESSABLE_AREA,
+ ABSORBANCE_READER_C3_ADDRESSABLE_AREA,
+ ABSORBANCE_READER_D3_ADDRESSABLE_AREA,
+]
+
export const FLEX_USB_MODULE_ADDRESSABLE_AREAS: AddressableAreaName[] = [
THERMOCYCLER_ADDRESSABLE_AREA,
+ ...ABSORBANCE_READER_ADDRESSABLE_AREAS,
...HEATERSHAKER_ADDRESSABLE_AREAS,
...TEMPERATURE_MODULE_ADDRESSABLE_AREAS,
]
@@ -488,6 +517,8 @@ export const THERMOCYCLER_V2_REAR_FIXTURE: 'thermocyclerModuleV2Rear' =
'thermocyclerModuleV2Rear'
export const THERMOCYCLER_V2_FRONT_FIXTURE: 'thermocyclerModuleV2Front' =
'thermocyclerModuleV2Front'
+export const ABSORBANCE_READER_V1_FIXTURE: 'absorbanceReaderV1' =
+ 'absorbanceReaderV1'
export const MODULE_FIXTURES_BY_MODEL: {
[moduleModel in ModuleModel]?: CutoutFixtureId[]
@@ -499,6 +530,7 @@ export const MODULE_FIXTURES_BY_MODEL: {
THERMOCYCLER_V2_REAR_FIXTURE,
THERMOCYCLER_V2_FRONT_FIXTURE,
],
+ [ABSORBANCE_READER_V1]: [ABSORBANCE_READER_V1_FIXTURE],
}
export const FLEX_USB_MODULE_FIXTURES: CutoutFixtureId[] = [
@@ -506,6 +538,7 @@ export const FLEX_USB_MODULE_FIXTURES: CutoutFixtureId[] = [
TEMPERATURE_MODULE_V2_FIXTURE,
THERMOCYCLER_V2_REAR_FIXTURE,
THERMOCYCLER_V2_FRONT_FIXTURE,
+ ABSORBANCE_READER_V1_FIXTURE,
]
export const MAGNETIC_BLOCK_FIXTURES: CutoutFixtureId[] = [
diff --git a/shared-data/js/fixtures.ts b/shared-data/js/fixtures.ts
index 057bce01503d..4f13a8b03210 100644
--- a/shared-data/js/fixtures.ts
+++ b/shared-data/js/fixtures.ts
@@ -38,6 +38,8 @@ import {
THERMOCYCLER_V2_REAR_FIXTURE,
THERMOCYCLER_MODULE_V2,
THERMOCYCLER_V2_FRONT_FIXTURE,
+ ABSORBANCE_READER_V1_FIXTURE,
+ ABSORBANCE_READER_V1,
MODULE_FIXTURES_BY_MODEL,
STAGING_AREA_SLOT_WITH_MAGNETIC_BLOCK_V1_FIXTURE,
} from './constants'
@@ -282,6 +284,12 @@ export function getFixtureDisplayName(
THERMOCYCLER_MODULE_V2
)} in USB-${usbPortNumber}`
: getModuleDisplayName(THERMOCYCLER_MODULE_V2)
+ case ABSORBANCE_READER_V1_FIXTURE:
+ return usbPortNumber != null
+ ? `${getModuleDisplayName(
+ ABSORBANCE_READER_V1
+ )} in USB-${usbPortNumber}`
+ : getModuleDisplayName(ABSORBANCE_READER_V1)
default:
return 'Slot'
}
diff --git a/shared-data/js/helpers/getModuleVizDims.ts b/shared-data/js/helpers/getModuleVizDims.ts
index 91ac2c226541..30e2f654f8bc 100644
--- a/shared-data/js/helpers/getModuleVizDims.ts
+++ b/shared-data/js/helpers/getModuleVizDims.ts
@@ -1,17 +1,7 @@
// NOTE: Ian 2019-10-24 these are by-eye numbers that intentionally
// ignore the real-life data to emphasize overhangs etc
-import {
- MAGNETIC_MODULE_TYPE,
- TEMPERATURE_MODULE_TYPE,
- THERMOCYCLER_MODULE_TYPE,
- HEATERSHAKER_MODULE_TYPE,
- STD_SLOT_X_DIM as SLOT_X,
- STD_SLOT_Y_DIM as SLOT_Y,
- STD_SLOT_DIVIDER_WIDTH as DIVIDER,
- SPAN7_8_10_11_SLOT,
- MAGNETIC_BLOCK_TYPE,
-} from '../constants'
-import type { ModuleType, ModuleOrientation } from '../types'
+import { SPAN7_8_10_11_SLOT } from '../constants'
+import type { ModuleOrientation } from '../types'
// NOTE: all dims are in 'left' orientation. Rotate & transform to obtain 'right' orientation.
export interface ModuleVizDims {
@@ -24,75 +14,6 @@ export interface ModuleVizDims {
childXDimension: number
childYDimension: number
}
-const MODULE_VIZ_DIMS: Record = {
- [MAGNETIC_MODULE_TYPE]: {
- xOffset: -1 * (SLOT_X * 0.2 + DIVIDER),
- yOffset: -1 * DIVIDER,
- xDimension: SLOT_X * 1.2 + DIVIDER * 2,
- yDimension: SLOT_Y + DIVIDER * 2,
- childXOffset: 0,
- childYOffset: 0,
- childXDimension: SLOT_X,
- childYDimension: SLOT_Y,
- },
- [TEMPERATURE_MODULE_TYPE]: {
- xOffset: -1 * (SLOT_X * 0.4 + DIVIDER),
- yOffset: -1 * DIVIDER,
- xDimension: SLOT_X * 1.4 + DIVIDER * 2,
- yDimension: SLOT_Y + DIVIDER * 2,
- childXOffset: 0,
- childYOffset: 0,
- childXDimension: SLOT_X,
- childYDimension: SLOT_Y,
- },
- [THERMOCYCLER_MODULE_TYPE]: {
- xOffset: -8,
- yOffset: 0,
- xDimension: SLOT_X + DIVIDER + 32,
- yDimension: SLOT_Y * 2.4,
- childXOffset: 12,
- childYOffset: SLOT_Y,
- childXDimension: SLOT_X,
- childYDimension: SLOT_Y,
- },
- // TODO(sh, 2022-02-28): This is stubbed out using magdeck dimensions, all of this logic should be deprecated
- [HEATERSHAKER_MODULE_TYPE]: {
- xOffset: -1 * (SLOT_X * 0.2 + DIVIDER),
- yOffset: -1 * DIVIDER,
- xDimension: SLOT_X * 1.2 + DIVIDER * 2,
- yDimension: SLOT_Y + DIVIDER * 2,
- childXOffset: 0,
- childYOffset: 0,
- childXDimension: SLOT_X,
- childYDimension: SLOT_Y,
- },
- // TODO(sh, 2022-02-28): This is stubbed out using magdeck dimensions, all of this logic should be deprecated
- [MAGNETIC_BLOCK_TYPE]: {
- xOffset: -1 * (SLOT_X * 0.2 + DIVIDER),
- yOffset: -1 * DIVIDER,
- xDimension: SLOT_X * 1.2 + DIVIDER * 2,
- yDimension: SLOT_Y + DIVIDER * 2,
- childXOffset: 0,
- childYOffset: 0,
- childXDimension: SLOT_X,
- childYDimension: SLOT_Y,
- },
-}
-export const getModuleVizDims = (
- orientation: ModuleOrientation,
- moduleType: ModuleType
-): ModuleVizDims => {
- const dims = MODULE_VIZ_DIMS[moduleType]
- if (orientation === 'left') return dims
- // if orientation is 'right', get origins by rotating 180 about slot center
- return {
- ...dims,
- xOffset: SLOT_X - dims.xOffset - dims.xDimension,
- yOffset: SLOT_Y - dims.yOffset - dims.yDimension,
- childXOffset: SLOT_X - dims.childXOffset - dims.childXDimension,
- childYOffset: SLOT_Y - dims.childYOffset - dims.childYDimension,
- }
-}
type DeckSlot = string
const LEFT_SIDE_SLOTS: DeckSlot[] = ['1', '4', '7', '10', SPAN7_8_10_11_SLOT]
export const inferModuleOrientationFromSlot = (
diff --git a/shared-data/js/modules.ts b/shared-data/js/modules.ts
index c3e8f6b5c625..4771f748558c 100644
--- a/shared-data/js/modules.ts
+++ b/shared-data/js/modules.ts
@@ -6,6 +6,7 @@ import thermocyclerModuleV1 from '../module/definitions/3/thermocyclerModuleV1.j
import thermocyclerModuleV2 from '../module/definitions/3/thermocyclerModuleV2.json'
import heaterShakerModuleV1 from '../module/definitions/3/heaterShakerModuleV1.json'
import magneticBlockV1 from '../module/definitions/3/magneticBlockV1.json'
+import absorbanceReaderV1 from '../module/definitions/3/absorbanceReaderV1.json'
import {
MAGDECK,
@@ -19,6 +20,7 @@ import {
THERMOCYCLER_MODULE_V2,
HEATERSHAKER_MODULE_V1,
MAGNETIC_BLOCK_V1,
+ ABSORBANCE_READER_V1,
} from './constants'
import type {
@@ -56,6 +58,9 @@ export const getModuleDef2 = (moduleModel: ModuleModel): ModuleDefinition => {
case MAGNETIC_BLOCK_V1:
return (magneticBlockV1 as unknown) as ModuleDefinition
+ case ABSORBANCE_READER_V1:
+ return (absorbanceReaderV1 as unknown) as ModuleDefinition
+
default:
throw new Error(`Invalid module model ${moduleModel as string}`)
}
diff --git a/shared-data/js/types.ts b/shared-data/js/types.ts
index 159cd5538115..0afed5ea851b 100644
--- a/shared-data/js/types.ts
+++ b/shared-data/js/types.ts
@@ -9,11 +9,13 @@ import type {
THERMOCYCLER_MODULE_V1,
THERMOCYCLER_MODULE_V2,
HEATERSHAKER_MODULE_V1,
+ ABSORBANCE_READER_V1,
MAGNETIC_MODULE_TYPE,
TEMPERATURE_MODULE_TYPE,
THERMOCYCLER_MODULE_TYPE,
HEATERSHAKER_MODULE_TYPE,
MAGNETIC_BLOCK_TYPE,
+ ABSORBANCE_READER_TYPE,
GEN1,
GEN2,
FLEX,
@@ -203,6 +205,7 @@ export type ModuleType =
| typeof THERMOCYCLER_MODULE_TYPE
| typeof HEATERSHAKER_MODULE_TYPE
| typeof MAGNETIC_BLOCK_TYPE
+ | typeof ABSORBANCE_READER_TYPE
// ModuleModel corresponds to top-level keys in shared-data/module/definitions/2
export type MagneticModuleModel =
@@ -221,12 +224,15 @@ export type HeaterShakerModuleModel = typeof HEATERSHAKER_MODULE_V1
export type MagneticBlockModel = typeof MAGNETIC_BLOCK_V1
+export type AbsorbanceReaderModel = typeof ABSORBANCE_READER_V1
+
export type ModuleModel =
| MagneticModuleModel
| TemperatureModuleModel
| ThermocyclerModuleModel
| HeaterShakerModuleModel
| MagneticBlockModel
+ | AbsorbanceReaderModel
export type GripperModel =
| typeof GRIPPER_V1
diff --git a/shared-data/module/definitions/3/absorbanceReaderV1.json b/shared-data/module/definitions/3/absorbanceReaderV1.json
index bed2c21302ea..36da3585d6c0 100644
--- a/shared-data/module/definitions/3/absorbanceReaderV1.json
+++ b/shared-data/module/definitions/3/absorbanceReaderV1.json
@@ -5,20 +5,20 @@
"labwareOffset": {
"x": 0.0,
"y": 0.0,
- "z": 108.96
+ "z": 16.0
},
"dimensions": {
- "bareOverallHeight": 108.96,
+ "bareOverallHeight": 18.5,
"overLabwareHeight": 0.0,
- "lidHeight": 61.7,
- "xDimension": 172,
- "yDimension": 245.2,
- "labwareInterfaceXDimension": 128,
- "labwareInterfaceYDimension": 86
+ "lidHeight": 60.0,
+ "xDimension": 95.5,
+ "yDimension": 155.3,
+ "labwareInterfaceXDimension": 127.8,
+ "labwareInterfaceYDimension": 85.5
},
"cornerOffsetFromSlot": {
- "x": -22.125,
- "y": 0,
+ "x": -4.875,
+ "y": -4.875,
"z": 0
},
"calibrationPoint": {
@@ -26,14 +26,6 @@
"y": 64.93,
"z": 97.8
},
- "config": {
- "minBlockTemperature": 0,
- "maxBlockTemperature": 99,
- "minLidTemperature": 37,
- "maxLidTemperature": 110,
- "minBlockVolume": 0,
- "maxBlockVolume": 100
- },
"gripperOffsets": {
"default": {
"pickUpOffset": {
@@ -48,25 +40,12 @@
}
}
},
- "displayName": "Thermocycler Module GEN2",
+ "displayName": "Absorbance Plate Reader Module GEN1",
"quirks": [],
"slotTransforms": {
- "ot3_standard": {
- "B1": {
- "labwareOffset": [
- [1, 0, 0, -20.005],
- [0, 1, 0, -0.84],
- [0, 0, 1, -98],
- [0, 0, 0, 1]
- ],
- "cornerOffsetFromSlot": [
- [1, 0, 0, -20.005],
- [0, 1, 0, -0.84],
- [0, 0, 1, -98],
- [0, 0, 0, 1]
- ]
- }
- }
+ "ot2_standard": {},
+ "ot2_short_trash": {},
+ "ot3_standard": {}
},
"compatibleWith": [],
"incompatibleWithDecks": ["ot2_standard"],
@@ -76,30 +55,36 @@
"value": "",
"attributes": {
"version": "1.1",
- "id": "thermocycler",
+ "id": "magneticblock",
"xmlns": "http://www.w3.org/2000/svg",
"xmlns:xlink": "http://www.w3.org/1999/xlink",
- "x": "0px",
- "y": "0px",
- "viewBox": "0 0 172 258",
- "style": "enable-background:new 0 0 172 258;",
+ "width": "134",
+ "height": "96",
+ "viewBox": "0 0 134 96",
+ "style": "enable-background:new 0 0 148.6 91.8;",
"xml:space": "preserve"
},
"children": [
{
- "name": "style",
+ "name": "defs",
"type": "element",
"value": "",
- "attributes": {
- "type": "text/css"
- },
+ "attributes": {},
"children": [
{
- "name": "",
- "type": "text",
- "value": "\n.st0{fill:#FFFFFF;}\n.st1{fill:#E6E6E6;}\n",
+ "name": "style",
+ "type": "element",
+ "value": "",
"attributes": {},
- "children": []
+ "children": [
+ {
+ "name": "",
+ "type": "text",
+ "value": "\n\t\t.cls-1{fill:none;}.cls-1,.cls-2{stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:.71px;}.cls-2{fill:#e6e6e6;}",
+ "attributes": {},
+ "children": []
+ }
+ ]
}
]
},
@@ -108,695 +93,23 @@
"type": "element",
"value": "",
"attributes": {
- "id": "closed"
+ "id": "Foot_Print"
},
"children": [
{
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st0",
- "d": "M145.2,232.7V186c0-4-2.7-7.2-6-7.2H32.5c-3.3,0-5.7,3.2-5.7,7.2v46.7H0.4V0.4h171.2v232.3H145.2z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st1",
- "d": "M139.1,178.8h-106c-3.3,0-6,2.7-6,6v47.9h118v-47.9C145.1,181.5,142.4,178.8,139.1,178.8z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "rect",
- "type": "element",
- "value": "",
- "attributes": {
- "x": "4.2",
- "y": "0.4",
- "class": "st1",
- "width": "163.4",
- "height": "38.3"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st0",
- "d": "M141,191.8H31.1c-1.1,0-2,0.9-2,2v49.2c0,1.1,0.9,2,2,2H141c1.1,0,2-0.9,2-2v-49.2\n C143,192.7,142.1,191.8,141,191.8z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "rect",
- "type": "element",
- "value": "",
- "attributes": {
- "x": "32.7",
- "y": "195.4",
- "class": "st1",
- "width": "106.8",
- "height": "49.5"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st0",
- "d": "M130.8,18.5H41.2c-1.6,0-3,1.3-3,3l0,0c0,1.7,1.3,3,3,3h89.6c1.6,0,3-1.3,3-3l0,0\n C133.8,19.9,132.5,18.5,130.8,18.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M130.8,18.3H41.2c-1.7,0-3.2,1.4-3.2,3.2c0,1.7,1.4,3.2,3.2,3.2h89.6c1.7,0,3.2-1.4,3.2-3.2\n C133.9,19.8,132.5,18.3,130.8,18.3z M41.2,24.3c-1.5,0-2.8-1.3-2.8-2.8c0-1.6,1.3-2.8,2.8-2.8h89.6c1.5,0,2.8,1.3,2.8,2.8\n c0,1.6-1.3,2.8-2.8,2.8H41.2z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M4.4,0.2c-0.1,0-0.2,0.1-0.2,0.2v232.3c0,0.1,0.1,0.2,0.2,0.2c0.1,0,0.2-0.1,0.2-0.2V0.4C4.6,0.3,4.5,0.2,4.4,0.2z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
+ "name": "rect",
"type": "element",
"value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M171.6,38.3H0.4c-0.2,0-0.4,0.2-0.4,0.4S0.2,39,0.4,39h171.2c0.2,0,0.4-0.2,0.4-0.4S171.8,38.3,171.6,38.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M167.6,0.2c-0.1,0-0.2,0.1-0.2,0.2v232.4c0,0.1,0.1,0.2,0.2,0.2c0.1,0,0.2-0.1,0.2-0.2V0.4\n C167.8,0.3,167.7,0.2,167.6,0.2z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M139.5,242.3c-0.1,0-0.1,0.1-0.1,0.1v2.5c0,0.1,0.1,0.1,0.1,0.1s0.1-0.1,0.1-0.1v-2.5\n C139.6,242.4,139.5,242.3,139.5,242.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M139.1,195.1H139c-0.1,0-0.1,0.1-0.1,0.1s0.1,0.1,0.1,0.1h0.1l0.2,0.1l0.1,0.1l0,0.1c0,0.1,0.1,0.1,0.1,0.1\n s0.1-0.1,0.1-0.1v-0.1c0,0,0,0,0,0l-0.1-0.2l-0.1-0.1c0,0,0,0,0,0L139.1,195.1C139.1,195.1,139.1,195.1,139.1,195.1z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M33.1,195.1H33c0,0,0,0,0,0l-0.1,0c0,0,0,0,0,0l-0.1,0.1l-0.1,0c0,0,0,0,0,0l-0.1,0.2l0,0.1c0,0,0,0,0,0v0.1\n c0,0.1,0.1,0.1,0.1,0.1c0.1,0,0.1-0.1,0.1-0.1v0l0.1-0.1l0-0.1l0,0c0,0,0,0,0,0l0,0l0.1,0h0.1c0.1,0,0.1-0.1,0.1-0.1\n C33.2,195.2,33.1,195.1,33.1,195.1z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M32.6,242.3c-0.1,0-0.1,0.1-0.1,0.1v2.5c0,0.1,0.1,0.1,0.1,0.1c0.1,0,0.1-0.1,0.1-0.1v-2.5\n C32.7,242.4,32.6,242.3,32.6,242.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M0.4,0C0.2,0,0.1,0.2,0.1,0.4v232.3c0,0.2,0.2,0.4,0.4,0.4h28.7c0.2,0,0.4-0.2,0.4-0.4c0-0.2-0.2-0.4-0.4-0.4H0.8V0.7\n h170.5v231.7H143c-0.2,0-0.4,0.2-0.4,0.4s0.2,0.4,0.4,0.4h28.7c0.2,0,0.4-0.2,0.4-0.4V0.4c0-0.2-0.2-0.4-0.4-0.4H0.5\n C0.5,0,0.4,0,0.4,0z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M171.6,4.2H0.4c-0.1,0-0.2,0.1-0.2,0.2c0,0.1,0.1,0.2,0.2,0.2h171.2c0.1,0,0.2-0.1,0.2-0.2\n C171.8,4.3,171.7,4.2,171.6,4.2z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M150.6,12.4c-5,0-9.1,4.1-9.1,9.1s4.1,9.1,9.1,9.1s9.1-4.1,9.1-9.1S155.6,12.4,150.6,12.4z M150.6,30.2\n c-4.8,0-8.7-3.9-8.7-8.7s3.9-8.7,8.7-8.7s8.7,3.9,8.7,8.7S155.4,30.2,150.6,30.2z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "ellipse",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st0",
- "cx": "150.6",
- "cy": "21.5",
- "rx": "5.8",
- "ry": "5.8"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M150.6,15.5c-3.3,0-6,2.7-6,6s2.7,6,6,6s6-2.7,6-6S153.9,15.5,150.6,15.5z M150.6,27.2c-3.1,0-5.7-2.5-5.7-5.7\n s2.5-5.7,5.7-5.7s5.7,2.5,5.7,5.7S153.7,27.2,150.6,27.2z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "ellipse",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st1",
- "cx": "150.6",
- "cy": "21.5",
- "rx": "3.8",
- "ry": "3.8"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M150.6,17.6c-2.2,0-3.9,1.8-3.9,4s1.8,4,3.9,4c2.2,0,3.9-1.8,3.9-4C154.5,19.3,152.8,17.6,150.6,17.6z M150.6,25.1\n c-2,0-3.6-1.6-3.6-3.6s1.6-3.6,3.6-3.6s3.6,1.6,3.6,3.6S152.6,25.1,150.6,25.1z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M141,191.4H31.1c-1.3,0-2.3,1.1-2.3,2.3v51.2c0,0.2,0.2,0.4,0.4,0.4H143c0.2,0,0.4-0.2,0.4-0.4v-51.2\n C143.3,192.5,142.3,191.4,141,191.4z M29.5,244.6v-50.8c0-0.9,0.7-1.6,1.6-1.6H141c0.9,0,1.6,0.7,1.6,1.6v50.8H29.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M139,195.1H33.1c-0.4,0-0.7,0.3-0.7,0.7v49.2c0,0.1,0.1,0.2,0.2,0.2h106.9c0.1,0,0.2-0.1,0.2-0.2v-49.2\n C139.7,195.4,139.4,195.1,139,195.1z M32.8,244.8v-49c0-0.2,0.1-0.3,0.3-0.3H139c0.2,0,0.3,0.1,0.3,0.3v49H32.8z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M139.1,178.4H32.7c-3.5,0-6.3,2.8-6.3,6.3V233h0.7v-48.2c0-3.1,2.5-5.6,5.6-5.6h106.4c3.1,0,5.6,2.5,5.6,5.6v47.7h0.7\n v-47.7C145.4,181.3,142.6,178.4,139.1,178.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M51.7,79.2c-0.1,0-0.1,0.1-0.1,0.1v99.4c0,0.1,0.1,0.1,0.1,0.1c0.1,0,0.1-0.1,0.1-0.1V79.3\n C51.8,79.2,51.8,79.2,51.7,79.2z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M120.4,79.1c-0.1,0-0.2,0.1-0.2,0.2v99.4c0,0.1,0.1,0.2,0.2,0.2c0.1,0,0.2-0.1,0.2-0.2V79.3\n C120.6,79.2,120.5,79.1,120.4,79.1z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M120.4,79.1H51.6c-0.1,0-0.2,0.1-0.2,0.2c0,0.1,0.1,0.2,0.2,0.2h68.7c0.1,0,0.2-0.1,0.2-0.2\n C120.6,79.2,120.5,79.1,120.4,79.1z"
- },
- "children": []
- }
- ]
- }
- ]
- }
- ]
+ "attributes": {
+ "class": "cls-2",
+ "x": ".35",
+ "y": ".36",
+ "width": "136",
+ "height": "94",
+ "rx": "5",
+ "ry": "5"
+ },
+ "children": []
}
]
},
@@ -805,2880 +118,78 @@
"type": "element",
"value": "",
"attributes": {
- "id": "open"
+ "id": "Slot_Clips"
},
"children": [
{
- "name": "g",
+ "name": "path",
"type": "element",
"value": "",
"attributes": {
- "id": "shading_00000140696093821789790550000002253882697550769834_"
+ "class": "cls-1",
+ "d": "m17.37.36v2.6m-2-.93V.36m2,2.6c0-.52-.9-.93-2-.93m104,.93V.36m2,1.67c-1.1,0-2,.42-2,.93m2-2.6v1.67m-2,92.33v-2.6m2,.93v1.67m-2-2.6c0,.52.9.93,2,.93M5.37,2.03v1.99m.18.12c-.06-.05-.12-.08-.18-.12m.18.12c.18.14.4.22.63.22m11.19,0H6.18m11.19-1.4v1.4M5.37,2.03h10M6.18,90.35h11.19m-11.19,0c-.23,0-.45.08-.63.22m-.18.12c.06-.03.13-.07.18-.12m-.18,2.11v-1.99m10,1.99H5.37m10,0c1.1,0,2-.42,2-.93m0-1.4v1.4m-15.33-2.4h1.99m.12-.18c-.05.06-.08.12-.12.18m.12-.18c.14-.18.22-.4.22-.63m0-11.19v11.19m-1.4-11.19h1.4m-1.4,0c-.52,0-.93.9-.93,2m0,10v-10m130.33,9.19v-11.19m0,11.19c0,.23.08.45.22.63m.12.18c-.03-.06-.07-.13-.12-.18m2.11.18h-1.99m1.99-10v10m0-10c0-1.1-.42-2-.93-2m-1.4,0h1.4m-2.4,15.33v-1.99m-.18-.12c.06.05.12.08.18.12m-.18-.12c-.18-.14-.4-.22-.63-.22m-11.19,0h11.19m-11.19,1.4v-1.4m12,2.33h-10m9.19-88.33h-11.19m11.19,0c.23,0,.45-.08.63-.22m.18-.12c-.06.03-.13.07-.18.12m.18-2.11v1.99m-10-1.99h10m-12,2.33v-1.4m15.33,2.4h-1.99m-.12.18c.05-.06.08-.12.12-.18m-.12.18c-.14.18-.22.4-.22.63m0,11.19V6.18m1.4,11.19h-1.4m1.4,0c.52,0,.93-.9.93-2m0-10v10M4.37,6.18v11.19m0-11.19c0-.23-.08-.45-.22-.63m-.12-.18c.03.06.07.13.12.18m-2.11-.19h1.99m-1.99,10V5.36m0,10c0,1.1.42,2,.93,2m1.4,0h-1.4m133.4,0h-2.6m.93-2h1.67m-2.6,62h2.6m0,2h-1.67M2.97,17.37H.36m0-2h1.67m15.33,76.4v2.6m-2,0v-1.67M.36,77.35h2.6m-.93,2H.36M134.68,5.36c0-1.84-1.49-3.33-3.33-3.33m0,1.99c.81-.44,1.78.53,1.34,1.34M2.04,89.37c0,1.84,1.49,3.33,3.33,3.33M5.36,2.04c-1.84,0-3.33,1.49-3.33,3.33m129.33,87.33c1.84,0,3.33-1.49,3.33-3.33m-1.99,0c.44.81-.53,1.78-1.34,1.34m-126,0c-.81.44-1.78-.53-1.34-1.34M4.03,5.37c-.44-.81.53-1.78,1.34-1.34m112,90.34v-4m0,0h2M4.37,19.37H.36m4-2v2M.36,75.35h4m0,0v2M136.36,19.37h-4m0,0v-2m0,58h4m-4,2v-2M117.35,4.37V.36m2,4h-2M19.37.36v4m0,0h-2m2,86v4m-2-4h2"
},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st0",
- "d": "M51.7,247.3c0,2.4,0,9.8,0,11.1c0,1.4,0,2.8,1.1,3.9c1.2,1.2,2.6,1.2,4.1,1.2c1.6,0,58,0,59.1,0\n c1.3,0,2.5-0.3,3.3-1.3c1.3-1.4,1-3.3,1-5c0-1.8,0-8.4,0-9.9"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "rect",
- "type": "element",
- "value": "",
- "attributes": {
- "x": "55.6",
- "y": "246.9",
- "class": "st1",
- "width": "60.7",
- "height": "12.7"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st0",
- "d": "M171.6,38.7H0.4v206.3c0,1.1,0.9,2,2,2h167.3c1.1,0,2-0.9,2-2L171.6,38.7L171.6,38.7z"
- },
- "children": []
- },
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M171.6,38.3H0.4c-0.2,0-0.4,0.2-0.4,0.4v206.3c0,1.3,1.1,2.3,2.3,2.3h167.3c1.3,0,2.3-1.1,2.3-2.3V38.7\n C172,38.5,171.8,38.3,171.6,38.3z M0.7,39h170.6v205.9c0,0.9-0.7,1.6-1.6,1.6H2.3c-0.9,0-1.6-0.7-1.6-1.6\n C0.7,244.9,0.7,39,0.7,39z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {
- "id": "base_grey_00000027585544793631977930000012329166542688174233_"
- },
- "children": [
- {
- "name": "rect",
- "type": "element",
- "value": "",
- "attributes": {
- "x": "4.4",
- "y": "39.1",
- "class": "st1",
- "width": "163.4",
- "height": "203.4"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st0",
- "d": "M19.3,70.9v-4.4c0-1.2,1-2.2,2.2-2.2h129c1.2,0,2.2,1,2.2,2.2v4.4h-5.9c-0.6,0-1,0.4-1,1v2.5\n c0,0.6,0.4,1,1,1h5.9v65.3h-5.9c-0.6,0-1,0.4-1,1v2.5c0,0.6,0.4,1,1,1h5.9V156c0,1.2-1,2.2-2.2,2.2h-129l0,0\n c-1.2,0-2.2-1-2.2-2.2v0v-10.8h5.9c0.6,0,1-0.4,1-1v-2.5c0-0.6-0.4-1-1-1h-5.9V75.4h5.9c0.6,0,1-0.4,1-1v-2.5c0-0.6-0.4-1-1-1\n L19.3,70.9"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st0",
- "d": "M143,203v-9.2c0-1.1-0.9-2-2-2H31.1c-1.1,0-2,0.9-2,2v9.2"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "polyline",
- "type": "element",
- "value": "",
- "attributes": {
- "class": "st1",
- "points": "139.5,203.1 139.5,195.4 32.8,195.4 32.8,203.3 \t\t\t"
- },
- "children": []
- }
- ]
- }
- ]
- },
+ "children": []
+ }
+ ]
+ },
+ {
+ "name": "g",
+ "type": "element",
+ "value": "",
+ "attributes": {
+ "id": "Module_Title"
+ },
+ "children": [
{
- "name": "g",
+ "name": "path",
"type": "element",
"value": "",
"attributes": {
- "id": "stroke"
+ "class": "cls-1",
+ "d": "m73.92,6.86h-.49m0,.5h.49m-.54-.04s.02.04.04.04m2.44-2.71s.04,0,.04-.01m-.36-.03c.11,0,.24.02.32.04m-.78.68c0-.55.1-.72.46-.72m0,1.48c-.35,0-.46-.17-.46-.77m.79.73c-.08.02-.21.04-.33.04m.37-.03s-.01-.02-.04-.02m.05.38v-.36m-.02.39s.02,0,.02-.03m-.48.09c.2,0,.37-.02.46-.06m-1.4-1.13c0,.73.24,1.19.94,1.19m0-2.35c-.69,0-.94.41-.94,1.16m1.42-1.1c-.12-.04-.3-.06-.47-.06m1.83,2.92h.91m-.95-.04s.02.04.04.04m1.48-1.41c.21-.08.41-.25.41-.7m-.06,1.39c0-.39-.16-.5-.32-.6m-.6,1.32c.57,0,.92-.17.92-.72m1.44-2.16c-.09-.02-.19-.04-.32-.04m-24.18,1.46c0,1.45-1.04,2.65-2.42,2.89m-4.39-2.89c0,1.9,1.37,3.48,3.18,3.8m.69-7.67c-2.14,0-3.87,1.73-3.87,3.87m5.13.3h0m31.38-.73v-.95m.07.99c-.06,0-.07-.01-.07-.04m1.4-.95s.01-.05-.05-.05m-.72,1.17c.18-.25.67-.98.77-1.13m-1.41,1.41s.03-.04.08-.04m-1.08.43s-.01-.02-.04-.02m.05.38l-.02-.36m.01-1.83c-.12-.04-.3-.06-.47-.06m-1.67,2.13c.36-.33.35-1.57,0-1.9m-1.45,1.9c.23.3,1.22.3,1.45,0m-22.12-.81l.47,1.56m-.55-1.56s.02-.06.04-.06m-.49,1.61l.45-1.56m-.5,1.6s.04-.02.05-.04m-.8.04h.75m-.79-.04s.02.04.04.04m-.04-2.84v2.79m.04-2.84s-.04.02-.04.04m.52-.04h-.47m.52.04s-.02-.04-.04-.04m0,2.19l.03-2.15m0,2.22s-.02-.01-.02-.06m.07,0s-.02.06-.04.06m.47-1.54l-.43,1.49m.52-1.55s-.06,0-.08.06m.48-.06h-.4m.98,1.61s-.03-.02-.04-.06m.06,0s0,.05-.02.05m0-2.22l.02,2.17m.02-2.21s-.04.02-.04.04m.52-.04h-.48m.52.04s-.02-.04-.04-.04m.04,2.84v-2.79m-.04,2.84s.04-.02.04-.04m-.75.04h.71m-.77-.04s.03.04.06.04m2.52-1.33c0,.25-.12.31-.45.31m.45-.48v.17m-.02-.19l.02.02m-.52-.09l.5.06m-.23-1.4c-.76,0-.99.14-.99.63m1.73-.55c-.15-.05-.45-.08-.74-.08m.8.14s-.01-.05-.06-.06m.06,1.6v-1.53m-1.58,2.13c.16.05.46.08.74.08m-.77-.14s0,.05.02.06m0-.38l-.03.32m.09-.35s-.06,0-.06.02m.59.02c-.15,0-.39-.02-.53-.04m3.92.4l.04-.04m-.82.13c.24,0,.62-.02.79-.09m-1.88-1.04c0,.8.29,1.13,1.09,1.13m-.11-2.17c-.72,0-.98.23-.98,1.03m1.34-1.01c-.11-.01-.23-.02-.36-.02m.39-.01s0,.03-.02.03m-.51-.5c.5,0,.53.13.53.47m-1.19-.39c.16-.04.45-.08.66-.08m.06-.42c-.19,0-.62.05-.78.11m1.8.7c0-.67-.4-.81-1.02-.81m3.45.76h-.47m.51.04s-.02-.04-.04-.04m.04,1.5v-1.46m-.94,2.26c.74,0,.94-.19.94-.81m-1.82.72c.23.04.61.09.87.09m-.92-.13s.02.04.04.04m-.04-2.17v2.13m.04-2.17s-.04.02-.04.04m.51-.04h-.47m.51.04s-.02-.04-.04-.04m.04,1.81v-1.77m.04,1.81s-.04-.02-.04-.04m.34.07c-.13,0-.23,0-.3-.02m.71-.38c0,.32-.07.41-.41.41m.41-1.84v1.43m.04-1.47s-.04.02-.04.04m2.9.08s0-.03-.03-.04m0,.37l.03-.33m-.08.35l.05-.02m-.64-.08c.22,0,.47.06.6.1m-1.21.47c0-.46.22-.57.61-.57m-.59.59l-.02-.02m1.22.02h-1.2m1.31.36c0-.29-.01-.36-.11-.36m-.77,1.34c.67,0,.88-.37.88-.98m-1.89-.2c0,.76.32,1.18,1.01,1.18m.07-2.35c-.83,0-1.09.45-1.09,1.17m1.81-1.04c-.17-.08-.43-.12-.72-.12m2.37.38v-.29m-.04.33s.04,0,.04-.04m-.17.04h.13m-.31.18c0-.14.05-.18.18-.18m-.18,1.43v-1.26m.42,1.32s-.02-.04-.04-.04m.04.39v-.34m-.04.38s.04-.02.04-.04m-.4.04h.35m-.38.02l.02-.02m-.03.55v-.53m-.04.57s.04-.02.04-.04m-.51.04h.47m-.51-.04s.02.04.04.04m-.04-.57v.53m-.02-.55l.02.02m-.32-.02h.29m-.34-.04s.02.04.04.04m-.04-.38v.34m.04-.38s-.04.02-.04.04m.34-.05h-.29m.32-.02l-.02.02m.02-1.41v1.39m.51-1.85c-.34,0-.51.16-.51.47m.85-.43c-.09-.02-.22-.04-.34-.04m.83,2.72v.42m-.77-1.27l-.02-.02m1.35.41v-2.18m-.55,2.18s.02.04.04.04m0-2.26s-.04.02-.04.04m-8.66-.33s.01.03.04.02m-.09-.36l.05.33m-.02-.36l-.03.04m19.59.58c-.69,0-.94.41-.94,1.16m2.41-1.08s-.02-.04-.04-.04m-23.41.59c0,.43.1.62.72.7m24.09-1.29h-.54m-23.33,2.31c.53,0,.84-.18.84-.67m21.74-.21l.08.02m-24.74.77l-.47-1.48m-7.07,3.59l.16.91m19.16-5.17s-.02-.05-.04-.06m9.71.19c-.25-.31-1.22-.31-1.46,0m-.95,2.92s.04-.02.04-.05m-.02-3.1c-.35,0-.53.12-.53.52m-19.25.75s.03.01.04.06m26.08-1.28s-.04,0-.06.04m-7.73,1.52s-.05-.04-.05-.06m-18.04-.78c-.02-.06-.02-.07-.07-.07m15.29-.23l.02-.36m-23.52,5.17l.17-.91m32.19-4.25l-.02-.04m-.01.4l.02-.36m-.07.38s.04,0,.04-.01m-.36-.03c.11,0,.24.02.32.04m-.78.68c0-.55.1-.72.46-.72m0,1.48c-.35,0-.46-.17-.46-.77m.79.73c-.08.02-.21.04-.33.04m.36.36s.02,0,.02-.03m.98.85v-1.61m-.04,1.65s.04-.02.04-.04m-.5.04h.46m-.5-.04s.02.04.04.04m-.04-3.07v3.03m.04-3.07s-.04.02-.04.04m.5-.04h-.46m-11.84.04v2.18m12.52-1.24s-.06.04-.11.04m.54.2s.01-.04.04-.06m-.01.11l-.02-.05m.77.99c-.07-.1-.49-.64-.75-.94m.7.98s.06-.01.05-.04m-.61.04h.56m-.62-.04s.03.04.06.04m-.61-.83c.18.23.43.6.54.79m-6.2-1.68c0-.13.05-.18.18-.18m-4.49-.32l-.02-.04m-22.82,3.56l1.26-1.86m-2.53,0h0m-.29-.89c0,.33.11.64.29.89m1.26-2.44c-.85,0-1.55.69-1.55,1.55m3.09,0c0-.85-.69-1.55-1.55-1.55m1.26,2.44c.18-.25.28-.56.28-.89m-1.55-2.34c1.62,0,2.94,1.32,2.94,2.94m17.89,1.72s.04-.02.04-.04m7.19-2.91c-.36.32-.38,1.58,0,1.9m-24.19-.66c0-2.14-1.73-3.87-3.87-3.87m27.49,2.49s-.02-.05-.04-.05m.05.33v-.28m-.04.32s.04,0,.04-.04m-.35,2.73v-2.51m.18-.18h.13m-.82,2.74h.47m3.13-1.99c0,.73.24,1.19.94,1.19m-7.04-2.26v2.79m9.28-2.8c-.14.25-.44.72-.59.95m-12.49,1.65s-.04.02-.04.04m4.92-2.68h-1.04m1.89.77c0-.58-.43-.77-.85-.77m.42,1.5s0-.03.02-.04m-12.23.71v-2.12m-13.94,4.27c-1.38-.25-2.42-1.45-2.42-2.89m23.8,1.26s-.02-.04-.04-.04m-22.09-.92l1.26,1.86m20.81-3.57h-.47m.51.04s-.02-.04-.04-.04m0,2.26s.04-.02.04-.04m-.51.04h.47m10.36.04c.2,0,.37-.02.46-.06m-5.04.82s.02.05.04.05m-.04-2.64v2.59m-29.53-1.64c0-1.62,1.32-2.94,2.94-2.94m20.87,4.62v-.42m3.31-2.68s-.04.02-.04.04m-4.25,1.79h-.35m-18.84,3.39c1.81-.32,3.18-1.9,3.18-3.8m13.54.5c.32,0,.4-.17.4-.49m0,0c0-.12-.01-.12-.05-.12m0,0h-.78m0,0l-.02.03m0,0c0,.33.07.59.45.59m7.59.55c.35,0,.45-.11.45-.38m-.43-.45h-.27m-.01.83h.27m-.3-.8v.77m.04-.8s-.04,0-.04.04m.74.42c0-.35-.15-.44-.43-.45m-.31.8s0,.03.03.03m-14.28-2.11s0-.02-.03-.03m0,0c-.06-.01-.17-.02-.27-.02m0,.69h.28m0,0l.02-.02m0,0v-.62m-.71.28c0,.3.1.36.4.36m0-.69c-.33,0-.41.04-.41.34m2.34.55c0,.59.11.7.5.7m.3-.07v-1.25m0,0s0-.03-.03-.04m0,0s-.13-.02-.25-.02m0,0c-.45,0-.52.11-.52.68m.77.67l.02-.04m-.3.07c.12,0,.21-.01.27-.04m-11.92-.31c.16-.2.25-.45.25-.72m0,0c0-.65-.53-1.17-1.17-1.17m.35,1.94c.22.21.4.19.57-.05m-2.09-.72c.79,0,1.14.43,1.52.77m-.35-1.94c-.65,0-1.17.53-1.17,1.17m25.9.46h.26m-.3-.84v.8m0,0s.01.04.04.04m.75-.43c0-.35-.12-.43-.53-.43m0,0h-.24m.26.87c.29,0,.5-.08.5-.44m-.77-.43s-.03,0-.03.03m4.4.03c-.05-.12-.57-.12-.63,0m0,0c-.17.17-.18,1.15,0,1.33m.63,0c.17-.17.16-1.16,0-1.33m-.63,1.33c.05.12.58.12.63,0m0,0c.17-.17.16-1.16,0-1.33m-.63,0c-.17.17-.18,1.15,0,1.33m1.04.28c.36-.33.35-1.57,0-1.9m-1.45,0c-.36.32-.38,1.58,0,1.9"
},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M116.5,246.7h-0.4v12.7H55.8v-12.7h-0.4v12.9c0,0.1,0.1,0.2,0.2,0.2h60.7c0.1,0,0.2-0.1,0.2-0.2V246.7z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M120.4,246.6c-0.2,0-0.4,0.2-0.4,0.4v10.2c0,0.3,0,0.5,0,0.8c0,1.5,0.1,3-0.9,4.2c-0.7,0.8-1.7,1.2-3.1,1.2H56.9\n c-1.4,0-2.8,0-3.8-1.1c-1-1.1-1-2.5-1-3.8v-11.4c0-0.2-0.2-0.4-0.4-0.4s-0.4,0.2-0.4,0.4v11.4c0,1.4,0,3,1.2,4.3\n c1.3,1.3,2.8,1.3,4.4,1.3H116c1.5,0,2.7-0.5,3.6-1.5c1.2-1.3,1.1-3.1,1.1-4.6c0-0.3,0-0.5,0-0.8v-10.2\n C120.7,246.7,120.6,246.6,120.4,246.6z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {
- "id": "row_1_00000072973290214693693960000017318416397027368577_"
- },
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M45.7,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S47.3,139.7,45.7,139.7z M45.7,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S47.2,145.3,45.7,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M54.7,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S56.3,139.7,54.7,139.7z M54.7,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S56.1,145.3,54.7,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M63.6,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S65.3,139.7,63.6,139.7z M63.6,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S65.1,145.3,63.6,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M72.6,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S74.2,139.7,72.6,139.7z M72.6,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S74,145.3,72.6,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M81.6,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S83.2,139.7,81.6,139.7z M81.6,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S83,145.3,81.6,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M90.5,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S92.1,139.7,90.5,139.7z M90.5,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S91.9,145.3,90.5,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M99.5,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S101.1,139.7,99.5,139.7z M99.5,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S100.9,145.3,99.5,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M108.4,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S110.1,139.7,108.4,139.7z M108.4,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S109.9,145.3,108.4,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M117.4,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S119,139.7,117.4,139.7z M117.4,145.3\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S118.8,145.3,117.4,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M126.3,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S128,139.7,126.3,139.7z M126.3,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S127.8,145.3,126.3,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M135.3,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S137,139.7,135.3,139.7z M135.3,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S136.8,145.3,135.3,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M36.7,139.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S38.4,139.7,36.7,139.7z M36.7,145.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S38.2,145.3,36.7,145.3z"
- },
- "children": []
- }
- ]
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {
- "id": "row_1_00000153665527845359773540000012752985171215028372_"
- },
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M45.7,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S47.3,130.7,45.7,130.7z M45.7,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S47.2,136.3,45.7,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M54.7,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S56.3,130.7,54.7,130.7z M54.7,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S56.1,136.3,54.7,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M63.6,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S65.3,130.7,63.6,130.7z M63.6,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S65.1,136.3,63.6,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M72.6,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S74.2,130.7,72.6,130.7z M72.6,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S74,136.3,72.6,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M81.6,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S83.2,130.7,81.6,130.7z M81.6,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S83,136.3,81.6,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M90.5,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S92.1,130.7,90.5,130.7z M90.5,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S91.9,136.3,90.5,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M99.5,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S101.1,130.7,99.5,130.7z M99.5,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S100.9,136.3,99.5,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M108.4,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S110.1,130.7,108.4,130.7z M108.4,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S109.9,136.3,108.4,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M117.4,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S119,130.7,117.4,130.7z M117.4,136.3\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S118.8,136.3,117.4,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M126.3,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S128,130.7,126.3,130.7z M126.3,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S127.8,136.3,126.3,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M135.3,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S137,130.7,135.3,130.7z M135.3,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S136.8,136.3,135.3,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M36.7,130.7c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S38.4,130.7,36.7,130.7z M36.7,136.3c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S38.2,136.3,36.7,136.3z"
- },
- "children": []
- }
- ]
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {
- "id": "row_1_00000001654953178113305770000001548480951139594390_"
- },
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M45.7,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C48.7,123.1,47.3,121.8,45.7,121.8z M45.7,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S47.2,127.4,45.7,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M54.7,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3c1.6,0,3-1.3,3-3C57.7,123.1,56.3,121.8,54.7,121.8z M54.7,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S56.1,127.4,54.7,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M63.6,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3c1.6,0,3-1.3,3-3C66.6,123.1,65.3,121.8,63.6,121.8z M63.6,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S65.1,127.4,63.6,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M72.6,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3c1.6,0,3-1.3,3-3C75.6,123.1,74.2,121.8,72.6,121.8z M72.6,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S74,127.4,72.6,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M81.6,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C84.5,123.1,83.2,121.8,81.6,121.8z M81.6,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S83,127.4,81.6,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M90.5,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C93.5,123.1,92.1,121.8,90.5,121.8z M90.5,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S91.9,127.4,90.5,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M99.5,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C102.4,123.1,101.1,121.8,99.5,121.8z M99.5,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S100.9,127.4,99.5,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M108.4,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C111.4,123.1,110.1,121.8,108.4,121.8z M108.4,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S109.9,127.4,108.4,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M117.4,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3c1.6,0,3-1.3,3-3C120.3,123.1,119,121.8,117.4,121.8z M117.4,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S118.8,127.4,117.4,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M126.3,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C129.3,123.1,128,121.8,126.3,121.8z M126.3,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S127.8,127.4,126.3,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M135.3,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C138.3,123.1,137,121.8,135.3,121.8z M135.3,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S136.8,127.4,135.3,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M36.7,121.8c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C39.7,123.1,38.4,121.8,36.7,121.8z M36.7,127.4\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S38.2,127.4,36.7,127.4z"
- },
- "children": []
- }
- ]
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {
- "id": "row_1_00000142157505160117839040000001831267897535693211_"
- },
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M45.7,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S47.3,112.8,45.7,112.8z M45.7,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C48.3,117.2,47.2,118.4,45.7,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M54.7,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S56.3,112.8,54.7,112.8z M54.7,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C57.3,117.2,56.1,118.4,54.7,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M63.6,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S65.3,112.8,63.6,112.8z M63.6,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C66.3,117.2,65.1,118.4,63.6,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M72.6,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S74.2,112.8,72.6,112.8z M72.6,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C75.2,117.2,74,118.4,72.6,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M81.6,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S83.2,112.8,81.6,112.8z M81.6,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C84.2,117.2,83,118.4,81.6,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M90.5,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S92.1,112.8,90.5,112.8z M90.5,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C93.1,117.2,91.9,118.4,90.5,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M99.5,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S101.1,112.8,99.5,112.8z M99.5,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C102.1,117.2,100.9,118.4,99.5,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M108.4,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S110.1,112.8,108.4,112.8z M108.4,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C111,117.2,109.9,118.4,108.4,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M117.4,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S119,112.8,117.4,112.8z M117.4,118.4\n c-1.4,0-2.6-1.2-2.6-2.6c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C120,117.2,118.8,118.4,117.4,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M126.3,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S128,112.8,126.3,112.8z M126.3,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C129,117.2,127.8,118.4,126.3,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M135.3,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S137,112.8,135.3,112.8z M135.3,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C137.9,117.2,136.8,118.4,135.3,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M36.7,112.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S38.4,112.8,36.7,112.8z M36.7,118.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C39.4,117.2,38.2,118.4,36.7,118.4z"
- },
- "children": []
- }
- ]
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {
- "id": "row_1_00000023262343608832889980000007837414120611036803_"
- },
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M45.7,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S47.3,103.8,45.7,103.8z M45.7,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C48.3,108.2,47.2,109.4,45.7,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M54.7,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S56.3,103.8,54.7,103.8z M54.7,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C57.3,108.2,56.1,109.4,54.7,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M63.6,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S65.3,103.8,63.6,103.8z M63.6,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C66.3,108.2,65.1,109.4,63.6,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M72.6,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S74.2,103.8,72.6,103.8z M72.6,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C75.2,108.2,74,109.4,72.6,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M81.6,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S83.2,103.8,81.6,103.8z M81.6,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C84.2,108.2,83,109.4,81.6,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M90.5,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S92.1,103.8,90.5,103.8z M90.5,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C93.1,108.2,91.9,109.4,90.5,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M99.5,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S101.1,103.8,99.5,103.8z M99.5,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C102.1,108.2,100.9,109.4,99.5,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M108.4,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S110.1,103.8,108.4,103.8z M108.4,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C111,108.2,109.9,109.4,108.4,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M117.4,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S119,103.8,117.4,103.8z M117.4,109.4\n c-1.4,0-2.6-1.2-2.6-2.6c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C120,108.2,118.8,109.4,117.4,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M126.3,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S128,103.8,126.3,103.8z M126.3,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C129,108.2,127.8,109.4,126.3,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M135.3,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S137,103.8,135.3,103.8z M135.3,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C137.9,108.2,136.8,109.4,135.3,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M36.7,103.8c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S38.4,103.8,36.7,103.8z M36.7,109.4c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C39.4,108.2,38.2,109.4,36.7,109.4z"
- },
- "children": []
- }
- ]
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {
- "id": "row_1_00000032644834021452807300000012529714203134445742_"
- },
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M45.7,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S47.3,94.9,45.7,94.9z M45.7,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C48.3,99.3,47.2,100.5,45.7,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M54.7,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S56.3,94.9,54.7,94.9z M54.7,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C57.3,99.3,56.1,100.5,54.7,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M63.6,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S65.3,94.9,63.6,94.9z M63.6,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C66.3,99.3,65.1,100.5,63.6,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M72.6,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S74.2,94.9,72.6,94.9z M72.6,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C75.2,99.3,74,100.5,72.6,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M81.6,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S83.2,94.9,81.6,94.9z M81.6,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C84.2,99.3,83,100.5,81.6,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M90.5,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S92.1,94.9,90.5,94.9z M90.5,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C93.1,99.3,91.9,100.5,90.5,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M99.5,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S101.1,94.9,99.5,94.9z M99.5,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C102.1,99.3,100.9,100.5,99.5,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M108.4,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S110.1,94.9,108.4,94.9z M108.4,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C111,99.3,109.9,100.5,108.4,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M117.4,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S119,94.9,117.4,94.9z M117.4,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C120,99.3,118.8,100.5,117.4,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M126.3,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S128,94.9,126.3,94.9z M126.3,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C129,99.3,127.8,100.5,126.3,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M135.3,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S137,94.9,135.3,94.9z M135.3,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6C137.9,99.3,136.8,100.5,135.3,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M36.7,94.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S38.4,94.9,36.7,94.9z M36.7,100.5c-1.4,0-2.6-1.2-2.6-2.6\n c0-1.4,1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6C39.4,99.3,38.2,100.5,36.7,100.5z"
- },
- "children": []
- }
- ]
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {
- "id": "row_1_00000046301211336714059340000011006363706714132412_"
- },
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M45.7,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S47.3,85.9,45.7,85.9z M45.7,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S47.2,91.5,45.7,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M54.7,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S56.3,85.9,54.7,85.9z M54.7,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S56.1,91.5,54.7,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M63.6,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S65.3,85.9,63.6,85.9z M63.6,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S65.1,91.5,63.6,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M72.6,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S74.2,85.9,72.6,85.9z M72.6,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S74,91.5,72.6,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M81.6,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S83.2,85.9,81.6,85.9z M81.6,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S83,91.5,81.6,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M90.5,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S92.1,85.9,90.5,85.9z M90.5,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S91.9,91.5,90.5,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M99.5,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S101.1,85.9,99.5,85.9z M99.5,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S100.9,91.5,99.5,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M108.4,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S110.1,85.9,108.4,85.9z M108.4,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S109.9,91.5,108.4,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M117.4,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3c1.6,0,3-1.3,3-3S119,85.9,117.4,85.9z M117.4,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S118.8,91.5,117.4,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M126.3,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S128,85.9,126.3,85.9z M126.3,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S127.8,91.5,126.3,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M135.3,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S137,85.9,135.3,85.9z M135.3,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S136.8,91.5,135.3,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M36.7,85.9c-1.6,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S38.4,85.9,36.7,85.9z M36.7,91.5c-1.4,0-2.6-1.2-2.6-2.6\n s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S38.2,91.5,36.7,91.5z"
- },
- "children": []
- }
- ]
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {
- "id": "row_1_00000090987415974105529780000012985790832784842890_"
- },
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M45.7,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C48.7,78.2,47.3,76.9,45.7,76.9z M45.7,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S47.2,82.5,45.7,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M54.7,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3c1.6,0,3-1.3,3-3C57.7,78.2,56.3,76.9,54.7,76.9z M54.7,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S56.1,82.5,54.7,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M63.6,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3c1.6,0,3-1.3,3-3C66.6,78.2,65.3,76.9,63.6,76.9z M63.6,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S65.1,82.5,63.6,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M72.6,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3c1.6,0,3-1.3,3-3C75.6,78.2,74.2,76.9,72.6,76.9z M72.6,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S74,82.5,72.6,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M81.6,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C84.5,78.2,83.2,76.9,81.6,76.9z M81.6,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S83,82.5,81.6,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M90.5,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C93.5,78.2,92.1,76.9,90.5,76.9z M90.5,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S91.9,82.5,90.5,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M99.5,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C102.4,78.2,101.1,76.9,99.5,76.9z M99.5,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S100.9,82.5,99.5,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M108.4,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C111.4,78.2,110.1,76.9,108.4,76.9z M108.4,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S109.9,82.5,108.4,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M117.4,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3c1.6,0,3-1.3,3-3C120.3,78.2,119,76.9,117.4,76.9z M117.4,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S118.8,82.5,117.4,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M126.3,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C129.3,78.2,128,76.9,126.3,76.9z M126.3,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S127.8,82.5,126.3,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M135.3,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C138.3,78.2,137,76.9,135.3,76.9z M135.3,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6c1.4,0,2.6,1.2,2.6,2.6S136.8,82.5,135.3,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M36.7,76.9c-1.6,0-3,1.3-3,3c0,1.6,1.3,3,3,3s3-1.3,3-3C39.7,78.2,38.4,76.9,36.7,76.9z M36.7,82.5\n c-1.4,0-2.6-1.2-2.6-2.6s1.2-2.6,2.6-2.6s2.6,1.2,2.6,2.6S38.2,82.5,36.7,82.5z"
- },
- "children": []
- }
- ]
- }
- ]
- }
- ]
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M171.6,208.8H0.4c-0.1,0-0.2,0.1-0.2,0.2c0,0.1,0.1,0.2,0.2,0.2h171.3c0.1,0,0.2-0.1,0.2-0.2\n C171.8,208.9,171.7,208.8,171.6,208.8z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M171.6,212.8H0.4c-0.1,0-0.2,0.1-0.2,0.2c0,0.1,0.1,0.2,0.2,0.2h171.3c0.1,0,0.2-0.1,0.2-0.2\n C171.8,212.9,171.7,212.8,171.6,212.8z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M10.9,202.8h-0.4c-0.1,0-0.2,0.1-0.2,0.2s0.1,0.2,0.2,0.2h0.4c0.3,0,0.6,0.1,0.8,0.4l3.3,4.5c0.4,0.5,0.8,0.9,1.3,1.1\n c0.1,0,0.2,0,0.2-0.1c0-0.1,0-0.2-0.1-0.2c-0.5-0.2-0.9-0.6-1.2-1l-3.3-4.5C11.7,203,11.3,202.8,10.9,202.8z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M161.6,202.8h-0.4c-0.4,0-0.8,0.2-1.1,0.5l-3.3,4.5c-0.3,0.4-0.7,0.8-1.2,1c-0.1,0-0.1,0.1-0.1,0.2\n c0,0.1,0.1,0.1,0.2,0.1c0.5-0.2,1-0.6,1.3-1.1l3.3-4.5c0.2-0.3,0.5-0.4,0.8-0.4h0.4c0.1,0,0.2-0.1,0.2-0.2\n C161.8,202.9,161.7,202.8,161.6,202.8z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M161.6,202.7H10.5c-0.2,0-0.4,0.2-0.4,0.4s0.2,0.4,0.4,0.4h151.2c0.2,0,0.4-0.2,0.4-0.4S161.8,202.7,161.6,202.7z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M0.4,103.9H0.3c-0.1,0-0.1,0.1-0.1,0.1c0,0.1,0.1,0.1,0.1,0.1h0.1c0.1,0,0.1-0.1,0.1-0.1C0.5,104,0.5,103.9,0.4,103.9z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M167.6,38.9c-0.1,0-0.2,0.1-0.2,0.2v203.4H4.6V39.1c0-0.1-0.1-0.2-0.2-0.2c-0.1,0-0.2,0.1-0.2,0.2v203.6\n c0,0.1,0.1,0.2,0.2,0.2h163.2c0.1,0,0.2-0.1,0.2-0.2V39.1C167.8,39,167.7,38.9,167.6,38.9z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M150.5,63.9h-129c-1.4,0-2.6,1.2-2.6,2.6v4.4c0,0.2,0.2,0.4,0.4,0.4h5.9c0.4,0,0.6,0.3,0.6,0.6v2.5\n c0,0.4-0.3,0.6-0.6,0.6h-5.9c-0.2,0-0.4,0.2-0.4,0.4v65.3c0,0.2,0.2,0.4,0.4,0.4h5.9c0.4,0,0.6,0.3,0.6,0.6v2.5\n c0,0.4-0.3,0.6-0.6,0.6h-5.9c-0.2,0-0.4,0.2-0.4,0.4V156c0,1.4,1.2,2.6,2.6,2.6h129c1.4,0,2.6-1.2,2.6-2.6v-10.9\n c0-0.2-0.2-0.4-0.4-0.4h-5.9c-0.4,0-0.6-0.3-0.6-0.6v-2.5c0-0.4,0.3-0.6,0.6-0.6h5.9c0.2,0,0.4-0.2,0.4-0.4V75.4\n c0-0.2-0.2-0.4-0.4-0.4h-5.9c-0.4,0-0.6-0.3-0.6-0.6v-2.5c0-0.4,0.3-0.6,0.6-0.6h5.9c0.2,0,0.4-0.2,0.4-0.4v-4.4\n C153.1,65.1,151.9,63.9,150.5,63.9z M19.7,70.5v-4c0-1,0.8-1.9,1.9-1.9h129c1,0,1.9,0.8,1.9,1.9v4h-5.5c-0.7,0-1.3,0.6-1.3,1.3\n v2.5c0,0.7,0.6,1.3,1.3,1.3h5.5v64.6h-5.5c-0.7,0-1.3,0.6-1.3,1.3v2.5c0,0.7,0.6,1.3,1.3,1.3h5.5V156c0,1-0.8,1.9-1.9,1.9h-129\n c-1,0-1.9-0.8-1.9-1.9v-10.5h5.5c0.7,0,1.3-0.6,1.3-1.3v-2.5c0-0.7-0.6-1.3-1.3-1.3h-5.5V75.7h5.5c0.7,0,1.3-0.6,1.3-1.3v-2.5\n c0-0.7-0.6-1.3-1.3-1.3L19.7,70.5L19.7,70.5z"
- },
- "children": []
- }
- ]
- },
- {
- "name": "g",
- "type": "element",
- "value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M47.7,52.7c-3.2,0-5.2,3.4-6.3,5.5c-0.1,0.1-0.1,0.2-0.2,0.3c-0.4,0.8-0.9,1.7-1.8,1.7H21c-3.5,0-6.3,2.8-6.3,6.3v95.9\n c0,3.5,2.8,6.3,6.3,6.3h130c3.5,0,6.3-2.8,6.3-6.3V66.6c0-3.5-2.8-6.3-6.3-6.3h-18.4c-0.9,0-1.3-0.9-1.8-1.7\n c-0.1-0.1-0.1-0.2-0.2-0.3c-1-1.9-2.2-3.9-4.2-5c-0.8-0.4-1.7-0.6-2.5-0.5H48.1C47.9,52.7,47.8,52.7,47.7,52.7z M21,168.1\n c-3.1,0-5.6-2.5-5.6-5.6V66.6c0-3.1,2.5-5.6,5.6-5.6h18.4c1.3,0,1.9-1.2,2.4-2.1c0.1-0.1,0.1-0.2,0.2-0.3\n c1.5-2.7,3.2-5.4,6.1-5.1h76c0,0,0,0,0,0c0.7-0.1,1.5,0.1,2.2,0.4c1.8,0.9,2.9,2.9,3.9,4.7c0.1,0.1,0.1,0.2,0.2,0.3\n c0.5,0.9,1.1,2.1,2.4,2.1H151c3.1,0,5.6,2.5,5.6,5.6v95.9c0,3.1-2.5,5.6-5.6,5.6H21z"
- },
- "children": []
- }
- ]
- }
- ]
- },
+ "children": []
+ }
+ ]
+ },
+ {
+ "name": "g",
+ "type": "element",
+ "value": "",
+ "attributes": {
+ "id": "Well_Labels"
+ },
+ "children": [
{
- "name": "g",
+ "name": "path",
"type": "element",
"value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M141,191.4H31.1c-1.3,0-2.3,1.1-2.3,2.3v9.2c0,0.2,0.2,0.4,0.4,0.4c0.2,0,0.4-0.2,0.4-0.4v-9.2c0-0.9,0.7-1.6,1.6-1.6H141\n c0.9,0,1.6,0.7,1.6,1.6v9.2c0,0.2,0.2,0.4,0.4,0.4s0.4-0.2,0.4-0.4v-9.2C143.3,192.5,142.3,191.4,141,191.4z"
- },
- "children": []
- }
- ]
- },
+ "attributes": {
+ "class": "cls-1",
+ "d": "m82.38,87.7c.27-.2.27-.71,0-.9m0,0c-.13-.11-.31-.16-.53-.16m0,0c-.22,0-.39.06-.53.16m0,0c-.28.2-.27.7,0,.9m0,0c.26.23.8.22,1.06,0m8.84.01c.12-.08.21-.19.28-.33m0,0c.07-.14.1-.3.1-.49m0,0c0-.12-.04-.23-.11-.33m0,0c-.07-.1-.17-.18-.29-.24m0,0c-.12-.06-.24-.09-.37-.09m0,0c-.67-.04-.9.7-.65,1.21m0,0c.06.12.15.22.26.29m0,0c.23.14.58.14.8-.02m10.22-.23c.26-.39.27-1.83,0-2.22m0,0c-.13-.23-.32-.34-.58-.34m0,0c-.25,0-.45.11-.59.34m0,0c-.27.38-.27,1.83,0,2.21m0,0c.24.46.92.46,1.16,0m-82.52.68h.33m-.41-.24c.05.06.08.14.08.24m-.34-.38c.12.03.2.08.25.14m-.06-.49h-.69m.69-2.84v2.84m.47-2.84h-.47m-6.54-43.11v-.41m-.23,1.6h-1.61m1.61.4v-.4m-1.61,1.57v-1.16m-.46,1.57h2.25m-2.25-3.57v3.57m2.11-10.97h-1.57m0,1.58v-1.18m1.75,1.18h-1.75m0-3.17h-.47m19.08,52.92v-.4m-1.79.83c-.07-.1-.1-.22-.1-.35m.37.62c-.11-.08-.2-.17-.27-.26m1.66,1.3c-.07-.13-.16-.25-.27-.34m.37.81c0-.18-.04-.34-.1-.47m-.04,1.01c.1-.15.14-.33.14-.53m-2.3.45c.1.17.24.31.43.41m-.13-.97h-.45m1.77.56c-.13.11-.3.17-.52.17m.71-.62c0,.18-.06.33-.19.44m-.96-1.53c.13.08.27.16.4.23m-.77-.5c.11.1.24.19.37.27m-.64-.62c.07.13.16.25.27.35m2.02-1.25h-2.4M10.03,15.72v-1.65m1.93,1.65h-1.93m1.93,1.93h.46m-.46-1.52v1.52m-1.93-1.52h1.93m-2.38,1.52h.46m-.46-3.57v3.57m.46-3.57h-.46m2.82,9h-.35m.35,1.84v-1.84m-1.34,1.85h1.34m-.56-.93c.04.1.06.19.07.28m-.24-.55c.07.08.13.17.17.27m-1.25-.47c.13-.05.26-.08.41-.08m-.75.33c.1-.11.21-.2.34-.25m-.56.69c.05-.18.13-.33.22-.44m-.17,1.9c-.09-.21-.13-.48-.13-.81m1.04,1.43c-.21,0-.39-.05-.54-.15m.95.05c-.12.07-.26.1-.41.1m.71-.37c-.08.11-.18.2-.3.27m.53.16c.12-.11.22-.23.29-.37m-.71.62c.16-.06.3-.15.42-.26m-.93.35c.18,0,.35-.03.51-.1m-1.32-.12c.23.14.5.22.82.22m-1.35-.85c.12.28.3.49.53.63m-.72-1.63c0,.39.06.72.19.99m0-1.98c-.12.27-.18.6-.18.98m1.52-1.82c-.31,0-.59.07-.81.22m2.08,27.64c-.14-.27-.35-.47-.63-.61m.83,1.61c0-.4-.07-.73-.2-.99m-1.9,2.76h.25m-.51,0h.26m-.58-3.57v3.57m.78-3.57h-.78m2.29,9.31c-.11-.11-.24-.2-.41-.26m.79,1.08c-.02-.15-.06-.3-.12-.44m-.37.44h.49m-.64-.38c.07.12.13.25.15.38m-.44-.67c.12.07.22.16.29.28m-.73-.39c.17,0,.31.04.43.11m-.98,2.62c-.15-.1-.26-.26-.34-.47m.88.62c-.22,0-.4-.05-.55-.15m.98.05c-.12.07-.26.1-.43.1m.73-.37c-.07.11-.17.2-.29.27m.44-.65c-.03.14-.08.27-.15.38m.63-.38h-.49m.28.58c.12-.17.19-.37.21-.58m-1.35,1.15c.25,0,.48-.05.67-.16m-1.49-.06c.23.14.5.22.82.22m-1.34-.84c.12.27.29.48.52.62m-.69-1.61c0,.39.06.72.18.99m0-1.98c-.12.28-.18.61-.18.99m2.77,8.45c.02-.09.04-.19.04-.29m-.16.53c.06-.07.1-.16.13-.25m-.36.44c.1-.06.17-.12.23-.2m-.26,1.84c.22-.16.34-.39.34-.69m-1.32.93c.44,0,.77-.08.99-.24m-2.13.24h1.15m-1.15-3.57v3.57m1.19-3.57h-1.19m.46,9.97l-.35-.97m1.82.97h-1.46m1.81-.97l-.35.97m.81-.97h-.47m-.83,3.57l1.29-3.57m-1.81,3.57h.52m-1.81-3.57l1.29,3.57m-.83-3.57h-.47m28.63,8.07c-.07-.13-.17-.24-.29-.33m.39.77c0-.16-.04-.31-.1-.44m0,.85c.06-.12.1-.26.1-.41m-.37.71c.12-.08.21-.18.27-.3m-.68.49c.16-.04.29-.11.41-.19m.11,1.5c.11-.14.16-.3.16-.5m-.6.81c.19-.07.34-.18.44-.31m-1.1.42c.24,0,.46-.04.65-.11m-1.27-.02c.19.08.39.13.62.13m-1.23-1.09c0,.23.06.43.17.59m.29-.59h-.46m.58.4c-.07-.1-.12-.24-.12-.4m.41.63c-.12-.05-.22-.13-.29-.23m.66.31c-.13,0-.25-.02-.37-.07m.79,0c-.11.05-.25.08-.42.08m.68-.28c-.06.08-.15.16-.26.2m.35-.48c0,.1-.03.19-.09.28m0-.59c.07.09.11.19.11.31m-.4-.53c.12.06.22.13.29.23m-1.02-.32h.31m-.31-.39v.39m.32-.4h-.32m.78-.08c-.13.05-.29.08-.46.08m.9-.67c0,.14-.04.26-.12.36m0-.71c.07.1.11.21.11.34m-.41-.57c.13.06.23.13.3.23m-.76-.31c.17,0,.32.02.46.08m-1.01.09c.14-.12.33-.18.55-.18m-.82.69c.04-.22.12-.39.27-.51m-.73.51h.46m-.29-.57c-.11.16-.17.35-.17.57m.61-.95c-.19.09-.34.21-.44.37m1.09-.51c-.25,0-.46.05-.65.13m1.2-.07c-.17-.05-.35-.07-.55-.07m9.86,3.63v-2.26m-.47,2.26h.47m-2.13-2.24l1.67,2.24m9.84-3.05c-.11-.18-.26-.32-.45-.43m-1.04,2.16c.14.05.29.07.46.07m-.85-.31c.12.11.25.19.39.24m-.3.92l-.09-1.15m.23-.21c-.08-.05-.17-.13-.26-.23m.51.32c-.08-.02-.17-.05-.25-.1m-.48-.79c.06-.13.13-.25.22-.36m1.46-.57c-.19-.1-.42-.15-.68-.15m10.1.59c-.1-.18-.24-.33-.43-.43m-1.45,2.44c-.07-.23-.09-.51-.07-.85m.37,1.37c-.14-.12-.24-.29-.31-.52m1.37.97c.17-.07.31-.18.42-.32m-.96.43c.2,0,.38-.04.55-.11m8.36-2.97c-.06-.2-.1-.38-.11-.53m.34,1.19c-.09-.23-.16-.45-.22-.66m1.25,3.04v-.4m-2.51.4h2.51m-2.51-.4v.4m2.01-.4h-2.01m11.3-1.02c-.1-.13-.24-.23-.4-.3m-1.68,1.32c.35.48,1.14.54,1.66.33m-1.66-1.35c-.22.26-.2.76,0,1.02m.41-1.32c-.16.07-.3.17-.4.3m.06-.47c.11.09.23.14.35.17m-.55-1.43c-.19.26-.23.65-.06.94m.54-1.29c-.2.08-.36.2-.48.36m1.19-.48c-.28,0-.51.04-.72.13m10.86.74c-.11-.28-.27-.5-.48-.65m-.71,3.45c.28,0,.52-.07.72-.22m-1.37.06c.18.1.4.16.66.16m.37-2.29c-.13-.05-.26-.08-.42-.08m7.97,2.32v-3.57m-.32,3.57h.32m-.41-.24c.05.06.08.14.08.24m-.15-.73h-.69m.69-2.84v2.84m.47-2.84h-.47m1.67.4c-.4.47-.44,1.77-.18,2.39m1.11-2.85c-.39,0-.7.16-.93.46m1.86,0c-.23-.31-.54-.46-.93-.46m.93,3.21c.46-.55.46-2.19,0-2.74m6.04,2.92c.05.06.08.14.08.24m-.34-.38c.12.03.2.08.25.14m10.37-2.85v-.07m.1.43c-.07-.1-.1-.22-.1-.35m.37.62c-.11-.08-.2-.17-.27-.26m1.66,1.3c-.07-.13-.16-.25-.27-.34m.37.81c0-.18-.04-.34-.1-.47m-.04,1.01c.1-.15.14-.33.14-.53m-.55.89c.18-.08.31-.2.41-.36m-1.03.48c.24,0,.44-.04.62-.13m-1.32-.02c.19.1.42.15.69.15m-1.12-.56c.1.17.24.31.43.41m-.58-.97c0,.21.05.4.15.57m1.1.16c-.24,0-.42-.07-.56-.2m1.08.03c-.13.11-.3.17-.52.17m.71-.62c0,.18-.06.33-.19.44m-.55-1.3c.13.07.26.15.37.23m-.77-.46c.13.08.27.16.4.23m-.77-.5c.11.1.24.19.37.27m-.64-.62c.07.13.16.25.27.35m-.37-1.25v.42m2.39-.42h-2.39m-.92,3.57v-3.57m-.33,3.57h.33m-.41-.24c.05.06.08.14.08.24m-.34-.38c.12.03.2.08.25.14m-.75-.19c.21,0,.38.01.5.05m-.5-.35v.3m.69-.3h-.69m.69-2.84v2.84m.47-2.84h-.47m-6.05,3.57v-3.57m-.32,3.57h.32m-.41-.24c.05.06.08.14.08.24m-.34-.38c.12.03.2.08.25.14m-.75-.49v.3m.69-.3h-.69m.69-2.84v2.84m.47-2.84h-.47m-82.58,3.47c.19.1.42.15.69.15m79.19-.48c.21,0,.38.01.5.05M12.14,70.23c-.1-.13-.27-.24-.52-.33m.66.82c0-.19-.05-.35-.15-.49m44.07,15.54c0-.25-.06-.46-.16-.65M10.48,33.67v-1.59m1.84,27.69c-.06-.14-.15-.27-.26-.38m88.14,28.62c.48.35,1.25.25,1.6-.26M10.44,26.14c-.16-.1-.28-.25-.36-.47m45.9,62.1h-1.73M10.32,59.78c.17-.23.42-.35.74-.35m-1,1.44c0-.5.08-.86.25-1.09m-.14,1.91c-.08-.21-.12-.48-.12-.81m88,26.91c.12.03.2.08.25.14m-.75-.19c.21,0,.38.01.5.05m-.5-.35v.3M10.4,43.08h1.61m-.25,19.46c.19-.11.35-.25.47-.42m96.87,25.62c.21,0,.38.01.5.05m-55.46-2.52c.09-.11.2-.19.32-.25M10.27,59.25c-.23.14-.4.36-.52.63m1.34-.85c-.32,0-.6.07-.82.22m1.38-.13c-.16-.06-.35-.1-.56-.1m81.08,27.41c0-.4-.05-.74-.16-1.02m0,1.98c.11-.26.17-.59.17-.96m-.63,1.57c.2-.14.36-.35.47-.61m-73.91.05v.3m71.64-.11c.1.18.24.33.42.43m.62-2.21c-.23,0-.44.05-.62.14M11.61,50.28c-.28-.14-.63-.2-1.07-.2m80.96,36.08c-.09-.1-.2-.17-.32-.22m27.76-.02c-.13-.07-.26-.14-.37-.22m.76.44c-.13-.08-.26-.15-.4-.22m.76.48c-.11-.1-.23-.18-.36-.26M10.59,53.64c.44,0,.79-.08,1.07-.22m78.61,31.65c.13-.1.29-.15.47-.15M9.86,53.65h.22m79.7,31.33c-.12.14-.18.3-.21.5M9.76,53.65h.11m80.89,30.9c-.2,0-.38.04-.55.11M11.82,23.33c-.1-.09-.21-.16-.35-.22m26.45,63.71c-.11-.14-.29-.25-.52-.34m80.68.61h-.46m.69.53c-.14-.13-.22-.31-.24-.53M12.37,69.04c0-.32-.12-.56-.35-.72m107.46,18.53c.07.1.1.22.1.36m-.37-.63c.11.08.2.17.27.27M11.91,24.59h-.87m.85-.31v.31m-.52-1.07c.11.05.2.12.28.2m106.03,61.3c0,.18.04.34.1.47M10.99,23.44c.15,0,.28.02.39.08m71.11,62.94c.26-.05.49-.26.62-.49M9.95,24.87c0-.25.02-.47.08-.65m72.87,63.56c.2-.26.22-.76,0-1.02M10.48,34.07h1.57m68.55,51.89c.07.13.16.24.27.32M11.85,25.55c-.02.13-.07.25-.15.37m.64-.37h-.49m.37.43c.07-.14.11-.28.12-.43m70.24,59.12c-.2-.08-.44-.13-.72-.13m1.2.48c-.11-.15-.27-.27-.48-.36m-9.83-.07h-.5M10.4,42.67v-1.19m0,0h1.84m-2.08-18.25c-.23.14-.4.35-.52.62m2.55,20.78v-.4m42.68,40.68c.25,0,.46.07.61.22M11.97,14.08v1.65m.46-1.65h-.46m.46,3.57v-3.57m59.83,70.52c.02.16.07.36.14.6M10.03,17.65v-1.52m16.66,68.9c0,.18.04.34.1.47m-.18,1.59c0,.21.05.4.15.57m38.39-1.89c0-.24-.05-.45-.15-.63m-1.04,2.71c-.21,0-.38-.06-.53-.18m-8.53-1.12c-.1,0-.19,0-.27-.02m10.28,1.28c.11-.14.18-.3.2-.5m-37.25.53c-.24,0-.42-.07-.56-.2m80.6.55h.33M12.05,23.08v.54m51.15,64.36c.21.16.46.23.76.23m-37.26-3.62v.42m1.2,3.2c.24,0,.44-.04.62-.13m8.26-1.43c.16,0,.3.04.42.09m62.56.64c.11.28.25.48.44.62m-9.99-3.35c-.17.08-.31.18-.43.32M11.47,23.12c-.14-.06-.3-.08-.49-.08m43.48,61.99c.12-.06.26-.09.42-.09m-1.36.53l.4.17m-35.82,2.11c.21,0,.38.01.5.05m9.93.31c.18-.08.31-.2.41-.36m18.34-2.23h-.59m73.42-.51v-.4m-1.88.4h1.88m-75.55.51v.42M11.65,53.42c.27-.14.47-.34.6-.59m25.54,31.98c-.12-.09-.27-.16-.44-.2M12.05,23.62c-.06-.1-.14-.2-.24-.29m26.27,63.96c0-.18-.06-.34-.17-.48m-10.6.8c-.14-.13-.22-.31-.24-.53m8.69.63c.11.16.26.29.45.37m36.86-1.21c.16.3.34.6.54.9m-36.05-1.82c-.08.1-.19.17-.32.23m17.76.75c.22,0,.41-.04.6-.13m26.87,1.31c.18-.08.32-.19.43-.33M12.05,34.07v-.4m60.62,52.32c.11.29.24.58.4.89m-18.96-.69h-.02m53,1.25v.3m-51.36-1.99c0,.16-.04.3-.11.41m18.51,1.61c-.13-.17-.25-.37-.38-.59m-18.25-2.04c.15.14.23.35.23.6m.27,2.42v-.4m-44.36-17.88c.14-.03.26-.07.35-.13m60.42,15.43c.07.24.16.5.27.79M12.23,41.08h-2.3m43.92,47.09h2.13m34.16-2.18c-.18.09-.32.22-.42.4m-62.53-1.31v-.07m19.47.91h.59m-20.06-.91h1.89m62.61,1.49c-.04-.12-.11-.23-.19-.33m-28.24.45c.09.09.2.16.32.21m1.54.47h-.43M12.26,52.84c.13-.26.19-.58.19-.95m51.47,32.66c-.28,0-.52.07-.72.22m-7.6,2.04c.18-.09.33-.22.44-.39M11.05,24.59v.34m96.72,59.68v2.84m.47-2.84h-.47m-61.55,0v.91m18.36-.81c-.19-.1-.41-.16-.66-.16m19.2,1.42c.17-.29.13-.68-.06-.94m-27.45,1.14c-.07.12-.17.21-.29.28M12.23,35.65v-.4m41.85,50.94l-.38.12m19.68.19c-.11-.24-.21-.48-.3-.71m-19.38.52l.16,1.86m9.73-1.35c.12.05.25.07.4.07m-9.86-.71h-.02m35.46-.71h.44m-25.57,2.22c-.13.1-.28.15-.47.15m1.05-1.47c.1-.17.15-.37.15-.6m-45.91,2.41v-3.57m71.49.32c.21,0,.39.06.54.17m-28.08-.33c-.2.14-.36.35-.47.61m11.01,1.81c-.12-.22-.24-.45-.35-.69M12.19,44.25h-1.79m81.12,40.52c-.21-.15-.47-.22-.77-.22m-34.72,1.86c.11-.17.17-.38.17-.64m6.52,1.56c.11.29.26.5.47.66m28.08-2.9c.15.11.26.28.34.51m-28.89-.23c-.11.27-.17.59-.17.96m-16.34-.82h-1.68m10.37-.97c-.22,0-.43.04-.61.12m1.02,1.78c-.12.07-.26.1-.41.1m-7.65-.63v-.4M10.01,32.08v3.57m43.81,49.34c-.13.14-.23.3-.3.48m36.49.01c.04-.16.13-.29.26-.4m-.54,1.31c-.1.17-.15.37-.15.61m-42.91-1.49v-.91m-34.64-16.28c-.23-.16-.58-.24-1.03-.24m17.7,18.31c-.11-.1-.23-.18-.36-.26m34.73.16c.05.12.11.23.2.32m-.71-.28c0,.38.05.72.16,1m1.26-.43c.24,0,.44-.05.62-.14m-36.76-.42c.13.07.26.15.37.23m80.03,1.6v-3.57m-.47,2.84h-.69m-78.75-1.31c-.13-.08-.26-.15-.4-.22m61.64,1.09c0,.24.05.45.15.63m-25.13-.87c.18-.09.31-.22.41-.39m-36.8.2c.11.08.2.17.27.27m25.81-2.18c-.19.08-.35.19-.48.32m-7.14-.38h-.45M10.01,35.65h2.22m79.39,49.95c.07.23.1.53.08.89m-27,.8c-.05.17-.13.3-.26.4m-35.95-.85c.07.1.1.22.1.36m-.65-1.29c-.13-.07-.26-.14-.37-.22m55.05.23c.18-.25.13-.64-.13-.83m-.17,1.06c.13-.06.23-.14.3-.24m-.13-.82c-.16-.12-.37-.18-.63-.18m0,0c-.59-.05-1.1.48-.76,1.01m0,0c.24.36.85.4,1.22.24M11.05,69.69c.16,0,.3-.02.43-.06m.43-.57c0-.2-.08-.35-.23-.45m0,0c-.16-.1-.38-.15-.68-.15m-.72,0v1.23m0,0h.78m-.05-1.23h-.72m1.52.96c.08-.09.12-.22.12-.36m-.43.57c.13-.04.23-.11.31-.2m-.19,1.7c.16-.1.24-.25.24-.46m0,0c0-.11-.02-.2-.07-.28m-.72-.3h-.78m1.31.12c-.08-.05-.16-.08-.25-.1m-.34,1.16c.25,0,.46-.05.62-.15m-.28-1.01c-.09-.02-.18-.03-.28-.03m-.78,0v1.19m1.5-.89c-.05-.08-.11-.13-.19-.18m-1.31,1.07h.71m-.6,7.2l.61,1.73m0,0l.61-1.73m0,0h-1.22m35.82,7.44h-1.23m1.23,1.66v-1.66m-1.23,0l1.23,1.66m18.37-1.41c.12-.23.12-.62-.01-.85m0,0c-.06-.12-.16-.22-.27-.29m-.8.01c-.12.08-.21.19-.28.33m1.1,1.06c.11-.06.2-.15.26-.27m-.67-1.24c-.16,0-.29.04-.41.12m.8-.02c-.12-.07-.24-.1-.39-.1m-.68.45c-.07.14-.1.3-.1.48m.4.58c.24.13.58.12.79,0m-1.2-.58c0,.25.19.46.41.58M11.8,52.7c.11-.2.17-.47.17-.82m-1.4,1.38c.29,0,.55-.04.75-.13m-.78-2.66h-.31m1.08.14c-.22-.09-.47-.14-.76-.14m1.25.58c-.12-.2-.28-.35-.49-.44m.66,1.27c0-.35-.06-.62-.17-.83m-.47,2.07c.21-.08.37-.23.48-.43m-1.57.56h.34m-.34-2.79v2.79m71.1,33.55c-.28.2-.27.7,0,.9"
+ },
+ "children": []
+ }
+ ]
+ },
+ {
+ "name": "g",
+ "type": "element",
+ "value": "",
+ "attributes": {
+ "id": "Wells"
+ },
+ "children": [
{
- "name": "g",
+ "name": "path",
"type": "element",
"value": "",
- "attributes": {},
- "children": [
- {
- "name": "path",
- "type": "element",
- "value": "",
- "attributes": {
- "d": "M139,195.1H33.1c-0.4,0-0.7,0.3-0.7,0.7v7.5c0,0.1,0.1,0.2,0.2,0.2c0.1,0,0.2-0.1,0.2-0.2v-7.5c0-0.2,0.1-0.3,0.3-0.3H139\n c0.2,0,0.3,0.1,0.3,0.3v7.4c0,0.1,0.1,0.2,0.2,0.2c0.1,0,0.2-0.1,0.2-0.2v-7.4C139.7,195.4,139.4,195.1,139,195.1z"
- },
- "children": []
- }
- ]
+ "attributes": {
+ "class": "cls-1",
+ "d": "m122.09,79.84l.1-.09m-1.63,2.61l.04-.13m-104.49,0l.04.13m-1.63-2.61l.1.09m0-64.98l-.1.1m1.63-2.61l-.04.13m104.49,0l-.04-.13m1.63,2.61l-.1-.1m-14.23,5.68v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69c1.64-.38,2.93-1.67,3.31-3.31m-5.31,3.69v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m21.31-3.31v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-77.69-3.31v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69c1.64-.38,2.93-1.67,3.31-3.31m9.38,61h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m0-7c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m7,0v-.38m0-8.62v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m43-18v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m0-.38v.38m16,18v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m0-7h.38m-3.69,3.31v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m0-16c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m3.31,3.69v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-12.31v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m21.31,14.69v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m-3.69,3.31v.38m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-23.69-48.31v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69c1.64-.38,2.93-1.67,3.31-3.31m.38,0c.38,1.64,1.67,2.93,3.31,3.31m-7,0v.38m3.31-3.69h.38m30.31,12.69v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m-3.69,3.31v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m12.69,48.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m0,0h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m0-.38v.38m7-9v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m-3.69,3.31v.38M62.87,20.55v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m-3.69,3.31v.38m0-.38c1.64-.38,2.93-1.67,3.31-3.31m5.69,3.31v.38m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m0-7c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m21.31,3.69v-.38m-3.69-3.31h.38m0,7h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m0-.38v.38m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31M23.55,61.85c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m0,0h-.38m3.69-3.31v-.38m-7,0c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m7-36v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m-3.31-3.69v.38m0-.38c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m-.38-9h.38m3.31,3.69c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m-7,0v.38m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m-3.31-3.69c1.64-.38,2.93-1.67,3.31-3.31m21.69,3.69v-.38m-3.69-3.31h.38m-3.69,3.31v.38m0-.38c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m.38-7c.38,1.64,1.67,2.93,3.31,3.31m5.31-3.31h.38m-3.69,3.31v.38m3.69,3.31h-.38m3.69-3.31v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69c-1.64.38-2.93,1.67-3.31,3.31m30.31,32.69v-.38m-3.69-3.31h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69c1.64-.38,2.93-1.67,3.31-3.31m.38,0c.38,1.64,1.67,2.93,3.31,3.31m-7,0v.38m27,17.62v.38m3.69,3.31h-.38m.38-7c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m3.31,3.69v-.38m0,.38c-1.64.38-2.93,1.67-3.31,3.31M50.55,25.87c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31v-.38m0,.38c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m-3.69,3.31v.38m-14.69,41.31h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m.38,0c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m-3.31-3.69v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m7,0v-.38m0,.38c-1.64.38-2.93,1.67-3.31,3.31m0-16c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m-3.31-3.69v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m0-16c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m0,0h.38m0,7h-.38m-3.31-3.69v.38m7,0v-.38m0,.38c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m7-9v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.69,3.31h-.38m0,0c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m-3.69-21.69c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m0,0h-.38m-3.31-3.69v.38m7,0v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-12.69,48.31v.38m3.69,3.31h-.38m.38-7c.38,1.64,1.67,2.93,3.31,3.31m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m7,0v-.38m0,.38c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m18.38-45c.38,1.64,1.67,2.93,3.31,3.31m-7,0v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69v-.38m5.69,14.69c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m-3.31-3.69v.38m7,0v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m-3.69-12.69c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69v.38m7,0v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m5.31,12.31c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m3.69-3.31v-.38m-3.69-3.31h.38m0,0c.38,1.64,1.67,2.93,3.31,3.31m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69v.38m3.69-12.69c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m-3.31-3.69c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69v-.38m0,.38c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69v.38m9,17.62c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m0,0h-.38m0-7h.38m0,0c.38,1.64,1.67,2.93,3.31,3.31m0,.38v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.69-12.69c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.69,3.31h-.38m0-7h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m-7-9c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m-3.31-3.69v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m-3.69-3.31h.38m0,0c.38,1.64,1.67,2.93,3.31,3.31m0-8.62v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m0,7h-.38m-3.31-3.69c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69v.38m12.69,32.31c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69v.38m7,0v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m18,9c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m3.69-3.31v-.38m-7,0v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m0-9c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m-3.31-3.69v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m0-9.38c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m-3.31-3.69v.38m3.31-3.69h.38m3.31,3.69c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m0,.38v-.38m-3.31-12.31c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.69,3.31h-.38m0-7h.38m3.31,3.69v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m0-25c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m-3.31-3.69v.38m7,0v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m3.31,3.69c-1.64.38-2.93,1.67-3.31,3.31m8.62,2h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m-3.31-3.69v.38m7,0v-.38m-7,0c1.64-.38,2.93-1.67,3.31-3.31m.38,0c.38,1.64,1.67,2.93,3.31,3.31m0,.38c-1.64.38-2.93,1.67-3.31,3.31m8.62-16h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m-3.31-3.69v.38m7,0v-.38m0,.38c-1.64.38-2.93,1.67-3.31,3.31m-36,38c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m0,0h-.38m-3.31-3.69v.38m3.31-3.69h.38m3.31,3.69v-.38m2,0c1.64-.38,2.93-1.67,3.31-3.31m.38,0c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m0-7h.38m3.31,3.69v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m0-.38v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m0-52c.38,1.64,1.67,2.93,3.31,3.31m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m-3.31-3.69c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m-3.69-3.31h.38m17.62,34c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m.38-7c.38,1.64,1.67,2.93,3.31,3.31m0,.38v-.38m-7,0c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m-3.69-5.69c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m0-7h.38m-3.69,3.31v.38m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m-84.31-12.31c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m-3.31,3.69h-.38m0-7h.38m26.62,18h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m0-7c.38,1.64,1.67,2.93,3.31,3.31m-7,0v.38m0-.38c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69v-.38m5.69-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m-3.31-3.69c1.64-.38,2.93-1.67,3.31-3.31m0,0h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m0-.38v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m-7,9c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m3.69,3.31h-.38m.38-7c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m3.31,3.69v-.38m-7,0v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m-27-34c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m0,0c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m-3.69,3.31v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m38-9c1.64-.38,2.93-1.67,3.31-3.31m.38,0c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m3.31,3.69v-.38m-7,0v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m0,0h-.38m-57.31,14.31v.38m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m3.69-3.31v-.38m-7,0c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m3.31,3.69c-1.64.38-2.93,1.67-3.31,3.31m27,27h-.38m-3.31-3.69c1.64-.38,2.93-1.67,3.31-3.31m0,0h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m0,.38c-1.64.38-2.93,1.67-3.31,3.31m3.31-3.31v-.38m-7,0v.38m45-36.38c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.69,3.31h-.38m0-7h.38m3.31,3.69c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m0,.38v-.38m-39.31-5.31h-.38m.38-7c.38,1.64,1.67,2.93,3.31,3.31m0,.38c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m7,0v-.38m-39.31,23.69c.38,1.64,1.67,2.93,3.31,3.31m-7,0v.38m3.69,3.31h-.38m3.69-3.31v-.38m-7,0c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m27,8.62c1.64-.38,2.93-1.67,3.31-3.31m.38,0c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m0-7h.38m3.31,3.69v-.38m0,.38c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m0-.38v.38m30.31-23.69c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.69,3.31h-.38m.38-7c.38,1.64,1.67,2.93,3.31,3.31m-3.69-3.31h.38m3.31,3.69v-.38m-39.31,5.69c.38,1.64,1.67,2.93,3.31,3.31m-7,0c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69v-.38m-3.69-3.31h.38m-3.69,3.31v.38m7,0c-1.64.38-2.93,1.67-3.31,3.31m0,0h-.38m0,0c-.38-1.64-1.67-2.93-3.31-3.31m21.69,30.31h-.38m-3.31-3.69c1.64-.38,2.93-1.67,3.31-3.31m.38,0c.38,1.64,1.67,2.93,3.31,3.31m0,.38v-.38m-3.69-3.31h.38m-.38,7c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69v.38m-18-36.38c1.64-.38,2.93-1.67,3.31-3.31m0,7c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m3.31,3.69c-1.64.38-2.93,1.67-3.31,3.31m0-7c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m-3.31-3.69v.38m7,0v-.38m23.69,23.69c.38,1.64,1.67,2.93,3.31,3.31m0,.38v-.38m-7,0c1.64-.38,2.93-1.67,3.31-3.31m0,0h.38m0,7h-.38m3.69-3.31c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m0-.38v.38m-27-9.38c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69v.38m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m0-7h.38m3.31,3.69v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m30.69,14.31c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m-3.31-3.69v.38m3.31-3.69h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69c-1.64.38-2.93,1.67-3.31,3.31m-.38,0c-.38-1.64-1.67-2.93-3.31-3.31m7,0v-.38m14.69-39.31c.38,1.64,1.67,2.93,3.31,3.31m0,.38v-.38m-3.69-3.31h.38m0,7h-.38m-3.31-3.69c1.64-.38,2.93-1.67,3.31-3.31m-3.31,3.31v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m30.31-3.31v-.38m-3.31-3.31c.38,1.64,1.67,2.93,3.31,3.31m-3.31,3.69h-.38m-3.31-3.69v.38m3.31,3.31c-.38-1.64-1.67-2.93-3.31-3.31m3.31-3.69h.38m-3.69,3.31c1.64-.38,2.93-1.67,3.31-3.31m3.69,3.69c-1.64.38-2.93,1.67-3.31,3.31m-3.69,14.31v.38m3.69-3.69c.38,1.64,1.67,2.93,3.31,3.31m0,.38v-.38m-7,0c1.64-.38,2.93-1.67,3.31-3.31m.38,7h-.38m0,0c-.38-1.64-1.67-2.93-3.31-3.31m7,0c-1.64.38-2.93,1.67-3.31,3.31m-.38-7h.38m3.31-5.31v-.38m-3.69,3.69c-.38-1.64-1.67-2.93-3.31-3.31m0-.38c1.64-.38,2.93-1.67,3.31-3.31m.38,0c.38,1.64,1.67,2.93,3.31,3.31m0,.38c-1.64.38-2.93,1.67-3.31,3.31m-3.69-3.69v.38m3.69,3.31h-.38m0-7h.38m8.65-28.24l.08.06m-2.32-3.72l.02.1M14.52,79.1l-.08-.06m2.32,3.72l-.02-.1m0-70.59l.02-.1m-2.32,3.72l.08-.06m105.46,67.04l-.02.1m2.32-3.72l-.08.06m-78.79-27.24c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm14.75-9c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.33,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm7.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm34.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-75.25-9c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm1.9,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.3,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm25.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-19.45-9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm34.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-82.15,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm70.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-28.45,9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-46.45,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm7.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm79.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-21.25,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm1.9,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.3,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm25.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-84.25-9c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.33,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm43.85,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-12.25,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.33,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0ZM14.61,42.85c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm1.9,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.3,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm5.75,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.33,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm7.85,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm59.75,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm1.9,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.3,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-1.45-9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0ZM25.71,24.87c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm25.85,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-10.45,9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm43.85,9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm25.85,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0ZM43.71,24.87c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm23.75,9c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.33,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm43.55-9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0ZM14.61,15.87c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.33,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm7.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm61.55,63c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0ZM50.6,15.87c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.33,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm25.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-55.15,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm7.55,9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-1.15-9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-73.45,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.55,27c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-10.45,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm34.85,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-55.15,9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm88.85,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-10.45,9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-19.15-9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-10.15,9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-46.15-9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm34.55,9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-19.15,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-19.15,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-19.15-9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm70.85,9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-46.45,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm61.85-9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-82.15,9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-10.15,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-3.25,18c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm1.9,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.3,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm43.85-18c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm52.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-19.45,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-37.15-9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-28.15,27c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm79.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-37.15-9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm23.74,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.33,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-57.25,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm1.9,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.3,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-10.15,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm50.75,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm1.9,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.3,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-66.25-18c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm1.9,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.3,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-10.45,27c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.85,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-10.15,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.85,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-37.15-9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm43.85,9c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-10.15-27c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm7.85,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm16.85,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-57.25,18c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm.33,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm43.55,9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm7.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-82.45-9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm79.55,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-10.15,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-.3,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-64.45,0c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm-.1,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.2,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm.03,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-1.45,9c-.05-3.18,4.94-3.18,4.9,0,.05,3.18-4.94,3.18-4.9,0Zm-1.8,0c-.08-5.52,8.58-5.52,8.5,0,.08,5.51-8.58,5.51-8.5,0Zm2.1,0c-.04-2.79,4.34-2.79,4.3,0,.04,2.79-4.34,2.79-4.3,0Zm-2.2,0c-.08-5.64,8.78-5.64,8.7,0,.08,5.64-8.78,5.64-8.7,0Zm2.23,0c-.04-2.75,4.28-2.75,4.24,0,.04,2.75-4.28,2.75-4.24,0Zm1.09,0c-.02-1.34,2.08-1.34,2.06,0,.02,1.34-2.08,1.34-2.06,0Zm.03,0c-.02-1.3,2.02-1.3,2,0,.02,1.3-2.02,1.3-2,0Zm-9.93-12.99c-3.28,1.48-3.3,6.49,0,7.97m0-34.97c-3.28,1.48-3.3,6.49,0,7.97m0-16.97c-3.28,1.48-3.3,6.49,0,7.97m0-16.97c-3.28,1.48-3.3,6.49,0,7.97m14.92-14.92h1.03m7.97,0h1.03m7.97,0c-1.48-3.28-6.49-3.3-7.97,0m7.97,0h1.03m7.97,0c-1.48-3.28-6.49-3.3-7.97,0m34.97,0h1.03m7.97,0c-1.48-3.28-6.49-3.3-7.97,0m7.97,0h1.03m7.97,0c-1.48-3.28-6.49-3.3-7.97,0m7.97,0h1.03m14.92,5.92v1.02m0,7.97c3.28-1.48,3.3-6.49,0-7.97m0,16.98c3.28-1.48,3.3-6.49,0-7.97m0,16.97c3.28-1.48,3.3-6.49,0-7.97m0,7.97v1.03m0,7.97c3.28-1.48,3.3-6.49,0-7.97m0,7.98v1.02m0,7.97c3.28-1.48,3.3-6.49,0-7.97m0,7.98v1.02m0,7.97c3.28-1.48,3.3-6.49,0-7.97m-14.92,14.92h-1.03m-25.97,0c1.48,3.28,6.49,3.3,7.97,0m-16.97,0c1.48,3.28,6.49,3.3,7.97,0m-7.98,0h-1.02m-7.98,0h-1.02m-7.98,0h-1.03m-16.97,0c1.48,3.28,6.49,3.3,7.97,0m-16.97,0c1.48,3.28,6.49,3.3,7.97,0m-14.92-5.92c-6.95,3.72,2.2,12.87,5.92,5.92m-5.92-32.92v-1.03m96.94,33.94h-1.02m-25.97,0c1.48,3.28,6.49,3.3,7.97,0m24.94-42.94v1.03m0,34.97v1.03M76.84,13.94h1.02m-60.94,51.94v-1.02m0-7.98v-1.02m0-34.98v-1.02m50.92-5.92c-1.48-3.28-6.49-3.3-7.97,0m-19.02,0c-1.48-3.28-6.49-3.3-7.97,0m27,66.86c1.48,3.28,6.49,3.3,7.97,0m46.03,0c3.72,6.95,12.87-2.2,5.92-5.92m-41.92,5.92h-1.02m10.03,0h-1.03m-9-66.86c-1.48-3.28-6.49-3.3-7.97,0m-51.94,24.94v-1.03m33.95,42.94c1.48,3.28,6.49,3.3,7.97,0m60.94-51.94v1.03m-60.94-15.94h1.02m7.98,0h1.02M16.93,47.88c-3.28,1.48-3.3,6.49,0,7.97M112.84,13.94c-1.48-3.28-6.49-3.3-7.97,0M16.93,74.88v-1.03m15.95,6.94h-1.03m-7.98,0h-1.02m0-66.86c-3.72-6.95-12.87,2.2-5.92,5.92m87.95,60.94c1.48,3.28,6.49,3.3,7.97,0M22.85,13.94h1.02m-6.94,42.94c-3.28,1.48-3.3,6.49,0,7.97M112.84,13.94h1.02m-18,66.86c1.48,3.28,6.49,3.3,7.97,0M85.84,13.94c-1.48-3.28-6.49-3.3-7.97,0m-36,66.86h-1.03m1.03,0c1.48,3.28,6.49,3.3,7.97,0M119.78,19.85c6.95-3.72-2.2-12.87-5.92-5.92m-18,66.86h-1.03M16.93,29.88v-1.03m14.92-14.92c-1.48-3.28-6.49-3.3-7.97,0"
+ },
+ "children": []
}
]
}
diff --git a/step-generation/src/types.ts b/step-generation/src/types.ts
index ad1ea16df144..f28ccf584885 100644
--- a/step-generation/src/types.ts
+++ b/step-generation/src/types.ts
@@ -4,6 +4,7 @@ import type {
THERMOCYCLER_MODULE_TYPE,
HEATERSHAKER_MODULE_TYPE,
MAGNETIC_BLOCK_TYPE,
+ ABSORBANCE_READER_TYPE,
CreateCommand,
LabwareDefinition2,
ModuleType,
@@ -73,6 +74,9 @@ export interface HeaterShakerModuleState {
export interface MagneticBlockState {
type: typeof MAGNETIC_BLOCK_TYPE
}
+export interface AbsorbanceReaderState {
+ type: typeof ABSORBANCE_READER_TYPE
+}
export interface ModuleTemporalProperties {
slot: DeckSlot
moduleState:
@@ -81,6 +85,7 @@ export interface ModuleTemporalProperties {
| ThermocyclerModuleState
| HeaterShakerModuleState
| MagneticBlockState
+ | AbsorbanceReaderState
}
export interface LabwareEntity {